<?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>119163</bug_id>
          
          <creation_ts>2013-07-26 14:38:27 -0700</creation_ts>
          <short_desc>EGL surfaces code has EFL-specific code</short_desc>
          <delta_ts>2013-07-29 15:39:03 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>Windows 7</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P3</priority>
          <bug_severity>Minor</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>cmarcelo</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kalyan.kondapally</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>luiz</cc>
    
    <cc>noam</cc>
    
    <cc>rakuco</cc>
    
    <cc>sergio</cc>
    
    <cc>zeno</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>912108</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-26 14:38:27 -0700</bug_when>
    <thetext>Source/WebCore/platform/graphics/surfaces/egl/EGLSurface.h #includes GLTransportSurface.h, which is in Source/WebCore/platform/graphics/surfaces/efl.  The efl code should not be compiled on non-efl platforms.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912111</commentid>
    <comment_count>1</comment_count>
      <attachid>207556</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-26 14:43:35 -0700</bug_when>
    <thetext>Created attachment 207556
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912135</commentid>
    <comment_count>2</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-07-26 15:41:10 -0700</bug_when>
    <thetext>
we can try to reuse GLTransportSurface class and GraphicsSurfaceCommon classes and move them outside efl folder.

Couple of changes needed here:
1)GLTransportSurface has a dependency on TextureMapperShaderProgram to render textures to surface. I don&apos;t know if that is going to be an issue for you (otherwise we would need to implement a shader here). 
2)GraphicsSurfaceCommon currently has support for CoordinateGraphics. We should include function platformPaintToTextureMapper only when Co-ordinatedGraphics is supported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912138</commentid>
    <comment_count>3</comment_count>
      <attachid>207556</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-26 15:45:18 -0700</bug_when>
    <thetext>Comment on attachment 207556
Patch

We&apos;re going to move GLTransportSurface to Source/WebCore/platform/graphics/surfaces instead</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912588</commentid>
    <comment_count>4</comment_count>
      <attachid>207668</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2013-07-29 13:10:40 -0700</bug_when>
    <thetext>Created attachment 207668
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912589</commentid>
    <comment_count>5</comment_count>
    <who name="Kalyan">kalyan.kondapally</who>
    <bug_when>2013-07-29 13:15:43 -0700</bug_when>
    <thetext>LGTM</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912608</commentid>
    <comment_count>6</comment_count>
      <attachid>207668</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-29 15:39:01 -0700</bug_when>
    <thetext>Comment on attachment 207668
Patch

Clearing flags on attachment: 207668

Committed r153443: &lt;http://trac.webkit.org/changeset/153443&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>912609</commentid>
    <comment_count>7</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-07-29 15:39:03 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207556</attachid>
            <date>2013-07-26 14:43:35 -0700</date>
            <delta_ts>2013-07-29 13:10:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119163-20130726144335.patch</filename>
            <type>text/plain</type>
            <size>1637</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MzM4MykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE1IEBACisyMDEzLTA3LTI2ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQGFwcGxlLmNvbT4KKworICAgICAgICBDb21waWxlIGZp
eCBmb3Igbm9uLUVGTCBwb3J0cyB1c2luZyBFR0wgc3VyZmFjZXMuCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTkxNjMKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKwor
ICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VnbC9FR0xTdXJmYWNlLmg6Cisg
ICAgICAgIEFkZGVkICNpZiBQTEFURk9STShFRkwpIGFyb3VuZCBFRkwtc3BlY2lmaWMgaW5jbHVk
ZSBhbmQgZGVjbGFyYXRpb24uCisKIDIwMTMtMDctMjYgIE9saXZlciBIdW50ICA8b2xpdmVyQGFw
cGxlLmNvbT4KIAogICAgICAgICBSRUdSRVNTSU9OKEZUTD8pOiBDcmFzaGVzIGluIHBsdWdpbiB0
ZXN0cwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWds
L0VHTFN1cmZhY2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCShyZXZpc2lvbiAxNTMzNzMpCisrKyBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZ2wvRUdMU3VyZmFjZS5oCSh3
b3JraW5nIGNvcHkpCkBAIC0yOCw3ICsyOCw5IEBACiAKICNpZiBVU0UoRUdMKSAmJiBVU0UoR1JB
UEhJQ1NfU1VSRkFDRSkKIAorI2lmIFBMQVRGT1JNKEVGTCkKICNpbmNsdWRlICJHTFRyYW5zcG9y
dFN1cmZhY2UuaCIKKyNlbmRpZgogCiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5j
bHVkZSA8d3RmL1Bhc3NPd25QdHIuaD4KQEAgLTM3LDYgKzM5LDcgQEAgbmFtZXNwYWNlIFdlYkNv
cmUgewogCiBjbGFzcyBFR0xDb25maWdTZWxlY3RvcjsKIAorI2lmIFBMQVRGT1JNKEVGTCkKIGNs
YXNzIEVHTFRyYW5zcG9ydFN1cmZhY2UgOiBwdWJsaWMgR0xUcmFuc3BvcnRTdXJmYWNlIHsKIHB1
YmxpYzoKICAgICBzdGF0aWMgUGFzc093blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IGNyZWF0ZVRy
YW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKQEAgLTUw
LDYgKzUzLDcgQEAgcHJvdGVjdGVkOgogICAgIEVHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50
U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzKTsKICAgICBPd25QdHI8RUdMQ29uZmlnU2VsZWN0b3I+
IG1fY29uZmlnU2VsZWN0b3I7CiB9OworI2VuZGlmCiAKIGNsYXNzIEVHTE9mZlNjcmVlblN1cmZh
Y2UgOiBwdWJsaWMgR0xQbGF0Zm9ybVN1cmZhY2UgewogcHVibGljOgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>207668</attachid>
            <date>2013-07-29 13:10:40 -0700</date>
            <delta_ts>2013-07-29 15:39:00 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-119163-20130729131039.patch</filename>
            <type>text/plain</type>
            <size>25919</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDE1MzQzOCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEzLTA3LTI5ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQGFwcGxlLmNvbT4KKworICAgICAgICBNb3ZlZCBHTFRy
YW5zcG9ydFN1cmZhY2UuaCBhbmQgLmNwcCBvdXQgb2YgZWZsLXNwZWNpZmljIGRpcmVjdG9yeS4K
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTExOTE2Mwor
CisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogUGxhdGZv
cm1FZmwuY21ha2U6IENoYW5nZWQgZGlyZWN0b3J5IG9mIEdMVHJhbnNwb3J0U3VyZmFjZS5jcHAu
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNl
LmNwcDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwv
R0xUcmFuc3BvcnRTdXJmYWNlLmNwcC4KKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuaDogQ29waWVkIGZyb20gV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmguCisgICAgICAgICogcGxh
dGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6IFJlbW92
ZWQuCisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0
U3VyZmFjZS5oOiBSZW1vdmVkLgorCiAyMDEzLTA3LTI5ICBEZWFuIEphY2tzb24gIDxkaW5vQGFw
cGxlLmNvbT4KIAogICAgICAgICBNYXggSU9TdXJmYWNlRGltZW5zaW9uIHNob3VsZCBiZSBhbiBp
bmNsdXNpdmUgdXBwZXIgYm91bmQKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNt
YWtlCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL1BsYXRmb3JtRWZsLmNtYWtlCShyZXZp
c2lvbiAxNTM0MzUpCisrKyBTb3VyY2UvV2ViQ29yZS9QbGF0Zm9ybUVmbC5jbWFrZQkod29ya2lu
ZyBjb3B5KQpAQCAtMjk5LDcgKzI5OSw3IEBAIGlmIChXVEZfVVNFXzNEX0dSQVBISUNTKQogICAg
ICAgICBwbGF0Zm9ybS9ncmFwaGljcy9vcGVuZ2wvR0xQbGF0Zm9ybVN1cmZhY2UuY3BwCiAgICAg
ICAgIHBsYXRmb3JtL2dyYXBoaWNzL29wZW5nbC9HcmFwaGljc0NvbnRleHQzRE9wZW5HTENvbW1v
bi5jcHAKICAgICAgICAgcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR3JhcGhpY3NTdXJmYWNl
LmNwcAotICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRT
dXJmYWNlLmNwcAorICAgICAgICBwbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9HTFRyYW5zcG9y
dFN1cmZhY2UuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HcmFw
aGljc1N1cmZhY2VDb21tb24uY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2Vz
L2dseC9YMTFIZWxwZXIuY3BwCiAgICAgICAgIHBsYXRmb3JtL2dyYXBoaWNzL3RleG1hcC9UZXh0
dXJlTWFwcGVyR0wuY3BwCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9z
dXJmYWNlcy9HTFRyYW5zcG9ydFN1cmZhY2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAJKHJl
dmlzaW9uIDE1MzQzNSkJKGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3Vy
ZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHA6MTUzNDM1KQorKysgU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMCwwICsxLDI2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMyBJ
bnRlbCBDb3Jwb3JhdGlvbi4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1
dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQK
KyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dp
bmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAy
LiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBU
SElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gQU5EIElUUyBDT05UUklCVVRP
UlMgYGBBUyBJUycnCisgKiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFRIRSBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IgSVRTIENP
TlRSSUJVVE9SUworICogQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUgorICogQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YKKyAqIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBC
VVNJTkVTUworICogSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4KKyAqIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpCisgKiBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GCisgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1
ZGUgImNvbmZpZy5oIgorI2luY2x1ZGUgIkdMVHJhbnNwb3J0U3VyZmFjZS5oIgorCisjaWYgVVNF
KEFDQ0VMRVJBVEVEX0NPTVBPU0lUSU5HKQorCisjaW5jbHVkZSAiRmxvYXRSZWN0LmgiCisKKyNp
ZiBVU0UoR0xYKQorI2luY2x1ZGUgIkdMWFN1cmZhY2UuaCIKKyNlbmRpZgorCisjaWYgVVNFKEVH
TCkKKyNpbmNsdWRlICJFR0xTdXJmYWNlLmgiCisjZW5kaWYKKworI2luY2x1ZGUgPHRleG1hcC9U
ZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbS5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK3N0
YXRpYyBjb25zdCBHTGZsb2F0IHZlcnRpY2VzW10gPSB7IDAsIDAsIDEsIDAsIDEsIDEsIDAsIDEg
fTsKK3N0YXRpYyBib29sIHZlcnRleEFycmF5T2JqZWN0U3VwcG9ydGVkID0gZmFsc2U7CisKK1Bh
c3NPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBHTFRyYW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRy
YW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0
cmlidXRlcykKK3sKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJmYWNlPiBzdXJmYWNlOworI2lm
IFVTRShHTFgpCisgICAgc3VyZmFjZSA9IGFkb3B0UHRyKG5ldyBHTFhUcmFuc3BvcnRTdXJmYWNl
KHNpemUsIGF0dHJpYnV0ZXMpKTsKKyNlbGlmIFVTRShFR0wpCisgICAgc3VyZmFjZSA9IEVHTFRy
YW5zcG9ydFN1cmZhY2U6OmNyZWF0ZVRyYW5zcG9ydFN1cmZhY2Uoc2l6ZSwgYXR0cmlidXRlcyk7
CisjZW5kaWYKKworICAgIGlmIChzdXJmYWNlICYmIHN1cmZhY2UtPmhhbmRsZSgpICYmIHN1cmZh
Y2UtPmRyYXdhYmxlKCkpCisgICAgICAgIHJldHVybiBzdXJmYWNlLnJlbGVhc2UoKTsKKworICAg
IHJldHVybiBudWxscHRyOworfQorCitHTFRyYW5zcG9ydFN1cmZhY2U6OkdMVHJhbnNwb3J0U3Vy
ZmFjZShjb25zdCBJbnRTaXplJiBzaXplLCBTdXJmYWNlQXR0cmlidXRlcyBhdHRyaWJ1dGVzKQor
ICAgIDogR0xQbGF0Zm9ybVN1cmZhY2UoYXR0cmlidXRlcykKKyAgICAsIG1fdmJvKDApCisgICAg
LCBtX3ZlcnRleEhhbmRsZSgwKQorICAgICwgbV9ib3VuZFRleHR1cmUoMCkKK3sKKyAgICBtX3Jl
Y3QgPSBJbnRSZWN0KEludFBvaW50KCksIHNpemUpOworfQorCitHTFRyYW5zcG9ydFN1cmZhY2U6
On5HTFRyYW5zcG9ydFN1cmZhY2UoKQoreworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6
dXBkYXRlQ29udGVudHMoY29uc3QgdWludDMyX3QgdGV4dHVyZSkKK3sKKyAgICBpZiAoIW1fc2hh
ZGVyUHJvZ3JhbSkKKyAgICAgICAgaW5pdGlhbGl6ZVNoYWRlclByb2dyYW0oKTsKKworICAgIGRy
YXcodGV4dHVyZSk7CisgICAgc3dhcEJ1ZmZlcnMoKTsKK30KKwordm9pZCBHTFRyYW5zcG9ydFN1
cmZhY2U6OnNldEdlb21ldHJ5KGNvbnN0IEludFJlY3QmIG5ld1JlY3QpCit7CisgICAgbV9yZWN0
ID0gbmV3UmVjdDsKKworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICByZXR1cm47
CisKKyAgICB1cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCit2b2lkIEdMVHJhbnNw
b3J0U3VyZmFjZTo6ZGVzdHJveSgpCit7CisgICAgbV9yZWN0ID0gSW50UmVjdCgpOworCisgICAg
aWYgKCFtX3NoYWRlclByb2dyYW0gfHwgIW1fY29udGV4dDNEKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsQmluZEZyYW1lYnVmZmVyKEdMX0ZSQU1FQlVGRkVSLCAwKTsKKyAgICA6OmdsQmlu
ZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlf
QlVGRkVSLCAwKTsKKworICAgIGlmIChtX3ZibykKKyAgICAgICAgOjpnbERlbGV0ZUJ1ZmZlcnMo
MSwgJm1fdmJvKTsKKworICAgIGlmIChtX3ZlcnRleEhhbmRsZSkgeworICAgICAgICBtX2NvbnRl
eHQzRC0+Z2V0RXh0ZW5zaW9ucygpLT5iaW5kVmVydGV4QXJyYXlPRVMoMCk7CisgICAgICAgIG1f
Y29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmRlbGV0ZVZlcnRleEFycmF5T0VTKG1fdmVydGV4
SGFuZGxlKTsKKyAgICB9IGVsc2UgaWYgKG1fc2hhZGVyUHJvZ3JhbSkKKyAgICAgICAgOjpnbERp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheShtX3NoYWRlclByb2dyYW0tPnZlcnRleExvY2F0aW9uKCkp
OworCisgICAgOjpnbFVzZVByb2dyYW0oMCk7CisKKyAgICBtX3NoYWRlclByb2dyYW0gPSBudWxs
cHRyOworICAgIG1fY29udGV4dDNEID0gbnVsbHB0cjsKKyAgICBtX2JvdW5kVGV4dHVyZSA9IDA7
Cit9CisKK3ZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpkcmF3KGNvbnN0IHVpbnQzMl90IHRleHR1
cmUpCit7CisgICAgaWYgKCFtX3ZlcnRleEhhbmRsZSkKKyAgICAgICAgYmluZEFycmF5QnVmZmVy
KCk7CisKKyAgICBpZiAobV9ib3VuZFRleHR1cmUgIT0gdGV4dHVyZSkgeworICAgICAgICA6Omds
QmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgdGV4dHVyZSk7CisgICAgICAgIG1fYm91bmRUZXh0
dXJlID0gdGV4dHVyZTsKKyAgICB9CisKKyAgICA6OmdsRHJhd0FycmF5cyhHTF9UUklBTkdMRV9G
QU4sIDAsIDQpOworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6YmluZEFycmF5QnVmZmVy
KCkgY29uc3QKK3sKKyAgICA6OmdsRW5hYmxlVmVydGV4QXR0cmliQXJyYXkobV9zaGFkZXJQcm9n
cmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKKyAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZG
RVIsIG1fdmJvKTsKKyAgICA6OmdsVmVydGV4QXR0cmliUG9pbnRlcihtX3NoYWRlclByb2dyYW0t
PnZlcnRleExvY2F0aW9uKCksIDIsIEdyYXBoaWNzQ29udGV4dDNEOjpGTE9BVCwgZmFsc2UsIDAs
IDApOworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6dXBkYXRlVHJhbnNmb3JtYXRpb25N
YXRyaXgoKQoreworICAgIGlmICghbV9zaGFkZXJQcm9ncmFtKQorICAgICAgICByZXR1cm47CisK
KyAgICA6OmdsVmlld3BvcnQobV9yZWN0LngoKSwgbV9yZWN0LnkoKSwgbV9yZWN0LndpZHRoKCks
IG1fcmVjdC5oZWlnaHQoKSk7CisgICAgbV9ib3VuZFRleHR1cmUgPSAwOworCisgICAgRmxvYXRS
ZWN0IHRhcmdldFJlY3QgPSBGbG9hdFJlY3QobV9yZWN0KTsKKyAgICBUcmFuc2Zvcm1hdGlvbk1h
dHJpeCBpZGVudGl0eU1hdHJpeDsKKyAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBtYXRyaXggPSBU
cmFuc2Zvcm1hdGlvbk1hdHJpeChpZGVudGl0eU1hdHJpeCkubXVsdGlwbHkoVHJhbnNmb3JtYXRp
b25NYXRyaXg6OnJlY3RUb1JlY3QoRmxvYXRSZWN0KDAsIDAsIDEsIDEpLCB0YXJnZXRSZWN0KSk7
CisgICAgbV9zaGFkZXJQcm9ncmFtLT5zZXRNYXRyaXgobV9zaGFkZXJQcm9ncmFtLT5tb2RlbFZp
ZXdNYXRyaXhMb2NhdGlvbigpLCBtYXRyaXgpOworCisgICAgLy8gVGFrZW4gZnJvbSBUZXh0dXJl
TWFwcGVyR0wuCisgICAgY29uc3QgZmxvYXQgbmVhclZhbHVlID0gOTk5OTk5OTsKKyAgICBjb25z
dCBmbG9hdCBmYXJWYWx1ZSA9IC05OTk5OTsKKworICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4IHBy
b2plY3Rpb25NYXRyaXggPSBUcmFuc2Zvcm1hdGlvbk1hdHJpeCgyLjAgLyBmbG9hdChtX3JlY3Qu
d2lkdGgoKSksIDAsIDAsIDAsCisgICAgICAgIDAsICgtMi4wKSAvIGZsb2F0KG1fcmVjdC5oZWln
aHQoKSksIDAsIDAsCisgICAgICAgIDAsIDAsIC0yLmYgLyAoZmFyVmFsdWUgLSBuZWFyVmFsdWUp
LCAwLAorICAgICAgICAtMSwgMSwgLShmYXJWYWx1ZSArIG5lYXJWYWx1ZSkgLyAoZmFyVmFsdWUg
LSBuZWFyVmFsdWUpLCAxKTsKKworICAgIG1fc2hhZGVyUHJvZ3JhbS0+c2V0TWF0cml4KG1fc2hh
ZGVyUHJvZ3JhbS0+cHJvamVjdGlvbk1hdHJpeExvY2F0aW9uKCksIHByb2plY3Rpb25NYXRyaXgp
OworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZTo6aW5pdGlhbGl6ZVNoYWRlclByb2dyYW0o
KQoreworICAgIGlmICghbV9jb250ZXh0M0QpCisgICAgICAgIG1fY29udGV4dDNEID0gR3JhcGhp
Y3NDb250ZXh0M0Q6OmNyZWF0ZUZvckN1cnJlbnRHTENvbnRleHQoKTsKKworICAgIHZlcnRleEFy
cmF5T2JqZWN0U3VwcG9ydGVkID0gbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMoKS0+c3VwcG9y
dHMoIkdMX09FU192ZXJ0ZXhfYXJyYXlfb2JqZWN0Iik7CisKKyAgICBUZXh0dXJlTWFwcGVyU2hh
ZGVyUHJvZ3JhbTo6T3B0aW9ucyBvcHRpb25zID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06
OlRleHR1cmU7CisgICAgbV9zaGFkZXJQcm9ncmFtID0gVGV4dHVyZU1hcHBlclNoYWRlclByb2dy
YW06OmNyZWF0ZShtX2NvbnRleHQzRCwgb3B0aW9ucyk7CisKKyAgICA6OmdsVXNlUHJvZ3JhbSht
X3NoYWRlclByb2dyYW0tPnByb2dyYW1JRCgpKTsKKyAgICA6OmdsVW5pZm9ybTFpKG1fc2hhZGVy
UHJvZ3JhbS0+c2FtcGxlckxvY2F0aW9uKCksIDApOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9O
RUFSRVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9URVhUVVJF
X1dSQVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmkoR0xfVEVY
VFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworCisgICAgVHJh
bnNmb3JtYXRpb25NYXRyaXggZmxpcFRyYW5zZm9ybTsKKyAgICBmbGlwVHJhbnNmb3JtLmZsaXBZ
KCk7CisgICAgZmxpcFRyYW5zZm9ybS50cmFuc2xhdGUoMCwgLTEpOworICAgIG1fc2hhZGVyUHJv
Z3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+dGV4dHVyZVNwYWNlTWF0cml4TG9jYXRp
b24oKSwgZmxpcFRyYW5zZm9ybSk7CisKKyAgICA6OmdsVW5pZm9ybTFmKG1fc2hhZGVyUHJvZ3Jh
bS0+b3BhY2l0eUxvY2F0aW9uKCksIDEuMCk7CisKKyAgICBpZiAoIW1fdmJvKSB7CisgICAgICAg
IDo6Z2xHZW5CdWZmZXJzKDEsICZtX3Zibyk7CisgICAgICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FS
UkFZX0JVRkZFUiwgbV92Ym8pOworICAgICAgICA6OmdsQnVmZmVyRGF0YShHTF9BUlJBWV9CVUZG
RVIsIHNpemVvZihHQzNEZmxvYXQpICogOCwgdmVydGljZXMsIEdMX1NUQVRJQ19EUkFXKTsKKyAg
ICB9CisKKyAgICAvLyBDcmVhdGUgYW5kIHNldC11cCB2ZXJ0ZXggYXJyYXkgb2JqZWN0LgorICAg
IGlmICh2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCkgeworICAgICAgICBtX3ZlcnRleEhhbmRs
ZSA9IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPmNyZWF0ZVZlcnRleEFycmF5T0VTKCk7
CisKKyAgICAgICAgaWYgKG1fdmVydGV4SGFuZGxlKSB7CisgICAgICAgICAgICBtX2NvbnRleHQz
RC0+Z2V0RXh0ZW5zaW9ucygpLT5iaW5kVmVydGV4QXJyYXlPRVMobV92ZXJ0ZXhIYW5kbGUpOwor
ICAgICAgICAgICAgYmluZEFycmF5QnVmZmVyKCk7CisgICAgICAgIH0KKyAgICB9CisKKyAgICB1
cGRhdGVUcmFuc2Zvcm1hdGlvbk1hdHJpeCgpOworfQorCitQYXNzT3duUHRyPEdMVHJhbnNwb3J0
U3VyZmFjZUNsaWVudD4gR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpjcmVhdGVUcmFuc3BvcnRT
dXJmYWNlQ2xpZW50KGNvbnN0IFBsYXRmb3JtQnVmZmVySGFuZGxlIGhhbmRsZSwgY29uc3QgSW50
U2l6ZSYgc2l6ZSwgYm9vbCBoYXNBbHBoYSkKK3sKKyAgICBPd25QdHI8R0xUcmFuc3BvcnRTdXJm
YWNlQ2xpZW50PiBjbGllbnQ7CisjaWYgVVNFKEdMWCkKKyAgICBjbGllbnQgPSBhZG9wdFB0cihu
ZXcgR0xYVHJhbnNwb3J0U3VyZmFjZUNsaWVudChoYW5kbGUsIGhhc0FscGhhKSk7CisgICAgVU5V
U0VEX1BBUkFNKHNpemUpOworI2Vsc2UKKyAgICBjbGllbnQgPSBFR0xUcmFuc3BvcnRTdXJmYWNl
OjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGhhbmRsZSwgc2l6ZSwgaGFzQWxwaGEpOwor
I2VuZGlmCisKKyAgICBpZiAoIWNsaWVudCB8fCAhY2xpZW50LT50ZXh0dXJlKCkpIHsKKyAgICAg
ICAgTE9HX0VSUk9SKCJGYWlsZWQgdG8gQ3JlYXRlIFRyYW5zcG9ydCBTdXJmYWNlIGNsaWVudC4i
KTsKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisgICAgfQorCisgICAgcmV0dXJuIGNsaWVudC5y
ZWxlYXNlKCk7Cit9CisKKworR0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpHTFRyYW5zcG9ydFN1
cmZhY2VDbGllbnQoKQorICAgIDogbV90ZXh0dXJlKDApCit7Cit9CisKK0dMVHJhbnNwb3J0U3Vy
ZmFjZUNsaWVudDo6fkdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCgpCit7Cit9CisKK3ZvaWQgR0xU
cmFuc3BvcnRTdXJmYWNlQ2xpZW50OjpkZXN0cm95KCkKK3sKKyAgICBpZiAobV90ZXh0dXJlKSB7
CisgICAgICAgIGdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwgMCk7CisgICAgICAgIGdsRGVs
ZXRlVGV4dHVyZXMoMSwgJm1fdGV4dHVyZSk7CisgICAgICAgIG1fdGV4dHVyZSA9IDA7CisgICAg
fQorfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6cHJlcGFyZVRleHR1cmUoKQor
eworfQorCit2b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVGV4dHVyZSgpCit7
CisgICAgOjpnbEdlblRleHR1cmVzKDEsICZtX3RleHR1cmUpOworICAgIDo6Z2xCaW5kVGV4dHVy
ZShHTF9URVhUVVJFXzJELCBtX3RleHR1cmUpOworICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUlOX0ZJTFRFUiwgR0xfTkVBUkVTVCk7CisgICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9NQUdfRklMVEVSLCBHTF9ORUFS
RVNUKTsKKyAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhUVVJFX1dS
QVBfUywgR0xfQ0xBTVBfVE9fRURHRSk7CisgICAgOjpnbFRleFBhcmFtZXRlcmYoR0xfVEVYVFVS
RV8yRCwgR0xfVEVYVFVSRV9XUkFQX1QsIEdMX0NMQU1QX1RPX0VER0UpOworfQorCit9CisKKyNl
bmRpZgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvR0xU
cmFuc3BvcnRTdXJmYWNlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3Mvc3VyZmFjZXMvR0xUcmFuc3BvcnRTdXJmYWNlLmgJKHJldmlzaW9uIDE1MzQzNSkJ
KGZyb20gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mvc3VyZmFjZXMvZWZsL0dMVHJh
bnNwb3J0U3VyZmFjZS5oOjE1MzQzNSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL3N1cmZhY2VzL0dMVHJhbnNwb3J0U3VyZmFjZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAg
KzEsODEgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24uIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJworICogQU5E
IEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKKyAqIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IKKyAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCisgKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKKyAqIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOCisgKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQorICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgorICogVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgR0xUcmFuc3BvcnRTdXJmYWNl
X2gKKyNkZWZpbmUgR0xUcmFuc3BvcnRTdXJmYWNlX2gKKworI2lmIFVTRShBQ0NFTEVSQVRFRF9D
T01QT1NJVElORykKKworI2luY2x1ZGUgIkdMUGxhdGZvcm1TdXJmYWNlLmgiCisjaW5jbHVkZSA8
d3RmL1Bhc3NPd25QdHIuaD4KKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBUZXh0dXJl
TWFwcGVyU2hhZGVyUHJvZ3JhbTsKKworY2xhc3MgR0xUcmFuc3BvcnRTdXJmYWNlIDogcHVibGlj
IEdMUGxhdGZvcm1TdXJmYWNlIHsKKworcHVibGljOgorICAgIC8vIENyZWF0ZXMgYSBHTCBzdXJm
YWNlIHdob3NlIHJlc3VsdHMgY2FuIGJlIHRyYW5zcG9ydGVkIHRvIHRoZSBVSSBwcm9jZXNzIGZv
ciBkaXNwbGF5LgorICAgIHN0YXRpYyBQYXNzT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gY3Jl
YXRlVHJhbnNwb3J0U3VyZmFjZShjb25zdCBJbnRTaXplJiwgU3VyZmFjZUF0dHJpYnV0ZXMgPSBH
TFBsYXRmb3JtU3VyZmFjZTo6RGVmYXVsdCk7CisgICAgdmlydHVhbCB+R0xUcmFuc3BvcnRTdXJm
YWNlKCk7CisgICAgdmlydHVhbCB2b2lkIHVwZGF0ZUNvbnRlbnRzKGNvbnN0IHVpbnQzMl90KSBP
VkVSUklERTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0R2VvbWV0cnkoY29uc3QgSW50UmVjdCYpIE9W
RVJSSURFOworICAgIHZpcnR1YWwgdm9pZCBkZXN0cm95KCkgT1ZFUlJJREU7CisKK3Byb3RlY3Rl
ZDoKKyAgICBHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1
dGVzKTsKKyAgICB2b2lkIHVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCk7CisgICAgdm9pZCBi
aW5kQXJyYXlCdWZmZXIoKSBjb25zdDsKKyAgICB2b2lkIGluaXRpYWxpemVTaGFkZXJQcm9ncmFt
KCk7CisgICAgdm9pZCBkcmF3KGNvbnN0IHVpbnQzMl90KTsKKworICAgIFJlZlB0cjxHcmFwaGlj
c0NvbnRleHQzRD4gbV9jb250ZXh0M0Q7CisgICAgUmVmUHRyPFRleHR1cmVNYXBwZXJTaGFkZXJQ
cm9ncmFtPiBtX3NoYWRlclByb2dyYW07CisgICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZibzsKKyAg
ICBQbGF0Zm9ybTNET2JqZWN0IG1fdmVydGV4SGFuZGxlOworICAgIEdMdWludCBtX2JvdW5kVGV4
dHVyZTsKK307CisKK2NsYXNzIEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudCB7CisKK3B1YmxpYzoK
KyAgICBzdGF0aWMgUGFzc093blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IGNyZWF0ZVRy
YW5zcG9ydFN1cmZhY2VDbGllbnQoY29uc3QgUGxhdGZvcm1CdWZmZXJIYW5kbGUsIGNvbnN0IElu
dFNpemUmLCBib29sKTsKKyAgICB2aXJ0dWFsIH5HTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKTsK
KyAgICB2aXJ0dWFsIHZvaWQgcHJlcGFyZVRleHR1cmUoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveSgpOworICAgIEdMdWludCB0ZXh0dXJlKCkgY29uc3QgeyByZXR1cm4gbV90ZXh0dXJlOyB9
CisKK3Byb3RlY3RlZDoKKyAgICBHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQoKTsKKyAgICB2b2lk
IGNyZWF0ZVRleHR1cmUoKTsKKyAgICBHTHVpbnQgbV90ZXh0dXJlOworfTsKKworfQorCisjZW5k
aWYKKworI2VuZGlmCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJmYWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmNw
cAkocmV2aXNpb24gMTUzNDM1KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
c3VyZmFjZXMvZWZsL0dMVHJhbnNwb3J0U3VyZmFjZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEs
MjYzICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMTMgSW50ZWwgQ29ycG9yYXRpb24u
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIEFORCBJVFMgQ09OVFJJQlVUT1JTIGBgQVMgSVMnJwotICog
QU5EIEFOWSBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCi0gKiBUSEUgSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCi0gKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SIElUUyBDT05UUklCVVRPUlMKLSAqIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVY
RU1QTEFSWSwgT1IKLSAqIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GCi0gKiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MKLSAqIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOCi0gKiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVCAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKQotICogQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRgotICogVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25maWcuaCIKLSNp
bmNsdWRlICJHTFRyYW5zcG9ydFN1cmZhY2UuaCIKLQotI2lmIFVTRShBQ0NFTEVSQVRFRF9DT01Q
T1NJVElORykKLQotI2luY2x1ZGUgIkZsb2F0UmVjdC5oIgotCi0jaWYgVVNFKEdMWCkKLSNpbmNs
dWRlICJHTFhTdXJmYWNlLmgiCi0jZW5kaWYKLQotI2lmIFVTRShFR0wpCi0jaW5jbHVkZSAiRUdM
U3VyZmFjZS5oIgotI2VuZGlmCi0KLSNpbmNsdWRlIDx0ZXhtYXAvVGV4dHVyZU1hcHBlclNoYWRl
clByb2dyYW0uaD4KLQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1zdGF0aWMgY29uc3QgR0xmbG9h
dCB2ZXJ0aWNlc1tdID0geyAwLCAwLCAxLCAwLCAxLCAxLCAwLCAxIH07Ci1zdGF0aWMgYm9vbCB2
ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRlZCA9IGZhbHNlOwotCi1QYXNzT3duUHRyPEdMVHJhbnNw
b3J0U3VyZmFjZT4gR0xUcmFuc3BvcnRTdXJmYWNlOjpjcmVhdGVUcmFuc3BvcnRTdXJmYWNlKGNv
bnN0IEludFNpemUmIHNpemUsIFN1cmZhY2VBdHRyaWJ1dGVzIGF0dHJpYnV0ZXMpCi17Ci0gICAg
T3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZT4gc3VyZmFjZTsKLSNpZiBVU0UoR0xYKQotICAgIHN1
cmZhY2UgPSBhZG9wdFB0cihuZXcgR0xYVHJhbnNwb3J0U3VyZmFjZShzaXplLCBhdHRyaWJ1dGVz
KSk7Ci0jZWxpZiBVU0UoRUdMKQotICAgIHN1cmZhY2UgPSBFR0xUcmFuc3BvcnRTdXJmYWNlOjpj
cmVhdGVUcmFuc3BvcnRTdXJmYWNlKHNpemUsIGF0dHJpYnV0ZXMpOwotI2VuZGlmCi0KLSAgICBp
ZiAoc3VyZmFjZSAmJiBzdXJmYWNlLT5oYW5kbGUoKSAmJiBzdXJmYWNlLT5kcmF3YWJsZSgpKQot
ICAgICAgICByZXR1cm4gc3VyZmFjZS5yZWxlYXNlKCk7Ci0KLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotR0xUcmFuc3BvcnRTdXJmYWNlOjpHTFRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50U2l6
ZSYgc2l6ZSwgU3VyZmFjZUF0dHJpYnV0ZXMgYXR0cmlidXRlcykKLSAgICA6IEdMUGxhdGZvcm1T
dXJmYWNlKGF0dHJpYnV0ZXMpCi0gICAgLCBtX3ZibygwKQotICAgICwgbV92ZXJ0ZXhIYW5kbGUo
MCkKLSAgICAsIG1fYm91bmRUZXh0dXJlKDApCi17Ci0gICAgbV9yZWN0ID0gSW50UmVjdChJbnRQ
b2ludCgpLCBzaXplKTsKLX0KLQotR0xUcmFuc3BvcnRTdXJmYWNlOjp+R0xUcmFuc3BvcnRTdXJm
YWNlKCkKLXsKLX0KLQotdm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OnVwZGF0ZUNvbnRlbnRzKGNv
bnN0IHVpbnQzMl90IHRleHR1cmUpCi17Ci0gICAgaWYgKCFtX3NoYWRlclByb2dyYW0pCi0gICAg
ICAgIGluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCk7Ci0KLSAgICBkcmF3KHRleHR1cmUpOwotICAg
IHN3YXBCdWZmZXJzKCk7Ci19Ci0KLXZvaWQgR0xUcmFuc3BvcnRTdXJmYWNlOjpzZXRHZW9tZXRy
eShjb25zdCBJbnRSZWN0JiBuZXdSZWN0KQotewotICAgIG1fcmVjdCA9IG5ld1JlY3Q7Ci0KLSAg
ICBpZiAoIW1fc2hhZGVyUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgdXBkYXRlVHJh
bnNmb3JtYXRpb25NYXRyaXgoKTsKLX0KLQotdm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OmRlc3Ry
b3koKQotewotICAgIG1fcmVjdCA9IEludFJlY3QoKTsKLQotICAgIGlmICghbV9zaGFkZXJQcm9n
cmFtIHx8ICFtX2NvbnRleHQzRCkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbEJpbmRGcmFt
ZWJ1ZmZlcihHTF9GUkFNRUJVRkZFUiwgMCk7Ci0gICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RFWFRV
UkVfMkQsIDApOwotICAgIDo6Z2xCaW5kQnVmZmVyKEdMX0FSUkFZX0JVRkZFUiwgMCk7Ci0KLSAg
ICBpZiAobV92Ym8pCi0gICAgICAgIDo6Z2xEZWxldGVCdWZmZXJzKDEsICZtX3Zibyk7Ci0KLSAg
ICBpZiAobV92ZXJ0ZXhIYW5kbGUpIHsKLSAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lv
bnMoKS0+YmluZFZlcnRleEFycmF5T0VTKDApOwotICAgICAgICBtX2NvbnRleHQzRC0+Z2V0RXh0
ZW5zaW9ucygpLT5kZWxldGVWZXJ0ZXhBcnJheU9FUyhtX3ZlcnRleEhhbmRsZSk7Ci0gICAgfSBl
bHNlIGlmIChtX3NoYWRlclByb2dyYW0pCi0gICAgICAgIDo6Z2xEaXNhYmxlVmVydGV4QXR0cmli
QXJyYXkobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigpKTsKLQotICAgIDo6Z2xVc2VQ
cm9ncmFtKDApOwotCi0gICAgbV9zaGFkZXJQcm9ncmFtID0gbnVsbHB0cjsKLSAgICBtX2NvbnRl
eHQzRCA9IG51bGxwdHI7Ci0gICAgbV9ib3VuZFRleHR1cmUgPSAwOwotfQotCi12b2lkIEdMVHJh
bnNwb3J0U3VyZmFjZTo6ZHJhdyhjb25zdCB1aW50MzJfdCB0ZXh0dXJlKQotewotICAgIGlmICgh
bV92ZXJ0ZXhIYW5kbGUpCi0gICAgICAgIGJpbmRBcnJheUJ1ZmZlcigpOwotCi0gICAgaWYgKG1f
Ym91bmRUZXh0dXJlICE9IHRleHR1cmUpIHsKLSAgICAgICAgOjpnbEJpbmRUZXh0dXJlKEdMX1RF
WFRVUkVfMkQsIHRleHR1cmUpOwotICAgICAgICBtX2JvdW5kVGV4dHVyZSA9IHRleHR1cmU7Ci0g
ICAgfQotCi0gICAgOjpnbERyYXdBcnJheXMoR0xfVFJJQU5HTEVfRkFOLCAwLCA0KTsKLX0KLQot
dm9pZCBHTFRyYW5zcG9ydFN1cmZhY2U6OmJpbmRBcnJheUJ1ZmZlcigpIGNvbnN0Ci17Ci0gICAg
OjpnbEVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG1fc2hhZGVyUHJvZ3JhbS0+dmVydGV4TG9jYXRp
b24oKSk7Ci0gICAgOjpnbEJpbmRCdWZmZXIoR0xfQVJSQVlfQlVGRkVSLCBtX3Zibyk7Ci0gICAg
OjpnbFZlcnRleEF0dHJpYlBvaW50ZXIobV9zaGFkZXJQcm9ncmFtLT52ZXJ0ZXhMb2NhdGlvbigp
LCAyLCBHcmFwaGljc0NvbnRleHQzRDo6RkxPQVQsIGZhbHNlLCAwLCAwKTsKLX0KLQotdm9pZCBH
TFRyYW5zcG9ydFN1cmZhY2U6OnVwZGF0ZVRyYW5zZm9ybWF0aW9uTWF0cml4KCkKLXsKLSAgICBp
ZiAoIW1fc2hhZGVyUHJvZ3JhbSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgOjpnbFZpZXdwb3J0
KG1fcmVjdC54KCksIG1fcmVjdC55KCksIG1fcmVjdC53aWR0aCgpLCBtX3JlY3QuaGVpZ2h0KCkp
OwotICAgIG1fYm91bmRUZXh0dXJlID0gMDsKLQotICAgIEZsb2F0UmVjdCB0YXJnZXRSZWN0ID0g
RmxvYXRSZWN0KG1fcmVjdCk7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggaWRlbnRpdHlNYXRy
aXg7Ci0gICAgVHJhbnNmb3JtYXRpb25NYXRyaXggbWF0cml4ID0gVHJhbnNmb3JtYXRpb25NYXRy
aXgoaWRlbnRpdHlNYXRyaXgpLm11bHRpcGx5KFRyYW5zZm9ybWF0aW9uTWF0cml4OjpyZWN0VG9S
ZWN0KEZsb2F0UmVjdCgwLCAwLCAxLCAxKSwgdGFyZ2V0UmVjdCkpOwotICAgIG1fc2hhZGVyUHJv
Z3JhbS0+c2V0TWF0cml4KG1fc2hhZGVyUHJvZ3JhbS0+bW9kZWxWaWV3TWF0cml4TG9jYXRpb24o
KSwgbWF0cml4KTsKLQotICAgIC8vIFRha2VuIGZyb20gVGV4dHVyZU1hcHBlckdMLgotICAgIGNv
bnN0IGZsb2F0IG5lYXJWYWx1ZSA9IDk5OTk5OTk7Ci0gICAgY29uc3QgZmxvYXQgZmFyVmFsdWUg
PSAtOTk5OTk7Ci0KLSAgICBUcmFuc2Zvcm1hdGlvbk1hdHJpeCBwcm9qZWN0aW9uTWF0cml4ID0g
VHJhbnNmb3JtYXRpb25NYXRyaXgoMi4wIC8gZmxvYXQobV9yZWN0LndpZHRoKCkpLCAwLCAwLCAw
LAotICAgICAgICAwLCAoLTIuMCkgLyBmbG9hdChtX3JlY3QuaGVpZ2h0KCkpLCAwLCAwLAotICAg
ICAgICAwLCAwLCAtMi5mIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMCwKLSAgICAgICAgLTEs
IDEsIC0oZmFyVmFsdWUgKyBuZWFyVmFsdWUpIC8gKGZhclZhbHVlIC0gbmVhclZhbHVlKSwgMSk7
Ci0KLSAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeChtX3NoYWRlclByb2dyYW0tPnByb2pl
Y3Rpb25NYXRyaXhMb2NhdGlvbigpLCBwcm9qZWN0aW9uTWF0cml4KTsKLX0KLQotdm9pZCBHTFRy
YW5zcG9ydFN1cmZhY2U6OmluaXRpYWxpemVTaGFkZXJQcm9ncmFtKCkKLXsKLSAgICBpZiAoIW1f
Y29udGV4dDNEKQotICAgICAgICBtX2NvbnRleHQzRCA9IEdyYXBoaWNzQ29udGV4dDNEOjpjcmVh
dGVGb3JDdXJyZW50R0xDb250ZXh0KCk7Ci0KLSAgICB2ZXJ0ZXhBcnJheU9iamVjdFN1cHBvcnRl
ZCA9IG1fY29udGV4dDNELT5nZXRFeHRlbnNpb25zKCktPnN1cHBvcnRzKCJHTF9PRVNfdmVydGV4
X2FycmF5X29iamVjdCIpOwotCi0gICAgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW06Ok9wdGlv
bnMgb3B0aW9ucyA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpUZXh0dXJlOwotICAgIG1f
c2hhZGVyUHJvZ3JhbSA9IFRleHR1cmVNYXBwZXJTaGFkZXJQcm9ncmFtOjpjcmVhdGUobV9jb250
ZXh0M0QsIG9wdGlvbnMpOwotCi0gICAgOjpnbFVzZVByb2dyYW0obV9zaGFkZXJQcm9ncmFtLT5w
cm9ncmFtSUQoKSk7Ci0gICAgOjpnbFVuaWZvcm0xaShtX3NoYWRlclByb2dyYW0tPnNhbXBsZXJM
b2NhdGlvbigpLCAwKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyaShHTF9URVhUVVJFXzJELCBHTF9U
RVhUVVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdM
X1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpn
bFRleFBhcmFtZXRlcmkoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1Q
X1RPX0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJpKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRV
UkVfV1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLQotICAgIFRyYW5zZm9ybWF0aW9uTWF0cml4
IGZsaXBUcmFuc2Zvcm07Ci0gICAgZmxpcFRyYW5zZm9ybS5mbGlwWSgpOwotICAgIGZsaXBUcmFu
c2Zvcm0udHJhbnNsYXRlKDAsIC0xKTsKLSAgICBtX3NoYWRlclByb2dyYW0tPnNldE1hdHJpeCht
X3NoYWRlclByb2dyYW0tPnRleHR1cmVTcGFjZU1hdHJpeExvY2F0aW9uKCksIGZsaXBUcmFuc2Zv
cm0pOwotCi0gICAgOjpnbFVuaWZvcm0xZihtX3NoYWRlclByb2dyYW0tPm9wYWNpdHlMb2NhdGlv
bigpLCAxLjApOwotCi0gICAgaWYgKCFtX3ZibykgewotICAgICAgICA6OmdsR2VuQnVmZmVycygx
LCAmbV92Ym8pOwotICAgICAgICA6OmdsQmluZEJ1ZmZlcihHTF9BUlJBWV9CVUZGRVIsIG1fdmJv
KTsKLSAgICAgICAgOjpnbEJ1ZmZlckRhdGEoR0xfQVJSQVlfQlVGRkVSLCBzaXplb2YoR0MzRGZs
b2F0KSAqIDgsIHZlcnRpY2VzLCBHTF9TVEFUSUNfRFJBVyk7Ci0gICAgfQotCi0gICAgLy8gQ3Jl
YXRlIGFuZCBzZXQtdXAgdmVydGV4IGFycmF5IG9iamVjdC4KLSAgICBpZiAodmVydGV4QXJyYXlP
YmplY3RTdXBwb3J0ZWQpIHsKLSAgICAgICAgbV92ZXJ0ZXhIYW5kbGUgPSBtX2NvbnRleHQzRC0+
Z2V0RXh0ZW5zaW9ucygpLT5jcmVhdGVWZXJ0ZXhBcnJheU9FUygpOwotCi0gICAgICAgIGlmICht
X3ZlcnRleEhhbmRsZSkgewotICAgICAgICAgICAgbV9jb250ZXh0M0QtPmdldEV4dGVuc2lvbnMo
KS0+YmluZFZlcnRleEFycmF5T0VTKG1fdmVydGV4SGFuZGxlKTsKLSAgICAgICAgICAgIGJpbmRB
cnJheUJ1ZmZlcigpOwotICAgICAgICB9Ci0gICAgfQotCi0gICAgdXBkYXRlVHJhbnNmb3JtYXRp
b25NYXRyaXgoKTsKLX0KLQotUGFzc093blB0cjxHTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ+IEdM
VHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6Y3JlYXRlVHJhbnNwb3J0U3VyZmFjZUNsaWVudChjb25z
dCBQbGF0Zm9ybUJ1ZmZlckhhbmRsZSBoYW5kbGUsIGNvbnN0IEludFNpemUmIHNpemUsIGJvb2wg
aGFzQWxwaGEpCi17Ci0gICAgT3duUHRyPEdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudD4gY2xpZW50
OwotI2lmIFVTRShHTFgpCi0gICAgY2xpZW50ID0gYWRvcHRQdHIobmV3IEdMWFRyYW5zcG9ydFN1
cmZhY2VDbGllbnQoaGFuZGxlLCBoYXNBbHBoYSkpOwotICAgIFVOVVNFRF9QQVJBTShzaXplKTsK
LSNlbHNlCi0gICAgY2xpZW50ID0gRUdMVHJhbnNwb3J0U3VyZmFjZTo6Y3JlYXRlVHJhbnNwb3J0
U3VyZmFjZUNsaWVudChoYW5kbGUsIHNpemUsIGhhc0FscGhhKTsKLSNlbmRpZgotCi0gICAgaWYg
KCFjbGllbnQgfHwgIWNsaWVudC0+dGV4dHVyZSgpKSB7Ci0gICAgICAgIExPR19FUlJPUigiRmFp
bGVkIHRvIENyZWF0ZSBUcmFuc3BvcnQgU3VyZmFjZSBjbGllbnQuIik7Ci0gICAgICAgIHJldHVy
biBudWxscHRyOwotICAgIH0KLQotICAgIHJldHVybiBjbGllbnQucmVsZWFzZSgpOwotfQotCi0K
LUdMVHJhbnNwb3J0U3VyZmFjZUNsaWVudDo6R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCkKLSAg
ICA6IG1fdGV4dHVyZSgwKQotewotfQotCi1HTFRyYW5zcG9ydFN1cmZhY2VDbGllbnQ6On5HTFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQoKQotewotfQotCi12b2lkIEdMVHJhbnNwb3J0U3VyZmFjZUNs
aWVudDo6ZGVzdHJveSgpCi17Ci0gICAgaWYgKG1fdGV4dHVyZSkgewotICAgICAgICBnbEJpbmRU
ZXh0dXJlKEdMX1RFWFRVUkVfMkQsIDApOwotICAgICAgICBnbERlbGV0ZVRleHR1cmVzKDEsICZt
X3RleHR1cmUpOwotICAgICAgICBtX3RleHR1cmUgPSAwOwotICAgIH0KLX0KLQotdm9pZCBHTFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQ6OnByZXBhcmVUZXh0dXJlKCkKLXsKLX0KLQotdm9pZCBHTFRy
YW5zcG9ydFN1cmZhY2VDbGllbnQ6OmNyZWF0ZVRleHR1cmUoKQotewotICAgIDo6Z2xHZW5UZXh0
dXJlcygxLCAmbV90ZXh0dXJlKTsKLSAgICA6OmdsQmluZFRleHR1cmUoR0xfVEVYVFVSRV8yRCwg
bV90ZXh0dXJlKTsKLSAgICA6OmdsVGV4UGFyYW1ldGVyZihHTF9URVhUVVJFXzJELCBHTF9URVhU
VVJFX01JTl9GSUxURVIsIEdMX05FQVJFU1QpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RF
WFRVUkVfMkQsIEdMX1RFWFRVUkVfTUFHX0ZJTFRFUiwgR0xfTkVBUkVTVCk7Ci0gICAgOjpnbFRl
eFBhcmFtZXRlcmYoR0xfVEVYVFVSRV8yRCwgR0xfVEVYVFVSRV9XUkFQX1MsIEdMX0NMQU1QX1RP
X0VER0UpOwotICAgIDo6Z2xUZXhQYXJhbWV0ZXJmKEdMX1RFWFRVUkVfMkQsIEdMX1RFWFRVUkVf
V1JBUF9ULCBHTF9DTEFNUF9UT19FREdFKTsKLX0KLQotfQotCi0jZW5kaWYKSW5kZXg6IFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZh
Y2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9zdXJm
YWNlcy9lZmwvR0xUcmFuc3BvcnRTdXJmYWNlLmgJKHJldmlzaW9uIDE1MzQzNSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL3N1cmZhY2VzL2VmbC9HTFRyYW5zcG9ydFN1cmZh
Y2UuaAkod29ya2luZyBjb3B5KQpAQCAtMSw4MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChD
KSAyMDEzIEludGVsIENvcnBvcmF0aW9uLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgot
ICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBBTkQgSVRTIENP
TlRSSUJVVE9SUyBgYEFTIElTJycKLSAqIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJB
TlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAotICogVEhFIElNUExJRUQgV0FS
UkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgot
ICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBP
UiBJVFMgQ09OVFJJQlVUT1JTCi0gKiBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SCi0gKiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRgotICog
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTCi0gKiBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTgotICogQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQgKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkKLSAq
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YKLSAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KLSAqLwot
Ci0jaWZuZGVmIEdMVHJhbnNwb3J0U3VyZmFjZV9oCi0jZGVmaW5lIEdMVHJhbnNwb3J0U3VyZmFj
ZV9oCi0KLSNpZiBVU0UoQUNDRUxFUkFURURfQ09NUE9TSVRJTkcpCi0KLSNpbmNsdWRlICJHTFBs
YXRmb3JtU3VyZmFjZS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+Ci0KLW5hbWVzcGFj
ZSBXZWJDb3JlIHsKLQotY2xhc3MgVGV4dHVyZU1hcHBlclNoYWRlclByb2dyYW07Ci0KLWNsYXNz
IEdMVHJhbnNwb3J0U3VyZmFjZSA6IHB1YmxpYyBHTFBsYXRmb3JtU3VyZmFjZSB7Ci0KLXB1Ymxp
YzoKLSAgICAvLyBDcmVhdGVzIGEgR0wgc3VyZmFjZSB3aG9zZSByZXN1bHRzIGNhbiBiZSB0cmFu
c3BvcnRlZCB0byB0aGUgVUkgcHJvY2VzcyBmb3IgZGlzcGxheS4KLSAgICBzdGF0aWMgUGFzc093
blB0cjxHTFRyYW5zcG9ydFN1cmZhY2U+IGNyZWF0ZVRyYW5zcG9ydFN1cmZhY2UoY29uc3QgSW50
U2l6ZSYsIFN1cmZhY2VBdHRyaWJ1dGVzID0gR0xQbGF0Zm9ybVN1cmZhY2U6OkRlZmF1bHQpOwot
ICAgIHZpcnR1YWwgfkdMVHJhbnNwb3J0U3VyZmFjZSgpOwotICAgIHZpcnR1YWwgdm9pZCB1cGRh
dGVDb250ZW50cyhjb25zdCB1aW50MzJfdCkgT1ZFUlJJREU7Ci0gICAgdmlydHVhbCB2b2lkIHNl
dEdlb21ldHJ5KGNvbnN0IEludFJlY3QmKSBPVkVSUklERTsKLSAgICB2aXJ0dWFsIHZvaWQgZGVz
dHJveSgpIE9WRVJSSURFOwotCi1wcm90ZWN0ZWQ6Ci0gICAgR0xUcmFuc3BvcnRTdXJmYWNlKGNv
bnN0IEludFNpemUmLCBTdXJmYWNlQXR0cmlidXRlcyk7Ci0gICAgdm9pZCB1cGRhdGVUcmFuc2Zv
cm1hdGlvbk1hdHJpeCgpOwotICAgIHZvaWQgYmluZEFycmF5QnVmZmVyKCkgY29uc3Q7Ci0gICAg
dm9pZCBpbml0aWFsaXplU2hhZGVyUHJvZ3JhbSgpOwotICAgIHZvaWQgZHJhdyhjb25zdCB1aW50
MzJfdCk7Ci0KLSAgICBSZWZQdHI8R3JhcGhpY3NDb250ZXh0M0Q+IG1fY29udGV4dDNEOwotICAg
IFJlZlB0cjxUZXh0dXJlTWFwcGVyU2hhZGVyUHJvZ3JhbT4gbV9zaGFkZXJQcm9ncmFtOwotICAg
IFBsYXRmb3JtM0RPYmplY3QgbV92Ym87Ci0gICAgUGxhdGZvcm0zRE9iamVjdCBtX3ZlcnRleEhh
bmRsZTsKLSAgICBHTHVpbnQgbV9ib3VuZFRleHR1cmU7Ci19OwotCi1jbGFzcyBHTFRyYW5zcG9y
dFN1cmZhY2VDbGllbnQgewotCi1wdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NPd25QdHI8R0xUcmFu
c3BvcnRTdXJmYWNlQ2xpZW50PiBjcmVhdGVUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KGNvbnN0IFBs
YXRmb3JtQnVmZmVySGFuZGxlLCBjb25zdCBJbnRTaXplJiwgYm9vbCk7Ci0gICAgdmlydHVhbCB+
R0xUcmFuc3BvcnRTdXJmYWNlQ2xpZW50KCk7Ci0gICAgdmlydHVhbCB2b2lkIHByZXBhcmVUZXh0
dXJlKCk7Ci0gICAgdmlydHVhbCB2b2lkIGRlc3Ryb3koKTsKLSAgICBHTHVpbnQgdGV4dHVyZSgp
IGNvbnN0IHsgcmV0dXJuIG1fdGV4dHVyZTsgfQotCi1wcm90ZWN0ZWQ6Ci0gICAgR0xUcmFuc3Bv
cnRTdXJmYWNlQ2xpZW50KCk7Ci0gICAgdm9pZCBjcmVhdGVUZXh0dXJlKCk7Ci0gICAgR0x1aW50
IG1fdGV4dHVyZTsKLX07Ci0KLX0KLQotI2VuZGlmCi0KLSNlbmRpZgo=
</data>

          </attachment>
      

    </bug>

</bugzilla>