<?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>35915</bug_id>
          
          <creation_ts>2010-03-09 06:19:07 -0800</creation_ts>
          <short_desc>[EFL] Add FrameLoaderClientEfl.{cpp,h} to WebKit/efl/WebCoreSupport</short_desc>
          <delta_ts>2010-04-16 00:03:38 -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>Other</rep_platform>
          <op_sys>Linux</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>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Leandro Pereira">leandro</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>barbieri</cc>
    
    <cc>bunhere</cc>
    
    <cc>commit-queue</cc>
    
    <cc>gustavo</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>hyuki.a.kim</cc>
    
    <cc>hyuki.kim</cc>
    
    <cc>joone.hur</cc>
    
    <cc>rakuco</cc>
    
    <cc>tonikitoo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>197546</commentid>
    <comment_count>0</comment_count>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-09 06:19:07 -0800</bug_when>
    <thetext>+++ This bug was initially created as a clone of Bug #35059 +++

Attached patch adds EFL&apos;s implementation of FrameLoaderClient to
WebKit/efl/WebCoreSupport.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>197547</commentid>
    <comment_count>1</comment_count>
      <attachid>50298</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-03-09 06:21:05 -0800</bug_when>
    <thetext>Created attachment 50298
Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>212966</commentid>
    <comment_count>2</comment_count>
      <attachid>50298</attachid>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2010-04-15 12:02:35 -0700</bug_when>
    <thetext>Comment on attachment 50298
Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.

On the mobile you probably want to say Mobile Safari and not Safari in the UA.


&gt; +PassRefPtr&lt;Frame&gt; FrameLoaderClientEfl::createFrame(const KURL&amp; url, const String&amp; name, HTMLFrameOwnerElement* ownerElement,
&gt; +                                                 const String&amp; referrer, bool allowsScrolling, int marginWidth, int marginHeight)

Please keep these method definitions on one line.

Apart from that, it looks fine as an initial commit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213091</commentid>
    <comment_count>3</comment_count>
      <attachid>53483</attachid>
    <who name="Leandro Pereira">leandro</who>
    <bug_when>2010-04-15 15:33:58 -0700</bug_when>
    <thetext>Created attachment 53483
Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.

Kenneth already r+&apos;ed this patch.

I&apos;ve fixed the createFrame definition.
Regarding the user agent, our API supports changing the user agent, so this won&apos;t be a huge issue if someone develops a mobile browser with the EFL port. This will be fixed, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213210</commentid>
    <comment_count>4</comment_count>
      <attachid>53483</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-16 00:03:29 -0700</bug_when>
    <thetext>Comment on attachment 53483
Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.

Clearing flags on attachment: 53483

Committed r57716: &lt;http://trac.webkit.org/changeset/57716&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>213211</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2010-04-16 00:03:38 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>50298</attachid>
            <date>2010-03-09 06:21:05 -0800</date>
            <delta_ts>2010-04-15 15:33:58 -0700</delta_ts>
            <desc>Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.</desc>
            <filename>webkit_efl_webcoresupport-3.diff</filename>
            <type>text/plain</type>
            <size>35083</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwor
KysgV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAzLTA5ICBMZWFuZHJv
IFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxlcyB0byBlZmwvV2Vi
Q29yZVN1cHBvcnQuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzU5MTUKKworICAgICAg
ICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oOiBBZGRl
ZC4KKwogMjAxMC0wMy0wNCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0wLDAg
KzEsODU2IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRFZmwuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVXZWJLaXQuaCIK
KyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJQYXJ0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX3By
aXZhdGUuaCIKKworI2lmIFBMQVRGT1JNKFVOSVgpCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4K
KyNlbmRpZgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFtZUxvYWRlckNsaWVudEVmbDo6RnJh
bWVMb2FkZXJDbGllbnRFZmwoRXZhc19PYmplY3QgKnZpZXcpCisgICAgOiBtX3ZpZXcodmlldykK
KyAgICAsIG1fZnJhbWUoMCkKKyAgICAsIG1fZmlyc3REYXRhKGZhbHNlKQorICAgICwgbV91c2Vy
QWdlbnQoIiIpCisgICAgLCBtX2N1c3RvbVVzZXJBZ2VudCgiIikKKyAgICAsIG1fcGx1Z2luVmll
dygwKQorICAgICwgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbihmYWxzZSkKK3sKK30KKworc3Rh
dGljIFN0cmluZyBhZ2VudFBsYXRmb3JtKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAiVW5rbm93biI7Cit9CisKK3N0YXRpYyBTdHJpbmcgYWdlbnRPUygpCit7CisjaWYg
UExBVEZPUk0oREFSV0lOKQorI2lmIFBMQVRGT1JNKFg4NikKKyAgICByZXR1cm4gIkludGVsIE1h
YyBPUyBYIjsKKyNlbHNlCisgICAgcmV0dXJuICJQUEMgTWFjIE9TIFgiOworI2VuZGlmCisjZWxp
ZiBQTEFURk9STShVTklYKQorICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CisgICAgaWYgKHVuYW1l
KCZuYW1lKSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAlcyIsIG5h
bWUuc3lzbmFtZSwgbmFtZS5tYWNoaW5lKTsKKworICAgIHJldHVybiAiVW5rbm93biI7CisjZWxp
ZiBQTEFURk9STShXSU5fT1MpCisgICAgLy8gRklYTUU6IENvbXB1dGUgdGhlIFdpbmRvd3MgdmVy
c2lvbgorICAgIHJldHVybiAiV2luZG93cyI7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuICJVbmtub3duIjsKKyNlbmRpZgorfQorCitzdGF0aWMgU3RyaW5nIGNvbXBv
c2VVc2VyQWdlbnQoKQoreworICAgIC8vIFRoaXMgaXMgYSBsaWJlcmFsIGludGVycHJldGF0aW9u
IG9mIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvYnVpbGQvcmV2aXNlZC11c2VyLWFnZW50LXN0cmlu
Z3MuaHRtbAorICAgIC8vIFNlZSBhbHNvIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ludGVy
bmV0L3NhZmFyaS9mYXEuaHRtbCNhbmNob3IyCisKKyAgICBTdHJpbmcgdWE7CisKKyAgICAvLyBQ
cm9kdWN0CisgICAgdWEgKz0gIk1vemlsbGEvNS4wIjsKKworICAgIC8vIENvbW1lbnQKKyAgICB1
YSArPSAiICgiOworICAgIHVhICs9IGFnZW50UGxhdGZvcm0oKTsgLy8gUGxhdGZvcm0KKyAgICB1
YSArPSAiOyBVOyAiOyAvLyBTZWN1cml0eQorICAgIHVhICs9IGFnZW50T1MoKTsgLy8gT1Mtb3It
Q1BVCisgICAgdWEgKz0gIjsgIjsKKyAgICB1YSArPSBkZWZhdWx0TGFuZ3VhZ2UoKTsgLy8gTG9j
YWxpemF0aW9uIGluZm9ybWF0aW9uCisgICAgdWEgKz0gIikgIjsKKworICAgIC8vIFdlYktpdCBQ
cm9kdWN0CisgICAgLy8gRklYTUU6IFRoZSBXZWJLaXQgdmVyc2lvbiBpcyBoYXJkY29kZWQKKyAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nIHdlYktpdFZlcnNpb24gPSAiNTI1LjErIjsKKyAgICB1YSAr
PSAiQXBwbGVXZWJLaXQvIiArIHdlYktpdFZlcnNpb247CisgICAgdWEgKz0gIiAoS0hUTUwsIGxp
a2UgR2Vja28sICI7CisgICAgLy8gV2UgbWVudGlvbiBTYWZhcmkgc2luY2UgbWFueSBicm9rZW4g
c2l0ZXMgY2hlY2sgZm9yIGl0IChPbW5pV2ViIGRvZXMgdGhpcyB0b28pCisgICAgLy8gV2UgcmUt
dXNlIHRoZSBXZWJLaXQgdmVyc2lvbiwgdGhvdWdoIGl0IGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIg
bXVjaCBpbiBwcmFjdGljZQorICAgIHVhICs9ICJTYWZhcmkvIiArIHdlYktpdFZlcnNpb247Cisg
ICAgdWEgKz0gIikgIjsKKworICAgIC8vIFZlbmRvciBQcm9kdWN0CisgICAgLy8gdWEgKz0gZ19n
ZXRfcHJnbmFtZSgpOworCisgICAgcmV0dXJuIHVhOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjpzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3QgU3RyaW5nICZhZ2VudCkKK3sKKyAgICBt
X2N1c3RvbVVzZXJBZ2VudCA9IGFnZW50OworfQorCitjb25zdCBTdHJpbmcmIEZyYW1lTG9hZGVy
Q2xpZW50RWZsOjpjdXN0b21Vc2VyQWdlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1c3Rv
bVVzZXJBZ2VudDsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1c2VyQWdlbnQo
Y29uc3QgS1VSTCYpCit7CisgICAgaWYgKCFtX2N1c3RvbVVzZXJBZ2VudC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtX2N1c3RvbVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5p
c0VtcHR5KCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gY29tcG9zZVVzZXJBZ2VudCgpOworICAg
IHJldHVybiBtX3VzZXJBZ2VudDsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2Fs
bFBvbGljeUZ1bmN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBvbGljeUFjdGlv
biBhY3Rpb24pCit7CisgICAgRnJhbWUqIGYgPSBld2tfZnJhbWVfY29yZV9nZXQobV9mcmFtZSk7
CisgICAgQVNTRVJUKGYpOworICAgIChmLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVu
Y3Rpb24pKGFjdGlvbik7Cit9CisKK1dURjo6UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQorewor
ICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gRG9jdW1lbnRMb2FkZXI6OmNyZWF0
ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CisgICAgaWYgKHN1YnN0aXR1dGVEYXRhLmlzVmFs
aWQoKSkKKyAgICAgICAgbG9hZGVyLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNl
KTsKKyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0
aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgc3Vy
ZWx5IHRvbyBzaW1wbGUKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworICAgIGNhbGxQb2xpY3lGdW5j
dGlvbihmdW5jdGlvbiwgUG9saWN5VXNlKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYg
KCFtX2ZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBm
bCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgaWYgKG1fZmlyc3REYXRhKSB7Cisg
ICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCks
IGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSByZS1j
aGVjayBoZXJlIGFzIHRoZSBwbHVnaW4gY2FuIGhhdmUgYmVlbiBjcmVhdGVkCisgICAgaWYgKG1f
cGx1Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsK
KyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVz
cG9uc2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aCk7CisgICAgfQorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERp
ZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVtb3ZlQmFja0ZvcndhcmRJ
dGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdp
dGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERp
ZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQWRkQmFja0Zvcndh
cmRJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRl
bnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
ICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQoreworICAgIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQobV9m
cmFtZSk7CisgICAgcG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdl
ZE5vdGlmaWNhdGlvbigpCit7CisgICAgZXdrX2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZCht
X2ZyYW1lKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cG9zdFByb2dyZXNzRmlu
aXNoZWROb3RpZmljYXRpb24oKQoreworICAgIGlmIChtX2xvYWRFcnJvci5pc051bGwoKSkKKyAg
ICAgICAgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQobV9mcmFtZSwgMCwgMCwgMCwgMCwgMCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKG1fZnJhbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmRvbWFpbigpLnV0ZjgoKS5k
YXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmVycm9y
Q29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvYWRFcnJvci5pc0Nh
bmNlbGxhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvYWRFcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmZhaWxpbmdVUkwoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmZyYW1lTG9hZGVyRGVzdHJv
eWVkKCkKK3sKKyAgICBpZiAobV9mcmFtZSkKKyAgICAgICAgZXdrX2ZyYW1lX2NvcmVfZ29uZSht
X2ZyYW1lKTsKKyAgICBtX2ZyYW1lID0gMDsKKworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKyAgICBtX2ZpcnN0RGF0YSA9IHRydWU7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAgICAvLyB3ZSBuZWVkIHRvIGNhbGwg
ZGlyZWN0bHkgaGVyZSAoY3VycmVudGx5IGNhbGxQb2xpY3lGdW5jdGlvbiBkb2VzIHRoYXQhKQor
ICAgIEFTU0VSVChmdW5jdGlvbik7CisgICAgaWYgKGNhblNob3dNSU1FVHlwZShNSU1FVHlwZSkp
CisgICAgICAgIGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5VXNlKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5RG93bmxvYWQp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERlY2lkZVBvbGljeUZv
ck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZp
Z2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworICAg
IEFTU0VSVChtX2ZyYW1lKTsKKyAgICAvLyBpZiBub3QgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qg
LSBsb29rIGF0IFF0IC0+IFBvbGljeUlnbm9yZTsKKyAgICAvLyBGSVhNRTogZG8gcHJvcGVyIGNo
ZWNrIGFuZCBvbmx5IHJlc2V0IGZvcm1zIHdoZW4gb24gUG9saWN5SWdub3JlCisgICAgRnJhbWUq
IGYgPSBld2tfZnJhbWVfY29yZV9nZXQobV9mcmFtZSk7CisgICAgZi0+bG9hZGVyKCktPnJlc2V0
TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKKyAgICBjYWxsUG9saWN5RnVuY3Rp
b24oZnVuY3Rpb24sIFBvbGljeVVzZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7Cisg
ICAgQVNTRVJUKGZ1bmN0aW9uKTsKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgLy8gaWYgbm90
IGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0IC0gbG9vayBhdCBRdCAtPiBQb2xpY3lJZ25vcmU7Cisg
ICAgLy8gRklYTUU6IGRvIHByb3BlciBjaGVjayBhbmQgb25seSByZXNldCBmb3JtcyB3aGVuIG9u
IFBvbGljeUlnbm9yZQorICAgIEZyYW1lKiBmID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1fZnJhbWUp
OworICAgIGYtPmxvYWRlcigpLT5yZXNldE11bHRpcGxlRm9ybVN1Ym1pc3Npb25Qcm90ZWN0aW9u
KCk7CisgICAgY2FsbFBvbGljeUZ1bmN0aW9uKGZ1bmN0aW9uLCBQb2xpY3lVc2UpOworfQorCitQ
YXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNyZWF0ZVBsdWdpbihjb25z
dCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgQVNTRVJUKG1fdmlldyk7CisK
KyAgICByZXR1cm4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShtX3ZpZXcsIG1fZnJhbWUsIHBsdWdp
blNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwgdXJsLCBw
YXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVM
b2FkZXJDbGllbnRFZmw6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwKKyAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBTdHJpbmcmIHJlZmVy
cmVyLCBib29sIGFsbG93c1Njcm9sbGluZywgaW50IG1hcmdpbldpZHRoLCBpbnQgbWFyZ2luSGVp
Z2h0KQoreworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NFUlQobV92aWV3KTsKKworICAg
IHJldHVybiBld2tfdmlld19mcmFtZV9jcmVhdGUobV92aWV3LCBtX2ZyYW1lLCBuYW1lLCBvd25l
ckVsZW1lbnQsIHVybCwgcmVmZXJyZXIpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpyZWRpcmVjdERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCkKK3sKKyAgICBBU1NF
UlQoIW1fcGx1Z2luVmlldyk7CisgICAgbV9wbHVnaW5WaWV3ID0gc3RhdGljX2Nhc3Q8UGx1Z2lu
Vmlldyo+KHBsdWdpbldpZGdldCk7CisgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZh
bHNlOworfQorCitQYXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNyZWF0
ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYsIEhUTUxBcHBsZXRFbGVtZW50KiwgY29u
c3QgS1VSTCYgYmFzZVVSTCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhcmFtTmFtZXMsIGNvbnN0IFZlY3Rv
cjxTdHJpbmc+JiBwYXJhbVZhbHVlcykKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiAwOworfQorCitPYmplY3RDb250ZW50VHlwZSBGcmFtZUxvYWRlckNsaWVudEVmbDo6b2Jq
ZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlKQor
eworICAgIGlmICh1cmwuaXNFbXB0eSgpICYmIG1pbWVUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIE9iamVjdENvbnRlbnROb25lOworCisgICAgLy8gV2UgZG9uJ3QgdXNlIE1JTUVUeXBl
UmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yUGF0aCgpIGJlY2F1c2UgaXQgcmV0dXJucyAiYXBwbGlj
YXRpb24vb2N0ZXQtc3RyZWFtIiB1cG9uIGZhaWx1cmUKKyAgICBTdHJpbmcgdHlwZSA9IG1pbWVU
eXBlOworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkKKyAgICAgICAgdHlwZSA9IE1JTUVUeXBlUmVn
aXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHVybC5wYXRoKCkuc3Vic3RyaW5nKHVybC5w
YXRoKCkucmV2ZXJzZUZpbmQoJy4nKSArIDEpKTsKKworICAgIGlmICh0eXBlLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKKworICAgIGlmIChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZEltYWdlTUlNRVR5cGUodHlwZSkpCisgICAgICAgIHJldHVybiBP
YmplY3RDb250ZW50SW1hZ2U7CisKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBs
dWdpbnMoKS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQobWltZVR5cGUpKQorICAgICAgICByZXR1cm4g
T2JqZWN0Q29udGVudE5ldHNjYXBlUGx1Z2luOworCisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6
OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZSh0eXBlKSkKKyAgICAgICAgcmV0dXJuIE9iamVj
dENvbnRlbnRGcmFtZTsKKworICAgIGlmICh1cmwucHJvdG9jb2woKSA9PSAiYWJvdXQiKQorICAg
ICAgICByZXR1cm4gT2JqZWN0Q29udGVudEZyYW1lOworCisgICAgcmV0dXJuIE9iamVjdENvbnRl
bnROb25lOworfQorCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRFZmw6Om92ZXJyaWRlTWVkaWFU
eXBlKCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmco
KTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6d2luZG93T2JqZWN0Q2xlYXJlZCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCkKK3sKKyAgICByZXR1cm47Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpZFBlcmZvcm1GaXJzdE5hdmlnYXRpb24oKSBjb25zdAor
eworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OnJlZ2lzdGVyRm9ySWNvbk5vdGlmaWNhdGlvbihib29sKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnNldE1haW5GcmFtZURvY3VtZW50
UmVhZHkoYm9vbCkKK3sKKyAgICAvLyB0aGlzIGlzIG9ubHkgaW50ZXJlc3Rpbmcgb25jZSB3ZSBw
cm92aWRlIGFuIGV4dGVybmFsIEFQSSBmb3IgdGhlIERPTQorfQorCitib29sIEZyYW1lTG9hZGVy
Q2xpZW50RWZsOjpoYXNXZWJWaWV3KCkgY29uc3QKK3sKKyAgICAvLyBub3RJbXBsZW1lbnRlZCgp
OworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpoYXNG
cmFtZVZpZXcoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHRy
dWU7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkRmluaXNoTG9h
ZCgpCit7CisgICAgbV9sb2FkRXJyb3IgPSBSZXNvdXJjZUVycm9yKCk7IC8qIGNsZWFycyBwcmV2
aW91cyBlcnJvciAqLworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpmcmFtZUxvYWRD
b21wbGV0ZWQoKQoreworICAgIC8vIE5vdGU6IENhbiBiZSBjYWxsZWQgbXVsdGlwbGUgdGltZXMu
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnNhdmVWaWV3U3RhdGVUb0l0ZW0oSGlz
dG9yeUl0ZW0qKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OnJlc3RvcmVWaWV3U3RhdGUoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRp
cmVjdExpbmtzKCkKK3sKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2hvdWxkR29U
b0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKiBpdGVtKSBjb25zdAoreworICAgIC8vIEZJWE1FOiBU
aGlzIGlzIGEgdmVyeSBzaW1wbGUgaW1wbGVtZW50YXRpb24uIE1vcmUgc29waGlzdGljYXRlZAor
ICAgIC8vIGltcGxlbWVudGF0aW9uIHdvdWxkIGRlbGVnYXRlIHRoZSBkZWNpc2lvbiB0byBhIFBv
bGljeURlbGVnYXRlLgorICAgIC8vIFNlZSBtYWMgaW1wbGVtZW50YXRpb24gZm9yIGV4YW1wbGUu
CisgICAgcmV0dXJuIGl0ZW07Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpZERp
c3BsYXlJbnNlY3VyZUNvbnRlbnQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3Zv
aWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpZFJ1bkluc2VjdXJlQ29udGVudChTZWN1cml0eU9y
aWdpbiopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6bWFrZVJlcHJlc2VudGF0aW9uKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpmb3JjZUxheW91
dCgpCit7CisgICAgZXdrX2ZyYW1lX2ZvcmNlX2xheW91dChtX2ZyYW1lKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEVmbDo6Zm9yY2VMYXlvdXRGb3JOb25IVE1MKCkKK3sKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2V0Q29waWVzT25TY3JvbGwoKQoreworICAgIC8vIGFw
cGFyZW50bHkgbWFjIHNwZWNpZmljIChRdCBjb21tZW50KQorfQorCit2b2lkIEZyYW1lTG9hZGVy
Q2xpZW50RWZsOjpkZXRhY2hlZEZyb21QYXJlbnQyKCkKK3sKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGV0YWNoZWRGcm9tUGFyZW50MygpCit7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmxvYWRlZEZyb21DYWNoZWRQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZEhhbmRsZU9u
bG9hZEV2ZW50cygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxv
YWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRSZWNlaXZlU2VydmVyUmVkaXJlY3RGb3JQcm92aXNp
b25hbExvYWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2FuY2VsQ2xpZW50UmVkaXJlY3QoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNo
V2lsbFBlcmZvcm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlLCBkb3VibGUpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6
ZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoV2lsbENsb3Nl
KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVJY29uKCkKK3sKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hEaWRTdGFydFByb3Zpc2lvbmFsTG9hZCgpCit7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlKGNvbnN0IFN0cmlu
ZyYgdGl0bGUpCit7CisgICAgQ1N0cmluZyBjcyA9IHRpdGxlLnV0ZjgoKTsKKyAgICBld2tfZnJh
bWVfdGl0bGVfc2V0KG1fZnJhbWUsIGNzLmRhdGEoKSk7CisKKyAgICBpZiAoZXdrX3ZpZXdfZnJh
bWVfbWFpbl9nZXQobV92aWV3KSAhPSBtX2ZyYW1lKQorICAgICAgICByZXR1cm47CisgICAgZXdr
X3ZpZXdfdGl0bGVfc2V0KG1fdmlldywgY3MuZGF0YSgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRDb21taXRMb2FkKCkKK3sKKyAgICBld2tfZnJhbWVfdXJp
X2NoYW5nZWQobV9mcmFtZSk7CisgICAgaWYgKGV3a192aWV3X2ZyYW1lX21haW5fZ2V0KG1fdmll
dykgIT0gbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOworICAgIGV3a192aWV3X3RpdGxlX3NldCht
X3ZpZXcsIDApOworICAgIGV3a192aWV3X3VyaV9jaGFuZ2VkKG1fdmlldyk7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkRmluaXNoRG9jdW1lbnRMb2FkKCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpk
aXNwYXRjaERpZEZpcnN0TGF5b3V0KCkKK3sKKyAgICAvLyBlbWl0IG1fZnJhbWUtPmluaXRpYWxM
YXlvdXRDb21wbGV0ZWQoKTsKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZEZpcnN0VmlzdWFsbHlOb25FbXB0eUxheW91dCgp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6ZGlzcGF0Y2hTaG93KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpjYW5jZWxQb2xpY3lDaGVjaygpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2Fk
TWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpyZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUo
RG9jdW1lbnRMb2FkZXIqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRFZmw6OndpbGxDaGFuZ2VUaXRsZShEb2N1bWVudExvYWRlciopCit7Cisg
ICAgLy8gbm8gbmVlZCBmb3IsIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlIGlzIHRoZSByaWdodCBj
YWxsYmFjaworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaWRDaGFuZ2VUaXRsZShE
b2N1bWVudExvYWRlciAqbCkKK3sKKyAgICAvLyBubyBuZWVkIGZvciwgZGlzcGF0Y2hEaWRSZWNl
aXZlVGl0bGUgaXMgdGhlIHJpZ2h0IGNhbGxiYWNrCit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OmNhbkhhbmRsZVJlcXVlc3QoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikgY29uc3QKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB0cnVlOworfQorCitib29sIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJiBNSU1FVHlwZSkg
Y29uc3QKK3sKKyAgICBpZiAoTUlNRVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVU
eXBlKE1JTUVUeXBlKSkKKyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoTUlNRVR5cGVS
ZWdpc3RyeTo6aXNTdXBwb3J0ZWROb25JbWFnZU1JTUVUeXBlKE1JTUVUeXBlKSkKKyAgICAgICAg
cmV0dXJuIHRydWU7CisKKyAgICBpZiAoUGx1Z2luRGF0YWJhc2U6Omluc3RhbGxlZFBsdWdpbnMo
KS0+aXNNSU1FVHlwZVJlZ2lzdGVyZWQoTUlNRVR5cGUpKQorICAgICAgICByZXR1cm4gdHJ1ZTsK
KworICAgIHJldHVybiBmYWxzZTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cmVw
cmVzZW50YXRpb25FeGlzdHNGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK1N0cmluZyBGcmFtZUxvYWRlckNsaWVudEVmbDo6Z2VuZXJh
dGVkTUlNRVR5cGVGb3JVUkxTY2hlbWUoY29uc3QgU3RyaW5nJikgY29uc3QKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiBTdHJpbmcoKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZmluaXNoZWRMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIpCit7Cisg
ICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYgKG1fZmlyc3REYXRhKSB7CisgICAg
ICAgICAgICBGcmFtZUxvYWRlciogZmwgPSBsb2FkZXItPmZyYW1lTG9hZGVyKCk7CisgICAgICAg
ICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNl
KTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVs
c2UgeworICAgICAgICBtX3BsdWdpblZpZXctPmRpZEZpbmlzaExvYWRpbmcoKTsKKyAgICAgICAg
bV9wbHVnaW5WaWV3ID0gMDsKKyAgICAgICAgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbiA9IGZh
bHNlOworICAgIH0KK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpwcm92aXNpb25h
bExvYWRTdGFydGVkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaWRGaW5pc2hMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpwcmVwYXJlRm9yRGF0YVNvdXJjZVJl
cGxhY2VtZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBLVVJMJiB1
cmwpCit7CisgICAgLy8gbm8gbmVlZCBmb3IsIGRpc3BhdGNoRGlkUmVjZWl2ZVRpdGxlIGlzIHRo
ZSByaWdodCBjYWxsYmFjaworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRj
aERpZFJlY2VpdmVDb250ZW50TGVuZ3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBpbnQgbGVuZ3RoUmVjZWl2ZWQpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
K30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRGaW5pc2hMb2FkaW5n
KERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlk
RmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqIGxvYWRlciwgdW5zaWduZWQgbG9uZyBpZGVudGlm
aWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBpZiAobV9maXJzdERhdGEpIHsKKyAg
ICAgICAgRnJhbWVMb2FkZXIqIGZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOworICAgICAgICBm
bC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAg
ICAgICAgbV9maXJzdERhdGEgPSBmYWxzZTsKKyAgICB9CisKK30KKworYm9vbCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNl
JiwgaW50IGxlbmd0aCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiBmYWxz
ZTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRMb2FkUmVzb3Vy
Y2VCeVhNTEh0dHBSZXF1ZXN0KHVuc2lnbmVkIGxvbmcsIGNvbnN0IFNjcmlwdFN0cmluZyYpCit7
CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6
ZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3ImIGVycikK
K3sKKyAgICBkaXNwYXRjaERpZEZhaWxMb2FkKGVycik7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRFZmw6OmRpc3BhdGNoRGlkRmFpbExvYWQoY29uc3QgUmVzb3VyY2VFcnJvciYgZXJyKQor
eworICAgIG1fbG9hZEVycm9yID0gZXJyOworICAgIGV3a19mcmFtZV9sb2FkX2Vycm9yKG1fZnJh
bWUsCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9sb2FkRXJyb3IuZG9tYWluKCkudXRmOCgp
LmRhdGEoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvYWRFcnJvci5lcnJvckNvZGUo
KSwgbV9sb2FkRXJyb3IuaXNDYW5jZWxsYXRpb24oKSwKKyAgICAgICAgICAgICAgICAgICAgICAg
ICBtX2xvYWRFcnJvci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksCisgICAg
ICAgICAgICAgICAgICAgICAgICAgbV9sb2FkRXJyb3IuZmFpbGluZ1VSTCgpLnV0ZjgoKS5kYXRh
KCkpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkb3dubG9hZChSZXNvdXJjZUhh
bmRsZSosIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNv
bnN0IFJlc291cmNlUmVzcG9uc2UmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKKy8v
IGNvcGllZCBmcm9tIFdlYktpdC9NaXNjL1dlYktpdEVycm9yc1tQcml2YXRlXS5oCitlbnVtIHsK
KyAgICBXZWJLaXRFcnJvckNhbm5vdFNob3dNSU1FVHlwZSA9IDEwMCwKKyAgICBXZWJLaXRFcnJv
ckNhbm5vdFNob3dVUkwgPSAxMDEsCisgICAgV2ViS2l0RXJyb3JGcmFtZUxvYWRJbnRlcnJ1cHRl
ZEJ5UG9saWN5Q2hhbmdlID0gMTAyLAorICAgIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3Rl
ZFBvcnQgPSAxMDMsCisgICAgV2ViS2l0RXJyb3JDYW5ub3RGaW5kUGx1Z0luID0gMjAwLAorICAg
IFdlYktpdEVycm9yQ2Fubm90TG9hZFBsdWdJbiA9IDIwMSwKKyAgICBXZWJLaXRFcnJvckphdmFV
bmF2YWlsYWJsZSA9IDIwMiwKK307CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6OmNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sKKyAg
ICBSZXNvdXJjZUVycm9yIGVycm9yKCJFcnJvciIsIC05OTksIHJlcXVlc3QudXJsKCkucHJldHR5
VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCBjYW5jZWxsZWQiKTsKKyAg
ICBlcnJvci5zZXRJc0NhbmNlbGxhdGlvbih0cnVlKTsKKyAgICByZXR1cm4gZXJyb3I7Cit9CisK
K1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmJsb2NrZWRFcnJvcihjb25zdCBS
ZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVy
cm9yIiwgV2ViS2l0RXJyb3JDYW5ub3RVc2VSZXN0cmljdGVkUG9ydCwgcmVxdWVzdC51cmwoKS5w
cmV0dHlVUkwoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiUmVxdWVzdCBibG9ja2VkIik7
Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbm5vdFNob3dVUkxF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3QpCit7CisgICAgcmV0dXJuIFJlc291
cmNlRXJyb3IoIkVycm9yIiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93VVJMLCByZXF1ZXN0LnVybCgp
LnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc2hvdyBVUkwiKTsK
K30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVmbDo6aW50ZXJydXB0Rm9yUG9s
aWN5Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdlYktpdEVycm9yRnJhbWVMb2FkSW50ZXJydXB0
ZWRCeVBvbGljeUNoYW5nZSwKKyAgICAgICAgICAgICAgICAgICAgICAgICByZXF1ZXN0LnVybCgp
LnN0cmluZygpLCAiRnJhbWUgbG9hZCBpbnRlcnJ1cGVkIGJ5IHBvbGljeSBjaGFuZ2UiKTsKK30K
KworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2Fubm90U2hvd01JTUVUeXBl
RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7CisgICAgcmV0dXJuIFJl
c291cmNlRXJyb3IoIkVycm9yIiwgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUsIHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJDYW5ub3Qgc2hv
dyBtaW1ldHlwZSIpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpm
aWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYgcmVzcG9uc2UpCit7
CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9yIiwgLTk5OCAvKiAjIyMgKi8sIHJlc3Bv
bnNlLnVybCgpLnN0cmluZygpLAorICAgICAgICAgICAgICAgICAgICAgICAgICJGaWxlIGRvZXMg
bm90IGV4aXN0Iik7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnBs
dWdpbldpbGxIYW5kbGVMb2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpCit7CisgICAg
bm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCAwLCAi
IiwgIiIpOworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRGYWxsQmFjayhj
b25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVy
biBmYWxzZTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuQ2FjaGVQYWdlKCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK0ZyYW1lKiBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6ZGlzcGF0Y2hDcmVhdGVQYWdlKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAwOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaFVuYWJs
ZVRvSW1wbGVtZW50UG9saWN5KGNvbnN0IFJlc291cmNlRXJyb3ImKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnNldE1haW5Eb2N1bWVu
dEVycm9yKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImIGVycm9y
KQoreworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkg
eworICAgICAgICAgICAgbG9hZGVyLT5mcmFtZUxvYWRlcigpLT5zZXRFbmNvZGluZyhtX3Jlc3Bv
bnNlLnRleHRFbmNvZGluZ05hbWUoKSwgZmFsc2UpOworICAgICAgICAgICAgbV9maXJzdERhdGEg
PSBmYWxzZTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIG1fcGx1Z2luVmlldy0+
ZGlkRmFpbChlcnJvcik7CisgICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFz
U2VudFJlc3BvbnNlVG9QbHVnaW4gPSBmYWxzZTsKKyAgICB9Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OnN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRh
dGVHbG9iYWxIaXN0b3J5KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNoZWRG
cmFtZSopCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6dHJhbnNpdGlvblRvQ29tbWl0dGVkRnJvbUNhY2hlZEZyYW1lKENhY2hlZEZyYW1l
KikKK3sKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6dHJhbnNpdGlvblRvQ29tbWl0
dGVkRm9yTmV3UGFnZSgpCit7CisgICAgQVNTRVJUKG1fZnJhbWUpOworICAgIEFTU0VSVChtX3Zp
ZXcpOworICAgIGV3a19mcmFtZV92aWV3X2NyZWF0ZV9mb3JfdmlldyhtX2ZyYW1lLCBtX3ZpZXcp
OworfQorCit9CkluZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0L0ZyYW1lTG9hZGVyQ2xp
ZW50RWZsLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gL2Rldi9udWxsCisrKyBXZWJLaXQvZWZsL1dlYkNvcmVT
dXBwb3J0L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmgKQEAgLTAsMCArMSwyMTYgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDYgWmFjayBSdXNpbiA8emFja0BrZGUub3JnPgorICogQ29weXJpZ2h0
IChDKSAyMDA2IEFwcGxlIENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICog
Q29weXJpZ2h0IChDKSAyMDA4IENvbGxhYm9yYSBMdGQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggSU5kVCAtIEluc3RpdHV0byBOb2tpYSBkZSBUZWNub2xvZ2lh
CisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBQcm9GVVNJT04gZW1iZWRkZWQgc3lzdGVtcwor
ICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgU2Ftc3VuZyBFbGVjdHJvbmljcworICoKKyAqIEFs
bCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3Vy
Y2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFy
ZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFy
ZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGlu
IGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92
aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9W
SURFRCBCWSBBUFBMRSBDT01QVVRFUiwgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVT
UyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBU
SEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1Mg
Rk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxF
IEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExP
U1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVU
SEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5H
IE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBV
U0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJ
VFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBGcmFtZUxvYWRlckNsaWVudEVmbF9o
CisjZGVmaW5lIEZyYW1lTG9hZGVyQ2xpZW50RWZsX2gKKworI2luY2x1ZGUgIkVXZWJLaXQuaCIK
KyNpbmNsdWRlICJGcmFtZUxvYWRlckNsaWVudC5oIgorI2luY2x1ZGUgIlBsdWdpblZpZXcuaCIK
KyNpbmNsdWRlICJSZXNvdXJjZVJlc3BvbnNlLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKwor
Y2xhc3MgRm9ybVN0YXRlOworCitjbGFzcyBGcmFtZUxvYWRlckNsaWVudEVmbCA6IHB1YmxpYyBG
cmFtZUxvYWRlckNsaWVudCB7CisgcHVibGljOgorICAgIGV4cGxpY2l0IEZyYW1lTG9hZGVyQ2xp
ZW50RWZsKEV2YXNfT2JqZWN0ICp2aWV3KTsKKyAgICB2aXJ0dWFsIH5GcmFtZUxvYWRlckNsaWVu
dEVmbCgpIHsgfQorICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRlckRlc3Ryb3llZCgpOworCisg
ICAgdm9pZCAgICAgICAgIHNldFdlYkZyYW1lKEV2YXNfT2JqZWN0ICpmcmFtZSkgeyBtX2ZyYW1l
ID0gZnJhbWU7IH0KKyAgICBFdmFzX09iamVjdCogd2ViRnJhbWUoKSBjb25zdCB7IHJldHVybiBt
X2ZyYW1lOyB9CisgICAgRXZhc19PYmplY3QqIHdlYlZpZXcoKSBjb25zdCB7IHJldHVybiBtX3Zp
ZXc7IH0KKworICAgIHZvaWQgc2V0Q3VzdG9tVXNlckFnZW50KGNvbnN0IFN0cmluZyAmYWdlbnQp
OworICAgIGNvbnN0IFN0cmluZyYgY3VzdG9tVXNlckFnZW50KCkgY29uc3Q7CisKKyAgICB2aXJ0
dWFsIGJvb2wgaGFzV2ViVmlldygpIGNvbnN0OworICAgIHZpcnR1YWwgYm9vbCBoYXNGcmFtZVZp
ZXcoKSBjb25zdDsKKworICAgIHZvaWQgY2FsbFBvbGljeUZ1bmN0aW9uKEZyYW1lUG9saWN5RnVu
Y3Rpb24gZnVuY3Rpb24sIFBvbGljeUFjdGlvbiBhY3Rpb24pOworCisgICAgdmlydHVhbCB2b2lk
IG1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopOworICAgIHZpcnR1YWwgdm9pZCBm
b3JjZUxheW91dCgpOworICAgIHZpcnR1YWwgdm9pZCBmb3JjZUxheW91dEZvck5vbkhUTUwoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBzZXRDb3BpZXNPblNjcm9sbCgpOworCisgICAgdmlydHVhbCB2
b2lkIGRldGFjaGVkRnJvbVBhcmVudDIoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGV0YWNoZWRGcm9t
UGFyZW50MygpOworCisgICAgdmlydHVhbCB2b2lkIGxvYWRlZEZyb21DYWNoZWRQYWdlKCk7CisK
KyAgICB2aXJ0dWFsIHZvaWQgYXNzaWduSWRlbnRpZmllclRvSW5pdGlhbFJlcXVlc3QodW5zaWdu
ZWQgbG9uZyBpZGVudGlmaWVyLCBEb2N1bWVudExvYWRlciosIGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFNlbmRSZXF1ZXN0KERvY3VtZW50
TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgUmVzb3VyY2VSZXF1ZXN0JiwgY29u
c3QgUmVzb3VyY2VSZXNwb25zZSYgcmVkaXJlY3RSZXNwb25zZSk7CisgICAgdmlydHVhbCBib29s
IHNob3VsZFVzZUNyZWRlbnRpYWxTdG9yYWdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9u
ZyBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQXV0aGVu
dGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nIGlkZW50aWZp
ZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlJik7CisKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hEaWRQdXNoU3RhdGVXaXRoaW5QYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlk
UmVwbGFjZVN0YXRlV2l0aGluUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEFk
ZEJhY2tGb3J3YXJkSXRlbShXZWJDb3JlOjpIaXN0b3J5SXRlbSopIGNvbnN0OworICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZFJlbW92ZUJhY2tGb3J3YXJkSXRlbShXZWJDb3JlOjpIaXN0b3J5
SXRlbSopIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUJhY2tGb3J3
YXJkSW5kZXgoKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDbGVhcldpbmRv
d09iamVjdEluV29ybGQoV2ViQ29yZTo6RE9NV3JhcHBlcldvcmxkKik7CisKKyAgICB2aXJ0dWFs
IHZvaWQgZGlzcGF0Y2hEaWRDYW5jZWxBdXRoZW50aWNhdGlvbkNoYWxsZW5nZShEb2N1bWVudExv
YWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IEF1dGhlbnRpY2F0aW9uQ2hh
bGxlbmdlJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVJlc3BvbnNlKERv
Y3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVDb250ZW50TGVu
Z3RoKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBpbnQgbGVuZ3Ro
UmVjZWl2ZWQpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpbmlzaExvYWRpbmcoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGYWlsTG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcg
IGlkZW50aWZpZXIsIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIGJvb2wgZGlz
cGF0Y2hEaWRMb2FkUmVzb3VyY2VGcm9tTWVtb3J5Q2FjaGUoRG9jdW1lbnRMb2FkZXIqLCBjb25z
dCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJiwgaW50IGxlbmd0aCk7
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlQnlYTUxIdHRwUmVxdWVz
dCh1bnNpZ25lZCBsb25nIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OlNjcmlwdFN0cmluZyYg
c291cmNlU3RyaW5nKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEhhbmRsZU9ubG9h
ZEV2ZW50cygpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVTZXJ2ZXJSZWRp
cmVjdEZvclByb3Zpc2lvbmFsTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENh
bmNlbENsaWVudFJlZGlyZWN0KCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFBlcmZv
cm1DbGllbnRSZWRpcmVjdChjb25zdCBLVVJMJiwgZG91YmxlLCBkb3VibGUpOworICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaERpZENoYW5nZUxvY2F0aW9uV2l0aGluUGFnZSgpOworICAgIHZpcnR1
YWwgdm9pZCBkaXNwYXRjaFdpbGxDbG9zZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERp
ZFJlY2VpdmVJY29uKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkU3RhcnRQcm92aXNp
b25hbExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlVGl0bGUoY29u
c3QgU3RyaW5nJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpOwor
ICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxQcm92aXNpb25hbExvYWQoY29uc3QgUmVz
b3VyY2VFcnJvciYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0
IFJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hEb2N1
bWVudExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2FkKCk7Cisg
ICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RMYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZv
aWQgZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlMYXlvdXQoKTsKKworICAgIHZpcnR1
YWwgRnJhbWUqIGRpc3BhdGNoQ3JlYXRlUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRj
aFNob3coKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZvck1JTUVU
eXBlKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IFN0cmluZyYgTUlNRVR5cGUsIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERlY2lkZVBvbGljeUZv
ck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0
aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNzUmVmUHRyPEZvcm1TdGF0ZT4s
IGNvbnN0IFN0cmluZyYgZnJhbWVOYW1lKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNp
ZGVQb2xpY3lGb3JOYXZpZ2F0aW9uQWN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24sIGNvbnN0IE5h
dmlnYXRpb25BY3Rpb24mLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBXVEY6OlBhc3NSZWZQdHI8
Rm9ybVN0YXRlPik7CisgICAgdmlydHVhbCB2b2lkIGNhbmNlbFBvbGljeUNoZWNrKCk7CisKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNv
dXJjZUVycm9yJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShG
cmFtZVBvbGljeUZ1bmN0aW9uLCBXVEY6OlBhc3NSZWZQdHI8Rm9ybVN0YXRlPik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRMb2FkTWFpblJlc291cmNlKERvY3VtZW50TG9hZGVyKik7
CisgICAgdmlydHVhbCB2b2lkIHJldmVydFRvUHJvdmlzaW9uYWxTdGF0ZShEb2N1bWVudExvYWRl
ciopOworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRl
ciosIGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jl
c3NTdGFydGVkTm90aWZpY2F0aW9uKCk7CisgICAgdmlydHVhbCB2b2lkIHBvc3RQcm9ncmVzc0Vz
dGltYXRlQ2hhbmdlZE5vdGlmaWNhdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJvZ3Jl
c3NGaW5pc2hlZE5vdGlmaWNhdGlvbigpOworCisgICAgdmlydHVhbCBQYXNzUmVmUHRyPEZyYW1l
PiBjcmVhdGVGcmFtZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbmFtZSwgSFRNTEZy
YW1lT3duZXJFbGVtZW50KiBvd25lckVsZW1lbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgY29uc3QgU3RyaW5nJiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBt
YXJnaW5XaWR0aCwgaW50IG1hcmdpbkhlaWdodCk7CisgICAgdmlydHVhbCBQYXNzUmVmUHRyPFdp
ZGdldD4gY3JlYXRlUGx1Z2luKGNvbnN0IEludFNpemUmLCBIVE1MUGx1Z0luRWxlbWVudCosIGNv
bnN0IEtVUkwmLCBjb25zdCBXVEY6OlZlY3RvcjxTdHJpbmc+JiwgY29uc3QgV1RGOjpWZWN0b3I8
U3RyaW5nPiYsIGNvbnN0IFN0cmluZyYsIGJvb2wpOworICAgIHZpcnR1YWwgdm9pZCByZWRpcmVj
dERhdGFUb1BsdWdpbihXaWRnZXQqIHBsdWdpbldpZGdldCk7CisgICAgdmlydHVhbCBQYXNzUmVm
UHRyPFdpZGdldD4gY3JlYXRlSmF2YUFwcGxldFdpZGdldChjb25zdCBJbnRTaXplJiwgSFRNTEFw
cGxldEVsZW1lbnQqLCBjb25zdCBLVVJMJiBiYXNlVVJMLCBjb25zdCBXVEY6OlZlY3RvcjxTdHJp
bmc+JiBwYXJhbU5hbWVzLCBjb25zdCBXVEY6OlZlY3RvcjxTdHJpbmc+JiBwYXJhbVZhbHVlcyk7
CisgICAgdmlydHVhbCBTdHJpbmcgb3ZlcnJpZGVNZWRpYVR5cGUoKSBjb25zdDsKKyAgICB2aXJ0
dWFsIHZvaWQgd2luZG93T2JqZWN0Q2xlYXJlZCgpOworICAgIHZpcnR1YWwgdm9pZCBkb2N1bWVu
dEVsZW1lbnRBdmFpbGFibGUoKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaWRQZXJmb3JtRmlyc3RO
YXZpZ2F0aW9uKCkgY29uc3Q7CisKKyAgICB2aXJ0dWFsIHZvaWQgcmVnaXN0ZXJGb3JJY29uTm90
aWZpY2F0aW9uKGJvb2wpOworCisgICAgdmlydHVhbCBPYmplY3RDb250ZW50VHlwZSBvYmplY3RD
b250ZW50VHlwZShjb25zdCBLVVJMJiB1cmwsIGNvbnN0IFN0cmluZyYgbWltZVR5cGUpOworCisg
ICAgdmlydHVhbCB2b2lkIHNldE1haW5GcmFtZURvY3VtZW50UmVhZHkoYm9vbCk7CisKKyAgICB2
aXJ0dWFsIHZvaWQgc3RhcnREb3dubG9hZChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKworICAg
IHZpcnR1YWwgdm9pZCB3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2aXJ0
dWFsIHZvaWQgZGlkQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIqKTsKKworICAgIHZpcnR1YWwg
dm9pZCBjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiwgY29uc3QgY2hhciosIGludCk7Cisg
ICAgdmlydHVhbCB2b2lkIGZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciopOworCisgICAg
dmlydHVhbCB2b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnkoKTsKKyAgICB2aXJ0dWFsIHZvaWQgdXBk
YXRlR2xvYmFsSGlzdG9yeVJlZGlyZWN0TGlua3MoKTsKKyAgICB2aXJ0dWFsIGJvb2wgc2hvdWxk
R29Ub0hpc3RvcnlJdGVtKEhpc3RvcnlJdGVtKikgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRp
ZERpc3BsYXlJbnNlY3VyZUNvbnRlbnQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUnVuSW5zZWN1
cmVDb250ZW50KFNlY3VyaXR5T3JpZ2luKik7CisKKyAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3Ig
Y2FuY2VsbGVkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisgICAgdmlydHVhbCBSZXNv
dXJjZUVycm9yIGJsb2NrZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0
dWFsIFJlc291cmNlRXJyb3IgY2Fubm90U2hvd1VSTEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVz
dCYpOworICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBpbnRlcnJ1cHRGb3JQb2xpY3lDaGFuZ2VF
cnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKworICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJv
ciBjYW5ub3RTaG93TUlNRVR5cGVFcnJvcihjb25zdCBSZXNvdXJjZVJlc3BvbnNlJik7CisgICAg
dmlydHVhbCBSZXNvdXJjZUVycm9yIGZpbGVEb2VzTm90RXhpc3RFcnJvcihjb25zdCBSZXNvdXJj
ZVJlc3BvbnNlJik7CisgICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIHBsdWdpbldpbGxIYW5kbGVM
b2FkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYpOworCisgICAgdmlydHVhbCBib29sIHNo
b3VsZEZhbGxCYWNrKGNvbnN0IFJlc291cmNlRXJyb3ImKTsKKworICAgIHZpcnR1YWwgYm9vbCBj
YW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNvbnN0OworICAgIHZpcnR1
YWwgYm9vbCBjYW5TaG93TUlNRVR5cGUoY29uc3QgU3RyaW5nJikgY29uc3Q7CisgICAgdmlydHVh
bCBib29sIHJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNv
bnN0OworICAgIHZpcnR1YWwgU3RyaW5nIGdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNv
bnN0IFN0cmluZyYpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIGZyYW1lTG9hZENvbXBsZXRl
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBzYXZlVmlld1N0YXRlVG9JdGVtKEhpc3RvcnlJdGVtKik7
CisgICAgdmlydHVhbCB2b2lkIHJlc3RvcmVWaWV3U3RhdGUoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cHJvdmlzaW9uYWxMb2FkU3RhcnRlZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaWRGaW5pc2hMb2Fk
KCk7CisgICAgdmlydHVhbCB2b2lkIHByZXBhcmVGb3JEYXRhU291cmNlUmVwbGFjZW1lbnQoKTsK
KworICAgIHZpcnR1YWwgV1RGOjpQYXNzUmVmUHRyPERvY3VtZW50TG9hZGVyPiBjcmVhdGVEb2N1
bWVudExvYWRlcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBTdWJzdGl0dXRlRGF0YSYp
OworICAgIHZpcnR1YWwgdm9pZCBzZXRUaXRsZShjb25zdCBTdHJpbmcmIHRpdGxlLCBjb25zdCBL
VVJMJik7CisKKyAgICB2aXJ0dWFsIFN0cmluZyB1c2VyQWdlbnQoY29uc3QgS1VSTCYpOworCisg
ICAgdmlydHVhbCB2b2lkIHNhdmVQbGF0Zm9ybURhdGFUb0NhY2hlZEZyYW1lKENhY2hlZEZyYW1l
Kik7CisgICAgdmlydHVhbCB2b2lkIHRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFt
ZShDYWNoZWRGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRG
b3JOZXdQYWdlKCk7CisKKyAgICB2aXJ0dWFsIGJvb2wgY2FuQ2FjaGVQYWdlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIGRvd25sb2FkKFJlc291cmNlSGFuZGxlKiwgY29uc3QgUmVzb3VyY2VS
ZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworIHByaXZhdGU6CisgICAgRXZhc19PYmplY3QgKm1fdmlldzsKKyAgICBFdmFzX09iamVjdCAq
bV9mcmFtZTsKKworICAgIFJlc291cmNlUmVzcG9uc2UgbV9yZXNwb25zZTsKKyAgICBib29sIG1f
Zmlyc3REYXRhOworICAgIFN0cmluZyBtX3VzZXJBZ2VudDsKKyAgICBTdHJpbmcgbV9jdXN0b21V
c2VyQWdlbnQ7CisKKyAgICBSZXNvdXJjZUVycm9yIG1fbG9hZEVycm9yOworCisgICAgLy8gUGx1
Z2luIHZpZXcgdG8gcmVkaXJlY3QgZGF0YSB0bworICAgIFBsdWdpblZpZXcqIG1fcGx1Z2luVmll
dzsKKyAgICBib29sIG1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW47Cit9OworCit9CisKKyNlbmRp
ZiAvLyBGcmFtZUxvYWRlckNsaWVudEVmbF9oCg==
</data>
<flag name="review"
          id="33391"
          type_id="1"
          status="+"
          setter="kenneth"
    />
    <flag name="commit-queue"
          id="33392"
          type_id="3"
          status="-"
          setter="kenneth"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>53483</attachid>
            <date>2010-04-15 15:33:58 -0700</date>
            <delta_ts>2010-04-16 00:03:28 -0700</delta_ts>
            <desc>Add FrameLoaderClientEfl to WK/efl/WebCoreSupport.</desc>
            <filename>flce.diff</filename>
            <type>text/plain</type>
            <size>35033</size>
            <attacher name="Leandro Pereira">leandro</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYktpdC9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViS2l0L0NoYW5nZUxvZwor
KysgV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEwLTAzLTA5ICBMZWFuZHJv
IFBlcmVpcmEgIDxsZWFuZHJvQHByb2Z1c2lvbi5tb2JpPgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCBFRkwgcG9ydCBmaWxlcyB0byBlZmwvV2Vi
Q29yZVN1cHBvcnQuCisgICAgICAgIGh0dHA6Ly93ZWJraXQub3JnL2IvMzU5MTUKKworICAgICAg
ICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5jcHA6IEFkZGVkLgor
ICAgICAgICAqIGVmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oOiBBZGRl
ZC4KKwogMjAxMC0wMy0wNCAgTWFyayBSb3dlICA8bXJvd2VAYXBwbGUuY29tPgogCiAgICAgICAg
IFJldmlld2VkIGJ5IFNhbSBXZWluaWcuCkluZGV4OiBXZWJLaXQvZWZsL1dlYkNvcmVTdXBwb3J0
L0ZyYW1lTG9hZGVyQ2xpZW50RWZsLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSAvZGV2L251bGwKKysrIFdl
YktpdC9lZmwvV2ViQ29yZVN1cHBvcnQvRnJhbWVMb2FkZXJDbGllbnRFZmwuY3BwCkBAIC0wLDAg
KzEsODU1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2Rl
Lm9yZz4KKyAqIENvcHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBOb2tpYSBDb3Jwb3JhdGlvbiBh
bmQvb3IgaXRzIHN1YnNpZGlhcnkoLWllcykKKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJv
cmEgTHRkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IEhvbGdl
ciBIYW5zIFBldGVyIEZyZXl0aGVyCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggS2VubmV0aCBSb2hk
ZSBDaHJpc3RpYW5zZW4KKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFByb0ZVU0lPTiBlbWJl
ZGRlZCBzeXN0ZW1zCisgKiBDb3B5cmlnaHQgKEMpIDIwMDktMjAxMCBTYW1zdW5nIEVsZWN0cm9u
aWNzCisgKgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIENPTVBVVEVSLCBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJV
VE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVD
SUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBP
UiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVT
UyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBM
SUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQK
KyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdB
WSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9G
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmln
LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnRFZmwuaCIKKworI2luY2x1ZGUgIkNTdHJp
bmcuaCIKKyNpbmNsdWRlICJEb2N1bWVudExvYWRlci5oIgorI2luY2x1ZGUgIkVXZWJLaXQuaCIK
KyNpbmNsdWRlICJGb3JtU3RhdGUuaCIKKyNpbmNsdWRlICJGcmFtZUxvYWRlci5oIgorI2luY2x1
ZGUgIkZyYW1lVHJlZS5oIgorI2luY2x1ZGUgIkZyYW1lVmlldy5oIgorI2luY2x1ZGUgIkhUTUxG
b3JtRWxlbWVudC5oIgorI2luY2x1ZGUgIkxhbmd1YWdlLmgiCisjaW5jbHVkZSAiTUlNRVR5cGVS
ZWdpc3RyeS5oIgorI2luY2x1ZGUgIk5vdEltcGxlbWVudGVkLmgiCisjaW5jbHVkZSAiUGx1Z2lu
RGF0YWJhc2UuaCIKKyNpbmNsdWRlICJQcm9ncmVzc1RyYWNrZXIuaCIKKyNpbmNsdWRlICJSZW5k
ZXJQYXJ0LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXF1ZXN0LmgiCisjaW5jbHVkZSAiZXdrX3By
aXZhdGUuaCIKKworI2lmIFBMQVRGT1JNKFVOSVgpCisjaW5jbHVkZSA8c3lzL3V0c25hbWUuaD4K
KyNlbmRpZgorCisjaW5jbHVkZSA8RWNvcmVfRXZhcy5oPgorCit1c2luZyBuYW1lc3BhY2UgV2Vi
Q29yZTsKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitGcmFtZUxvYWRlckNsaWVudEVmbDo6RnJh
bWVMb2FkZXJDbGllbnRFZmwoRXZhc19PYmplY3QgKnZpZXcpCisgICAgOiBtX3ZpZXcodmlldykK
KyAgICAsIG1fZnJhbWUoMCkKKyAgICAsIG1fZmlyc3REYXRhKGZhbHNlKQorICAgICwgbV91c2Vy
QWdlbnQoIiIpCisgICAgLCBtX2N1c3RvbVVzZXJBZ2VudCgiIikKKyAgICAsIG1fcGx1Z2luVmll
dygwKQorICAgICwgbV9oYXNTZW50UmVzcG9uc2VUb1BsdWdpbihmYWxzZSkKK3sKK30KKworc3Rh
dGljIFN0cmluZyBhZ2VudFBsYXRmb3JtKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAg
IHJldHVybiAiVW5rbm93biI7Cit9CisKK3N0YXRpYyBTdHJpbmcgYWdlbnRPUygpCit7CisjaWYg
UExBVEZPUk0oREFSV0lOKQorI2lmIFBMQVRGT1JNKFg4NikKKyAgICByZXR1cm4gIkludGVsIE1h
YyBPUyBYIjsKKyNlbHNlCisgICAgcmV0dXJuICJQUEMgTWFjIE9TIFgiOworI2VuZGlmCisjZWxp
ZiBQTEFURk9STShVTklYKQorICAgIHN0cnVjdCB1dHNuYW1lIG5hbWU7CisgICAgaWYgKHVuYW1l
KCZuYW1lKSAhPSAtMSkKKyAgICAgICAgcmV0dXJuIFN0cmluZzo6Zm9ybWF0KCIlcyAlcyIsIG5h
bWUuc3lzbmFtZSwgbmFtZS5tYWNoaW5lKTsKKworICAgIHJldHVybiAiVW5rbm93biI7CisjZWxp
ZiBQTEFURk9STShXSU5fT1MpCisgICAgLy8gRklYTUU6IENvbXB1dGUgdGhlIFdpbmRvd3MgdmVy
c2lvbgorICAgIHJldHVybiAiV2luZG93cyI7CisjZWxzZQorICAgIG5vdEltcGxlbWVudGVkKCk7
CisgICAgcmV0dXJuICJVbmtub3duIjsKKyNlbmRpZgorfQorCitzdGF0aWMgU3RyaW5nIGNvbXBv
c2VVc2VyQWdlbnQoKQoreworICAgIC8vIFRoaXMgaXMgYSBsaWJlcmFsIGludGVycHJldGF0aW9u
IG9mIGh0dHA6Ly93d3cubW96aWxsYS5vcmcvYnVpbGQvcmV2aXNlZC11c2VyLWFnZW50LXN0cmlu
Z3MuaHRtbAorICAgIC8vIFNlZSBhbHNvIGh0dHA6Ly9kZXZlbG9wZXIuYXBwbGUuY29tL2ludGVy
bmV0L3NhZmFyaS9mYXEuaHRtbCNhbmNob3IyCisKKyAgICBTdHJpbmcgdWE7CisKKyAgICAvLyBQ
cm9kdWN0CisgICAgdWEgKz0gIk1vemlsbGEvNS4wIjsKKworICAgIC8vIENvbW1lbnQKKyAgICB1
YSArPSAiICgiOworICAgIHVhICs9IGFnZW50UGxhdGZvcm0oKTsgLy8gUGxhdGZvcm0KKyAgICB1
YSArPSAiOyBVOyAiOyAvLyBTZWN1cml0eQorICAgIHVhICs9IGFnZW50T1MoKTsgLy8gT1Mtb3It
Q1BVCisgICAgdWEgKz0gIjsgIjsKKyAgICB1YSArPSBkZWZhdWx0TGFuZ3VhZ2UoKTsgLy8gTG9j
YWxpemF0aW9uIGluZm9ybWF0aW9uCisgICAgdWEgKz0gIikgIjsKKworICAgIC8vIFdlYktpdCBQ
cm9kdWN0CisgICAgLy8gRklYTUU6IFRoZSBXZWJLaXQgdmVyc2lvbiBpcyBoYXJkY29kZWQKKyAg
ICBzdGF0aWMgY29uc3QgU3RyaW5nIHdlYktpdFZlcnNpb24gPSAiNTI1LjErIjsKKyAgICB1YSAr
PSAiQXBwbGVXZWJLaXQvIiArIHdlYktpdFZlcnNpb247CisgICAgdWEgKz0gIiAoS0hUTUwsIGxp
a2UgR2Vja28sICI7CisgICAgLy8gV2UgbWVudGlvbiBTYWZhcmkgc2luY2UgbWFueSBicm9rZW4g
c2l0ZXMgY2hlY2sgZm9yIGl0IChPbW5pV2ViIGRvZXMgdGhpcyB0b28pCisgICAgLy8gV2UgcmUt
dXNlIHRoZSBXZWJLaXQgdmVyc2lvbiwgdGhvdWdoIGl0IGRvZXNuJ3Qgc2VlbSB0byBtYXR0ZXIg
bXVjaCBpbiBwcmFjdGljZQorICAgIHVhICs9ICJTYWZhcmkvIiArIHdlYktpdFZlcnNpb247Cisg
ICAgdWEgKz0gIikgIjsKKworICAgIC8vIFZlbmRvciBQcm9kdWN0CisgICAgLy8gdWEgKz0gZ19n
ZXRfcHJnbmFtZSgpOworCisgICAgcmV0dXJuIHVhOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjpzZXRDdXN0b21Vc2VyQWdlbnQoY29uc3QgU3RyaW5nICZhZ2VudCkKK3sKKyAgICBt
X2N1c3RvbVVzZXJBZ2VudCA9IGFnZW50OworfQorCitjb25zdCBTdHJpbmcmIEZyYW1lTG9hZGVy
Q2xpZW50RWZsOjpjdXN0b21Vc2VyQWdlbnQoKSBjb25zdAoreworICAgIHJldHVybiBtX2N1c3Rv
bVVzZXJBZ2VudDsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1c2VyQWdlbnQo
Y29uc3QgS1VSTCYpCit7CisgICAgaWYgKCFtX2N1c3RvbVVzZXJBZ2VudC5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBtX2N1c3RvbVVzZXJBZ2VudDsKKworICAgIGlmIChtX3VzZXJBZ2VudC5p
c0VtcHR5KCkpCisgICAgICAgIG1fdXNlckFnZW50ID0gY29tcG9zZVVzZXJBZ2VudCgpOworICAg
IHJldHVybiBtX3VzZXJBZ2VudDsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2Fs
bFBvbGljeUZ1bmN0aW9uKEZyYW1lUG9saWN5RnVuY3Rpb24gZnVuY3Rpb24sIFBvbGljeUFjdGlv
biBhY3Rpb24pCit7CisgICAgRnJhbWUqIGYgPSBld2tfZnJhbWVfY29yZV9nZXQobV9mcmFtZSk7
CisgICAgQVNTRVJUKGYpOworICAgIChmLT5sb2FkZXIoKS0+cG9saWN5Q2hlY2tlcigpLT4qZnVu
Y3Rpb24pKGFjdGlvbik7Cit9CisKK1dURjo6UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmNyZWF0ZURvY3VtZW50TG9hZGVyKGNvbnN0IFJlc291cmNlUmVx
dWVzdCYgcmVxdWVzdCwgY29uc3QgU3Vic3RpdHV0ZURhdGEmIHN1YnN0aXR1dGVEYXRhKQorewor
ICAgIFJlZlB0cjxEb2N1bWVudExvYWRlcj4gbG9hZGVyID0gRG9jdW1lbnRMb2FkZXI6OmNyZWF0
ZShyZXF1ZXN0LCBzdWJzdGl0dXRlRGF0YSk7CisgICAgaWYgKHN1YnN0aXR1dGVEYXRhLmlzVmFs
aWQoKSkKKyAgICAgICAgbG9hZGVyLT5zZXREZWZlck1haW5SZXNvdXJjZURhdGFMb2FkKGZhbHNl
KTsKKyAgICByZXR1cm4gbG9hZGVyLnJlbGVhc2UoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6ZGlzcGF0Y2hXaWxsU3VibWl0Rm9ybShGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0
aW9uLCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7CisgICAgLy8gRklYTUU6IFRoaXMgaXMgc3Vy
ZWx5IHRvbyBzaW1wbGUKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworICAgIGNhbGxQb2xpY3lGdW5j
dGlvbihmdW5jdGlvbiwgUG9saWN5VXNlKTsKK30KKworCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpjb21taXR0ZWRMb2FkKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIGNvbnN0IGNoYXIqIGRh
dGEsIGludCBsZW5ndGgpCit7CisgICAgaWYgKCFtX3BsdWdpblZpZXcpIHsKKyAgICAgICAgaWYg
KCFtX2ZyYW1lKQorICAgICAgICAgICAgcmV0dXJuOworCisgICAgICAgIEZyYW1lTG9hZGVyKiBm
bCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAgICAgICAgaWYgKG1fZmlyc3REYXRhKSB7Cisg
ICAgICAgICAgICBmbC0+c2V0RW5jb2RpbmcobV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCks
IGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgICAgIH0KKyAg
ICAgICAgZmwtPmFkZERhdGEoZGF0YSwgbGVuZ3RoKTsKKyAgICB9CisKKyAgICAvLyBXZSByZS1j
aGVjayBoZXJlIGFzIHRoZSBwbHVnaW4gY2FuIGhhdmUgYmVlbiBjcmVhdGVkCisgICAgaWYgKG1f
cGx1Z2luVmlldykgeworICAgICAgICBpZiAoIW1faGFzU2VudFJlc3BvbnNlVG9QbHVnaW4pIHsK
KyAgICAgICAgICAgIG1fcGx1Z2luVmlldy0+ZGlkUmVjZWl2ZVJlc3BvbnNlKGxvYWRlci0+cmVz
cG9uc2UoKSk7CisgICAgICAgICAgICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gdHJ1ZTsK
KyAgICAgICAgfQorICAgICAgICBtX3BsdWdpblZpZXctPmRpZFJlY2VpdmVEYXRhKGRhdGEsIGxl
bmd0aCk7CisgICAgfQorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERp
ZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVtb3ZlQmFja0ZvcndhcmRJ
dGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFB1c2hTdGF0ZVdp
dGhpblBhZ2UoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUG9wU3RhdGVXaXRoaW5QYWdlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERp
ZENoYW5nZUJhY2tGb3J3YXJkSW5kZXgoKSBjb25zdAoreworICAgIG5vdEltcGxlbWVudGVkKCk7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQWRkQmFja0Zvcndh
cmRJdGVtKFdlYkNvcmU6Okhpc3RvcnlJdGVtKikgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRl
ZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENsZWFyV2lu
ZG93T2JqZWN0SW5Xb3JsZChET01XcmFwcGVyV29ybGQqKQoreworICAgIG5vdEltcGxlbWVudGVk
KCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZUF1
dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRl
bnRpZmllciwgY29uc3QgQXV0aGVudGljYXRpb25DaGFsbGVuZ2UmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ2Fu
Y2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25n
ICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hX
aWxsU2VuZFJlcXVlc3QoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nLCBSZXNvdXJjZVJl
cXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgp
OworfQorCitib29sIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzaG91bGRVc2VDcmVkZW50aWFsU3Rv
cmFnZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcpCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OmFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmll
ciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmKQoreworICAgIG5vdElt
cGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnBvc3RQcm9ncmVz
c1N0YXJ0ZWROb3RpZmljYXRpb24oKQoreworICAgIGV3a19mcmFtZV9sb2FkX3N0YXJ0ZWQobV9m
cmFtZSk7CisgICAgcG9zdFByb2dyZXNzRXN0aW1hdGVDaGFuZ2VkTm90aWZpY2F0aW9uKCk7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnBvc3RQcm9ncmVzc0VzdGltYXRlQ2hhbmdl
ZE5vdGlmaWNhdGlvbigpCit7CisgICAgZXdrX2ZyYW1lX2xvYWRfcHJvZ3Jlc3NfY2hhbmdlZCht
X2ZyYW1lKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cG9zdFByb2dyZXNzRmlu
aXNoZWROb3RpZmljYXRpb24oKQoreworICAgIGlmIChtX2xvYWRFcnJvci5pc051bGwoKSkKKyAg
ICAgICAgZXdrX2ZyYW1lX2xvYWRfZmluaXNoZWQobV9mcmFtZSwgMCwgMCwgMCwgMCwgMCk7Cisg
ICAgZWxzZSB7CisgICAgICAgIGV3a19mcmFtZV9sb2FkX2ZpbmlzaGVkKG1fZnJhbWUsCisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmRvbWFpbigpLnV0ZjgoKS5k
YXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmVycm9y
Q29kZSgpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvYWRFcnJvci5pc0Nh
bmNlbGxhdGlvbigpLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtX2xvYWRFcnJv
ci5sb2NhbGl6ZWREZXNjcmlwdGlvbigpLnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmZhaWxpbmdVUkwoKS51dGY4KCkuZGF0YSgpKTsK
KyAgICB9Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmZyYW1lTG9hZGVyRGVzdHJv
eWVkKCkKK3sKKyAgICBpZiAobV9mcmFtZSkKKyAgICAgICAgZXdrX2ZyYW1lX2NvcmVfZ29uZSht
X2ZyYW1lKTsKKyAgICBtX2ZyYW1lID0gMDsKKworICAgIGRlbGV0ZSB0aGlzOworfQorCit2b2lk
IEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVSZXNwb25zZShEb2N1bWVu
dExvYWRlciosIHVuc2lnbmVkIGxvbmcsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNl
KQoreworICAgIG1fcmVzcG9uc2UgPSByZXNwb25zZTsKKyAgICBtX2ZpcnN0RGF0YSA9IHRydWU7
Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9y
TUlNRVR5cGUoRnJhbWVQb2xpY3lGdW5jdGlvbiBmdW5jdGlvbiwgY29uc3QgU3RyaW5nJiBNSU1F
VHlwZSwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JikKK3sKKyAgICAvLyB3ZSBuZWVkIHRvIGNhbGwg
ZGlyZWN0bHkgaGVyZSAoY3VycmVudGx5IGNhbGxQb2xpY3lGdW5jdGlvbiBkb2VzIHRoYXQhKQor
ICAgIEFTU0VSVChmdW5jdGlvbik7CisgICAgaWYgKGNhblNob3dNSU1FVHlwZShNSU1FVHlwZSkp
CisgICAgICAgIGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5VXNlKTsKKyAgICBl
bHNlCisgICAgICAgIGNhbGxQb2xpY3lGdW5jdGlvbihmdW5jdGlvbiwgUG9saWN5RG93bmxvYWQp
OworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERlY2lkZVBvbGljeUZv
ck5ld1dpbmRvd0FjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZp
Z2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFBhc3NSZWZQdHI8
Rm9ybVN0YXRlPiwgY29uc3QgU3RyaW5nJikKK3sKKyAgICBBU1NFUlQoZnVuY3Rpb24pOworICAg
IEFTU0VSVChtX2ZyYW1lKTsKKyAgICAvLyBpZiBub3QgYWNjZXB0TmF2aWdhdGlvblJlcXVlc3Qg
LSBsb29rIGF0IFF0IC0+IFBvbGljeUlnbm9yZTsKKyAgICAvLyBGSVhNRTogZG8gcHJvcGVyIGNo
ZWNrIGFuZCBvbmx5IHJlc2V0IGZvcm1zIHdoZW4gb24gUG9saWN5SWdub3JlCisgICAgRnJhbWUq
IGYgPSBld2tfZnJhbWVfY29yZV9nZXQobV9mcmFtZSk7CisgICAgZi0+bG9hZGVyKCktPnJlc2V0
TXVsdGlwbGVGb3JtU3VibWlzc2lvblByb3RlY3Rpb24oKTsKKyAgICBjYWxsUG9saWN5RnVuY3Rp
b24oZnVuY3Rpb24sIFBvbGljeVVzZSk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OmRpc3BhdGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0
aW9uIGZ1bmN0aW9uLCBjb25zdCBOYXZpZ2F0aW9uQWN0aW9uJiBhY3Rpb24sIGNvbnN0IFJlc291
cmNlUmVxdWVzdCYgcmVzb3VyY2VSZXF1ZXN0LCBQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pCit7Cisg
ICAgQVNTRVJUKGZ1bmN0aW9uKTsKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgLy8gaWYgbm90
IGFjY2VwdE5hdmlnYXRpb25SZXF1ZXN0IC0gbG9vayBhdCBRdCAtPiBQb2xpY3lJZ25vcmU7Cisg
ICAgLy8gRklYTUU6IGRvIHByb3BlciBjaGVjayBhbmQgb25seSByZXNldCBmb3JtcyB3aGVuIG9u
IFBvbGljeUlnbm9yZQorICAgIEZyYW1lKiBmID0gZXdrX2ZyYW1lX2NvcmVfZ2V0KG1fZnJhbWUp
OworICAgIGYtPmxvYWRlcigpLT5yZXNldE11bHRpcGxlRm9ybVN1Ym1pc3Npb25Qcm90ZWN0aW9u
KCk7CisgICAgY2FsbFBvbGljeUZ1bmN0aW9uKGZ1bmN0aW9uLCBQb2xpY3lVc2UpOworfQorCitQ
YXNzUmVmUHRyPFdpZGdldD4gRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNyZWF0ZVBsdWdpbihjb25z
dCBJbnRTaXplJiBwbHVnaW5TaXplLCBIVE1MUGx1Z0luRWxlbWVudCogZWxlbWVudCwgY29uc3Qg
S1VSTCYgdXJsLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgVmVjdG9y
PFN0cmluZz4mIHBhcmFtVmFsdWVzLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBlLCBib29sIGxvYWRN
YW51YWxseSkKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgQVNTRVJUKG1fdmlldyk7CisK
KyAgICByZXR1cm4gZXdrX3ZpZXdfcGx1Z2luX2NyZWF0ZShtX3ZpZXcsIG1fZnJhbWUsIHBsdWdp
blNpemUsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZWxlbWVudCwgdXJsLCBw
YXJhbU5hbWVzLCBwYXJhbVZhbHVlcywKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICBtaW1lVHlwZSwgbG9hZE1hbnVhbGx5KTsKK30KKworUGFzc1JlZlB0cjxGcmFtZT4gRnJhbWVM
b2FkZXJDbGllbnRFZmw6OmNyZWF0ZUZyYW1lKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5n
JiBuYW1lLCBIVE1MRnJhbWVPd25lckVsZW1lbnQqIG93bmVyRWxlbWVudCwgY29uc3QgU3RyaW5n
JiByZWZlcnJlciwgYm9vbCBhbGxvd3NTY3JvbGxpbmcsIGludCBtYXJnaW5XaWR0aCwgaW50IG1h
cmdpbkhlaWdodCkKK3sKKyAgICBBU1NFUlQobV9mcmFtZSk7CisgICAgQVNTRVJUKG1fdmlldyk7
CisKKyAgICByZXR1cm4gZXdrX3ZpZXdfZnJhbWVfY3JlYXRlKG1fdmlldywgbV9mcmFtZSwgbmFt
ZSwgb3duZXJFbGVtZW50LCB1cmwsIHJlZmVycmVyKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNs
aWVudEVmbDo6cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpCit7Cisg
ICAgQVNTRVJUKCFtX3BsdWdpblZpZXcpOworICAgIG1fcGx1Z2luVmlldyA9IHN0YXRpY19jYXN0
PFBsdWdpblZpZXcqPihwbHVnaW5XaWRnZXQpOworICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVn
aW4gPSBmYWxzZTsKK30KKworUGFzc1JlZlB0cjxXaWRnZXQ+IEZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpjcmVhdGVKYXZhQXBwbGV0V2lkZ2V0KGNvbnN0IEludFNpemUmLCBIVE1MQXBwbGV0RWxlbWVu
dCosIGNvbnN0IEtVUkwmIGJhc2VVUkwsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXJhbU5hbWVzLCBjb25z
dCBWZWN0b3I8U3RyaW5nPiYgcGFyYW1WYWx1ZXMpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsK
KyAgICByZXR1cm4gMDsKK30KKworT2JqZWN0Q29udGVudFR5cGUgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6Om9iamVjdENvbnRlbnRUeXBlKGNvbnN0IEtVUkwmIHVybCwgY29uc3QgU3RyaW5nJiBtaW1l
VHlwZSkKK3sKKyAgICBpZiAodXJsLmlzRW1wdHkoKSAmJiBtaW1lVHlwZS5pc0VtcHR5KCkpCisg
ICAgICAgIHJldHVybiBPYmplY3RDb250ZW50Tm9uZTsKKworICAgIC8vIFdlIGRvbid0IHVzZSBN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvclBhdGgoKSBiZWNhdXNlIGl0IHJldHVybnMg
ImFwcGxpY2F0aW9uL29jdGV0LXN0cmVhbSIgdXBvbiBmYWlsdXJlCisgICAgU3RyaW5nIHR5cGUg
PSBtaW1lVHlwZTsKKyAgICBpZiAodHlwZS5pc0VtcHR5KCkpCisgICAgICAgIHR5cGUgPSBNSU1F
VHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbih1cmwucGF0aCgpLnN1YnN0cmlu
Zyh1cmwucGF0aCgpLnJldmVyc2VGaW5kKCcuJykgKyAxKSk7CisKKyAgICBpZiAodHlwZS5pc0Vt
cHR5KCkpCisgICAgICAgIHJldHVybiBPYmplY3RDb250ZW50RnJhbWU7CisKKyAgICBpZiAoTUlN
RVR5cGVSZWdpc3RyeTo6aXNTdXBwb3J0ZWRJbWFnZU1JTUVUeXBlKHR5cGUpKQorICAgICAgICBy
ZXR1cm4gT2JqZWN0Q29udGVudEltYWdlOworCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlOjppbnN0
YWxsZWRQbHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKG1pbWVUeXBlKSkKKyAgICAgICAg
cmV0dXJuIE9iamVjdENvbnRlbnROZXRzY2FwZVBsdWdpbjsKKworICAgIGlmIChNSU1FVHlwZVJl
Z2lzdHJ5Ojppc1N1cHBvcnRlZE5vbkltYWdlTUlNRVR5cGUodHlwZSkpCisgICAgICAgIHJldHVy
biBPYmplY3RDb250ZW50RnJhbWU7CisKKyAgICBpZiAodXJsLnByb3RvY29sKCkgPT0gImFib3V0
IikKKyAgICAgICAgcmV0dXJuIE9iamVjdENvbnRlbnRGcmFtZTsKKworICAgIHJldHVybiBPYmpl
Y3RDb250ZW50Tm9uZTsKK30KKworU3RyaW5nIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpvdmVycmlk
ZU1lZGlhVHlwZSgpIGNvbnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4g
U3RyaW5nKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OndpbmRvd09iamVjdENs
ZWFyZWQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRFZmw6OmRvY3VtZW50RWxlbWVudEF2YWlsYWJsZSgpCit7CisgICAgcmV0dXJuOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaWRQZXJmb3JtRmlyc3ROYXZpZ2F0aW9uKCkg
Y29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xp
ZW50RWZsOjpyZWdpc3RlckZvckljb25Ob3RpZmljYXRpb24oYm9vbCkKK3sKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzZXRNYWluRnJhbWVE
b2N1bWVudFJlYWR5KGJvb2wpCit7CisgICAgLy8gdGhpcyBpcyBvbmx5IGludGVyZXN0aW5nIG9u
Y2Ugd2UgcHJvdmlkZSBhbiBleHRlcm5hbCBBUEkgZm9yIHRoZSBET00KK30KKworYm9vbCBGcmFt
ZUxvYWRlckNsaWVudEVmbDo6aGFzV2ViVmlldygpIGNvbnN0Cit7CisgICAgLy8gbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6aGFzRnJhbWVWaWV3KCkgY29uc3QKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB0cnVlOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZEZp
bmlzaExvYWQoKQoreworICAgIG1fbG9hZEVycm9yID0gUmVzb3VyY2VFcnJvcigpOyAvKiBjbGVh
cnMgcHJldmlvdXMgZXJyb3IgKi8KK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZnJh
bWVMb2FkQ29tcGxldGVkKCkKK3sKKyAgICAvLyBOb3RlOiBDYW4gYmUgY2FsbGVkIG11bHRpcGxl
IHRpbWVzLgorfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzYXZlVmlld1N0YXRlVG9J
dGVtKEhpc3RvcnlJdGVtKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpyZXN0b3JlVmlld1N0YXRlKCkKK3sKKyAgICBub3RJbXBsZW1l
bnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp1cGRhdGVHbG9iYWxIaXN0
b3J5UmVkaXJlY3RMaW5rcygpCit7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnNo
b3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSogaXRlbSkgY29uc3QKK3sKKyAgICAvLyBG
SVhNRTogVGhpcyBpcyBhIHZlcnkgc2ltcGxlIGltcGxlbWVudGF0aW9uLiBNb3JlIHNvcGhpc3Rp
Y2F0ZWQKKyAgICAvLyBpbXBsZW1lbnRhdGlvbiB3b3VsZCBkZWxlZ2F0ZSB0aGUgZGVjaXNpb24g
dG8gYSBQb2xpY3lEZWxlZ2F0ZS4KKyAgICAvLyBTZWUgbWFjIGltcGxlbWVudGF0aW9uIGZvciBl
eGFtcGxlLgorICAgIHJldHVybiBpdGVtOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZs
OjpkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaWRSdW5JbnNlY3VyZUNvbnRlbnQoU2Vj
dXJpdHlPcmlnaW4qKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRFZmw6Om1ha2VSZXByZXNlbnRhdGlvbihEb2N1bWVudExvYWRlciopCit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Zm9y
Y2VMYXlvdXQoKQoreworICAgIGV3a19mcmFtZV9mb3JjZV9sYXlvdXQobV9mcmFtZSk7Cit9CisK
K3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmZvcmNlTGF5b3V0Rm9yTm9uSFRNTCgpCit7Cit9
CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnNldENvcGllc09uU2Nyb2xsKCkKK3sKKyAg
ICAvLyBhcHBhcmVudGx5IG1hYyBzcGVjaWZpYyAoUXQgY29tbWVudCkKK30KKwordm9pZCBGcmFt
ZUxvYWRlckNsaWVudEVmbDo6ZGV0YWNoZWRGcm9tUGFyZW50MigpCit7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmRldGFjaGVkRnJvbVBhcmVudDMoKQoreworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpsb2FkZWRGcm9tQ2FjaGVkUGFnZSgpCit7CisgICAgbm90SW1w
bGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRI
YW5kbGVPbmxvYWRFdmVudHMoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQg
RnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkUmVjZWl2ZVNlcnZlclJlZGlyZWN0Rm9y
UHJvdmlzaW9uYWxMb2FkKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZENhbmNlbENsaWVudFJlZGlyZWN0KCkKK3sK
KyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpk
aXNwYXRjaFdpbGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgS1VSTCYsIGRvdWJsZSwgZG91
YmxlKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OmRpc3BhdGNoRGlkQ2hhbmdlTG9jYXRpb25XaXRoaW5QYWdlKCkKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaFdp
bGxDbG9zZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRl
ckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRSZWNlaXZlSWNvbigpCit7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkU3RhcnRQcm92aXNpb25hbExvYWQoKQoreworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZFJlY2VpdmVUaXRsZShjb25z
dCBTdHJpbmcmIHRpdGxlKQoreworICAgIENTdHJpbmcgY3MgPSB0aXRsZS51dGY4KCk7CisgICAg
ZXdrX2ZyYW1lX3RpdGxlX3NldChtX2ZyYW1lLCBjcy5kYXRhKCkpOworCisgICAgaWYgKGV3a192
aWV3X2ZyYW1lX21haW5fZ2V0KG1fdmlldykgIT0gbV9mcmFtZSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGV3a192aWV3X3RpdGxlX3NldChtX3ZpZXcsIGNzLmRhdGEoKSk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkQ29tbWl0TG9hZCgpCit7CisgICAgZXdrX2Zy
YW1lX3VyaV9jaGFuZ2VkKG1fZnJhbWUpOworICAgIGlmIChld2tfdmlld19mcmFtZV9tYWluX2dl
dChtX3ZpZXcpICE9IG1fZnJhbWUpCisgICAgICAgIHJldHVybjsKKyAgICBld2tfdmlld190aXRs
ZV9zZXQobV92aWV3LCAwKTsKKyAgICBld2tfdmlld191cmlfY2hhbmdlZChtX3ZpZXcpOworfQor
Cit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZEZpbmlzaERvY3VtZW50TG9h
ZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6ZGlzcGF0Y2hEaWRGaXJzdExheW91dCgpCit7CisgICAgLy8gZW1pdCBtX2ZyYW1lLT5p
bml0aWFsTGF5b3V0Q29tcGxldGVkKCk7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0Y2hEaWRGaXJzdFZpc3VhbGx5Tm9uRW1wdHlM
YXlvdXQoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJD
bGllbnRFZmw6OmRpc3BhdGNoU2hvdygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuY2VsUG9saWN5Q2hlY2soKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNo
RGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExvYWRlciopCit7CisgICAgbm90SW1wbGVtZW50
ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cmV2ZXJ0VG9Qcm92aXNpb25h
bFN0YXRlKERvY3VtZW50TG9hZGVyKikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2
b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjp3aWxsQ2hhbmdlVGl0bGUoRG9jdW1lbnRMb2FkZXIq
KQoreworICAgIC8vIG5vIG5lZWQgZm9yLCBkaXNwYXRjaERpZFJlY2VpdmVUaXRsZSBpcyB0aGUg
cmlnaHQgY2FsbGJhY2sKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlkQ2hhbmdl
VGl0bGUoRG9jdW1lbnRMb2FkZXIgKmwpCit7CisgICAgLy8gbm8gbmVlZCBmb3IsIGRpc3BhdGNo
RGlkUmVjZWl2ZVRpdGxlIGlzIHRoZSByaWdodCBjYWxsYmFjaworfQorCitib29sIEZyYW1lTG9h
ZGVyQ2xpZW50RWZsOjpjYW5IYW5kbGVSZXF1ZXN0KGNvbnN0IFJlc291cmNlUmVxdWVzdCYpIGNv
bnN0Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gdHJ1ZTsKK30KKworYm9v
bCBGcmFtZUxvYWRlckNsaWVudEVmbDo6Y2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYgTUlN
RVR5cGUpIGNvbnN0Cit7CisgICAgaWYgKE1JTUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkSW1h
Z2VNSU1FVHlwZShNSU1FVHlwZSkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKE1J
TUVUeXBlUmVnaXN0cnk6OmlzU3VwcG9ydGVkTm9uSW1hZ2VNSU1FVHlwZShNSU1FVHlwZSkpCisg
ICAgICAgIHJldHVybiB0cnVlOworCisgICAgaWYgKFBsdWdpbkRhdGFiYXNlOjppbnN0YWxsZWRQ
bHVnaW5zKCktPmlzTUlNRVR5cGVSZWdpc3RlcmVkKE1JTUVUeXBlKSkKKyAgICAgICAgcmV0dXJu
IHRydWU7CisKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRF
Zmw6OnJlcHJlc2VudGF0aW9uRXhpc3RzRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0
Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitTdHJpbmcgRnJhbWVMb2FkZXJDbGllbnRFZmw6
OmdlbmVyYXRlZE1JTUVUeXBlRm9yVVJMU2NoZW1lKGNvbnN0IFN0cmluZyYpIGNvbnN0Cit7Cisg
ICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4gU3RyaW5nKCk7Cit9CisKK3ZvaWQgRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmZpbmlzaGVkTG9hZGluZyhEb2N1bWVudExvYWRlciogbG9hZGVy
KQoreworICAgIGlmICghbV9wbHVnaW5WaWV3KSB7CisgICAgICAgIGlmIChtX2ZpcnN0RGF0YSkg
eworICAgICAgICAgICAgRnJhbWVMb2FkZXIqIGZsID0gbG9hZGVyLT5mcmFtZUxvYWRlcigpOwor
ICAgICAgICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgp
LCBmYWxzZSk7CisgICAgICAgICAgICBtX2ZpcnN0RGF0YSA9IGZhbHNlOworICAgICAgICB9Cisg
ICAgfSBlbHNlIHsKKyAgICAgICAgbV9wbHVnaW5WaWV3LT5kaWRGaW5pc2hMb2FkaW5nKCk7Cisg
ICAgICAgIG1fcGx1Z2luVmlldyA9IDA7CisgICAgICAgIG1faGFzU2VudFJlc3BvbnNlVG9QbHVn
aW4gPSBmYWxzZTsKKyAgICB9Cit9CisKKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cHJv
dmlzaW9uYWxMb2FkU3RhcnRlZCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9p
ZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlkRmluaXNoTG9hZCgpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6cHJlcGFyZUZvckRhdGFT
b3VyY2VSZXBsYWNlbWVudCgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBG
cmFtZUxvYWRlckNsaWVudEVmbDo6c2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwgY29uc3Qg
S1VSTCYgdXJsKQoreworICAgIC8vIG5vIG5lZWQgZm9yLCBkaXNwYXRjaERpZFJlY2VpdmVUaXRs
ZSBpcyB0aGUgcmlnaHQgY2FsbGJhY2sKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6
ZGlzcGF0Y2hEaWRSZWNlaXZlQ29udGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVk
IGxvbmcgaWRlbnRpZmllciwgaW50IGxlbmd0aFJlY2VpdmVkKQoreworICAgIG5vdEltcGxlbWVu
dGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkRmluaXNo
TG9hZGluZyhEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllcikKK3sKKyAg
ICBub3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpkaXNw
YXRjaERpZEZhaWxMb2FkaW5nKERvY3VtZW50TG9hZGVyKiBsb2FkZXIsIHVuc2lnbmVkIGxvbmcg
aWRlbnRpZmllciwgY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgaWYgKG1fZmlyc3REYXRh
KSB7CisgICAgICAgIEZyYW1lTG9hZGVyKiBmbCA9IGxvYWRlci0+ZnJhbWVMb2FkZXIoKTsKKyAg
ICAgICAgZmwtPnNldEVuY29kaW5nKG1fcmVzcG9uc2UudGV4dEVuY29kaW5nTmFtZSgpLCBmYWxz
ZSk7CisgICAgICAgIG1fZmlyc3REYXRhID0gZmFsc2U7CisgICAgfQorCit9CisKK2Jvb2wgRnJh
bWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hl
KERvY3VtZW50TG9hZGVyKiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VS
ZXNwb25zZSYsIGludCBsZW5ndGgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1
cm4gZmFsc2U7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmRpc3BhdGNoRGlkTG9h
ZFJlc291cmNlQnlYTUxIdHRwUmVxdWVzdCh1bnNpZ25lZCBsb25nLCBjb25zdCBTY3JpcHRTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGll
bnRFZmw6OmRpc3BhdGNoRGlkRmFpbFByb3Zpc2lvbmFsTG9hZChjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnIpCit7CisgICAgZGlzcGF0Y2hEaWRGYWlsTG9hZChlcnIpOworfQorCit2b2lkIEZyYW1l
TG9hZGVyQ2xpZW50RWZsOjpkaXNwYXRjaERpZEZhaWxMb2FkKGNvbnN0IFJlc291cmNlRXJyb3Im
IGVycikKK3sKKyAgICBtX2xvYWRFcnJvciA9IGVycjsKKyAgICBld2tfZnJhbWVfbG9hZF9lcnJv
cihtX2ZyYW1lLAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmRvbWFpbigp
LnV0ZjgoKS5kYXRhKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgbV9sb2FkRXJyb3IuZXJy
b3JDb2RlKCksIG1fbG9hZEVycm9yLmlzQ2FuY2VsbGF0aW9uKCksCisgICAgICAgICAgICAgICAg
ICAgICAgICAgbV9sb2FkRXJyb3IubG9jYWxpemVkRGVzY3JpcHRpb24oKS51dGY4KCkuZGF0YSgp
LAorICAgICAgICAgICAgICAgICAgICAgICAgIG1fbG9hZEVycm9yLmZhaWxpbmdVUkwoKS51dGY4
KCkuZGF0YSgpKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZG93bmxvYWQoUmVz
b3VyY2VIYW5kbGUqLCBjb25zdCBSZXNvdXJjZVJlcXVlc3QmLCBjb25zdCBSZXNvdXJjZVJlcXVl
c3QmLCBjb25zdCBSZXNvdXJjZVJlc3BvbnNlJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOwor
fQorCisvLyBjb3BpZWQgZnJvbSBXZWJLaXQvTWlzYy9XZWJLaXRFcnJvcnNbUHJpdmF0ZV0uaAor
ZW51bSB7CisgICAgV2ViS2l0RXJyb3JDYW5ub3RTaG93TUlNRVR5cGUgPSAxMDAsCisgICAgV2Vi
S2l0RXJyb3JDYW5ub3RTaG93VVJMID0gMTAxLAorICAgIFdlYktpdEVycm9yRnJhbWVMb2FkSW50
ZXJydXB0ZWRCeVBvbGljeUNoYW5nZSA9IDEwMiwKKyAgICBXZWJLaXRFcnJvckNhbm5vdFVzZVJl
c3RyaWN0ZWRQb3J0ID0gMTAzLAorICAgIFdlYktpdEVycm9yQ2Fubm90RmluZFBsdWdJbiA9IDIw
MCwKKyAgICBXZWJLaXRFcnJvckNhbm5vdExvYWRQbHVnSW4gPSAyMDEsCisgICAgV2ViS2l0RXJy
b3JKYXZhVW5hdmFpbGFibGUgPSAyMDIsCit9OworCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVy
Q2xpZW50RWZsOjpjYW5jZWxsZWRFcnJvcihjb25zdCBSZXNvdXJjZVJlcXVlc3QmIHJlcXVlc3Qp
Cit7CisgICAgUmVzb3VyY2VFcnJvciBlcnJvcigiRXJyb3IiLCAtOTk5LCByZXF1ZXN0LnVybCgp
LnByZXR0eVVSTCgpLAorICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgY2FuY2VsbGVk
Iik7CisgICAgZXJyb3Iuc2V0SXNDYW5jZWxsYXRpb24odHJ1ZSk7CisgICAgcmV0dXJuIGVycm9y
OworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpibG9ja2VkRXJyb3Io
Y29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVybiBSZXNvdXJjZUVy
cm9yKCJFcnJvciIsIFdlYktpdEVycm9yQ2Fubm90VXNlUmVzdHJpY3RlZFBvcnQsIHJlcXVlc3Qu
dXJsKCkucHJldHR5VVJMKCksCisgICAgICAgICAgICAgICAgICAgICAgICAgIlJlcXVlc3QgYmxv
Y2tlZCIpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpjYW5ub3RT
aG93VVJMRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiByZXF1ZXN0KQoreworICAgIHJldHVy
biBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdlYktpdEVycm9yQ2Fubm90U2hvd1VSTCwgcmVxdWVz
dC51cmwoKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fubm90IHNob3cg
VVJMIik7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmludGVycnVw
dEZvclBvbGljeUNoYW5nZUVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYgcmVxdWVzdCkKK3sK
KyAgICByZXR1cm4gUmVzb3VyY2VFcnJvcigiRXJyb3IiLCBXZWJLaXRFcnJvckZyYW1lTG9hZElu
dGVycnVwdGVkQnlQb2xpY3lDaGFuZ2UsCisgICAgICAgICAgICAgICAgICAgICAgICAgcmVxdWVz
dC51cmwoKS5zdHJpbmcoKSwgIkZyYW1lIGxvYWQgaW50ZXJydXBlZCBieSBwb2xpY3kgY2hhbmdl
Iik7Cit9CisKK1Jlc291cmNlRXJyb3IgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbm5vdFNob3dN
SU1FVHlwZUVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3BvbnNlKQoreworICAgIHJl
dHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIFdlYktpdEVycm9yQ2Fubm90U2hvd01JTUVUeXBl
LCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiQ2Fu
bm90IHNob3cgbWltZXR5cGUiKTsKK30KKworUmVzb3VyY2VFcnJvciBGcmFtZUxvYWRlckNsaWVu
dEVmbDo6ZmlsZURvZXNOb3RFeGlzdEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlc3Bv
bnNlKQoreworICAgIHJldHVybiBSZXNvdXJjZUVycm9yKCJFcnJvciIsIC05OTggLyogIyMjICov
LCByZXNwb25zZS51cmwoKS5zdHJpbmcoKSwKKyAgICAgICAgICAgICAgICAgICAgICAgICAiRmls
ZSBkb2VzIG5vdCBleGlzdCIpOworfQorCitSZXNvdXJjZUVycm9yIEZyYW1lTG9hZGVyQ2xpZW50
RWZsOjpwbHVnaW5XaWxsSGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIFJlc291cmNlRXJyb3IoIkVycm9y
IiwgMCwgIiIsICIiKTsKK30KKworYm9vbCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2hvdWxkRmFs
bEJhY2soY29uc3QgUmVzb3VyY2VFcnJvciYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK2Jvb2wgRnJhbWVMb2FkZXJDbGllbnRFZmw6OmNhbkNhY2hl
UGFnZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIGZhbHNlOworfQorCitGcmFtZSogRnJhbWVMb2Fk
ZXJDbGllbnRFZmw6OmRpc3BhdGNoQ3JlYXRlUGFnZSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQo
KTsKKyAgICByZXR1cm4gMDsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6ZGlzcGF0
Y2hVbmFibGVUb0ltcGxlbWVudFBvbGljeShjb25zdCBSZXNvdXJjZUVycm9yJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworfQorCit2b2lkIEZyYW1lTG9hZGVyQ2xpZW50RWZsOjpzZXRNYWlu
RG9jdW1lbnRFcnJvcihEb2N1bWVudExvYWRlciogbG9hZGVyLCBjb25zdCBSZXNvdXJjZUVycm9y
JiBlcnJvcikKK3sKKyAgICBpZiAoIW1fcGx1Z2luVmlldykgeworICAgICAgICBpZiAobV9maXJz
dERhdGEpIHsKKyAgICAgICAgICAgIGxvYWRlci0+ZnJhbWVMb2FkZXIoKS0+c2V0RW5jb2Rpbmco
bV9yZXNwb25zZS50ZXh0RW5jb2RpbmdOYW1lKCksIGZhbHNlKTsKKyAgICAgICAgICAgIG1fZmly
c3REYXRhID0gZmFsc2U7CisgICAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgICBtX3BsdWdp
blZpZXctPmRpZEZhaWwoZXJyb3IpOworICAgICAgICBtX3BsdWdpblZpZXcgPSAwOworICAgICAg
ICBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luID0gZmFsc2U7CisgICAgfQorfQorCit2b2lkIEZy
YW1lTG9hZGVyQ2xpZW50RWZsOjpzdGFydERvd25sb2FkKGNvbnN0IFJlc291cmNlUmVxdWVzdCYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwordm9pZCBGcmFtZUxvYWRlckNsaWVudEVm
bDo6dXBkYXRlR2xvYmFsSGlzdG9yeSgpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKK30KKwor
dm9pZCBGcmFtZUxvYWRlckNsaWVudEVmbDo6c2F2ZVBsYXRmb3JtRGF0YVRvQ2FjaGVkRnJhbWUo
Q2FjaGVkRnJhbWUqKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7Cit9CisKK3ZvaWQgRnJhbWVM
b2FkZXJDbGllbnRFZmw6OnRyYW5zaXRpb25Ub0NvbW1pdHRlZEZyb21DYWNoZWRGcmFtZShDYWNo
ZWRGcmFtZSopCit7Cit9CisKK3ZvaWQgRnJhbWVMb2FkZXJDbGllbnRFZmw6OnRyYW5zaXRpb25U
b0NvbW1pdHRlZEZvck5ld1BhZ2UoKQoreworICAgIEFTU0VSVChtX2ZyYW1lKTsKKyAgICBBU1NF
UlQobV92aWV3KTsKKyAgICBld2tfZnJhbWVfdmlld19jcmVhdGVfZm9yX3ZpZXcobV9mcmFtZSwg
bV92aWV3KTsKK30KKworfQpJbmRleDogV2ViS2l0L2VmbC9XZWJDb3JlU3VwcG9ydC9GcmFtZUxv
YWRlckNsaWVudEVmbC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIC9kZXYvbnVsbAorKysgV2ViS2l0L2VmbC9X
ZWJDb3JlU3VwcG9ydC9GcmFtZUxvYWRlckNsaWVudEVmbC5oCkBAIC0wLDAgKzEsMjE2IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA2IFphY2sgUnVzaW4gPHphY2tAa2RlLm9yZz4KKyAqIENv
cHlyaWdodCAoQykgMjAwNiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZl
ZC4KKyAqIENvcHlyaWdodCAoQykgMjAwOCBDb2xsYWJvcmEgTHRkLiBBbGwgcmlnaHRzIHJlc2Vy
dmVkLgorICogQ29weXJpZ2h0IChDKSAyMDA4IElOZFQgLSBJbnN0aXR1dG8gTm9raWEgZGUgVGVj
bm9sb2dpYQorICogQ29weXJpZ2h0IChDKSAyMDA5LTIwMTAgUHJvRlVTSU9OIGVtYmVkZGVkIHN5
c3RlbXMKKyAqIENvcHlyaWdodCAoQykgMjAwOS0yMDEwIFNhbXN1bmcgRWxlY3Ryb25pY3MKKyAq
CisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQ09NUFVURVIsIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAq
IEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRF
RCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBG
SVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBO
TyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgRnJhbWVMb2FkZXJDbGll
bnRFZmxfaAorI2RlZmluZSBGcmFtZUxvYWRlckNsaWVudEVmbF9oCisKKyNpbmNsdWRlICJFV2Vi
S2l0LmgiCisjaW5jbHVkZSAiRnJhbWVMb2FkZXJDbGllbnQuaCIKKyNpbmNsdWRlICJQbHVnaW5W
aWV3LmgiCisjaW5jbHVkZSAiUmVzb3VyY2VSZXNwb25zZS5oIgorCituYW1lc3BhY2UgV2ViQ29y
ZSB7CisKK2NsYXNzIEZvcm1TdGF0ZTsKKworY2xhc3MgRnJhbWVMb2FkZXJDbGllbnRFZmwgOiBw
dWJsaWMgRnJhbWVMb2FkZXJDbGllbnQgeworIHB1YmxpYzoKKyAgICBleHBsaWNpdCBGcmFtZUxv
YWRlckNsaWVudEVmbChFdmFzX09iamVjdCAqdmlldyk7CisgICAgdmlydHVhbCB+RnJhbWVMb2Fk
ZXJDbGllbnRFZmwoKSB7IH0KKyAgICB2aXJ0dWFsIHZvaWQgZnJhbWVMb2FkZXJEZXN0cm95ZWQo
KTsKKworICAgIHZvaWQgICAgICAgICBzZXRXZWJGcmFtZShFdmFzX09iamVjdCAqZnJhbWUpIHsg
bV9mcmFtZSA9IGZyYW1lOyB9CisgICAgRXZhc19PYmplY3QqIHdlYkZyYW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9mcmFtZTsgfQorICAgIEV2YXNfT2JqZWN0KiB3ZWJWaWV3KCkgY29uc3QgeyByZXR1
cm4gbV92aWV3OyB9CisKKyAgICB2b2lkIHNldEN1c3RvbVVzZXJBZ2VudChjb25zdCBTdHJpbmcg
JmFnZW50KTsKKyAgICBjb25zdCBTdHJpbmcmIGN1c3RvbVVzZXJBZ2VudCgpIGNvbnN0OworCisg
ICAgdmlydHVhbCBib29sIGhhc1dlYlZpZXcoKSBjb25zdDsKKyAgICB2aXJ0dWFsIGJvb2wgaGFz
RnJhbWVWaWV3KCkgY29uc3Q7CisKKyAgICB2b2lkIGNhbGxQb2xpY3lGdW5jdGlvbihGcmFtZVBv
bGljeUZ1bmN0aW9uIGZ1bmN0aW9uLCBQb2xpY3lBY3Rpb24gYWN0aW9uKTsKKworICAgIHZpcnR1
YWwgdm9pZCBtYWtlUmVwcmVzZW50YXRpb24oRG9jdW1lbnRMb2FkZXIqKTsKKyAgICB2aXJ0dWFs
IHZvaWQgZm9yY2VMYXlvdXQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZm9yY2VMYXlvdXRGb3JOb25I
VE1MKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgc2V0Q29waWVzT25TY3JvbGwoKTsKKworICAgIHZp
cnR1YWwgdm9pZCBkZXRhY2hlZEZyb21QYXJlbnQyKCk7CisgICAgdmlydHVhbCB2b2lkIGRldGFj
aGVkRnJvbVBhcmVudDMoKTsKKworICAgIHZpcnR1YWwgdm9pZCBsb2FkZWRGcm9tQ2FjaGVkUGFn
ZSgpOworCisgICAgdmlydHVhbCB2b2lkIGFzc2lnbklkZW50aWZpZXJUb0luaXRpYWxSZXF1ZXN0
KHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgRG9jdW1lbnRMb2FkZXIqLCBjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKKworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdpbGxTZW5kUmVxdWVzdChE
b2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIFJlc291cmNlUmVxdWVz
dCYsIGNvbnN0IFJlc291cmNlUmVzcG9uc2UmIHJlZGlyZWN0UmVzcG9uc2UpOworICAgIHZpcnR1
YWwgYm9vbCBzaG91bGRVc2VDcmVkZW50aWFsU3RvcmFnZShEb2N1bWVudExvYWRlciosIHVuc2ln
bmVkIGxvbmcgaWRlbnRpZmllcik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2
ZUF1dGhlbnRpY2F0aW9uQ2hhbGxlbmdlKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyBp
ZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNhdGlvbkNoYWxsZW5nZSYpOworCisgICAgdmlydHVh
bCB2b2lkIGRpc3BhdGNoRGlkUHVzaFN0YXRlV2l0aGluUGFnZSgpOworICAgIHZpcnR1YWwgdm9p
ZCBkaXNwYXRjaERpZFBvcFN0YXRlV2l0aGluUGFnZSgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNw
YXRjaERpZFJlcGxhY2VTdGF0ZVdpdGhpblBhZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRBZGRCYWNrRm9yd2FyZEl0ZW0oV2ViQ29yZTo6SGlzdG9yeUl0ZW0qKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZW1vdmVCYWNrRm9yd2FyZEl0ZW0oV2ViQ29yZTo6
SGlzdG9yeUl0ZW0qKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VC
YWNrRm9yd2FyZEluZGV4KCkgY29uc3Q7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2xl
YXJXaW5kb3dPYmplY3RJbldvcmxkKFdlYkNvcmU6OkRPTVdyYXBwZXJXb3JsZCopOworCisgICAg
dmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkQ2FuY2VsQXV0aGVudGljYXRpb25DaGFsbGVuZ2UoRG9j
dW1lbnRMb2FkZXIqLCB1bnNpZ25lZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBBdXRoZW50aWNh
dGlvbkNoYWxsZW5nZSYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFJlY2VpdmVSZXNw
b25zZShEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgIGlkZW50aWZpZXIsIGNvbnN0IFJl
c291cmNlUmVzcG9uc2UmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlQ29u
dGVudExlbmd0aChEb2N1bWVudExvYWRlciosIHVuc2lnbmVkIGxvbmcgaWRlbnRpZmllciwgaW50
IGxlbmd0aFJlY2VpdmVkKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGaW5pc2hMb2Fk
aW5nKERvY3VtZW50TG9hZGVyKiwgdW5zaWduZWQgbG9uZyAgaWRlbnRpZmllcik7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkRmFpbExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqLCB1bnNpZ25l
ZCBsb25nICBpZGVudGlmaWVyLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgdmlydHVhbCBi
b29sIGRpc3BhdGNoRGlkTG9hZFJlc291cmNlRnJvbU1lbW9yeUNhY2hlKERvY3VtZW50TG9hZGVy
KiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgUmVzb3VyY2VSZXNwb25zZSYsIGludCBs
ZW5ndGgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZExvYWRSZXNvdXJjZUJ5WE1MSHR0
cFJlcXVlc3QodW5zaWduZWQgbG9uZyBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpTY3JpcHRT
dHJpbmcmIHNvdXJjZVN0cmluZyk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRIYW5k
bGVPbmxvYWRFdmVudHMoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRSZWNlaXZlU2Vy
dmVyUmVkaXJlY3RGb3JQcm92aXNpb25hbExvYWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0
Y2hEaWRDYW5jZWxDbGllbnRSZWRpcmVjdCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaFdp
bGxQZXJmb3JtQ2xpZW50UmVkaXJlY3QoY29uc3QgS1VSTCYsIGRvdWJsZSwgZG91YmxlKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRDaGFuZ2VMb2NhdGlvbldpdGhpblBhZ2UoKTsKKyAg
ICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hXaWxsQ2xvc2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlz
cGF0Y2hEaWRSZWNlaXZlSWNvbigpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZFN0YXJ0
UHJvdmlzaW9uYWxMb2FkKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkUmVjZWl2ZVRp
dGxlKGNvbnN0IFN0cmluZyYpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZENvbW1pdExv
YWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsUHJvdmlzaW9uYWxMb2FkKGNv
bnN0IFJlc291cmNlRXJyb3ImKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEaWRGYWlsTG9h
ZChjb25zdCBSZXNvdXJjZUVycm9yJik7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlu
aXNoRG9jdW1lbnRMb2FkKCk7CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkRmluaXNoTG9h
ZCgpOworICAgIHZpcnR1YWwgdm9pZCBkaXNwYXRjaERpZEZpcnN0TGF5b3V0KCk7CisgICAgdmly
dHVhbCB2b2lkIGRpc3BhdGNoRGlkRmlyc3RWaXN1YWxseU5vbkVtcHR5TGF5b3V0KCk7CisKKyAg
ICB2aXJ0dWFsIEZyYW1lKiBkaXNwYXRjaENyZWF0ZVBhZ2UoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZGlzcGF0Y2hTaG93KCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQb2xpY3lG
b3JNSU1FVHlwZShGcmFtZVBvbGljeUZ1bmN0aW9uLCBjb25zdCBTdHJpbmcmIE1JTUVUeXBlLCBj
b25zdCBSZXNvdXJjZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlzcGF0Y2hEZWNpZGVQ
b2xpY3lGb3JOZXdXaW5kb3dBY3Rpb24oRnJhbWVQb2xpY3lGdW5jdGlvbiwgY29uc3QgTmF2aWdh
dGlvbkFjdGlvbiYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIFdURjo6UGFzc1JlZlB0cjxGb3Jt
U3RhdGU+LCBjb25zdCBTdHJpbmcmIGZyYW1lTmFtZSk7CisgICAgdmlydHVhbCB2b2lkIGRpc3Bh
dGNoRGVjaWRlUG9saWN5Rm9yTmF2aWdhdGlvbkFjdGlvbihGcmFtZVBvbGljeUZ1bmN0aW9uLCBj
b25zdCBOYXZpZ2F0aW9uQWN0aW9uJiwgY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgV1RGOjpQYXNz
UmVmUHRyPEZvcm1TdGF0ZT4pOworICAgIHZpcnR1YWwgdm9pZCBjYW5jZWxQb2xpY3lDaGVjaygp
OworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoVW5hYmxlVG9JbXBsZW1lbnRQb2xpY3koY29u
c3QgUmVzb3VyY2VFcnJvciYpOworCisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoV2lsbFN1Ym1p
dEZvcm0oRnJhbWVQb2xpY3lGdW5jdGlvbiwgV1RGOjpQYXNzUmVmUHRyPEZvcm1TdGF0ZT4pOwor
CisgICAgdmlydHVhbCB2b2lkIGRpc3BhdGNoRGlkTG9hZE1haW5SZXNvdXJjZShEb2N1bWVudExv
YWRlciopOworICAgIHZpcnR1YWwgdm9pZCByZXZlcnRUb1Byb3Zpc2lvbmFsU3RhdGUoRG9jdW1l
bnRMb2FkZXIqKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0TWFpbkRvY3VtZW50RXJyb3IoRG9jdW1l
bnRMb2FkZXIqLCBjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dFByb2dyZXNzU3RhcnRlZE5vdGlmaWNhdGlvbigpOworICAgIHZpcnR1YWwgdm9pZCBwb3N0UHJv
Z3Jlc3NFc3RpbWF0ZUNoYW5nZWROb3RpZmljYXRpb24oKTsKKyAgICB2aXJ0dWFsIHZvaWQgcG9z
dFByb2dyZXNzRmluaXNoZWROb3RpZmljYXRpb24oKTsKKworICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxGcmFtZT4gY3JlYXRlRnJhbWUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG5hbWUs
IEhUTUxGcmFtZU93bmVyRWxlbWVudCogb3duZXJFbGVtZW50LAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnN0IFN0cmluZyYgcmVmZXJyZXIsIGJvb2wgYWxsb3dzU2Nyb2xsaW5n
LCBpbnQgbWFyZ2luV2lkdGgsIGludCBtYXJnaW5IZWlnaHQpOworICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxXaWRnZXQ+IGNyZWF0ZVBsdWdpbihjb25zdCBJbnRTaXplJiwgSFRNTFBsdWdJbkVsZW1l
bnQqLCBjb25zdCBLVVJMJiwgY29uc3QgV1RGOjpWZWN0b3I8U3RyaW5nPiYsIGNvbnN0IFdURjo6
VmVjdG9yPFN0cmluZz4mLCBjb25zdCBTdHJpbmcmLCBib29sKTsKKyAgICB2aXJ0dWFsIHZvaWQg
cmVkaXJlY3REYXRhVG9QbHVnaW4oV2lkZ2V0KiBwbHVnaW5XaWRnZXQpOworICAgIHZpcnR1YWwg
UGFzc1JlZlB0cjxXaWRnZXQ+IGNyZWF0ZUphdmFBcHBsZXRXaWRnZXQoY29uc3QgSW50U2l6ZSYs
IEhUTUxBcHBsZXRFbGVtZW50KiwgY29uc3QgS1VSTCYgYmFzZVVSTCwgY29uc3QgV1RGOjpWZWN0
b3I8U3RyaW5nPiYgcGFyYW1OYW1lcywgY29uc3QgV1RGOjpWZWN0b3I8U3RyaW5nPiYgcGFyYW1W
YWx1ZXMpOworICAgIHZpcnR1YWwgU3RyaW5nIG92ZXJyaWRlTWVkaWFUeXBlKCkgY29uc3Q7Cisg
ICAgdmlydHVhbCB2b2lkIHdpbmRvd09iamVjdENsZWFyZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQg
ZG9jdW1lbnRFbGVtZW50QXZhaWxhYmxlKCk7CisKKyAgICB2aXJ0dWFsIHZvaWQgZGlkUGVyZm9y
bUZpcnN0TmF2aWdhdGlvbigpIGNvbnN0OworCisgICAgdmlydHVhbCB2b2lkIHJlZ2lzdGVyRm9y
SWNvbk5vdGlmaWNhdGlvbihib29sKTsKKworICAgIHZpcnR1YWwgT2JqZWN0Q29udGVudFR5cGUg
b2JqZWN0Q29udGVudFR5cGUoY29uc3QgS1VSTCYgdXJsLCBjb25zdCBTdHJpbmcmIG1pbWVUeXBl
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzZXRNYWluRnJhbWVEb2N1bWVudFJlYWR5KGJvb2wpOwor
CisgICAgdmlydHVhbCB2b2lkIHN0YXJ0RG93bmxvYWQoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7
CisKKyAgICB2aXJ0dWFsIHZvaWQgd2lsbENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7Cisg
ICAgdmlydHVhbCB2b2lkIGRpZENoYW5nZVRpdGxlKERvY3VtZW50TG9hZGVyKik7CisKKyAgICB2
aXJ0dWFsIHZvaWQgY29tbWl0dGVkTG9hZChEb2N1bWVudExvYWRlciosIGNvbnN0IGNoYXIqLCBp
bnQpOworICAgIHZpcnR1YWwgdm9pZCBmaW5pc2hlZExvYWRpbmcoRG9jdW1lbnRMb2FkZXIqKTsK
KworICAgIHZpcnR1YWwgdm9pZCB1cGRhdGVHbG9iYWxIaXN0b3J5KCk7CisgICAgdmlydHVhbCB2
b2lkIHVwZGF0ZUdsb2JhbEhpc3RvcnlSZWRpcmVjdExpbmtzKCk7CisgICAgdmlydHVhbCBib29s
IHNob3VsZEdvVG9IaXN0b3J5SXRlbShIaXN0b3J5SXRlbSopIGNvbnN0OworICAgIHZpcnR1YWwg
dm9pZCBkaWREaXNwbGF5SW5zZWN1cmVDb250ZW50KCk7CisgICAgdmlydHVhbCB2b2lkIGRpZFJ1
bkluc2VjdXJlQ29udGVudChTZWN1cml0eU9yaWdpbiopOworCisgICAgdmlydHVhbCBSZXNvdXJj
ZUVycm9yIGNhbmNlbGxlZEVycm9yKGNvbnN0IFJlc291cmNlUmVxdWVzdCYpOworICAgIHZpcnR1
YWwgUmVzb3VyY2VFcnJvciBibG9ja2VkRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7Cisg
ICAgdmlydHVhbCBSZXNvdXJjZUVycm9yIGNhbm5vdFNob3dVUkxFcnJvcihjb25zdCBSZXNvdXJj
ZVJlcXVlc3QmKTsKKyAgICB2aXJ0dWFsIFJlc291cmNlRXJyb3IgaW50ZXJydXB0Rm9yUG9saWN5
Q2hhbmdlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXF1ZXN0Jik7CisKKyAgICB2aXJ0dWFsIFJlc291
cmNlRXJyb3IgY2Fubm90U2hvd01JTUVUeXBlRXJyb3IoY29uc3QgUmVzb3VyY2VSZXNwb25zZSYp
OworICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBmaWxlRG9lc05vdEV4aXN0RXJyb3IoY29uc3Qg
UmVzb3VyY2VSZXNwb25zZSYpOworICAgIHZpcnR1YWwgUmVzb3VyY2VFcnJvciBwbHVnaW5XaWxs
SGFuZGxlTG9hZEVycm9yKGNvbnN0IFJlc291cmNlUmVzcG9uc2UmKTsKKworICAgIHZpcnR1YWwg
Ym9vbCBzaG91bGRGYWxsQmFjayhjb25zdCBSZXNvdXJjZUVycm9yJik7CisKKyAgICB2aXJ0dWFs
IGJvb2wgY2FuSGFuZGxlUmVxdWVzdChjb25zdCBSZXNvdXJjZVJlcXVlc3QmKSBjb25zdDsKKyAg
ICB2aXJ0dWFsIGJvb2wgY2FuU2hvd01JTUVUeXBlKGNvbnN0IFN0cmluZyYpIGNvbnN0OworICAg
IHZpcnR1YWwgYm9vbCByZXByZXNlbnRhdGlvbkV4aXN0c0ZvclVSTFNjaGVtZShjb25zdCBTdHJp
bmcmKSBjb25zdDsKKyAgICB2aXJ0dWFsIFN0cmluZyBnZW5lcmF0ZWRNSU1FVHlwZUZvclVSTFNj
aGVtZShjb25zdCBTdHJpbmcmKSBjb25zdDsKKworICAgIHZpcnR1YWwgdm9pZCBmcmFtZUxvYWRD
b21wbGV0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2F2ZVZpZXdTdGF0ZVRvSXRlbShIaXN0b3J5
SXRlbSopOworICAgIHZpcnR1YWwgdm9pZCByZXN0b3JlVmlld1N0YXRlKCk7CisgICAgdmlydHVh
bCB2b2lkIHByb3Zpc2lvbmFsTG9hZFN0YXJ0ZWQoKTsKKyAgICB2aXJ0dWFsIHZvaWQgZGlkRmlu
aXNoTG9hZCgpOworICAgIHZpcnR1YWwgdm9pZCBwcmVwYXJlRm9yRGF0YVNvdXJjZVJlcGxhY2Vt
ZW50KCk7CisKKyAgICB2aXJ0dWFsIFdURjo6UGFzc1JlZlB0cjxEb2N1bWVudExvYWRlcj4gY3Jl
YXRlRG9jdW1lbnRMb2FkZXIoY29uc3QgUmVzb3VyY2VSZXF1ZXN0JiwgY29uc3QgU3Vic3RpdHV0
ZURhdGEmKTsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VGl0bGUoY29uc3QgU3RyaW5nJiB0aXRsZSwg
Y29uc3QgS1VSTCYpOworCisgICAgdmlydHVhbCBTdHJpbmcgdXNlckFnZW50KGNvbnN0IEtVUkwm
KTsKKworICAgIHZpcnR1YWwgdm9pZCBzYXZlUGxhdGZvcm1EYXRhVG9DYWNoZWRGcmFtZShDYWNo
ZWRGcmFtZSopOworICAgIHZpcnR1YWwgdm9pZCB0cmFuc2l0aW9uVG9Db21taXR0ZWRGcm9tQ2Fj
aGVkRnJhbWUoQ2FjaGVkRnJhbWUqKTsKKyAgICB2aXJ0dWFsIHZvaWQgdHJhbnNpdGlvblRvQ29t
bWl0dGVkRm9yTmV3UGFnZSgpOworCisgICAgdmlydHVhbCBib29sIGNhbkNhY2hlUGFnZSgpIGNv
bnN0OworICAgIHZpcnR1YWwgdm9pZCBkb3dubG9hZChSZXNvdXJjZUhhbmRsZSosIGNvbnN0IFJl
c291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVxdWVzdCYsIGNvbnN0IFJlc291cmNlUmVz
cG9uc2UmKTsKKyBwcml2YXRlOgorICAgIEV2YXNfT2JqZWN0ICptX3ZpZXc7CisgICAgRXZhc19P
YmplY3QgKm1fZnJhbWU7CisKKyAgICBSZXNvdXJjZVJlc3BvbnNlIG1fcmVzcG9uc2U7CisgICAg
Ym9vbCBtX2ZpcnN0RGF0YTsKKyAgICBTdHJpbmcgbV91c2VyQWdlbnQ7CisgICAgU3RyaW5nIG1f
Y3VzdG9tVXNlckFnZW50OworCisgICAgUmVzb3VyY2VFcnJvciBtX2xvYWRFcnJvcjsKKworICAg
IC8vIFBsdWdpbiB2aWV3IHRvIHJlZGlyZWN0IGRhdGEgdG8KKyAgICBQbHVnaW5WaWV3KiBtX3Bs
dWdpblZpZXc7CisgICAgYm9vbCBtX2hhc1NlbnRSZXNwb25zZVRvUGx1Z2luOworfTsKKworfQor
CisjZW5kaWYgLy8gRnJhbWVMb2FkZXJDbGllbnRFZmxfaAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>