<?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>78969</bug_id>
          
          <creation_ts>2012-02-18 12:16:35 -0800</creation_ts>
          <short_desc>[GTK] [AC] Generalize WindowContextGL</short_desc>
          <delta_ts>2012-03-02 13:08:17 -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>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>78968</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Martin Robinson">mrobinson</reporter>
          <assigned_to name="Martin Robinson">mrobinson</assigned_to>
          <cc>alex</cc>
    
    <cc>gustavo</cc>
    
    <cc>joone.hur</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>559805</commentid>
    <comment_count>0</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-18 12:16:35 -0800</bug_when>
    <thetext>WindowContextGL should become a general GL context abstraction so that it can be used by both WebGL and accelerated compositing.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559807</commentid>
    <comment_count>1</comment_count>
      <attachid>127708</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-18 12:28:52 -0800</bug_when>
    <thetext>Created attachment 127708
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>559808</commentid>
    <comment_count>2</comment_count>
      <attachid>127709</attachid>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-02-18 12:32:31 -0800</bug_when>
    <thetext>Created attachment 127709
Patch also removing unused WindowContextGL</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569807</commentid>
    <comment_count>3</comment_count>
      <attachid>127709</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-03-02 11:45:50 -0800</bug_when>
    <thetext>Comment on attachment 127709
Patch also removing unused WindowContextGL

LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569833</commentid>
    <comment_count>4</comment_count>
      <attachid>127709</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2012-03-02 12:13:22 -0800</bug_when>
    <thetext>Comment on attachment 127709
Patch also removing unused WindowContextGL

Rejecting attachment 127709 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;-...&quot; exit_code: 2

Last 500 characters of output:
/graphics/gtk/WindowGLContext.h&apos;
patching file Source/WebCore/platform/graphics/gtk/WindowGLContextGLX.cpp
rm &apos;Source/WebCore/platform/graphics/gtk/WindowGLContextGLX.cpp&apos;
patching file Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContext.h
patching file Source/WebKit/gtk/WebCoreSupport/AcceleratedCompositingContextGL.cpp

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, u&apos;--force&apos;, u&apos;--reviewer&apos;, u&apos;Gustavo No...&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue/

Full output: http://queues.webkit.org/results/11802076</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>569870</commentid>
    <comment_count>5</comment_count>
    <who name="Martin Robinson">mrobinson</who>
    <bug_when>2012-03-02 13:08:17 -0800</bug_when>
    <thetext>Committed r109605: &lt;http://trac.webkit.org/changeset/109605&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127708</attachid>
            <date>2012-02-18 12:28:52 -0800</date>
            <delta_ts>2012-02-18 12:32:28 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-78969-20120218122850.patch</filename>
            <type>text/plain</type>
            <size>25539</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjMzUxMWM3NDgwNTNk
MTU1NjAyMmEwNWRiNDg5ODJkOWE5OWU5My4uN2M1ODMzMWYwMGViZDBhOWUwMTIwOWFlM2U2YWE3
YTBmYTUzY2FkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTE4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbQUNd
IEdlbmVyYWxpemUgV2luZG93Q29udGV4dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQgbm90IGNoYW5nZSBm
dW5jdGlvbmFsaXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3
IGZpbGVzIHRvIHNvdXJjZSBsaXN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dMQ29udGV4dC5oOiBBZGRlZC4gQW4gYWJzdHJhY3Rpb24gZm9yIGFsbCBHTCBjb250ZXh0cy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcDogQWRkZWQu
IFRoaXMgZmlsZSBpcyBjb21wb3NlZCBvZiB2ZXJ5IGxpdHRsZQorICAgICAgICBuZXcgY29kZSwg
YXMgdGhlIGxvZ2ljIGZvciBpbnN0YW50aWF0aW5nIG9mZnNjcmVlbiBHTCBjb250ZXh0cyBpcyBj
b3BpZWQgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuIFRoZSBjb2RlIGR1
cGxpY2F0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZvbGxvd3VwIHBhdGNoLgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOiBBZGRlZC4gVGhpcyBpbmNsdWRlcyBzb21l
IGhlbHBlciBmYWN0b3JpZXMKKyAgICAgICAgZm9yIGNyZWF0aW5nIGFuZCBjYWNoaW5nIEdMIGNv
bnRleHRzIGZvciBHVEsrIHdpZGdldHMuCisKIDIwMTItMDItMTcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQXZvaWQgaW5jb25zaXN0ZW5jeSBpbiBOb2RlOjpp
bkRvY3VtZW50IGR1ZSB0byBET01TdWJ0cmVlTW9kaWZpZWQgZGlzcGF0Y2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA0NjVlNTQwYmM5ODNmMzFmOTA3NDlmM2MwYzA3NzYyYjkyODBjMWM0Li41NDM0NjRm
ZDUxMjgwMjlhNWYxNDZjYjBlZjczOTE0YjM1MTc3ZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjggQEAKKzIwMTItMDItMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFtBQ10gR2VuZXJhbGl6ZSBXaW5kb3dDb250ZXh0R0wK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4OTY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIEdMQ29u
dGV4dCBpbnN0ZWFkIG9mIFdpbmRvd0NvbnRleHRHTC4gUmVtb3ZlIGEgZmV3IHVubmVjZXNzYXJ5
CisgICAgICAgIG5hbWVzcGFjZSBzcGVjaWZpZXJzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Lmg6IE5vdyB3ZSBmaW5kIHRoZSBHTENvbnRl
eHQKKyAgICAgICAgb2Ygb3VyIHdpZGdldCwgd2hpY2ggaXMgY2FjaGVkIGluIFdlYkNvcmUuIFJl
bW92ZSBtX2luaXRpYWxpemVkIGFzIGl0IGlzbid0IG5lZWRlZC4KKyAgICAgICAgKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KTogTm8g
bG9uZ2VyIGluaXRpYWxpemUKKyAgICAgICAgbV9pbml0aWFsaXplZC4KKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmdsQ29udGV4dCk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJz
VG9XaW5kb3cpOiBVc2UgZ2xDb250ZXh0KCkgbm93LgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQpOiBSZW1vdmUgdW5uZWNlc3NhcnkgbmFtZXNwYWNlIHNwZWNpZmllci4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeVN5
bmNSZXF1aXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVnQm9yZGVycyk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd1JlcGFpbnRD
b3VudGVyKTogRGl0dG8uCisKIDIwMTItMDItMTcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBjaGFuZ2UgdGhlIHdheSBvZiByZWdpc3Rl
cmluZyBEZXZpY2VPcmllbnRhdGlvbiBjbGllbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggZGQ3YjdkY2M4ZTdhZTRiZThlM2E4Mjc4ODE2N2MyMTRkODM0YjVlNi4uZDhhYWVi
MTIyY2RmNGFmODU1ODQ0NTA4Y2ViOWRmMTdlZWM5NDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC01Nzc2LDYgKzU3NzYsOCBAQCBlbmRpZiAgIyBFTkQgVVNFX1RFWFRVUkVf
TUFQUEVSX0NBSVJPCiAKIGlmIFVTRV9URVhUVVJFX01BUFBFUl9HTAogd2ViY29yZV9zb3VyY2Vz
ICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXApAQCAtNTc5NCw4ICs1Nzk2LDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9XaW5kb3dH
TENvbnRleHRHTFguY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
V2luZG93R0xDb250ZXh0LmgKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
R0xDb250ZXh0R3RrLmNwcAogZW5kaWYgICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9HTAogZW5k
aWYgICMgVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGEzOWNl
YzU4OTc2YjM4NzUwMDlhY2NiNGZlYTBhMWIwMDU1NzhiYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgR0xDb250ZXh0X2gKKyNkZWZpbmUg
R0xDb250ZXh0X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKK3R5cGVkZWYgc3RydWN0IF9fR0xY
Y29udGV4dFJlYyogR0xYQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5
OwordHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVjICpHTFhDb250ZXh0OwordHlwZWRlZiB1
bnNpZ25lZCBsb25nIEdMWFBidWZmZXI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xYUGl4bWFw
OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
UGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKK3R5cGVkZWYgdm9pZCogQ29udGV4
dEtleVR5cGU7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTENvbnRl
eHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMQ29udGV4dCk7CitwdWJsaWM6CisgICAg
c3RhdGljIEdMQ29udGV4dCogY3JlYXRlU2hhcmluZ0NvbnRleHQoR0xDb250ZXh0KiBzaGFyZUNv
bnRleHQpOworICAgIHN0YXRpYyBHTENvbnRleHQqIGdldENvbnRleHRGb3JXaWRnZXQoUGxhdGZv
cm1XaWRnZXQpOworICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKKyAgICBzdGF0
aWMgdm9pZCByZW1vdmVBY3RpdmVDb250ZXh0KEdMQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lk
IHJlbW92ZUFjdGl2ZUNvbnRleHRGb3JXaWRnZXQoUGxhdGZvcm1XaWRnZXQpOworCisgICAgdmly
dHVhbCB+R0xDb250ZXh0KCk7CisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2
b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgYm9vbCBjYW5SZW5kZXJUb0RlZmF1bHRGcmFtZWJ1ZmZl
cigpOworCisjaWYgRU5BQkxFKFdFQkdMKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBh
ZGRBY3RpdmVDb250ZXh0KEdMQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lkIGNsZWFudXBBY3Rp
dmVDb250ZXh0c0F0RXhpdCgpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIEdMQ29udGV4
dChHTFhDb250ZXh0KTsKKyAgICBHTENvbnRleHQoR0xYQ29udGV4dCwgUGl4bWFwLCBHTFhQaXht
YXApOworICAgIHN0YXRpYyBHTENvbnRleHQqIGNyZWF0ZUNvbnRleHQoWElELCBHTFhDb250ZXh0
IHNoYXJpbmdDb250ZXh0ID0gMCk7CisgICAgc3RhdGljIEdMQ29udGV4dCogY3JlYXRlV2luZG93
Q29udGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KTsKKyAgICBzdGF0
aWMgR0xDb250ZXh0KiBjcmVhdGVQYnVmZmVyQ29udGV4dChHTFhDb250ZXh0IHNoYXJpbmdDb250
ZXh0KTsKKyAgICBzdGF0aWMgR0xDb250ZXh0KiBjcmVhdGVQaXhtYXBDb250ZXh0KEdMWENvbnRl
eHQgc2hhcmluZ0NvbnRleHQpOworCisgICAgR0xYQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlz
cGxheSogbV9kaXNwbGF5OworCisgICAgWElEIG1fd2luZG93OworICAgIEdMWFBidWZmZXIgbV9w
YnVmZmVyOworICAgIFBpeG1hcCBtX3BpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7
CisjZW5kaWYKK307CisKK30KKworI2VuZGlmIC8vIEdMQ29udGV4dF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNkY2VkNjgzMjkwMzI2MGIyNTQ5NjU3Mjg5MDY4ZTBmZTQ4ZTcxNzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworI2lmIEVOQUJMRShXRUJHTCkg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2UgZG8gbm90IHdh
bnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4dEN1cnJlbnQgdXNpbmcgZGlmZmVyZW50IERpc3BsYXkg
cG9pbnRlcnMsCisvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRy
aXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKKy8vIHBvaW50ZXIgaGVyZS4K
K3N0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7CitzdGF0aWMgRGlzcGxheSogc2hh
cmVkRGlzcGxheSgpCit7CisgICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKKyAgICAgICAgZ1NoYXJl
ZERpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgcmV0dXJuIGdTaGFyZWREaXNwbGF5Owor
fQorCisvLyBCZWNhdXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4g
dGhlcmUgYXJlIGFjdGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhp
cyBoYXMgYmVlbiBvYnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisv
LyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4g
VGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2ls
bCBzdGlsbCBiZSBhbGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5Cisv
LyBsZWFrcykgYW5kIHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0
aGUgWCBzZXJ2ZXIgdG8gY3Jhc2guCit0eXBlZGVmIFZlY3RvcjxHTENvbnRleHQqPiBBY3RpdmVD
b250ZXh0TGlzdDsKK3N0YXRpYyBBY3RpdmVDb250ZXh0TGlzdCYgYWN0aXZlQ29udGV4dExpc3Qo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWN0aXZlQ29udGV4dExpc3QsIGFjdGl2ZUNv
bnRleHRzLCAoKSk7CisgICAgcmV0dXJuIGFjdGl2ZUNvbnRleHRzOworfQorCit2b2lkIEdMQ29u
dGV4dDo6YWRkQWN0aXZlQ29udGV4dChHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgc3RhdGlj
IGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7CisgICAgaWYgKCFhZGRlZEF0RXhpdEhh
bmRsZXIpIHsKKyAgICAgICAgYXRleGl0KCZHTENvbnRleHQ6OmNsZWFudXBBY3RpdmVDb250ZXh0
c0F0RXhpdCk7CisgICAgICAgIGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAg
IGFjdGl2ZUNvbnRleHRMaXN0KCkuYXBwZW5kKGNvbnRleHQpOworfQorCit2b2lkIEdMQ29udGV4
dDo6cmVtb3ZlQWN0aXZlQ29udGV4dChHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgQWN0aXZl
Q29udGV4dExpc3QmIGNvbnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBzaXpl
X3QgaSA9IGNvbnRleHRMaXN0LmZpbmQoY29udGV4dCk7CisgICAgaWYgKGkgIT0gbm90Rm91bmQp
CisgICAgICAgIGNvbnRleHRMaXN0LnJlbW92ZShpKTsKK30KKwordm9pZCBHTENvbnRleHQ6OmNs
ZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCit7CisgICAgQWN0aXZlQ29udGV4dExpc3QmIGNv
bnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvbnRleHRMaXN0LnNpemUoKTsgKytpKQorICAgICAgICBkZWxldGUgY29udGV4dExpc3Rb
aV07CisKKyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAgWENs
b3NlRGlzcGxheShnU2hhcmVkRGlzcGxheSk7CisgICAgZ1NoYXJlZERpc3BsYXkgPSAwOworfQor
CitHTENvbnRleHQqIEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpCit7CisgICAgQWN0aXZlQ29udGV4
dExpc3QmIGNvbnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBHTFhDb250ZXh0
IGN1cnJlbnQgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29udGV4dExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0g
Y29udGV4dExpc3RbaV0tPm1fY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0TGlz
dFtpXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0dMQ29udGV4dCogR0xDb250ZXh0Ojpj
cmVhdGVTaGFyaW5nQ29udGV4dChHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQoreworICAgIHJl
dHVybiBjcmVhdGVDb250ZXh0KDAsIHNoYXJpbmdDb250ZXh0ID8gc2hhcmluZ0NvbnRleHQtPm1f
Y29udGV4dCA6IDApOworfQorCitHTENvbnRleHQqIEdMQ29udGV4dDo6Y3JlYXRlV2luZG93Q29u
dGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KQoreworICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0
cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3BsYXksIHdpbmRvdywg
JmF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFhWaXN1YWxJbmZvIHZpc3Vh
bEluZm87CisgICAgdmlzdWFsSW5mby52aXN1YWxpZCA9IFhWaXN1YWxJREZyb21WaXN1YWwoYXR0
cmlidXRlcy52aXN1YWwpOworCisgICAgaW50IG51bVJldHVybmVkID0gMDsKKyAgICBYVmlzdWFs
SW5mbyogdmlzdWFsSW5mb0xpc3QgPSBYR2V0VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1YWxJRE1h
c2ssICZ2aXN1YWxJbmZvLCAmbnVtUmV0dXJuZWQpOworICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZUNvbnRleHQoZGlzcGxheSwgdmlzdWFsSW5mb0xpc3QsIHNoYXJpbmdDb250ZXh0
LCBUcnVlKTsKKyAgICBYRnJlZSh2aXN1YWxJbmZvTGlzdCk7CisKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR0xYUGJ1ZmZlciBhbmQgWElEIGFyZSBib3Ro
IHRoZSBzYW1lIHR5cGVzIHVuZGVybmVhdGgsIHNvIHdlIGhhdmUgdG8gc2hhcmUKKyAgICAvLyBh
IGNvbnN0cnVjdG9yIGhlcmUgd2l0aCB0aGUgd2luZG93IHBhdGguCisgICAgR0xDb250ZXh0KiBj
b250ZXh0V3JhcHBlciA9IG5ldyBHTENvbnRleHQoY29udGV4dCk7CisgICAgY29udGV4dFdyYXBw
ZXItPm1fd2luZG93ID0gd2luZG93OworICAgIHJldHVybiBjb250ZXh0V3JhcHBlcjsKK30KKwor
R0xDb250ZXh0KiBHTENvbnRleHQ6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEdMWENvbnRleHQgc2hh
cmluZ0NvbnRleHQpCit7CisgICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAg
ICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAorICAgICAgICBHTFhfUkVOREVS
X1RZUEUsIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAorICAgICAgICBH
TFhfR1JFRU5fU0laRSwgMSwKKyAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKKyAgICAgICAgR0xY
X0FMUEhBX1NJWkUsIDEsCisgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsIEdMX0ZBTFNFLAorICAg
ICAgICAwCisgICAgfTsKKworICAgIGludCByZXR1cm5lZEVsZW1lbnRzOworICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBn
bFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5LCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1cm5l
ZEVsZW1lbnRzKTsKKyAgICBpZiAoIXJldHVybmVkRWxlbWVudHMpIHsKKyAgICAgICAgWEZyZWUo
Y29uZmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFdlIHdpbGwgYmUg
cmVuZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBi
ZSBsYXJnZS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdM
WF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKKyAgICBHTFhQ
YnVmZmVyIHBidWZmZXIgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZpZ3NbMF0sIHBi
dWZmZXJBdHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpIHsKKyAgICAgICAgWEZyZWUoY29u
Zmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdMWENvbnRleHQgY29udGV4
dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQ
RSwgc2hhcmluZ0NvbnRleHQsIEdMX1RSVUUpOworICAgIFhGcmVlKGNvbmZpZ3MpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBHTFhQYnVmZmVyIGFuZCBY
SUQgYXJlIGJvdGggdGhlIHNhbWUgdHlwZXMgdW5kZXJuZWF0aCwgc28gd2UgaGF2ZSB0byBzaGFy
ZQorICAgIC8vIGEgY29uc3RydWN0b3IgaGVyZSB3aXRoIHRoZSB3aW5kb3cgcGF0aC4KKyAgICBH
TENvbnRleHQqIGNvbnRleHRXcmFwcGVyID0gbmV3IEdMQ29udGV4dChjb250ZXh0KTsKKyAgICBj
b250ZXh0V3JhcHBlci0+bV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyAgICByZXR1cm4gY29udGV4dFdy
YXBwZXI7Cit9CisKK0dMQ29udGV4dCogR0xDb250ZXh0OjpjcmVhdGVQaXhtYXBDb250ZXh0KEdM
WENvbnRleHQgc2hhcmluZ0NvbnRleHQpCit7CisgICAgc3RhdGljIGludCB2aXN1YWxBdHRyaWJ1
dGVzW10gPSB7CisgICAgICAgIEdMWF9SR0JBLAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisg
ICAgICAgIEdMWF9HUkVFTl9TSVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAg
ICAgICBHTFhfQUxQSEFfU0laRSwgMSwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZv
ID0gZ2xYQ2hvb3NlVmlzdWFsKGRpc3BsYXksIERlZmF1bHRTY3JlZW4oZGlzcGxheSksIHZpc3Vh
bEF0dHJpYnV0ZXMpOworICAgIGlmICghdmlzdWFsSW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVhdGVDb250ZXh0KGRpc3BsYXksIHZpc3Vh
bEluZm8sIHNoYXJpbmdDb250ZXh0LCBHTF9UUlVFKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAg
ICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIERlZmF1bHRSb290V2luZG93
KGRpc3BsYXkpLCAxLCAxLCB2aXN1YWxJbmZvLT5kZXB0aCk7CisgICAgaWYgKCFwaXhtYXApIHsK
KyAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoZGlzcGxheSwgdmlz
dWFsSW5mbywgcGl4bWFwKTsKKyAgICBpZiAoIWdseFBpeG1hcCkgeworICAgICAgICBYRnJlZVBp
eG1hcChkaXNwbGF5LCBwaXhtYXApOworICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBHTENvbnRleHQoY29udGV4dCwg
cGl4bWFwLCBnbHhQaXhtYXApOworfQorCitHTENvbnRleHQqIEdMQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KQoreworICAgIGlmICgh
c2hhcmVkRGlzcGxheSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAg
aWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNo
aW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IHdpbmRv
dyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCkgOiAwOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGNyZWF0ZVBidWZmZXJDb250ZXh0KHNo
YXJpbmdDb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIGNvbnRleHQgPSBjcmVh
dGVQaXhtYXBDb250ZXh0KHNoYXJpbmdDb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dMQ29udGV4dDo6R0xD
b250ZXh0KEdMWENvbnRleHQgY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV93aW5kb3coMCkKKyAgICAsIG1fcGJ1ZmZlcigwKQorICAgICwgbV9waXhtYXAoMCkKKyAg
ICAsIG1fZ2x4UGl4bWFwKDApCit7CisgICAgYWRkQWN0aXZlQ29udGV4dCh0aGlzKTsKK30KKwor
R0xDb250ZXh0OjpHTENvbnRleHQoR0xYQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4bWFwLCBH
TFhQaXhtYXAgZ2x4UGl4bWFwKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3dp
bmRvdygwKQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBtX3BpeG1hcChwaXhtYXApCisgICAg
LCBtX2dseFBpeG1hcChnbHhQaXhtYXApCit7CisgICAgYWRkQWN0aXZlQ29udGV4dCh0aGlzKTsK
K30KKworR0xDb250ZXh0Ojp+R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7Cisg
ICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBO
VmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZlcnMuIE9yaWdpbmFsbHkKKyAgICAgICAgLy8gZnJv
bSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxlbWVudGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0
Lm9yZy9pbG1hcmkvY2FudmFzM2QvCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgTm9u
ZSwgTm9uZSk7CisgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0
KTsKKyAgICB9CisKKyAgICBpZiAobV9wYnVmZmVyKSB7CisgICAgICAgIGdsWERlc3Ryb3lQYnVm
ZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyKTsKKyAgICAgICAgbV9wYnVmZmVyID0gMDsK
KyAgICB9CisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGdsWERlc3Ryb3lHTFhQaXht
YXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCk7CisgICAgICAgIG1fZ2x4UGl4bWFwID0g
MDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJl
ZERpc3BsYXkoKSwgbV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9IDA7CisgICAgfQorICAg
IHJlbW92ZUFjdGl2ZUNvbnRleHQodGhpcyk7Cit9CisKK2Jvb2wgR0xDb250ZXh0OjpjYW5SZW5k
ZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1fd2luZG93OworfQorCiti
b29sIEdMQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9jb250
ZXh0ICYmIChtX3dpbmRvdyB8fCBtX3BidWZmZXIgfHwgbV9nbHhQaXhtYXApKTsKKyAgICBpZiAo
Z2xYR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRleHQpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG1fd2luZG93KQorICAgICAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc2hh
cmVkRGlzcGxheSgpLCBtX3dpbmRvdywgbV9jb250ZXh0KTsKKworICAgIGlmIChtX3BidWZmZXIp
CisgICAgICAgIHJldHVybiBnbFhNYWtlQ3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fcGJ1ZmZl
ciwgbV9jb250ZXh0KTsKKworICAgIHJldHVybiA6OmdsWE1ha2VDdXJyZW50KHNoYXJlZERpc3Bs
YXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Cit9CisKK3ZvaWQgR0xDb250ZXh0Ojpzd2Fw
QnVmZmVycygpCit7CisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBnbFhTd2FwQnVmZmVycyhz
aGFyZWREaXNwbGF5KCksIG1fd2luZG93KTsKK30KKworI2lmIEVOQUJMRShXRUJHTCkKK1BsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QgR0xDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAg
IHJldHVybiBtX2NvbnRleHQ7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYxZDIyMzRjZTc1NzY5NTk1
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR0xDb250ZXh0R3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorCisjaW5jbHVkZSA8Z2Rr
L2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxHdGtXaWRnZXQqLCBPd25QdHI8
R0xDb250ZXh0PiA+IFdpbmRvd0NvbnRleHRNYXA7CitzdGF0aWMgV2luZG93Q29udGV4dE1hcCYg
d2luZG93Q29udGV4dHNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2luZG93Q29u
dGV4dE1hcCwgd2luZG93Q29udGV4dHMsICgpKTsKKyAgICByZXR1cm4gd2luZG93Q29udGV4dHM7
Cit9CisKK3N0YXRpYyB2b2lkIHNodXRkb3duR0xDb250ZXh0KEd0a1dpZGdldCogd2lkZ2V0LCB2
b2lkKikKK3sKKyAgICBXaW5kb3dDb250ZXh0TWFwJiB3aW5kb3dDb250ZXh0cyA9IHdpbmRvd0Nv
bnRleHRzTWFwKCk7CisgICAgV2luZG93Q29udGV4dE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0Nv
bnRleHRzLmZpbmQod2lkZ2V0KTsKKyAgICBpZiAoaSAhPSB3aW5kb3dDb250ZXh0cy5lbmQoKSkK
KyAgICAgICAgd2luZG93Q29udGV4dHMucmVtb3ZlKGkpOworfQorCitHTENvbnRleHQqIEdMQ29u
dGV4dDo6Z2V0Q29udGV4dEZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NF
UlQod2lkZ2V0KTsKKworICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRvd0NvbnRleHRzID0gd2lu
ZG93Q29udGV4dHNNYXAoKTsKKyAgICBXaW5kb3dDb250ZXh0TWFwOjppdGVyYXRvciBpID0gd2lu
ZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CisgICAgaWYgKGkgIT0gd2luZG93Q29udGV4
dHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CisKKyAgICAvLyBJdCdz
IGltcG9ydGFudCB0aGF0IHRoaXMgY29udGV4dCBkb2Vzbid0IGhhbmcgYXJvdW5kIGFmdGVyIHRo
ZSB3aW5kb3cKKyAgICAvLyBpcyB1bm1hcHBlZCwgc28gd2UgbWFrZSBzdXJlIHRvIGNsZWFuIGl0
IHVwIG9uY2UgdGhhdCBoYXBwZW5zLgorICAgIGlmICghZ19zaWduYWxfaGFuZGxlcl9maW5kKHdp
ZGdldCwgR19TSUdOQUxfTUFUQ0hfRlVOQywgMCwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc2h1dGRvd25HTENvbnRleHQpLCAwKSkKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3aWRn
ZXQsICJ1bm1hcCIsIEdfQ0FMTEJBQ0soc2h1dGRvd25HTENvbnRleHQpLCAwKTsKKworICAgIC8v
IElmIHRoaXMgR0RLIHdpbmRvdyBkb2Vzbid0IGhhdmUgaXRzIG93biBuYXRpdmUgd2luZG93IHRo
ZW4sIHdlIGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgaXQgZm9yIHJlbmRlcmluZywgc2luY2Ug
d2UnbGwgYmUgZHJhd2luZyBvdmVyIHNvbWUgb3RoZXIgd2lkZ2V0J3MgYXJlYS4KKyAgICBHZGtX
aW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgIEdM
Q29udGV4dCogY29udGV4dCA9IGdka1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2Rr
V2luZG93KSA/ICBjcmVhdGVDb250ZXh0KEdES19XSU5ET1dfWElEKGdka1dpbmRvdykpIDogY3Jl
YXRlQ29udGV4dCgwKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB3aW5kb3dDb250ZXh0cy5zZXQod2lkZ2V0LCBhZG9wdFB0cihjb250ZXh0KSk7CisgICAg
cmV0dXJuIGNvbnRleHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdD
b250ZXh0LmggYi9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENv
bXBvc2l0aW5nQ29udGV4dC5oCmluZGV4IGNhZDQ3NDk1ZDYyMTNlYTA0ZmNiOWVkOTA3NWFhMjcy
MzJlYjk1YjcuLmIyNTY3ZWI1ZjE0NTlhMGM2ZmQyZmNjZWI4OTQyOWQ2NDY2YWE4MzcgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0LmgKKysrIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQvQWNj
ZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaApAQCAtMjgsOCArMjgsOCBAQAogI2luY2x1ZGUg
PHd0Zi9QYXNzT3duUHRyLmg+CiAKICNpZiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCisjaW5jbHVk
ZSAiR0xDb250ZXh0LmgiCiAjaW5jbHVkZSAiVGV4dHVyZU1hcHBlckxheWVyLmgiCi0jaW5jbHVk
ZSAiV2luZG93R0xDb250ZXh0LmgiCiAjZW5kaWYKIAogI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKQEAgLTY5LDExICs2OSw4IEBAIHByaXZhdGU6CiAjaWYgVVNFKENMVVRURVIpCiAg
ICAgR3RrV2lkZ2V0KiBtX3Jvb3RMYXllckVtYmVkZGVyOwogI2VsaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQotICAgIHZvaWQgaW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCk7Ci0KLSAgICBib29sIG1f
aW5pdGlhbGl6ZWQ7CisgICAgV2ViQ29yZTo6R0xDb250ZXh0KiBnbENvbnRleHQoKTsKICAgICBX
ZWJDb3JlOjpUZXh0dXJlTWFwcGVyTGF5ZXIqIG1fcm9vdFRleHR1cmVNYXBwZXJMYXllcjsKLSAg
ICBPd25QdHI8V2ViQ29yZTo6V2luZG93R0xDb250ZXh0PiBtX2NvbnRleHQ7CiAgICAgT3duUHRy
PFdlYkNvcmU6OlRleHR1cmVNYXBwZXI+IG1fdGV4dHVyZU1hcHBlcjsKICNlbmRpZgogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBv
c2l0aW5nQ29udGV4dEdMLmNwcCBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCmluZGV4IDhjNDMwMGYyNzk5MDI2ODlj
MzkxYmVjNmQ2ZDcwNmMwMTMwOTQ0MDAuLjZkMzM4OTcwYThhMzAzZWM5ZDc4NDU1MzI1YTc4YjA3
MDViNmRiODQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvZ3RrL1dlYkNvcmVTdXBwb3J0L0Fj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3Rr
L1dlYkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0R0wuY3BwCkBAIC00
Miw3ICs0Miw2IEBAIG5hbWVzcGFjZSBXZWJLaXQgewogQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KFdlYktpdFdlYlZpZXcqIHdlYlZp
ZXcpCiAgICAgOiBtX3dlYlZpZXcod2ViVmlldykKICAgICAsIG1fc3luY1RpbWVyQ2FsbGJhY2tJ
ZCgwKQotICAgICwgbV9pbml0aWFsaXplZChmYWxzZSkKICAgICAsIG1fcm9vdFRleHR1cmVNYXBw
ZXJMYXllcigwKQogewogfQpAQCAtNTMsMzggKzUyLDMwIEBAIEFjY2VsZXJhdGVkQ29tcG9zaXRp
bmdDb250ZXh0Ojp+QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQoKQogICAgICAgICBnX3Nv
dXJjZV9yZW1vdmUobV9zeW5jVGltZXJDYWxsYmFja0lkKTsKIH0KIAotdm9pZCBBY2NlbGVyYXRl
ZENvbXBvc2l0aW5nQ29udGV4dDo6aW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCkKLXsKLSAgICBpZiAo
bV9pbml0aWFsaXplZCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgbV9pbml0aWFsaXplZCA9IHRy
dWU7Ci0KLSAgICAvLyBUaGUgR1RLKyBkb2NzIHNheSB0aGF0IHdlIGNhbiBmYWlsIHRvIGNyZWF0
ZSBhIG5hdGl2ZSB3aW5kb3cuCi0gICAgLy8gRklYTUU6IFdlIHNob3VsZCBmYWxsIGJhY2sgdG8g
dGhlIEltYWdlQnVmZmVyIFRleHR1cmVNYXBwZXIgd2hlbiBpdCBleGlzdHMuCi0gICAgaWYgKCFt
X3dlYlZpZXctPnByaXYtPmhhc05hdGl2ZVdpbmRvdykKLSAgICAgICAgcmV0dXJuOwotCi0gICAg
bV9jb250ZXh0ID0gV2ViQ29yZTo6V2luZG93R0xDb250ZXh0OjpjcmVhdGVDb250ZXh0V2l0aEdk
a1dpbmRvdyhndGtfd2lkZ2V0X2dldF93aW5kb3coR1RLX1dJREdFVChtX3dlYlZpZXcpKSk7Ci19
Ci0KIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmVuYWJsZWQoKQogewogICAg
IHJldHVybiBtX3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIgJiYgbV90ZXh0dXJlTWFwcGVyOwogfQog
CitHTENvbnRleHQqIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpnbENvbnRleHQoKQor
eworICAgIEdMQ29udGV4dCogY29udGV4dCA9IEdMQ29udGV4dDo6Z2V0Q29udGV4dEZvcldpZGdl
dChHVEtfV0lER0VUKG1fd2ViVmlldykpOworICAgIGlmICghY29udGV4dC0+Y2FuUmVuZGVyVG9E
ZWZhdWx0RnJhbWVidWZmZXIoKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGNvbnRl
eHQ7Cit9CiAKIGJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnJlbmRlckxheWVy
c1RvV2luZG93KGNvbnN0IEludFJlY3QmIGNsaXBSZWN0KQogewogICAgIGlmICghZW5hYmxlZCgp
KQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAvLyBXZSBpbml0aWFsaXplIHRoZSBjb250
ZXh0IGxhemlseSBoZXJlIHNvIHRoYXQgd2Uga25vdyB0aGF0IHRoZSBHZGtXaW5kb3cgcmVhbGl6
ZWQuCi0gICAgaW5pdGlhbGl6ZUlmTmVjZXNzYXJ5KCk7Ci0gICAgaWYgKCFtX2NvbnRleHQpCisg
ICAgR0xDb250ZXh0KiBjb250ZXh0ID0gZ2xDb250ZXh0KCk7CisgICAgaWYgKCFjb250ZXh0KQog
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBtX2NvbnRleHQtPnN0YXJ0RHJhd2luZygpOwor
ICAgIGlmICghY29udGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKIAogICAgIEd0a0FsbG9jYXRpb24gYWxsb2NhdGlvbjsKICAgICBndGtfd2lkZ2V0X2dl
dF9hbGxvY2F0aW9uKEdUS19XSURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwpAQCAtOTQs
NyArODUsNyBAQCBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpyZW5kZXJMYXll
cnNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBjbGlwUmVjdAogICAgIG1fcm9vdFRleHR1cmVNYXBw
ZXJMYXllci0+cGFpbnQoKTsKICAgICBtX3RleHR1cmVNYXBwZXItPmVuZFBhaW50aW5nKCk7CiAK
LSAgICBtX2NvbnRleHQtPmZpbmlzaERyYXdpbmcoKTsKKyAgICBjb250ZXh0LT5zd2FwQnVmZmVy
cygpOwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC0xMTQsMTQgKzEwNSwxNCBAQCB2b2lkIEFj
Y2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjphdHRhY2hSb290R3JhcGhpY3NMYXllcihHcmFw
aGljc0xheWVyKiBncmFwaAogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldE5lZWRzRGlzcGxh
eSgpOwogICAgIG1fcm9vdEdyYXBoaWNzTGF5ZXItPnNldFNpemUoY29yZShtX3dlYlZpZXcpLT5t
YWluRnJhbWUoKS0+dmlldygpLT5mcmFtZVJlY3QoKS5zaXplKCkpOwogCi0gICAgLy8gV2UgaW5p
dGlhbGl6ZSB0aGUgY29udGV4dCBsYXppbHkgaGVyZSBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGUg
R2RrV2luZG93IHJlYWxpemVkLgotICAgIGluaXRpYWxpemVJZk5lY2Vzc2FyeSgpOwotICAgIGlm
ICghbV9jb250ZXh0KQorICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOworICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuOwogCiAgICAgLy8gVGhlIGNvbnRleHQgbmVl
ZHMgdG8gYmUgYWN0aXZlIHdoZW4gY3JlYXRpbmcgdGhlIHRleHR1cmUgbWFwcGVyLiBJdCdzIGZp
bmUgdG8KLSAgICAvLyBhdm9pZCBjYWxsaW5nIGVuZERyYXdpbmcgaGVyZSwgYmVjYXVzZSBpdCB3
aWxsIGp1c3QgaW5pdGlhbGl6ZSBzaGFkZXJzLgotICAgIG1fY29udGV4dC0+c3RhcnREcmF3aW5n
KCk7CisgICAgLy8gYXZvaWQgY2FsbGluZyBzd2FwQnVmZmVycyBoZXJlLCBiZWNhdXNlIGl0IHdp
bGwganVzdCBpbml0aWFsaXplIHNoYWRlcnMuCisgICAgaWYgKCFjb250ZXh0LT5tYWtlQ29udGV4
dEN1cnJlbnQoKSkKKyAgICAgICAgcmV0dXJuOwogCiAgICAgR3RrQWxsb2NhdGlvbiBhbGxvY2F0
aW9uOwogICAgIGd0a193aWRnZXRfZ2V0X2FsbG9jYXRpb24oR1RLX1dJREdFVChtX3dlYlZpZXcp
LCAmYWxsb2NhdGlvbik7CkBAIC0xODgsMjggKzE3OSwyOCBAQCB2b2lkIEFjY2VsZXJhdGVkQ29t
cG9zaXRpbmdDb250ZXh0OjpzeW5jTGF5ZXJzVGltZW91dCgpCiAgICAgICAgIG1fc3luY1RpbWVy
Q2FsbGJhY2tJZCA9IGdfdGltZW91dF9hZGRfZnVsbChHREtfUFJJT1JJVFlfRVZFTlRTLCAxMDAw
LjAgLyA2MC4wLCByZWludGVycHJldF9jYXN0PEdTb3VyY2VGdW5jPihzeW5jTGF5ZXJzVGltZW91
dENhbGxiYWNrKSwgdGhpcywgMCk7CiB9CiAKLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0Nv
bnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXll
ciosIGRvdWJsZSB0aW1lKQordm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6bm90
aWZ5QW5pbWF0aW9uU3RhcnRlZChjb25zdCBHcmFwaGljc0xheWVyKiwgZG91YmxlIHRpbWUpCiB7
CiAKIH0KLXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeVN5bmNSZXF1
aXJlZChjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKikKK3ZvaWQgQWNjZWxlcmF0ZWRDb21w
b3NpdGluZ0NvbnRleHQ6Om5vdGlmeVN5bmNSZXF1aXJlZChjb25zdCBHcmFwaGljc0xheWVyKikK
IHsKIAogfQogCi12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwYWludENvbnRl
bnRzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqLCBXZWJDb3JlOjpHcmFwaGljc0NvbnRl
eHQmIGNvbnRleHQsIFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNlLCBjb25zdCBX
ZWJDb3JlOjpJbnRSZWN0JiByZWN0VG9QYWludCkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGlu
Z0NvbnRleHQ6OnBhaW50Q29udGVudHMoY29uc3QgR3JhcGhpY3NMYXllciosIEdyYXBoaWNzQ29u
dGV4dCYgY29udGV4dCwgR3JhcGhpY3NMYXllclBhaW50aW5nUGhhc2UsIGNvbnN0IEludFJlY3Qm
IHJlY3RUb1BhaW50KQogewogICAgIGNhaXJvX3QqIGNyID0gY29udGV4dC5wbGF0Zm9ybUNvbnRl
eHQoKS0+Y3IoKTsKICAgICBjb3B5UmVjdEZyb21DYWlyb1N1cmZhY2VUb0NvbnRleHQobV93ZWJW
aWV3LT5wcml2LT5iYWNraW5nU3RvcmUtPmNhaXJvU3VyZmFjZSgpLCBjciwKICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50U2l6ZSgpLCByZWN0VG9QYWludCk7CiB9CiAK
LWJvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dEZWJ1Z0JvcmRlcnMoY29u
c3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopIGNvbnN0Citib29sIEFjY2VsZXJhdGVkQ29tcG9z
aXRpbmdDb250ZXh0OjpzaG93RGVidWdCb3JkZXJzKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25z
dAogewogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5n
Q29udGV4dDo6c2hvd1JlcGFpbnRDb3VudGVyKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIq
KSBjb25zdAorYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd1JlcGFpbnRD
b3VudGVyKGNvbnN0IEdyYXBoaWNzTGF5ZXIqKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsK
IH0K
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>127709</attachid>
            <date>2012-02-18 12:32:31 -0800</date>
            <delta_ts>2012-03-02 12:13:22 -0800</delta_ts>
            <desc>Patch also removing unused WindowContextGL</desc>
            <filename>bug-78969-20120218123229.patch</filename>
            <type>text/plain</type>
            <size>30343</size>
            <attacher name="Martin Robinson">mrobinson</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTA4MTUyCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggY2FjMzUxMWM3NDgwNTNk
MTU1NjAyMmEwNWRiNDg5ODJkOWE5OWU5My4uN2M1ODMzMWYwMGViZDBhOWUwMTIwOWFlM2U2YWE3
YTBmYTUzY2FkNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIxIEBACisyMDEyLTAyLTE4ICBNYXJ0
aW4gUm9iaW5zb24gIDxtcm9iaW5zb25AaWdhbGlhLmNvbT4KKworICAgICAgICBbR1RLXSBbQUNd
IEdlbmVyYWxpemUgV2luZG93Q29udGV4dEdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD03ODk2OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyBzaG91bGQgbm90IGNoYW5nZSBm
dW5jdGlvbmFsaXR5LgorCisgICAgICAgICogR05VbWFrZWZpbGUubGlzdC5hbTogQWRkZWQgbmV3
IGZpbGVzIHRvIHNvdXJjZSBsaXN0LgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhaXJv
L0dMQ29udGV4dC5oOiBBZGRlZC4gQW4gYWJzdHJhY3Rpb24gZm9yIGFsbCBHTCBjb250ZXh0cy4K
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcDogQWRkZWQu
IFRoaXMgZmlsZSBpcyBjb21wb3NlZCBvZiB2ZXJ5IGxpdHRsZQorICAgICAgICBuZXcgY29kZSwg
YXMgdGhlIGxvZ2ljIGZvciBpbnN0YW50aWF0aW5nIG9mZnNjcmVlbiBHTCBjb250ZXh0cyBpcyBj
b3BpZWQgZnJvbQorICAgICAgICBHcmFwaGljc0NvbnRleHQzRFByaXZhdGUuIFRoZSBjb2RlIGR1
cGxpY2F0aW9uIHdpbGwgYmUgcmVtb3ZlZCBpbiBhIGZvbGxvd3VwIHBhdGNoLgorICAgICAgICAo
V2ViQ29yZTo6R0xDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQpOgorICAgICAgICAqIHBsYXRmb3Jt
L2dyYXBoaWNzL2d0ay9HTENvbnRleHRHdGsuY3BwOiBBZGRlZC4gVGhpcyBpbmNsdWRlcyBzb21l
IGhlbHBlciBmYWN0b3JpZXMKKyAgICAgICAgZm9yIGNyZWF0aW5nIGFuZCBjYWNoaW5nIEdMIGNv
bnRleHRzIGZvciBHVEsrIHdpZGdldHMuCisKIDIwMTItMDItMTcgIEFkYW0gS2xlaW4gIDxhZGFt
a0BjaHJvbWl1bS5vcmc+CiAKICAgICAgICAgQXZvaWQgaW5jb25zaXN0ZW5jeSBpbiBOb2RlOjpp
bkRvY3VtZW50IGR1ZSB0byBET01TdWJ0cmVlTW9kaWZpZWQgZGlzcGF0Y2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvZ3RrL0NoYW5nZUxv
ZwppbmRleCA0NjVlNTQwYmM5ODNmMzFmOTA3NDlmM2MwYzA3NzYyYjkyODBjMWM0Li41NDM0NjRm
ZDUxMjgwMjlhNWYxNDZjYjBlZjczOTE0YjM1MTc3ZjE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
S2l0L2d0ay9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9ndGsvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMjggQEAKKzIwMTItMDItMTggIE1hcnRpbiBSb2JpbnNvbiAgPG1yb2JpbnNvbkBpZ2Fs
aWEuY29tPgorCisgICAgICAgIFtHVEtdIFtBQ10gR2VuZXJhbGl6ZSBXaW5kb3dDb250ZXh0R0wK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTc4OTY5CisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgVXNlIEdMQ29u
dGV4dCBpbnN0ZWFkIG9mIFdpbmRvd0NvbnRleHRHTC4gUmVtb3ZlIGEgZmV3IHVubmVjZXNzYXJ5
CisgICAgICAgIG5hbWVzcGFjZSBzcGVjaWZpZXJzIGluIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0
L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Lmg6IE5vdyB3ZSBmaW5kIHRoZSBHTENvbnRl
eHQKKyAgICAgICAgb2Ygb3VyIHdpZGdldCwgd2hpY2ggaXMgY2FjaGVkIGluIFdlYkNvcmUuIFJl
bW92ZSBtX2luaXRpYWxpemVkIGFzIGl0IGlzbid0IG5lZWRlZC4KKyAgICAgICAgKEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0KToKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcDoKKyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0
ZWRDb21wb3NpdGluZ0NvbnRleHQ6OkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0KTogTm8g
bG9uZ2VyIGluaXRpYWxpemUKKyAgICAgICAgbV9pbml0aWFsaXplZC4KKyAgICAgICAgKFdlYktp
dDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmdsQ29udGV4dCk6IEFkZGVkLgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6cmVuZGVyTGF5ZXJz
VG9XaW5kb3cpOiBVc2UgZ2xDb250ZXh0KCkgbm93LgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdyYXBoaWNzTGF5ZXIpOiBEaXR0by4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeUFu
aW1hdGlvblN0YXJ0ZWQpOiBSZW1vdmUgdW5uZWNlc3NhcnkgbmFtZXNwYWNlIHNwZWNpZmllci4K
KyAgICAgICAgKFdlYktpdDo6QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6Om5vdGlmeVN5
bmNSZXF1aXJlZCk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0
aW5nQ29udGV4dDo6cGFpbnRDb250ZW50cyk6IERpdHRvLgorICAgICAgICAoV2ViS2l0OjpBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVnQm9yZGVycyk6IERpdHRvLgorICAg
ICAgICAoV2ViS2l0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd1JlcGFpbnRD
b3VudGVyKTogRGl0dG8uCisKIDIwMTItMDItMTcgIEd5dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtp
bUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbR1RLXSBjaGFuZ2UgdGhlIHdheSBvZiByZWdpc3Rl
cmluZyBEZXZpY2VPcmllbnRhdGlvbiBjbGllbnRzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvR05VbWFrZWZpbGUubGlzdC5hbSBiL1NvdXJjZS9XZWJDb3JlL0dOVW1ha2VmaWxlLmxpc3Qu
YW0KaW5kZXggZGQ3YjdkY2M4ZTdhZTRiZThlM2E4Mjc4ODE2N2MyMTRkODM0YjVlNi4uZDhhYWVi
MTIyY2RmNGFmODU1ODQ0NTA4Y2ViOWRmMTdlZWM5NDUwNSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvR05VbWFrZWZpbGUubGlzdC5hbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9HTlVtYWtlZmls
ZS5saXN0LmFtCkBAIC01Nzc2LDYgKzU3NzYsOCBAQCBlbmRpZiAgIyBFTkQgVVNFX1RFWFRVUkVf
TUFQUEVSX0NBSVJPCiAKIGlmIFVTRV9URVhUVVJFX01BUFBFUl9HTAogd2ViY29yZV9zb3VyY2Vz
ICs9IFwKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYWlyby9HTENvbnRleHQu
aCBcCisJU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ2x4L0dMQ29udGV4dEdMWC5j
cHAgXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9UZXh0dXJlTWFw
cGVyR0wuY3BwIFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvVGV4
dHVyZU1hcHBlckdMLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3RleG1h
cC9HcmFwaGljc0xheWVyVGV4dHVyZU1hcHBlci5jcHAgXApAQCAtNTc5NCw4ICs1Nzk2LDcgQEAg
d2ViY29yZV9zb3VyY2VzICs9IFwKIAlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy90
ZXhtYXAvVGV4dHVyZU1hcHBlckxheWVyLmggXAogCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL3RleG1hcC9UZXh0dXJlTWFwcGVyUGxhdGZvcm1MYXllci5oCiB3ZWJjb3JlZ3RrX3Nv
dXJjZXMgKz0gXAotCVNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9XaW5kb3dH
TENvbnRleHRHTFguY3BwIFwKLQlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
V2luZG93R0xDb250ZXh0LmgKKwlTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsv
R0xDb250ZXh0R3RrLmNwcAogZW5kaWYgICMgRU5EIFVTRV9URVhUVVJFX01BUFBFUl9HTAogZW5k
aWYgICMgVVNFX0FDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Fpcm8vR0xDb250ZXh0LmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMGEzOWNl
YzU4OTc2YjM4NzUwMDlhY2NiNGZlYTBhMWIwMDU1NzhiYgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhaXJvL0dMQ29udGV4dC5oCkBAIC0wLDAg
KzEsODQgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgSWdhbGlhIFMuTC4KKyAqCisgKiAg
VGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFu
ZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJlZSBTb2Z0d2Fy
ZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9uIDIgb2YgdGhlIExpY2Vuc2UsIG9yIChh
dCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24uCisgKgorICogIFRoaXMgbGlicmFyeSBp
cyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1
dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5
IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQ
T1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2VuZXJhbCBQdWJsaWMgTGljZW5zZSBmb3Ig
bW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9m
IHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisgKiAgTGljZW5zZSBhbG9uZyB3aXRoIHRo
aXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUgRnJlZQorICogIFNvZnR3YXJlIEZvdW5k
YXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwgRmlmdGggRmxvb3IsCisgKiAgQm9zdG9u
LCBNQSAwMjExMC0xMzAxIFVTQQorICovCisKKyNpZm5kZWYgR0xDb250ZXh0X2gKKyNkZWZpbmUg
R0xDb250ZXh0X2gKKworI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgiCisjaW5jbHVkZSAi
V2lkZ2V0LmgiCisjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CisjaW5jbHVkZSA8d3RmL1Bh
c3NPd25QdHIuaD4KKworI2lmIGRlZmluZWQoWFBfVU5JWCkKK3R5cGVkZWYgc3RydWN0IF9fR0xY
Y29udGV4dFJlYyogR0xYQ29udGV4dDsKK3R5cGVkZWYgc3RydWN0IF9YRGlzcGxheSBEaXNwbGF5
OwordHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVjICpHTFhDb250ZXh0OwordHlwZWRlZiB1
bnNpZ25lZCBsb25nIEdMWFBidWZmZXI7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcgR0xYUGl4bWFw
OwordHlwZWRlZiB1bnNpZ25lZCBjaGFyIEdMdWJ5dGU7Cit0eXBlZGVmIHVuc2lnbmVkIGxvbmcg
UGl4bWFwOwordHlwZWRlZiB1bnNpZ25lZCBsb25nIFhJRDsKK3R5cGVkZWYgdm9pZCogQ29udGV4
dEtleVR5cGU7CisjZW5kaWYKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBHTENvbnRl
eHQgeworICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKEdMQ29udGV4dCk7CitwdWJsaWM6CisgICAg
c3RhdGljIEdMQ29udGV4dCogY3JlYXRlU2hhcmluZ0NvbnRleHQoR0xDb250ZXh0KiBzaGFyZUNv
bnRleHQpOworICAgIHN0YXRpYyBHTENvbnRleHQqIGdldENvbnRleHRGb3JXaWRnZXQoUGxhdGZv
cm1XaWRnZXQpOworICAgIHN0YXRpYyBHTENvbnRleHQqIGdldEN1cnJlbnQoKTsKKyAgICBzdGF0
aWMgdm9pZCByZW1vdmVBY3RpdmVDb250ZXh0KEdMQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lk
IHJlbW92ZUFjdGl2ZUNvbnRleHRGb3JXaWRnZXQoUGxhdGZvcm1XaWRnZXQpOworCisgICAgdmly
dHVhbCB+R0xDb250ZXh0KCk7CisgICAgYm9vbCBtYWtlQ29udGV4dEN1cnJlbnQoKTsKKyAgICB2
b2lkIHN3YXBCdWZmZXJzKCk7CisgICAgYm9vbCBjYW5SZW5kZXJUb0RlZmF1bHRGcmFtZWJ1ZmZl
cigpOworCisjaWYgRU5BQkxFKFdFQkdMKQorICAgIFBsYXRmb3JtR3JhcGhpY3NDb250ZXh0M0Qg
cGxhdGZvcm1Db250ZXh0KCk7CisjZW5kaWYKKworcHJpdmF0ZToKKyAgICBzdGF0aWMgdm9pZCBh
ZGRBY3RpdmVDb250ZXh0KEdMQ29udGV4dCopOworICAgIHN0YXRpYyB2b2lkIGNsZWFudXBBY3Rp
dmVDb250ZXh0c0F0RXhpdCgpOworCisjaWYgZGVmaW5lZChYUF9VTklYKQorICAgIEdMQ29udGV4
dChHTFhDb250ZXh0KTsKKyAgICBHTENvbnRleHQoR0xYQ29udGV4dCwgUGl4bWFwLCBHTFhQaXht
YXApOworICAgIHN0YXRpYyBHTENvbnRleHQqIGNyZWF0ZUNvbnRleHQoWElELCBHTFhDb250ZXh0
IHNoYXJpbmdDb250ZXh0ID0gMCk7CisgICAgc3RhdGljIEdMQ29udGV4dCogY3JlYXRlV2luZG93
Q29udGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KTsKKyAgICBzdGF0
aWMgR0xDb250ZXh0KiBjcmVhdGVQYnVmZmVyQ29udGV4dChHTFhDb250ZXh0IHNoYXJpbmdDb250
ZXh0KTsKKyAgICBzdGF0aWMgR0xDb250ZXh0KiBjcmVhdGVQaXhtYXBDb250ZXh0KEdMWENvbnRl
eHQgc2hhcmluZ0NvbnRleHQpOworCisgICAgR0xYQ29udGV4dCBtX2NvbnRleHQ7CisgICAgRGlz
cGxheSogbV9kaXNwbGF5OworCisgICAgWElEIG1fd2luZG93OworICAgIEdMWFBidWZmZXIgbV9w
YnVmZmVyOworICAgIFBpeG1hcCBtX3BpeG1hcDsKKyAgICBHTFhQaXhtYXAgbV9nbHhQaXhtYXA7
CisjZW5kaWYKK307CisKK30KKworI2VuZGlmIC8vIEdMQ29udGV4dF9oCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0R0xYLmNwcCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2dseC9HTENvbnRleHRHTFguY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmNkY2VkNjgzMjkwMzI2MGIyNTQ5NjU3Mjg5MDY4ZTBmZTQ4ZTcxNzgKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9nbHgvR0xDb250ZXh0
R0xYLmNwcApAQCAtMCwwICsxLDMwOCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMSwgMjAx
MiBJZ2FsaWEsIFMuTC4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlv
dSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgorICogIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVy
bXMgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJsaWMKKyAqICBMaWNlbnNlIGFzIHB1Ymxp
c2hlZCBieSB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqICB2ZXJzaW9u
IDIgb2YgdGhlIExpY2Vuc2UsIG9yIChhdCB5b3VyIG9wdGlvbikgYW55IGxhdGVyIHZlcnNpb24u
CisgKgorICogIFRoaXMgbGlicmFyeSBpcyBkaXN0cmlidXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0
IHdpbGwgYmUgdXNlZnVsLAorICogIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBl
dmVuIHRoZSBpbXBsaWVkIHdhcnJhbnR5IG9mCisgKiAgTUVSQ0hBTlRBQklMSVRZIG9yIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFLiAgU2VlIHRoZSBHTlUKKyAqICBMZXNzZXIgR2Vu
ZXJhbCBQdWJsaWMgTGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgorICoKKyAqICBZb3Ugc2hvdWxk
IGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCisg
KiAgTGljZW5zZSBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsgaWYgbm90LCB3cml0ZSB0byB0aGUg
RnJlZSBTb2Z0d2FyZQorICogIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0cmVldCwg
RmlmdGggRmxvb3IsIEJvc3RvbiwgTUEgIDAyMTEwLTEzMDEgIFVTQQorICovCisKKyNpbmNsdWRl
ICJjb25maWcuaCIKKyNpbmNsdWRlICJHTENvbnRleHQuaCIKKworI2lmIEVOQUJMRShXRUJHTCkg
fHwgVVNFKFRFWFRVUkVfTUFQUEVSX0dMKQorI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dDNELmgi
CisjaW5jbHVkZSAiT3BlbkdMU2hpbXMuaCIKKyNpbmNsdWRlIDxHTC9nbHguaD4KKyNpbmNsdWRl
IDx3dGYvT3duUHRyLmg+CisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworLy8gV2UgZG8gbm90IHdh
bnQgdG8gY2FsbCBnbFhNYWtlQ29udGV4dEN1cnJlbnQgdXNpbmcgZGlmZmVyZW50IERpc3BsYXkg
cG9pbnRlcnMsCisvLyBiZWNhdXNlIGl0IG1pZ2h0IGxlYWQgdG8gY3Jhc2hlcyBpbiBzb21lIGRy
aXZlcnMgKGZnbHJ4KS4gV2UgdXNlIGEgc2hhcmVkIGRpc3BsYXkKKy8vIHBvaW50ZXIgaGVyZS4K
K3N0YXRpYyBEaXNwbGF5KiBnU2hhcmVkRGlzcGxheSA9IDA7CitzdGF0aWMgRGlzcGxheSogc2hh
cmVkRGlzcGxheSgpCit7CisgICAgaWYgKCFnU2hhcmVkRGlzcGxheSkKKyAgICAgICAgZ1NoYXJl
ZERpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7CisgICAgcmV0dXJuIGdTaGFyZWREaXNwbGF5Owor
fQorCisvLyBCZWNhdXNlIG9mIGRyaXZlciBidWdzLCBleGl0aW5nIHRoZSBwcm9ncmFtIHdoZW4g
dGhlcmUgYXJlIGFjdGl2ZSBwYnVmZmVycworLy8gY2FuIGNyYXNoIHRoZSBYIHNlcnZlciAodGhp
cyBoYXMgYmVlbiBvYnNlcnZlZCB3aXRoIHRoZSBvZmZpY2lhbCBOdmlkaWEgZHJpdmVycykuCisv
LyBXZSBuZWVkIHRvIGVuc3VyZSB0aGF0IHdlIGNsZWFuIGV2ZXJ5dGhpbmcgdXAgb24gZXhpdC4g
VGhlcmUgYXJlIHNldmVyYWwgcmVhc29ucworLy8gdGhhdCBHcmFwaGljc0NvbnRleHQzRHMgd2ls
bCBzdGlsbCBiZSBhbGl2ZSBhdCBleGl0LCBpbmNsdWRpbmcgdXNlciBlcnJvciAobWVtb3J5Cisv
LyBsZWFrcykgYW5kIHRoZSBwYWdlIGNhY2hlLiBJbiBhbnkgY2FzZSwgd2UgZG9uJ3Qgd2FudCB0
aGUgWCBzZXJ2ZXIgdG8gY3Jhc2guCit0eXBlZGVmIFZlY3RvcjxHTENvbnRleHQqPiBBY3RpdmVD
b250ZXh0TGlzdDsKK3N0YXRpYyBBY3RpdmVDb250ZXh0TGlzdCYgYWN0aXZlQ29udGV4dExpc3Qo
KQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoQWN0aXZlQ29udGV4dExpc3QsIGFjdGl2ZUNv
bnRleHRzLCAoKSk7CisgICAgcmV0dXJuIGFjdGl2ZUNvbnRleHRzOworfQorCit2b2lkIEdMQ29u
dGV4dDo6YWRkQWN0aXZlQ29udGV4dChHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgc3RhdGlj
IGJvb2wgYWRkZWRBdEV4aXRIYW5kbGVyID0gZmFsc2U7CisgICAgaWYgKCFhZGRlZEF0RXhpdEhh
bmRsZXIpIHsKKyAgICAgICAgYXRleGl0KCZHTENvbnRleHQ6OmNsZWFudXBBY3RpdmVDb250ZXh0
c0F0RXhpdCk7CisgICAgICAgIGFkZGVkQXRFeGl0SGFuZGxlciA9IHRydWU7CisgICAgfQorICAg
IGFjdGl2ZUNvbnRleHRMaXN0KCkuYXBwZW5kKGNvbnRleHQpOworfQorCit2b2lkIEdMQ29udGV4
dDo6cmVtb3ZlQWN0aXZlQ29udGV4dChHTENvbnRleHQqIGNvbnRleHQpCit7CisgICAgQWN0aXZl
Q29udGV4dExpc3QmIGNvbnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBzaXpl
X3QgaSA9IGNvbnRleHRMaXN0LmZpbmQoY29udGV4dCk7CisgICAgaWYgKGkgIT0gbm90Rm91bmQp
CisgICAgICAgIGNvbnRleHRMaXN0LnJlbW92ZShpKTsKK30KKwordm9pZCBHTENvbnRleHQ6OmNs
ZWFudXBBY3RpdmVDb250ZXh0c0F0RXhpdCgpCit7CisgICAgQWN0aXZlQ29udGV4dExpc3QmIGNv
bnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsg
aSA8IGNvbnRleHRMaXN0LnNpemUoKTsgKytpKQorICAgICAgICBkZWxldGUgY29udGV4dExpc3Rb
aV07CisKKyAgICBpZiAoIWdTaGFyZWREaXNwbGF5KQorICAgICAgICByZXR1cm47CisgICAgWENs
b3NlRGlzcGxheShnU2hhcmVkRGlzcGxheSk7CisgICAgZ1NoYXJlZERpc3BsYXkgPSAwOworfQor
CitHTENvbnRleHQqIEdMQ29udGV4dDo6Z2V0Q3VycmVudCgpCit7CisgICAgQWN0aXZlQ29udGV4
dExpc3QmIGNvbnRleHRMaXN0ID0gYWN0aXZlQ29udGV4dExpc3QoKTsKKyAgICBHTFhDb250ZXh0
IGN1cnJlbnQgPSBnbFhHZXRDdXJyZW50Q29udGV4dCgpOworICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgY29udGV4dExpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgaWYgKGN1cnJlbnQgPT0g
Y29udGV4dExpc3RbaV0tPm1fY29udGV4dCkKKyAgICAgICAgICAgIHJldHVybiBjb250ZXh0TGlz
dFtpXTsKKyAgICB9CisgICAgcmV0dXJuIDA7Cit9CisKK0dMQ29udGV4dCogR0xDb250ZXh0Ojpj
cmVhdGVTaGFyaW5nQ29udGV4dChHTENvbnRleHQqIHNoYXJpbmdDb250ZXh0KQoreworICAgIHJl
dHVybiBjcmVhdGVDb250ZXh0KDAsIHNoYXJpbmdDb250ZXh0ID8gc2hhcmluZ0NvbnRleHQtPm1f
Y29udGV4dCA6IDApOworfQorCitHTENvbnRleHQqIEdMQ29udGV4dDo6Y3JlYXRlV2luZG93Q29u
dGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KQoreworICAgIERpc3Bs
YXkqIGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgWFdpbmRvd0F0dHJpYnV0ZXMgYXR0
cmlidXRlczsKKyAgICBpZiAoIVhHZXRXaW5kb3dBdHRyaWJ1dGVzKGRpc3BsYXksIHdpbmRvdywg
JmF0dHJpYnV0ZXMpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIFhWaXN1YWxJbmZvIHZpc3Vh
bEluZm87CisgICAgdmlzdWFsSW5mby52aXN1YWxpZCA9IFhWaXN1YWxJREZyb21WaXN1YWwoYXR0
cmlidXRlcy52aXN1YWwpOworCisgICAgaW50IG51bVJldHVybmVkID0gMDsKKyAgICBYVmlzdWFs
SW5mbyogdmlzdWFsSW5mb0xpc3QgPSBYR2V0VmlzdWFsSW5mbyhkaXNwbGF5LCBWaXN1YWxJRE1h
c2ssICZ2aXN1YWxJbmZvLCAmbnVtUmV0dXJuZWQpOworICAgIEdMWENvbnRleHQgY29udGV4dCA9
IGdsWENyZWF0ZUNvbnRleHQoZGlzcGxheSwgdmlzdWFsSW5mb0xpc3QsIHNoYXJpbmdDb250ZXh0
LCBUcnVlKTsKKyAgICBYRnJlZSh2aXN1YWxJbmZvTGlzdCk7CisKKyAgICBpZiAoIWNvbnRleHQp
CisgICAgICAgIHJldHVybiAwOworCisgICAgLy8gR0xYUGJ1ZmZlciBhbmQgWElEIGFyZSBib3Ro
IHRoZSBzYW1lIHR5cGVzIHVuZGVybmVhdGgsIHNvIHdlIGhhdmUgdG8gc2hhcmUKKyAgICAvLyBh
IGNvbnN0cnVjdG9yIGhlcmUgd2l0aCB0aGUgd2luZG93IHBhdGguCisgICAgR0xDb250ZXh0KiBj
b250ZXh0V3JhcHBlciA9IG5ldyBHTENvbnRleHQoY29udGV4dCk7CisgICAgY29udGV4dFdyYXBw
ZXItPm1fd2luZG93ID0gd2luZG93OworICAgIHJldHVybiBjb250ZXh0V3JhcHBlcjsKK30KKwor
R0xDb250ZXh0KiBHTENvbnRleHQ6OmNyZWF0ZVBidWZmZXJDb250ZXh0KEdMWENvbnRleHQgc2hh
cmluZ0NvbnRleHQpCit7CisgICAgaW50IGZiQ29uZmlnQXR0cmlidXRlc1tdID0geworICAgICAg
ICBHTFhfRFJBV0FCTEVfVFlQRSwgR0xYX1BCVUZGRVJfQklULAorICAgICAgICBHTFhfUkVOREVS
X1RZUEUsIEdMWF9SR0JBX0JJVCwKKyAgICAgICAgR0xYX1JFRF9TSVpFLCAxLAorICAgICAgICBH
TFhfR1JFRU5fU0laRSwgMSwKKyAgICAgICAgR0xYX0JMVUVfU0laRSwgMSwKKyAgICAgICAgR0xY
X0FMUEhBX1NJWkUsIDEsCisgICAgICAgIEdMWF9ET1VCTEVCVUZGRVIsIEdMX0ZBTFNFLAorICAg
ICAgICAwCisgICAgfTsKKworICAgIGludCByZXR1cm5lZEVsZW1lbnRzOworICAgIERpc3BsYXkq
IGRpc3BsYXkgPSBzaGFyZWREaXNwbGF5KCk7CisgICAgR0xYRkJDb25maWcqIGNvbmZpZ3MgPSBn
bFhDaG9vc2VGQkNvbmZpZyhkaXNwbGF5LCAwLCBmYkNvbmZpZ0F0dHJpYnV0ZXMsICZyZXR1cm5l
ZEVsZW1lbnRzKTsKKyAgICBpZiAoIXJldHVybmVkRWxlbWVudHMpIHsKKyAgICAgICAgWEZyZWUo
Y29uZmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8vIFdlIHdpbGwgYmUg
cmVuZGVyaW5nIHRvIGEgdGV4dHVyZSwgc28gb3VyIHBidWZmZXIgZG9lcyBub3QgbmVlZCB0byBi
ZSBsYXJnZS4KKyAgICBzdGF0aWMgY29uc3QgaW50IHBidWZmZXJBdHRyaWJ1dGVzW10gPSB7IEdM
WF9QQlVGRkVSX1dJRFRILCAxLCBHTFhfUEJVRkZFUl9IRUlHSFQsIDEsIDAgfTsKKyAgICBHTFhQ
YnVmZmVyIHBidWZmZXIgPSBnbFhDcmVhdGVQYnVmZmVyKGRpc3BsYXksIGNvbmZpZ3NbMF0sIHBi
dWZmZXJBdHRyaWJ1dGVzKTsKKyAgICBpZiAoIXBidWZmZXIpIHsKKyAgICAgICAgWEZyZWUoY29u
Zmlncyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIEdMWENvbnRleHQgY29udGV4
dCA9IGdsWENyZWF0ZU5ld0NvbnRleHQoZGlzcGxheSwgY29uZmlnc1swXSwgR0xYX1JHQkFfVFlQ
RSwgc2hhcmluZ0NvbnRleHQsIEdMX1RSVUUpOworICAgIFhGcmVlKGNvbmZpZ3MpOworICAgIGlm
ICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICAvLyBHTFhQYnVmZmVyIGFuZCBY
SUQgYXJlIGJvdGggdGhlIHNhbWUgdHlwZXMgdW5kZXJuZWF0aCwgc28gd2UgaGF2ZSB0byBzaGFy
ZQorICAgIC8vIGEgY29uc3RydWN0b3IgaGVyZSB3aXRoIHRoZSB3aW5kb3cgcGF0aC4KKyAgICBH
TENvbnRleHQqIGNvbnRleHRXcmFwcGVyID0gbmV3IEdMQ29udGV4dChjb250ZXh0KTsKKyAgICBj
b250ZXh0V3JhcHBlci0+bV9wYnVmZmVyID0gcGJ1ZmZlcjsKKyAgICByZXR1cm4gY29udGV4dFdy
YXBwZXI7Cit9CisKK0dMQ29udGV4dCogR0xDb250ZXh0OjpjcmVhdGVQaXhtYXBDb250ZXh0KEdM
WENvbnRleHQgc2hhcmluZ0NvbnRleHQpCit7CisgICAgc3RhdGljIGludCB2aXN1YWxBdHRyaWJ1
dGVzW10gPSB7CisgICAgICAgIEdMWF9SR0JBLAorICAgICAgICBHTFhfUkVEX1NJWkUsIDEsCisg
ICAgICAgIEdMWF9HUkVFTl9TSVpFLCAxLAorICAgICAgICBHTFhfQkxVRV9TSVpFLCAxLAorICAg
ICAgICBHTFhfQUxQSEFfU0laRSwgMSwKKyAgICAgICAgMAorICAgIH07CisKKyAgICBEaXNwbGF5
KiBkaXNwbGF5ID0gc2hhcmVkRGlzcGxheSgpOworICAgIFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZv
ID0gZ2xYQ2hvb3NlVmlzdWFsKGRpc3BsYXksIERlZmF1bHRTY3JlZW4oZGlzcGxheSksIHZpc3Vh
bEF0dHJpYnV0ZXMpOworICAgIGlmICghdmlzdWFsSW5mbykKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICBHTFhDb250ZXh0IGNvbnRleHQgPSBnbFhDcmVhdGVDb250ZXh0KGRpc3BsYXksIHZpc3Vh
bEluZm8sIHNoYXJpbmdDb250ZXh0LCBHTF9UUlVFKTsKKyAgICBpZiAoIWNvbnRleHQpIHsKKyAg
ICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAg
IFBpeG1hcCBwaXhtYXAgPSBYQ3JlYXRlUGl4bWFwKGRpc3BsYXksIERlZmF1bHRSb290V2luZG93
KGRpc3BsYXkpLCAxLCAxLCB2aXN1YWxJbmZvLT5kZXB0aCk7CisgICAgaWYgKCFwaXhtYXApIHsK
KyAgICAgICAgWEZyZWUodmlzdWFsSW5mbyk7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKwor
ICAgIEdMWFBpeG1hcCBnbHhQaXhtYXAgPSBnbFhDcmVhdGVHTFhQaXhtYXAoZGlzcGxheSwgdmlz
dWFsSW5mbywgcGl4bWFwKTsKKyAgICBpZiAoIWdseFBpeG1hcCkgeworICAgICAgICBYRnJlZVBp
eG1hcChkaXNwbGF5LCBwaXhtYXApOworICAgICAgICBYRnJlZSh2aXN1YWxJbmZvKTsKKyAgICAg
ICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIG5ldyBHTENvbnRleHQoY29udGV4dCwg
cGl4bWFwLCBnbHhQaXhtYXApOworfQorCitHTENvbnRleHQqIEdMQ29udGV4dDo6Y3JlYXRlQ29u
dGV4dChYSUQgd2luZG93LCBHTFhDb250ZXh0IHNoYXJpbmdDb250ZXh0KQoreworICAgIGlmICgh
c2hhcmVkRGlzcGxheSgpKQorICAgICAgICByZXR1cm4gMDsKKworICAgIHN0YXRpYyBib29sIGlu
aXRpYWxpemVkID0gZmFsc2U7CisgICAgc3RhdGljIGJvb2wgc3VjY2VzcyA9IHRydWU7CisgICAg
aWYgKCFpbml0aWFsaXplZCkgeworICAgICAgICBzdWNjZXNzID0gaW5pdGlhbGl6ZU9wZW5HTFNo
aW1zKCk7CisgICAgICAgIGluaXRpYWxpemVkID0gdHJ1ZTsKKyAgICB9CisgICAgaWYgKCFzdWNj
ZXNzKQorICAgICAgICByZXR1cm4gMDsKKworICAgIEdMQ29udGV4dCogY29udGV4dCA9IHdpbmRv
dyA/IGNyZWF0ZVdpbmRvd0NvbnRleHQod2luZG93LCBzaGFyaW5nQ29udGV4dCkgOiAwOworICAg
IGlmICghY29udGV4dCkKKyAgICAgICAgY29udGV4dCA9IGNyZWF0ZVBidWZmZXJDb250ZXh0KHNo
YXJpbmdDb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAgICAgIGNvbnRleHQgPSBjcmVh
dGVQaXhtYXBDb250ZXh0KHNoYXJpbmdDb250ZXh0KTsKKyAgICBpZiAoIWNvbnRleHQpCisgICAg
ICAgIHJldHVybiAwOworCisgICAgcmV0dXJuIGNvbnRleHQ7Cit9CisKK0dMQ29udGV4dDo6R0xD
b250ZXh0KEdMWENvbnRleHQgY29udGV4dCkKKyAgICA6IG1fY29udGV4dChjb250ZXh0KQorICAg
ICwgbV93aW5kb3coMCkKKyAgICAsIG1fcGJ1ZmZlcigwKQorICAgICwgbV9waXhtYXAoMCkKKyAg
ICAsIG1fZ2x4UGl4bWFwKDApCit7CisgICAgYWRkQWN0aXZlQ29udGV4dCh0aGlzKTsKK30KKwor
R0xDb250ZXh0OjpHTENvbnRleHQoR0xYQ29udGV4dCBjb250ZXh0LCBQaXhtYXAgcGl4bWFwLCBH
TFhQaXhtYXAgZ2x4UGl4bWFwKQorICAgIDogbV9jb250ZXh0KGNvbnRleHQpCisgICAgLCBtX3dp
bmRvdygwKQorICAgICwgbV9wYnVmZmVyKDApCisgICAgLCBtX3BpeG1hcChwaXhtYXApCisgICAg
LCBtX2dseFBpeG1hcChnbHhQaXhtYXApCit7CisgICAgYWRkQWN0aXZlQ29udGV4dCh0aGlzKTsK
K30KKworR0xDb250ZXh0Ojp+R0xDb250ZXh0KCkKK3sKKyAgICBpZiAobV9jb250ZXh0KSB7Cisg
ICAgICAgIC8vIFRoaXMgbWF5IGJlIG5lY2Vzc2FyeSB0byBwcmV2ZW50IGNyYXNoZXMgd2l0aCBO
VmlkaWEncyBjbG9zZWQgc291cmNlIGRyaXZlcnMuIE9yaWdpbmFsbHkKKyAgICAgICAgLy8gZnJv
bSBNb3ppbGxhJ3MgM0QgY2FudmFzIGltcGxlbWVudGF0aW9uIGF0OiBodHRwOi8vYml0YnVja2V0
Lm9yZy9pbG1hcmkvY2FudmFzM2QvCisgICAgICAgIGdsQmluZEZyYW1lYnVmZmVyRVhUKEdMX0ZS
QU1FQlVGRkVSX0VYVCwgMCk7CisgICAgICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgTm9u
ZSwgTm9uZSk7CisgICAgICAgIGdsWERlc3Ryb3lDb250ZXh0KG1fZGlzcGxheSwgbV9jb250ZXh0
KTsKKyAgICB9CisKKyAgICBpZiAobV9wYnVmZmVyKSB7CisgICAgICAgIGdsWERlc3Ryb3lQYnVm
ZmVyKHNoYXJlZERpc3BsYXkoKSwgbV9wYnVmZmVyKTsKKyAgICAgICAgbV9wYnVmZmVyID0gMDsK
KyAgICB9CisgICAgaWYgKG1fZ2x4UGl4bWFwKSB7CisgICAgICAgIGdsWERlc3Ryb3lHTFhQaXht
YXAoc2hhcmVkRGlzcGxheSgpLCBtX2dseFBpeG1hcCk7CisgICAgICAgIG1fZ2x4UGl4bWFwID0g
MDsKKyAgICB9CisgICAgaWYgKG1fcGl4bWFwKSB7CisgICAgICAgIFhGcmVlUGl4bWFwKHNoYXJl
ZERpc3BsYXkoKSwgbV9waXhtYXApOworICAgICAgICBtX3BpeG1hcCA9IDA7CisgICAgfQorICAg
IHJlbW92ZUFjdGl2ZUNvbnRleHQodGhpcyk7Cit9CisKK2Jvb2wgR0xDb250ZXh0OjpjYW5SZW5k
ZXJUb0RlZmF1bHRGcmFtZWJ1ZmZlcigpCit7CisgICAgcmV0dXJuIG1fd2luZG93OworfQorCiti
b29sIEdMQ29udGV4dDo6bWFrZUNvbnRleHRDdXJyZW50KCkKK3sKKyAgICBBU1NFUlQobV9jb250
ZXh0ICYmIChtX3dpbmRvdyB8fCBtX3BidWZmZXIgfHwgbV9nbHhQaXhtYXApKTsKKyAgICBpZiAo
Z2xYR2V0Q3VycmVudENvbnRleHQoKSA9PSBtX2NvbnRleHQpCisgICAgICAgIHJldHVybiB0cnVl
OworCisgICAgaWYgKG1fd2luZG93KQorICAgICAgICByZXR1cm4gZ2xYTWFrZUN1cnJlbnQoc2hh
cmVkRGlzcGxheSgpLCBtX3dpbmRvdywgbV9jb250ZXh0KTsKKworICAgIGlmIChtX3BidWZmZXIp
CisgICAgICAgIHJldHVybiBnbFhNYWtlQ3VycmVudChzaGFyZWREaXNwbGF5KCksIG1fcGJ1ZmZl
ciwgbV9jb250ZXh0KTsKKworICAgIHJldHVybiA6OmdsWE1ha2VDdXJyZW50KHNoYXJlZERpc3Bs
YXkoKSwgbV9nbHhQaXhtYXAsIG1fY29udGV4dCk7Cit9CisKK3ZvaWQgR0xDb250ZXh0Ojpzd2Fw
QnVmZmVycygpCit7CisgICAgaWYgKG1fd2luZG93KQorICAgICAgICBnbFhTd2FwQnVmZmVycyhz
aGFyZWREaXNwbGF5KCksIG1fd2luZG93KTsKK30KKworI2lmIEVOQUJMRShXRUJHTCkKK1BsYXRm
b3JtR3JhcGhpY3NDb250ZXh0M0QgR0xDb250ZXh0OjpwbGF0Zm9ybUNvbnRleHQoKQoreworICAg
IHJldHVybiBtX2NvbnRleHQ7Cit9CisjZW5kaWYKKworfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQor
CisjZW5kaWYgLy8gRU5BQkxFKFdFQkdMKSB8fCAmJiBVU0UoVEVYVFVSRV9NQVBQRVJfR0wpCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvR0xDb250ZXh0
R3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9HTENvbnRleHRH
dGsuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjZiMjQ2MWEwMzIxZWY2MGUyNjVkZjYxZDIyMzRjZTc1NzY5NTk1
NTEKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9n
dGsvR0xDb250ZXh0R3RrLmNwcApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0IChD
KSAyMDEyIElnYWxpYSwgUy5MLgorICoKKyAqICBUaGlzIGxpYnJhcnkgaXMgZnJlZSBzb2Z0d2Fy
ZTsgeW91IGNhbiByZWRpc3RyaWJ1dGUgaXQgYW5kL29yCisgKiAgbW9kaWZ5IGl0IHVuZGVyIHRo
ZSB0ZXJtcyBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYworICogIExpY2Vuc2UgYXMg
cHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgorICogIHZl
cnNpb24gMiBvZiB0aGUgTGljZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVy
c2lvbi4KKyAqCisgKiAgVGhpcyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRo
YXQgaXQgd2lsbCBiZSB1c2VmdWwsCisgKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRo
b3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqICBNRVJDSEFOVEFCSUxJVFkgb3Ig
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogIExlc3Nl
ciBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlIGZvciBtb3JlIGRldGFpbHMuCisgKgorICogIFlvdSBz
aG91bGQgaGF2ZSByZWNlaXZlZCBhIGNvcHkgb2YgdGhlIEdOVSBMZXNzZXIgR2VuZXJhbCBQdWJs
aWMKKyAqICBMaWNlbnNlIGFsb25nIHdpdGggdGhpcyBsaWJyYXJ5OyBpZiBub3QsIHdyaXRlIHRv
IHRoZSBGcmVlIFNvZnR3YXJlCisgKiAgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3Ry
ZWV0LCBGaWZ0aCBGbG9vciwgQm9zdG9uLCBNQSAgMDIxMTAtMTMwMSAgVVNBCisgKi8KKworI2lu
Y2x1ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgorCisjaW5jbHVkZSA8Z2Rr
L2dkay5oPgorI2luY2x1ZGUgPGdkay9nZGt4Lmg+CisjaW5jbHVkZSA8Z3RrL2d0ay5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK3R5cGVkZWYgSGFzaE1hcDxHdGtXaWRnZXQqLCBPd25QdHI8
R0xDb250ZXh0PiA+IFdpbmRvd0NvbnRleHRNYXA7CitzdGF0aWMgV2luZG93Q29udGV4dE1hcCYg
d2luZG93Q29udGV4dHNNYXAoKQoreworICAgIERFRklORV9TVEFUSUNfTE9DQUwoV2luZG93Q29u
dGV4dE1hcCwgd2luZG93Q29udGV4dHMsICgpKTsKKyAgICByZXR1cm4gd2luZG93Q29udGV4dHM7
Cit9CisKK3N0YXRpYyB2b2lkIHNodXRkb3duR0xDb250ZXh0KEd0a1dpZGdldCogd2lkZ2V0LCB2
b2lkKikKK3sKKyAgICBXaW5kb3dDb250ZXh0TWFwJiB3aW5kb3dDb250ZXh0cyA9IHdpbmRvd0Nv
bnRleHRzTWFwKCk7CisgICAgV2luZG93Q29udGV4dE1hcDo6aXRlcmF0b3IgaSA9IHdpbmRvd0Nv
bnRleHRzLmZpbmQod2lkZ2V0KTsKKyAgICBpZiAoaSAhPSB3aW5kb3dDb250ZXh0cy5lbmQoKSkK
KyAgICAgICAgd2luZG93Q29udGV4dHMucmVtb3ZlKGkpOworfQorCitHTENvbnRleHQqIEdMQ29u
dGV4dDo6Z2V0Q29udGV4dEZvcldpZGdldChHdGtXaWRnZXQqIHdpZGdldCkKK3sKKyAgICBBU1NF
UlQod2lkZ2V0KTsKKworICAgIFdpbmRvd0NvbnRleHRNYXAmIHdpbmRvd0NvbnRleHRzID0gd2lu
ZG93Q29udGV4dHNNYXAoKTsKKyAgICBXaW5kb3dDb250ZXh0TWFwOjppdGVyYXRvciBpID0gd2lu
ZG93Q29udGV4dHNNYXAoKS5maW5kKHdpZGdldCk7CisgICAgaWYgKGkgIT0gd2luZG93Q29udGV4
dHMuZW5kKCkpCisgICAgICAgIHJldHVybiBpLT5zZWNvbmQuZ2V0KCk7CisKKyAgICAvLyBJdCdz
IGltcG9ydGFudCB0aGF0IHRoaXMgY29udGV4dCBkb2Vzbid0IGhhbmcgYXJvdW5kIGFmdGVyIHRo
ZSB3aW5kb3cKKyAgICAvLyBpcyB1bm1hcHBlZCwgc28gd2UgbWFrZSBzdXJlIHRvIGNsZWFuIGl0
IHVwIG9uY2UgdGhhdCBoYXBwZW5zLgorICAgIGlmICghZ19zaWduYWxfaGFuZGxlcl9maW5kKHdp
ZGdldCwgR19TSUdOQUxfTUFUQ0hfRlVOQywgMCwgMCwgMCwgcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4oc2h1dGRvd25HTENvbnRleHQpLCAwKSkKKyAgICAgICAgZ19zaWduYWxfY29ubmVjdCh3aWRn
ZXQsICJ1bm1hcCIsIEdfQ0FMTEJBQ0soc2h1dGRvd25HTENvbnRleHQpLCAwKTsKKworICAgIC8v
IElmIHRoaXMgR0RLIHdpbmRvdyBkb2Vzbid0IGhhdmUgaXRzIG93biBuYXRpdmUgd2luZG93IHRo
ZW4sIHdlIGRvbid0IHdhbnQKKyAgICAvLyB0byB1c2UgaXQgZm9yIHJlbmRlcmluZywgc2luY2Ug
d2UnbGwgYmUgZHJhd2luZyBvdmVyIHNvbWUgb3RoZXIgd2lkZ2V0J3MgYXJlYS4KKyAgICBHZGtX
aW5kb3cqIGdka1dpbmRvdyA9IGd0a193aWRnZXRfZ2V0X3dpbmRvdyh3aWRnZXQpOworICAgIEdM
Q29udGV4dCogY29udGV4dCA9IGdka1dpbmRvdyAmJiBnZGtfd2luZG93X2hhc19uYXRpdmUoZ2Rr
V2luZG93KSA/ICBjcmVhdGVDb250ZXh0KEdES19XSU5ET1dfWElEKGdka1dpbmRvdykpIDogY3Jl
YXRlQ29udGV4dCgwKTsKKworICAgIGlmICghY29udGV4dCkKKyAgICAgICAgcmV0dXJuIDA7CisK
KyAgICB3aW5kb3dDb250ZXh0cy5zZXQod2lkZ2V0LCBhZG9wdFB0cihjb250ZXh0KSk7CisgICAg
cmV0dXJuIGNvbnRleHQ7Cit9CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9XaW5kb3dHTENvbnRleHQuaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2d0ay9XaW5kb3dHTENvbnRleHQuaApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggOTYyMzU2ODM1NjQ3Nzk0NjRhY2NkODQ3YmRl
NWIxMDlkNjFlMDI0Ny4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvV2luZG93R0xDb250ZXh0
LmgKKysrIC9kZXYvbnVsbApAQCAtMSw1NCArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAy
MDEyIElnYWxpYSBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5
b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRl
cm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBhcyBwdWJs
aXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAgdmVyc2lv
biAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2ZXJzaW9u
LgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBp
dCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdpdGhvdXQg
ZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBvciBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVzc2VyIEdl
bmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91IHNob3Vs
ZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1YmxpYwot
ICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUgdG8gdGhl
IEZyZWUKLSAqICBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBTdHJlZXQs
IEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSBVU0EKLSAqLwotCi0jaWZu
ZGVmIFdpbmRvd0dMQ29udGV4dF9oCi0jZGVmaW5lIFdpbmRvd0dMQ29udGV4dF9oCi0KLSNpbmNs
dWRlIDx3dGYvTm9uY29weWFibGUuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgotCi0j
aWYgZGVmaW5lZChYUF9VTklYKQotdHlwZWRlZiBzdHJ1Y3QgX19HTFhjb250ZXh0UmVjKiBHTFhD
b250ZXh0OwotdHlwZWRlZiBzdHJ1Y3QgX1hEaXNwbGF5IERpc3BsYXk7Ci0jZW5kaWYKLQotbmFt
ZXNwYWNlIFdlYkNvcmUgewotCi1jbGFzcyBXaW5kb3dHTENvbnRleHQgewotICAgIFdURl9NQUtF
X05PTkNPUFlBQkxFKFdpbmRvd0dMQ29udGV4dCk7Ci1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NP
d25QdHI8V2luZG93R0xDb250ZXh0PiBjcmVhdGVDb250ZXh0V2l0aEdka1dpbmRvdyhHZGtXaW5k
b3cqKTsKLSAgICB2aXJ0dWFsIH5XaW5kb3dHTENvbnRleHQoKTsKLSAgICB2b2lkIHN0YXJ0RHJh
d2luZygpOwotICAgIHZvaWQgZmluaXNoRHJhd2luZygpOwotCi1wcml2YXRlOgotICAgIFdpbmRv
d0dMQ29udGV4dChHZGtXaW5kb3cqKTsKLSAgICBHZGtXaW5kb3cqIG1fd2luZG93OwotCi0jaWYg
ZGVmaW5lZChYUF9VTklYKQotICAgIEdMWENvbnRleHQgbV9jb250ZXh0OwotICAgIERpc3BsYXkq
IG1fZGlzcGxheTsKLSAgICBib29sIG1fbmVlZFRvQ2xvc2VEaXNwbGF5OwotI2VuZGlmCi19Owot
Ci19Ci0KLSNlbmRpZiAvLyBXaW5kb3dHTENvbnRleHRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvZ3RrL1dpbmRvd0dMQ29udGV4dEdMWC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvV2luZG93R0xDb250ZXh0R0xYLmNwcApk
ZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggYzE2YTRmNDFiNGUyMzY5ZmI4NmU2Mzg1OWZm
OTFlMzljMDFlOGYwNy4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9ndGsvV2luZG93R0xDb250ZXh0
R0xYLmNwcAorKysgL2Rldi9udWxsCkBAIC0xLDg1ICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQg
KEMpIDIwMTIgSWdhbGlhLCBTLkwuCi0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3
YXJlOyB5b3UgY2FuIHJlZGlzdHJpYnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIg
dGhlIHRlcm1zIG9mIHRoZSBHTlUgTGVzc2VyIEdlbmVyYWwgUHVibGljCi0gKiAgTGljZW5zZSBh
cyBwdWJsaXNoZWQgYnkgdGhlIEZyZWUgU29mdHdhcmUgRm91bmRhdGlvbjsgZWl0aGVyCi0gKiAg
dmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBvcHRpb24pIGFueSBsYXRlciB2
ZXJzaW9uLgotICoKLSAqICBUaGlzIGxpYnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUg
dGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwKLSAqICBidXQgV0lUSE9VVCBBTlkgV0FSUkFOVFk7IHdp
dGhvdXQgZXZlbiB0aGUgaW1wbGllZCB3YXJyYW50eSBvZgotICogIE1FUkNIQU5UQUJJTElUWSBv
ciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0aGUgR05VCi0gKiAgTGVz
c2VyIEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWlscy4KLSAqCi0gKiAgWW91
IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29weSBvZiB0aGUgR05VIExlc3NlciBHZW5lcmFsIFB1
YmxpYwotICogIExpY2Vuc2UgYWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IGlmIG5vdCwgd3JpdGUg
dG8gdGhlIEZyZWUgU29mdHdhcmUKLSAqICBGb3VuZGF0aW9uLCBJbmMuLCA1MSBGcmFua2xpbiBT
dHJlZXQsIEZpZnRoIEZsb29yLCBCb3N0b24sIE1BICAwMjExMC0xMzAxICBVU0EKLSAqLwotCi0j
aW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiV2luZG93R0xDb250ZXh0LmgiCi0KLSNpbmNs
dWRlIDxHTC9nbHguaD4KLSNpbmNsdWRlIDxnZGsvZ2RrLmg+Ci0jaW5jbHVkZSA8Z2RrL2dka3gu
aD4KLSNpbmNsdWRlIDx3dGYvT3duUHRyLmg+Ci0KLW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotUGFz
c093blB0cjxXaW5kb3dHTENvbnRleHQ+IFdpbmRvd0dMQ29udGV4dDo6Y3JlYXRlQ29udGV4dFdp
dGhHZGtXaW5kb3coR2RrV2luZG93KiB3aW5kb3cpCi17Ci0gICAgT3duUHRyPFdpbmRvd0dMQ29u
dGV4dD4gY29udGV4dCA9IGFkb3B0UHRyKG5ldyBXaW5kb3dHTENvbnRleHQod2luZG93KSk7Ci0g
ICAgaWYgKCFjb250ZXh0LT5tX2NvbnRleHQpCi0gICAgICAgIHJldHVybiBudWxscHRyOwotICAg
IHJldHVybiBjb250ZXh0LnJlbGVhc2UoKTsKLX0KLQotV2luZG93R0xDb250ZXh0OjpXaW5kb3dH
TENvbnRleHQoR2RrV2luZG93KiB3aW5kb3cpCi0gICAgOiBtX3dpbmRvdyh3aW5kb3cpCi0gICAg
LCBtX2NvbnRleHQoMCkKLSAgICAsIG1fZGlzcGxheSgwKQotICAgICwgbV9uZWVkVG9DbG9zZURp
c3BsYXkoMCkKLXsKLSAgICBHZGtEaXNwbGF5KiBnZGtEaXNwbGF5ID0gZ2RrX3dpbmRvd19nZXRf
ZGlzcGxheShtX3dpbmRvdyk7Ci0gICAgaWYgKGdka0Rpc3BsYXkpCi0gICAgICAgIG1fZGlzcGxh
eSA9IEdES19ESVNQTEFZX1hESVNQTEFZKGdka0Rpc3BsYXkpOwotICAgIGVsc2UgewotICAgICAg
ICBtX2Rpc3BsYXkgPSBYT3BlbkRpc3BsYXkoMCk7Ci0gICAgICAgIG1fbmVlZFRvQ2xvc2VEaXNw
bGF5ID0gdHJ1ZTsKLSAgICB9Ci0KLSAgICBYV2luZG93QXR0cmlidXRlcyBhdHRyaWJ1dGVzOwot
ICAgIGlmICghWEdldFdpbmRvd0F0dHJpYnV0ZXMobV9kaXNwbGF5LCBHREtfV0lORE9XX1hJRCht
X3dpbmRvdyksICZhdHRyaWJ1dGVzKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgWFZpc3VhbElu
Zm8gdmlzdWFsSW5mbzsKLSAgICB2aXN1YWxJbmZvLnZpc3VhbGlkID0gWFZpc3VhbElERnJvbVZp
c3VhbChhdHRyaWJ1dGVzLnZpc3VhbCk7Ci0KLSAgICBpbnQgbnVtUmV0dXJuZWQgPSAwOwotICAg
IFhWaXN1YWxJbmZvKiB2aXN1YWxJbmZvTGlzdCA9IFhHZXRWaXN1YWxJbmZvKG1fZGlzcGxheSwg
VmlzdWFsSURNYXNrLCAmdmlzdWFsSW5mbywgJm51bVJldHVybmVkKTsKLSAgICBtX2NvbnRleHQg
PSBnbFhDcmVhdGVDb250ZXh0KG1fZGlzcGxheSwgdmlzdWFsSW5mb0xpc3QsIDAsIFRydWUpOwot
ICAgIFhGcmVlKHZpc3VhbEluZm9MaXN0KTsKLX0KLQotV2luZG93R0xDb250ZXh0Ojp+V2luZG93
R0xDb250ZXh0KCkKLXsKLSAgICBpZiAoIW1fY29udGV4dCkKLSAgICAgICAgcmV0dXJuOwotICAg
IGdsWE1ha2VDdXJyZW50KG1fZGlzcGxheSwgTm9uZSwgTm9uZSk7Ci0gICAgZ2xYRGVzdHJveUNv
bnRleHQobV9kaXNwbGF5LCBtX2NvbnRleHQpOwotCi0gICAgaWYgKG1fbmVlZFRvQ2xvc2VEaXNw
bGF5KQotICAgICAgICBYQ2xvc2VEaXNwbGF5KG1fZGlzcGxheSk7Ci19Ci0KLXZvaWQgV2luZG93
R0xDb250ZXh0OjpzdGFydERyYXdpbmcoKQotewotICAgIGdsWE1ha2VDdXJyZW50KG1fZGlzcGxh
eSwgR0RLX1dJTkRPV19YSUQobV93aW5kb3cpLCBtX2NvbnRleHQpOwotfQotCi12b2lkIFdpbmRv
d0dMQ29udGV4dDo6ZmluaXNoRHJhd2luZygpCi17Ci0gICAgZ2xYU3dhcEJ1ZmZlcnMobV9kaXNw
bGF5LCBHREtfV0lORE9XX1hJRChtX3dpbmRvdykpOwotfQotCi19IC8vIG5hbWVzcGFjZSBXZWJD
b3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVy
YXRlZENvbXBvc2l0aW5nQ29udGV4dC5oIGIvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBv
cnQvQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQuaAppbmRleCBjYWQ0NzQ5NWQ2MjEzZWEw
NGZjYjllZDkwNzVhYTI3MjMyZWI5NWI3Li5iMjU2N2ViNWYxNDU5YTBjNmZkMmZjY2ViODk0Mjlk
NjQ2NmFhODM3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9B
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvZ3RrL1dl
YkNvcmVTdXBwb3J0L0FjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0LmgKQEAgLTI4LDggKzI4
LDggQEAKICNpbmNsdWRlIDx3dGYvUGFzc093blB0ci5oPgogCiAjaWYgVVNFKFRFWFRVUkVfTUFQ
UEVSX0dMKQorI2luY2x1ZGUgIkdMQ29udGV4dC5oIgogI2luY2x1ZGUgIlRleHR1cmVNYXBwZXJM
YXllci5oIgotI2luY2x1ZGUgIldpbmRvd0dMQ29udGV4dC5oIgogI2VuZGlmCiAKICNpZiBVU0Uo
QUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCkBAIC02OSwxMSArNjksOCBAQCBwcml2YXRlOgogI2lm
IFVTRShDTFVUVEVSKQogICAgIEd0a1dpZGdldCogbV9yb290TGF5ZXJFbWJlZGRlcjsKICNlbGlm
IFVTRShURVhUVVJFX01BUFBFUl9HTCkKLSAgICB2b2lkIGluaXRpYWxpemVJZk5lY2Vzc2FyeSgp
OwotCi0gICAgYm9vbCBtX2luaXRpYWxpemVkOworICAgIFdlYkNvcmU6OkdMQ29udGV4dCogZ2xD
b250ZXh0KCk7CiAgICAgV2ViQ29yZTo6VGV4dHVyZU1hcHBlckxheWVyKiBtX3Jvb3RUZXh0dXJl
TWFwcGVyTGF5ZXI7Ci0gICAgT3duUHRyPFdlYkNvcmU6OldpbmRvd0dMQ29udGV4dD4gbV9jb250
ZXh0OwogICAgIE93blB0cjxXZWJDb3JlOjpUZXh0dXJlTWFwcGVyPiBtX3RleHR1cmVNYXBwZXI7
CiAjZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9ndGsvV2ViQ29yZVN1cHBvcnQv
QWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHRHTC5jcHAgYi9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAppbmRleCA4
YzQzMDBmMjc5OTAyNjg5YzM5MWJlYzZkNmQ3MDZjMDEzMDk0NDAwLi42ZDMzODk3MGE4YTMwM2Vj
OWQ3ODQ1NTMyNWE3OGIwNzA1YjZkYjg0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2d0ay9X
ZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dEdMLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L2d0ay9XZWJDb3JlU3VwcG9ydC9BY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dEdMLmNwcApAQCAtNDIsNyArNDIsNiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0OjpBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dChXZWJL
aXRXZWJWaWV3KiB3ZWJWaWV3KQogICAgIDogbV93ZWJWaWV3KHdlYlZpZXcpCiAgICAgLCBtX3N5
bmNUaW1lckNhbGxiYWNrSWQoMCkKLSAgICAsIG1faW5pdGlhbGl6ZWQoZmFsc2UpCiAgICAgLCBt
X3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXIoMCkKIHsKIH0KQEAgLTUzLDM4ICs1MiwzMCBAQCBBY2Nl
bGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6fkFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
KCkKICAgICAgICAgZ19zb3VyY2VfcmVtb3ZlKG1fc3luY1RpbWVyQ2FsbGJhY2tJZCk7CiB9CiAK
LXZvaWQgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OmluaXRpYWxpemVJZk5lY2Vzc2Fy
eSgpCi17Ci0gICAgaWYgKG1faW5pdGlhbGl6ZWQpCi0gICAgICAgIHJldHVybjsKLQotICAgIG1f
aW5pdGlhbGl6ZWQgPSB0cnVlOwotCi0gICAgLy8gVGhlIEdUSysgZG9jcyBzYXkgdGhhdCB3ZSBj
YW4gZmFpbCB0byBjcmVhdGUgYSBuYXRpdmUgd2luZG93LgotICAgIC8vIEZJWE1FOiBXZSBzaG91
bGQgZmFsbCBiYWNrIHRvIHRoZSBJbWFnZUJ1ZmZlciBUZXh0dXJlTWFwcGVyIHdoZW4gaXQgZXhp
c3RzLgotICAgIGlmICghbV93ZWJWaWV3LT5wcml2LT5oYXNOYXRpdmVXaW5kb3cpCi0gICAgICAg
IHJldHVybjsKLQotICAgIG1fY29udGV4dCA9IFdlYkNvcmU6OldpbmRvd0dMQ29udGV4dDo6Y3Jl
YXRlQ29udGV4dFdpdGhHZGtXaW5kb3coZ3RrX3dpZGdldF9nZXRfd2luZG93KEdUS19XSURHRVQo
bV93ZWJWaWV3KSkpOwotfQotCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpl
bmFibGVkKCkKIHsKICAgICByZXR1cm4gbV9yb290VGV4dHVyZU1hcHBlckxheWVyICYmIG1fdGV4
dHVyZU1hcHBlcjsKIH0KIAorR0xDb250ZXh0KiBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4
dDo6Z2xDb250ZXh0KCkKK3sKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBHTENvbnRleHQ6Omdl
dENvbnRleHRGb3JXaWRnZXQoR1RLX1dJREdFVChtX3dlYlZpZXcpKTsKKyAgICBpZiAoIWNvbnRl
eHQtPmNhblJlbmRlclRvRGVmYXVsdEZyYW1lYnVmZmVyKCkpCisgICAgICAgIHJldHVybiAwOwor
ICAgIHJldHVybiBjb250ZXh0OworfQogCiBib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250
ZXh0OjpyZW5kZXJMYXllcnNUb1dpbmRvdyhjb25zdCBJbnRSZWN0JiBjbGlwUmVjdCkKIHsKICAg
ICBpZiAoIWVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgLy8gV2UgaW5p
dGlhbGl6ZSB0aGUgY29udGV4dCBsYXppbHkgaGVyZSBzbyB0aGF0IHdlIGtub3cgdGhhdCB0aGUg
R2RrV2luZG93IHJlYWxpemVkLgotICAgIGluaXRpYWxpemVJZk5lY2Vzc2FyeSgpOwotICAgIGlm
ICghbV9jb250ZXh0KQorICAgIEdMQ29udGV4dCogY29udGV4dCA9IGdsQ29udGV4dCgpOworICAg
IGlmICghY29udGV4dCkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgbV9jb250ZXh0LT5z
dGFydERyYXdpbmcoKTsKKyAgICBpZiAoIWNvbnRleHQtPm1ha2VDb250ZXh0Q3VycmVudCgpKQor
ICAgICAgICByZXR1cm4gZmFsc2U7CiAKICAgICBHdGtBbGxvY2F0aW9uIGFsbG9jYXRpb247CiAg
ICAgZ3RrX3dpZGdldF9nZXRfYWxsb2NhdGlvbihHVEtfV0lER0VUKG1fd2ViVmlldyksICZhbGxv
Y2F0aW9uKTsKQEAgLTk0LDcgKzg1LDcgQEAgYm9vbCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6cmVuZGVyTGF5ZXJzVG9XaW5kb3coY29uc3QgSW50UmVjdCYgY2xpcFJlY3QKICAgICBt
X3Jvb3RUZXh0dXJlTWFwcGVyTGF5ZXItPnBhaW50KCk7CiAgICAgbV90ZXh0dXJlTWFwcGVyLT5l
bmRQYWludGluZygpOwogCi0gICAgbV9jb250ZXh0LT5maW5pc2hEcmF3aW5nKCk7CisgICAgY29u
dGV4dC0+c3dhcEJ1ZmZlcnMoKTsKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtMTE0LDE0ICsx
MDUsMTQgQEAgdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6YXR0YWNoUm9vdEdy
YXBoaWNzTGF5ZXIoR3JhcGhpY3NMYXllciogZ3JhcGgKICAgICBtX3Jvb3RHcmFwaGljc0xheWVy
LT5zZXROZWVkc0Rpc3BsYXkoKTsKICAgICBtX3Jvb3RHcmFwaGljc0xheWVyLT5zZXRTaXplKGNv
cmUobV93ZWJWaWV3KS0+bWFpbkZyYW1lKCktPnZpZXcoKS0+ZnJhbWVSZWN0KCkuc2l6ZSgpKTsK
IAotICAgIC8vIFdlIGluaXRpYWxpemUgdGhlIGNvbnRleHQgbGF6aWx5IGhlcmUgc28gdGhhdCB3
ZSBrbm93IHRoYXQgdGhlIEdka1dpbmRvdyByZWFsaXplZC4KLSAgICBpbml0aWFsaXplSWZOZWNl
c3NhcnkoKTsKLSAgICBpZiAoIW1fY29udGV4dCkKKyAgICBHTENvbnRleHQqIGNvbnRleHQgPSBn
bENvbnRleHQoKTsKKyAgICBpZiAoIWNvbnRleHQpCiAgICAgICAgIHJldHVybjsKIAogICAgIC8v
IFRoZSBjb250ZXh0IG5lZWRzIHRvIGJlIGFjdGl2ZSB3aGVuIGNyZWF0aW5nIHRoZSB0ZXh0dXJl
IG1hcHBlci4gSXQncyBmaW5lIHRvCi0gICAgLy8gYXZvaWQgY2FsbGluZyBlbmREcmF3aW5nIGhl
cmUsIGJlY2F1c2UgaXQgd2lsbCBqdXN0IGluaXRpYWxpemUgc2hhZGVycy4KLSAgICBtX2NvbnRl
eHQtPnN0YXJ0RHJhd2luZygpOworICAgIC8vIGF2b2lkIGNhbGxpbmcgc3dhcEJ1ZmZlcnMgaGVy
ZSwgYmVjYXVzZSBpdCB3aWxsIGp1c3QgaW5pdGlhbGl6ZSBzaGFkZXJzLgorICAgIGlmICghY29u
dGV4dC0+bWFrZUNvbnRleHRDdXJyZW50KCkpCisgICAgICAgIHJldHVybjsKIAogICAgIEd0a0Fs
bG9jYXRpb24gYWxsb2NhdGlvbjsKICAgICBndGtfd2lkZ2V0X2dldF9hbGxvY2F0aW9uKEdUS19X
SURHRVQobV93ZWJWaWV3KSwgJmFsbG9jYXRpb24pOwpAQCAtMTg4LDI4ICsxNzksMjggQEAgdm9p
ZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c3luY0xheWVyc1RpbWVvdXQoKQogICAg
ICAgICBtX3N5bmNUaW1lckNhbGxiYWNrSWQgPSBnX3RpbWVvdXRfYWRkX2Z1bGwoR0RLX1BSSU9S
SVRZX0VWRU5UUywgMTAwMC4wIC8gNjAuMCwgcmVpbnRlcnByZXRfY2FzdDxHU291cmNlRnVuYz4o
c3luY0xheWVyc1RpbWVvdXRDYWxsYmFjayksIHRoaXMsIDApOwogfQogCi12b2lkIEFjY2VsZXJh
dGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlBbmltYXRpb25TdGFydGVkKGNvbnN0IFdlYkNv
cmU6OkdyYXBoaWNzTGF5ZXIqLCBkb3VibGUgdGltZSkKK3ZvaWQgQWNjZWxlcmF0ZWRDb21wb3Np
dGluZ0NvbnRleHQ6Om5vdGlmeUFuaW1hdGlvblN0YXJ0ZWQoY29uc3QgR3JhcGhpY3NMYXllcios
IGRvdWJsZSB0aW1lKQogewogCiB9Ci12b2lkIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0
Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3QgV2ViQ29yZTo6R3JhcGhpY3NMYXllciopCit2b2lk
IEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0Ojpub3RpZnlTeW5jUmVxdWlyZWQoY29uc3Qg
R3JhcGhpY3NMYXllciopCiB7CiAKIH0KIAotdm9pZCBBY2NlbGVyYXRlZENvbXBvc2l0aW5nQ29u
dGV4dDo6cGFpbnRDb250ZW50cyhjb25zdCBXZWJDb3JlOjpHcmFwaGljc0xheWVyKiwgV2ViQ29y
ZTo6R3JhcGhpY3NDb250ZXh0JiBjb250ZXh0LCBXZWJDb3JlOjpHcmFwaGljc0xheWVyUGFpbnRp
bmdQaGFzZSwgY29uc3QgV2ViQ29yZTo6SW50UmVjdCYgcmVjdFRvUGFpbnQpCit2b2lkIEFjY2Vs
ZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpwYWludENvbnRlbnRzKGNvbnN0IEdyYXBoaWNzTGF5
ZXIqLCBHcmFwaGljc0NvbnRleHQmIGNvbnRleHQsIEdyYXBoaWNzTGF5ZXJQYWludGluZ1BoYXNl
LCBjb25zdCBJbnRSZWN0JiByZWN0VG9QYWludCkKIHsKICAgICBjYWlyb190KiBjciA9IGNvbnRl
eHQucGxhdGZvcm1Db250ZXh0KCktPmNyKCk7CiAgICAgY29weVJlY3RGcm9tQ2Fpcm9TdXJmYWNl
VG9Db250ZXh0KG1fd2ViVmlldy0+cHJpdi0+YmFja2luZ1N0b3JlLT5jYWlyb1N1cmZhY2UoKSwg
Y3IsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEludFNpemUoKSwgcmVj
dFRvUGFpbnQpOwogfQogCi1ib29sIEFjY2VsZXJhdGVkQ29tcG9zaXRpbmdDb250ZXh0OjpzaG93
RGVidWdCb3JkZXJzKGNvbnN0IFdlYkNvcmU6OkdyYXBoaWNzTGF5ZXIqKSBjb25zdAorYm9vbCBB
Y2NlbGVyYXRlZENvbXBvc2l0aW5nQ29udGV4dDo6c2hvd0RlYnVnQm9yZGVycyhjb25zdCBHcmFw
aGljc0xheWVyKikgY29uc3QKIHsKICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgQWNjZWxl
cmF0ZWRDb21wb3NpdGluZ0NvbnRleHQ6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBXZWJDb3Jl
OjpHcmFwaGljc0xheWVyKikgY29uc3QKK2Jvb2wgQWNjZWxlcmF0ZWRDb21wb3NpdGluZ0NvbnRl
eHQ6OnNob3dSZXBhaW50Q291bnRlcihjb25zdCBHcmFwaGljc0xheWVyKikgY29uc3QKIHsKICAg
ICByZXR1cm4gZmFsc2U7CiB9Cg==
</data>
<flag name="review"
          id="129911"
          type_id="1"
          status="+"
          setter="gustavo"
    />
    <flag name="commit-queue"
          id="132764"
          type_id="3"
          status="-"
          setter="webkit.review.bot"
    />
          </attachment>
      

    </bug>

</bugzilla>