<?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>116416</bug_id>
          
          <creation_ts>2013-05-19 15:12:49 -0700</creation_ts>
          <short_desc>[Qt] Move Qt port off legacy clipboard</short_desc>
          <delta_ts>2013-06-02 21:53:30 -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>Platform</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>115980</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>allan.jensen</cc>
    
    <cc>ararunprasad</cc>
    
    <cc>arurajku</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>hausmann</cc>
    
    <cc>jturcotte</cc>
    
    <cc>vivekg</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>891068</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2013-05-19 15:12:49 -0700</bug_when>
    <thetext>We’ve done the move for Mac, EFL, and GTK, and we’ve started on iOS. But we need to do this for Qt.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896109</commentid>
    <comment_count>1</comment_count>
      <attachid>203491</attachid>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-06-01 10:05:20 -0700</bug_when>
    <thetext>Created attachment 203491
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896117</commentid>
    <comment_count>2</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-06-01 11:10:31 -0700</bug_when>
    <thetext>Currently Some Layout tests related to pasteboard is crashing :( I will upload a new patch once I solve those,

But please review patch whether attached process is meeting the bugs expectation :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896193</commentid>
    <comment_count>3</comment_count>
      <attachid>203512</attachid>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-06-02 04:22:46 -0700</bug_when>
    <thetext>Created attachment 203512
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896194</commentid>
    <comment_count>4</comment_count>
    <who name="Arunprasad Rajkumar">arurajku</who>
    <bug_when>2013-06-02 04:24:07 -0700</bug_when>
    <thetext>Attached patch completes layout tests associated with clipboard :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896297</commentid>
    <comment_count>5</comment_count>
      <attachid>203512</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-02 21:53:27 -0700</bug_when>
    <thetext>Comment on attachment 203512
Patch

Clearing flags on attachment: 203512

Committed r151091: &lt;http://trac.webkit.org/changeset/151091&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>896298</commentid>
    <comment_count>6</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2013-06-02 21:53:30 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203491</attachid>
            <date>2013-06-01 10:05:20 -0700</date>
            <delta_ts>2013-06-02 04:22:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116416-20130601223350.patch</filename>
            <type>text/plain</type>
            <size>34624</size>
            <attacher name="Arunprasad Rajkumar">arurajku</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3ZDRjMjMzNjgzMjE4
YTc3NjhiYjM0ZDVkYWQzZjQzODk3YTcwZC4uZWJiNzYxYjY0Zjg5OTRiZjcyNjMwYzMwNjhjN2Y3
M2UyNjBmNGRiMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA2LTAxICBBcnVu
cHJhc2FkIFJhamt1bWFyICA8YXJ1cmFqa3VAY2lzY28uY29tPgorCisgICAgICAgIFtRdF0gTW92
ZSBRdCBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAq
IFRhcmdldC5wcmk6CisgICAgICAgICogZG9tL0NsaXBib2FyZC5oOgorICAgICAgICAqIGVkaXRp
bmcvcXQvRWRpdG9yUXQuY3BwOiBSZW1vdmVkLgorICAgICAgICAqIHBhZ2UvcXQvRXZlbnRIYW5k
bGVyUXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFnZ2lu
Z0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6Y2xpcGJvYXJkRGF0YSk6CisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjppbnZhbGlkYXRlV3JpdGFibGVEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OmlzRm9yRHJhZ0FuZERyb3ApOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6aXNGb3JDb3B5QW5kUGFzdGUpOgorICAgICAgICAqIHBsYXRmb3JtL2d0ay9DbGlwYm9hcmRH
dGsuY3BwOgorICAgICAgICAqIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6OkNsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6
OkNsaXBib2FyZDo6ZGVjbGFyZUFuZFdyaXRlRHJhZ0ltYWdlKToKKyAgICAgICAgKiBwbGF0Zm9y
bS9xdC9DbGlwYm9hcmRRdC5oOiBSZW1vdmVkLgorICAgICAgICAqIHBsYXRmb3JtL3F0L1Bhc3Rl
Ym9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjppc1RleHRNaW1lVHlwZSk6CisgICAgICAg
IChXZWJDb3JlOjppc0h0bWxNaW1lVHlwZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpjcmVhdGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y3JlYXRlRm9yQ29weUFu
ZFBhc3RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZVByaXZhdGUpOgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3ApOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpnZW5lcmFsUGFzdGVib2FyZCk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjppc1Nl
bGVjdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6c2V0U2VsZWN0aW9u
TW9kZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkRGF0YSk6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpoYXNEYXRhKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OmNsZWFyKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcp
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVTdHJpbmcpOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6cmVhZEZpbGVuYW1lcyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpzZXREcmFn
SW1hZ2UpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVQYXN0ZWJvYXJkKToK
KwogMjAxMy0wNS0zMSAgQW5kZXJzIENhcmxzc29uICA8YW5kZXJzY2FAYXBwbGUuY29tPgogCiAg
ICAgICAgIFRha2UgdGhlIG5vcm1hbCBOU1ZpZXcgY29kZSBwYXRoIHdoZW4gZHJhd2luZyBpbnRv
IGFuIGluY2x1c2l2ZSBsYXllcgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZwppbmRleCBlMTIxMDc5NzgwNmJiZTdjZjRk
OTNkZGQ2N2I3OTdiOWFmNmZkN2JmLi4xZGQzNTVhYzIzMGYyMGY0NjZlMGU1YzI0NjRlMzI2Nzc1
MTQ0MjZkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L3F0L0NoYW5nZUxvZworKysgYi9Tb3Vy
Y2UvV2ViS2l0L3F0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEzLTA2LTAxICBBcnVu
cHJhc2FkIFJhamt1bWFyICA8YXJ1cmFqa3VAY2lzY28uY29tPgorCisgICAgICAgIFtRdF0gTW92
ZSBRdCBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpEcmFnQ2xpZW50UXQ6OnN0YXJ0RHJhZyk6CisKIDIwMTMtMDUt
MjkgIExpYW5nIFFpICA8bGlhbmcucWlAZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gQWRkIGFs
bCBwbHVnaW5zLnFtbHR5cGVzIGZpbGVzIGFuZCB1cGRhdGUgcW1sZGlyIGZpbGVzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
aW5kZXggNzhjMDIyOGM2MzhjOTg2MWU2MDYyNmRmOTRlYTM1NmQ1OGJkMjI4Yy4uYjI5ODA3YTE1
MWNkZmI2MTY4OTI0YWY5NTkxNWU0NzE3ODJjOTU3NSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEz
IEBACisyMDEzLTA2LTAxICBBcnVucHJhc2FkIFJhamt1bWFyICA8YXJ1cmFqa3VAY2lzY28uY29t
PgorCisgICAgICAgIFtRdF0gTW92ZSBRdCBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MTYKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVudFF0LmNwcDoKKyAgICAgICAgKFdlYktpdDo6
V2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKToKKwogMjAxMy0wNS0zMSAgR3l1eW91bmcgS2ltICA8
Z3l1eW91bmcua2ltQHNhbXN1bmcuY29tPgogCiAgICAgICAgIFtFRkxdW1dLMl0gQWRkIGEgbnVs
bCBjaGVja2luZyBjb25kaXRpb24gdG8gaW4gaGlkZSgpIG9mIEV3a0NvbnRleHRNZW51CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9UYXJnZXQucHJpIGIvU291cmNlL1dlYkNvcmUvVGFyZ2V0
LnByaQppbmRleCBlNTg5ZmMwYzI0ZDI5YTRkNWVlNGRjZTkxMjZiZTk3ZGQ2OTA3NjZiLi43OTlk
MGE1NTA1ZjY3MTI4N2EyYmRiMTdkOGQ1MTZiYzA3ZTI3YjVhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9UYXJnZXQucHJpCisrKyBiL1NvdXJjZS9XZWJDb3JlL1RhcmdldC5wcmkKQEAgLTIz
NDIsNyArMjM0Miw2IEBAIEhFQURFUlMgKz0gXAogICAgIHBsYXRmb3JtL1BsYXRmb3JtVG91Y2hQ
b2ludC5oIFwKICAgICBwbGF0Zm9ybS9Qb3B1cE1lbnUuaCBcCiAgICAgcGxhdGZvcm0vUmVmZXJy
ZXJQb2xpY3kuaCBcCi0gICAgcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCBcCiAgICAgcGxhdGZv
cm0vcXQvUVdlYlBhZ2VDbGllbnQuaCBcCiAgICAgcGxhdGZvcm0vcXQvUVN0eWxlRmFjYWRlLmgg
XAogICAgIHBsYXRmb3JtL3F0L1JlbmRlclRoZW1lUVN0eWxlLmggXApAQCAtMjkwMiw3ICsyOTAx
LDYgQEAgU09VUkNFUyArPSBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9Qcm94eVNlcnZlclF0
LmNwcCBcCiAgICAgcGxhdGZvcm0vbmV0d29yay9xdC9RdE1JTUVUeXBlU25pZmZlci5jcHAgXAog
ICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUU5ldHdvcmtSZXBseUhhbmRsZXIuY3BwIFwKLSAgICBl
ZGl0aW5nL3F0L0VkaXRvclF0LmNwcCBcCiAgICAgcGxhdGZvcm0vQ3Vyc29yLmNwcCBcCiAgICAg
cGxhdGZvcm0vQ29udGV4dE1lbnUuY3BwIFwKICAgICBwbGF0Zm9ybS9Db250ZXh0TWVudUl0ZW0u
Y3BwIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaCBiL1NvdXJj
ZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaAppbmRleCA4MjAwYzliZmI1YzA0Nzg4YjU4ZmYzZDY4
YTM3NzE0ODUwODBhNDMxLi5jNWQ0NzJlZTRmYjkyZjUwNGY4YjM2MmI1NjM5ZTEzMGE1ODk3ZjRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvZG9tL0NsaXBib2FyZC5oCkBAIC0zNCw3ICszNCw3IEBACiAvLyBUaGlzIERPTSBv
YmplY3Qgbm93IHdvcmtzIGJ5IGNhbGxpbmcgdGhyb3VnaCB0byBjbGFzc2VzIGluIHRoZSBwbGF0
Zm9ybSBsYXllci4KIC8vIFNwZWNpZmljYWxseSwgdGhlIGNsYXNzIGN1cnJlbnRseSBuYW1lZCBQ
YXN0ZWJvYXJkLiBUaGUgbGVnYWN5IHN0eWxlIGluc3RlYWQKIC8vIHVzZXMgdGhpcyBhcyBhbiBh
YnN0cmFjdCBiYXNlIGNsYXNzLgotI2RlZmluZSBXVEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFD
VF9DTElQQk9BUkRfQ0xBU1MgKFBMQVRGT1JNKElPUykgfHwgUExBVEZPUk0oUVQpKQorI2RlZmlu
ZSBXVEZfVVNFX0xFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MgUExBVEZPUk0o
SU9TKQogCiAjaWYgVVNFKExFR0FDWV9TVFlMRV9BQlNUUkFDVF9DTElQQk9BUkRfQ0xBU1MpCiAj
ZGVmaW5lIExFR0FDWV9WSVJUVUFMIHZpcnR1YWwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvcXQvRWRpdG9yUXQuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9xdC9FZGl0
b3JRdC5jcHAKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDRkNzJkMzkyOGZjNTU4YmMw
YWE1NzNlZjBiYTA5NGRmYWU3OTFhYTkuLjAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAKKysr
IC9kZXYvbnVsbApAQCAtMSw0MSArMCwwIEBACi0vKgotICogQ29weXJpZ2h0IChDKSAyMDA2IFph
Y2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KLSAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBJbmMu
IEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Ci0gKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKLSAq
IGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgotICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgotICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQotICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0gKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKLSAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQotICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCi0gKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCi0gKi8KLQotI2luY2x1ZGUgImNvbmZpZy5oIgotI2luY2x1
ZGUgIkVkaXRvci5oIgotCi0jaW5jbHVkZSAiQ2xpcGJvYXJkQWNjZXNzUG9saWN5LmgiCi0jaW5j
bHVkZSAiQ2xpcGJvYXJkUXQuaCIKLSNpbmNsdWRlICJEb2N1bWVudC5oIgotCi1uYW1lc3BhY2Ug
V2ViQ29yZSB7Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBFZGl0b3I6Om5ld0dlbmVyYWxDbGlw
Ym9hcmQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgRnJhbWUqIGZyYW1lKQotewotICAg
IHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKHBvbGljeSwgZnJhbWUpOwotfQotCi19IC8vIG5h
bWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50
SGFuZGxlclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3Bw
CmluZGV4IDBmNzgwNmE1M2I3ZmMxNTQ0YzBjNTcyMWQ2MjI0MDMxOWVjNmMyODAuLmY0NWY4MWRj
NzRiMjQ2ZTBiOTg1ZTEwMDQyZDczMzMyM2NmY2ZjODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BhZ2Uv
cXQvRXZlbnRIYW5kbGVyUXQuY3BwCkBAIC0yOCw3ICsyOCw3IEBACiAjaW5jbHVkZSAiY29uZmln
LmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAKLSNpbmNsdWRlICJDbGlwYm9hcmRRdC5o
IgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2luY2x1ZGUgIkN1cnNvci5oIgogI2luY2x1ZGUg
IkRvY3VtZW50LmgiCiAjaW5jbHVkZSAiRXZlbnROYW1lcy5oIgpAQCAtOTYsNyArOTYsNyBAQCBi
b29sIEV2ZW50SGFuZGxlcjo6cGFzc1doZWVsRXZlbnRUb1dpZGdldChjb25zdCBQbGF0Zm9ybVdo
ZWVsRXZlbnQmIGV2ZW50LCBXaWRnZQogCiBQYXNzUmVmUHRyPENsaXBib2FyZD4gRXZlbnRIYW5k
bGVyOjpjcmVhdGVEcmFnZ2luZ0NsaXBib2FyZCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIENsaXBi
b2FyZFF0OjpjcmVhdGUoQ2xpcGJvYXJkV3JpdGFibGUsIG1fZnJhbWUsIENsaXBib2FyZDo6RHJh
Z0FuZERyb3ApOworICAgIHJldHVybiBDbGlwYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKCk7
CiB9CiAKIGJvb2wgRXZlbnRIYW5kbGVyOjpwYXNzTW91c2VQcmVzc0V2ZW50VG9TdWJmcmFtZShN
b3VzZUV2ZW50V2l0aEhpdFRlc3RSZXN1bHRzJiBtZXYsIEZyYW1lKiBzdWJmcmFtZSkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBkODAwNTAxOTFiM2U0YTU0MTdmODU2NWZi
NDY0ZWNhZmVkNzNiZmJiLi45OWI2NjIwZTA1NWYxYzRmYzBlYjhiNWExOTkxZjA3MmMyMjFmNDIz
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0zNyw2ICszNywxMCBAQAog
dHlwZWRlZiBzdHJ1Y3QgX0d0a0NsaXBib2FyZCBHdGtDbGlwYm9hcmQ7CiAjZW5kaWYKIAorI2lm
IFBMQVRGT1JNKFFUKQorI2luY2x1ZGUgPFFNaW1lRGF0YT4KKyNlbmRpZgorCiAjaWYgUExBVEZP
Uk0oV0lOKQogI2luY2x1ZGUgIkNPTVB0ci5oIgogI2luY2x1ZGUgIldDRGF0YU9iamVjdC5oIgpA
QCAtMTA0LDYgKzEwOCwxNCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxEYXRhT2JqZWN0R3Rr
PiBkYXRhT2JqZWN0KCkgY29uc3Q7CiAjZW5kaWYKIAorI2lmIFBMQVRGT1JNKFFUKQorICAgIHN0
YXRpYyBQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZShjb25zdCBRTWltZURhdGEqIHJlYWRh
YmxlQ2xpcGJvYXJkID0gMCwgYm9vbCBpc0ZvckRyYWdBbmREcm9wID0gZmFsc2UpOworICAgIFFN
aW1lRGF0YSogY2xpcGJvYXJkRGF0YSgpIGNvbnN0IHsgcmV0dXJuIG1fd3JpdGFibGVEYXRhOyB9
CisgICAgdm9pZCBpbnZhbGlkYXRlV3JpdGFibGVEYXRhKCkgY29uc3QgeyBtX3dyaXRhYmxlRGF0
YSA9IDA7IH0KKyAgICBib29sIGlzRm9yRHJhZ0FuZERyb3AoKSBjb25zdCB7IHJldHVybiBtX2lz
Rm9yRHJhZ0FuZERyb3A7IH0KKyAgICBib29sIGlzRm9yQ29weUFuZFBhc3RlKCkgY29uc3QgeyBy
ZXR1cm4gIW1faXNGb3JEcmFnQW5kRHJvcDsgfQorI2VuZGlmCisKICAgICAvLyBEZXByZWNhdGVk
LiBVc2UgY3JlYXRlRm9yQ29weUFuZFBhc3RlIGluc3RlYWQuCiAgICAgc3RhdGljIFBhc3RlYm9h
cmQqIGdlbmVyYWxQYXN0ZWJvYXJkKCk7CiAKQEAgLTE2NSw3ICsxNzcsNyBAQCBwdWJsaWM6CiAg
ICAgdm9pZCB3cml0ZUltYWdlVG9EYXRhT2JqZWN0KEVsZW1lbnQqLCBjb25zdCBLVVJMJik7CiAj
ZW5kaWYKIAotI2lmIFBMQVRGT1JNKEdUSykKKyNpZiBQTEFURk9STShHVEspIHx8IFBMQVRGT1JN
KFFUKQogICAgIH5QYXN0ZWJvYXJkKCk7CiAjZW5kaWYKIApAQCAtMTc3LDYgKzE4OSwxMCBAQCBw
cml2YXRlOgogICAgIFBhc3RlYm9hcmQoR3RrQ2xpcGJvYXJkKik7CiAjZW5kaWYKIAorI2lmIFBM
QVRGT1JNKFFUKQorICAgIFBhc3RlYm9hcmQoY29uc3QgUU1pbWVEYXRhKiAsIGJvb2wpOworI2Vu
ZGlmICAgIAorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGV4cGxpY2l0IFBhc3RlYm9hcmQoSURh
dGFPYmplY3QqKTsKICAgICBleHBsaWNpdCBQYXN0ZWJvYXJkKFdDRGF0YU9iamVjdCopOwpAQCAt
MjA1LDcgKzIyMSwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQTEFURk9STShRVCkKKyAg
ICBjb25zdCBRTWltZURhdGEqIHJlYWREYXRhKCkgY29uc3Q7CisKICAgICBib29sIG1fc2VsZWN0
aW9uTW9kZTsKKyAgICBjb25zdCBRTWltZURhdGEqIG1fcmVhZGFibGVEYXRhOworICAgIG11dGFi
bGUgUU1pbWVEYXRhKiBtX3dyaXRhYmxlRGF0YTsKKyAgICBib29sIG1faXNGb3JEcmFnQW5kRHJv
cDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3RrL0NsaXBib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAppbmRleCBkMzg4YjViNmMxNzBmN2NkMzVlYzQwN2VmMWFh
ZWFmNGM0ZjZiMjc5Li42NzkyZTgzZDUwNjQ3MTJhMDMyOTIwNDFmNmQ0ODkwZTdhY2IzODRlIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvQ2xpcGJvYXJkR3RrLmNwcApAQCAtMjIs
NiArMjIsNyBAQAogI2luY2x1ZGUgIkVkaXRvci5oIgogI2luY2x1ZGUgIkVsZW1lbnQuaCIKICNp
bmNsdWRlICJGcmFtZS5oIgorI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2Fy
ZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHAKaW5kZXggYTQwYWJlNTEwNWJkZDgzZDZmYmQwMGZkNmY3NTQ5NzIxYzAw
MjViMy4uZjJlNjQxMzUyMzU3NzUwZDM1ZGMxZTgzYTlkODY4MjA5ZGZkYzQ0NyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNwcApAQCAtMyw2ICszLDcgQEAKICAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQogICogQ29weXJpZ2h0IChDKSAyMDEwIFNlbmNoYSwgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEzIENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjcsMzQ2ICsyOCwzNyBAQAogICovCiAKICNpbmNsdWRlICJjb25maWcuaCIKLSNpbmNsdWRlICJD
bGlwYm9hcmRRdC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogCiAjaW5jbHVkZSAiQ2FjaGVk
SW1hZ2UuaCIKLSNpbmNsdWRlICJEYXRhVHJhbnNmZXJJdGVtTGlzdFF0LmgiCiAjaW5jbHVkZSAi
RG9jdW1lbnQuaCIKLSNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgog
I2luY2x1ZGUgIkVsZW1lbnQuaCIKLSNpbmNsdWRlICJGaWxlTGlzdC5oIgogI2luY2x1ZGUgIkZy
YW1lLmgiCi0jaW5jbHVkZSAiSFRNTE5hbWVzLmgiCi0jaW5jbHVkZSAiSFRNTFBhcnNlcklkaW9t
cy5oIgogI2luY2x1ZGUgIkltYWdlLmgiCi0jaW5jbHVkZSAiSW50UG9pbnQuaCIKLSNpbmNsdWRl
ICJLVVJMLmgiCi0jaW5jbHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKLSNpbmNsdWRlICJSYW5nZS5o
IgotI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCi0jaW5jbHVkZSAibWFya3VwLmgiCi0jaW5jbHVk
ZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgotI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5o
PgotCi0jaW5jbHVkZSA8UUNsaXBib2FyZD4KLSNpbmNsdWRlIDxRR3VpQXBwbGljYXRpb24+Ci0j
aW5jbHVkZSA8UUxpc3Q+Ci0jaW5jbHVkZSA8UU1pbWVEYXRhPgotI2luY2x1ZGUgPFFTdHJpbmdM
aXN0PgotI2luY2x1ZGUgPFFUZXh0Q29kZWM+Ci0jaW5jbHVkZSA8UVVybD4KKyNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotc3RhdGljIGJvb2wgaXNUZXh0
TWltZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIHJldHVybiB0eXBlID09ICJ0ZXh0
L3BsYWluIiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvcGxhaW47Iik7Ci19Ci0KLXN0YXRpYyBi
b29sIGlzSHRtbE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICByZXR1cm4gdHlw
ZSA9PSAidGV4dC9odG1sIiB8fCB0eXBlLnN0YXJ0c1dpdGgoInRleHQvaHRtbDsiKTsKLX0KLQot
UGFzc1JlZlB0cjxDbGlwYm9hcmQ+IENsaXBib2FyZDo6Y3JlYXRlKENsaXBib2FyZEFjY2Vzc1Bv
bGljeSBwb2xpY3ksIERyYWdEYXRhKiBkcmFnRGF0YSwgRnJhbWUqIGZyYW1lKQotewotICAgIHJl
dHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKHBvbGljeSwgZHJhZ0RhdGEtPnBsYXRmb3JtRGF0YSgp
LCBmcmFtZSk7Ci19Ci0KLUNsaXBib2FyZFF0OjpDbGlwYm9hcmRRdChDbGlwYm9hcmRBY2Nlc3NQ
b2xpY3kgcG9saWN5LCBjb25zdCBRTWltZURhdGEqIHJlYWRhYmxlQ2xpcGJvYXJkLCBGcmFtZSog
ZnJhbWUpCi0gICAgOiBDbGlwYm9hcmQocG9saWN5LCBEcmFnQW5kRHJvcCkKLSAgICAsIG1fcmVh
ZGFibGVEYXRhKHJlYWRhYmxlQ2xpcGJvYXJkKQotICAgICwgbV93cml0YWJsZURhdGEoMCkKLSAg
ICAsIG1fZnJhbWUoZnJhbWUpCi17Ci0gICAgUV9BU1NFUlQocG9saWN5ID09IENsaXBib2FyZFJl
YWRhYmxlIHx8IHBvbGljeSA9PSBDbGlwYm9hcmRUeXBlc1JlYWRhYmxlKTsKLX0KLQotQ2xpcGJv
YXJkUXQ6OkNsaXBib2FyZFF0KENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIENsaXBib2Fy
ZFR5cGUgY2xpcGJvYXJkVHlwZSwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGlj
eSwgY2xpcGJvYXJkVHlwZSkKLSAgICAsIG1fcmVhZGFibGVEYXRhKDApCi0gICAgLCBtX3dyaXRh
YmxlRGF0YSgwKQotICAgICwgbV9mcmFtZShmcmFtZSkKLXsKLSAgICBRX0FTU0VSVChwb2xpY3kg
PT0gQ2xpcGJvYXJkUmVhZGFibGUgfHwgcG9saWN5ID09IENsaXBib2FyZFdyaXRhYmxlIHx8IHBv
bGljeSA9PSBDbGlwYm9hcmROdW1iKTsKLQotI2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAgICBp
ZiAocG9saWN5ICE9IENsaXBib2FyZFdyaXRhYmxlKSB7Ci0gICAgICAgIFFfQVNTRVJUKGlzRm9y
Q29weUFuZFBhc3RlKCkpOwotICAgICAgICBtX3JlYWRhYmxlRGF0YSA9IFFHdWlBcHBsaWNhdGlv
bjo6Y2xpcGJvYXJkKCktPm1pbWVEYXRhKCk7Ci0gICAgfQotI2VuZGlmCi19Ci0KLUNsaXBib2Fy
ZFF0Ojp+Q2xpcGJvYXJkUXQoKQotewotICAgIGlmIChtX3dyaXRhYmxlRGF0YSAmJiBpc0ZvckNv
cHlBbmRQYXN0ZSgpKQotICAgICAgICBtX3dyaXRhYmxlRGF0YSA9IDA7Ci0gICAgZWxzZQotICAg
ICAgICBkZWxldGUgbV93cml0YWJsZURhdGE7Ci0gICAgbV9yZWFkYWJsZURhdGEgPSAwOwotfQot
Ci12b2lkIENsaXBib2FyZFF0OjpjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAg
IGlmICghY2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGlmIChtX3dyaXRh
YmxlRGF0YSkgewotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+cmVtb3ZlRm9ybWF0KHR5cGUpOwot
ICAgICAgICBpZiAobV93cml0YWJsZURhdGEtPmZvcm1hdHMoKS5pc0VtcHR5KCkpIHsKLSAgICAg
ICAgICAgIGlmIChpc0ZvckRyYWdBbmREcm9wKCkpCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1f
d3JpdGFibGVEYXRhOwotICAgICAgICAgICAgbV93cml0YWJsZURhdGEgPSAwOwotICAgICAgICB9
Ci0gICAgfQotI2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFz
dGUoKSkKLSAgICAgICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0TWltZURhdGEo
bV93cml0YWJsZURhdGEpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2xpcGJvYXJkUXQ6OmNsZWFyRGF0
YSgpCitEcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkOjpjcmVhdGVEcmFnSW1hZ2UoSW50UG9pbnQmIGxv
Y2F0aW9uKSBjb25zdAogewotICAgIGlmICghY2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIHJldHVy
bjsKLQotI2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUo
KSkKLSAgICAgICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0TWltZURhdGEoMCk7
Ci0gICAgZWxzZQotI2VuZGlmCi0gICAgICAgIGRlbGV0ZSBtX3dyaXRhYmxlRGF0YTsKLSAgICBt
X3dyaXRhYmxlRGF0YSA9IDA7Ci19Ci0KLVN0cmluZyBDbGlwYm9hcmRRdDo6Z2V0RGF0YShjb25z
dCBTdHJpbmcmIHR5cGUpIGNvbnN0Ci17Ci0gICAgY29uc3QgUU1pbWVEYXRhKiBkYXRhID0gcmVh
ZERhdGEoKTsKLSAgICBpZiAoIWNhblJlYWREYXRhKCkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVy
biBTdHJpbmcoKTsKLQotICAgIGlmIChpc0h0bWxNaW1lVHlwZSh0eXBlKSAmJiBkYXRhLT5oYXNI
dG1sKCkpCi0gICAgICAgIHJldHVybiBkYXRhLT5odG1sKCk7Ci0KLSAgICBpZiAoaXNUZXh0TWlt
ZVR5cGUodHlwZSkgJiYgZGF0YS0+aGFzVGV4dCgpKQotICAgICAgICByZXR1cm4gZGF0YS0+dGV4
dCgpOwotCi0gICAgUUJ5dGVBcnJheSByYXdEYXRhID0gZGF0YS0+ZGF0YSh0eXBlKTsKLSAgICBR
U3RyaW5nIHN0cmluZ0RhdGEgPSBRVGV4dENvZGVjOjpjb2RlY0Zvck5hbWUoIlVURi0xNiIpLT50
b1VuaWNvZGUocmF3RGF0YSk7Ci0gICAgcmV0dXJuIHN0cmluZ0RhdGE7Ci19Ci0KLWJvb2wgQ2xp
cGJvYXJkUXQ6OnNldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEp
Ci17Ci0gICAgaWYgKCFjYW5Xcml0ZURhdGEoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0g
ICAgaWYgKCFtX3dyaXRhYmxlRGF0YSkKLSAgICAgICAgbV93cml0YWJsZURhdGEgPSBuZXcgUU1p
bWVEYXRhOwotCi0gICAgaWYgKGlzVGV4dE1pbWVUeXBlKHR5cGUpKQotICAgICAgICBtX3dyaXRh
YmxlRGF0YS0+c2V0VGV4dChRU3RyaW5nKGRhdGEpKTsKLSAgICBlbHNlIGlmIChpc0h0bWxNaW1l
VHlwZSh0eXBlKSkKLSAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEh0bWwoUVN0cmluZyhkYXRh
KSk7Ci0gICAgZWxzZSB7Ci0gICAgICAgIFFCeXRlQXJyYXkgYXJyYXkocmVpbnRlcnByZXRfY2Fz
dDxjb25zdCBjaGFyKj4oZGF0YS5jaGFyYWN0ZXJzKCkpLCBkYXRhLmxlbmd0aCgpICogMik7Ci0g
ICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXREYXRhKFFTdHJpbmcodHlwZSksIGFycmF5KTsKLSAg
ICB9Ci0KLSAgICByZXR1cm4gdHJ1ZTsKLX0KLQotLy8gZXh0ZW5zaW9ucyBiZXlvbmQgSUUncyBB
UEkKLUxpc3RIYXNoU2V0PFN0cmluZz4gQ2xpcGJvYXJkUXQ6OnR5cGVzKCkgY29uc3QKLXsKLSAg
ICBjb25zdCBRTWltZURhdGEqIGRhdGEgPSByZWFkRGF0YSgpOwotICAgIGlmICghY2FuUmVhZFR5
cGVzKCkgfHwgIWRhdGEpCi0gICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7Ci0K
LSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBRU3RyaW5nTGlzdCBmb3JtYXRz
ID0gZGF0YS0+Zm9ybWF0cygpOwotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWF0cy5jb3Vu
dCgpOyArK2kpCi0gICAgICAgIHJlc3VsdC5hZGQoZm9ybWF0cy5hdChpKSk7Ci0gICAgcmV0dXJu
IHJlc3VsdDsKLX0KLQotUGFzc1JlZlB0cjxGaWxlTGlzdD4gQ2xpcGJvYXJkUXQ6OmZpbGVzKCkg
Y29uc3QKLXsKLSAgICBjb25zdCBRTWltZURhdGEqIGRhdGEgPSByZWFkRGF0YSgpOwotICAgIGlm
ICghY2FuUmVhZERhdGEoKSB8fCAhZGF0YSB8fCAhZGF0YS0+aGFzVXJscygpKQotICAgICAgICBy
ZXR1cm4gRmlsZUxpc3Q6OmNyZWF0ZSgpOwotCi0gICAgUmVmUHRyPEZpbGVMaXN0PiBmaWxlTGlz
dCA9IEZpbGVMaXN0OjpjcmVhdGUoKTsKLSAgICBRTGlzdDxRVXJsPiB1cmxzID0gZGF0YS0+dXJs
cygpOwotCi0gICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgaSsrKSB7Ci0gICAg
ICAgIFFVcmwgdXJsID0gdXJsc1tpXTsKLSAgICAgICAgaWYgKHVybC5zY2hlbWUoKSAhPSBRTGF0
aW4xU3RyaW5nKCJmaWxlIikpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZmlsZUxp
c3QtPmFwcGVuZChGaWxlOjpjcmVhdGUodXJsLnRvTG9jYWxGaWxlKCksIEZpbGU6OkFsbENvbnRl
bnRUeXBlcykpOwotICAgIH0KLQotICAgIHJldHVybiBmaWxlTGlzdC5yZWxlYXNlKCk7Ci19Ci0K
LXZvaWQgQ2xpcGJvYXJkUXQ6OnNldERyYWdJbWFnZShDYWNoZWRJbWFnZSogaW1hZ2UsIGNvbnN0
IEludFBvaW50JiBwb2ludCkKLXsKLSAgICBzZXREcmFnSW1hZ2UoaW1hZ2UsIDAsIHBvaW50KTsK
LX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6c2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiBub2RlLCBj
b25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgc2V0RHJhZ0ltYWdlKDAsIG5vZGUsIHBvaW50
KTsKLX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6c2V0RHJhZ0ltYWdlKENhY2hlZEltYWdlKiBpbWFn
ZSwgTm9kZSAqbm9kZSwgY29uc3QgSW50UG9pbnQgJmxvYykKLXsKLSAgICBpZiAoIWNhblNldERy
YWdJbWFnZSgpKQotICAgICAgICByZXR1cm47CisgICAgbG9jYXRpb24gPSBtX2RyYWdMb2M7CiAK
ICAgICBpZiAobV9kcmFnSW1hZ2UpCi0gICAgICAgIG1fZHJhZ0ltYWdlLT5yZW1vdmVDbGllbnQo
dGhpcyk7Ci0gICAgbV9kcmFnSW1hZ2UgPSBpbWFnZTsKLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0g
ICAgICAgIG1fZHJhZ0ltYWdlLT5hZGRDbGllbnQodGhpcyk7Ci0KLSAgICBtX2RyYWdMb2MgPSBs
b2M7Ci0gICAgbV9kcmFnSW1hZ2VFbGVtZW50ID0gbm9kZTsKLX0KKyAgICAgICAgcmV0dXJuIGNy
ZWF0ZURyYWdJbWFnZUZyb21JbWFnZShtX2RyYWdJbWFnZS0+aW1hZ2UoKSk7CiAKLURyYWdJbWFn
ZVJlZiBDbGlwYm9hcmRRdDo6Y3JlYXRlRHJhZ0ltYWdlKEludFBvaW50JiBkcmFnTG9jKSBjb25z
dAotewotICAgIGRyYWdMb2MgPSBtX2RyYWdMb2M7Ci0KLSAgICBpZiAobV9kcmFnSW1hZ2UpCi0g
ICAgICAgIHJldHVybiBtX2RyYWdJbWFnZS0+aW1hZ2UoKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50
RnJhbWUoKTsKLSAgICBpZiAobV9kcmFnSW1hZ2VFbGVtZW50ICYmIG1fZnJhbWUpCi0gICAgICAg
IHJldHVybiBtX2ZyYW1lLT5ub2RlSW1hZ2UobV9kcmFnSW1hZ2VFbGVtZW50LmdldCgpKTsKLQot
ICAgIHJldHVybiAwOwotfQotCi1zdGF0aWMgQ2FjaGVkSW1hZ2UqIGdldENhY2hlZEltYWdlKEVs
ZW1lbnQqIGVsZW1lbnQpCi17Ci0gICAgLy8gQXR0ZW1wdCB0byBwdWxsIENhY2hlZEltYWdlIGZy
b20gZWxlbWVudAotICAgIEFTU0VSVChlbGVtZW50KTsKLSAgICBSZW5kZXJPYmplY3QqIHJlbmRl
cmVyID0gZWxlbWVudC0+cmVuZGVyZXIoKTsKLSAgICBpZiAoIXJlbmRlcmVyIHx8ICFyZW5kZXJl
ci0+aXNJbWFnZSgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlbmRlckltYWdlKiBpbWFn
ZSA9IHRvUmVuZGVySW1hZ2UocmVuZGVyZXIpOwotICAgIGlmIChpbWFnZS0+Y2FjaGVkSW1hZ2Uo
KSAmJiAhaW1hZ2UtPmNhY2hlZEltYWdlKCktPmVycm9yT2NjdXJyZWQoKSkKLSAgICAgICAgcmV0
dXJuIGltYWdlLT5jYWNoZWRJbWFnZSgpOwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXZvaWQgQ2xp
cGJvYXJkUXQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25z
dCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBB
U1NFUlQoZnJhbWUpOwotCi0gICAgLy8gV2ViQ29yZTo6d3JpdGVVUkwobV93cml0YWJsZURhdGFP
YmplY3QuZ2V0KCksIHVybCwgdGl0bGUsIHRydWUsIGZhbHNlKTsKLSAgICBpZiAoIW1fd3JpdGFi
bGVEYXRhKQotICAgICAgICBtX3dyaXRhYmxlRGF0YSA9IG5ldyBRTWltZURhdGE7Ci0KLSAgICBD
YWNoZWRJbWFnZSogY2FjaGVkSW1hZ2UgPSBnZXRDYWNoZWRJbWFnZShlbGVtZW50KTsKLSAgICBp
ZiAoIWNhY2hlZEltYWdlIHx8ICFjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihlbGVtZW50
LT5yZW5kZXJlcigpKSB8fCAhY2FjaGVkSW1hZ2UtPmlzTG9hZGVkKCkpCi0gICAgICAgIHJldHVy
bjsKLSAgICBRUGl4bWFwKiBwaXhtYXAgPSBjYWNoZWRJbWFnZS0+aW1hZ2VGb3JSZW5kZXJlcihl
bGVtZW50LT5yZW5kZXJlcigpKS0+bmF0aXZlSW1hZ2VGb3JDdXJyZW50RnJhbWUoKTsKLSAgICBp
ZiAocGl4bWFwKQotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SW1hZ2VEYXRhKCpwaXhtYXAp
OwotCi0gICAgUUxpc3Q8UVVybD4gdXJsczsKLSAgICB1cmxzLmFwcGVuZCh1cmwpOwotCi0gICAg
bV93cml0YWJsZURhdGEtPnNldFRleHQodGl0bGUpOwotICAgIG1fd3JpdGFibGVEYXRhLT5zZXRV
cmxzKHVybHMpOwotICAgIG1fd3JpdGFibGVEYXRhLT5zZXRIdG1sKGNyZWF0ZU1hcmt1cChlbGVt
ZW50LCBJbmNsdWRlTm9kZSwgMCwgUmVzb2x2ZUFsbFVSTHMpKTsKLSNpZm5kZWYgUVRfTk9fQ0xJ
UEJPQVJECi0gICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpCi0gICAgICAgIFFHdWlBcHBsaWNh
dGlvbjo6Y2xpcGJvYXJkKCktPnNldE1pbWVEYXRhKG1fd3JpdGFibGVEYXRhKTsKLSNlbmRpZgot
fQotCi12b2lkIENsaXBib2FyZFF0Ojp3cml0ZVVSTChjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0
cmluZyYgdGl0bGUsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQoZnJhbWUpOwotCi0gICAg
UUxpc3Q8UVVybD4gdXJsczsKLSAgICB1cmxzLmFwcGVuZChmcmFtZS0+ZG9jdW1lbnQoKS0+Y29t
cGxldGVVUkwodXJsLnN0cmluZygpKSk7Ci0gICAgaWYgKCFtX3dyaXRhYmxlRGF0YSkKLSAgICAg
ICAgbV93cml0YWJsZURhdGEgPSBuZXcgUU1pbWVEYXRhOwotICAgIG1fd3JpdGFibGVEYXRhLT5z
ZXRVcmxzKHVybHMpOwotICAgIG1fd3JpdGFibGVEYXRhLT5zZXRUZXh0KHRpdGxlKTsKLSNpZm5k
ZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpCi0gICAgICAg
IFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldE1pbWVEYXRhKG1fd3JpdGFibGVEYXRh
KTsKLSNlbmRpZgotfQotCi12b2lkIENsaXBib2FyZFF0Ojp3cml0ZVJhbmdlKFJhbmdlKiByYW5n
ZSwgRnJhbWUqIGZyYW1lKQotewotICAgIEFTU0VSVChyYW5nZSk7Ci0gICAgQVNTRVJUKGZyYW1l
KTsKLQotICAgIGlmICghbV93cml0YWJsZURhdGEpCi0gICAgICAgIG1fd3JpdGFibGVEYXRhID0g
bmV3IFFNaW1lRGF0YTsKLSAgICBRU3RyaW5nIHRleHQgPSBmcmFtZS0+ZWRpdG9yKCkuc2VsZWN0
ZWRUZXh0Rm9yQ2xpcGJvYXJkKCk7Ci0gICAgdGV4dC5yZXBsYWNlKFFDaGFyKDB4YTApLCBRTGF0
aW4xQ2hhcignICcpKTsKLSAgICBtX3dyaXRhYmxlRGF0YS0+c2V0VGV4dCh0ZXh0KTsKLSAgICBt
X3dyaXRhYmxlRGF0YS0+c2V0SHRtbChjcmVhdGVNYXJrdXAocmFuZ2UsIDAsIEFubm90YXRlRm9y
SW50ZXJjaGFuZ2UsIGZhbHNlLCBSZXNvbHZlTm9uTG9jYWxVUkxzKSk7Ci0jaWZuZGVmIFFUX05P
X0NMSVBCT0FSRAotICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKQotICAgICAgICBRR3VpQXBw
bGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRNaW1lRGF0YShtX3dyaXRhYmxlRGF0YSk7Ci0jZW5k
aWYKLX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiBz
dHIpCi17Ci0gICAgaWYgKCFtX3dyaXRhYmxlRGF0YSkKLSAgICAgICAgbV93cml0YWJsZURhdGEg
PSBuZXcgUU1pbWVEYXRhOwotICAgIFFTdHJpbmcgdGV4dCA9IHN0cjsKLSAgICB0ZXh0LnJlcGxh
Y2UoUUNoYXIoMHhhMCksIFFMYXRpbjFDaGFyKCcgJykpOwotICAgIG1fd3JpdGFibGVEYXRhLT5z
ZXRUZXh0KHRleHQpOwotI2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAgICBpZiAoaXNGb3JDb3B5
QW5kUGFzdGUoKSkKLSAgICAgICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0TWlt
ZURhdGEobV93cml0YWJsZURhdGEpOwotI2VuZGlmCi19Ci0KLWNvbnN0IFFNaW1lRGF0YSogQ2xp
cGJvYXJkUXQ6OnJlYWREYXRhKCkgY29uc3QKLXsKLSAgICBBU1NFUlQoIShtX3JlYWRhYmxlRGF0
YSAmJiBtX3dyaXRhYmxlRGF0YSkpOwotICAgIEFTU0VSVChtX3JlYWRhYmxlRGF0YSB8fCBtX3dy
aXRhYmxlRGF0YSB8fCBjYW5Xcml0ZURhdGEoKSk7Ci0gICAgcmV0dXJuIG1fcmVhZGFibGVEYXRh
ID8gbV9yZWFkYWJsZURhdGEgOiBtX3dyaXRhYmxlRGF0YTsKLX0KKyAgICBpZiAobV9kcmFnSW1h
Z2VFbGVtZW50KSB7CisgICAgICAgIERvY3VtZW50KiBkb2N1bWVudCA9IG1fZHJhZ0ltYWdlRWxl
bWVudC0+ZG9jdW1lbnQoKTsKKyAgICAgICAgaWYgKEZyYW1lKiBmcmFtZSA9IGRvY3VtZW50LT5m
cmFtZSgpKQorICAgICAgICAgICAgcmV0dXJuIGZyYW1lLT5ub2RlSW1hZ2UobV9kcmFnSW1hZ2VF
bGVtZW50LmdldCgpKTsKKyAgICB9CiAKLWJvb2wgQ2xpcGJvYXJkUXQ6Omhhc0RhdGEoKQotewot
ICAgIGNvbnN0IFFNaW1lRGF0YSAqZGF0YSA9IHJlYWREYXRhKCk7Ci0gICAgaWYgKCFkYXRhKQot
ICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgcmV0dXJuIGRhdGEtPmZvcm1hdHMoKS5jb3VudCgp
ID4gMDsKKyAgICByZXR1cm4gMDsgLy8gV2UgZG8gbm90IGhhdmUgZW5vdWdoIGluZm9ybWF0aW9u
IHRvIGNyZWF0ZSBhIGRyYWcgaW1hZ2UsIHVzZSB0aGUgZGVmYXVsdCBpY29uLgogfQogCi0jaWYg
RU5BQkxFKERBVEFfVFJBTlNGRVJfSVRFTVMpCi1QYXNzUmVmUHRyPERhdGFUcmFuc2Zlckl0ZW1M
aXN0PiBDbGlwYm9hcmRRdDo6aXRlbXMoKQordm9pZCBDbGlwYm9hcmQ6OmRlY2xhcmVBbmRXcml0
ZURyYWdJbWFnZShFbGVtZW50KiBlbGVtZW50LCBjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmlu
ZyYgbGFiZWwsIEZyYW1lKiBmcmFtZSkKIHsKLSAgICBpZiAoIW1fZnJhbWUgJiYgIW1fZnJhbWUt
PmRvY3VtZW50KCkpCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1MaXN0UXQ+IGl0ZW1zID0gRGF0YVRyYW5zZmVySXRlbUxpc3RRdDo6Y3JlYXRlKHRoaXMs
IG1fZnJhbWUtPmRvY3VtZW50KCktPnNjcmlwdEV4ZWN1dGlvbkNvbnRleHQoKSk7Ci0KLSAgICBj
b25zdCBRTWltZURhdGEqIHJlYWRhYmxlRGF0YSA9IHJlYWREYXRhKCk7Ci0gICAgaWYgKHJlYWRh
YmxlRGF0YSAmJiBpc0ZvckNvcHlBbmRQYXN0ZSgpICYmIGNhblJlYWREYXRhKCkpIHsKLSAgICAg
ICAgY29uc3QgUVN0cmluZ0xpc3QgdHlwZXMgPSByZWFkYWJsZURhdGEtPmZvcm1hdHMoKTsKLSAg
ICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB0eXBlcy5jb3VudCgpOyArK2kpCi0gICAgICAgICAg
ICBpdGVtcy0+YWRkUGFzdGVib2FyZEl0ZW0odHlwZXMuYXQoaSkpOwotICAgIH0KLSAgICByZXR1
cm4gaXRlbXM7CisgICAgbV9wYXN0ZWJvYXJkLT53cml0ZUltYWdlKGVsZW1lbnQtPnRvTm9kZSgp
LCB1cmwsIGxhYmVsKTsKIH0KLSNlbmRpZgogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQv
Q2xpcGJvYXJkUXQuaApkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNjIyN2FjOWRkZDc0
MzBjNjY1YWY0MGY3NjZkYThhNjI4YmJiM2E2MC4uMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRR
dC5oCisrKyAvZGV2L251bGwKQEAgLTEsOTcgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdodCAoQykg
MjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCi0gKgotICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0Ci0gKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKLSAqIGFyZSBtZXQ6Ci0gKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgot
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCi0gKgot
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFT
IElTJycgQU5EIEFOWQotICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElO
RywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKLSAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJD
SEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgotICogUFVSUE9TRSBBUkUg
RElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCi0g
KiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURF
TlRBTCwgU1BFQ0lBTCwKLSAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKLSAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRV
VEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgotICogUFJPRklUUzsg
T1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9S
WQotICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZ
LCBPUiBUT1JUCi0gKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5H
IElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYg
QURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAotICovCi0KLSNpZm5k
ZWYgQ2xpcGJvYXJkUXRfaAotI2RlZmluZSBDbGlwYm9hcmRRdF9oCi0KLSNpbmNsdWRlICJDYWNo
ZWRJbWFnZUNsaWVudC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZC5oIgotCi1RVF9CRUdJTl9OQU1F
U1BBQ0UKLWNsYXNzIFFNaW1lRGF0YTsKLVFUX0VORF9OQU1FU1BBQ0UKLQotbmFtZXNwYWNlIFdl
YkNvcmUgewotCi1jbGFzcyBDYWNoZWRJbWFnZTsKLQotLy8gU3RhdGUgYXZhaWxhYmxlIGR1cmlu
ZyBJRSdzIGV2ZW50cyBmb3IgZHJhZyBhbmQgZHJvcCBhbmQgY29weS9wYXN0ZQotY2xhc3MgQ2xp
cGJvYXJkUXQgOiBwdWJsaWMgQ2xpcGJvYXJkLCBwdWJsaWMgQ2FjaGVkSW1hZ2VDbGllbnQgewot
ICAgIFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwotcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPENsaXBib2FyZFF0PiBjcmVhdGUoQ2xpcGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgY29u
c3QgUU1pbWVEYXRhKiByZWFkYWJsZUNsaXBib2FyZCwgRnJhbWUqIGZyYW1lKQotICAgIHsKLSAg
ICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRRdChwb2xpY3ksIHJlYWRhYmxlQ2xp
cGJvYXJkLCBmcmFtZSkpOwotICAgIH0KLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRR
dD4gY3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lICpmcmFtZSwgQ2xp
cGJvYXJkVHlwZSBjbGlwYm9hcmRUeXBlID0gQ29weUFuZFBhc3RlKQotICAgIHsKLSAgICAgICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBDbGlwYm9hcmRRdChwb2xpY3ksIGNsaXBib2FyZFR5cGUsIGZy
YW1lKSk7Ci0gICAgfQotICAgIHZpcnR1YWwgfkNsaXBib2FyZFF0KCk7Ci0KLSAgICB2b2lkIGNs
ZWFyRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwotICAgIHZvaWQgY2xlYXJEYXRhKCk7Ci0gICAg
U3RyaW5nIGdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdDsKLSAgICBib29sIHNldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwotCi0gICAgLy8gZXh0
ZW5zaW9ucyBiZXlvbmQgSUUncyBBUEkKLSAgICB2aXJ0dWFsIExpc3RIYXNoU2V0PFN0cmluZz4g
dHlwZXMoKSBjb25zdDsKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RmlsZUxpc3Q+IGZpbGVzKCkg
Y29uc3Q7Ci0KLSAgICB2b2lkIHNldERyYWdJbWFnZShDYWNoZWRJbWFnZSosIGNvbnN0IEludFBv
aW50Jik7Ci0gICAgdm9pZCBzZXREcmFnSW1hZ2VFbGVtZW50KE5vZGUqLCBjb25zdCBJbnRQb2lu
dCYpOwotCi0gICAgdmlydHVhbCBEcmFnSW1hZ2VSZWYgY3JlYXRlRHJhZ0ltYWdlKEludFBvaW50
JiBkcmFnTG9jKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgZGVjbGFyZUFuZFdyaXRlRHJhZ0lt
YWdlKEVsZW1lbnQqLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJiB0aXRsZSwgRnJhbWUqKTsK
LSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVVUkwoY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYsIEZy
YW1lKik7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlUmFuZ2UoUmFuZ2UqLCBGcmFtZSopOwotICAg
IHZpcnR1YWwgdm9pZCB3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmKTsKLQotICAgIHZpcnR1
YWwgYm9vbCBoYXNEYXRhKCk7Ci0KLSAgICBRTWltZURhdGEqIGNsaXBib2FyZERhdGEoKSBjb25z
dCB7IHJldHVybiBtX3dyaXRhYmxlRGF0YTsgfQotICAgIHZvaWQgaW52YWxpZGF0ZVdyaXRhYmxl
RGF0YSgpIHsgbV93cml0YWJsZURhdGEgPSAwOyB9Ci0KLSNpZiBFTkFCTEUoREFUQV9UUkFOU0ZF
Ul9JVEVNUykKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8RGF0YVRyYW5zZmVySXRlbUxpc3Q+IGl0
ZW1zKCk7Ci0jZW5kaWYKLQotcHJpdmF0ZToKLSAgICBDbGlwYm9hcmRRdChDbGlwYm9hcmRBY2Nl
c3NQb2xpY3ksIGNvbnN0IFFNaW1lRGF0YSogcmVhZGFibGVDbGlwYm9hcmQsIEZyYW1lKik7Ci0K
LSAgICAvLyBDbGlwYm9hcmQgaXMgd3JpdGFibGUgc28gaXQgd2lsbCBjcmVhdGUgaXRzIG93biBR
TWltZURhdGEgb2JqZWN0Ci0gICAgQ2xpcGJvYXJkUXQoQ2xpcGJvYXJkQWNjZXNzUG9saWN5LCBD
bGlwYm9hcmRUeXBlLCBGcmFtZSopOwotCi0gICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1h
Z2UqLCBOb2RlKiwgY29uc3QgSW50UG9pbnQmIGxvYyk7Ci0KLSAgICBjb25zdCBRTWltZURhdGEq
IHJlYWREYXRhKCkgY29uc3Q7Ci0KLSAgICBjb25zdCBRTWltZURhdGEqIG1fcmVhZGFibGVEYXRh
OwotICAgIFFNaW1lRGF0YSogbV93cml0YWJsZURhdGE7Ci0gICAgRnJhbWUqIG1fZnJhbWU7Ci19
OwotfQotCi0jZW5kaWYgLy8gQ2xpcGJvYXJkUXRfaApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L3F0L1Bhc3RlYm9hcmRRdC5jcHAKaW5kZXggNzI2NGMwOTRkMjVjNWNiMTdhNDE2NGRiZTlkODFl
MzdhMDcwMDg3ZS4uNmYwN2QwZDAzNzEzNThhZDlkOTcxNzZhNjNiYWM3YTY3OTY5ZmE4NyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCkBAIC0yLDYgKzIs
NyBAQAogICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KICAq
IENvcHlyaWdodCAoQykgMjAwNiwgMjAwNyBBcHBsZSBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVk
LgogICogQ29weXJpZ2h0IChDKSAyMDA4IE5va2lhIENvcnBvcmF0aW9uIGFuZC9vciBpdHMgc3Vi
c2lkaWFyeSgtaWVzKQorICogQ29weXJpZ2h0IChDKSAyMDEzIENpc2NvIFN5c3RlbXMsIEluYy4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAt
MjksMzMgKzMwLDg2IEBACiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogCiAjaW5jbHVkZSAiQ2Fj
aGVkSW1hZ2UuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmRRdC5oIgogI2luY2x1ZGUgIkRvY3VtZW50
RnJhZ21lbnQuaCIKKyNpbmNsdWRlICJEcmFnRGF0YS5oIgogI2luY2x1ZGUgIkVkaXRvci5oIgog
I2luY2x1ZGUgIkZyYW1lLmgiCiAjaW5jbHVkZSAiSW1hZ2UuaCIKKyNpbmNsdWRlICJOb3RJbXBs
ZW1lbnRlZC5oIgogI2luY2x1ZGUgIlJlbmRlckltYWdlLmgiCiAjaW5jbHVkZSAibWFya3VwLmgi
CiAjaW5jbHVkZSA8cWNsaXBib2FyZC5oPgogI2luY2x1ZGUgPHFkZWJ1Zy5oPgogI2luY2x1ZGUg
PHFndWlhcHBsaWNhdGlvbi5oPgogI2luY2x1ZGUgPHFtaW1lZGF0YS5oPgorI2luY2x1ZGUgPHF0
ZXh0Y29kZWMuaD4KICNpbmNsdWRlIDxxdXJsLmg+CiAKICNkZWZpbmUgbWV0aG9kRGVidWcoKSBx
RGVidWcoKSA8PCAiUGFzdGVib2FyZFF0OiAiIDw8IF9fRlVOQ1RJT05fXzsKIAogbmFtZXNwYWNl
IFdlYkNvcmUgewogCi1QYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKCkKK3N0YXRpYyBib29sIGlzVGV4
dE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gdHlwZSA9PSAidGV4
dC9wbGFpbiIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpOworfQorCitzdGF0aWMg
Ym9vbCBpc0h0bWxNaW1lVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIHR5
cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L2h0bWw7Iik7Cit9CisK
K1Bhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlKGNvbnN0IFFNaW1lRGF0
YSogcmVhZGFibGVDbGlwYm9hcmQsIGJvb2wgaXNGb3JEcmFnQW5kRHJvcCkKK3sKKyAgICByZXR1
cm4gYWRvcHRQdHIobmV3IFBhc3RlYm9hcmQocmVhZGFibGVDbGlwYm9hcmQsIGlzRm9yRHJhZ0Fu
ZERyb3ApKTsKK30KKworUGFzc093blB0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVG
b3JDb3B5QW5kUGFzdGUoKQoreworICAgIHJldHVybiBjcmVhdGUoKTsKK30KKworUGFzc093blB0
cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVQcml2YXRlKCkKK3sKKyNpZm5kZWYgUVRf
Tk9fQ0xJUEJPQVJECisgICAgcmV0dXJuIGNyZWF0ZShRR3VpQXBwbGljYXRpb246OmNsaXBib2Fy
ZCgpLT5taW1lRGF0YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGNyZWF0ZSgpOworI2VuZGlmCit9
CisKK1Bhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERy
b3AoKQoreworICAgIHJldHVybiBjcmVhdGUoMCwgdHJ1ZSk7Cit9CisKK1Bhc3NPd25QdHI8UGFz
dGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9yRHJhZ0FuZERyb3AoY29uc3QgRHJhZ0RhdGEm
IGRyYWdEYXRhKQoreworICAgIHJldHVybiBjcmVhdGUoZHJhZ0RhdGEucGxhdGZvcm1EYXRhKCks
IHRydWUpOworfQorCitQYXN0ZWJvYXJkOjpQYXN0ZWJvYXJkKGNvbnN0IFFNaW1lRGF0YSogcmVh
ZGFibGVDbGlwYm9hcmQsIGJvb2wgaXNGb3JEcmFnQW5kRHJvcCkKICAgICA6IG1fc2VsZWN0aW9u
TW9kZShmYWxzZSkKKyAgICAsIG1fcmVhZGFibGVEYXRhKHJlYWRhYmxlQ2xpcGJvYXJkKQorICAg
ICwgbV93cml0YWJsZURhdGEoMCkKKyAgICAsIG1faXNGb3JEcmFnQW5kRHJvcChpc0ZvckRyYWdB
bmREcm9wKQoreworfQorCitQYXN0ZWJvYXJkOjp+UGFzdGVib2FyZCgpCiB7CisgICAgaWYgKG1f
d3JpdGFibGVEYXRhICYmIGlzRm9yQ29weUFuZFBhc3RlKCkpCisgICAgICAgIG1fd3JpdGFibGVE
YXRhID0gMDsKKyAgICBlbHNlCisgICAgICAgIGRlbGV0ZSBtX3dyaXRhYmxlRGF0YTsKKyAgICBt
X3JlYWRhYmxlRGF0YSA9IDA7CiB9CiAKIFBhc3RlYm9hcmQqIFBhc3RlYm9hcmQ6OmdlbmVyYWxQ
YXN0ZWJvYXJkKCkKIHsKICAgICBzdGF0aWMgUGFzdGVib2FyZCogcGFzdGVib2FyZCA9IDA7CiAg
ICAgaWYgKCFwYXN0ZWJvYXJkKQotICAgICAgICBwYXN0ZWJvYXJkID0gbmV3IFBhc3RlYm9hcmQo
KTsKKyAgICAgICAgcGFzdGVib2FyZCA9IG5ldyBQYXN0ZWJvYXJkKDAsIGZhbHNlKTsKICAgICBy
ZXR1cm4gcGFzdGVib2FyZDsKIH0KIApAQCAtMTc2LDI5ICsyMzAsMTI5IEBAIHZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVJbWFnZShOb2RlKiBub2RlLCBjb25zdCBLVVJMJiwgY29uc3QgU3RyaW5nJikK
ICNlbmRpZgogfQogCi12b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ2xpcGJvYXJkKENsaXBib2FyZCog
Y2xpcGJvYXJkKQorYm9vbCBQYXN0ZWJvYXJkOjppc1NlbGVjdGlvbk1vZGUoKSBjb25zdAogewor
ICAgIHJldHVybiBtX3NlbGVjdGlvbk1vZGU7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6c2V0U2Vs
ZWN0aW9uTW9kZShib29sIHNlbGVjdGlvbk1vZGUpCit7CisgICAgbV9zZWxlY3Rpb25Nb2RlID0g
c2VsZWN0aW9uTW9kZTsKK30KKworY29uc3QgUU1pbWVEYXRhKiBQYXN0ZWJvYXJkOjpyZWFkRGF0
YSgpIGNvbnN0Cit7CisgICAgQVNTRVJUKCEobV9yZWFkYWJsZURhdGEgJiYgbV93cml0YWJsZURh
dGEpKTsKKyAgICBBU1NFUlQobV9yZWFkYWJsZURhdGEgfHwgbV93cml0YWJsZURhdGEpOworICAg
IHJldHVybiBtX3JlYWRhYmxlRGF0YSA/IG1fcmVhZGFibGVEYXRhIDogbV93cml0YWJsZURhdGE7
Cit9CisKK2Jvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCit7CisgICAgY29uc3QgUU1pbWVEYXRh
ICpkYXRhID0gcmVhZERhdGEoKTsKKyAgICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKyAgICByZXR1cm4gZGF0YS0+Zm9ybWF0cygpLmNvdW50KCkgPiAwOworfQorCit2b2lkIFBh
c3RlYm9hcmQ6OmNsZWFyKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICBpZiAobV93cml0YWJs
ZURhdGEpIHsKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnJlbW92ZUZvcm1hdCh0eXBlKTsKKyAg
ICAgICAgaWYgKG1fd3JpdGFibGVEYXRhLT5mb3JtYXRzKCkuaXNFbXB0eSgpKSB7CisgICAgICAg
ICAgICBpZiAoaXNGb3JEcmFnQW5kRHJvcCgpKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3dy
aXRhYmxlRGF0YTsKKyAgICAgICAgICAgIG1fd3JpdGFibGVEYXRhID0gMDsKKyAgICAgICAgfQor
ICAgIH0KICNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlw
Ym9hcmQoKS0+c2V0TWltZURhdGEoc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQp
LT5jbGlwYm9hcmREYXRhKCkpOworICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKQorICAgICAg
ICBRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRNaW1lRGF0YShtX3dyaXRhYmxlRGF0
YSk7CiAjZW5kaWYKIH0KIAotLyogVGhpcyBmdW5jdGlvbiBpcyBjYWxsZWQgZnJvbSBFZGl0b3I6
OnRyeURIVE1MQ29weSBiZWZvcmUgYWN0dWFsbHkgc2V0IHRoZSBjbGlwYm9hcmQKLSAqIEl0IGlu
dHJvZHVjZSBhIHJhY2UgY29uZGl0aW9uIHdpdGgga2xpcHBlciwgd2hpY2ggd2lsbCB0cnkgdG8g
Z3JhYiB0aGUgY2xpcGJvYXJkIAotICogSXQncyBub3QgcmVxdWlyZWQgdG8gY2xlYXIgaXQgYW55
d2F5LCBzaW5jZSBRQ2xpcGJvYXJkIHRha2UgY2FyZSBhYm91dCByZXBsYWNpbmcgdGhlIGNsaXBi
b2FyZAotICovCiB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKIHsKKyNpZm5kZWYgUVRfTk9fQ0xJ
UEJPQVJECisgICAgaWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpCisgICAgICAgIFFHdWlBcHBsaWNh
dGlvbjo6Y2xpcGJvYXJkKCktPnNldE1pbWVEYXRhKDApOworICAgIGVsc2UKKyNlbmRpZgorICAg
IGRlbGV0ZSBtX3dyaXRhYmxlRGF0YTsKKyAgICBtX3dyaXRhYmxlRGF0YSA9IDA7CiB9CiAKLWJv
b2wgUGFzdGVib2FyZDo6aXNTZWxlY3Rpb25Nb2RlKCkgY29uc3QKK1N0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICByZXR1cm4gbV9zZWxlY3Rp
b25Nb2RlOworICAgIGNvbnN0IFFNaW1lRGF0YSogZGF0YSA9IHJlYWREYXRhKCk7CisKKyAgICBp
ZiAoaXNIdG1sTWltZVR5cGUodHlwZSkgJiYgZGF0YS0+aGFzSHRtbCgpKQorICAgICAgICByZXR1
cm4gZGF0YS0+aHRtbCgpOworCisgICAgaWYgKGlzVGV4dE1pbWVUeXBlKHR5cGUpICYmIGRhdGEt
Pmhhc1RleHQoKSkKKyAgICAgICAgcmV0dXJuIGRhdGEtPnRleHQoKTsKKworICAgIFFCeXRlQXJy
YXkgcmF3RGF0YSA9IGRhdGEtPmRhdGEodHlwZSk7CisgICAgUVN0cmluZyBzdHJpbmdEYXRhID0g
UVRleHRDb2RlYzo6Y29kZWNGb3JOYW1lKCJVVEYtMTYiKS0+dG9Vbmljb2RlKHJhd0RhdGEpOwor
ICAgIHJldHVybiBzdHJpbmdEYXRhOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6OnNldFNlbGVjdGlv
bk1vZGUoYm9vbCBzZWxlY3Rpb25Nb2RlKQorYm9vbCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKIHsKLSAgICBtX3NlbGVjdGlv
bk1vZGUgPSBzZWxlY3Rpb25Nb2RlOworICAgIGlmICghbV93cml0YWJsZURhdGEpCisgICAgICAg
IG1fd3JpdGFibGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKKworICAgIGlmIChpc1RleHRNaW1lVHlw
ZSh0eXBlKSkKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldFRleHQoUVN0cmluZyhkYXRhKSk7
CisgICAgZWxzZSBpZiAoaXNIdG1sTWltZVR5cGUodHlwZSkpCisgICAgICAgIG1fd3JpdGFibGVE
YXRhLT5zZXRIdG1sKFFTdHJpbmcoZGF0YSkpOworICAgIGVsc2UgeworICAgICAgICBRQnl0ZUFy
cmF5IGFycmF5KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygp
KSwgZGF0YS5sZW5ndGgoKSAqIDIpOworICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RGF0YShR
U3RyaW5nKHR5cGUpLCBhcnJheSk7CisgICAgfQorCisgICAgcmV0dXJuIHRydWU7Cit9CisKKy8v
IGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCitMaXN0SGFzaFNldDxTdHJpbmc+IFBhc3RlYm9h
cmQ6OnR5cGVzKCkKK3sKKyAgICBjb25zdCBRTWltZURhdGEqIGRhdGEgPSByZWFkRGF0YSgpOwor
CisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgUVN0cmluZ0xpc3QgZm9ybWF0
cyA9IGRhdGEtPmZvcm1hdHMoKTsKKyAgICBmb3IgKGludCBpID0gMDsgaSA8IGZvcm1hdHMuY291
bnQoKTsgKytpKQorICAgICAgICByZXN1bHQuYWRkKGZvcm1hdHMuYXQoaSkpOworICAgIHJldHVy
biByZXN1bHQ7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMo
KQoreworICAgIGNvbnN0IFFNaW1lRGF0YSogZGF0YSA9IHJlYWREYXRhKCk7CisKKyAgICBWZWN0
b3I8U3RyaW5nPiBmaWxlTGlzdDsKKyAgICBRTGlzdDxRVXJsPiB1cmxzID0gZGF0YS0+dXJscygp
OworCisgICAgZm9yIChpbnQgaSA9IDA7IGkgPCB1cmxzLnNpemUoKTsgaSsrKSB7CisgICAgICAg
IFFVcmwgdXJsID0gdXJsc1tpXTsKKyAgICAgICAgaWYgKHVybC5zY2hlbWUoKSAhPSBRTGF0aW4x
U3RyaW5nKCJmaWxlIikpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgZmlsZUxpc3Qu
YXBwZW5kKHVybC50b0xvY2FsRmlsZSgpKTsKKyAgICB9CisKKyAgICByZXR1cm4gZmlsZUxpc3Q7
Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6c2V0RHJhZ0ltYWdlKERyYWdJbWFnZVJlZiwgY29uc3Qg
SW50UG9pbnQmIGhvdFNwb3QpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZVBhc3RlYm9hcmQoY29uc3QgUGFzdGVib2FyZCYgc291cmNlUGFzdGVi
b2FyZCkKK3sKKyNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECisgICAgUUd1aUFwcGxpY2F0aW9uOjpj
bGlwYm9hcmQoKS0+c2V0TWltZURhdGEoc291cmNlUGFzdGVib2FyZC5jbGlwYm9hcmREYXRhKCkp
OworI2VuZGlmCiB9CiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1
cHBvcnQvRHJhZ0NsaWVudFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQv
RHJhZ0NsaWVudFF0LmNwcAppbmRleCA3NDg5MzE3ZjExNmQ2M2NjOTFiNDcwYTUyZGVjZjY2OGMy
ZjE5ODFjLi42Y2M1YjMxNWNlZGE1OWE5NWIwODMzYzU4Y2Q2NWQ4ZWI2M2Q0NjI1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRRdC5jcHAKKysr
IGIvU291cmNlL1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCkBAIC0y
NywxMSArMjcsMTIgQEAKICNpbmNsdWRlICJEcmFnQ2xpZW50UXQuaCIKIAogI2luY2x1ZGUgIkNo
cm9tZUNsaWVudC5oIgotI2luY2x1ZGUgIkNsaXBib2FyZFF0LmgiCisjaW5jbHVkZSAiQ2xpcGJv
YXJkLmgiCiAjaW5jbHVkZSAiRHJhZ0NvbnRyb2xsZXIuaCIKICNpbmNsdWRlICJFdmVudEhhbmRs
ZXIuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKKyNpbmNsdWRlICJQ
YXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1Nb3VzZUV2ZW50LmgiCiAKICNpbmNsdWRl
IDxRRHJhZz4KQEAgLTkyLDggKzkzLDggQEAgdm9pZCBEcmFnQ2xpZW50UXQ6OndpbGxQZXJmb3Jt
RHJhZ1NvdXJjZUFjdGlvbihEcmFnU291cmNlQWN0aW9uLCBjb25zdCBJbnRQb2ludCYKIHZvaWQg
RHJhZ0NsaWVudFF0OjpzdGFydERyYWcoRHJhZ0ltYWdlUmVmIGRyYWdJbWFnZSwgY29uc3QgSW50
UG9pbnQmLCBjb25zdCBJbnRQb2ludCYsIENsaXBib2FyZCogY2xpcGJvYXJkLCBGcmFtZSogZnJh
bWUsIGJvb2wpCiB7CiAjaWZuZGVmIFFUX05PX0RSQUdBTkREUk9QCi0gICAgUU1pbWVEYXRhKiBj
bGlwYm9hcmREYXRhID0gc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQpLT5jbGlw
Ym9hcmREYXRhKCk7Ci0gICAgc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQpLT5p
bnZhbGlkYXRlV3JpdGFibGVEYXRhKCk7CisgICAgUU1pbWVEYXRhKiBjbGlwYm9hcmREYXRhID0g
Y2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuY2xpcGJvYXJkRGF0YSgpOworICAgIGNsaXBib2FyZC0+
cGFzdGVib2FyZCgpLmludmFsaWRhdGVXcml0YWJsZURhdGEoKTsKICAgICBRT2JqZWN0KiB2aWV3
ID0gbV9jaHJvbWVDbGllbnQtPnBsYXRmb3JtUGFnZUNsaWVudCgpLT5vd25lcldpZGdldCgpOwog
ICAgIGlmICh2aWV3KSB7CiAgICAgICAgIFFEcmFnKiBkcmFnID0gbmV3IFFEcmFnKHZpZXcpOwpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9xdC9X
ZWJEcmFnQ2xpZW50UXQuY3BwIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3Vw
cG9ydC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCmluZGV4IGJiZGI2MzViMzczMWU4MGYyZWUwZTJh
MGE3ZjUyMmZhM2YyMzk5MmQuLjIwZjdlOTUzNjk3ODA1MzJlYjNlMjk5NWJlOTdiZWJlOTUxZjZi
NzEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQv
cXQvV2ViRHJhZ0NsaWVudFF0LmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHAKQEAgLTI2LDkgKzI2LDEwIEBACiAj
aW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViRHJhZ0NsaWVudC5oIgogCi0jaW5jbHVk
ZSAiQ2xpcGJvYXJkUXQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJEcmFn
RGF0YS5oIgogI2luY2x1ZGUgIkdyYXBoaWNzQ29udGV4dC5oIgorI2luY2x1ZGUgIlBhc3RlYm9h
cmQuaCIKICNpbmNsdWRlICJTaGFyZWFibGVCaXRtYXAuaCIKICNpbmNsdWRlICJXZWJDb3JlQXJn
dW1lbnRDb2RlcnMuaCIKICNpbmNsdWRlICJXZWJQYWdlLmgiCkBAIC01Miw5ICs1Myw5IEBAIHN0
YXRpYyBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY29udmVydFFQaXhtYXBUb1NoYXJlYWJs
ZUJpdG1hcChRUGl4bWFwKiBwaXhtCiAKIHZvaWQgV2ViRHJhZ0NsaWVudDo6c3RhcnREcmFnKERy
YWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiBjbGllbnRQb3NpdGlvbiwgY29u
c3QgSW50UG9pbnQmIGdsb2JhbFBvc2l0aW9uLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUq
LCBib29sKQogewotICAgIFFNaW1lRGF0YSogY2xpcGJvYXJkRGF0YSA9IHN0YXRpY19jYXN0PENs
aXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkRGF0YSgpOworICAgIFFNaW1lRGF0YSog
Y2xpcGJvYXJkRGF0YSA9IGNsaXBib2FyZC0+cGFzdGVib2FyZCgpLmNsaXBib2FyZERhdGEoKTsK
ICAgICBEcmFnT3BlcmF0aW9uIGRyYWdPcGVyYXRpb25NYXNrID0gY2xpcGJvYXJkLT5zb3VyY2VP
cGVyYXRpb24oKTsKLSAgICBzdGF0aWNfY2FzdDxDbGlwYm9hcmRRdCo+KGNsaXBib2FyZCktPmlu
dmFsaWRhdGVXcml0YWJsZURhdGEoKTsKKyAgICBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5pbnZh
bGlkYXRlV3JpdGFibGVEYXRhKCk7CiAgICAgRHJhZ0RhdGEgZHJhZ0RhdGEoY2xpcGJvYXJkRGF0
YSwgY2xpZW50UG9zaXRpb24sIGdsb2JhbFBvc2l0aW9uLCBkcmFnT3BlcmF0aW9uTWFzayk7CiAK
ICAgICBSZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBiaXRtYXAgPSBjb252ZXJ0UVBpeG1hcFRvU2hh
cmVhYmxlQml0bWFwKGRyYWdJbWFnZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>203512</attachid>
            <date>2013-06-02 04:22:46 -0700</date>
            <delta_ts>2013-06-02 21:53:27 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-116416-20130602165115.patch</filename>
            <type>text/plain</type>
            <size>34556</size>
            <attacher name="Arunprasad Rajkumar">arurajku</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTUxMDY2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTc3ZDRjMjMzNjgzMjE4
YTc3NjhiYjM0ZDVkYWQzZjQzODk3YTcwZC4uMTY1NDBkMmJmMGNkZjlkYTNhZmU1OGY4YjgwOWM1
ZTFiYWQwYjE5MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ5IEBACisyMDEzLTA2LTAyICBBcnVu
cHJhc2FkIFJhamt1bWFyICA8YXJ1cmFqa3VAY2lzY28uY29tPgorCisgICAgICAgIFtRdF0gTW92
ZSBRdCBwb3J0IG9mZiBsZWdhY3kgY2xpcGJvYXJkCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJr
aXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMTY0MTYKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JP
RFkgKE9PUFMhKS4KKworICAgICAgICBObyBjaGFuZ2UgaW4gYmVoYXZpb3IsIG5vIG5ldyB0ZXN0
cyBhZGRlZC4KKworICAgICAgICAqIFRhcmdldC5wcmk6IFJlbW92ZWQgQ2xpcGJvYXJkUXQuaCBh
bmQgRWRpdG9yUXQuY3BwIGZyb20gY29tcGlsYXRpb24uCisgICAgICAgICogZG9tL0NsaXBib2Fy
ZC5oOgorICAgICAgICAqIGVkaXRpbmcvcXQvRWRpdG9yUXQuY3BwOiBSZW1vdmVkLgorICAgICAg
ICAqIHBhZ2UvcXQvRXZlbnRIYW5kbGVyUXQuY3BwOiBVc2UgQ2xpcGJvYXJkOjpjcmVhdGVGb3JE
cmFnQW5kRHJvcCgpLgorICAgICAgICAoV2ViQ29yZTo6RXZlbnRIYW5kbGVyOjpjcmVhdGVEcmFn
Z2luZ0NsaXBib2FyZCk6CisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2xpcGJvYXJkRGF0YSk6IEV4cG9zZSB3cml0YWJsZSBR
TWltZURhdGEqIHRvIG91dHNpZGUsIHNvIHRoYXQgaXQgaXMgYWNjZXNzaWJsZQorICAgICAgICBm
cm9tIERyYWdDbGllbnRRdC5jcHAgYW5kIFdlYkRyYWdDbGllbnRRdC5jcHAuCisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjppbnZhbGlkYXRlV3JpdGFibGVEYXRhKTogCisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjppc0ZvckRyYWdBbmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6
OlBhc3RlYm9hcmQ6OmlzRm9yQ29weUFuZFBhc3RlKToKKyAgICAgICAgKiBwbGF0Zm9ybS9xdC9D
bGlwYm9hcmRRdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmNyZWF0ZURyYWdJ
bWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpDbGlwYm9hcmQ6OmRlY2xhcmVBbmRXcml0ZURyYWdJ
bWFnZSk6CisgICAgICAgICogcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaDogUmVtb3ZlZC4KKyAg
ICAgICAgKiBwbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwOiBNb3ZlZCByZXF1aXJlZCBtZXRo
b2RzIGZyb20gQ2xpcGJvYXJkUXQuY3BwLgorICAgICAgICAoV2ViQ29yZTo6aXNUZXh0TWltZVR5
cGUpOgorICAgICAgICAoV2ViQ29yZTo6aXNIdG1sTWltZVR5cGUpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNy
ZWF0ZUZvckNvcHlBbmRQYXN0ZSk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpjcmVh
dGVQcml2YXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdB
bmREcm9wKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OlBhc3RlYm9hcmQpOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6flBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29y
ZTo6UGFzdGVib2FyZDo6Z2VuZXJhbFBhc3RlYm9hcmQpOgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6aXNTZWxlY3Rpb25Nb2RlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6
OnNldFNlbGVjdGlvbk1vZGUpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZERh
dGEpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6aGFzRGF0YSk6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjpjbGVhcik6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlU3RyaW5n
KToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzKToKKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6c2V0RHJhZ0ltYWdlKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRl
UGFzdGVib2FyZCk6CisKIDIwMTMtMDUtMzEgIEFuZGVycyBDYXJsc3NvbiAgPGFuZGVyc2NhQGFw
cGxlLmNvbT4KIAogICAgICAgICBUYWtlIHRoZSBub3JtYWwgTlNWaWV3IGNvZGUgcGF0aCB3aGVu
IGRyYXdpbmcgaW50byBhbiBpbmNsdXNpdmUgbGF5ZXIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvcXQvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKaW5kZXggZTEyMTA3
OTc4MDZiYmU3Y2Y0ZDkzZGRkNjdiNzk3YjlhZjZmZDdiZi4uM2U5ZjQ1ODZlYTNjY2JhNmE5MDdk
M2FiZGU2ZTE4MTQ1NmJlZmViMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VM
b2cKKysrIGIvU291cmNlL1dlYktpdC9xdC9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAx
My0wNi0wMiAgQXJ1bnByYXNhZCBSYWprdW1hciAgPGFydXJhamt1QGNpc2NvLmNvbT4KKworICAg
ICAgICBbUXRdIE1vdmUgUXQgcG9ydCBvZmYgbGVnYWN5IGNsaXBib2FyZAorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTE2NDE2CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJDb3JlU3VwcG9ydC9EcmFn
Q2xpZW50UXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RHJhZ0NsaWVudFF0OjpzdGFydERyYWcp
OgorCiAyMDEzLTA1LTI5ICBMaWFuZyBRaSAgPGxpYW5nLnFpQGRpZ2lhLmNvbT4KIAogICAgICAg
ICBbUXRdIEFkZCBhbGwgcGx1Z2lucy5xbWx0eXBlcyBmaWxlcyBhbmQgdXBkYXRlIHFtbGRpciBm
aWxlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nIGIvU291cmNlL1dlYktp
dDIvQ2hhbmdlTG9nCmluZGV4IDc4YzAyMjhjNjM4Yzk4NjFlNjA2MjZkZjk0ZWEzNTZkNThiZDIy
OGMuLmIxYTgwOTQxYjQzYzBjM2M2ODYxNWVhMGNiMTE0NmE5MmUxNWI0NTIgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMyBAQAorMjAxMy0wNi0wMiAgQXJ1bnByYXNhZCBSYWprdW1hciAgPGFydXJh
amt1QGNpc2NvLmNvbT4KKworICAgICAgICBbUXRdIE1vdmUgUXQgcG9ydCBvZmYgbGVnYWN5IGNs
aXBib2FyZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MTE2NDE2CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdDbGllbnRRdC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyk6CisKIDIwMTMtMDUtMzEgIEd5
dXlvdW5nIEtpbSAgPGd5dXlvdW5nLmtpbUBzYW1zdW5nLmNvbT4KIAogICAgICAgICBbRUZMXVtX
SzJdIEFkZCBhIG51bGwgY2hlY2tpbmcgY29uZGl0aW9uIHRvIGluIGhpZGUoKSBvZiBFd2tDb250
ZXh0TWVudQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaSBiL1NvdXJjZS9X
ZWJDb3JlL1RhcmdldC5wcmkKaW5kZXggZTU4OWZjMGMyNGQyOWE0ZDVlZTRkY2U5MTI2YmU5N2Rk
NjkwNzY2Yi4uNzk5ZDBhNTUwNWY2NzEyODdhMmJkYjE3ZDhkNTE2YmMwN2UyN2I1YSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvVGFyZ2V0LnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9UYXJn
ZXQucHJpCkBAIC0yMzQyLDcgKzIzNDIsNiBAQCBIRUFERVJTICs9IFwKICAgICBwbGF0Zm9ybS9Q
bGF0Zm9ybVRvdWNoUG9pbnQuaCBcCiAgICAgcGxhdGZvcm0vUG9wdXBNZW51LmggXAogICAgIHBs
YXRmb3JtL1JlZmVycmVyUG9saWN5LmggXAotICAgIHBsYXRmb3JtL3F0L0NsaXBib2FyZFF0Lmgg
XAogICAgIHBsYXRmb3JtL3F0L1FXZWJQYWdlQ2xpZW50LmggXAogICAgIHBsYXRmb3JtL3F0L1FT
dHlsZUZhY2FkZS5oIFwKICAgICBwbGF0Zm9ybS9xdC9SZW5kZXJUaGVtZVFTdHlsZS5oIFwKQEAg
LTI5MDIsNyArMjkwMSw2IEBAIFNPVVJDRVMgKz0gXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQv
UHJveHlTZXJ2ZXJRdC5jcHAgXAogICAgIHBsYXRmb3JtL25ldHdvcmsvcXQvUXRNSU1FVHlwZVNu
aWZmZXIuY3BwIFwKICAgICBwbGF0Zm9ybS9uZXR3b3JrL3F0L1FOZXR3b3JrUmVwbHlIYW5kbGVy
LmNwcCBcCi0gICAgZWRpdGluZy9xdC9FZGl0b3JRdC5jcHAgXAogICAgIHBsYXRmb3JtL0N1cnNv
ci5jcHAgXAogICAgIHBsYXRmb3JtL0NvbnRleHRNZW51LmNwcCBcCiAgICAgcGxhdGZvcm0vQ29u
dGV4dE1lbnVJdGVtLmNwcCBcCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJv
YXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9kb20vQ2xpcGJvYXJkLmgKaW5kZXggODIwMGM5YmZiNWMw
NDc4OGI1OGZmM2Q2OGEzNzcxNDg1MDgwYTQzMS4uYzVkNDcyZWU0ZmI5MmY1MDRmOGIzNjJiNTYz
OWUxMzBhNTg5N2Y0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZG9tL0NsaXBib2FyZC5o
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9DbGlwYm9hcmQuaApAQCAtMzQsNyArMzQsNyBAQAog
Ly8gVGhpcyBET00gb2JqZWN0IG5vdyB3b3JrcyBieSBjYWxsaW5nIHRocm91Z2ggdG8gY2xhc3Nl
cyBpbiB0aGUgcGxhdGZvcm0gbGF5ZXIuCiAvLyBTcGVjaWZpY2FsbHksIHRoZSBjbGFzcyBjdXJy
ZW50bHkgbmFtZWQgUGFzdGVib2FyZC4gVGhlIGxlZ2FjeSBzdHlsZSBpbnN0ZWFkCiAvLyB1c2Vz
IHRoaXMgYXMgYW4gYWJzdHJhY3QgYmFzZSBjbGFzcy4KLSNkZWZpbmUgV1RGX1VTRV9MRUdBQ1lf
U1RZTEVfQUJTVFJBQ1RfQ0xJUEJPQVJEX0NMQVNTIChQTEFURk9STShJT1MpIHx8IFBMQVRGT1JN
KFFUKSkKKyNkZWZpbmUgV1RGX1VTRV9MRUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJUEJPQVJEX0NM
QVNTIFBMQVRGT1JNKElPUykKIAogI2lmIFVTRShMRUdBQ1lfU1RZTEVfQUJTVFJBQ1RfQ0xJUEJP
QVJEX0NMQVNTKQogI2RlZmluZSBMRUdBQ1lfVklSVFVBTCB2aXJ0dWFsCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9lZGl0aW5nL3F0L0VkaXRvclF0LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2Vk
aXRpbmcvcXQvRWRpdG9yUXQuY3BwCmRlbGV0ZWQgZmlsZSBtb2RlIDEwMDY0NAppbmRleCA0ZDcy
ZDM5MjhmYzU1OGJjMGFhNTczZWYwYmEwOTRkZmFlNzkxYWE5Li4wMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwCi0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvcXQvRWRp
dG9yUXQuY3BwCisrKyAvZGV2L251bGwKQEAgLTEsNDEgKzAsMCBAQAotLyoKLSAqIENvcHlyaWdo
dCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNrQGtkZS5vcmc+Ci0gKiBDb3B5cmlnaHQgKEMpIDIw
MDYgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKLSAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICoKLSAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFO
RCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgotICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKLSAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKLSAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpbmNsdWRlICJjb25m
aWcuaCIKLSNpbmNsdWRlICJFZGl0b3IuaCIKLQotI2luY2x1ZGUgIkNsaXBib2FyZEFjY2Vzc1Bv
bGljeS5oIgotI2luY2x1ZGUgIkNsaXBib2FyZFF0LmgiCi0jaW5jbHVkZSAiRG9jdW1lbnQuaCIK
LQotbmFtZXNwYWNlIFdlYkNvcmUgewotCi1QYXNzUmVmUHRyPENsaXBib2FyZD4gRWRpdG9yOjpu
ZXdHZW5lcmFsQ2xpcGJvYXJkKENsaXBib2FyZEFjY2Vzc1BvbGljeSBwb2xpY3ksIEZyYW1lKiBm
cmFtZSkKLXsKLSAgICByZXR1cm4gQ2xpcGJvYXJkUXQ6OmNyZWF0ZShwb2xpY3ksIGZyYW1lKTsK
LX0KLQotfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGFnZS9xdC9FdmVudEhhbmRsZXJRdC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50
SGFuZGxlclF0LmNwcAppbmRleCAwZjc4MDZhNTNiN2ZjMTU0NGMwYzU3MjFkNjIyNDAzMTllYzZj
MjgwLi5mNDVmODFkYzc0YjI0NmUwYjk4NWUxMDA0MmQ3MzMzMjNjZmNmYzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wYWdlL3F0L0V2ZW50SGFuZGxlclF0LmNwcApAQCAtMjgsNyArMjgsNyBAQAogI2lu
Y2x1ZGUgImNvbmZpZy5oIgogI2luY2x1ZGUgIkV2ZW50SGFuZGxlci5oIgogCi0jaW5jbHVkZSAi
Q2xpcGJvYXJkUXQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKICNpbmNsdWRlICJDdXJzb3Iu
aCIKICNpbmNsdWRlICJEb2N1bWVudC5oIgogI2luY2x1ZGUgIkV2ZW50TmFtZXMuaCIKQEAgLTk2
LDcgKzk2LDcgQEAgYm9vbCBFdmVudEhhbmRsZXI6OnBhc3NXaGVlbEV2ZW50VG9XaWRnZXQoY29u
c3QgUGxhdGZvcm1XaGVlbEV2ZW50JiBldmVudCwgV2lkZ2UKIAogUGFzc1JlZlB0cjxDbGlwYm9h
cmQ+IEV2ZW50SGFuZGxlcjo6Y3JlYXRlRHJhZ2dpbmdDbGlwYm9hcmQoKSBjb25zdAogewotICAg
IHJldHVybiBDbGlwYm9hcmRRdDo6Y3JlYXRlKENsaXBib2FyZFdyaXRhYmxlLCBtX2ZyYW1lLCBD
bGlwYm9hcmQ6OkRyYWdBbmREcm9wKTsKKyAgICByZXR1cm4gQ2xpcGJvYXJkOjpjcmVhdGVGb3JE
cmFnQW5kRHJvcCgpOwogfQogCiBib29sIEV2ZW50SGFuZGxlcjo6cGFzc01vdXNlUHJlc3NFdmVu
dFRvU3ViZnJhbWUoTW91c2VFdmVudFdpdGhIaXRUZXN0UmVzdWx0cyYgbWV2LCBGcmFtZSogc3Vi
ZnJhbWUpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggZDgwMDUwMTkxYjNl
NGE1NDE3Zjg1NjVmYjQ2NGVjYWZlZDczYmZiYi4uYjAwMTE4YzU2OTA3YzJmYjA5NDhlZTQwZWI4
OGI5M2MwYjc2YWQwMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVi
b2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMzcs
NiArMzcsMTAgQEAKIHR5cGVkZWYgc3RydWN0IF9HdGtDbGlwYm9hcmQgR3RrQ2xpcGJvYXJkOwog
I2VuZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyNpbmNsdWRlIDxRTWltZURhdGE+CisjZW5kaWYK
KwogI2lmIFBMQVRGT1JNKFdJTikKICNpbmNsdWRlICJDT01QdHIuaCIKICNpbmNsdWRlICJXQ0Rh
dGFPYmplY3QuaCIKQEAgLTEwNCw2ICsxMDgsMTQgQEAgcHVibGljOgogICAgIFBhc3NSZWZQdHI8
RGF0YU9iamVjdEd0az4gZGF0YU9iamVjdCgpIGNvbnN0OwogI2VuZGlmCiAKKyNpZiBQTEFURk9S
TShRVCkKKyAgICBzdGF0aWMgUGFzc093blB0cjxQYXN0ZWJvYXJkPiBjcmVhdGUoY29uc3QgUU1p
bWVEYXRhKiByZWFkYWJsZUNsaXBib2FyZCA9IDAsIGJvb2wgaXNGb3JEcmFnQW5kRHJvcCA9IGZh
bHNlKTsKKyAgICBRTWltZURhdGEqIGNsaXBib2FyZERhdGEoKSBjb25zdCB7IHJldHVybiBtX3dy
aXRhYmxlRGF0YTsgfQorICAgIHZvaWQgaW52YWxpZGF0ZVdyaXRhYmxlRGF0YSgpIGNvbnN0IHsg
bV93cml0YWJsZURhdGEgPSAwOyB9CisgICAgYm9vbCBpc0ZvckRyYWdBbmREcm9wKCkgY29uc3Qg
eyByZXR1cm4gbV9pc0ZvckRyYWdBbmREcm9wOyB9CisgICAgYm9vbCBpc0ZvckNvcHlBbmRQYXN0
ZSgpIGNvbnN0IHsgcmV0dXJuICFtX2lzRm9yRHJhZ0FuZERyb3A7IH0KKyNlbmRpZgorCiAgICAg
Ly8gRGVwcmVjYXRlZC4gVXNlIGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSBpbnN0ZWFkLgogICAgIHN0
YXRpYyBQYXN0ZWJvYXJkKiBnZW5lcmFsUGFzdGVib2FyZCgpOwogCkBAIC0xNjUsNyArMTc3LDcg
QEAgcHVibGljOgogICAgIHZvaWQgd3JpdGVJbWFnZVRvRGF0YU9iamVjdChFbGVtZW50KiwgY29u
c3QgS1VSTCYpOwogI2VuZGlmCiAKLSNpZiBQTEFURk9STShHVEspCisjaWYgUExBVEZPUk0oR1RL
KSB8fCBQTEFURk9STShRVCkKICAgICB+UGFzdGVib2FyZCgpOwogI2VuZGlmCiAKQEAgLTE3Nyw2
ICsxODksMTAgQEAgcHJpdmF0ZToKICAgICBQYXN0ZWJvYXJkKEd0a0NsaXBib2FyZCopOwogI2Vu
ZGlmCiAKKyNpZiBQTEFURk9STShRVCkKKyAgICBQYXN0ZWJvYXJkKGNvbnN0IFFNaW1lRGF0YSog
LCBib29sKTsKKyNlbmRpZgorCiAjaWYgUExBVEZPUk0oV0lOKQogICAgIGV4cGxpY2l0IFBhc3Rl
Ym9hcmQoSURhdGFPYmplY3QqKTsKICAgICBleHBsaWNpdCBQYXN0ZWJvYXJkKFdDRGF0YU9iamVj
dCopOwpAQCAtMjA1LDcgKzIyMSwxMiBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQTEFURk9S
TShRVCkKKyAgICBjb25zdCBRTWltZURhdGEqIHJlYWREYXRhKCkgY29uc3Q7CisKICAgICBib29s
IG1fc2VsZWN0aW9uTW9kZTsKKyAgICBjb25zdCBRTWltZURhdGEqIG1fcmVhZGFibGVEYXRhOwor
ICAgIG11dGFibGUgUU1pbWVEYXRhKiBtX3dyaXRhYmxlRGF0YTsKKyAgICBib29sIG1faXNGb3JE
cmFnQW5kRHJvcDsKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oR1RLKQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuY3BwCmluZGV4IGE0MGFiZTUxMDViZGQ4M2Q2ZmJkMDBm
ZDZmNzU0OTcyMWMwMDI1YjMuLmYyZTY0MTM1MjM1Nzc1MGQzNWRjMWU4M2E5ZDg2ODIwOWRmZGM0
NDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9xdC9DbGlwYm9hcmRRdC5jcHAKQEAgLTMs
NiArMyw3IEBACiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKICAqIENvcHlyaWdodCAoQykgMjAxMCBTZW5jaGEs
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMyBDaXNjbyBT
eXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI3LDM0NiArMjgsMzcgQEAKICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgi
Ci0jaW5jbHVkZSAiQ2xpcGJvYXJkUXQuaCIKKyNpbmNsdWRlICJDbGlwYm9hcmQuaCIKIAogI2lu
Y2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiRGF0YVRyYW5zZmVySXRlbUxpc3RRdC5o
IgogI2luY2x1ZGUgIkRvY3VtZW50LmgiCi0jaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRl
ICJFZGl0b3IuaCIKICNpbmNsdWRlICJFbGVtZW50LmgiCi0jaW5jbHVkZSAiRmlsZUxpc3QuaCIK
ICNpbmNsdWRlICJGcmFtZS5oIgotI2luY2x1ZGUgIkhUTUxOYW1lcy5oIgotI2luY2x1ZGUgIkhU
TUxQYXJzZXJJZGlvbXMuaCIKICNpbmNsdWRlICJJbWFnZS5oIgotI2luY2x1ZGUgIkludFBvaW50
LmgiCi0jaW5jbHVkZSAiS1VSTC5oIgotI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCi0jaW5j
bHVkZSAiUmFuZ2UuaCIKLSNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgotI2luY2x1ZGUgIm1hcmt1
cC5oIgotI2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KLSNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KLQotI2luY2x1ZGUgPFFDbGlwYm9hcmQ+Ci0jaW5jbHVkZSA8UUd1aUFw
cGxpY2F0aW9uPgotI2luY2x1ZGUgPFFMaXN0PgotI2luY2x1ZGUgPFFNaW1lRGF0YT4KLSNpbmNs
dWRlIDxRU3RyaW5nTGlzdD4KLSNpbmNsdWRlIDxRVGV4dENvZGVjPgotI2luY2x1ZGUgPFFVcmw+
CisjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKLXN0YXRp
YyBib29sIGlzVGV4dE1pbWVUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICByZXR1cm4g
dHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L3BsYWluOyIpOwot
fQotCi1zdGF0aWMgYm9vbCBpc0h0bWxNaW1lVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0g
ICAgcmV0dXJuIHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZS5zdGFydHNXaXRoKCJ0ZXh0L2h0
bWw7Iik7Ci19Ci0KLVBhc3NSZWZQdHI8Q2xpcGJvYXJkPiBDbGlwYm9hcmQ6OmNyZWF0ZShDbGlw
Ym9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBEcmFnRGF0YSogZHJhZ0RhdGEsIEZyYW1lKiBmcmFt
ZSkKLXsKLSAgICByZXR1cm4gQ2xpcGJvYXJkUXQ6OmNyZWF0ZShwb2xpY3ksIGRyYWdEYXRhLT5w
bGF0Zm9ybURhdGEoKSwgZnJhbWUpOwotfQotCi1DbGlwYm9hcmRRdDo6Q2xpcGJvYXJkUXQoQ2xp
cGJvYXJkQWNjZXNzUG9saWN5IHBvbGljeSwgY29uc3QgUU1pbWVEYXRhKiByZWFkYWJsZUNsaXBi
b2FyZCwgRnJhbWUqIGZyYW1lKQotICAgIDogQ2xpcGJvYXJkKHBvbGljeSwgRHJhZ0FuZERyb3Ap
Ci0gICAgLCBtX3JlYWRhYmxlRGF0YShyZWFkYWJsZUNsaXBib2FyZCkKLSAgICAsIG1fd3JpdGFi
bGVEYXRhKDApCi0gICAgLCBtX2ZyYW1lKGZyYW1lKQotewotICAgIFFfQVNTRVJUKHBvbGljeSA9
PSBDbGlwYm9hcmRSZWFkYWJsZSB8fCBwb2xpY3kgPT0gQ2xpcGJvYXJkVHlwZXNSZWFkYWJsZSk7
Ci19Ci0KLUNsaXBib2FyZFF0OjpDbGlwYm9hcmRRdChDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9s
aWN5LCBDbGlwYm9hcmRUeXBlIGNsaXBib2FyZFR5cGUsIEZyYW1lKiBmcmFtZSkKLSAgICA6IENs
aXBib2FyZChwb2xpY3ksIGNsaXBib2FyZFR5cGUpCi0gICAgLCBtX3JlYWRhYmxlRGF0YSgwKQot
ICAgICwgbV93cml0YWJsZURhdGEoMCkKLSAgICAsIG1fZnJhbWUoZnJhbWUpCi17Ci0gICAgUV9B
U1NFUlQocG9saWN5ID09IENsaXBib2FyZFJlYWRhYmxlIHx8IHBvbGljeSA9PSBDbGlwYm9hcmRX
cml0YWJsZSB8fCBwb2xpY3kgPT0gQ2xpcGJvYXJkTnVtYik7Ci0KLSNpZm5kZWYgUVRfTk9fQ0xJ
UEJPQVJECi0gICAgaWYgKHBvbGljeSAhPSBDbGlwYm9hcmRXcml0YWJsZSkgewotICAgICAgICBR
X0FTU0VSVChpc0ZvckNvcHlBbmRQYXN0ZSgpKTsKLSAgICAgICAgbV9yZWFkYWJsZURhdGEgPSBR
R3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5taW1lRGF0YSgpOwotICAgIH0KLSNlbmRpZgot
fQotCi1DbGlwYm9hcmRRdDo6fkNsaXBib2FyZFF0KCkKLXsKLSAgICBpZiAobV93cml0YWJsZURh
dGEgJiYgaXNGb3JDb3B5QW5kUGFzdGUoKSkKLSAgICAgICAgbV93cml0YWJsZURhdGEgPSAwOwot
ICAgIGVsc2UKLSAgICAgICAgZGVsZXRlIG1fd3JpdGFibGVEYXRhOwotICAgIG1fcmVhZGFibGVE
YXRhID0gMDsKLX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6Y2xlYXJEYXRhKGNvbnN0IFN0cmluZyYg
dHlwZSkKLXsKLSAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQotICAgICAgICByZXR1cm47Ci0KLSAg
ICBpZiAobV93cml0YWJsZURhdGEpIHsKLSAgICAgICAgbV93cml0YWJsZURhdGEtPnJlbW92ZUZv
cm1hdCh0eXBlKTsKLSAgICAgICAgaWYgKG1fd3JpdGFibGVEYXRhLT5mb3JtYXRzKCkuaXNFbXB0
eSgpKSB7Ci0gICAgICAgICAgICBpZiAoaXNGb3JEcmFnQW5kRHJvcCgpKQotICAgICAgICAgICAg
ICAgIGRlbGV0ZSBtX3dyaXRhYmxlRGF0YTsKLSAgICAgICAgICAgIG1fd3JpdGFibGVEYXRhID0g
MDsKLSAgICAgICAgfQotICAgIH0KLSNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAgaWYgKGlz
Rm9yQ29weUFuZFBhc3RlKCkpCi0gICAgICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCkt
PnNldE1pbWVEYXRhKG1fd3JpdGFibGVEYXRhKTsKLSNlbmRpZgotfQotCi12b2lkIENsaXBib2Fy
ZFF0OjpjbGVhckRhdGEoKQorRHJhZ0ltYWdlUmVmIENsaXBib2FyZDo6Y3JlYXRlRHJhZ0ltYWdl
KEludFBvaW50JiBsb2NhdGlvbikgY29uc3QKIHsKLSAgICBpZiAoIWNhbldyaXRlRGF0YSgpKQot
ICAgICAgICByZXR1cm47Ci0KLSNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAgaWYgKGlzRm9y
Q29weUFuZFBhc3RlKCkpCi0gICAgICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNl
dE1pbWVEYXRhKDApOwotICAgIGVsc2UKLSNlbmRpZgotICAgICAgICBkZWxldGUgbV93cml0YWJs
ZURhdGE7Ci0gICAgbV93cml0YWJsZURhdGEgPSAwOwotfQotCi1TdHJpbmcgQ2xpcGJvYXJkUXQ6
OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAotewotICAgIGNvbnN0IFFNaW1lRGF0
YSogZGF0YSA9IHJlYWREYXRhKCk7Ci0gICAgaWYgKCFjYW5SZWFkRGF0YSgpIHx8ICFkYXRhKQot
ICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0KLSAgICBpZiAoaXNIdG1sTWltZVR5cGUodHlwZSkg
JiYgZGF0YS0+aGFzSHRtbCgpKQotICAgICAgICByZXR1cm4gZGF0YS0+aHRtbCgpOwotCi0gICAg
aWYgKGlzVGV4dE1pbWVUeXBlKHR5cGUpICYmIGRhdGEtPmhhc1RleHQoKSkKLSAgICAgICAgcmV0
dXJuIGRhdGEtPnRleHQoKTsKLQotICAgIFFCeXRlQXJyYXkgcmF3RGF0YSA9IGRhdGEtPmRhdGEo
dHlwZSk7Ci0gICAgUVN0cmluZyBzdHJpbmdEYXRhID0gUVRleHRDb2RlYzo6Y29kZWNGb3JOYW1l
KCJVVEYtMTYiKS0+dG9Vbmljb2RlKHJhd0RhdGEpOwotICAgIHJldHVybiBzdHJpbmdEYXRhOwot
fQotCi1ib29sIENsaXBib2FyZFF0OjpzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiBkYXRhKQotewotICAgIGlmICghY2FuV3JpdGVEYXRhKCkpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLQotICAgIGlmICghbV93cml0YWJsZURhdGEpCi0gICAgICAgIG1fd3JpdGFibGVE
YXRhID0gbmV3IFFNaW1lRGF0YTsKLQotICAgIGlmIChpc1RleHRNaW1lVHlwZSh0eXBlKSkKLSAg
ICAgICAgbV93cml0YWJsZURhdGEtPnNldFRleHQoUVN0cmluZyhkYXRhKSk7Ci0gICAgZWxzZSBp
ZiAoaXNIdG1sTWltZVR5cGUodHlwZSkpCi0gICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRIdG1s
KFFTdHJpbmcoZGF0YSkpOwotICAgIGVsc2UgewotICAgICAgICBRQnl0ZUFycmF5IGFycmF5KHJl
aW50ZXJwcmV0X2Nhc3Q8Y29uc3QgY2hhcio+KGRhdGEuY2hhcmFjdGVycygpKSwgZGF0YS5sZW5n
dGgoKSAqIDIpOwotICAgICAgICBtX3dyaXRhYmxlRGF0YS0+c2V0RGF0YShRU3RyaW5nKHR5cGUp
LCBhcnJheSk7Ci0gICAgfQotCi0gICAgcmV0dXJuIHRydWU7Ci19Ci0KLS8vIGV4dGVuc2lvbnMg
YmV5b25kIElFJ3MgQVBJCi1MaXN0SGFzaFNldDxTdHJpbmc+IENsaXBib2FyZFF0Ojp0eXBlcygp
IGNvbnN0Ci17Ci0gICAgY29uc3QgUU1pbWVEYXRhKiBkYXRhID0gcmVhZERhdGEoKTsKLSAgICBp
ZiAoIWNhblJlYWRUeXBlcygpIHx8ICFkYXRhKQotICAgICAgICByZXR1cm4gTGlzdEhhc2hTZXQ8
U3RyaW5nPigpOwotCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7Ci0gICAgUVN0cmlu
Z0xpc3QgZm9ybWF0cyA9IGRhdGEtPmZvcm1hdHMoKTsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8
IGZvcm1hdHMuY291bnQoKTsgKytpKQotICAgICAgICByZXN1bHQuYWRkKGZvcm1hdHMuYXQoaSkp
OwotICAgIHJldHVybiByZXN1bHQ7Ci19Ci0KLVBhc3NSZWZQdHI8RmlsZUxpc3Q+IENsaXBib2Fy
ZFF0OjpmaWxlcygpIGNvbnN0Ci17Ci0gICAgY29uc3QgUU1pbWVEYXRhKiBkYXRhID0gcmVhZERh
dGEoKTsKLSAgICBpZiAoIWNhblJlYWREYXRhKCkgfHwgIWRhdGEgfHwgIWRhdGEtPmhhc1VybHMo
KSkKLSAgICAgICAgcmV0dXJuIEZpbGVMaXN0OjpjcmVhdGUoKTsKLQotICAgIFJlZlB0cjxGaWxl
TGlzdD4gZmlsZUxpc3QgPSBGaWxlTGlzdDo6Y3JlYXRlKCk7Ci0gICAgUUxpc3Q8UVVybD4gdXJs
cyA9IGRhdGEtPnVybHMoKTsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdXJscy5zaXplKCk7
IGkrKykgewotICAgICAgICBRVXJsIHVybCA9IHVybHNbaV07Ci0gICAgICAgIGlmICh1cmwuc2No
ZW1lKCkgIT0gUUxhdGluMVN0cmluZygiZmlsZSIpKQotICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgIGZpbGVMaXN0LT5hcHBlbmQoRmlsZTo6Y3JlYXRlKHVybC50b0xvY2FsRmlsZSgpLCBG
aWxlOjpBbGxDb250ZW50VHlwZXMpKTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmlsZUxpc3QucmVs
ZWFzZSgpOwotfQotCi12b2lkIENsaXBib2FyZFF0OjpzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2Uq
IGltYWdlLCBjb25zdCBJbnRQb2ludCYgcG9pbnQpCi17Ci0gICAgc2V0RHJhZ0ltYWdlKGltYWdl
LCAwLCBwb2ludCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkUXQ6OnNldERyYWdJbWFnZUVsZW1lbnQo
Tm9kZSogbm9kZSwgY29uc3QgSW50UG9pbnQmIHBvaW50KQotewotICAgIHNldERyYWdJbWFnZSgw
LCBub2RlLCBwb2ludCk7Ci19Ci0KLXZvaWQgQ2xpcGJvYXJkUXQ6OnNldERyYWdJbWFnZShDYWNo
ZWRJbWFnZSogaW1hZ2UsIE5vZGUgKm5vZGUsIGNvbnN0IEludFBvaW50ICZsb2MpCi17Ci0gICAg
aWYgKCFjYW5TZXREcmFnSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuOworICAgIGxvY2F0aW9uID0g
bV9kcmFnTG9jOwogCiAgICAgaWYgKG1fZHJhZ0ltYWdlKQotICAgICAgICBtX2RyYWdJbWFnZS0+
cmVtb3ZlQ2xpZW50KHRoaXMpOwotICAgIG1fZHJhZ0ltYWdlID0gaW1hZ2U7Ci0gICAgaWYgKG1f
ZHJhZ0ltYWdlKQotICAgICAgICBtX2RyYWdJbWFnZS0+YWRkQ2xpZW50KHRoaXMpOwotCi0gICAg
bV9kcmFnTG9jID0gbG9jOwotICAgIG1fZHJhZ0ltYWdlRWxlbWVudCA9IG5vZGU7Ci19CisgICAg
ICAgIHJldHVybiBjcmVhdGVEcmFnSW1hZ2VGcm9tSW1hZ2UobV9kcmFnSW1hZ2UtPmltYWdlKCkp
OwogCi1EcmFnSW1hZ2VSZWYgQ2xpcGJvYXJkUXQ6OmNyZWF0ZURyYWdJbWFnZShJbnRQb2ludCYg
ZHJhZ0xvYykgY29uc3QKLXsKLSAgICBkcmFnTG9jID0gbV9kcmFnTG9jOwotCi0gICAgaWYgKG1f
ZHJhZ0ltYWdlKQotICAgICAgICByZXR1cm4gbV9kcmFnSW1hZ2UtPmltYWdlKCktPm5hdGl2ZUlt
YWdlRm9yQ3VycmVudEZyYW1lKCk7Ci0gICAgaWYgKG1fZHJhZ0ltYWdlRWxlbWVudCAmJiBtX2Zy
YW1lKQotICAgICAgICByZXR1cm4gbV9mcmFtZS0+bm9kZUltYWdlKG1fZHJhZ0ltYWdlRWxlbWVu
dC5nZXQoKSk7Ci0KLSAgICByZXR1cm4gMDsKLX0KLQotc3RhdGljIENhY2hlZEltYWdlKiBnZXRD
YWNoZWRJbWFnZShFbGVtZW50KiBlbGVtZW50KQotewotICAgIC8vIEF0dGVtcHQgdG8gcHVsbCBD
YWNoZWRJbWFnZSBmcm9tIGVsZW1lbnQKLSAgICBBU1NFUlQoZWxlbWVudCk7Ci0gICAgUmVuZGVy
T2JqZWN0KiByZW5kZXJlciA9IGVsZW1lbnQtPnJlbmRlcmVyKCk7Ci0gICAgaWYgKCFyZW5kZXJl
ciB8fCAhcmVuZGVyZXItPmlzSW1hZ2UoKSkKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICBSZW5k
ZXJJbWFnZSogaW1hZ2UgPSB0b1JlbmRlckltYWdlKHJlbmRlcmVyKTsKLSAgICBpZiAoaW1hZ2Ut
PmNhY2hlZEltYWdlKCkgJiYgIWltYWdlLT5jYWNoZWRJbWFnZSgpLT5lcnJvck9jY3VycmVkKCkp
Ci0gICAgICAgIHJldHVybiBpbWFnZS0+Y2FjaGVkSW1hZ2UoKTsKLQotICAgIHJldHVybiAwOwot
fQotCi12b2lkIENsaXBib2FyZFF0OjpkZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCog
ZWxlbWVudCwgY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJh
bWUpCi17Ci0gICAgQVNTRVJUKGZyYW1lKTsKLQotICAgIC8vIFdlYkNvcmU6OndyaXRlVVJMKG1f
d3JpdGFibGVEYXRhT2JqZWN0LmdldCgpLCB1cmwsIHRpdGxlLCB0cnVlLCBmYWxzZSk7Ci0gICAg
aWYgKCFtX3dyaXRhYmxlRGF0YSkKLSAgICAgICAgbV93cml0YWJsZURhdGEgPSBuZXcgUU1pbWVE
YXRhOwotCi0gICAgQ2FjaGVkSW1hZ2UqIGNhY2hlZEltYWdlID0gZ2V0Q2FjaGVkSW1hZ2UoZWxl
bWVudCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZSB8fCAhY2FjaGVkSW1hZ2UtPmltYWdlRm9yUmVu
ZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSkgfHwgIWNhY2hlZEltYWdlLT5pc0xvYWRlZCgpKQot
ICAgICAgICByZXR1cm47Ci0gICAgUVBpeG1hcCogcGl4bWFwID0gY2FjaGVkSW1hZ2UtPmltYWdl
Rm9yUmVuZGVyZXIoZWxlbWVudC0+cmVuZGVyZXIoKSktPm5hdGl2ZUltYWdlRm9yQ3VycmVudEZy
YW1lKCk7Ci0gICAgaWYgKHBpeG1hcCkKLSAgICAgICAgbV93cml0YWJsZURhdGEtPnNldEltYWdl
RGF0YSgqcGl4bWFwKTsKLQotICAgIFFMaXN0PFFVcmw+IHVybHM7Ci0gICAgdXJscy5hcHBlbmQo
dXJsKTsKLQotICAgIG1fd3JpdGFibGVEYXRhLT5zZXRUZXh0KHRpdGxlKTsKLSAgICBtX3dyaXRh
YmxlRGF0YS0+c2V0VXJscyh1cmxzKTsKLSAgICBtX3dyaXRhYmxlRGF0YS0+c2V0SHRtbChjcmVh
dGVNYXJrdXAoZWxlbWVudCwgSW5jbHVkZU5vZGUsIDAsIFJlc29sdmVBbGxVUkxzKSk7Ci0jaWZu
ZGVmIFFUX05PX0NMSVBCT0FSRAotICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKQotICAgICAg
ICBRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRNaW1lRGF0YShtX3dyaXRhYmxlRGF0
YSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6d3JpdGVVUkwoY29uc3QgS1VSTCYg
dXJsLCBjb25zdCBTdHJpbmcmIHRpdGxlLCBGcmFtZSogZnJhbWUpCi17Ci0gICAgQVNTRVJUKGZy
YW1lKTsKLQotICAgIFFMaXN0PFFVcmw+IHVybHM7Ci0gICAgdXJscy5hcHBlbmQoZnJhbWUtPmRv
Y3VtZW50KCktPmNvbXBsZXRlVVJMKHVybC5zdHJpbmcoKSkpOwotICAgIGlmICghbV93cml0YWJs
ZURhdGEpCi0gICAgICAgIG1fd3JpdGFibGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKLSAgICBtX3dy
aXRhYmxlRGF0YS0+c2V0VXJscyh1cmxzKTsKLSAgICBtX3dyaXRhYmxlRGF0YS0+c2V0VGV4dCh0
aXRsZSk7Ci0jaWZuZGVmIFFUX05PX0NMSVBCT0FSRAotICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0
ZSgpKQotICAgICAgICBRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRNaW1lRGF0YSht
X3dyaXRhYmxlRGF0YSk7Ci0jZW5kaWYKLX0KLQotdm9pZCBDbGlwYm9hcmRRdDo6d3JpdGVSYW5n
ZShSYW5nZSogcmFuZ2UsIEZyYW1lKiBmcmFtZSkKLXsKLSAgICBBU1NFUlQocmFuZ2UpOwotICAg
IEFTU0VSVChmcmFtZSk7Ci0KLSAgICBpZiAoIW1fd3JpdGFibGVEYXRhKQotICAgICAgICBtX3dy
aXRhYmxlRGF0YSA9IG5ldyBRTWltZURhdGE7Ci0gICAgUVN0cmluZyB0ZXh0ID0gZnJhbWUtPmVk
aXRvcigpLnNlbGVjdGVkVGV4dEZvckNsaXBib2FyZCgpOwotICAgIHRleHQucmVwbGFjZShRQ2hh
cigweGEwKSwgUUxhdGluMUNoYXIoJyAnKSk7Ci0gICAgbV93cml0YWJsZURhdGEtPnNldFRleHQo
dGV4dCk7Ci0gICAgbV93cml0YWJsZURhdGEtPnNldEh0bWwoY3JlYXRlTWFya3VwKHJhbmdlLCAw
LCBBbm5vdGF0ZUZvckludGVyY2hhbmdlLCBmYWxzZSwgUmVzb2x2ZU5vbkxvY2FsVVJMcykpOwot
I2lmbmRlZiBRVF9OT19DTElQQk9BUkQKLSAgICBpZiAoaXNGb3JDb3B5QW5kUGFzdGUoKSkKLSAg
ICAgICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0TWltZURhdGEobV93cml0YWJs
ZURhdGEpOwotI2VuZGlmCi19Ci0KLXZvaWQgQ2xpcGJvYXJkUXQ6OndyaXRlUGxhaW5UZXh0KGNv
bnN0IFN0cmluZyYgc3RyKQotewotICAgIGlmICghbV93cml0YWJsZURhdGEpCi0gICAgICAgIG1f
d3JpdGFibGVEYXRhID0gbmV3IFFNaW1lRGF0YTsKLSAgICBRU3RyaW5nIHRleHQgPSBzdHI7Ci0g
ICAgdGV4dC5yZXBsYWNlKFFDaGFyKDB4YTApLCBRTGF0aW4xQ2hhcignICcpKTsKLSAgICBtX3dy
aXRhYmxlRGF0YS0+c2V0VGV4dCh0ZXh0KTsKLSNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJECi0gICAg
aWYgKGlzRm9yQ29weUFuZFBhc3RlKCkpCi0gICAgICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJv
YXJkKCktPnNldE1pbWVEYXRhKG1fd3JpdGFibGVEYXRhKTsKLSNlbmRpZgotfQotCi1jb25zdCBR
TWltZURhdGEqIENsaXBib2FyZFF0OjpyZWFkRGF0YSgpIGNvbnN0Ci17Ci0gICAgQVNTRVJUKCEo
bV9yZWFkYWJsZURhdGEgJiYgbV93cml0YWJsZURhdGEpKTsKLSAgICBBU1NFUlQobV9yZWFkYWJs
ZURhdGEgfHwgbV93cml0YWJsZURhdGEgfHwgY2FuV3JpdGVEYXRhKCkpOwotICAgIHJldHVybiBt
X3JlYWRhYmxlRGF0YSA/IG1fcmVhZGFibGVEYXRhIDogbV93cml0YWJsZURhdGE7Ci19CisgICAg
aWYgKG1fZHJhZ0ltYWdlRWxlbWVudCkgeworICAgICAgICBEb2N1bWVudCogZG9jdW1lbnQgPSBt
X2RyYWdJbWFnZUVsZW1lbnQtPmRvY3VtZW50KCk7CisgICAgICAgIGlmIChGcmFtZSogZnJhbWUg
PSBkb2N1bWVudC0+ZnJhbWUoKSkKKyAgICAgICAgICAgIHJldHVybiBmcmFtZS0+bm9kZUltYWdl
KG1fZHJhZ0ltYWdlRWxlbWVudC5nZXQoKSk7CisgICAgfQogCi1ib29sIENsaXBib2FyZFF0Ojpo
YXNEYXRhKCkKLXsKLSAgICBjb25zdCBRTWltZURhdGEgKmRhdGEgPSByZWFkRGF0YSgpOwotICAg
IGlmICghZGF0YSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgIHJldHVybiBkYXRhLT5mb3Jt
YXRzKCkuY291bnQoKSA+IDA7CisgICAgcmV0dXJuIDA7IC8vIFdlIGRvIG5vdCBoYXZlIGVub3Vn
aCBpbmZvcm1hdGlvbiB0byBjcmVhdGUgYSBkcmFnIGltYWdlLCB1c2UgdGhlIGRlZmF1bHQgaWNv
bi4KIH0KIAotI2lmIEVOQUJMRShEQVRBX1RSQU5TRkVSX0lURU1TKQotUGFzc1JlZlB0cjxEYXRh
VHJhbnNmZXJJdGVtTGlzdD4gQ2xpcGJvYXJkUXQ6Oml0ZW1zKCkKK3ZvaWQgQ2xpcGJvYXJkOjpk
ZWNsYXJlQW5kV3JpdGVEcmFnSW1hZ2UoRWxlbWVudCogZWxlbWVudCwgY29uc3QgS1VSTCYgdXJs
LCBjb25zdCBTdHJpbmcmIGxhYmVsLCBGcmFtZSogZnJhbWUpCiB7Ci0gICAgaWYgKCFtX2ZyYW1l
ICYmICFtX2ZyYW1lLT5kb2N1bWVudCgpKQotICAgICAgICByZXR1cm4gMDsKLQotICAgIFJlZlB0
cjxEYXRhVHJhbnNmZXJJdGVtTGlzdFF0PiBpdGVtcyA9IERhdGFUcmFuc2Zlckl0ZW1MaXN0UXQ6
OmNyZWF0ZSh0aGlzLCBtX2ZyYW1lLT5kb2N1bWVudCgpLT5zY3JpcHRFeGVjdXRpb25Db250ZXh0
KCkpOwotCi0gICAgY29uc3QgUU1pbWVEYXRhKiByZWFkYWJsZURhdGEgPSByZWFkRGF0YSgpOwot
ICAgIGlmIChyZWFkYWJsZURhdGEgJiYgaXNGb3JDb3B5QW5kUGFzdGUoKSAmJiBjYW5SZWFkRGF0
YSgpKSB7Ci0gICAgICAgIGNvbnN0IFFTdHJpbmdMaXN0IHR5cGVzID0gcmVhZGFibGVEYXRhLT5m
b3JtYXRzKCk7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgdHlwZXMuY291bnQoKTsgKytp
KQotICAgICAgICAgICAgaXRlbXMtPmFkZFBhc3RlYm9hcmRJdGVtKHR5cGVzLmF0KGkpKTsKLSAg
ICB9Ci0gICAgcmV0dXJuIGl0ZW1zOworICAgIG1fcGFzdGVib2FyZC0+d3JpdGVJbWFnZShlbGVt
ZW50LT50b05vZGUoKSwgdXJsLCBsYWJlbCk7CiB9Ci0jZW5kaWYKIAogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvQ2xpcGJvYXJkUXQuaCBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL3F0L0NsaXBib2FyZFF0LmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDYyMjdhYzlkZGQ3NDMwYzY2NWFmNDBmNzY2ZGE4YTYyOGJiYjNhNjAuLjAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
cXQvQ2xpcGJvYXJkUXQuaAorKysgL2Rldi9udWxsCkBAIC0xLDk3ICswLDAgQEAKLS8qCi0gKiBD
b3B5cmlnaHQgKEMpIDIwMDcsIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgot
ICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMs
IHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVk
IHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICogMS4gUmVkaXN0
cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQK
LSAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KLSAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJl
cHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Ci0gKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCi0gKiAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVU
RVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKLSAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCi0gKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKLSAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgotICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCi0gKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCi0gKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
LSAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKLSAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAK
LSAqLwotCi0jaWZuZGVmIENsaXBib2FyZFF0X2gKLSNkZWZpbmUgQ2xpcGJvYXJkUXRfaAotCi0j
aW5jbHVkZSAiQ2FjaGVkSW1hZ2VDbGllbnQuaCIKLSNpbmNsdWRlICJDbGlwYm9hcmQuaCIKLQot
UVRfQkVHSU5fTkFNRVNQQUNFCi1jbGFzcyBRTWltZURhdGE7Ci1RVF9FTkRfTkFNRVNQQUNFCi0K
LW5hbWVzcGFjZSBXZWJDb3JlIHsKLQotY2xhc3MgQ2FjaGVkSW1hZ2U7Ci0KLS8vIFN0YXRlIGF2
YWlsYWJsZSBkdXJpbmcgSUUncyBldmVudHMgZm9yIGRyYWcgYW5kIGRyb3AgYW5kIGNvcHkvcGFz
dGUKLWNsYXNzIENsaXBib2FyZFF0IDogcHVibGljIENsaXBib2FyZCwgcHVibGljIENhY2hlZElt
YWdlQ2xpZW50IHsKLSAgICBXVEZfTUFLRV9GQVNUX0FMTE9DQVRFRDsKLXB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxDbGlwYm9hcmRRdD4gY3JlYXRlKENsaXBib2FyZEFjY2Vzc1BvbGlj
eSBwb2xpY3ksIGNvbnN0IFFNaW1lRGF0YSogcmVhZGFibGVDbGlwYm9hcmQsIEZyYW1lKiBmcmFt
ZSkKLSAgICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkUXQocG9saWN5
LCByZWFkYWJsZUNsaXBib2FyZCwgZnJhbWUpKTsKLSAgICB9Ci0gICAgc3RhdGljIFBhc3NSZWZQ
dHI8Q2xpcGJvYXJkUXQ+IGNyZWF0ZShDbGlwYm9hcmRBY2Nlc3NQb2xpY3kgcG9saWN5LCBGcmFt
ZSAqZnJhbWUsIENsaXBib2FyZFR5cGUgY2xpcGJvYXJkVHlwZSA9IENvcHlBbmRQYXN0ZSkKLSAg
ICB7Ci0gICAgICAgIHJldHVybiBhZG9wdFJlZihuZXcgQ2xpcGJvYXJkUXQocG9saWN5LCBjbGlw
Ym9hcmRUeXBlLCBmcmFtZSkpOwotICAgIH0KLSAgICB2aXJ0dWFsIH5DbGlwYm9hcmRRdCgpOwot
Ci0gICAgdm9pZCBjbGVhckRhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKLSAgICB2b2lkIGNsZWFy
RGF0YSgpOwotICAgIFN0cmluZyBnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3Q7Ci0g
ICAgYm9vbCBzZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsK
LQotICAgIC8vIGV4dGVuc2lvbnMgYmV5b25kIElFJ3MgQVBJCi0gICAgdmlydHVhbCBMaXN0SGFz
aFNldDxTdHJpbmc+IHR5cGVzKCkgY29uc3Q7Ci0gICAgdmlydHVhbCBQYXNzUmVmUHRyPEZpbGVM
aXN0PiBmaWxlcygpIGNvbnN0OwotCi0gICAgdm9pZCBzZXREcmFnSW1hZ2UoQ2FjaGVkSW1hZ2Uq
LCBjb25zdCBJbnRQb2ludCYpOwotICAgIHZvaWQgc2V0RHJhZ0ltYWdlRWxlbWVudChOb2RlKiwg
Y29uc3QgSW50UG9pbnQmKTsKLQotICAgIHZpcnR1YWwgRHJhZ0ltYWdlUmVmIGNyZWF0ZURyYWdJ
bWFnZShJbnRQb2ludCYgZHJhZ0xvYykgY29uc3Q7Ci0gICAgdmlydHVhbCB2b2lkIGRlY2xhcmVB
bmRXcml0ZURyYWdJbWFnZShFbGVtZW50KiwgY29uc3QgS1VSTCYsIGNvbnN0IFN0cmluZyYgdGl0
bGUsIEZyYW1lKik7Ci0gICAgdmlydHVhbCB2b2lkIHdyaXRlVVJMKGNvbnN0IEtVUkwmLCBjb25z
dCBTdHJpbmcmLCBGcmFtZSopOwotICAgIHZpcnR1YWwgdm9pZCB3cml0ZVJhbmdlKFJhbmdlKiwg
RnJhbWUqKTsKLSAgICB2aXJ0dWFsIHZvaWQgd3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJik7
Ci0KLSAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwotCi0gICAgUU1pbWVEYXRhKiBjbGlwYm9h
cmREYXRhKCkgY29uc3QgeyByZXR1cm4gbV93cml0YWJsZURhdGE7IH0KLSAgICB2b2lkIGludmFs
aWRhdGVXcml0YWJsZURhdGEoKSB7IG1fd3JpdGFibGVEYXRhID0gMDsgfQotCi0jaWYgRU5BQkxF
KERBVEFfVFJBTlNGRVJfSVRFTVMpCi0gICAgdmlydHVhbCBQYXNzUmVmUHRyPERhdGFUcmFuc2Zl
ckl0ZW1MaXN0PiBpdGVtcygpOwotI2VuZGlmCi0KLXByaXZhdGU6Ci0gICAgQ2xpcGJvYXJkUXQo
Q2xpcGJvYXJkQWNjZXNzUG9saWN5LCBjb25zdCBRTWltZURhdGEqIHJlYWRhYmxlQ2xpcGJvYXJk
LCBGcmFtZSopOwotCi0gICAgLy8gQ2xpcGJvYXJkIGlzIHdyaXRhYmxlIHNvIGl0IHdpbGwgY3Jl
YXRlIGl0cyBvd24gUU1pbWVEYXRhIG9iamVjdAotICAgIENsaXBib2FyZFF0KENsaXBib2FyZEFj
Y2Vzc1BvbGljeSwgQ2xpcGJvYXJkVHlwZSwgRnJhbWUqKTsKLQotICAgIHZvaWQgc2V0RHJhZ0lt
YWdlKENhY2hlZEltYWdlKiwgTm9kZSosIGNvbnN0IEludFBvaW50JiBsb2MpOwotCi0gICAgY29u
c3QgUU1pbWVEYXRhKiByZWFkRGF0YSgpIGNvbnN0OwotCi0gICAgY29uc3QgUU1pbWVEYXRhKiBt
X3JlYWRhYmxlRGF0YTsKLSAgICBRTWltZURhdGEqIG1fd3JpdGFibGVEYXRhOwotICAgIEZyYW1l
KiBtX2ZyYW1lOwotfTsKLX0KLQotI2VuZGlmIC8vIENsaXBib2FyZFF0X2gKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9hcmRRdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9xdC9QYXN0ZWJvYXJkUXQuY3BwCmluZGV4IDcyNjRjMDk0ZDI1YzVjYjE3
YTQxNjRkYmU5ZDgxZTM3YTA3MDA4N2UuLjlkMzgyYzJhM2M5MDg1OWQzN2VmNTNhZmNhZWIzMjhh
M2U3YjNiNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3F0L1Bhc3RlYm9h
cmRRdC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vcXQvUGFzdGVib2FyZFF0LmNw
cApAQCAtMiw2ICsyLDcgQEAKICAqIENvcHlyaWdodCAoQykgMjAwNiBaYWNrIFJ1c2luIDx6YWNr
QGtkZS5vcmc+CiAgKiBDb3B5cmlnaHQgKEMpIDIwMDYsIDIwMDcgQXBwbGUgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KICAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAxMyBDaXNjbyBT
eXN0ZW1zLCBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKQEAgLTI5LDMzICszMCw4NiBAQAogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKIAog
I2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCi0jaW5jbHVkZSAiQ2xpcGJvYXJkUXQuaCIKICNpbmNs
dWRlICJEb2N1bWVudEZyYWdtZW50LmgiCisjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNpbmNsdWRl
ICJFZGl0b3IuaCIKICNpbmNsdWRlICJGcmFtZS5oIgogI2luY2x1ZGUgIkltYWdlLmgiCisjaW5j
bHVkZSAiTm90SW1wbGVtZW50ZWQuaCIKICNpbmNsdWRlICJSZW5kZXJJbWFnZS5oIgogI2luY2x1
ZGUgIm1hcmt1cC5oIgogI2luY2x1ZGUgPHFjbGlwYm9hcmQuaD4KICNpbmNsdWRlIDxxZGVidWcu
aD4KICNpbmNsdWRlIDxxZ3VpYXBwbGljYXRpb24uaD4KICNpbmNsdWRlIDxxbWltZWRhdGEuaD4K
KyNpbmNsdWRlIDxxdGV4dGNvZGVjLmg+CiAjaW5jbHVkZSA8cXVybC5oPgogCiAjZGVmaW5lIG1l
dGhvZERlYnVnKCkgcURlYnVnKCkgPDwgIlBhc3RlYm9hcmRRdDogIiA8PCBfX0ZVTkNUSU9OX187
CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAotUGFzdGVib2FyZDo6UGFzdGVib2FyZCgpCitzdGF0
aWMgYm9vbCBpc1RleHRNaW1lVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJu
IHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9wbGFpbjsiKTsK
K30KKworc3RhdGljIGJvb2wgaXNIdG1sTWltZVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQorewor
ICAgIHJldHVybiB0eXBlID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUuc3RhcnRzV2l0aCgidGV4dC9o
dG1sOyIpOworfQorCitQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZShj
b25zdCBRTWltZURhdGEqIHJlYWRhYmxlQ2xpcGJvYXJkLCBib29sIGlzRm9yRHJhZ0FuZERyb3Ap
Cit7CisgICAgcmV0dXJuIGFkb3B0UHRyKG5ldyBQYXN0ZWJvYXJkKHJlYWRhYmxlQ2xpcGJvYXJk
LCBpc0ZvckRyYWdBbmREcm9wKSk7Cit9CisKK1Bhc3NPd25QdHI8UGFzdGVib2FyZD4gUGFzdGVi
b2FyZDo6Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCkKK3sKKyNpZm5kZWYgUVRfTk9fQ0xJUEJPQVJE
CisgICAgcmV0dXJuIGNyZWF0ZShRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5taW1lRGF0
YSgpKTsKKyNlbHNlCisgICAgcmV0dXJuIGNyZWF0ZSgpOworI2VuZGlmCit9CisKK1Bhc3NPd25Q
dHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlUHJpdmF0ZSgpCit7CisgICAgcmV0dXJu
IGNyZWF0ZSgpOworfQorCitQYXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0
ZUZvckRyYWdBbmREcm9wKCkKK3sKKyAgICByZXR1cm4gY3JlYXRlKDAsIHRydWUpOworfQorCitQ
YXNzT3duUHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckRyYWdBbmREcm9wKGNv
bnN0IERyYWdEYXRhJiBkcmFnRGF0YSkKK3sKKyAgICByZXR1cm4gY3JlYXRlKGRyYWdEYXRhLnBs
YXRmb3JtRGF0YSgpLCB0cnVlKTsKK30KKworUGFzdGVib2FyZDo6UGFzdGVib2FyZChjb25zdCBR
TWltZURhdGEqIHJlYWRhYmxlQ2xpcGJvYXJkLCBib29sIGlzRm9yRHJhZ0FuZERyb3ApCiAgICAg
OiBtX3NlbGVjdGlvbk1vZGUoZmFsc2UpCisgICAgLCBtX3JlYWRhYmxlRGF0YShyZWFkYWJsZUNs
aXBib2FyZCkKKyAgICAsIG1fd3JpdGFibGVEYXRhKDApCisgICAgLCBtX2lzRm9yRHJhZ0FuZERy
b3AoaXNGb3JEcmFnQW5kRHJvcCkKK3sKK30KKworUGFzdGVib2FyZDo6flBhc3RlYm9hcmQoKQog
eworICAgIGlmIChtX3dyaXRhYmxlRGF0YSAmJiBpc0ZvckNvcHlBbmRQYXN0ZSgpKQorICAgICAg
ICBtX3dyaXRhYmxlRGF0YSA9IDA7CisgICAgZWxzZQorICAgICAgICBkZWxldGUgbV93cml0YWJs
ZURhdGE7CisgICAgbV9yZWFkYWJsZURhdGEgPSAwOwogfQogCiBQYXN0ZWJvYXJkKiBQYXN0ZWJv
YXJkOjpnZW5lcmFsUGFzdGVib2FyZCgpCiB7CiAgICAgc3RhdGljIFBhc3RlYm9hcmQqIHBhc3Rl
Ym9hcmQgPSAwOwogICAgIGlmICghcGFzdGVib2FyZCkKLSAgICAgICAgcGFzdGVib2FyZCA9IG5l
dyBQYXN0ZWJvYXJkKCk7CisgICAgICAgIHBhc3RlYm9hcmQgPSBuZXcgUGFzdGVib2FyZCgwLCBm
YWxzZSk7CiAgICAgcmV0dXJuIHBhc3RlYm9hcmQ7CiB9CiAKQEAgLTE3NiwyOSArMjMwLDEzNSBA
QCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlSW1hZ2UoTm9kZSogbm9kZSwgY29uc3QgS1VSTCYsIGNv
bnN0IFN0cmluZyYpCiAjZW5kaWYKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUNsaXBib2Fy
ZChDbGlwYm9hcmQqIGNsaXBib2FyZCkKK2Jvb2wgUGFzdGVib2FyZDo6aXNTZWxlY3Rpb25Nb2Rl
KCkgY29uc3QKIHsKKyAgICByZXR1cm4gbV9zZWxlY3Rpb25Nb2RlOworfQorCit2b2lkIFBhc3Rl
Ym9hcmQ6OnNldFNlbGVjdGlvbk1vZGUoYm9vbCBzZWxlY3Rpb25Nb2RlKQoreworICAgIG1fc2Vs
ZWN0aW9uTW9kZSA9IHNlbGVjdGlvbk1vZGU7Cit9CisKK2NvbnN0IFFNaW1lRGF0YSogUGFzdGVi
b2FyZDo6cmVhZERhdGEoKSBjb25zdAoreworICAgIEFTU0VSVCghKG1fcmVhZGFibGVEYXRhICYm
IG1fd3JpdGFibGVEYXRhKSk7CisgICAgQVNTRVJUKG1fcmVhZGFibGVEYXRhIHx8IG1fd3JpdGFi
bGVEYXRhKTsKKyAgICByZXR1cm4gbV9yZWFkYWJsZURhdGEgPyBtX3JlYWRhYmxlRGF0YSA6IG1f
d3JpdGFibGVEYXRhOworfQorCitib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQoreworICAgIGNv
bnN0IFFNaW1lRGF0YSAqZGF0YSA9IHJlYWREYXRhKCk7CisgICAgaWYgKCFkYXRhKQorICAgICAg
ICByZXR1cm4gZmFsc2U7CisgICAgcmV0dXJuIGRhdGEtPmZvcm1hdHMoKS5jb3VudCgpID4gMDsK
K30KKwordm9pZCBQYXN0ZWJvYXJkOjpjbGVhcihjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAg
aWYgKG1fd3JpdGFibGVEYXRhKSB7CisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5yZW1vdmVGb3Jt
YXQodHlwZSk7CisgICAgICAgIGlmIChtX3dyaXRhYmxlRGF0YS0+Zm9ybWF0cygpLmlzRW1wdHko
KSkgeworICAgICAgICAgICAgaWYgKGlzRm9yRHJhZ0FuZERyb3AoKSkKKyAgICAgICAgICAgICAg
ICBkZWxldGUgbV93cml0YWJsZURhdGE7CisgICAgICAgICAgICBtX3dyaXRhYmxlRGF0YSA9IDA7
CisgICAgICAgIH0KKyAgICB9CiAjaWZuZGVmIFFUX05PX0NMSVBCT0FSRAotICAgIFFHdWlBcHBs
aWNhdGlvbjo6Y2xpcGJvYXJkKCktPnNldE1pbWVEYXRhKHN0YXRpY19jYXN0PENsaXBib2FyZFF0
Kj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkRGF0YSgpKTsKKyAgICBpZiAoaXNGb3JDb3B5QW5kUGFz
dGUoKSkKKyAgICAgICAgUUd1aUFwcGxpY2F0aW9uOjpjbGlwYm9hcmQoKS0+c2V0TWltZURhdGEo
bV93cml0YWJsZURhdGEpOwogI2VuZGlmCiB9CiAKLS8qIFRoaXMgZnVuY3Rpb24gaXMgY2FsbGVk
IGZyb20gRWRpdG9yOjp0cnlESFRNTENvcHkgYmVmb3JlIGFjdHVhbGx5IHNldCB0aGUgY2xpcGJv
YXJkCi0gKiBJdCBpbnRyb2R1Y2UgYSByYWNlIGNvbmRpdGlvbiB3aXRoIGtsaXBwZXIsIHdoaWNo
IHdpbGwgdHJ5IHRvIGdyYWIgdGhlIGNsaXBib2FyZCAKLSAqIEl0J3Mgbm90IHJlcXVpcmVkIHRv
IGNsZWFyIGl0IGFueXdheSwgc2luY2UgUUNsaXBib2FyZCB0YWtlIGNhcmUgYWJvdXQgcmVwbGFj
aW5nIHRoZSBjbGlwYm9hcmQKLSAqLwogdm9pZCBQYXN0ZWJvYXJkOjpjbGVhcigpCiB7CisjaWZu
ZGVmIFFUX05PX0NMSVBCT0FSRAorICAgIGlmIChpc0ZvckNvcHlBbmRQYXN0ZSgpKQorICAgICAg
ICBRR3VpQXBwbGljYXRpb246OmNsaXBib2FyZCgpLT5zZXRNaW1lRGF0YSgwKTsKKyAgICBlbHNl
CisjZW5kaWYKKyAgICBkZWxldGUgbV93cml0YWJsZURhdGE7CisgICAgbV93cml0YWJsZURhdGEg
PSAwOwogfQogCi1ib29sIFBhc3RlYm9hcmQ6OmlzU2VsZWN0aW9uTW9kZSgpIGNvbnN0CitTdHJp
bmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgcmV0
dXJuIG1fc2VsZWN0aW9uTW9kZTsKKyAgICBjb25zdCBRTWltZURhdGEqIGRhdGEgPSByZWFkRGF0
YSgpOworICAgIGlmICghZGF0YSkKKyAgICAgICAgcmV0dXJuIFN0cmluZygpOworCisgICAgaWYg
KGlzSHRtbE1pbWVUeXBlKHR5cGUpICYmIGRhdGEtPmhhc0h0bWwoKSkKKyAgICAgICAgcmV0dXJu
IGRhdGEtPmh0bWwoKTsKKworICAgIGlmIChpc1RleHRNaW1lVHlwZSh0eXBlKSAmJiBkYXRhLT5o
YXNUZXh0KCkpCisgICAgICAgIHJldHVybiBkYXRhLT50ZXh0KCk7CisKKyAgICBRQnl0ZUFycmF5
IHJhd0RhdGEgPSBkYXRhLT5kYXRhKHR5cGUpOworICAgIFFTdHJpbmcgc3RyaW5nRGF0YSA9IFFU
ZXh0Q29kZWM6OmNvZGVjRm9yTmFtZSgiVVRGLTE2IiktPnRvVW5pY29kZShyYXdEYXRhKTsKKyAg
ICByZXR1cm4gc3RyaW5nRGF0YTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjpzZXRTZWxlY3Rpb25N
b2RlKGJvb2wgc2VsZWN0aW9uTW9kZSkKK2Jvb2wgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiB7Ci0gICAgbV9zZWxlY3Rpb25N
b2RlID0gc2VsZWN0aW9uTW9kZTsKKyAgICBpZiAoIW1fd3JpdGFibGVEYXRhKQorICAgICAgICBt
X3dyaXRhYmxlRGF0YSA9IG5ldyBRTWltZURhdGE7CisKKyAgICBpZiAoaXNUZXh0TWltZVR5cGUo
dHlwZSkpCisgICAgICAgIG1fd3JpdGFibGVEYXRhLT5zZXRUZXh0KFFTdHJpbmcoZGF0YSkpOwor
ICAgIGVsc2UgaWYgKGlzSHRtbE1pbWVUeXBlKHR5cGUpKQorICAgICAgICBtX3dyaXRhYmxlRGF0
YS0+c2V0SHRtbChRU3RyaW5nKGRhdGEpKTsKKyAgICBlbHNlIHsKKyAgICAgICAgUUJ5dGVBcnJh
eSBhcnJheShyZWludGVycHJldF9jYXN0PGNvbnN0IGNoYXIqPihkYXRhLmNoYXJhY3RlcnMoKSks
IGRhdGEubGVuZ3RoKCkgKiAyKTsKKyAgICAgICAgbV93cml0YWJsZURhdGEtPnNldERhdGEoUVN0
cmluZyh0eXBlKSwgYXJyYXkpOworICAgIH0KKworICAgIHJldHVybiB0cnVlOworfQorCisvLyBl
eHRlbnNpb25zIGJleW9uZCBJRSdzIEFQSQorTGlzdEhhc2hTZXQ8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlcygpCit7CisgICAgY29uc3QgUU1pbWVEYXRhKiBkYXRhID0gcmVhZERhdGEoKTsKKyAg
ICBpZiAoIWRhdGEpCisgICAgICAgIHJldHVybiBMaXN0SGFzaFNldDxTdHJpbmc+KCk7CisKKyAg
ICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBRU3RyaW5nTGlzdCBmb3JtYXRzID0g
ZGF0YS0+Zm9ybWF0cygpOworICAgIGZvciAoaW50IGkgPSAwOyBpIDwgZm9ybWF0cy5jb3VudCgp
OyArK2kpCisgICAgICAgIHJlc3VsdC5hZGQoZm9ybWF0cy5hdChpKSk7CisgICAgcmV0dXJuIHJl
c3VsdDsKK30KKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCit7
CisgICAgY29uc3QgUU1pbWVEYXRhKiBkYXRhID0gcmVhZERhdGEoKTsKKyAgICBpZiAoIWRhdGEp
CisgICAgICAgIHJldHVybiBWZWN0b3I8U3RyaW5nPigpOworCisgICAgVmVjdG9yPFN0cmluZz4g
ZmlsZUxpc3Q7CisgICAgUUxpc3Q8UVVybD4gdXJscyA9IGRhdGEtPnVybHMoKTsKKworICAgIGZv
ciAoaW50IGkgPSAwOyBpIDwgdXJscy5zaXplKCk7IGkrKykgeworICAgICAgICBRVXJsIHVybCA9
IHVybHNbaV07CisgICAgICAgIGlmICh1cmwuc2NoZW1lKCkgIT0gUUxhdGluMVN0cmluZygiZmls
ZSIpKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIGZpbGVMaXN0LmFwcGVuZCh1cmwu
dG9Mb2NhbEZpbGUoKSk7CisgICAgfQorCisgICAgcmV0dXJuIGZpbGVMaXN0OworfQorCit2b2lk
IFBhc3RlYm9hcmQ6OnNldERyYWdJbWFnZShEcmFnSW1hZ2VSZWYsIGNvbnN0IEludFBvaW50JiBo
b3RTcG90KQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgUGFzdGVib2FyZDo6
d3JpdGVQYXN0ZWJvYXJkKGNvbnN0IFBhc3RlYm9hcmQmIHNvdXJjZVBhc3RlYm9hcmQpCit7Cisj
aWZuZGVmIFFUX05PX0NMSVBCT0FSRAorICAgIFFHdWlBcHBsaWNhdGlvbjo6Y2xpcGJvYXJkKCkt
PnNldE1pbWVEYXRhKHNvdXJjZVBhc3RlYm9hcmQuY2xpcGJvYXJkRGF0YSgpKTsKKyNlbmRpZgog
fQogCiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdD
bGllbnRRdC5jcHAgYi9Tb3VyY2UvV2ViS2l0L3F0L1dlYkNvcmVTdXBwb3J0L0RyYWdDbGllbnRR
dC5jcHAKaW5kZXggNzQ4OTMxN2YxMTZkNjNjYzkxYjQ3MGE1MmRlY2Y2NjhjMmYxOTgxYy4uNmNj
NWIzMTVjZWRhNTlhOTViMDgzM2M1OGNkNjVkOGViNjNkNDYyNSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9xdC9XZWJDb3JlU3VwcG9ydC9EcmFnQ2xpZW50UXQuY3BwCisrKyBiL1NvdXJjZS9X
ZWJLaXQvcXQvV2ViQ29yZVN1cHBvcnQvRHJhZ0NsaWVudFF0LmNwcApAQCAtMjcsMTEgKzI3LDEy
IEBACiAjaW5jbHVkZSAiRHJhZ0NsaWVudFF0LmgiCiAKICNpbmNsdWRlICJDaHJvbWVDbGllbnQu
aCIKLSNpbmNsdWRlICJDbGlwYm9hcmRRdC5oIgorI2luY2x1ZGUgIkNsaXBib2FyZC5oIgogI2lu
Y2x1ZGUgIkRyYWdDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiRXZlbnRIYW5kbGVyLmgiCiAjaW5j
bHVkZSAiRnJhbWUuaCIKICNpbmNsdWRlICJQYWdlLmgiCisjaW5jbHVkZSAiUGFzdGVib2FyZC5o
IgogI2luY2x1ZGUgIlBsYXRmb3JtTW91c2VFdmVudC5oIgogCiAjaW5jbHVkZSA8UURyYWc+CkBA
IC05Miw4ICs5Myw4IEBAIHZvaWQgRHJhZ0NsaWVudFF0Ojp3aWxsUGVyZm9ybURyYWdTb3VyY2VB
Y3Rpb24oRHJhZ1NvdXJjZUFjdGlvbiwgY29uc3QgSW50UG9pbnQmCiB2b2lkIERyYWdDbGllbnRR
dDo6c3RhcnREcmFnKERyYWdJbWFnZVJlZiBkcmFnSW1hZ2UsIGNvbnN0IEludFBvaW50JiwgY29u
c3QgSW50UG9pbnQmLCBDbGlwYm9hcmQqIGNsaXBib2FyZCwgRnJhbWUqIGZyYW1lLCBib29sKQog
ewogI2lmbmRlZiBRVF9OT19EUkFHQU5ERFJPUAotICAgIFFNaW1lRGF0YSogY2xpcGJvYXJkRGF0
YSA9IHN0YXRpY19jYXN0PENsaXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+Y2xpcGJvYXJkRGF0YSgp
OwotICAgIHN0YXRpY19jYXN0PENsaXBib2FyZFF0Kj4oY2xpcGJvYXJkKS0+aW52YWxpZGF0ZVdy
aXRhYmxlRGF0YSgpOworICAgIFFNaW1lRGF0YSogY2xpcGJvYXJkRGF0YSA9IGNsaXBib2FyZC0+
cGFzdGVib2FyZCgpLmNsaXBib2FyZERhdGEoKTsKKyAgICBjbGlwYm9hcmQtPnBhc3RlYm9hcmQo
KS5pbnZhbGlkYXRlV3JpdGFibGVEYXRhKCk7CiAgICAgUU9iamVjdCogdmlldyA9IG1fY2hyb21l
Q2xpZW50LT5wbGF0Zm9ybVBhZ2VDbGllbnQoKS0+b3duZXJXaWRnZXQoKTsKICAgICBpZiAodmll
dykgewogICAgICAgICBRRHJhZyogZHJhZyA9IG5ldyBRRHJhZyh2aWV3KTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2ViRHJhZ0NsaWVu
dFF0LmNwcCBiL1NvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvcXQvV2Vi
RHJhZ0NsaWVudFF0LmNwcAppbmRleCBiYmRiNjM1YjM3MzFlODBmMmVlMGUyYTBhN2Y1MjJmYTNm
MjM5OTJkLi4yMGY3ZTk1MzY5NzgwNTMyZWIzZTI5OTViZTk3YmViZTk1MWY2YjcxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L3F0L1dlYkRyYWdD
bGllbnRRdC5jcHAKKysrIGIvU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9y
dC9xdC9XZWJEcmFnQ2xpZW50UXQuY3BwCkBAIC0yNiw5ICsyNiwxMCBAQAogI2luY2x1ZGUgImNv
bmZpZy5oIgogI2luY2x1ZGUgIldlYkRyYWdDbGllbnQuaCIKIAotI2luY2x1ZGUgIkNsaXBib2Fy
ZFF0LmgiCisjaW5jbHVkZSAiQ2xpcGJvYXJkLmgiCiAjaW5jbHVkZSAiRHJhZ0RhdGEuaCIKICNp
bmNsdWRlICJHcmFwaGljc0NvbnRleHQuaCIKKyNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCiAjaW5j
bHVkZSAiU2hhcmVhYmxlQml0bWFwLmgiCiAjaW5jbHVkZSAiV2ViQ29yZUFyZ3VtZW50Q29kZXJz
LmgiCiAjaW5jbHVkZSAiV2ViUGFnZS5oIgpAQCAtNTIsOSArNTMsOSBAQCBzdGF0aWMgUGFzc1Jl
ZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNvbnZlcnRRUGl4bWFwVG9TaGFyZWFibGVCaXRtYXAoUVBp
eG1hcCogcGl4bQogCiB2b2lkIFdlYkRyYWdDbGllbnQ6OnN0YXJ0RHJhZyhEcmFnSW1hZ2VSZWYg
ZHJhZ0ltYWdlLCBjb25zdCBJbnRQb2ludCYgY2xpZW50UG9zaXRpb24sIGNvbnN0IEludFBvaW50
JiBnbG9iYWxQb3NpdGlvbiwgQ2xpcGJvYXJkKiBjbGlwYm9hcmQsIEZyYW1lKiwgYm9vbCkKIHsK
LSAgICBRTWltZURhdGEqIGNsaXBib2FyZERhdGEgPSBzdGF0aWNfY2FzdDxDbGlwYm9hcmRRdCo+
KGNsaXBib2FyZCktPmNsaXBib2FyZERhdGEoKTsKKyAgICBRTWltZURhdGEqIGNsaXBib2FyZERh
dGEgPSBjbGlwYm9hcmQtPnBhc3RlYm9hcmQoKS5jbGlwYm9hcmREYXRhKCk7CiAgICAgRHJhZ09w
ZXJhdGlvbiBkcmFnT3BlcmF0aW9uTWFzayA9IGNsaXBib2FyZC0+c291cmNlT3BlcmF0aW9uKCk7
Ci0gICAgc3RhdGljX2Nhc3Q8Q2xpcGJvYXJkUXQqPihjbGlwYm9hcmQpLT5pbnZhbGlkYXRlV3Jp
dGFibGVEYXRhKCk7CisgICAgY2xpcGJvYXJkLT5wYXN0ZWJvYXJkKCkuaW52YWxpZGF0ZVdyaXRh
YmxlRGF0YSgpOwogICAgIERyYWdEYXRhIGRyYWdEYXRhKGNsaXBib2FyZERhdGEsIGNsaWVudFBv
c2l0aW9uLCBnbG9iYWxQb3NpdGlvbiwgZHJhZ09wZXJhdGlvbk1hc2spOwogCiAgICAgUmVmUHRy
PFNoYXJlYWJsZUJpdG1hcD4gYml0bWFwID0gY29udmVydFFQaXhtYXBUb1NoYXJlYWJsZUJpdG1h
cChkcmFnSW1hZ2UpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>