<?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>152888</bug_id>
          
          <creation_ts>2016-01-08 06:04:44 -0800</creation_ts>
          <short_desc>[GTK] Cleanup RenderThemeGtk</short_desc>
          <delta_ts>2016-01-13 07:24:29 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebKitGTK</component>
          <version>WebKit Local Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>Gtk</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Carlos Garcia Campos">cgarcia</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>bugs-noreply</cc>
    
    <cc>commit-queue</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>glenn</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>mario</cc>
    
    <cc>mcatanzaro</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1153804</commentid>
    <comment_count>0</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-08 06:04:44 -0800</bug_when>
    <thetext>Use a common path for GTK+ 3.19 and previous versions, simplifying the code and removing a lot of ifdefs.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153805</commentid>
    <comment_count>1</comment_count>
      <attachid>268539</attachid>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-08 06:15:09 -0800</bug_when>
    <thetext>Created attachment 268539
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153806</commentid>
    <comment_count>2</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-08 06:15:50 -0800</bug_when>
    <thetext>This has been tested with GTK+ from current master and the internal jhbuild.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1153827</commentid>
    <comment_count>3</comment_count>
      <attachid>268539</attachid>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-08 08:23:26 -0800</bug_when>
    <thetext>Comment on attachment 268539
Patch

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

Excellent patch; this worked quite well. Thanks for taking the time to work on this. Please watch the bots when this lands.

Looks like this also fixes bug #151502. Please close that when this lands.

Somewhat related: look at bug #152273.

&gt; Source/WebCore/rendering/RenderThemeGtk.cpp:140
&gt; +enum RenderThemePart {

I prefer to almost always use enum class in new code, both for safety, and also because I think it&apos;s more readable to use the RenderThemePart:: scope everywhere. But if you prefer to avoid the scoping, this is fine.

&gt; Source/WebCore/rendering/RenderThemeGtk.cpp:379
&gt; +    gtk_style_context_set_state(context.get(), gtk_widget_path_iter_get_state(path.get(), -1));

What&apos;s this for? Looks like a mistake. You have not set any state on the GtkWidgetPath. If this code actually does anything, then I would suspect that context might be inheriting its state from its parent... in which case it would be clearer to pass GTK_STATE_FLAGS_NONE.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1154349</commentid>
    <comment_count>4</comment_count>
    <who name="Carlos Garcia Campos">cgarcia</who>
    <bug_when>2016-01-11 03:39:46 -0800</bug_when>
    <thetext>Committed r194847: &lt;http://trac.webkit.org/changeset/194847&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155064</commentid>
    <comment_count>5</comment_count>
    <who name="Mario Sanchez Prada">mario</who>
    <bug_when>2016-01-13 05:51:34 -0800</bug_when>
    <thetext>This patch broke accessibility/gtk/entry-and-password.html. See bug 153062.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1155074</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Catanzaro">mcatanzaro</who>
    <bug_when>2016-01-13 07:24:29 -0800</bug_when>
    <thetext>This patch broke ~85 layout tests. Carlos fixed ~70 already so there are ~15 left to discover, including accessibility/gtk/entry-and-password.html. Thanks for helping Mario. :)</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>268539</attachid>
            <date>2016-01-08 06:15:09 -0800</date>
            <delta_ts>2016-01-08 08:23:26 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>wk-render-theme-gtk.diff</filename>
            <type>text/plain</type>
            <size>76541</size>
            <attacher name="Carlos Garcia Campos">cgarcia</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZwppbmRleCA4ZDM4OWNmLi5jYWVhNDljIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsODMg
QEAKKzIwMTYtMDEtMDggIENhcmxvcyBHYXJjaWEgQ2FtcG9zICA8Y2dhcmNpYUBpZ2FsaWEuY29t
PgorCisgICAgICAgIFtHVEtdIENsZWFudXAgUmVuZGVyVGhlbWVHdGsKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE1Mjg4OAorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFVzZSBhIGNvbW1vbiBwYXRoIGZvciBH
VEsrIDMuMTkgYW5kIHByZXZpb3VzIHZlcnNpb25zLCBzaW1wbGlmeWluZworICAgICAgICB0aGUg
Y29kZSBhbmQgcmVtb3ZpbmcgYSBsb3Qgb2YgaWZkZWZzLgorCisgICAgICAgICAtIGNyZWF0ZVN0
eWxlQ29udGV4dCgpIG5vdyByZWNlaXZlcyBhIHRoZW1lIHBhcnQgZW51bSB2YWx1ZSwgYW5kCisg
ICAgICAgICAgIGFuIG9wdGlvbmFsIHBhcmVudCBHdGtTdHlsZUNvbnRleHQuIEl0IGVuY2Fwc3Vs
YXRlcyBhbGwgdGhlCisgICAgICAgICAgIGRpZmZlcmVuY2VzIGJldHdlZW4gR1RLKyAzLjE5IGFu
ZCBwcmV2aW91cyB2ZXJzaW9uIGxlYXZpbmcgdGhlCisgICAgICAgICAgIHJlbmRlcmluZyBjb2Rl
IGNvbW1vbiBhbmQgZnJlZSBvZiBpZmRlZnMuCisgICAgICAgICAtIFN0b2NrIGljb25zIHN1cHBv
cnQgaGF2ZSBiZWVuIHJlbW92ZWQsIHNpbXBsaWZ5aW5nIHRoZSBjb2RlCisgICAgICAgICAgIHRo
YXQgbm93IGFsd2F5cyByZW5kZXJzIHN5bWJvbGljIGljb25zLCB1cGRhdGluZyB0aGUgY29sb3Jz
CisgICAgICAgICAgIGRlcGVuZGluZyBvbiB0aGUgY3VycmVudCBzdGF0ZS4KKyAgICAgICAgIC0g
TWVkaWEgYnV0dG9uIGFuZCBjb2xvcnMgaGF2ZSBiZWVuIHJlbW92ZWQsIGJlY2F1c2UgdGhleSBh
cmUKKyAgICAgICAgICAgdW51c2VkIG5vdyB0aGF0IHdlIHJlbmRlciB0aGUgbWVkaWEgY29udHJv
bHMgd2l0aCBDU1MuCisgICAgICAgICAtIENvbWJvQm94IHNlcGFyYXRvcnMgc3VwcG9ydCBoYXMg
YWxzbyBiZWVuIHJlbW92ZWQuIEluIEdUSysgMy4xOQorICAgICAgICAgICBjb21ibyBib3hlcyBu
byBsb25nZXIgaGF2ZSBzZXBhcmF0b3JzIGFuZCBtb3N0IG9mIHRoZSBHVEsrCisgICAgICAgICAg
IHRoZW1lcyBkb24ndCB1c2UgdGhlIGVpdGhlciwgc28gaXQncyBiZXR0ZXIgdG8gc2ltcGxlIG5v
dCByZW5kZXIKKyAgICAgICAgICAgdGhlbSBhbnltb3JlIGluIFdlYktpdCBlaXRoZXIuCisgICAg
ICAgICAtIENvZGUgdG8gcGFpbnQgY2FwcyBsb2NrIGluZGljYXRvciBoYXMgYmVlbiByZW1vdmVk
IHRvbywgc2luY2UKKyAgICAgICAgICAgY2FwcyBsb2NrIGluZGljYXRvciBpcyBub3cgc2hhZG93
IGRvbSBhbmQgYXV0b21hdGljYWxseQorICAgICAgICAgICByZW5kZXJlZCBieSBXZWJDb3JlLgor
CisgICAgICAgICogcmVuZGVyaW5nL1JlbmRlclRoZW1lR3RrLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OmNyZWF0ZVN0eWxlQ29udGV4dCk6CisgICAgICAgIChXZWJDb3JlOjpsb2FkVGhlbWVkSWNv
bik6CisgICAgICAgIChXZWJDb3JlOjpndGtJY29uU3RhdGVGbGFncyk6CisgICAgICAgIChXZWJD
b3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QpOgorICAgICAgICAoV2ViQ29y
ZTo6c2V0VG9nZ2xlU2l6ZSk6CisgICAgICAgIChXZWJDb3JlOjpwYWludFRvZ2dsZSk6CisgICAg
ICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6c2V0Q2hlY2tib3hTaXplKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludENoZWNrYm94KToKKyAgICAgICAgKFdlYkNv
cmU6OlJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVu
ZGVyVGhlbWVHdGs6OnBhaW50UmFkaW8pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OnBhaW50QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OmdldENvbWJvQm94TWV0cmljcyk6
CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJbnRlcm5hbFBhZGRpbmdM
ZWZ0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFk
ZGluZ1JpZ2h0KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVy
bmFsUGFkZGluZ1RvcCk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cG9wdXBJ
bnRlcm5hbFBhZGRpbmdCb3R0b20pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OnBhaW50TWVudUxpc3QpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50
VGV4dEZpZWxkKToKKyAgICAgICAgKFdlYkNvcmU6OmFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxl
KToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjphZGp1c3RTZWFyY2hGaWVsZFJl
c3VsdHNEZWNvcmF0aW9uUGFydFN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50SWNvbik6
CisgICAgICAgIChXZWJDb3JlOjpwYWludEVudHJ5SWNvbik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZFJlc3VsdHNEZWNvcmF0aW9uUGFydCk6Cisg
ICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6YWRqdXN0U2VhcmNoRmllbGRDYW5jZWxC
dXR0b25TdHlsZSk6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFy
Y2hGaWVsZENhbmNlbEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6
c2hvdWxkSGF2ZUNhcHNMb2NrSW5kaWNhdG9yKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRo
ZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1l
R3RrOjpwYWludFNsaWRlclRodW1iKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3Rr
OjphZGp1c3RTbGlkZXJUaHVtYlNpemUpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVH
dGs6OnBhaW50UHJvZ3Jlc3NCYXIpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6
OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKToKKyAgICAgICAgKFdlYkNvcmU6OnBhaW50U3Bp
bkFycm93QnV0dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludElu
bmVyU3BpbkJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpzdHlsZUNvbG9yKToKKyAgICAgICAg
KFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUFjdGl2ZVNlbGVjdGlvbkJhY2tncm91
bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFj
dGl2ZVNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJU
aGVtZUd0azo6cGxhdGZvcm1BY3RpdmVTZWxlY3Rpb25Gb3JlZ3JvdW5kQ29sb3IpOgorICAgICAg
ICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtSW5hY3RpdmVTZWxlY3Rpb25Gb3Jl
Z3JvdW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3Jt
QWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3Jl
OjpSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3Jv
dW5kQ29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0
aXZlTGlzdEJveFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcik6CisgICAgICAgIChXZWJDb3JlOjpS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2ZUxpc3RCb3hTZWxlY3Rpb25Gb3JlZ3JvdW5k
Q29sb3IpOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnN5c3RlbUNvbG9yKToK
KyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhQnV0dG9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRv
bik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFpbnRNZWRpYU11dGVCdXR0
b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0
dG9uKToKKyAgICAgICAgKFdlYkNvcmU6OlJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhU2Vla0Jh
Y2tCdXR0b24pOgorICAgICAgICAoV2ViQ29yZTo6UmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFT
ZWVrRm9yd2FyZEJ1dHRvbik6CisgICAgICAgIChXZWJDb3JlOjpSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZWRpYVRvZ2dsZUNsb3NlZENhcHRpb25zQnV0dG9uKToKKyAgICAgICAgKiByZW5kZXJpbmcv
UmVuZGVyVGhlbWVHdGsuaDoKKwogMjAxNi0wMS0wNyAgQ2FybG9zIEdhcmNpYSBDYW1wb3MgIDxj
Z2FyY2lhQGlnYWxpYS5jb20+CiAKICAgICAgICAgW0dUS10gQ2xlYW51cCBTY3JvbGxiYXJUaGVt
ZUd0awpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1JlbmRlclRoZW1lR3Rr
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5jcHAKaW5kZXgg
YmQ3ZmZhMi4uMDgyOTI4NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcmVuZGVyaW5nL1Jl
bmRlclRoZW1lR3RrLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVyVGhl
bWVHdGsuY3BwCkBAIC0xMzcsMTMgKzEzNyw0MiBAQCBzdGF0aWMgY29uc3QgaW50IG1pbkFycm93
U2l6ZSA9IDE1OwogLy8gVGhpcyBpcyB0aGUgZGVmYXVsdCB2YWx1ZSBkZWZpbmVkIGJ5IEdUSyss
IHdoZXJlIGl0IHdhcyBkZWZpbmVkIGFzIE1JTl9BUlJPV19XSURUSCBpbiBndGtzcGluYnV0dG9u
LmMuCiBzdGF0aWMgY29uc3QgaW50IG1pblNwaW5CdXR0b25BcnJvd1NpemUgPSA2OwogCitlbnVt
IFJlbmRlclRoZW1lUGFydCB7CisgICAgRW50cnksCisgICAgRW50cnlTZWxlY3Rpb24sCisgICAg
RW50cnlJY29uTGVmdCwKKyAgICBFbnRyeUljb25SaWdodCwKKyAgICBCdXR0b24sCisgICAgQ2hl
Y2tCdXR0b24sCisgICAgQ2hlY2tCdXR0b25DaGVjaywKKyAgICBSYWRpb0J1dHRvbiwKKyAgICBS
YWRpb0J1dHRvblJhZGlvLAorICAgIENvbWJvQm94LAorICAgIENvbWJvQm94QnV0dG9uLAorICAg
IENvbWJvQm94QXJyb3csCisgICAgU2NhbGUsCisgICAgU2NhbGVUcm91Z2gsCisgICAgU2NhbGVT
bGlkZXIsCisgICAgUHJvZ3Jlc3NCYXIsCisgICAgUHJvZ3Jlc3NCYXJUcm91Z2gsCisgICAgUHJv
Z3Jlc3NCYXJQcm9ncmVzcywKKyAgICBMaXN0Qm94LAorICAgIExpc3RCb3hTZWxlY3Rpb24sCisg
ICAgU3BpbkJ1dHRvbiwKKyAgICBTcGluQnV0dG9uVXBCdXR0b24sCisgICAgU3BpbkJ1dHRvbkRv
d25CdXR0b24sCisjaWYgRU5BQkxFKFZJREVPKQorICAgIE1lZGlhQnV0dG9uLAorI2VuZGlmCit9
OworCiBzdGF0aWMgdm9pZCBndGtTdHlsZUNoYW5nZWRDYWxsYmFjayhHT2JqZWN0KiwgR1BhcmFt
U3BlYyopCiB7CiAgICAgc3RhdGljX2Nhc3Q8U2Nyb2xsYmFyVGhlbWVHdGsmPihTY3JvbGxiYXJU
aGVtZTo6dGhlbWUoKSkudGhlbWVDaGFuZ2VkKCk7CiAgICAgUGFnZTo6dXBkYXRlU3R5bGVGb3JB
bGxQYWdlc0FmdGVyR2xvYmFsQ2hhbmdlSW5FbnZpcm9ubWVudCgpOwogfQogCi1zdGF0aWMgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNyZWF0ZVN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBl
KQorc3RhdGljIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjcmVhdGVTdHlsZUNvbnRleHQoUmVu
ZGVyVGhlbWVQYXJ0IHRoZW1lUGFydCwgR3RrU3R5bGVDb250ZXh0KiBwYXJlbnQgPSBudWxscHRy
KQogewogICAgIHN0YXRpYyBib29sIGluaXRpYWxpemVkID0gZmFsc2U7CiAgICAgaWYgKCFpbml0
aWFsaXplZCkgewpAQCAtMTUzLDE3MCArMTgyLDIyMyBAQCBzdGF0aWMgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IGNyZWF0ZVN0eWxlQ29udGV4dChHVHlwZSB3aWRnZXRUeXBlKQogICAgICAgICBp
bml0aWFsaXplZCA9IHRydWU7CiAgICAgfQogCi0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBw
YXRoID0gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0gICAgZ3RrX3dpZGdldF9w
YXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIHdpZGdldFR5cGUpOworICAgIEdSZWZQdHI8R3Rr
V2lkZ2V0UGF0aD4gcGF0aCA9IGFkb3B0R1JlZihwYXJlbnQgPyBndGtfd2lkZ2V0X3BhdGhfY29w
eShndGtfc3R5bGVfY29udGV4dF9nZXRfcGF0aChwYXJlbnQpKSA6IGd0a193aWRnZXRfcGF0aF9u
ZXcoKSk7CiAKKyAgICBzd2l0Y2ggKHRoZW1lUGFydCkgeworICAgIGNhc2UgRW50cnk6CisgICAg
ICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9FTlRS
WSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRf
cGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImVudHJ5Iik7CisjZWxz
ZQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEs
IEdUS19TVFlMRV9DTEFTU19FTlRSWSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBFbnRyeVNlbGVjdGlvbjoKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGguZ2V0KCksIEdUS19UWVBFX0VOVFJZKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwg
MikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0
KCksIC0xLCAic2VsZWN0aW9uIik7CisjZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7CisjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBFbnRyeUljb25MZWZ0OgorICAgIGNhc2UgRW50
cnlJY29uUmlnaHQ6CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdl
dCgpLCBHVEtfVFlQRV9FTlRSWSk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisg
ICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAt
MSwgImltYWdlIik7CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LmdldCgpLCAtMSwgdGhlbWVQYXJ0ID09IEVudHJ5SWNvbkxlZnQgPyAibGVmdCIgOiAicmlnaHQi
KTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIEJ1dHRvbjoKKyAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0JVVFRPTik7Cisj
aWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImJ1dHRvbiIpOworI2Vsc2UKKyAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtf
U1RZTEVfQ0xBU1NfQlVUVE9OKTsKKyNlbmRpZgorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJ0ZXh0LWJ1dHRvbiIpOworICAgICAgICBicmVh
azsKKyAgICBjYXNlIENoZWNrQnV0dG9uOgorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5k
X3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfQ0hFQ0tfQlVUVE9OKTsKKyNpZiBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAxOSwgMikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVj
dF9uYW1lKHBhdGguZ2V0KCksIC0xLCAiY2hlY2tidXR0b24iKTsKKyNlbHNlCisgICAgICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NM
QVNTX0NIRUNLKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIENoZWNrQnV0dG9u
Q2hlY2s6CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBH
VEtfVFlQRV9DSEVDS19CVVRUT04pOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQor
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwg
LTEsICJjaGVjayIpOworI2Vsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfQ0hFQ0spOworI2VuZGlmCisgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgUmFkaW9CdXR0b246CisgICAgICAgIGd0a193aWRnZXRfcGF0
aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9SQURJT19CVVRUT04pOworI2lmIEdU
S19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9z
ZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJyYWRpb2J1dHRvbiIpOworI2Vsc2UKKyAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtf
U1RZTEVfQ0xBU1NfUkFESU8pOworI2VuZGlmCisgICAgICAgIGJyZWFrOworICAgIGNhc2UgUmFk
aW9CdXR0b25SYWRpbzoKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGgu
Z2V0KCksIEdUS19UWVBFX1JBRElPX0JVVFRPTik7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywg
MTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRo
LmdldCgpLCAtMSwgInJhZGlvIik7CisjZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19SQURJTyk7CisjZW5k
aWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21ib0JveDoKKyAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0NPTUJPX0JPWCk7CisjaWYg
R1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVy
X3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImNvbWJvYm94Iik7CisjZW5kaWYKKyAg
ICAgICAgYnJlYWs7CisgICAgY2FzZSBDb21ib0JveEJ1dHRvbjoKKyAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0JVVFRPTik7CisjaWYgR1RL
X0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3Nl
dF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgImJ1dHRvbiIpOworI2Vsc2UKKyAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVf
Q0xBU1NfQlVUVE9OKTsKKyNlbmRpZgorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRf
Y2xhc3MocGF0aC5nZXQoKSwgLTEsICJ0ZXh0LWJ1dHRvbiIpOworICAgICAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJjb21ibyIpOworICAgICAgICBi
cmVhazsKKyAgICBjYXNlIENvbWJvQm94QXJyb3c6CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9BUlJPVyk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3Rf
bmFtZShwYXRoLmdldCgpLCAtMSwgImFycm93Iik7CisjZWxzZQorICAgICAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsICJhcnJvdyIpOworI2VuZGlmCisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgU2NhbGU6CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9h
cHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9TQ0FMRSk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3Rf
bmFtZShwYXRoLmdldCgpLCAtMSwgInNjYWxlIik7CisjZWxzZQorICAgICAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TQ0FM
RSk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY2FsZVRyb3VnaDoKKyAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDQUxF
KTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKKyAgICAgICAgZ3RrX3dpZGdldF9w
YXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAidHJvdWdoIik7CisjZWxz
ZQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEs
IEdUS19TVFlMRV9DTEFTU19TQ0FMRSk7CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2Fk
ZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7CisjZW5kaWYK
KyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTY2FsZVNsaWRlcjoKKyAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDQUxFKTsKKyNpZiBHVEtf
Q0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0
X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIC0xLCAic2xpZGVyIik7CisjZWxzZQorICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9D
TEFTU19TQ0FMRSk7CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRo
LmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX1NMSURFUik7CisjZW5kaWYKKyAgICAgICAgYnJl
YWs7CisgICAgY2FzZSBQcm9ncmVzc0JhcjoKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVu
ZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1BST0dSRVNTX0JBUik7CisjaWYgR1RLX0NIRUNL
X1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInByb2dyZXNzYmFyIik7CisjZWxzZQorICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9D
TEFTU19QUk9HUkVTU0JBUik7CisjZW5kaWYKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
YWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCk7Cisg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgUHJvZ3Jlc3NCYXJUcm91Z2g6CisgICAgICAgIGd0a193
aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9QUk9HUkVTU19CQVIp
OworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQorICAgICAgICBndGtfd2lkZ2V0X3Bh
dGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJ0cm91Z2giKTsKKyNlbHNl
CisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwg
R1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfVFJPVUdIKTsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyAgICBjYXNlIFByb2dyZXNzQmFyUHJvZ3Jlc3M6CisgICAg
ICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9QUk9H
UkVTU19CQVIpOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQorICAgICAgICBndGtf
d2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJwcm9ncmVz
cyIpOworI2Vsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGgu
Z2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfUFJPR1JFU1NCQVIpOworI2VuZGlmCisgICAgICAg
IGJyZWFrOworICAgIGNhc2UgTGlzdEJveDoKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVu
ZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1RSRUVfVklFVyk7CisjaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3Rf
bmFtZShwYXRoLmdldCgpLCAtMSwgInRyZWV2aWV3Iik7CisjZW5kaWYKKyAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1Nf
VklFVyk7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgTGlzdEJveFNlbGVjdGlvbjoKKyAgICAg
ICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1RSRUVf
VklFVyk7CisjaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCisgICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAtMSwgInNlbGVjdGlvbiIp
OworI2Vsc2UKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0
KCksIC0xLCBHVEtfU1RZTEVfQ0xBU1NfVklFVyk7CisjZW5kaWYKKyAgICAgICAgYnJlYWs7Cisg
ICAgY2FzZSBTcGluQnV0dG9uOgorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUo
cGF0aC5nZXQoKSwgR1RLX1RZUEVfU1BJTl9CVVRUT04pOwogI2lmIEdUS19DSEVDS19WRVJTSU9O
KDMsIDE5LCAyKQotICAgIC8vIFBpY2sgYSBnb29kIGRlZmF1bHQgb2JqZWN0IHBhdGggZm9yIHRo
ZSBzdHlsZSBjb250ZXh0IGJhc2VkIG9uIHRoZSB3aWRnZXQgdHlwZS4gVGhpcyB3aWxsCi0gICAg
Ly8gdXN1YWxseSBuZWVkIHRvIGJlIG92ZXJyaWRkZW4gbWFudWFsbHksIGJ1dCBpdCBkb2Vzbid0
IGh1cnQgdG8gaGF2ZSBhIGdvb2QgZGVmYXVsdC4KLSAgICBpZiAod2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9FTlRSWSkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1l
KHBhdGguZ2V0KCksIDAsICJlbnRyeSIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RL
X1RZUEVfQVJST1cpCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFt
ZShwYXRoLmdldCgpLCAwLCAiYnV0dG9uIik7IC8vIE5vdGU6IG5vdCBhIHR5cG8uCi0gICAgZWxz
ZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9CVVRUT04pIHsKLSAgICAgICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJidXR0b24iKTsKLSAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIDAsICJ0ZXh0
LWJ1dHRvbiIpOwotICAgIH0gZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9TQ0FMRSkK
LSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCks
IDAsICJzY2FsZSIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfU0VQQVJB
VE9SKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5n
ZXQoKSwgMCwgInNlcGFyYXRvciIpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZ
UEVfUFJPR1JFU1NfQkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0
X25hbWUocGF0aC5nZXQoKSwgMCwgInByb2dyZXNzYmFyIik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0
VHlwZSA9PSBHVEtfVFlQRV9TUElOX0JVVFRPTikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJzcGluYnV0dG9uIik7Ci0gICAgZWxz
ZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9UUkVFX1ZJRVcpIHsKLSAgICAgICAgZ3RrX3dp
ZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJ0cmVldmlldyIp
OwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwg
InZpZXciKTsKLSAgICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVU
VE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5n
ZXQoKSwgMCwgImNoZWNrYnV0dG9uIik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtf
VFlQRV9SQURJT19CVVRUT04pCi0gICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAwLCAicmFkaW9idXR0b24iKTsKLSAgICBlbHNlIGlmICh3aWRn
ZXRUeXBlID09IEdUS19UWVBFX0NPTUJPX0JPWCkKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0
ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJjb21ib2JveCIpOworICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgLTEsICJzcGlu
YnV0dG9uIik7CiAjZWxzZQotICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0VOVFJZKQot
ICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgR1RL
X1NUWUxFX0NMQVNTX0VOVFJZKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBF
X0FSUk9XKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQo
KSwgMCwgImFycm93Iik7Ci0gICAgZWxzZSBpZiAod2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9CVVRU
T04pIHsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCks
IDAsIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgInRleHQtYnV0dG9uIik7Ci0gICAgfSBlbHNlIGlm
ICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NDQUxFKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhf
aXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgR1RLX1NUWUxFX0NMQVNTX1NDQUxFKTsKLSAg
ICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX1NFUEFSQVRPUikKLSAgICAgICAgZ3Rr
X3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIDAsIEdUS19TVFlMRV9DTEFT
U19TRVBBUkFUT1IpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUFJPR1JF
U1NfQkFSKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQo
KSwgMCwgR1RLX1NUWUxFX0NMQVNTX1BST0dSRVNTQkFSKTsKLSAgICBlbHNlIGlmICh3aWRnZXRU
eXBlID09IEdUS19UWVBFX1NQSU5fQlVUVE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRl
cl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgR1RLX1NUWUxFX0NMQVNTX1NQSU5CVVRUT04pOwot
ICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfVFJFRV9WSUVXKQotICAgICAgICBn
dGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwgMCwgR1RLX1NUWUxFX0NM
QVNTX1ZJRVcpOwotICAgIGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfQ0hFQ0tfQlVU
VE9OKQotICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3MocGF0aC5nZXQoKSwg
MCwgR1RLX1NUWUxFX0NMQVNTX0NIRUNLKTsKLSAgICBlbHNlIGlmICh3aWRnZXRUeXBlID09IEdU
S19UWVBFX1JBRElPX0JVVFRPTikKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIDAsIEdUS19TVFlMRV9DTEFTU19SQURJTyk7CisgICAgICAgIGd0a193
aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNT
X1NQSU5CVVRUT04pOwogI2VuZGlmCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9j
bGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwpOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIFNwaW5CdXR0b25VcEJ1dHRvbjoKKyAgICBjYXNlIFNwaW5CdXR0
b25Eb3duQnV0dG9uOgorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5n
ZXQoKSwgR1RLX1RZUEVfU1BJTl9CVVRUT04pOworI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5
LCAyKQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5n
ZXQoKSwgLTEsICJidXR0b24iKTsKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2Ns
YXNzKHBhdGguZ2V0KCksIC0xLCB0aGVtZVBhcnQgPT0gU3BpbkJ1dHRvblVwQnV0dG9uID8gInVw
IiA6ICJkb3duIik7CisjZWxzZQorICAgICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xh
c3MocGF0aC5nZXQoKSwgLTEsIEdUS19TVFlMRV9DTEFTU19TUElOQlVUVE9OKTsKKyAgICAgICAg
Z3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIC0xLCBHVEtfU1RZTEVf
Q0xBU1NfQlVUVE9OKTsKKyNlbmRpZgorICAgICAgICBicmVhazsKKyNpZiBFTkFCTEUoVklERU8p
CisgICAgY2FzZSBNZWRpYUJ1dHRvbjoKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90
eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0lNQUdFKTsKKyNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigz
LCAxOSwgMikKKyAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBh
dGguZ2V0KCksIC0xLCAiaW1hZ2UiKTsKKyNlbHNlCisgICAgICAgIGd0a193aWRnZXRfcGF0aF9p
dGVyX2FkZF9jbGFzcyhwYXRoLmdldCgpLCAtMSwgR1RLX1NUWUxFX0NMQVNTX0lNQUdFKTsKKyNl
bmRpZgorICAgICAgICBicmVhazsKKyNlbmRpZiAvLyBFTkFCTEUoVklERU8pCisgICAgfQogCiAg
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBhZG9wdEdSZWYoZ3RrX3N0eWxl
X2NvbnRleHRfbmV3KCkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXRoKGNvbnRleHQu
Z2V0KCksIHBhdGguZ2V0KCkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9wYXJlbnQoY29u
dGV4dC5nZXQoKSwgcGFyZW50KTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29u
dGV4dC5nZXQoKSwgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfZ2V0X3N0YXRlKHBhdGguZ2V0KCksIC0x
KSk7CiAKICAgICByZXR1cm4gY29udGV4dDsKIH0KIAotc3RhdGljIEdSZWZQdHI8R2RrUGl4YnVm
PiBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0IGNoYXIq
IGljb25OYW1lLCBnaW50IGRpcmVjdGlvbiwgZ2ludCBzdGF0ZSwgZ2ludCBpY29uU2l6ZSkKLXsK
LSAgICBBU1NFUlQoaWNvbk5hbWUpOwotCi0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0gICAgR3RrSWNvblNldCog
aWNvblNldCA9IGd0a19zdHlsZV9jb250ZXh0X2xvb2t1cF9pY29uX3NldChjb250ZXh0LmdldCgp
LCBpY29uTmFtZSk7Ci0KLSAgICBndWludCBmbGFncyA9IDA7Ci0gICAgaWYgKHN0YXRlID09IEdU
S19TVEFURV9QUkVMSUdIVCkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfUFJFTElH
SFQ7Ci0gICAgZWxzZSBpZiAoc3RhdGUgPT0gR1RLX1NUQVRFX0lOU0VOU0lUSVZFKQotICAgICAg
ICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElWRTsKLQotICAgIGd0a19zdHlsZV9j
b250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdz
PihmbGFncykpOwotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5n
ZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZGlyZWN0aW9uKSk7Ci0gICAgR2Rr
UGl4YnVmKiBpY29uID0gZ3RrX2ljb25fc2V0X3JlbmRlcl9pY29uX3BpeGJ1ZihpY29uU2V0LCBj
b250ZXh0LmdldCgpLCBzdGF0aWNfY2FzdDxHdGtJY29uU2l6ZT4oaWNvblNpemUpKTsKLQotICAg
IHJldHVybiBhZG9wdEdSZWYoaWNvbik7Ci19Ci0KLXN0YXRpYyBHUmVmUHRyPEdka1BpeGJ1Zj4g
Z2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBlKEdUeXBlIHdpZGdldFR5cGUsIGNvbnN0
IGNoYXIqIHN5bWJvbGljSWNvbk5hbWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFt
ZSwgZ2ludCBkaXJlY3Rpb24sIGdpbnQgc3RhdGUsIGdpbnQgaWNvblNpemUpCitzdGF0aWMgR1Jl
ZlB0cjxHZGtQaXhidWY+IGxvYWRUaGVtZWRJY29uKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwg
Y29uc3QgY2hhciogaWNvbk5hbWUsIEd0a0ljb25TaXplIGljb25TaXplKQogewotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHdpZGdldFR5
cGUpOwotCi0gICAgZ3VpbnQgZmxhZ3MgPSAwOwotICAgIGlmIChzdGF0ZSA9PSBHVEtfU1RBVEVf
UFJFTElHSFQpCi0gICAgICAgIGZsYWdzIHw9IEdUS19TVEFURV9GTEFHX1BSRUxJR0hUOwotICAg
IGVsc2UgaWYgKHN0YXRlID09IEdUS19TVEFURV9JTlNFTlNJVElWRSkKLSAgICAgICAgZmxhZ3Mg
fD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9z
ZXRfc3RhdGUoY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3Mp
KTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCksIHN0
YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGRpcmVjdGlvbikpOwotCi0gICAgR1VuaXF1ZVB0
cjxHdGtJY29uSW5mbz4gaW5mbyhndGtfaWNvbl90aGVtZV9sb29rdXBfaWNvbihndGtfaWNvbl90
aGVtZV9nZXRfZGVmYXVsdCgpLCBzeW1ib2xpY0ljb25OYW1lLCBpY29uU2l6ZSwKLSAgICAgICAg
c3RhdGljX2Nhc3Q8R3RrSWNvbkxvb2t1cEZsYWdzPihHVEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZH
IHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NJWkUpKSk7Ci0gICAgR2RrUGl4YnVmKiBpY29uID0g
bnVsbHB0cjsKLSAgICBpZiAoaW5mbykKLSAgICAgICAgaWNvbiA9IGd0a19pY29uX2luZm9fbG9h
ZF9zeW1ib2xpY19mb3JfY29udGV4dChpbmZvLmdldCgpLCBjb250ZXh0LmdldCgpLCBudWxscHRy
LCBudWxscHRyKTsKLQotICAgIGlmICghaWNvbikgewotICAgICAgICBpZiAoIWZhbGxiYWNrU3Rv
Y2tJY29uTmFtZSkKLSAgICAgICAgICAgIHJldHVybiBudWxscHRyOwotICAgICAgICByZXR1cm4g
Z2V0U3RvY2tJY29uRm9yV2lkZ2V0VHlwZSh3aWRnZXRUeXBlLCBmYWxsYmFja1N0b2NrSWNvbk5h
bWUsIGRpcmVjdGlvbiwgc3RhdGUsIGljb25TaXplKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gYWRv
cHRHUmVmKGljb24pOwotfQotCi0jaWYgRU5BQkxFKFZJREVPKQotc3RhdGljIEhUTUxNZWRpYUVs
ZW1lbnQqIGdldE1lZGlhRWxlbWVudEZyb21SZW5kZXJPYmplY3QoY29uc3QgUmVuZGVyT2JqZWN0
JiBvKQotewotICAgIE5vZGUqIG5vZGUgPSBvLm5vZGUoKTsKLSAgICBOb2RlKiBtZWRpYU5vZGUg
PSBub2RlID8gbm9kZS0+c2hhZG93SG9zdCgpIDogbnVsbHB0cjsKLSAgICBpZiAoIW1lZGlhTm9k
ZSkKLSAgICAgICAgbWVkaWFOb2RlID0gbm9kZTsKLSAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1l
bnQ+KG1lZGlhTm9kZSkpCisgICAgR1JlZlB0cjxHSWNvbj4gaWNvbiA9IGFkb3B0R1JlZihnX3Ro
ZW1lZF9pY29uX25ldyhpY29uTmFtZSkpOworICAgIHVuc2lnbmVkIGxvb2t1cEZsYWdzID0gR1RL
X0lDT05fTE9PS1VQX1VTRV9CVUlMVElOIHwgR1RLX0lDT05fTE9PS1VQX0ZPUkNFX1NJWkUgfCBH
VEtfSUNPTl9MT09LVVBfRk9SQ0VfU1ZHOworICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9u
ID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2RpcmVjdGlvbihjb250ZXh0KTsKKyAgICBpZiAoZGly
ZWN0aW9uICYgR1RLX1RFWFRfRElSX0xUUikKKyAgICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lD
T05fTE9PS1VQX0RJUl9MVFI7CisgICAgZWxzZSBpZiAoZGlyZWN0aW9uICYgR1RLX1RFWFRfRElS
X1JUTCkKKyAgICAgICAgbG9va3VwRmxhZ3MgfD0gR1RLX0lDT05fTE9PS1VQX0RJUl9SVEw7Cisg
ICAgaW50IHdpZHRoLCBoZWlnaHQ7CisgICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoaWNvblNpemUs
ICZ3aWR0aCwgJmhlaWdodCk7CisgICAgR1JlZlB0cjxHdGtJY29uSW5mbz4gaWNvbkluZm8gPSBh
ZG9wdEdSZWYoZ3RrX2ljb25fdGhlbWVfbG9va3VwX2J5X2dpY29uKGd0a19pY29uX3RoZW1lX2dl
dF9kZWZhdWx0KCksIGljb24uZ2V0KCksIHN0ZDo6bWluKHdpZHRoLCBoZWlnaHQpLCBzdGF0aWNf
Y2FzdDxHdGtJY29uTG9va3VwRmxhZ3M+KGxvb2t1cEZsYWdzKSkpOworICAgIGlmICghaWNvbklu
Zm8pCiAgICAgICAgIHJldHVybiBudWxscHRyOwogCi0gICAgcmV0dXJuIGRvd25jYXN0PEhUTUxN
ZWRpYUVsZW1lbnQ+KG1lZGlhTm9kZSk7CisgICAgcmV0dXJuIGFkb3B0R1JlZihndGtfaWNvbl9p
bmZvX2xvYWRfc3ltYm9saWNfZm9yX2NvbnRleHQoaWNvbkluZm8uZ2V0KCksIGNvbnRleHQsIG51
bGxwdHIsIG51bGxwdHIpKTsKIH0KIAotdm9pZCBSZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQ29s
b3JzKCkKLXsKLSAgICBHZGtSR0JBIGNvbG9yOwotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBjb250YWluZXJDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX0NPTlRBSU5F
Uik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5n
ZXQoKSwgR1RLX1NUQVRFX0ZMQUdfTk9STUFMKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9nZXRf
YmFja2dyb3VuZF9jb2xvcihjb250YWluZXJDb250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4
dF9nZXRfc3RhdGUoY29udGFpbmVyQ29udGV4dC5nZXQoKSksICZjb2xvcik7Ci0gICAgbV9wYW5l
bENvbG9yID0gY29sb3I7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRhaW5l
ckNvbnRleHQuZ2V0KCksIEdUS19TVEFURV9GTEFHX0FDVElWRSk7Ci0gICAgZ3RrX3N0eWxlX2Nv
bnRleHRfZ2V0X2JhY2tncm91bmRfY29sb3IoY29udGFpbmVyQ29udGV4dC5nZXQoKSwgZ3RrX3N0
eWxlX2NvbnRleHRfZ2V0X3N0YXRlKGNvbnRhaW5lckNvbnRleHQuZ2V0KCkpLCAmY29sb3IpOwot
ICAgIG1fc2xpZGVyQ29sb3IgPSBjb2xvcjsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3Rh
dGUoY29udGFpbmVyQ29udGV4dC5nZXQoKSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQpOwotICAg
IGd0a19zdHlsZV9jb250ZXh0X2dldF9iYWNrZ3JvdW5kX2NvbG9yKGNvbnRhaW5lckNvbnRleHQu
Z2V0KCksIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250YWluZXJDb250ZXh0LmdldCgp
KSwgJmNvbG9yKTsKLSAgICBtX3NsaWRlclRodW1iQ29sb3IgPSBjb2xvcjsKLX0KLQotdm9pZCBS
ZW5kZXJUaGVtZUd0azo6aW5pdE1lZGlhQnV0dG9ucygpCi17Ci0gICAgc3RhdGljIGJvb2wgaWNv
bnNJbml0aWFsaXplZCA9IGZhbHNlOwotCi0gICAgaWYgKGljb25zSW5pdGlhbGl6ZWQpCi0gICAg
ICAgIHJldHVybjsKLQotICAgIEdSZWZQdHI8R3RrSWNvbkZhY3Rvcnk+IGljb25GYWN0b3J5ID0g
YWRvcHRHUmVmKGd0a19pY29uX2ZhY3RvcnlfbmV3KCkpOwotICAgIEd0a0ljb25Tb3VyY2UqIGlj
b25Tb3VyY2UgPSBndGtfaWNvbl9zb3VyY2VfbmV3KCk7Ci0gICAgY29uc3QgY2hhciogaWNvbnNb
XSA9IHsgImF1ZGlvLXZvbHVtZS1oaWdoIiwgImF1ZGlvLXZvbHVtZS1tdXRlZCIgfTsKLQotICAg
IGd0a19pY29uX2ZhY3RvcnlfYWRkX2RlZmF1bHQoaWNvbkZhY3RvcnkuZ2V0KCkpOwotCi0gICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBHX05fRUxFTUVOVFMoaWNvbnMpOyArK2kpIHsKLSAgICAg
ICAgZ3RrX2ljb25fc291cmNlX3NldF9pY29uX25hbWUoaWNvblNvdXJjZSwgaWNvbnNbaV0pOwot
ICAgICAgICBHdGtJY29uU2V0KiBpY29uU2V0ID0gZ3RrX2ljb25fc2V0X25ldygpOwotICAgICAg
ICBndGtfaWNvbl9zZXRfYWRkX3NvdXJjZShpY29uU2V0LCBpY29uU291cmNlKTsKLSAgICAgICAg
Z3RrX2ljb25fZmFjdG9yeV9hZGQoaWNvbkZhY3RvcnkuZ2V0KCksIGljb25zW2ldLCBpY29uU2V0
KTsKLSAgICAgICAgZ3RrX2ljb25fc2V0X3VucmVmKGljb25TZXQpOwotICAgIH0KLQotICAgIGd0
a19pY29uX3NvdXJjZV9mcmVlKGljb25Tb3VyY2UpOwotCi0gICAgaWNvbnNJbml0aWFsaXplZCA9
IHRydWU7Ci19Ci0jZW5kaWYKLQogc3RhdGljIGJvb2wgbm9kZUhhc1BzZXVkbyhOb2RlKiBub2Rl
LCBjb25zdCBjaGFyKiBwc2V1ZG8pCiB7CiAgICAgUmVmUHRyPE5vZGU+IGF0dHJpYnV0ZU5vZGUg
PSBub2RlLT5hdHRyaWJ1dGVzKCktPmdldE5hbWVkSXRlbSgicHNldWRvIik7CkBAIC0zMzcsMTkg
KzQxOSw2IEBAIHN0YXRpYyBib29sIG5vZGVIYXNDbGFzcyhOb2RlKiBub2RlLCBjb25zdCBjaGFy
KiBjbGFzc05hbWUpCiAgICAgcmV0dXJuIGVsZW1lbnQuY2xhc3NOYW1lcygpLmNvbnRhaW5zKGNs
YXNzTmFtZSk7CiB9CiAKLVJlbmRlclRoZW1lR3RrOjpSZW5kZXJUaGVtZUd0aygpCi0gICAgOiBt
X3BhbmVsQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9zbGlkZXJDb2xvcihDb2xvcjo6d2hp
dGUpCi0gICAgLCBtX3NsaWRlclRodW1iQ29sb3IoQ29sb3I6OndoaXRlKQotICAgICwgbV9tZWRp
YUljb25TaXplKDE2KQotICAgICwgbV9tZWRpYVNsaWRlckhlaWdodCgxNCkKLXsKLSNpZiBFTkFC
TEUoVklERU8pCi0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0gICAgaW5pdE1lZGlhQnV0dG9ucygp
OwotI2VuZGlmCi19Ci0KIFJlbmRlclRoZW1lR3RrOjp+UmVuZGVyVGhlbWVHdGsoKQogewogfQpA
QCAtNDAzLDE2ICs0NzIsMTYgQEAgc3RhdGljIEd0a1RleHREaXJlY3Rpb24gZ3RrVGV4dERpcmVj
dGlvbihUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbikKICAgICB9CiB9CiAKLXN0YXRpYyBHdGtTdGF0
ZVR5cGUgZ3RrSWNvblN0YXRlKFJlbmRlclRoZW1lKiB0aGVtZSwgY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QpCitzdGF0aWMgR3RrU3RhdGVGbGFncyBndGtJY29uU3RhdGVGbGFncyhS
ZW5kZXJUaGVtZSogdGhlbWUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0KQogewog
ICAgIGlmICghdGhlbWUtPmlzRW5hYmxlZChyZW5kZXJPYmplY3QpKQotICAgICAgICByZXR1cm4g
R1RLX1NUQVRFX0lOU0VOU0lUSVZFOworICAgICAgICByZXR1cm4gR1RLX1NUQVRFX0ZMQUdfSU5T
RU5TSVRJVkU7CiAgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKLSAgICAg
ICAgcmV0dXJuIEdUS19TVEFURV9BQ1RJVkU7CisgICAgICAgIHJldHVybiBHVEtfU1RBVEVfRkxB
R19BQ1RJVkU7CiAgICAgaWYgKHRoZW1lLT5pc0hvdmVyZWQocmVuZGVyT2JqZWN0KSkKLSAgICAg
ICAgcmV0dXJuIEdUS19TVEFURV9QUkVMSUdIVDsKKyAgICAgICAgcmV0dXJuIEdUS19TVEFURV9G
TEFHX1BSRUxJR0hUOwogCi0gICAgcmV0dXJuIEdUS19TVEFURV9OT1JNQUw7CisgICAgcmV0dXJu
IEdUS19TVEFURV9GTEFHX05PUk1BTDsKIH0KIAogc3RhdGljIHZvaWQgYWRqdXN0UmVjdEZvckZv
Y3VzKEd0a1N0eWxlQ29udGV4dCogY29udGV4dCwgRmxvYXRSZWN0JiByZWN0KQpAQCAtNDMwLDcg
KzQ5OSw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFJlcGFpbnRSZWN0KGNvbnN0IFJl
bmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBGbG9hdFJlCiAgICAgc3dpdGNoIChwYXJ0KSB7CiAg
ICAgY2FzZSBDaGVja2JveFBhcnQ6CiAgICAgY2FzZSBSYWRpb1BhcnQ6Ci0gICAgICAgIGNvbnRl
eHQgPSBjcmVhdGVTdHlsZUNvbnRleHQocGFydCA9PSBDaGVja2JveFBhcnQgPyBHVEtfVFlQRV9D
SEVDS19CVVRUT04gOiBHVEtfVFlQRV9SQURJT19CVVRUT04pOworICAgICAgICBjb250ZXh0ID0g
Y3JlYXRlU3R5bGVDb250ZXh0KHBhcnQgPT0gQ2hlY2tib3hQYXJ0ID8gQ2hlY2tCdXR0b24gOiBS
YWRpb0J1dHRvbik7CiAKICAgICAgICAgZ2ludCBpbmRpY2F0b3JTcGFjaW5nOwogICAgICAgICBn
dGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoY29udGV4dC5nZXQoKSwgImluZGljYXRvci1zcGFj
aW5nIiwgJmluZGljYXRvclNwYWNpbmcsIG51bGxwdHIpOwpAQCAtNDM5LDE3ICs1MDgsMTcgQEAg
dm9pZCBSZW5kZXJUaGVtZUd0azo6YWRqdXN0UmVwYWludFJlY3QoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIEZsb2F0UmUKICAgICAgICAgcmV0dXJuOwogICAgIGNhc2UgU2xpZGVy
VmVydGljYWxQYXJ0OgogICAgIGNhc2UgU2xpZGVySG9yaXpvbnRhbFBhcnQ6Ci0gICAgICAgIGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfU0NBTEUpOworICAgICAgICBjb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxlU2xpZGVyKTsKICAgICAgICAgYnJlYWs7CiAg
ICAgY2FzZSBCdXR0b25QYXJ0OgogICAgIGNhc2UgTWVudWxpc3RCdXR0b25QYXJ0OgogICAgIGNh
c2UgTWVudWxpc3RQYXJ0OgotICAgICAgICBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdU
S19UWVBFX0JVVFRPTik7CisgICAgICAgIGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoQnV0
dG9uKTsKICAgICAgICAgY2hlY2tJbnRlcmlvckZvY3VzID0gdHJ1ZTsKICAgICAgICAgYnJlYWs7
CiAgICAgY2FzZSBUZXh0RmllbGRQYXJ0OgogICAgIGNhc2UgVGV4dEFyZWFQYXJ0OgotICAgICAg
ICBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX0VOVFJZKTsKKyAgICAgICAg
Y29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChFbnRyeSk7CiAgICAgICAgIGNoZWNrSW50ZXJp
b3JGb2N1cyA9IHRydWU7CiAgICAgICAgIGJyZWFrOwogICAgIGRlZmF1bHQ6CkBAIC00NzMsMTQg
KzU0MiwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RCdXR0b25TdHlsZShTdHlsZVJl
c29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eWxlLCBFbGVtZQogICAgICAgICBzdHlsZS5zZXRMaW5l
SGVpZ2h0KFJlbmRlclN0eWxlOjppbml0aWFsTGluZUhlaWdodCgpKTsKIH0KIAotc3RhdGljIHZv
aWQgc2V0VG9nZ2xlU2l6ZShHVHlwZSB3aWRnZXRUeXBlLCBSZW5kZXJTdHlsZSYgc3R5bGUpCitz
dGF0aWMgdm9pZCBzZXRUb2dnbGVTaXplKFJlbmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIFJlbmRl
clN0eWxlJiBzdHlsZSkKIHsKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9
IGNyZWF0ZVN0eWxlQ29udGV4dCh3aWRnZXRUeXBlKTsKLQogICAgIC8vIFRoZSB3aWR0aCBhbmQg
aGVpZ2h0IGFyZSBib3RoIHNwZWNpZmllZCwgc28gd2Ugc2hvdWxkbid0IGNoYW5nZSB0aGVtLgog
ICAgIGlmICghc3R5bGUud2lkdGgoKS5pc0ludHJpbnNpY09yQXV0bygpICYmICFzdHlsZS5oZWln
aHQoKS5pc0F1dG8oKSkKICAgICAgICAgcmV0dXJuOwogCisgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQodGhlbWVQYXJ0KTsKICAgICAvLyBP
dGhlciBwb3J0cyBoYXJkLWNvZGUgdGhpcyB0byAxMy4gR1RLKyB1c2VycyB0ZW5kIHRvIGRlbWFu
ZCB0aGUgbmF0aXZlIGxvb2suCiAgICAgZ2ludCBpbmRpY2F0b3JTaXplOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAiaW5kaWNhdG9yLXNpemUiLCAmaW5k
aWNhdG9yU2l6ZSwgbnVsbHB0cik7CkBAIC00OTIsNDAgKzU2MCwyOCBAQCBzdGF0aWMgdm9pZCBz
ZXRUb2dnbGVTaXplKEdUeXBlIHdpZGdldFR5cGUsIFJlbmRlclN0eWxlJiBzdHlsZSkKICAgICAg
ICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChpbmRpY2F0b3JTaXplLCBGaXhlZCkpOwogfQogCi1z
dGF0aWMgdm9pZCBwYWludFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIEdUeXBl
IHdpZGdldFR5cGUsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJlY3QpCitzdGF0aWMgdm9pZCBw
YWludFRvZ2dsZShjb25zdCBSZW5kZXJUaGVtZUd0ayogdGhlbWUsIFJlbmRlclRoZW1lUGFydCB0
aGVtZVBhcnQsIGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludElu
Zm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgZnVsbFJlY3QpCiB7Ci0gICAgR1JlZlB0cjxH
dGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7
Ci0jaWYgR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgR1JlZlB0cjxHdGtXaWRnZXRQ
YXRoPiBwYXRoID0gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICBpZiAo
d2lkZ2V0VHlwZSA9PSBHVEtfVFlQRV9DSEVDS19CVVRUT04pIHsKLSAgICAgICAgaWYgKHRoZW1l
LT5pc0NoZWNrZWQocmVuZGVyT2JqZWN0KSB8fCB0aGVtZS0+aXNJbmRldGVybWluYXRlKHJlbmRl
ck9iamVjdCkpIHsKLSAgICAgICAgICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRo
LmdldCgpLCBHVEtfVFlQRV9DSEVDS19CVVRUT04pOwotICAgICAgICAgICAgZ3RrX3dpZGdldF9w
YXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJjaGVja2J1dHRvbiIpOwot
ICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBl
KHBhdGguZ2V0KCksIEdUS19UWVBFX0NIRUNLX0JVVFRPTik7Ci0gICAgICAgICAgICBndGtfd2lk
Z2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgImJ1dHRvbiIpOwot
ICAgICAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIDAs
ICJjaGVjayIpOwotICAgICAgICB9Ci0KLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90
eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0NIRUNLX0JVVFRPTik7Ci0gICAgICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAiY2hlY2siKTsKLSAg
ICB9IGVsc2UgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfUkFESU9fQlVUVE9OKSB7Ci0gICAg
ICAgIGlmICh0aGVtZS0+aXNDaGVja2VkKHJlbmRlck9iamVjdCkgfHwgdGhlbWUtPmlzSW5kZXRl
cm1pbmF0ZShyZW5kZXJPYmplY3QpKSB7Ci0gICAgICAgICAgICBndGtfd2lkZ2V0X3BhdGhfYXBw
ZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfUkFESU9fQlVUVE9OKTsKLSAgICAgICAgICAg
IGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAwLCAicmFk
aW9idXR0b24iKTsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIGd0a193aWRnZXRfcGF0
aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9SQURJT19CVVRUT04pOwotICAgICAg
ICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAs
ICJidXR0b24iKTsKLSAgICAgICAgICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX2FkZF9jbGFzcyhw
YXRoLmdldCgpLCAwLCAicmFkaW8iKTsKLSAgICAgICAgfQotCi0gICAgICAgIGd0a193aWRnZXRf
cGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9SQURJT19CVVRUT04pOwotICAg
ICAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMSwg
InJhZGlvIik7Ci0gICAgfQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRDb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KHRoZW1lUGFydCk7CisgICAgR1JlZlB0cjxHdGtTdHls
ZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQodGhlbWVQYXJ0ID09IENoZWNr
QnV0dG9uID8gQ2hlY2tCdXR0b25DaGVjayA6IFJhZGlvQnV0dG9uUmFkaW8sIHBhcmVudENvbnRl
eHQuZ2V0KCkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5n
ZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5k
ZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0
X3NldF9wYXRoKGNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOworICAgIHVuc2lnbmVkIGZsYWdz
ID0gMDsKKyAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAg
ZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7CisgICAgZWxzZSBpZiAodGhlbWUt
PmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxB
R19QUkVMSUdIVDsKKyAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1pbmF0ZShyZW5kZXJPYmplY3Qp
KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNPTlNJU1RFTlQ7CisgICAgZWxz
ZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQorI2lmIEdUS19DSEVDS19WRVJT
SU9OKDMsIDEzLCA3KQorICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19DSEVDS0VEOwor
I2Vsc2UKKyAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfQUNUSVZFOwogI2VuZGlmCisg
ICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkKKyAgICAgICAgZmxhZ3MgfD0g
R1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRl
KGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KGZsYWdzKSk7CiAKICAg
ICAvLyBTb21lIHRoZW1lcyBkbyBub3QgcmVuZGVyIGxhcmdlIHRvZ2dsZSBidXR0b25zIHByb3Bl
cmx5LCBzbyB3ZSBzaW1wbHkKICAgICAvLyBzaHJpbmsgdGhlIHJlY3RhbmdsZSBiYWNrIGRvd24g
dG8gdGhlIGRlZmF1bHQgc2l6ZSBhbmQgdGhlbiBjZW50ZXIgaXQKQEAgLTU0NCwzMiArNjAwLDEw
IEBAIHN0YXRpYyB2b2lkIHBhaW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwg
R1R5cGUgd2lkZ2V0VHlwZSwgY29uc3QgUmVuCiAgICAgICAgIHJlY3Quc2V0SGVpZ2h0KGluZGlj
YXRvclNpemUpOyAvLyBJbiBjYXNlIHJlY3QuaGVpZ2h0KCkgd2FzIGVxdWFsIHRvIGluZGljYXRv
clNpemUgKyAxLgogICAgIH0KIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVj
dGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpKTsKLQotI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDE5LCAyKQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250
ZXh0LmdldCgpLCAidG9nZ2xlIik7Ci0jZWxzZQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9j
bGFzcyhjb250ZXh0LmdldCgpLCB3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTiA/
IEdUS19TVFlMRV9DTEFTU19DSEVDSyA6IEdUS19TVFlMRV9DTEFTU19SQURJTyk7Ci0jZW5kaWYK
LQotICAgIGd1aW50IGZsYWdzID0gMDsKLSAgICBpZiAoIXRoZW1lLT5pc0VuYWJsZWQocmVuZGVy
T2JqZWN0KSkKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkU7Ci0g
ICAgZWxzZSBpZiAodGhlbWUtPmlzSG92ZXJlZChyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFn
cyB8PSBHVEtfU1RBVEVfRkxBR19QUkVMSUdIVDsKLSAgICBpZiAodGhlbWUtPmlzSW5kZXRlcm1p
bmF0ZShyZW5kZXJPYmplY3QpKQotICAgICAgICBmbGFncyB8PSBHVEtfU1RBVEVfRkxBR19JTkNP
TlNJU1RFTlQ7Ci0gICAgZWxzZSBpZiAodGhlbWUtPmlzQ2hlY2tlZChyZW5kZXJPYmplY3QpKQot
I2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDEzLCA3KQotICAgICAgICBmbGFncyB8PSBHVEtfU1RB
VEVfRkxBR19DSEVDS0VEOwotI2Vsc2UKLSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdf
QUNUSVZFOwotI2VuZGlmCi0gICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkK
LSAgICAgICAgZmxhZ3MgfD0gR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQ7Ci0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxh
Z3M+KGZsYWdzKSk7CisgICAgZ3RrX3JlbmRlcl9iYWNrZ3JvdW5kKGNvbnRleHQuZ2V0KCksIHBh
aW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0
LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKKyAgICBndGtfcmVuZGVyX2ZyYW1l
KGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNy
KCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKIAot
ICAgIGlmICh3aWRnZXRUeXBlID09IEdUS19UWVBFX0NIRUNLX0JVVFRPTikKKyAgICBpZiAodGhl
bWVQYXJ0ID09IENoZWNrQnV0dG9uKQogICAgICAgICBndGtfcmVuZGVyX2NoZWNrKGNvbnRleHQu
Z2V0KCksIHBhaW50SW5mby5jb250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3Qu
eCgpLCByZWN0LnkoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKICAgICBlbHNlCiAg
ICAgICAgIGd0a19yZW5kZXJfb3B0aW9uKGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5jb250ZXh0
KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIHJlY3QueCgpLCByZWN0LnkoKSwgcmVjdC53aWR0
aCgpLCByZWN0LmhlaWdodCgpKTsKQEAgLTU4NiwyMyArNjIwLDIzIEBAIHN0YXRpYyB2b2lkIHBh
aW50VG9nZ2xlKGNvbnN0IFJlbmRlclRoZW1lR3RrKiB0aGVtZSwgR1R5cGUgd2lkZ2V0VHlwZSwg
Y29uc3QgUmVuCiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnNldENoZWNrYm94U2l6ZShSZW5kZXJT
dHlsZSYgc3R5bGUpIGNvbnN0CiB7Ci0gICAgc2V0VG9nZ2xlU2l6ZShHVEtfVFlQRV9DSEVDS19C
VVRUT04sIHN0eWxlKTsKKyAgICBzZXRUb2dnbGVTaXplKENoZWNrQnV0dG9uLCBzdHlsZSk7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2hlY2tib3goY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0
JiByZWN0KQogewotICAgIHBhaW50VG9nZ2xlKHRoaXMsIEdUS19UWVBFX0NIRUNLX0JVVFRPTiwg
cmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOworICAgIHBhaW50VG9nZ2xlKHRoaXMsIENo
ZWNrQnV0dG9uLCByZW5kZXJPYmplY3QsIHBhaW50SW5mbywgcmVjdCk7CiAgICAgcmV0dXJuIGZh
bHNlOwogfQogCiB2b2lkIFJlbmRlclRoZW1lR3RrOjpzZXRSYWRpb1NpemUoUmVuZGVyU3R5bGUm
IHN0eWxlKSBjb25zdAogewotICAgIHNldFRvZ2dsZVNpemUoR1RLX1RZUEVfUkFESU9fQlVUVE9O
LCBzdHlsZSk7CisgICAgc2V0VG9nZ2xlU2l6ZShSYWRpb0J1dHRvbiwgc3R5bGUpOwogfQogCiBi
b29sIFJlbmRlclRoZW1lR3RrOjpwYWludFJhZGlvKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVy
T2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkK
IHsKLSAgICBwYWludFRvZ2dsZSh0aGlzLCBHVEtfVFlQRV9SQURJT19CVVRUT04sIHJlbmRlck9i
amVjdCwgcGFpbnRJbmZvLCByZWN0KTsKKyAgICBwYWludFRvZ2dsZSh0aGlzLCBSYWRpb0J1dHRv
biwgcmVuZGVyT2JqZWN0LCBwYWludEluZm8sIHJlY3QpOwogICAgIHJldHVybiBmYWxzZTsKIH0K
IApAQCAtNjc0LDE1ICs3MDgsOSBAQCBzdGF0aWMgdm9pZCByZW5kZXJCdXR0b24oUmVuZGVyVGhl
bWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNvbnN0IFJlbgogfQogYm9vbCBS
ZW5kZXJUaGVtZUd0azo6cGFpbnRCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0
KEdUS19UWVBFX0JVVFRPTik7Ci0KKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChCdXR0b24pOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4o
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpKTsKLSNp
ZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotI2VuZGlmCi0K
ICAgICByZW5kZXJCdXR0b24odGhpcywgY29udGV4dC5nZXQoKSwgcmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8sIHJlY3QpOwotCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCkBAIC03MDAsMzAgKzcyOCwx
NiBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RNZW51TGlzdEJ1dHRvblN0eWxlKFN0eWxl
UmVzb2x2ZXImIHN0eWxlUmVzb2x2ZXIsIFJlbgogICAgIGFkanVzdE1lbnVMaXN0U3R5bGUoc3R5
bGVSZXNvbHZlciwgc3R5bGUsIGUpOwogfQogCi1zdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJp
Y3MoUmVuZGVyU3R5bGUmIHN0eWxlLCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cywgaW50
JiBzZXBhcmF0b3IpCitzdGF0aWMgdm9pZCBnZXRDb21ib0JveE1ldHJpY3MoUmVuZGVyU3R5bGUm
IHN0eWxlLCBHdGtCb3JkZXImIGJvcmRlciwgaW50JiBmb2N1cykKIHsKICAgICAvLyBJZiB0aGlz
IG1lbnUgbGlzdCBidXR0b24gaXNuJ3QgZHJhd24gdXNpbmcgdGhlIG5hdGl2ZSB0aGVtZSwgd2UK
ICAgICAvLyBkb24ndCBhZGQgYW55IGV4dHJhIHBhZGRpbmcgYmV5b25kIHdoYXQgV2ViQ29yZSBh
bHJlYWR5IHVzZXMuCiAgICAgaWYgKHN0eWxlLmFwcGVhcmFuY2UoKSA9PSBOb0NvbnRyb2xQYXJ0
KQogICAgICAgICByZXR1cm47CiAKLSAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9DT01CT19CT1gpOwotI2lmIEdUS19DSEVD
S19WRVJTSU9OKDMsIDE5LCAyKQotICAgIEdSZWZQdHI8R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFk
b3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOwotCi0gICAgZ3RrX3dpZGdldF9wYXRoX2Fw
cGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0NPTUJPX0JPWCk7Ci0gICAgZ3RrX3dpZGdl
dF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJjb21ib2JveCIpOwot
Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX0NP
TUJPX0JPWCk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1lKHBhdGgu
Z2V0KCksIDEsICJidXR0b24iKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9hZGRfY2xhc3Mo
cGF0aC5nZXQoKSwgMSwgImNvbWJvIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfcGF0
aChjb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKLSNlbHNlCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19CVVRUT04pOwotI2Vu
ZGlmCisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudENvbnRleHQgPSBjcmVhdGVT
dHlsZUNvbnRleHQoQ29tYm9Cb3gpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KENvbWJvQm94QnV0dG9uLCBwYXJlbnRDb250ZXh0Lmdl
dCgpKTsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCks
IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24oc3R5bGUuZGly
ZWN0aW9uKCkpKSk7Ci0KICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5n
ZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oMCkpOwogICAgIGd0a19zdHlsZV9jb250
ZXh0X2dldF9ib3JkZXIoY29udGV4dC5nZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRl
KGNvbnRleHQuZ2V0KCkpLCAmYm9yZGVyKTsKIApAQCAtNzMxLDYxICs3NDUsNDMgQEAgc3RhdGlj
IHZvaWQgZ2V0Q29tYm9Cb3hNZXRyaWNzKFJlbmRlclN0eWxlJiBzdHlsZSwgR3RrQm9yZGVyJiBi
b3JkZXIsIGludCYgZm9jdXMKICAgICBnaW50IGZvY3VzV2lkdGgsIGZvY3VzUGFkOwogICAgIGd0
a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0LmdldCgpLCAiaW50ZXJpb3ItZm9jdXMi
LCAmaW50ZXJpb3JGb2N1cywgImZvY3VzLWxpbmUtd2lkdGgiLCAmZm9jdXNXaWR0aCwgImZvY3Vz
LXBhZGRpbmciLCAmZm9jdXNQYWQsIG51bGxwdHIpOwogICAgIGZvY3VzID0gaW50ZXJpb3JGb2N1
cyA/IGZvY3VzV2lkdGggKyBmb2N1c1BhZCA6IDA7Ci0KLSAgICBjb250ZXh0ID0gY3JlYXRlU3R5
bGVDb250ZXh0KEdUS19UWVBFX1NFUEFSQVRPUik7Ci0KLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRp
cmVjdGlvbiA9IHN0YXRpY19jYXN0PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24o
c3R5bGUuZGlyZWN0aW9uKCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9u
KGNvbnRleHQuZ2V0KCksIGRpcmVjdGlvbik7Ci0jaWYgIUdUS19DSEVDS19WRVJTSU9OKDMsIDE5
LCAyKQotICAgIGd0a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhjb250ZXh0LmdldCgpLCAic2Vw
YXJhdG9yIik7Ci0jZW5kaWYKLQotICAgIGdib29sZWFuIHdpZGVTZXBhcmF0b3JzOwotICAgIGdp
bnQgc2VwYXJhdG9yV2lkdGg7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0eWxlKGNvbnRl
eHQuZ2V0KCksICJ3aWRlLXNlcGFyYXRvcnMiLCAmd2lkZVNlcGFyYXRvcnMsICJzZXBhcmF0b3It
d2lkdGgiLCAmc2VwYXJhdG9yV2lkdGgsIG51bGxwdHIpOwotCi0gICAgLy8gR1RLKyBhbHdheXMg
dXNlcyBib3JkZXIubGVmdCwgcmVnYXJkbGVzcyBvZiB0ZXh0IGRpcmVjdGlvbi4gU2VlIGd0a3Nl
cGVyYXRvci5jLgotICAgIGlmICghd2lkZVNlcGFyYXRvcnMpCi0gICAgICAgIHNlcGFyYXRvcldp
ZHRoID0gYm9yZGVyLmxlZnQ7Ci0KLSAgICBzZXBhcmF0b3IgPSBzZXBhcmF0b3JXaWR0aDsKIH0K
IAogaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0xlZnQoUmVuZGVyU3R5
bGUmIHN0eWxlKSBjb25zdAogewogICAgIEd0a0JvcmRlciBib3JkZXJXaWR0aCA9IHsgMCwgMCwg
MCwgMCB9OwotICAgIGludCBmb2N1c1dpZHRoID0gMCwgc2VwYXJhdG9yV2lkdGggPSAwOwotICAg
IGdldENvbWJvQm94TWV0cmljcyhzdHlsZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgsIHNlcGFy
YXRvcldpZHRoKTsKKyAgICBpbnQgZm9jdXNXaWR0aCA9IDA7CisgICAgZ2V0Q29tYm9Cb3hNZXRy
aWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCk7CiAgICAgaW50IGxlZnQgPSBib3Jk
ZXJXaWR0aC5sZWZ0ICsgZm9jdXNXaWR0aDsKICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0g
UlRMKQotICAgICAgICBsZWZ0ICs9IHNlcGFyYXRvcldpZHRoICsgbWluQXJyb3dTaXplOworICAg
ICAgICBsZWZ0ICs9IG1pbkFycm93U2l6ZTsKICAgICByZXR1cm4gbGVmdDsKIH0KIAogaW50IFJl
bmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1JpZ2h0KFJlbmRlclN0eWxlJiBzdHls
ZSkgY29uc3QKIHsKICAgICBHdGtCb3JkZXIgYm9yZGVyV2lkdGggPSB7IDAsIDAsIDAsIDAgfTsK
LSAgICBpbnQgZm9jdXNXaWR0aCA9IDAsIHNlcGFyYXRvcldpZHRoID0gMDsKLSAgICBnZXRDb21i
b0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoLCBzZXBhcmF0b3JXaWR0
aCk7CisgICAgaW50IGZvY3VzV2lkdGggPSAwOworICAgIGdldENvbWJvQm94TWV0cmljcyhzdHls
ZSwgYm9yZGVyV2lkdGgsIGZvY3VzV2lkdGgpOwogICAgIGludCByaWdodCA9IGJvcmRlcldpZHRo
LnJpZ2h0ICsgZm9jdXNXaWR0aDsKICAgICBpZiAoc3R5bGUuZGlyZWN0aW9uKCkgPT0gTFRSKQot
ICAgICAgICByaWdodCArPSBzZXBhcmF0b3JXaWR0aCArIG1pbkFycm93U2l6ZTsKKyAgICAgICAg
cmlnaHQgKz0gbWluQXJyb3dTaXplOwogICAgIHJldHVybiByaWdodDsKIH0KIAogaW50IFJlbmRl
clRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ1RvcChSZW5kZXJTdHlsZSYgc3R5bGUpIGNv
bnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldpZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAg
aW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JXaWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hN
ZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9jdXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOwor
ICAgIGludCBmb2N1c1dpZHRoID0gMDsKKyAgICBnZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJv
cmRlcldpZHRoLCBmb2N1c1dpZHRoKTsKICAgICByZXR1cm4gYm9yZGVyV2lkdGgudG9wICsgZm9j
dXNXaWR0aDsKIH0KIAogaW50IFJlbmRlclRoZW1lR3RrOjpwb3B1cEludGVybmFsUGFkZGluZ0Jv
dHRvbShSZW5kZXJTdHlsZSYgc3R5bGUpIGNvbnN0CiB7CiAgICAgR3RrQm9yZGVyIGJvcmRlcldp
ZHRoID0geyAwLCAwLCAwLCAwIH07Ci0gICAgaW50IGZvY3VzV2lkdGggPSAwLCBzZXBhcmF0b3JX
aWR0aCA9IDA7Ci0gICAgZ2V0Q29tYm9Cb3hNZXRyaWNzKHN0eWxlLCBib3JkZXJXaWR0aCwgZm9j
dXNXaWR0aCwgc2VwYXJhdG9yV2lkdGgpOworICAgIGludCBmb2N1c1dpZHRoID0gMDsKKyAgICBn
ZXRDb21ib0JveE1ldHJpY3Moc3R5bGUsIGJvcmRlcldpZHRoLCBmb2N1c1dpZHRoKTsKICAgICBy
ZXR1cm4gYm9yZGVyV2lkdGguYm90dG9tICsgZm9jdXNXaWR0aDsKIH0KIApAQCAtNzk3LDEyICs3
OTMsMTEgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICBjYWlyb190KiBjYWlyb0NvbnRl
eHQgPSBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpOwogICAgIEd0
a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gc3RhdGljX2Nhc3Q8R3RrVGV4dERpcmVjdGlvbj4o
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwogCisg
ICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudFN0eWxlQ29udGV4dCA9IGNyZWF0ZVN0
eWxlQ29udGV4dChDb21ib0JveCk7CisKICAgICAvLyBQYWludCB0aGUgYnV0dG9uLgotICAgIEdS
ZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBidXR0b25TdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNv
bnRleHQoR1RLX1RZUEVfQlVUVE9OKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gYnV0
dG9uU3R5bGVDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KENvbWJvQm94QnV0dG9uLCBwYXJl
bnRTdHlsZUNvbnRleHQuZ2V0KCkpOwogICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rp
b24oYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpLCBkaXJlY3Rpb24pOwotI2lmICFHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAxOSwgMikKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoYnV0dG9u
U3R5bGVDb250ZXh0LmdldCgpLCBHVEtfU1RZTEVfQ0xBU1NfQlVUVE9OKTsKLSNlbmRpZgogICAg
IHJlbmRlckJ1dHRvbih0aGlzLCBidXR0b25TdHlsZUNvbnRleHQuZ2V0KCksIHJlbmRlck9iamVj
dCwgcGFpbnRJbmZvLCByZWN0KTsKIAogICAgIC8vIEdldCB0aGUgaW5uZXIgcmVjdGFuZ2xlLgpA
QCAtODM2LDE2ICs4MzEsMTYgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlzdChj
b25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICBpbm5lclJl
Y3Quc2V0SGVpZ2h0KHN0ZDo6bWF4KDEsIGlubmVyUmVjdC5oZWlnaHQoKSkpOwogCiAgICAgLy8g
UGFpbnQgdGhlIGFycm93LgotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBhcnJvd1N0eWxl
Q29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9BUlJPVyk7Ci0KKyAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gYXJyb3dTdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRl
eHQoQ29tYm9Cb3hBcnJvdywgYnV0dG9uU3R5bGVDb250ZXh0LmdldCgpKTsKICAgICBndGtfc3R5
bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGFycm93U3R5bGVDb250ZXh0LmdldCgpLCBkaXJlY3Rp
b24pOwotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBndGtfc3R5bGVfY29u
dGV4dF9hZGRfY2xhc3MoYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksICJhcnJvdyIpOwotICAgIGd0
a19zdHlsZV9jb250ZXh0X2FkZF9jbGFzcyhhcnJvd1N0eWxlQ29udGV4dC5nZXQoKSwgR1RLX1NU
WUxFX0NMQVNTX0JVVFRPTik7Ci0jZW5kaWYKIAorI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5
LCAyKQorICAgIC8vIGFycm93LXNjYWxpbmcgc3R5bGUgcHJvcGVydHkgaXMgbm93IGRlcHJlY2F0
ZWQgYW5kIGlnbm9yZWQuCisgICAgZ2Zsb2F0IGFycm93U2NhbGluZyA9IDEuOworI2Vsc2UKICAg
ICBnZmxvYXQgYXJyb3dTY2FsaW5nOwotICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShh
cnJvd1N0eWxlQ29udGV4dC5nZXQoKSwgImFycm93LXNjYWxpbmciLCAmYXJyb3dTY2FsaW5nLCBu
dWxscHRyKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUocGFyZW50U3R5bGVDb250
ZXh0LmdldCgpLCAiYXJyb3ctc2NhbGluZyIsICZhcnJvd1NjYWxpbmcsIG51bGxwdHIpOworI2Vu
ZGlmCiAKICAgICBJbnRTaXplIGFycm93U2l6ZShtaW5BcnJvd1NpemUsIGlubmVyUmVjdC5oZWln
aHQoKSk7CiAgICAgRmxvYXRQb2ludCBhcnJvd1Bvc2l0aW9uKGlubmVyUmVjdC5sb2NhdGlvbigp
KTsKQEAgLTg2MCw1NiArODU1LDYgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRNZW51TGlz
dChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnQKICAgICBndGtf
c3R5bGVfY29udGV4dF9zZXRfc3RhdGUoYXJyb3dTdHlsZUNvbnRleHQuZ2V0KCksIHN0YXRlKTsK
ICAgICBndGtfcmVuZGVyX2Fycm93KGFycm93U3R5bGVDb250ZXh0LmdldCgpLCBjYWlyb0NvbnRl
eHQsIEdfUEksIGFycm93UG9zaXRpb24ueCgpLCBhcnJvd1Bvc2l0aW9uLnkoKSwgZXh0ZW50KTsK
IAotICAgIC8vIFBhaW50IHRoZSBzZXBhcmF0b3IgaWYgbmVlZGVkLgotICAgIEdSZWZQdHI8R3Rr
U3R5bGVDb250ZXh0PiBzZXBhcmF0b3JTdHlsZUNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQo
R1RLX1RZUEVfQ09NQk9fQk9YKTsKLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAg
ICBHUmVmUHRyPEd0a1dpZGdldFBhdGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRo
X25ldygpKTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBH
VEtfVFlQRV9TRVBBUkFUT1IpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3Rf
bmFtZShwYXRoLmdldCgpLCAwLCAic2VwYXJhdG9yIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChzZXBhcmF0b3JTdHlsZUNvbnRleHQuZ2V0KCksIHBhdGguZ2V0KCkpOwotI2Vs
c2UKLSAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3Moc2VwYXJhdG9yU3R5bGVDb250ZXh0
LmdldCgpLCAic2VwYXJhdG9yIik7Ci0jZW5kaWYKLQotICAgIGd0a19zdHlsZV9jb250ZXh0X3Nl
dF9kaXJlY3Rpb24oc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCBkaXJlY3Rpb24pOwotCi0g
ICAgZ2Jvb2xlYW4gd2lkZVNlcGFyYXRvcnM7Ci0gICAgZ2ludCBzZXBhcmF0b3JXaWR0aDsKLSAg
ICBndGtfc3R5bGVfY29udGV4dF9nZXRfc3R5bGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgp
LCAid2lkZS1zZXBhcmF0b3JzIiwgJndpZGVTZXBhcmF0b3JzLCAic2VwYXJhdG9yLXdpZHRoIiwg
JnNlcGFyYXRvcldpZHRoLCBudWxscHRyKTsKLSAgICBpZiAod2lkZVNlcGFyYXRvcnMgJiYgIXNl
cGFyYXRvcldpZHRoKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICBndGtfc3R5bGVfY29u
dGV4dF9zZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCBzdGF0ZSk7Ci0gICAg
SW50UG9pbnQgc2VwYXJhdG9yUG9zaXRpb24oYXJyb3dQb3NpdGlvbi54KCksIGlubmVyUmVjdC55
KCkpOwotICAgIGlmICh3aWRlU2VwYXJhdG9ycykgewotICAgICAgICBpZiAoZGlyZWN0aW9uID09
IEdUS19URVhUX0RJUl9MVFIpCi0gICAgICAgICAgICBzZXBhcmF0b3JQb3NpdGlvbi5tb3ZlKC1z
ZXBhcmF0b3JXaWR0aCwgMCk7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHNlcGFyYXRvclBv
c2l0aW9uLm1vdmUoYXJyb3dTaXplLndpZHRoKCksIDApOwotCi0gICAgICAgIGd0a19yZW5kZXJf
ZnJhbWUoc2VwYXJhdG9yU3R5bGVDb250ZXh0LmdldCgpLCBjYWlyb0NvbnRleHQsIHNlcGFyYXRv
clBvc2l0aW9uLngoKSwgc2VwYXJhdG9yUG9zaXRpb24ueSgpLCBzZXBhcmF0b3JXaWR0aCwgaW5u
ZXJSZWN0LmhlaWdodCgpKTsKLSAgICB9IGVsc2UgewotICAgICAgICBHdGtCb3JkZXIgcGFkZGlu
ZzsKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3BhZGRpbmcoc2VwYXJhdG9yU3R5bGVD
b250ZXh0LmdldCgpLCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoc2VwYXJhdG9yU3R5bGVD
b250ZXh0LmdldCgpKSwgJnBhZGRpbmcpOwotICAgICAgICBHdGtCb3JkZXIgYm9yZGVyOwotICAg
ICAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfYm9yZGVyKHNlcGFyYXRvclN0eWxlQ29udGV4dC5n
ZXQoKSwgZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X3N0YXRlKHNlcGFyYXRvclN0eWxlQ29udGV4dC5n
ZXQoKSksICZib3JkZXIpOwotCi0gICAgICAgIGlmIChkaXJlY3Rpb24gPT0gR1RLX1RFWFRfRElS
X0xUUikKLSAgICAgICAgICAgIHNlcGFyYXRvclBvc2l0aW9uLm1vdmUoLShwYWRkaW5nLmxlZnQg
KyBib3JkZXIubGVmdCksIDApOwotICAgICAgICBlbHNlCi0gICAgICAgICAgICBzZXBhcmF0b3JQ
b3NpdGlvbi5tb3ZlKGFycm93U2l6ZS53aWR0aCgpLCAwKTsKLQotICAgICAgICBjYWlyb19zYXZl
KGNhaXJvQ29udGV4dCk7Ci0KLSAgICAgICAgLy8gQW4gZXh0cmEgY2xpcCBwcmV2ZW50cyB0aGUg
c2VwYXJhdG9yIGJsZWVkaW5nIG91dHNpZGUgb2YgdGhlIHNwZWNpZmllZCByZWN0YW5nbGUgYmVj
YXVzZSBvZiBzdWJwaXhlbCBwb3NpdGlvbmluZy4KLSAgICAgICAgY2Fpcm9fcmVjdGFuZ2xlKGNh
aXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQb3NpdGlvbi55KCks
IGJvcmRlci5sZWZ0LCBpbm5lclJlY3QuaGVpZ2h0KCkpOwotICAgICAgICBjYWlyb19jbGlwKGNh
aXJvQ29udGV4dCk7Ci0gICAgICAgIGd0a19yZW5kZXJfbGluZShzZXBhcmF0b3JTdHlsZUNvbnRl
eHQuZ2V0KCksIGNhaXJvQ29udGV4dCwgc2VwYXJhdG9yUG9zaXRpb24ueCgpLCBzZXBhcmF0b3JQ
b3NpdGlvbi55KCksIHNlcGFyYXRvclBvc2l0aW9uLngoKSwgaW5uZXJSZWN0Lm1heFkoKSk7Ci0g
ICAgICAgIGNhaXJvX3Jlc3RvcmUoY2Fpcm9Db250ZXh0KTsKLSAgICB9Ci0KICAgICByZXR1cm4g
ZmFsc2U7CiB9CiAKQEAgLTkyMCwxMiArODY1LDggQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRNZW51TGlzdEJ1dHRvbkRlY29yYXRpb25zKGNvbnN0IFJlbmRlckJveCYgb2JqZWN0LCBjb24K
IAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRUZXh0RmllbGQoY29uc3QgUmVuZGVyT2JqZWN0
JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBGbG9hdFJl
Y3QmIHJlY3QpCiB7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVh
dGVTdHlsZUNvbnRleHQoR1RLX1RZUEVfRU5UUlkpOwotCisgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoRW50cnkpOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrVGV4
dERpcmVjdGlvbj4oZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSkpKTsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgZ3RrX3N0eWxl
X2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19FTlRSWSk7
Ci0jZW5kaWYKIAogICAgIGd1aW50IGZsYWdzID0gMDsKICAgICBpZiAoIWlzRW5hYmxlZChyZW5k
ZXJPYmplY3QpIHx8IGlzUmVhZE9ubHlDb250cm9sKHJlbmRlck9iamVjdCkpCkBAIC05NTYsMjMg
Kzg5Nyw2IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50VGV4dEFyZWEoY29uc3QgUmVuZGVy
T2JqZWN0JiBvLCBjb25zdCBQYWludEluZm8mIGksIGNvCiAgICAgcmV0dXJuIHBhaW50VGV4dEZp
ZWxkKG8sIGksIHIpOwogfQogCi1zdGF0aWMgdm9pZCBwYWludEdka1BpeGJ1ZihHcmFwaGljc0Nv
bnRleHQmIGNvbnRleHQsIGNvbnN0IEdka1BpeGJ1ZiogaWNvbiwgY29uc3QgSW50UmVjdCYgaWNv
blJlY3QpCi17Ci0gICAgSW50U2l6ZSBpY29uU2l6ZShnZGtfcGl4YnVmX2dldF93aWR0aChpY29u
KSwgZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24pKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4g
c2NhbGVkSWNvbjsKLSAgICBpZiAoaWNvblJlY3Quc2l6ZSgpICE9IGljb25TaXplKSB7Ci0gICAg
ICAgIC8vIFdlIGNvdWxkIHVzZSBjYWlyb19zY2FsZSgpIGhlcmUgYnV0IGNhaXJvL3BpeG1hbiBk
b3duc2NhbGUgcXVhbGl0eSBpcyBxdWl0ZSBiYWQuCi0gICAgICAgIHNjYWxlZEljb24gPSBhZG9w
dEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvbiwgaWNvblJlY3Qud2lkdGgoKSwgaWNv
blJlY3QuaGVpZ2h0KCksIEdES19JTlRFUlBfQklMSU5FQVIpKTsKLSAgICAgICAgaWNvbiA9IHNj
YWxlZEljb24uZ2V0KCk7Ci0gICAgfQotCi0gICAgY2Fpcm9fdCogY3IgPSBjb250ZXh0LnBsYXRm
b3JtQ29udGV4dCgpLT5jcigpOwotICAgIGNhaXJvX3NhdmUoY3IpOwotICAgIGdka19jYWlyb19z
ZXRfc291cmNlX3BpeGJ1ZihjciwgaWNvbiwgaWNvblJlY3QueCgpLCBpY29uUmVjdC55KCkpOwot
ICAgIGNhaXJvX3BhaW50KGNyKTsKLSAgICBjYWlyb19yZXN0b3JlKGNyKTsKLX0KLQogLy8gRGVm
aW5lZCBpbiBHVEsrIChndGsvZ3RraWNvbmZhY3RvcnkuYykKIHN0YXRpYyBjb25zdCBnaW50IGd0
a0ljb25TaXplTWVudSA9IDE2Owogc3RhdGljIGNvbnN0IGdpbnQgZ3RrSWNvblNpemVTbWFsbFRv
b2xiYXIgPSAxODsKQEAgLTEwMDcsMjcgKzkzMSwzMyBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpw
YWludFNlYXJjaEZpZWxkUmVzdWx0c0J1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIG8sIGNvbnN0
CiAgICAgcmV0dXJuIHBhaW50U2VhcmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQobywgaSwg
cmVjdCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJlbmRl
clN0eWxlJiBzdHlsZSkKK3N0YXRpYyB2b2lkIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKFJl
bmRlclRoZW1lUGFydCB0aGVtZVBhcnQsIFJlbmRlclN0eWxlJiBzdHlsZSkKIHsKICAgICBzdHls
ZS5yZXNldEJvcmRlcigpOwogICAgIHN0eWxlLnJlc2V0UGFkZGluZygpOwogCisgICAgR1JlZlB0
cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVudENvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoRW50
cnkpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVD
b250ZXh0KHRoZW1lUGFydCwgcGFyZW50Q29udGV4dC5nZXQoKSk7CisKKyAgICBHdGtCb3JkZXIg
cGFkZGluZzsKKyAgICBndGtfc3R5bGVfY29udGV4dF9nZXRfcGFkZGluZyhjb250ZXh0LmdldCgp
LCBndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dC5nZXQoKSksICZwYWRkaW5nKTsK
KwogICAgIC8vIEdldCB0aGUgaWNvbiBzaXplIGJhc2VkIG9uIHRoZSBmb250IHNpemUuCiAgICAg
aW50IGZvbnRTaXplID0gc3R5bGUuZm9udFNpemUoKTsKICAgICBpZiAoZm9udFNpemUgPCBndGtJ
Y29uU2l6ZU1lbnUpIHsKLSAgICAgICAgc3R5bGUuc2V0V2lkdGgoTGVuZ3RoKGZvbnRTaXplLCBG
aXhlZCkpOwotICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGZvbnRTaXplLCBGaXhlZCkp
OworICAgICAgICBzdHlsZS5zZXRXaWR0aChMZW5ndGgoZm9udFNpemUgKyAocGFkZGluZy5sZWZ0
ICsgcGFkZGluZy5yaWdodCksIEZpeGVkKSk7CisgICAgICAgIHN0eWxlLnNldEhlaWdodChMZW5n
dGgoZm9udFNpemUgKyAocGFkZGluZy50b3AgKyBwYWRkaW5nLmJvdHRvbSksIEZpeGVkKSk7CiAg
ICAgICAgIHJldHVybjsKICAgICB9CiAgICAgZ2ludCB3aWR0aCA9IDAsIGhlaWdodCA9IDA7CiAg
ICAgZ3RrX2ljb25fc2l6ZV9sb29rdXAoZ2V0SWNvblNpemVGb3JQaXhlbFNpemUoZm9udFNpemUp
LCAmd2lkdGgsICZoZWlnaHQpOwotICAgIHN0eWxlLnNldFdpZHRoKExlbmd0aCh3aWR0aCwgRml4
ZWQpKTsKLSAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKGhlaWdodCwgRml4ZWQpKTsKKyAgICBz
dHlsZS5zZXRXaWR0aChMZW5ndGgod2lkdGggKyAocGFkZGluZy5sZWZ0ICsgcGFkZGluZy5yaWdo
dCksIEZpeGVkKSk7CisgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChoZWlnaHQgKyAocGFkZGlu
Zy50b3AgKyBwYWRkaW5nLmJvdHRvbSksIEZpeGVkKSk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVH
dGs6OmFkanVzdFNlYXJjaEZpZWxkUmVzdWx0c0RlY29yYXRpb25QYXJ0U3R5bGUoU3R5bGVSZXNv
bHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgYWRqdXN0
U2VhcmNoRmllbGRJY29uU3R5bGUoc3R5bGUpOworICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0
eWxlKEVudHJ5SWNvbkxlZnQsIHN0eWxlKTsKIH0KIAogc3RhdGljIEludFJlY3QgY2VudGVyUmVj
dFZlcnRpY2FsbHlJblBhcmVudElucHV0RWxlbWVudChjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgSW50UmVjdCYgcmVjdCkKQEAgLTEwNTMsMjMgKzk4Myw0MSBAQCBzdGF0
aWMgSW50UmVjdCBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5wdXRFbGVtZW50KGNvbnN0
IFJlbmRlck9iamVjdCYgcmVuZAogICAgIHJldHVybiBzY2FsZWRSZWN0OwogfQogCitzdGF0aWMg
Ym9vbCBwYWludEljb24oR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBHcmFwaGljc0NvbnRleHQm
IGdyYXBoaWNzQ29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogaWNvbk5h
bWUpCit7CisgICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24gPSBsb2FkVGhlbWVkSWNvbihjb250
ZXh0LCBpY29uTmFtZSwgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOwor
ICAgIGlmICghaWNvbikKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKGdka19waXhi
dWZfZ2V0X3dpZHRoKGljb24uZ2V0KCkpID4gcmVjdC53aWR0aCgpIHx8IGdka19waXhidWZfZ2V0
X2hlaWdodChpY29uLmdldCgpKSA+IHJlY3QuaGVpZ2h0KCkpCisgICAgICAgIGljb24gPSBhZG9w
dEdSZWYoZ2RrX3BpeGJ1Zl9zY2FsZV9zaW1wbGUoaWNvbi5nZXQoKSwgcmVjdC53aWR0aCgpLCBy
ZWN0LmhlaWdodCgpLCBHREtfSU5URVJQX0JJTElORUFSKSk7CisKKyAgICBndGtfcmVuZGVyX2lj
b24oY29udGV4dCwgZ3JhcGhpY3NDb250ZXh0LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBpY29u
LmdldCgpLCByZWN0LngoKSwgcmVjdC55KCkpOworICAgIHJldHVybiB0cnVlOworfQorCitzdGF0
aWMgYm9vbCBwYWludEVudHJ5SWNvbihSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBjb25zdCBj
aGFyKiBpY29uTmFtZSwgR3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IElu
dFJlY3QmIHJlY3QsIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uLCBHdGtTdGF0ZUZsYWdzIHN0
YXRlKQoreworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBwYXJlbnRDb250ZXh0ID0gY3Jl
YXRlU3R5bGVDb250ZXh0KEVudHJ5KTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29u
dGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dCh0aGVtZVBhcnQsIHBhcmVudENvbnRleHQuZ2V0KCkp
OworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgZGly
ZWN0aW9uKTsKKyAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29udGV4dC5nZXQoKSwg
c3RhdGUpOworICAgIHJldHVybiBwYWludEljb24oY29udGV4dC5nZXQoKSwgZ3JhcGhpY3NDb250
ZXh0LCByZWN0LCBpY29uTmFtZSk7Cit9CisKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRSZXN1bHRzRGVjb3JhdGlvblBhcnQoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQog
ewogICAgIEludFJlY3QgaWNvblJlY3QgPSBjZW50ZXJSZWN0VmVydGljYWxseUluUGFyZW50SW5w
dXRFbGVtZW50KHJlbmRlck9iamVjdCwgcmVjdCk7CiAgICAgaWYgKGljb25SZWN0LmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+IGljb24g
PSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RPQ0tfRklO
RCwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rp
b24oKSksCi0gICAgICAgIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLAotICAgICAg
ICBnZXRJY29uU2l6ZUZvclBpeGVsU2l6ZShyZWN0LmhlaWdodCgpKSk7Ci0gICAgcGFpbnRHZGtQ
aXhidWYocGFpbnRJbmZvLmNvbnRleHQoKSwgaWNvbi5nZXQoKSwgaWNvblJlY3QpOwotICAgIHJl
dHVybiBmYWxzZTsKKyAgICByZXR1cm4gcGFpbnRFbnRyeUljb24oRW50cnlJY29uTGVmdCwgImVk
aXQtZmluZC1zeW1ib2xpYyIsIHBhaW50SW5mby5jb250ZXh0KCksIGljb25SZWN0LCBndGtUZXh0
RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAgICAgICAgZ3Rr
SWNvblN0YXRlRmxhZ3ModGhpcywgcmVuZGVyT2JqZWN0KSk7CiB9CiAKIHZvaWQgUmVuZGVyVGhl
bWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkQ2FuY2VsQnV0dG9uU3R5bGUoU3R5bGVSZXNvbHZlciYs
IFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CiB7Ci0gICAgYWRqdXN0U2VhcmNo
RmllbGRJY29uU3R5bGUoc3R5bGUpOworICAgIGFkanVzdFNlYXJjaEZpZWxkSWNvblN0eWxlKEVu
dHJ5SWNvblJpZ2h0LCBzdHlsZSk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2Vh
cmNoRmllbGRDYW5jZWxCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNv
bnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQpAQCAtMTA3OCwx
MiArMTAyNiw4IEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50U2VhcmNoRmllbGRDYW5jZWxC
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplCiAgICAgaWYgKGljb25SZWN0Lmlz
RW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgR1JlZlB0cjxHZGtQaXhidWY+
IGljb24gPSBnZXRTdG9ja0ljb25Gb3JXaWRnZXRUeXBlKEdUS19UWVBFX0VOVFJZLCBHVEtfU1RP
Q0tfQ0xFQVIsCi0gICAgICAgIGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCku
ZGlyZWN0aW9uKCkpLAotICAgICAgICBndGtJY29uU3RhdGUodGhpcywgcmVuZGVyT2JqZWN0KSwK
LSAgICAgICAgZ2V0SWNvblNpemVGb3JQaXhlbFNpemUocmVjdC5oZWlnaHQoKSkpOwotICAgIHBh
aW50R2RrUGl4YnVmKHBhaW50SW5mby5jb250ZXh0KCksIGljb24uZ2V0KCksIGljb25SZWN0KTsK
LSAgICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIHBhaW50RW50cnlJY29uKEVudHJ5SWNvblJp
Z2h0LCAiZWRpdC1jbGVhci1zeW1ib2xpYyIsIHBhaW50SW5mby5jb250ZXh0KCksIGljb25SZWN0
LCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwKKyAg
ICAgICAgZ3RrSWNvblN0YXRlRmxhZ3ModGhpcywgcmVuZGVyT2JqZWN0KSk7CiB9CiAKIHZvaWQg
UmVuZGVyVGhlbWVHdGs6OmFkanVzdFNlYXJjaEZpZWxkU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJl
bmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCopIGNvbnN0CkBAIC0xMDk4LDI4ICsxMDQyLDkgQEAg
Ym9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRTZWFyY2hGaWVsZChjb25zdCBSZW5kZXJPYmplY3Qm
IG8sIGNvbnN0IFBhaW50SW5mbyYgaSwKICAgICByZXR1cm4gcGFpbnRUZXh0RmllbGQobywgaSwg
cmVjdCk7CiB9CiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50Q2Fwc0xvY2tJbmRpY2F0b3Io
Y29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJ
bmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQorYm9vbCBSZW5kZXJUaGVtZUd0azo6c2hvdWxkSGF2
ZUNhcHNMb2NrSW5kaWNhdG9yKEhUTUxJbnB1dEVsZW1lbnQmIGVsZW1lbnQpIGNvbnN0CiB7Ci0g
ICAgLy8gVGhlIG90aGVyIHBhaW50IG1ldGhvZHMgZG9uJ3QgbmVlZCB0byBjaGVjayB3aGV0aGVy
IHBhaW50aW5nIGlzIGRpc2FibGVkIGJlY2F1c2UgUmVuZGVyVGhlbWUgYWxyZWFkeSBjaGVja3Mg
aXQKLSAgICAvLyBiZWZvcmUgY2FsbGluZyB0aGVtLCBidXQgcGFpbnRDYXBzTG9ja0luZGljYXRv
cigpIGlzIGNhbGxlZCBieSBSZW5kZXJUZXh0Q29udHJvbFNpbmdsZUxpbmUgd2hpY2ggZG9lc24n
dCBjaGVjayBpdC4KLSAgICBpZiAocGFpbnRJbmZvLmNvbnRleHQoKS5wYWludGluZ0Rpc2FibGVk
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgaW50IGljb25TaXplID0gc3RkOjptaW4o
cmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1Zj4gaWNv
biA9IGdldFN0b2NrSWNvbkZvcldpZGdldFR5cGUoR1RLX1RZUEVfRU5UUlksIEdUS19TVE9DS19D
QVBTX0xPQ0tfV0FSTklORywgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5k
aXJlY3Rpb24oKSksIDAsIGdldEljb25TaXplRm9yUGl4ZWxTaXplKGljb25TaXplKSk7Ci0KLSAg
ICAvLyBPbmx5IHJlLXNjYWxlIHRoZSBpY29uIHdoZW4gaXQncyBzbWFsbGVyIHRoYW4gdGhlIG1p
bmltdW0gaWNvbiBzaXplLgotICAgIGlmIChpY29uU2l6ZSA+PSBndGtJY29uU2l6ZU1lbnUpCi0g
ICAgICAgIGljb25TaXplID0gZ2RrX3BpeGJ1Zl9nZXRfaGVpZ2h0KGljb24uZ2V0KCkpOwotCi0g
ICAgLy8gR1RLKyBsb2NhdGVzIHRoZSBpY29uIHJpZ2h0IGFsaWduZWQgaW4gdGhlIGVudHJ5LiBU
aGUgZ2l2ZW4gcmVjdGFuZ2xlIGlzIGFscmVhZHkKLSAgICAvLyBjZW50ZXJlZCB2ZXJ0aWNhbGx5
IGJ5IFJlbmRlclRleHRDb250cm9sU2luZ2xlTGluZS4KLSAgICBJbnRSZWN0IGljb25SZWN0KAot
ICAgICAgICByZWN0LngoKSArIHJlY3Qud2lkdGgoKSAtIGljb25TaXplLAotICAgICAgICByZWN0
LnkoKSArIChyZWN0LmhlaWdodCgpIC0gaWNvblNpemUpIC8gMiwKLSAgICAgICAgaWNvblNpemUs
IGljb25TaXplKTsKLSAgICBwYWludEdka1BpeGJ1ZihwYWludEluZm8uY29udGV4dCgpLCBpY29u
LmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0dXJuIHRydWU7CisgICAgcmV0dXJuIGVsZW1lbnQu
aXNQYXNzd29yZEZpZWxkKCk7CiB9CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdFNsaWRl
clRyYWNrU3R5bGUoU3R5bGVSZXNvbHZlciYsIFJlbmRlclN0eWxlJiBzdHlsZSwgRWxlbWVudCop
IGNvbnN0CkBAIC0xMTMzLDQwICsxMDU4LDE1IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVz
dFNsaWRlclRodW1iU3R5bGUoU3R5bGVSZXNvbHZlciYgc3R5bGVSZXNvbHZlciwgUmVuZGVyCiAg
ICAgc3R5bGUuc2V0Qm94U2hhZG93KG51bGxwdHIpOwogfQogCi1zdGF0aWMgdm9pZCBhcHBseVNs
aWRlclN0eWxlQ29udGV4dENsYXNzZXMoR3RrU3R5bGVDb250ZXh0KiBjb250ZXh0LCBDb250cm9s
UGFydCBwYXJ0KQotewotI2lmICFHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBndGtf
c3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX1NDQUxFKTsK
LSNlbmRpZgotICAgIGlmIChwYXJ0ID09IFNsaWRlckhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0g
U2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCkKLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRk
X2NsYXNzKGNvbnRleHQsIEdUS19TVFlMRV9DTEFTU19IT1JJWk9OVEFMKTsKLSAgICBlbHNlIGlm
IChwYXJ0ID09IFNsaWRlclZlcnRpY2FsUGFydCB8fCBwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0KQotICAgICAgICBndGtfc3R5bGVfY29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RL
X1NUWUxFX0NMQVNTX1ZFUlRJQ0FMKTsKLX0KLQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRT
bGlkZXJUcmFjayhjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJ
bmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQ29udHJvbFBhcnQg
cGFydCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlRfVU5V
U0VEKHBhcnQsIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRhbFBhcnQgfHwgcGFydCA9PSBTbGlkZXJW
ZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclBhcnQpOwotCi0gICAgR1Jl
ZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoR1RLX1RZ
UEVfU0NBTEUpOwotI2lmIEdUS19DSEVDS19WRVJTSU9OKDMsIDE5LCAyKQotICAgIEdSZWZQdHI8
R3RrV2lkZ2V0UGF0aD4gcGF0aCA9IGFkb3B0R1JlZihndGtfd2lkZ2V0X3BhdGhfbmV3KCkpOwot
Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1ND
QUxFKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQo
KSwgMCwgInNjYWxlIik7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5n
ZXQoKSwgR1RLX1RZUEVfU0NBTEUpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAxLCAidHJvdWdoIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKLSNlbmRpZgorICAgIEFTU0VS
VF9VTlVTRUQocGFydCwgcGFydCA9PSBTbGlkZXJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNs
aWRlclZlcnRpY2FsUGFydCk7CiAKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gcGFyZW50
Q29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfYWRkX2NsYXNzKHBhcmVudENvbnRleHQuZ2V0KCksIHBhcnQgPT0gU2xpZGVySG9yaXpvbnRh
bFBhcnQgPyBHVEtfU1RZTEVfQ0xBU1NfSE9SSVpPTlRBTCA6IEdUS19TVFlMRV9DTEFTU19WRVJU
SUNBTCk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHls
ZUNvbnRleHQoU2NhbGVUcm91Z2gsIHBhcmVudENvbnRleHQuZ2V0KCkpOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9kaXJlY3Rpb24oY29udGV4dC5nZXQoKSwgZ3RrVGV4dERpcmVjdGlvbihy
ZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSkpOwotICAgIGFwcGx5U2xpZGVyU3R5bGVD
b250ZXh0Q2xhc3Nlcyhjb250ZXh0LmdldCgpLCBwYXJ0KTsKLSNpZiAhR1RLX0NIRUNLX1ZFUlNJ
T04oMywgMTksIDIpCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0
KCksIEdUS19TVFlMRV9DTEFTU19UUk9VR0gpOwotI2VuZGlmCiAKICAgICBpZiAoIWlzRW5hYmxl
ZChyZW5kZXJPYmplY3QpKQogICAgICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29u
dGV4dC5nZXQoKSwgR1RLX1NUQVRFX0ZMQUdfSU5TRU5TSVRJVkUpOwpAQCAtMTE4OCwyNyArMTA4
OCwxNCBAQCBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludFNsaWRlclRyYWNrKGNvbnN0IFJlbmRl
ck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYQogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFp
bnRTbGlkZXJUaHVtYihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFp
bnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QpCiB7CiAgICAgQ29udHJvbFBh
cnQgcGFydCA9IHJlbmRlck9iamVjdC5zdHlsZSgpLmFwcGVhcmFuY2UoKTsKLSAgICBBU1NFUlQo
cGFydCA9PSBTbGlkZXJUaHVtYkhvcml6b250YWxQYXJ0IHx8IHBhcnQgPT0gU2xpZGVyVGh1bWJW
ZXJ0aWNhbFBhcnQgfHwgcGFydCA9PSBNZWRpYVZvbHVtZVNsaWRlclRodW1iUGFydCk7CisgICAg
QVNTRVJUKHBhcnQgPT0gU2xpZGVyVGh1bWJIb3Jpem9udGFsUGFydCB8fCBwYXJ0ID09IFNsaWRl
clRodW1iVmVydGljYWxQYXJ0KTsKIAotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250
ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKLSNpZiBHVEtfQ0hFQ0tf
VkVSU0lPTigzLCAxOSwgMikKICAgICAvLyBGSVhNRTogVGhlIGVudGlyZSBzbGlkZXIgaXMgdG9v
IHdpZGUsIHN0cmV0Y2hpbmcgdGhlIHRodW1iIGludG8gYW4gb3ZhbCByYXRoZXIgdGhhbiBhIGNp
cmNsZS4KLSAgICBHUmVmUHRyPEd0a1dpZGdldFBhdGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dp
ZGdldF9wYXRoX25ldygpKTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRo
LmdldCgpLCBHVEtfVFlQRV9TQ0FMRSk7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29i
amVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJzY2FsZSIpOwotCi0gICAgZ3RrX3dpZGdldF9wYXRo
X2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDQUxFKTsKLSAgICBndGtfd2lkZ2V0
X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMSwgInRyb3VnaCIpOwotCi0g
ICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdUS19UWVBFX1NDQUxF
KTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwg
MiwgInNsaWRlciIpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4dC5n
ZXQoKSwgcGF0aC5nZXQoKSk7Ci0jZW5kaWYKLQorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0
PiBwYXJlbnRDb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxlKTsKKyAgICBndGtfc3R5
bGVfY29udGV4dF9hZGRfY2xhc3MocGFyZW50Q29udGV4dC5nZXQoKSwgcGFydCA9PSBTbGlkZXJU
aHVtYkhvcml6b250YWxQYXJ0ID8gR1RLX1NUWUxFX0NMQVNTX0hPUklaT05UQUwgOiBHVEtfU1RZ
TEVfQ0xBU1NfVkVSVElDQUwpOworICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiB0cm91Z2hD
b250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KFNjYWxlVHJvdWdoLCBwYXJlbnRDb250ZXh0Lmdl
dCgpKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxl
Q29udGV4dChTY2FsZVNsaWRlciwgdHJvdWdoQ29udGV4dC5nZXQoKSk7CiAgICAgZ3RrX3N0eWxl
X2NvbnRleHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBndGtUZXh0RGlyZWN0aW9uKHJl
bmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7Ci0gICAgYXBwbHlTbGlkZXJTdHlsZUNv
bnRleHRDbGFzc2VzKGNvbnRleHQuZ2V0KCksIHBhcnQpOwogCiAgICAgZ3VpbnQgZmxhZ3MgPSAw
OwogICAgIGlmICghaXNFbmFibGVkKHJlbmRlck9iamVjdCkpCkBAIC0xMjMxLDcgKzExMTgsNyBA
QCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUm
IHN0eWxlLCBFbGVtZW50KikgY29uc3QKICAgICBpZiAocGFydCAhPSBTbGlkZXJUaHVtYkhvcml6
b250YWxQYXJ0ICYmIHBhcnQgIT0gU2xpZGVyVGh1bWJWZXJ0aWNhbFBhcnQpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5
bGVDb250ZXh0KEdUS19UWVBFX1NDQUxFKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4g
Y29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChTY2FsZSk7CiAgICAgZ2ludCBzbGlkZXJXaWR0
aCwgc2xpZGVyTGVuZ3RoOwogICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9zdHlsZShjb250ZXh0
LmdldCgpLCAic2xpZGVyLXdpZHRoIiwgJnNsaWRlcldpZHRoLCAic2xpZGVyLWxlbmd0aCIsICZz
bGlkZXJMZW5ndGgsIG51bGxwdHIpOwogICAgIGlmIChwYXJ0ID09IFNsaWRlclRodW1iSG9yaXpv
bnRhbFBhcnQpIHsKQEAgLTEyMzksNyArMTEyNiw3IEBAIHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFk
anVzdFNsaWRlclRodW1iU2l6ZShSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAog
ICAgICAgICBzdHlsZS5zZXRIZWlnaHQoTGVuZ3RoKHNsaWRlcldpZHRoLCBGaXhlZCkpOwogICAg
ICAgICByZXR1cm47CiAgICAgfQotICAgIEFTU0VSVChwYXJ0ID09IFNsaWRlclRodW1iVmVydGlj
YWxQYXJ0IHx8IHBhcnQgPT0gTWVkaWFWb2x1bWVTbGlkZXJUaHVtYlBhcnQpOworICAgIEFTU0VS
VChwYXJ0ID09IFNsaWRlclRodW1iVmVydGljYWxQYXJ0KTsKICAgICBzdHlsZS5zZXRXaWR0aChM
ZW5ndGgoc2xpZGVyV2lkdGgsIEZpeGVkKSk7CiAgICAgc3R5bGUuc2V0SGVpZ2h0KExlbmd0aChz
bGlkZXJMZW5ndGgsIEZpeGVkKSk7CiB9CkBAIC0xMjQ5LDQyICsxMTM2LDEyIEBAIGJvb2wgUmVu
ZGVyVGhlbWVHdGs6OnBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJP
YmplY3QsIGNvbnN0IFBhCiAgICAgaWYgKCFyZW5kZXJPYmplY3QuaXNQcm9ncmVzcygpKQogICAg
ICAgICByZXR1cm4gdHJ1ZTsKIAotICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0
ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBFX1BST0dSRVNTX0JBUik7Ci0jaWYgR1RLX0NI
RUNLX1ZFUlNJT04oMywgMTksIDIpCi0gICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0g
YWRvcHRHUmVmKGd0a193aWRnZXRfcGF0aF9uZXcoKSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNv
bnRleHQ+IHBhcmVudENvbnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoUHJvZ3Jlc3NCYXIpOwor
ICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiB0cm91Z2hDb250ZXh0ID0gY3JlYXRlU3R5bGVD
b250ZXh0KFByb2dyZXNzQmFyVHJvdWdoLCBwYXJlbnRDb250ZXh0LmdldCgpKTsKKyAgICBHUmVm
UHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChQcm9ncmVz
c0JhclByb2dyZXNzLCB0cm91Z2hDb250ZXh0LmdldCgpKTsKIAotICAgIGd0a193aWRnZXRfcGF0
aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9QUk9HUkVTU19CQVIpOwotICAgIGd0
a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAwLCAicHJvZ3Jl
c3NiYXIiKTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBH
VEtfVFlQRV9QUk9HUkVTU19CQVIpOwotICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmpl
Y3RfbmFtZShwYXRoLmdldCgpLCAxLCAidHJvdWdoIik7Ci0KLSAgICBndGtfc3R5bGVfY29udGV4
dF9zZXRfcGF0aChjb250ZXh0LmdldCgpLCBwYXRoLmdldCgpKTsKLSNlbHNlCi0gICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2F2ZShjb250ZXh0LmdldCgpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9h
ZGRfY2xhc3MoY29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNTX1RST1VHSCk7Ci0jZW5kaWYK
LQotICAgIGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29u
dGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0LngoKSwgcmVjdC55KCksIHJlY3Qu
d2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0gICAgZ3RrX3JlbmRlcl9mcmFtZShjb250ZXh0Lmdl
dCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCByZWN0Lngo
KSwgcmVjdC55KCksIHJlY3Qud2lkdGgoKSwgcmVjdC5oZWlnaHQoKSk7Ci0KLSNpZiBHVEtfQ0hF
Q0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBwYXRoID0gYWRvcHRHUmVmKGd0a193aWRnZXRfcGF0
aF9uZXcoKSk7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwg
R1RLX1RZUEVfUFJPR1JFU1NfQkFSKTsKLSAgICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2Jq
ZWN0X25hbWUocGF0aC5nZXQoKSwgMCwgInByb2dyZXNzYmFyIik7Ci0KLSAgICBndGtfd2lkZ2V0
X3BhdGhfYXBwZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfUFJPR1JFU1NfQkFSKTsKLSAg
ICBndGtfd2lkZ2V0X3BhdGhfaXRlcl9zZXRfb2JqZWN0X25hbWUocGF0aC5nZXQoKSwgMSwgInRy
b3VnaCIpOwotCi0gICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBhdGguZ2V0KCksIEdU
S19UWVBFX1BST0dSRVNTX0JBUik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVj
dF9uYW1lKHBhdGguZ2V0KCksIDIsICJwcm9ncmVzcyIpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3BhdGgoY29udGV4dC5nZXQoKSwgcGF0aC5nZXQoKSk7Ci0jZWxzZQotICAgIGd0a19z
dHlsZV9jb250ZXh0X3Jlc3RvcmUoY29udGV4dC5nZXQoKSk7Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfYWRkX2NsYXNzKGNvbnRleHQuZ2V0KCksIEdUS19TVFlMRV9DTEFTU19QUk9HUkVTU0JBUik7
Ci0jZW5kaWYKKyAgICBndGtfcmVuZGVyX2JhY2tncm91bmQodHJvdWdoQ29udGV4dC5nZXQoKSwg
cGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgcmVjdC54KCksIHJl
Y3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0KCkpOworICAgIGd0a19yZW5kZXJfZnJh
bWUodHJvdWdoQ29udGV4dC5nZXQoKSwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKSwgcmVjdC54KCksIHJlY3QueSgpLCByZWN0LndpZHRoKCksIHJlY3QuaGVpZ2h0
KCkpOwogCiAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0
YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KDApKTsKIApAQCAtMTMyMiw3ICsxMTc5LDcgQEAgc3Rh
dGljIGdpbnQgc3BpbkJ1dHRvbkFycm93U2l6ZShHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQpCiAK
IHZvaWQgUmVuZGVyVGhlbWVHdGs6OmFkanVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVz
b2x2ZXImLCBSZW5kZXJTdHlsZSYgc3R5bGUsIEVsZW1lbnQqKSBjb25zdAogewotICAgIEdSZWZQ
dHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KEdUS19UWVBF
X1NQSU5fQlVUVE9OKTsKKyAgICBHUmVmUHRyPEd0a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNy
ZWF0ZVN0eWxlQ29udGV4dChTcGluQnV0dG9uKTsKIAogICAgIEd0a0JvcmRlciBwYWRkaW5nOwog
ICAgIGd0a19zdHlsZV9jb250ZXh0X2dldF9wYWRkaW5nKGNvbnRleHQuZ2V0KCksIGd0a19zdHls
ZV9jb250ZXh0X2dldF9zdGF0ZShjb250ZXh0LmdldCgpKSwgJnBhZGRpbmcpOwpAQCAtMTMzMiwy
OSArMTE4OSwxMyBAQCB2b2lkIFJlbmRlclRoZW1lR3RrOjphZGp1c3RJbm5lclNwaW5CdXR0b25T
dHlsZShTdHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmIHN0eQogICAgIHN0eWxlLnNldE1pbldp
ZHRoKExlbmd0aCh3aWR0aCwgRml4ZWQpKTsKIH0KIAotc3RhdGljIHZvaWQgcGFpbnRTcGluQXJy
b3dCdXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQsIGNv
bnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWludEluZm8mIHBhaW50SW5m
bywgY29uc3QgSW50UmVjdCYgcmVjdCwgR3RrQXJyb3dUeXBlIGFycm93VHlwZSkKK3N0YXRpYyB2
b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3RrU3R5bGVDb250
ZXh0KiBwYXJlbnRDb250ZXh0LCBjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29u
c3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3QsIEd0a0Fycm93VHlw
ZSBhcnJvd1R5cGUpCiB7CiAgICAgQVNTRVJUKGFycm93VHlwZSA9PSBHVEtfQVJST1dfVVAgfHwg
YXJyb3dUeXBlID09IEdUS19BUlJPV19ET1dOKTsKIAotICAgIGd0a19zdHlsZV9jb250ZXh0X3Nh
dmUoY29udGV4dCk7Ci0KLSNpZiBHVEtfQ0hFQ0tfVkVSU0lPTigzLCAxOSwgMikKLSAgICBHUmVm
UHRyPEd0a1dpZGdldFBhdGg+IHBhdGggPSBhZG9wdEdSZWYoZ3RrX3dpZGdldF9wYXRoX25ldygp
KTsKLQotICAgIGd0a193aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQ
RV9TUElOX0JVVFRPTik7Ci0gICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfc2V0X29iamVjdF9uYW1l
KHBhdGguZ2V0KCksIDAsICJzcGluYnV0dG9uIik7Ci0KLSAgICBndGtfd2lkZ2V0X3BhdGhfYXBw
ZW5kX3R5cGUocGF0aC5nZXQoKSwgR1RLX1RZUEVfU1BJTl9CVVRUT04pOwotICAgIGd0a193aWRn
ZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAiYnV0dG9uIik7Ci0g
ICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJfYWRkX2NsYXNzKHBhdGguZ2V0KCksIDEsIGFycm93VHlw
ZSA9PSBHVEtfQVJST1dfVVAgPyAidXAiIDogImRvd24iKTsKLQotICAgIGd0a19zdHlsZV9jb250
ZXh0X3NldF9wYXRoKGNvbnRleHQsIHBhdGguZ2V0KCkpOwotI2Vsc2UKLSAgICBndGtfc3R5bGVf
Y29udGV4dF9hZGRfY2xhc3MoY29udGV4dCwgR1RLX1NUWUxFX0NMQVNTX0JVVFRPTik7Ci0jZW5k
aWYKLQotICAgIEd0a1RleHREaXJlY3Rpb24gZGlyZWN0aW9uID0gZ3RrX3N0eWxlX2NvbnRleHRf
Z2V0X2RpcmVjdGlvbihjb250ZXh0KTsKLSAgICBndWludCBzdGF0ZSA9IHN0YXRpY19jYXN0PGd1
aW50PihndGtfc3R5bGVfY29udGV4dF9nZXRfc3RhdGUoY29udGV4dCkpOworICAgIEdSZWZQdHI8
R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3JlYXRlU3R5bGVDb250ZXh0KGFycm93VHlwZSA9
PSBHVEtfQVJST1dfVVAgPyBTcGluQnV0dG9uVXBCdXR0b24gOiBTcGluQnV0dG9uRG93bkJ1dHRv
biwgcGFyZW50Q29udGV4dCk7CisgICAgR3RrVGV4dERpcmVjdGlvbiBkaXJlY3Rpb24gPSBndGtf
c3R5bGVfY29udGV4dF9nZXRfZGlyZWN0aW9uKGNvbnRleHQuZ2V0KCkpOworICAgIGd1aW50IHN0
YXRlID0gc3RhdGljX2Nhc3Q8Z3VpbnQ+KGd0a19zdHlsZV9jb250ZXh0X2dldF9zdGF0ZShjb250
ZXh0LmdldCgpKSk7CiAgICAgaWYgKCEoc3RhdGUgJiBHVEtfU1RBVEVfRkxBR19JTlNFTlNJVElW
RSkpIHsKICAgICAgICAgaWYgKHRoZW1lLT5pc1ByZXNzZWQocmVuZGVyT2JqZWN0KSkgewogICAg
ICAgICAgICAgaWYgKChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQICYmIHRoZW1lLT5pc1NwaW5V
cEJ1dHRvblBhcnRQcmVzc2VkKHJlbmRlck9iamVjdCkpCkBAIC0xMzY2LDExICsxMjA3LDExIEBA
IHN0YXRpYyB2b2lkIHBhaW50U3BpbkFycm93QnV0dG9uKFJlbmRlclRoZW1lKiB0aGVtZSwgR3Rr
U3R5bGVDb250ZXh0KiBjb250ZXh0LCBjCiAgICAgICAgICAgICAgICAgc3RhdGUgfD0gR1RLX1NU
QVRFX0ZMQUdfUFJFTElHSFQ7CiAgICAgICAgIH0KICAgICB9Ci0gICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X3N0YXRlKGNvbnRleHQsIHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlKSk7
CisgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3N0YXRlKGNvbnRleHQuZ2V0KCksIHN0YXRpY19j
YXN0PEd0a1N0YXRlRmxhZ3M+KHN0YXRlKSk7CiAKICAgICAvLyBQYWludCBidXR0b24uCiAgICAg
SW50UmVjdCBidXR0b25SZWN0KHJlY3QpOwotICAgIGd1aW50IGp1bmN0aW9uID0gZ3RrX3N0eWxl
X2NvbnRleHRfZ2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQpOworICAgIGd1aW50IGp1bmN0aW9u
ID0gZ3RrX3N0eWxlX2NvbnRleHRfZ2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQuZ2V0KCkpOwog
ICAgIGlmIChhcnJvd1R5cGUgPT0gR1RLX0FSUk9XX1VQKQogICAgICAgICBqdW5jdGlvbiB8PSBH
VEtfSlVOQ1RJT05fQk9UVE9NOwogICAgIGVsc2UgewpAQCAtMTM3OCwxMCArMTIxOSwxMCBAQCBz
dGF0aWMgdm9pZCBwYWludFNwaW5BcnJvd0J1dHRvbihSZW5kZXJUaGVtZSogdGhlbWUsIEd0a1N0
eWxlQ29udGV4dCogY29udGV4dCwgYwogICAgICAgICBidXR0b25SZWN0Lm1vdmUoMCwgcmVjdC5o
ZWlnaHQoKSAvIDIpOwogICAgIH0KICAgICBidXR0b25SZWN0LnNldEhlaWdodChyZWN0LmhlaWdo
dCgpIC8gMik7Ci0gICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRl
eHQsIHN0YXRpY19jYXN0PEd0a0p1bmN0aW9uU2lkZXM+KGp1bmN0aW9uKSk7CisgICAgZ3RrX3N0
eWxlX2NvbnRleHRfc2V0X2p1bmN0aW9uX3NpZGVzKGNvbnRleHQuZ2V0KCksIHN0YXRpY19jYXN0
PEd0a0p1bmN0aW9uU2lkZXM+KGp1bmN0aW9uKSk7CiAKLSAgICBndGtfcmVuZGVyX2JhY2tncm91
bmQoY29udGV4dCwgcGFpbnRJbmZvLmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwg
YnV0dG9uUmVjdC54KCksIGJ1dHRvblJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRv
blJlY3QuaGVpZ2h0KCkpOwotICAgIGd0a19yZW5kZXJfZnJhbWUoY29udGV4dCwgcGFpbnRJbmZv
LmNvbnRleHQoKS5wbGF0Zm9ybUNvbnRleHQoKS0+Y3IoKSwgYnV0dG9uUmVjdC54KCksIGJ1dHRv
blJlY3QueSgpLCBidXR0b25SZWN0LndpZHRoKCksIGJ1dHRvblJlY3QuaGVpZ2h0KCkpOworICAg
IGd0a19yZW5kZXJfYmFja2dyb3VuZChjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgp
LnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCks
IGJ1dHRvblJlY3Qud2lkdGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CisgICAgZ3RrX3JlbmRl
cl9mcmFtZShjb250ZXh0LmdldCgpLCBwYWludEluZm8uY29udGV4dCgpLnBsYXRmb3JtQ29udGV4
dCgpLT5jcigpLCBidXR0b25SZWN0LngoKSwgYnV0dG9uUmVjdC55KCksIGJ1dHRvblJlY3Qud2lk
dGgoKSwgYnV0dG9uUmVjdC5oZWlnaHQoKSk7CiAKICAgICAvLyBQYWludCBhcnJvdyBjZW50ZXJl
ZCBpbnNpZGUgYnV0dG9uLgogICAgIC8vIFRoaXMgY29kZSBpcyBiYXNlZCBvbiBndGtzcGluYnV0
dG9uLmMgY29kZS4KQEAgLTE0MDcsMTcgKzEyNDgsMTMgQEAgc3RhdGljIHZvaWQgcGFpbnRTcGlu
QXJyb3dCdXR0b24oUmVuZGVyVGhlbWUqIHRoZW1lLCBHdGtTdHlsZUNvbnRleHQqIGNvbnRleHQs
IGMKICAgICBnaW50IGhlaWdodCA9ICh3aWR0aCArIDEpIC8gMjsKIAogICAgIGFycm93UmVjdC5t
b3ZlKChhcnJvd1JlY3Qud2lkdGgoKSAtIHdpZHRoKSAvIDIsIChhcnJvd1JlY3QuaGVpZ2h0KCkg
LSBoZWlnaHQpIC8gMik7Ci0gICAgZ3RrX3JlbmRlcl9hcnJvdyhjb250ZXh0LCBwYWludEluZm8u
Y29udGV4dCgpLnBsYXRmb3JtQ29udGV4dCgpLT5jcigpLCBhbmdsZSwgYXJyb3dSZWN0LngoKSwg
YXJyb3dSZWN0LnkoKSwgd2lkdGgpOwotCi0gICAgZ3RrX3N0eWxlX2NvbnRleHRfcmVzdG9yZShj
b250ZXh0KTsKKyAgICBndGtfcmVuZGVyX2Fycm93KGNvbnRleHQuZ2V0KCksIHBhaW50SW5mby5j
b250ZXh0KCkucGxhdGZvcm1Db250ZXh0KCktPmNyKCksIGFuZ2xlLCBhcnJvd1JlY3QueCgpLCBh
cnJvd1JlY3QueSgpLCB3aWR0aCk7CiB9CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50SW5u
ZXJTcGluQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBjb25zdCBQYWlu
dEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBHUmVmUHRyPEd0
a1N0eWxlQ29udGV4dD4gY29udGV4dCA9IGNyZWF0ZVN0eWxlQ29udGV4dChHVEtfVFlQRV9TUElO
X0JVVFRPTik7Ci0KLSAgICBHdGtUZXh0RGlyZWN0aW9uIGRpcmVjdGlvbiA9IHN0YXRpY19jYXN0
PEd0a1RleHREaXJlY3Rpb24+KGd0a1RleHREaXJlY3Rpb24ocmVuZGVyT2JqZWN0LnN0eWxlKCku
ZGlyZWN0aW9uKCkpKTsKLSAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfZGlyZWN0aW9uKGNvbnRl
eHQuZ2V0KCksIGRpcmVjdGlvbik7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRl
eHQgPSBjcmVhdGVTdHlsZUNvbnRleHQoU3BpbkJ1dHRvbik7CisgICAgZ3RrX3N0eWxlX2NvbnRl
eHRfc2V0X2RpcmVjdGlvbihjb250ZXh0LmdldCgpLCBndGtUZXh0RGlyZWN0aW9uKHJlbmRlck9i
amVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSk7CiAKICAgICBndWludCBmbGFncyA9IDA7CiAgICAg
aWYgKCFpc0VuYWJsZWQocmVuZGVyT2JqZWN0KSB8fCBpc1JlYWRPbmx5Q29udHJvbChyZW5kZXJP
YmplY3QpKQpAQCAtMTQyNSw3ICsxMjYyLDYgQEAgYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRJ
bm5lclNwaW5CdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIGNvbnMKICAg
ICBlbHNlIGlmIChpc0ZvY3VzZWQocmVuZGVyT2JqZWN0KSkKICAgICAgICAgZmxhZ3MgfD0gR1RL
X1NUQVRFX0ZMQUdfRk9DVVNFRDsKICAgICBndGtfc3R5bGVfY29udGV4dF9zZXRfc3RhdGUoY29u
dGV4dC5nZXQoKSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oZmxhZ3MpKTsKLSAgICBndGtf
c3R5bGVfY29udGV4dF9yZW1vdmVfY2xhc3MoY29udGV4dC5nZXQoKSwgR1RLX1NUWUxFX0NMQVNT
X0VOVFJZKTsKIAogICAgIHBhaW50U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQuZ2V0KCks
IHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLCByZWN0LCBHVEtfQVJST1dfVVApOwogICAgIHBhaW50
U3BpbkFycm93QnV0dG9uKHRoaXMsIGNvbnRleHQuZ2V0KCksIHJlbmRlck9iamVjdCwgcGFpbnRJ
bmZvLCByZWN0LCBHVEtfQVJST1dfRE9XTik7CkBAIC0xNDUwLDIzICsxMjg2LDE3IEBAIGRvdWJs
ZSBSZW5kZXJUaGVtZUd0azo6Y2FyZXRCbGlua0ludGVydmFsKCkgY29uc3QKIAogZW51bSBTdHls
ZUNvbG9yVHlwZSB7IFN0eWxlQ29sb3JCYWNrZ3JvdW5kLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCB9
OwogCi1zdGF0aWMgQ29sb3Igc3R5bGVDb2xvcihHVHlwZSB3aWRnZXRUeXBlLCBHdGtTdGF0ZUZs
YWdzIHN0YXRlLCBTdHlsZUNvbG9yVHlwZSBjb2xvclR5cGUpCitzdGF0aWMgQ29sb3Igc3R5bGVD
b2xvcihSZW5kZXJUaGVtZVBhcnQgdGhlbWVQYXJ0LCBHdGtTdGF0ZUZsYWdzIHN0YXRlLCBTdHls
ZUNvbG9yVHlwZSBjb2xvclR5cGUpCiB7Ci0gICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNv
bnRleHQgPSBjcmVhdGVTdHlsZUNvbnRleHQod2lkZ2V0VHlwZSk7Ci0jaWYgR1RLX0NIRUNLX1ZF
UlNJT04oMywgMTksIDIpCi0gICAgaWYgKHdpZGdldFR5cGUgPT0gR1RLX1RZUEVfRU5UUlkpIHsK
LSAgICAgICAgR1JlZlB0cjxHdGtXaWRnZXRQYXRoPiBwYXRoID0gYWRvcHRHUmVmKGd0a193aWRn
ZXRfcGF0aF9uZXcoKSk7Ci0KLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2FwcGVuZF90eXBlKHBh
dGguZ2V0KCksIEdUS19UWVBFX0VOVFJZKTsKLSAgICAgICAgZ3RrX3dpZGdldF9wYXRoX2l0ZXJf
c2V0X29iamVjdF9uYW1lKHBhdGguZ2V0KCksIDAsICJlbnRyeSIpOwotCi0gICAgICAgIGd0a193
aWRnZXRfcGF0aF9hcHBlbmRfdHlwZShwYXRoLmdldCgpLCBHVEtfVFlQRV9FTlRSWSk7Ci0gICAg
ICAgIGd0a193aWRnZXRfcGF0aF9pdGVyX3NldF9vYmplY3RfbmFtZShwYXRoLmdldCgpLCAxLCAi
c2VsZWN0aW9uIik7Ci0KLSAgICAgICAgZ3RrX3N0eWxlX2NvbnRleHRfc2V0X3BhdGgoY29udGV4
dC5nZXQoKSwgcGF0aC5nZXQoKSk7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IHBhcmVu
dENvbnRleHQ7CisgICAgUmVuZGVyVGhlbWVQYXJ0IHBhcnQgPSB0aGVtZVBhcnQ7CisgICAgaWYg
KHN0YXRlICYgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQpIHsKKyAgICAgICAgcGFyZW50Q29udGV4
dCA9IGNyZWF0ZVN0eWxlQ29udGV4dCh0aGVtZVBhcnQpOworICAgICAgICBBU1NFUlQodGhlbWVQ
YXJ0ID09IEVudHJ5IHx8IHRoZW1lUGFydCA9PSBMaXN0Qm94KTsKKyAgICAgICAgcGFydCA9IHRo
ZW1lUGFydCA9PSBFbnRyeSA/IEVudHJ5U2VsZWN0aW9uIDogTGlzdEJveFNlbGVjdGlvbjsKICAg
ICB9Ci0jZW5kaWYKIAorICAgIEdSZWZQdHI8R3RrU3R5bGVDb250ZXh0PiBjb250ZXh0ID0gY3Jl
YXRlU3R5bGVDb250ZXh0KHBhcnQsIHBhcmVudENvbnRleHQuZ2V0KCkpOwogICAgIGd0a19zdHls
ZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgpLCBzdGF0ZSk7CiAKICAgICBHZGtSR0JB
IGdka1JHQkFDb2xvcjsKQEAgLTE0NzksNTEgKzEzMDksNTEgQEAgc3RhdGljIENvbG9yIHN0eWxl
Q29sb3IoR1R5cGUgd2lkZ2V0VHlwZSwgR3RrU3RhdGVGbGFncyBzdGF0ZSwgU3R5bGVDb2xvclR5
cGUgY28KIAogQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlU2VsZWN0aW9uQmFj
a2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3R5bGVDb2xvcihHVEtfVFlQRV9F
TlRSWSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQg
fCBHVEtfU1RBVEVfRkxBR19GT0NVU0VEKSwgU3R5bGVDb2xvckJhY2tncm91bmQpOworICAgIHJl
dHVybiBzdHlsZUNvbG9yKEVudHJ5LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RB
VEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9yQmFj
a2dyb3VuZCk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlU2Vs
ZWN0aW9uQmFja2dyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3R5bGVDb2xvcihH
VEtfVFlQRV9FTlRSWSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsIFN0eWxlQ29sb3JCYWNrZ3Jv
dW5kKTsKKyAgICByZXR1cm4gc3R5bGVDb2xvcihFbnRyeSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNU
RUQsIFN0eWxlQ29sb3JCYWNrZ3JvdW5kKTsKIH0KIAogQ29sb3IgUmVuZGVyVGhlbWVHdGs6OnBs
YXRmb3JtQWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsKLSAgICByZXR1
cm4gc3R5bGVDb2xvcihHVEtfVFlQRV9FTlRSWSwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4o
R1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RBVEVfRkxBR19GT0NVU0VEKSwgU3R5bGVD
b2xvckZvcmVncm91bmQpOworICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5LCBzdGF0aWNfY2Fz
dDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9GTEFH
X0ZPQ1VTRUQpLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1l
R3RrOjpwbGF0Zm9ybUluYWN0aXZlU2VsZWN0aW9uRm9yZWdyb3VuZENvbG9yKCkgY29uc3QKIHsK
LSAgICByZXR1cm4gc3R5bGVDb2xvcihHVEtfVFlQRV9FTlRSWSwgR1RLX1NUQVRFX0ZMQUdfU0VM
RUNURUQsIFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKKyAgICByZXR1cm4gc3R5bGVDb2xvcihFbnRy
eSwgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsIFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKIH0KIAog
Q29sb3IgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQWN0aXZlTGlzdEJveFNlbGVjdGlvbkJhY2tn
cm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0eWxlQ29sb3IoR1RLX1RZUEVfVFJF
RV9WSUVXLCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVfRkxBR19TRUxFQ1RF
RCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9yQmFja2dyb3VuZCk7CisgICAg
cmV0dXJuIHN0eWxlQ29sb3IoTGlzdEJveCwgc3RhdGljX2Nhc3Q8R3RrU3RhdGVGbGFncz4oR1RL
X1NUQVRFX0ZMQUdfU0VMRUNURUQgfCBHVEtfU1RBVEVfRkxBR19GT0NVU0VEKSwgU3R5bGVDb2xv
ckJhY2tncm91bmQpOwogfQogCiBDb2xvciBSZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1JbmFjdGl2
ZUxpc3RCb3hTZWxlY3Rpb25CYWNrZ3JvdW5kQ29sb3IoKSBjb25zdAogewotICAgIHJldHVybiBz
dHlsZUNvbG9yKEdUS19UWVBFX1RSRUVfVklFVywgR1RLX1NUQVRFX0ZMQUdfU0VMRUNURUQsIFN0
eWxlQ29sb3JCYWNrZ3JvdW5kKTsKKyAgICByZXR1cm4gc3R5bGVDb2xvcihMaXN0Qm94LCBHVEtf
U1RBVEVfRkxBR19TRUxFQ1RFRCwgU3R5bGVDb2xvckJhY2tncm91bmQpOwogfQogCiBDb2xvciBS
ZW5kZXJUaGVtZUd0azo6cGxhdGZvcm1BY3RpdmVMaXN0Qm94U2VsZWN0aW9uRm9yZWdyb3VuZENv
bG9yKCkgY29uc3QKIHsKLSAgICByZXR1cm4gc3R5bGVDb2xvcihHVEtfVFlQRV9UUkVFX1ZJRVcs
IHN0YXRpY19jYXN0PEd0a1N0YXRlRmxhZ3M+KEdUS19TVEFURV9GTEFHX1NFTEVDVEVEIHwgR1RL
X1NUQVRFX0ZMQUdfRk9DVVNFRCksIFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKKyAgICByZXR1cm4g
c3R5bGVDb2xvcihMaXN0Qm94LCBzdGF0aWNfY2FzdDxHdGtTdGF0ZUZsYWdzPihHVEtfU1RBVEVf
RkxBR19TRUxFQ1RFRCB8IEdUS19TVEFURV9GTEFHX0ZPQ1VTRUQpLCBTdHlsZUNvbG9yRm9yZWdy
b3VuZCk7CiB9CiAKIENvbG9yIFJlbmRlclRoZW1lR3RrOjpwbGF0Zm9ybUluYWN0aXZlTGlzdEJv
eFNlbGVjdGlvbkZvcmVncm91bmRDb2xvcigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIHN0eWxlQ29s
b3IoR1RLX1RZUEVfVFJFRV9WSUVXLCBHVEtfU1RBVEVfRkxBR19TRUxFQ1RFRCwgU3R5bGVDb2xv
ckZvcmVncm91bmQpOworICAgIHJldHVybiBzdHlsZUNvbG9yKExpc3RCb3gsIEdUS19TVEFURV9G
TEFHX1NFTEVDVEVELCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7CiB9CiAKIENvbG9yIFJlbmRlclRo
ZW1lR3RrOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1ZhbHVlSWQpIGNvbnN0CiB7CiAgICAg
c3dpdGNoIChjc3NWYWx1ZUlkKSB7CiAgICAgY2FzZSBDU1NWYWx1ZUJ1dHRvbnRleHQ6Ci0gICAg
ICAgIHJldHVybiBzdHlsZUNvbG9yKEdUS19UWVBFX0JVVFRPTiwgR1RLX1NUQVRFX0ZMQUdfQUNU
SVZFLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7CisgICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEJ1
dHRvbiwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7CiAgICAg
Y2FzZSBDU1NWYWx1ZUNhcHRpb250ZXh0OgotICAgICAgICByZXR1cm4gc3R5bGVDb2xvcihHVEtf
VFlQRV9FTlRSWSwgR1RLX1NUQVRFX0ZMQUdfQUNUSVZFLCBTdHlsZUNvbG9yRm9yZWdyb3VuZCk7
CisgICAgICAgIHJldHVybiBzdHlsZUNvbG9yKEVudHJ5LCBHVEtfU1RBVEVfRkxBR19BQ1RJVkUs
IFN0eWxlQ29sb3JGb3JlZ3JvdW5kKTsKICAgICBkZWZhdWx0OgogICAgICAgICByZXR1cm4gUmVu
ZGVyVGhlbWU6OnN5c3RlbUNvbG9yKGNzc1ZhbHVlSWQpOwogICAgIH0KQEAgLTE1MzEsOSArMTM2
MSw2IEBAIENvbG9yIFJlbmRlclRoZW1lR3RrOjpzeXN0ZW1Db2xvcihDU1NWYWx1ZUlEIGNzc1Zh
bHVlSWQpIGNvbnN0CiAKIHZvaWQgUmVuZGVyVGhlbWVHdGs6OnBsYXRmb3JtQ29sb3JzRGlkQ2hh
bmdlKCkKIHsKLSNpZiBFTkFCTEUoVklERU8pCi0gICAgaW5pdE1lZGlhQ29sb3JzKCk7Ci0jZW5k
aWYKICAgICBSZW5kZXJUaGVtZTo6cGxhdGZvcm1Db2xvcnNEaWRDaGFuZ2UoKTsKIH0KIApAQCAt
MTU1MCwxNiArMTM3NywxNCBAQCBTdHJpbmcgUmVuZGVyVGhlbWVHdGs6OmV4dHJhRnVsbFNjcmVl
blN0eWxlU2hlZXQoKQogfQogI2VuZGlmCiAKLWJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVk
aWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmplY3QsIEdyYXBoaWNzQ29udGV4
dCYgY29udGV4dCwgY29uc3QgSW50UmVjdCYgcmVjdCwgY29uc3QgY2hhciogc3ltYm9saWNJY29u
TmFtZSwgY29uc3QgY2hhciogZmFsbGJhY2tTdG9ja0ljb25OYW1lKQorYm9vbCBSZW5kZXJUaGVt
ZUd0azo6cGFpbnRNZWRpYUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwg
R3JhcGhpY3NDb250ZXh0JiBncmFwaGljc0NvbnRleHQsIGNvbnN0IEludFJlY3QmIHJlY3QsIGNv
bnN0IGNoYXIqIGljb25OYW1lKQogewotICAgIEludFJlY3QgaWNvblJlY3QoCi0gICAgICAgIHJl
Y3QueCgpICsgKHJlY3Qud2lkdGgoKSAtIG1fbWVkaWFJY29uU2l6ZSkgLyAyLAotICAgICAgICBy
ZWN0LnkoKSArIChyZWN0LmhlaWdodCgpIC0gbV9tZWRpYUljb25TaXplKSAvIDIsCi0gICAgICAg
IG1fbWVkaWFJY29uU2l6ZSwgbV9tZWRpYUljb25TaXplKTsKLSAgICBHUmVmUHRyPEdka1BpeGJ1
Zj4gaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJY29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9DT05U
QUlORVIsIHN5bWJvbGljSWNvbk5hbWUsIGZhbGxiYWNrU3RvY2tJY29uTmFtZSwKLSAgICAgICAg
Z3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJlY3Rpb24oKSksIGd0a0lj
b25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0aCgpKTsKLSAgICBwYWlu
dEdka1BpeGJ1Zihjb250ZXh0LCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0dXJuIHRy
dWU7CisgICAgR1JlZlB0cjxHdGtTdHlsZUNvbnRleHQ+IGNvbnRleHQgPSBjcmVhdGVTdHlsZUNv
bnRleHQoTWVkaWFCdXR0b24pOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9kaXJlY3Rpb24o
Y29udGV4dC5nZXQoKSwgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSkpOworICAgIGd0a19zdHlsZV9jb250ZXh0X3NldF9zdGF0ZShjb250ZXh0LmdldCgp
LCBndGtJY29uU3RhdGVGbGFncyh0aGlzLCByZW5kZXJPYmplY3QpKTsKKyAgICBzdGF0aWMgY29u
c3QgdW5zaWduZWQgbWVkaWFJY29uU2l6ZSA9IDE2OworICAgIEludFJlY3QgaWNvblJlY3QocmVj
dC54KCkgKyAocmVjdC53aWR0aCgpIC0gbWVkaWFJY29uU2l6ZSkgLyAyLCByZWN0LnkoKSArIChy
ZWN0LmhlaWdodCgpIC0gbWVkaWFJY29uU2l6ZSkgLyAyLCBtZWRpYUljb25TaXplLCBtZWRpYUlj
b25TaXplKTsKKyAgICByZXR1cm4gcGFpbnRJY29uKGNvbnRleHQuZ2V0KCksIGdyYXBoaWNzQ29u
dGV4dCwgaWNvblJlY3QsIGljb25OYW1lKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6aGFz
T3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0IHBhcnQpIGNvbnN0CkBAIC0x
NTY5LDE5ICsxMzk0LDIwIEBAIGJvb2wgUmVuZGVyVGhlbWVHdGs6Omhhc093bkRpc2FibGVkU3Rh
dGVIYW5kbGluZ0ZvcihDb250cm9sUGFydCBwYXJ0KSBjb25zdAogCiBib29sIFJlbmRlclRoZW1l
R3RrOjpwYWludE1lZGlhRnVsbHNjcmVlbkJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmIHJlbmRl
ck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IEludFJlY3QmIHJlY3Qp
CiB7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8u
Y29udGV4dCgpLCByZWN0LCAidmlldy1mdWxsc2NyZWVuLXN5bWJvbGljIiwgR1RLX1NUT0NLX0ZV
TExTQ1JFRU4pOworICAgIHJldHVybiBwYWludE1lZGlhQnV0dG9uKHJlbmRlck9iamVjdCwgcGFp
bnRJbmZvLmNvbnRleHQoKSwgcmVjdCwgInZpZXctZnVsbHNjcmVlbi1zeW1ib2xpYyIpOwogfQog
CiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhTXV0ZUJ1dHRvbihjb25zdCBSZW5kZXJP
YmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNvbnN0IElu
dFJlY3QmIHJlY3QpCiB7Ci0gICAgSFRNTE1lZGlhRWxlbWVudCogbWVkaWFFbGVtZW50ID0gZ2V0
TWVkaWFFbGVtZW50RnJvbVJlbmRlck9iamVjdChyZW5kZXJPYmplY3QpOwotICAgIGlmICghbWVk
aWFFbGVtZW50KQorICAgIE5vZGUqIG5vZGUgPSByZW5kZXJPYmplY3Qubm9kZSgpOworICAgIGlm
ICghbm9kZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIE5vZGUqIG1lZGlhTm9kZSA9IG5v
ZGUtPnNoYWRvd0hvc3QoKTsKKyAgICBpZiAoIWlzPEhUTUxNZWRpYUVsZW1lbnQ+KG1lZGlhTm9k
ZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKIAotICAgIGJvb2wgbXV0ZWQgPSBtZWRpYUVsZW1l
bnQtPm11dGVkKCk7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBw
YWludEluZm8uY29udGV4dCgpLCByZWN0LAotICAgICAgICBtdXRlZCA/ICJhdWRpby12b2x1bWUt
bXV0ZWQtc3ltYm9saWMiIDogImF1ZGlvLXZvbHVtZS1oaWdoLXN5bWJvbGljIiwKLSAgICAgICAg
bXV0ZWQgPyAiYXVkaW8tdm9sdW1lLW11dGVkIiA6ICJhdWRpby12b2x1bWUtaGlnaCIpOworICAg
IEhUTUxNZWRpYUVsZW1lbnQqIG1lZGlhRWxlbWVudCA9IGRvd25jYXN0PEhUTUxNZWRpYUVsZW1l
bnQ+KG1lZGlhTm9kZSk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0
LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0LCBtZWRpYUVsZW1lbnQtPm11dGVkKCkgPyAiYXVk
aW8tdm9sdW1lLW11dGVkLXN5bWJvbGljIiA6ICJhdWRpby12b2x1bWUtaGlnaC1zeW1ib2xpYyIp
OwogfQogCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCkBAIC0xNTkyLDM2ICsxNDE4LDI0IEBAIGJvb2wgUmVuZGVyVGhl
bWVHdGs6OnBhaW50TWVkaWFQbGF5QnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2Jq
ZWN0LCBjb25zCiAKICAgICBpZiAoIW5vZGVIYXNQc2V1ZG8obm9kZSwgIi13ZWJraXQtbWVkaWEt
Y29udHJvbHMtcGxheS1idXR0b24iKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIGJvb2wg
c2hvd1BsYXlCdXR0b24gPSBub2RlSGFzQ2xhc3Mobm9kZSwgInBhdXNlZCIpOwogCi0gICAgcmV0
dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludEluZm8uY29udGV4dCgpLCBy
ZWN0LAotICAgICAgICBzaG93UGxheUJ1dHRvbiA/ICJtZWRpYS1wbGF5YmFjay1zdGFydC1zeW1i
b2xpYyIgOiAibWVkaWEtcGxheWJhY2stcGF1c2Utc3ltYm9saWMiLAotICAgICAgICBzaG93UGxh
eUJ1dHRvbiA/IEdUS19TVE9DS19NRURJQV9QTEFZIDogR1RLX1NUT0NLX01FRElBX1BBVVNFKTsK
KyAgICByZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250
ZXh0KCksIHJlY3QsIG5vZGVIYXNDbGFzcyhub2RlLCAicGF1c2VkIikgPyAibWVkaWEtcGxheWJh
Y2stc3RhcnQtc3ltYm9saWMiIDogIm1lZGlhLXBsYXliYWNrLXBhdXNlLXN5bWJvbGljIik7CiB9
CiAKIGJvb2wgUmVuZGVyVGhlbWVHdGs6OnBhaW50TWVkaWFTZWVrQmFja0J1dHRvbihjb25zdCBS
ZW5kZXJPYmplY3QmIHJlbmRlck9iamVjdCwgY29uc3QgUGFpbnRJbmZvJiBwYWludEluZm8sIGNv
bnN0IEludFJlY3QmIHJlY3QpCiB7Ci0gICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVy
T2JqZWN0LCBwYWludEluZm8uY29udGV4dCgpLCByZWN0LCAibWVkaWEtc2Vlay1iYWNrd2FyZC1z
eW1ib2xpYyIsIEdUS19TVE9DS19NRURJQV9SRVdJTkQpOworICAgIHJldHVybiBwYWludE1lZGlh
QnV0dG9uKHJlbmRlck9iamVjdCwgcGFpbnRJbmZvLmNvbnRleHQoKSwgcmVjdCwgIm1lZGlhLXNl
ZWstYmFja3dhcmQtc3ltYm9saWMiKTsKIH0KIAogYm9vbCBSZW5kZXJUaGVtZUd0azo6cGFpbnRN
ZWRpYVNlZWtGb3J3YXJkQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYgcmVuZGVyT2JqZWN0LCBj
b25zdCBQYWludEluZm8mIHBhaW50SW5mbywgY29uc3QgSW50UmVjdCYgcmVjdCkKIHsKLSAgICBy
ZXR1cm4gcGFpbnRNZWRpYUJ1dHRvbihyZW5kZXJPYmplY3QsIHBhaW50SW5mby5jb250ZXh0KCks
IHJlY3QsICJtZWRpYS1zZWVrLWZvcndhcmQtc3ltYm9saWMiLCBHVEtfU1RPQ0tfTUVESUFfRk9S
V0FSRCk7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWludElu
Zm8uY29udGV4dCgpLCByZWN0LCAibWVkaWEtc2Vlay1mb3J3YXJkLXN5bWJvbGljIik7CiB9CiAK
ICNpZiBFTkFCTEUoVklERU9fVFJBQ0spCiBib29sIFJlbmRlclRoZW1lR3RrOjpwYWludE1lZGlh
VG9nZ2xlQ2xvc2VkQ2FwdGlvbnNCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiByZW5kZXJPYmpl
Y3QsIGNvbnN0IFBhaW50SW5mbyYgcGFpbnRJbmZvLCBjb25zdCBJbnRSZWN0JiByZWN0KQogewot
ICAgIEludFJlY3QgaWNvblJlY3QocmVjdC54KCkgKyAocmVjdC53aWR0aCgpIC0gbV9tZWRpYUlj
b25TaXplKSAvIDIsIHJlY3QueSgpICsgKHJlY3QuaGVpZ2h0KCkgLSBtX21lZGlhSWNvblNpemUp
IC8gMiwKLSAgICAgICAgbV9tZWRpYUljb25TaXplLCBtX21lZGlhSWNvblNpemUpOwotICAgIEdS
ZWZQdHI8R2RrUGl4YnVmPiBpY29uID0gZ2V0U3RvY2tTeW1ib2xpY0ljb25Gb3JXaWRnZXRUeXBl
KEdUS19UWVBFX0NPTlRBSU5FUiwgIm1lZGlhLXZpZXctc3VidGl0bGVzLXN5bWJvbGljIiwgbnVs
bHB0ciwKLSAgICAgICAgZ3RrVGV4dERpcmVjdGlvbihyZW5kZXJPYmplY3Quc3R5bGUoKS5kaXJl
Y3Rpb24oKSksIGd0a0ljb25TdGF0ZSh0aGlzLCByZW5kZXJPYmplY3QpLCBpY29uUmVjdC53aWR0
aCgpKTsKLSAgICBpZiAoIWljb24pIHsKLSAgICAgICAgaWNvbiA9IGdldFN0b2NrU3ltYm9saWNJ
Y29uRm9yV2lkZ2V0VHlwZShHVEtfVFlQRV9DT05UQUlORVIsICJ1c2VyLWludmlzaWJsZS1zeW1i
b2xpYyIsIEdUS19TVE9DS19KVVNUSUZZX0ZJTEwsCi0gICAgICAgICAgICBndGtUZXh0RGlyZWN0
aW9uKHJlbmRlck9iamVjdC5zdHlsZSgpLmRpcmVjdGlvbigpKSwgZ3RrSWNvblN0YXRlKHRoaXMs
IHJlbmRlck9iamVjdCksIGljb25SZWN0LndpZHRoKCkpOwotICAgIH0KLSAgICBwYWludEdka1Bp
eGJ1ZihwYWludEluZm8uY29udGV4dCgpLCBpY29uLmdldCgpLCBpY29uUmVjdCk7Ci0gICAgcmV0
dXJuIHRydWU7CisgICAgcmV0dXJuIHBhaW50TWVkaWFCdXR0b24ocmVuZGVyT2JqZWN0LCBwYWlu
dEluZm8uY29udGV4dCgpLCByZWN0LCAibWVkaWEtdmlldy1zdWJ0aXRsZXMtc3ltYm9saWMiKTsK
IH0KICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9yZW5kZXJpbmcvUmVuZGVy
VGhlbWVHdGsuaCBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJUaGVtZUd0ay5oCmlu
ZGV4IDIwN2I0ZDcuLmE1NjNlMmUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmlu
Zy9SZW5kZXJUaGVtZUd0ay5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3JlbmRlcmluZy9SZW5kZXJU
aGVtZUd0ay5oCkBAIC0xMDIsOCArMTAyLDkgQEAgcHVibGljOgogI2VuZGlmCiAjZW5kaWYKIAor
ICAgIHZpcnR1YWwgYm9vbCBzaG91bGRIYXZlQ2Fwc0xvY2tJbmRpY2F0b3IoSFRNTElucHV0RWxl
bWVudCYpIGNvbnN0IG92ZXJyaWRlOworCiBwcml2YXRlOgotICAgIFJlbmRlclRoZW1lR3RrKCk7
CiAgICAgdmlydHVhbCB+UmVuZGVyVGhlbWVHdGsoKTsKIAogICAgIHZpcnR1YWwgYm9vbCBwYWlu
dENoZWNrYm94KGNvbnN0IFJlbmRlck9iamVjdCYsIGNvbnN0IFBhaW50SW5mbyYsIGNvbnN0IElu
dFJlY3QmKSBvdmVycmlkZTsKQEAgLTE1Myw4ICsxNTQsNiBAQCBwcml2YXRlOgogICAgIHZpcnR1
YWwgdm9pZCBhZGp1c3RTbGlkZXJUaHVtYlNpemUoUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29u
c3Qgb3ZlcnJpZGU7CiAKICNpZiBFTkFCTEUoVklERU8pCi0gICAgdm9pZCBpbml0TWVkaWFDb2xv
cnMoKTsKLSAgICB2b2lkIGluaXRNZWRpYUJ1dHRvbnMoKTsKICAgICB2aXJ0dWFsIGJvb2wgaGFz
T3duRGlzYWJsZWRTdGF0ZUhhbmRsaW5nRm9yKENvbnRyb2xQYXJ0KSBjb25zdCBvdmVycmlkZTsK
ICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRNZWRpYUZ1bGxzY3JlZW5CdXR0b24oY29uc3QgUmVuZGVy
T2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogICAg
IHZpcnR1YWwgYm9vbCBwYWludE1lZGlhUGxheUJ1dHRvbihjb25zdCBSZW5kZXJPYmplY3QmLCBj
b25zdCBQYWludEluZm8mLCBjb25zdCBJbnRSZWN0Jikgb3ZlcnJpZGU7CkBAIC0xNzcsOCArMTc2
LDYgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgYWRqdXN0UHJvZ3Jlc3NCYXJTdHlsZShT
dHlsZVJlc29sdmVyJiwgUmVuZGVyU3R5bGUmLCBFbGVtZW50KikgY29uc3Qgb3ZlcnJpZGU7CiAg
ICAgdmlydHVhbCBib29sIHBhaW50UHJvZ3Jlc3NCYXIoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29u
c3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwogCi0gICAgdmlydHVhbCBi
b29sIHBhaW50Q2Fwc0xvY2tJbmRpY2F0b3IoY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFp
bnRJbmZvJiwgY29uc3QgSW50UmVjdCYpIG92ZXJyaWRlOwotCiAgICAgdmlydHVhbCB2b2lkIGFk
anVzdElubmVyU3BpbkJ1dHRvblN0eWxlKFN0eWxlUmVzb2x2ZXImLCBSZW5kZXJTdHlsZSYsIEVs
ZW1lbnQqKSBjb25zdCBvdmVycmlkZTsKICAgICB2aXJ0dWFsIGJvb2wgcGFpbnRJbm5lclNwaW5C
dXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgY29uc3QgUGFpbnRJbmZvJiwgY29uc3QgSW50UmVj
dCYpIG92ZXJyaWRlOwogCkBAIC0xODcsMTYgKzE4NCwxMCBAQCBwcml2YXRlOgogICAgIHN0YXRp
YyB2b2lkIHNldFRleHRJbnB1dEJvcmRlcnMoUmVuZGVyU3R5bGUmKTsKIAogI2lmIEVOQUJMRShW
SURFTykKLSAgICBib29sIHBhaW50TWVkaWFCdXR0b24oY29uc3QgUmVuZGVyT2JqZWN0JiwgR3Jh
cGhpY3NDb250ZXh0JiwgY29uc3QgSW50UmVjdCYsIGNvbnN0IGNoYXIqIHN5bWJvbGljSWNvbk5h
bWUsIGNvbnN0IGNoYXIqIGZhbGxiYWNrU3RvY2tJY29uTmFtZSk7CisgICAgYm9vbCBwYWludE1l
ZGlhQnV0dG9uKGNvbnN0IFJlbmRlck9iamVjdCYsIEdyYXBoaWNzQ29udGV4dCYsIGNvbnN0IElu
dFJlY3QmLCBjb25zdCBjaGFyKiBpY29uTmFtZSk7CiAjZW5kaWYKIAogICAgIHN0YXRpYyBJbnRS
ZWN0IGNhbGN1bGF0ZVByb2dyZXNzUmVjdChjb25zdCBSZW5kZXJPYmplY3QmLCBjb25zdCBJbnRS
ZWN0Jik7Ci0KLSAgICBtdXRhYmxlIENvbG9yIG1fcGFuZWxDb2xvcjsKLSAgICBtdXRhYmxlIENv
bG9yIG1fc2xpZGVyQ29sb3I7Ci0gICAgbXV0YWJsZSBDb2xvciBtX3NsaWRlclRodW1iQ29sb3I7
Ci0gICAgY29uc3QgaW50IG1fbWVkaWFJY29uU2l6ZTsKLSAgICBjb25zdCBpbnQgbV9tZWRpYVNs
aWRlckhlaWdodDsKICNlbmRpZiAvLyBHVEtfQVBJX1ZFUlNJT05fMgogfTsKIAo=
</data>
<flag name="review"
          id="293515"
          type_id="1"
          status="+"
          setter="mcatanzaro"
    />
          </attachment>
      

    </bug>

</bugzilla>