<?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>87872</bug_id>
          
          <creation_ts>2012-05-30 10:22:41 -0700</creation_ts>
          <short_desc>[Qt] Implement a shim layer to wrap v8 behind the JavaScriptCore API</short_desc>
          <delta_ts>2012-06-12 08:49:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Platform</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>WONTFIX</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>76778</blocked>
    
    <blocked>84457</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Balazs Kelemen">kbalazs</reporter>
          <assigned_to name="Balazs Kelemen">kbalazs</assigned_to>
          <cc>abarth</cc>
    
    <cc>ap</cc>
    
    <cc>gaborb</cc>
    
    <cc>hausmann</cc>
    
    <cc>levin+threading</cc>
    
    <cc>sam</cc>
    
    <cc>vestbo</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>637384</commentid>
    <comment_count>0</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-30 10:22:41 -0700</bug_when>
    <thetext>The goal is to be able to use v8 in WebKit2 without the need to fork the InjectedBundle (of WTR).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638416</commentid>
    <comment_count>1</comment_count>
      <attachid>145093</attachid>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-31 07:52:59 -0700</bug_when>
    <thetext>Created attachment 145093
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638465</commentid>
    <comment_count>2</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-31 08:48:57 -0700</bug_when>
    <thetext>This is part of &quot;make WebKit2 work with v8&quot; project that has not been accepted on webkit-dev. Why is it ok to post this for review?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638474</commentid>
    <comment_count>3</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-31 09:00:27 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; This is part of &quot;make WebKit2 work with v8&quot; project that has not been accepted on webkit-dev. Why is it ok to post this for review?

It has not been rejected unambiguously as well. I finished implementing this so the community can at least see how it looks like. It&apos;s better to decide on something that actually exist.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638489</commentid>
    <comment_count>4</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-05-31 09:17:42 -0700</bug_when>
    <thetext>That&apos;s not how I read the discussion.

Anyway, if this is your goal, I suggest clearing the review flag and posting to webkit-dev again with a link. This patch is not something that should be r+&apos;ed and landed without community buy-in.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638505</commentid>
    <comment_count>5</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-05-31 09:39:54 -0700</bug_when>
    <thetext>(In reply to comment #4)
&gt; That&apos;s not how I read the discussion.
&gt; 
&gt; Anyway, if this is your goal, I suggest clearing the review flag and posting to webkit-dev again with a link. This patch is not something that should be r+&apos;ed and landed without community buy-in.

Mail sent. I would better like to keep the r? because otherwise nobody will notice the patch (according to my experiences).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>638561</commentid>
    <comment_count>6</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2012-05-31 10:51:33 -0700</bug_when>
    <thetext>This wrapper looks like it&apos;s pretty slow.  Have you benchmarked it?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>639545</commentid>
    <comment_count>7</comment_count>
    <who name="Balazs Kelemen">kbalazs</who>
    <bug_when>2012-06-01 11:32:53 -0700</bug_when>
    <thetext>(In reply to comment #6)
&gt; This wrapper looks like it&apos;s pretty slow.  Have you benchmarked it?

Not yet. Considering that the wrapper is only taking part in binding layouttestcontroller and friends to the js environment I don&apos;t really care about speed. Note that the actual script execution is happening in WebCore, not WebKit2. Most of the js related thinks in WebKit2 are just for serving the needs of the injected bundle. As long as a test session does not takes considerably more time than before, I don&apos;t think we should worry about speed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>641230</commentid>
    <comment_count>8</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-06-05 00:00:58 -0700</bug_when>
    <thetext>WONTFIX per complete lack of buy-in on webkit-dev.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>145093</attachid>
            <date>2012-05-31 07:52:59 -0700</date>
            <delta_ts>2012-06-12 08:49:46 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87872-20120531165250.patch</filename>
            <type>text/plain</type>
            <size>89359</size>
            <attacher name="Balazs Kelemen">kbalazs</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTE4OTM1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTMxZDQzOTIzM2FhOTc3
NGIwZjY5NDgyMjI1NDc2NDk5Y2U0YzU2Ny4uNmUzZjdjYjliMmEwYzczZGM0ZjJhZThkNDY3Nzc2
MTViOWRiZTcxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE4NiBAQAorMjAxMi0wNS0zMSAgQmFs
YXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBJbXBsZW1l
bnQgYSBzaGltIGxheWVyIHRvIHdyYXAgdjggYmVoaW5kIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkK
KyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODcyCisK
KyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW1wbGVtZW50
ZWQgYSBuZXcgYmluZGluZyBsYXllciBmb3IgdGhlIEpTIGVuZ2luZSBuYW1lZCBWOEpTQ0FQSVNo
aW0uCisgICAgICAgIFRoZSBnb2FsIGlzIHRvIGJlIGFibGUgdG8gdXNlIFY4IGluIFdlYktpdDIg
YW5kIFdlYktpdFRlc3RSdW5uZXIKKyAgICAgICAgd2l0aG91dCBmb3JraW5nIHRoZSBqcyBiaW5k
aW5nIGNvZGUgb2YgdGhlIEluamVjdGVkQnVuZGxlLgorICAgICAgICBUaGUgc2hpbSBpbXBsZW1l
bnRzIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkgdXBvbiB0aGUgQVBJIG9mIHY4LgorICAgICAgICBJ
biB2OCBvYmplY3QgbGlmZXRpbWUgbmVlZHMgdG8gYmUgaGFuZGxlZCBleHBsaWNpdGx5IHRyb3Vn
aCBoYW5kbGVzLgorICAgICAgICBUaGlzIGlzIGRpZmZlcmVudCBmcm9tIEpTQyB3aGVyZSB0aGUg
SlNPYmplY3RSZWYgYW5kIEpTVmFsdWVSZWYgcG9pbnRlcnMKKyAgICAgICAgb24gc3RhY2sgaW1w
bGljaXRseSBndWFyZHMgdGhlIGNlbGxzIGZyb20gYmVpbmcgR0MnZC4gSW4gb3JkZXIgdG8gZmls
bAorICAgICAgICB0aGUgZ2FwIGJldHdlZW4gdGhlc2UgbW9kZWxzIEpTT2JqZWN0UmVmIGFuZCBK
U1ZhbHVlUmVmIGlzIGRlZmluZWQgYXMKKyAgICAgICAgc21hcnQgcG9pbnRlcnMgYW5kIHJlZmNv
dW50ZWQgd3JhcHBlcnMgaGF2ZSBiZWVuIGFkZGVkIGZvciB0aGUgSmF2YVNjcmlwdAorICAgICAg
ICBkYXRhIHR5cGVzIG9mIHY4LgorCisgICAgICAgIE5vIG5ldyB0ZXN0cy4gVGhpcyB3aWxsIGJl
IHVzZWQgYnkgV2ViS2l0VGVzdFJ1bm5lciBzbyB0aGUgY29ycmVjdG5lc3MKKyAgICAgICAgb2Yg
dGhlIHNoaW0gY291bGQgYmUgdGVzdGVkIGJ5IHJ1bm5pbmcgdGhlIGxheW91dCB0ZXN0cy4KKwor
ICAgICAgICAqIFdlYkNvcmUucHJpOgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9K
YXZhU2NyaXB0Q29yZS9BUElDYXN0Lmg6IEFkZGVkLgorICAgICAgICAoVjhKU0NBUElTaGltKToK
KyAgICAgICAgKFY4SlNDQVBJU2hpbTo6dG9WOCk6CisgICAgICAgIChWOEpTQ0FQSVNoaW06OnRv
UmVmKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6anNVbmRlZmluZWQpOgorICAgICAgICAoVjhK
U0NBUElTaGltOjpudWxsVmFsdWUpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpudWxsT2JqZWN0
KToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6dG9JbXBsKToKKyAgICAgICAgKFY4SlNDQVBJU2hp
bTo6dG9HbG9iYWxSZWYpOgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2Ny
aXB0Q29yZS9DbGFzc1dyYXBwZXIuY3BwOiBBZGRlZC4KKyAgICAgICAgKFY4SlNDQVBJU2hpbSk6
CisgICAgICAgIChWOEpTQ0FQSVNoaW06OkNsYXNzV3JhcHBlcjo6fkNsYXNzV3JhcHBlcik6Cisg
ICAgICAgICogYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0NsYXNzV3JhcHBl
ci5oOiBBZGRlZC4KKyAgICAgICAgKFY4SlNDQVBJU2hpbSk6CisgICAgICAgIChDbGFzc1dyYXBw
ZXIpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpDbGFzc1dyYXBwZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChWOEpTQ0FQSVNoaW06OkNsYXNzV3JhcHBlcjo6cGFyZW50KToKKyAgICAgICAgKFY4SlND
QVBJU2hpbTo6Q2xhc3NXcmFwcGVyOjpzZXRQYXJlbnQpOgorICAgICAgICAoVjhKU0NBUElTaGlt
OjpDbGFzc1dyYXBwZXI6OmZ1bmN0aW9uVGVtcGxhdGUpOgorICAgICAgICAoVjhKU0NBUElTaGlt
OjpDbGFzc1dyYXBwZXI6OnNldEZ1bmN0aW9uVGVtcGxhdGUpOgorICAgICAgICAoVjhKU0NBUElT
aGltOjpDbGFzc1dyYXBwZXI6OnRha2VTdGF0aWNGdW5jUHRyKToKKyAgICAgICAgKFY4SlNDQVBJ
U2hpbTo6Q2xhc3NXcmFwcGVyOjp0YWtlU3RhdGljVmFsdWVDYWxsYmFjayk6CisgICAgICAgIChW
OEpTQ0FQSVNoaW06OkNsYXNzV3JhcHBlcjo6dGFrZVByb3BlcnR5Q2FsbGJhY2spOgorICAgICAg
ICAoVjhKU0NBUElTaGltOjpDbGFzc1dyYXBwZXI6OmNsYXNzRGVmKToKKyAgICAgICAgKFY4SlND
QVBJU2hpbTo6Q2xhc3NXcmFwcGVyOjpDbGFzc1dyYXBwZXIpOgorICAgICAgICAoVjhKU0NBUElT
aGltOjpTdGF0aWNWYWx1ZUNhbGxiYWNrczo6aXNFbXB0eSk6CisgICAgICAgIChTdGF0aWNWYWx1
ZUNhbGxiYWNrcyk6CisgICAgICAgIChWOEpTQ0FQSVNoaW06Ok5hbWVkUHJvcGVydHlDYWxsYmFj
a3M6OmlzRW1wdHkpOgorICAgICAgICAoTmFtZWRQcm9wZXJ0eUNhbGxiYWNrcyk6CisgICAgICAg
IChWOEpTQ0FQSVNoaW06OnRvSW1wbCk6CisgICAgICAgIChWOEpTQ0FQSVNoaW06OnRvUmVmKToK
KyAgICAgICAgKiBiaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNCYXNlLmNw
cDogQWRkZWQuCisgICAgICAgIChKU0V2YWx1YXRlU2NyaXB0KToKKyAgICAgICAgKEpTQ2hlY2tT
Y3JpcHRTeW50YXgpOgorICAgICAgICAoSlNHYXJiYWdlQ29sbGVjdCk6CisgICAgICAgICogYmlu
ZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTQmFzZS5oOiBBZGRlZC4KKyAgICAg
ICAgKFY4SlNDQVBJU2hpbSk6CisgICAgICAgIChXcmFwcGVyKToKKyAgICAgICAgKFY4SlNDQVBJ
U2hpbTo6V3JhcHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6V3JhcHBlcjo6
Z2V0KToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6V3JhcHBlcjo6aXNFbXB0eSk6CisgICAgICAg
IChWOEpTQ0FQSVNoaW06OldyYXBwZXI6On5XcmFwcGVyKToKKyAgICAgICAgKFY4SlNDQVBJU2hp
bTo6V3JhcHBlcjo6V3JhcHBlcik6CisgICAgICAgIChWOEpTQ0FQSVNoaW06Ojo6V3JhcHBlcik6
CisgICAgICAgIChPYmplY3RXcmFwcGVyUmVmUHRyKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6
T2JqZWN0V3JhcHBlclJlZlB0cjo6T2JqZWN0V3JhcHBlclJlZlB0cik6CisgICAgICAgIChWOEpT
Q0FQSVNoaW06Ok9iamVjdFdyYXBwZXJSZWZQdHI6Om9wZXJhdG9yID0pOgorICAgICAgICAoVmFs
dWVXcmFwcGVyUmVmUHRyKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6VmFsdWVXcmFwcGVyUmVm
UHRyOjpWYWx1ZVdyYXBwZXJSZWZQdHIpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpWYWx1ZVdy
YXBwZXJSZWZQdHI6Om9wZXJhdG9yID0pOgorICAgICAgICAoVjhKU0NBUElTaGltOjpWYWx1ZVdy
YXBwZXJSZWZQdHI6Om9wZXJhdG9yIFBhc3NSZWZQdHI8T2JqZWN0V3JhcHBlcj4gKToKKyAgICAg
ICAgKiBiaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmNw
cDogQWRkZWQuCisgICAgICAgIChJc29sYXRlV3JhcHBlcik6CisgICAgICAgIChJc29sYXRlV3Jh
cHBlcjo6Y3JlYXRlKToKKyAgICAgICAgKElzb2xhdGVXcmFwcGVyOjpnZXQpOgorICAgICAgICAo
SXNvbGF0ZVdyYXBwZXI6Oklzb2xhdGVXcmFwcGVyKToKKyAgICAgICAgKElzb2xhdGVXcmFwcGVy
Ojp+SXNvbGF0ZVdyYXBwZXIpOgorICAgICAgICAodG9JbXBsKToKKyAgICAgICAgKHRvUmVmKToK
KyAgICAgICAgKEpTQ29udGV4dEdyb3VwQ3JlYXRlKToKKyAgICAgICAgKEpTQ29udGV4dEdyb3Vw
UmV0YWluKToKKyAgICAgICAgKEpTQ29udGV4dEdyb3VwUmVsZWFzZSk6CisgICAgICAgIChKU0ds
b2JhbENvbnRleHRDcmVhdGUpOgorICAgICAgICAoSlNHbG9iYWxDb250ZXh0Q3JlYXRlSW5Hcm91
cCk6CisgICAgICAgIChKU0dsb2JhbENvbnRleHRSZXRhaW4pOgorICAgICAgICAoSlNHbG9iYWxD
b250ZXh0UmVsZWFzZSk6CisgICAgICAgIChKU0NvbnRleHRHZXRHbG9iYWxPYmplY3QpOgorICAg
ICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aDogQWRkZWQuCisgICAgICAgICogYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3Jl
L0pTT2JqZWN0UmVmLmNwcDogQWRkZWQuCisgICAgICAgIChWOEpTQ0FQSVNoaW0pOgorICAgICAg
ICAoVjhKU0NBUElTaGltOjp3ZWFrUmVmZXJlbmNlRGVzdHJveWVyQ2FsbGJhY2spOgorICAgICAg
ICAoVjhKU0NBUElTaGltOjpzdGF0aWNGdW5jdGlvbkNhbGxUaHVuayk6CisgICAgICAgIChWOEpT
Q0FQSVNoaW06OnN0YXRpY1ZhbHVlR2V0dGVyVGh1bmspOgorICAgICAgICAoVjhKU0NBUElTaGlt
OjpzdGF0aWNWYWx1ZVNldHRlclRodW5rKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6dG9WOEF0
dHJpYnV0ZXMpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpnZXRQcm9wZXJ0eVRodW5rKToKKyAg
ICAgICAgKFY4SlNDQVBJU2hpbTo6c2V0UHJvcGVydHlUaHVuayk6CisgICAgICAgIChWOEpTQ0FQ
SVNoaW06OnByb3BlcnR5RGVsZXRlclRodW5rKToKKyAgICAgICAgKE9wYXF1ZUpTUHJvcGVydHlO
YW1lQWNjdW11bGF0b3IpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpnZXRQcm9wZXJ0eU5hbWVz
VGh1bmspOgorICAgICAgICAoSlNDbGFzc0NyZWF0ZSk6CisgICAgICAgIChKU0NsYXNzUmV0YWlu
KToKKyAgICAgICAgKEpTQ2xhc3NSZWxlYXNlKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6RW1i
ZWRkZWRPYmplY3REYXRhOjpFbWJlZGRlZE9iamVjdERhdGEpOgorICAgICAgICAoRW1iZWRkZWRP
YmplY3REYXRhKToKKyAgICAgICAgKFY4SlNDQVBJU2hpbTo6RW1iZWRkZWRPYmplY3REYXRhOjpp
bml0VHlwZUlESWZOZWNlc3NhcnkpOgorICAgICAgICAoVjhKU0NBUElTaGltOjpFbWJlZGRlZE9i
amVjdERhdGE6OmlzRW1iZWRkZWRPYmplY3REYXRhKToKKyAgICAgICAgKEpTT2JqZWN0TWFrZSk6
CisgICAgICAgIChWOEpTQ0FQSVNoaW06OmdldENsYXNzT2ZPYmplY3QpOgorICAgICAgICAoVjhK
U0NBUElTaGltOjplbWJlZGRlZE9iamVjdERlc3Ryb3llckNhbGxiYWNrKToKKyAgICAgICAgKEpT
T2JqZWN0R2V0UHJpdmF0ZSk6CisgICAgICAgIChKU09iamVjdFNldFByaXZhdGUpOgorICAgICAg
ICAoSlNQcm9wZXJ0eU5hbWVBY2N1bXVsYXRvckFkZE5hbWUpOgorICAgICAgICAoSlNPYmplY3RD
b3B5UHJvcGVydHlOYW1lcyk6CisgICAgICAgIChKU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluKToK
KyAgICAgICAgKEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKToKKyAgICAgICAgKEpTUHJvcGVy
dHlOYW1lQXJyYXlHZXRDb3VudCk6CisgICAgICAgIChKU1Byb3BlcnR5TmFtZUFycmF5R2V0TmFt
ZUF0SW5kZXgpOgorICAgICAgICAoSlNPYmplY3RNYWtlRnVuY3Rpb25XaXRoQ2FsbGJhY2spOgor
ICAgICAgICAoSlNPYmplY3RNYWtlQXJyYXkpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm90b3R5
cGUpOgorICAgICAgICAoSlNPYmplY3RHZXRQcm9wZXJ0eSk6CisgICAgICAgIChKU09iamVjdFNl
dFByb3BlcnR5KToKKyAgICAgICAgKEpTT2JqZWN0RGVsZXRlUHJvcGVydHkpOgorICAgICAgICAo
SlNPYmplY3RHZXRQcm9wZXJ0eUF0SW5kZXgpOgorICAgICAgICAoSlNPYmplY3RTZXRQcm9wZXJ0
eUF0SW5kZXgpOgorICAgICAgICAoSlNPYmplY3RJc0Z1bmN0aW9uKToKKyAgICAgICAgKEpTT2Jq
ZWN0Q2FsbEFzRnVuY3Rpb24pOgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZh
U2NyaXB0Q29yZS9KU09iamVjdFJlZi5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9WOEpT
Q0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNSZXRhaW5QdHIuaDogQWRkZWQuCisgICAgICAgICog
YmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU1N0cmluZ0NyZWF0ZVdpdGhDaGFyYWN0ZXJzKToKKyAgICAgICAgKEpT
U3RyaW5nQ3JlYXRlV2l0aFVURjhDU3RyaW5nKToKKyAgICAgICAgKEpTU3RyaW5nUmV0YWluKToK
KyAgICAgICAgKEpTU3RyaW5nUmVsZWFzZSk6CisgICAgICAgIChKU1N0cmluZ0dldExlbmd0aCk6
CisgICAgICAgIChKU1N0cmluZ0dldENoYXJhY3RlcnNQdHIpOgorICAgICAgICAoSlNTdHJpbmdH
ZXRNYXhpbXVtVVRGOENTdHJpbmdTaXplKToKKyAgICAgICAgKEpTU3RyaW5nR2V0VVRGOENTdHJp
bmcpOgorICAgICAgICAoSlNTdHJpbmdJc0VxdWFsKToKKyAgICAgICAgKEpTU3RyaW5nSXNFcXVh
bFRvVVRGOENTdHJpbmcpOgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5oOiBBZGRlZC4KKyAgICAgICAgKiBiaW5kaW5ncy9WOEpTQ0FQ
SVNoaW0vSmF2YVNjcmlwdENvcmUvSlNWYWx1ZVJlZi5jcHA6IEFkZGVkLgorICAgICAgICAoSlNW
YWx1ZUdldFR5cGUpOgorICAgICAgICAoSlNWYWx1ZUlzVW5kZWZpbmVkKToKKyAgICAgICAgKEpT
VmFsdWVJc051bGwpOgorICAgICAgICAoSlNWYWx1ZUlzQm9vbGVhbik6CisgICAgICAgIChKU1Zh
bHVlSXNOdW1iZXIpOgorICAgICAgICAoSlNWYWx1ZUlzU3RyaW5nKToKKyAgICAgICAgKEpTVmFs
dWVJc09iamVjdCk6CisgICAgICAgIChKU1ZhbHVlSXNPYmplY3RPZkNsYXNzKToKKyAgICAgICAg
KEpTVmFsdWVJc0VxdWFsKToKKyAgICAgICAgKEpTVmFsdWVJc1N0cmljdEVxdWFsKToKKyAgICAg
ICAgKEpTVmFsdWVJc0luc3RhbmNlT2ZDb25zdHJ1Y3Rvcik6CisgICAgICAgIChKU1ZhbHVlTWFr
ZVVuZGVmaW5lZCk6CisgICAgICAgIChKU1ZhbHVlTWFrZU51bGwpOgorICAgICAgICAoSlNWYWx1
ZU1ha2VCb29sZWFuKToKKyAgICAgICAgKEpTVmFsdWVNYWtlTnVtYmVyKToKKyAgICAgICAgKEpT
VmFsdWVNYWtlU3RyaW5nKToKKyAgICAgICAgKEpTVmFsdWVUb0Jvb2xlYW4pOgorICAgICAgICAo
SlNWYWx1ZVRvTnVtYmVyKToKKyAgICAgICAgKEpTVmFsdWVUb1N0cmluZ0NvcHkpOgorICAgICAg
ICAoSlNWYWx1ZVRvT2JqZWN0KToKKyAgICAgICAgKEpTVmFsdWVQcm90ZWN0KToKKyAgICAgICAg
KEpTVmFsdWVVbnByb3RlY3QpOgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZh
U2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL1Y4SlND
QVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Lmg6IEFkZGVkLgorICAgICAgICAqIGJp
bmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oOiBBZGRl
ZC4KKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKE9wYXF1ZUpTU3RyaW5nOjpj
cmVhdGUpOgorICAgICAgICAoT3BhcXVlSlNTdHJpbmc6OmNoYXJhY3RlcnMpOgorICAgICAgICAo
T3BhcXVlSlNTdHJpbmc6Omxlbmd0aCk6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6dG9WOFN0
cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6dG9VdGY4KToKKyAgICAgICAgKE9wYXF1
ZUpTU3RyaW5nOjpPcGFxdWVKU1N0cmluZyk6CisgICAgICAgIChPcGFxdWVKU1N0cmluZzo6fk9w
YXF1ZUpTU3RyaW5nKToKKyAgICAgICAgKiBiaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlw
dENvcmUvVjhKU0NBUElTaGltTWFjcm9zLmg6IEFkZGVkLgorICAgICAgICAqIGJpbmRpbmdzL1Y4
SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9XZWJLaXRBdmFpbGFiaWxpdHkuaDogQWRkZWQuCisg
ICAgICAgICogYmluZGluZ3MvVjhKU0NBUElTaGltL1Y4SlNDQVBJU2hpbS5wcmk6IEFkZGVkLgor
ICAgICAgICAqIGJpbmRpbmdzL1Y4SlNDQVBJU2hpbS9WOEpTQ0FQSVNoaW0ucHJvOiBBZGRlZC4K
KwogMjAxMi0wNS0zMCAgQ2FpbyBNYXJjZWxvIGRlIE9saXZlaXJhIEZpbGhvICA8Y2Fpby5vbGl2
ZWlyYUBvcGVuYm9zc2Eub3JnPgogCiAgICAgICAgIEhhc2hUYWJsZS5oIGhhcyB1c2luZyBkaXJl
Y3RpdmVzIGZvciBzdGQ6OnBhaXIgYW5kIHN0ZDo6bWFrZV9wYWlyCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKaW5kZXggOTVm
YzJmMGJiYjdhY2ExOTllMjkyYzQ2NjgxMGM4MmU3N2YwZjNkZi4uM2EzOThiZGY0N2Y3ZjM0ODgx
Njc0MzRkN2JjNDJhYzg5ZGE0OTYwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdDIvQ2hhbmdl
TG9nCisrKyBiL1NvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwpAQCAtMSwzICsxLDE5IEBACisyMDEy
LTA1LTMxICBCYWxhenMgS2VsZW1lbiAgPGtiYWxhenNAd2Via2l0Lm9yZz4KKworICAgICAgICBb
UXRdIEltcGxlbWVudCBhIHNoaW0gbGF5ZXIgdG8gd3JhcCB2OCBiZWhpbmQgdGhlIEphdmFTY3Jp
cHRDb3JlIEFQSQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9ODc4NzIKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAg
ICBUZWFjaCBnZW5lcmF0ZS1mb3J3YXJkaW5nLWhlYWRlcnMgdG8gbm90IGNvbGxlY3QgdGhlIEpT
QyBoZWFkZXJzCisgICAgICAgIGlmIHRoZSBwbGF0Zm9ybSBkb2Vzbid0IHdhbnQgdG8gdXNlIEpT
Qy4KKworICAgICAgICAqIFNjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFkZXJzLnBsOgor
ICAgICAgICAoY29sbGVjdEZhbWV3b3JrSGVhZGVyUGF0aHMpOgorICAgICAgICAoY3JlYXRlRm9y
d2FyZGluZ0hlYWRlcnNGb3JGcmFtZXdvcmspOgorICAgICAgICBCbGFja2xpc3QgdGhlIEphdmFT
Y3JpcHRDb3JlL0FQSSBwYXRoIGlmIGl0IGlzIG5vdAorICAgICAgICBhbGxvd2VkIGV4cGxpY2l0
bHkuCisKIDIwMTItMDUtMzAgIENhaW8gTWFyY2VsbyBkZSBPbGl2ZWlyYSBGaWxobyAgPGNhaW8u
b2xpdmVpcmFAb3BlbmJvc3NhLm9yZz4KIAogICAgICAgICBIYXNoVGFibGUuaCBoYXMgdXNpbmcg
ZGlyZWN0aXZlcyBmb3Igc3RkOjpwYWlyIGFuZCBzdGQ6Om1ha2VfcGFpcgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS5wcmkgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpp
bmRleCAwOGRiNjRjMGM1YTQ4MzI2MGIxMjgxNDhkNDQzZDNiNDc1NjQ3ODAyLi45Y2JmOTM4ZDlk
OWZhMjcwZDU4MGNkY2RjMTdhYzgzYzBlMzY3ZmJlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnByaQorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnByaQpAQCAtMTUsNiAr
MTUsOCBAQCBDT05GSUcgKz0gdGV4bWFwCiBRVCAqPSBuZXR3b3JrIHNxbAogaGF2ZVF0KDUpOiBR
VCAqPSBndWktcHJpdmF0ZQogCit2ODogUVQgKz0gcXVpY2sgIyBmb3IgUUpTRW5naW5lCisKIFdF
QkNPUkVfR0VORVJBVEVEX1NPVVJDRVNfRElSID0gJCR7Uk9PVF9CVUlMRF9ESVJ9L1NvdXJjZS9X
ZWJDb3JlLyQke0dFTkVSQVRFRF9TT1VSQ0VTX0RFU1RESVJ9CiAKIElOQ0xVREVQQVRIICs9IFwK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2Ny
aXB0Q29yZS9BUElDYXN0LmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0v
SmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyMWNiNzkyOTUxYWFmMzhiOWE1
ZDY3NzkxOTQ5YzgwNTU1YWEzOTMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9i
aW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvQVBJQ2FzdC5oCkBAIC0wLDAgKzEs
MTY1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFQSUNhc3RfaAor
I2RlZmluZSBBUElDYXN0X2gKKworI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgPHY4Lmg+
CisKK25hbWVzcGFjZSBWOEpTQ0FQSVNoaW0geworCisvLyBKU1ZhbHVlUmVmLCBKU09iamVjdFJl
ZgorCitpbmxpbmUgdjg6OkhhbmRsZTx2ODo6T2JqZWN0PiB0b1Y4KEpTT2JqZWN0UmVmIHdyYXBw
ZXIpCit7CisgICAgcmV0dXJuIHdyYXBwZXItPmdldCgpOworfQorCitpbmxpbmUgdjg6OkhhbmRs
ZTx2ODo6VmFsdWU+IHRvVjgoSlNWYWx1ZVJlZiB3cmFwcGVyKQoreworICAgIHJldHVybiB3cmFw
cGVyLT5nZXQoKTsKK30KKworaW5saW5lIFBhc3NSZWZQdHI8T2JqZWN0V3JhcHBlcj4gdG9SZWYo
djg6OkhhbmRsZTx2ODo6T2JqZWN0PiBvYmplY3QpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKE9i
amVjdFdyYXBwZXI6OmNyZWF0ZShvYmplY3QpLmxlYWtSZWYoKSk7Cit9CisKK2lubGluZSBQYXNz
UmVmUHRyPFZhbHVlV3JhcHBlcj4gdG9SZWYodjg6OkhhbmRsZTx2ODo6VmFsdWU+IHZhbHVlKQor
eworICAgIHJldHVybiBhZG9wdFJlZihWYWx1ZVdyYXBwZXI6OmNyZWF0ZSh2YWx1ZSkubGVha1Jl
ZigpKTsKK30KKworc3RhdGljIGlubGluZSBQYXNzUmVmUHRyPFZhbHVlV3JhcHBlcj4ganNVbmRl
ZmluZWQoKQoreworICAgIHJldHVybiB0b1JlZih2ODo6SGFuZGxlPHY4OjpWYWx1ZT4odjg6OlVu
ZGVmaW5lZCgpKSk7Cit9CisKK3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxWYWx1ZVdyYXBwZXI+
IG51bGxWYWx1ZSgpCit7CisgICAgcmV0dXJuIFZhbHVlV3JhcHBlcjo6Y3JlYXRlKCk7Cit9CisK
K3N0YXRpYyBpbmxpbmUgUGFzc1JlZlB0cjxPYmplY3RXcmFwcGVyPiBudWxsT2JqZWN0KCkKK3sK
KyAgICByZXR1cm4gT2JqZWN0V3JhcHBlcjo6Y3JlYXRlKCk7Cit9CisKKy8vIC0tLS0tLS0tLS0t
LS0tLS0tLS0tLQorCisvLyBKU1Byb3BlcnR5TmFtZUFycmF5UmVmCisKK3R5cGVkZWYgV3JhcHBl
cjx2ODo6QXJyYXk+IEFycmF5V3JhcHBlcjsKKworaW5saW5lIEFycmF5V3JhcHBlciogdG9JbXBs
KEpTUHJvcGVydHlOYW1lQXJyYXlSZWYgcmVmKQoreworICAgIHJldHVybiByZWludGVycHJldF9j
YXN0PEFycmF5V3JhcHBlcio+KHJlZik7Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpBcnJh
eT4gdG9WOChKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHJlZikKK3sKKyAgICByZXR1cm4gdG9JbXBs
KHJlZiktPmdldCgpOworfQorCitpbmxpbmUgSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiB0b1JlZih2
ODo6SGFuZGxlPHY4OjpBcnJheT4gYXJyYXkpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8SlNQcm9wZXJ0eU5hbWVBcnJheVJlZj4oQXJyYXlXcmFwcGVyOjpjcmVhdGUoYXJyYXkpLmxl
YWtSZWYoKSk7Cit9CisKK2lubGluZSBKU1Byb3BlcnR5TmFtZUFycmF5UmVmIHRvUmVmKEFycmF5
V3JhcHBlciogd3JhcHBlcikKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU1Byb3Bl
cnR5TmFtZUFycmF5UmVmPih3cmFwcGVyKTsKK30KKworaW5saW5lIEpTUHJvcGVydHlOYW1lQXJy
YXlSZWYgdG9SZWYoUGFzc1JlZlB0cjxBcnJheVdyYXBwZXI+IHdyYXBwZXIpCit7CisgICAgcmV0
dXJuIHRvUmVmKHdyYXBwZXIuZ2V0KCkpOworfQorCisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0K
KworLy8gSlNDb250ZXh0UmVmLCBKU0dsb2JhbENvbnRleHRSZWYKKwordHlwZWRlZiBXcmFwcGVy
PHY4OjpDb250ZXh0PiBDb250ZXh0V3JhcHBlcjsKKworaW5saW5lIENvbnRleHRXcmFwcGVyKiB0
b0ltcGwoSlNDb250ZXh0UmVmIHJlZikKK3sKKyAgICByZXR1cm4gY29uc3RfY2FzdDxDb250ZXh0
V3JhcHBlcio+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQ29udGV4dFdyYXBwZXIqPihyZWYpKTsK
K30KKworaW5saW5lIENvbnRleHRXcmFwcGVyKiB0b0ltcGwoSlNHbG9iYWxDb250ZXh0UmVmIHJl
ZikKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxDb250ZXh0V3JhcHBlcio+KHJlZik7
Cit9CisKK2lubGluZSB2ODo6SGFuZGxlPHY4OjpDb250ZXh0PiB0b1Y4KEpTQ29udGV4dFJlZiBy
ZWYpCit7CisgICAgcmV0dXJuIHRvSW1wbChyZWYpLT5nZXQoKTsKK30KKworaW5saW5lIHY4OjpI
YW5kbGU8djg6OkNvbnRleHQ+IHRvVjgoSlNHbG9iYWxDb250ZXh0UmVmIHJlZikKK3sKKyAgICBy
ZXR1cm4gdG9JbXBsKHJlZiktPmdldCgpOworfQorCitpbmxpbmUgSlNDb250ZXh0UmVmIHRvUmVm
KENvbnRleHRXcmFwcGVyKiBwdHIpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8SlND
b250ZXh0UmVmPihwdHIpOworfQorCitpbmxpbmUgSlNDb250ZXh0UmVmIHRvUmVmKGNvbnN0IFJl
ZlB0cjxDb250ZXh0V3JhcHBlciA+IHB0cikKK3sKKyAgICByZXR1cm4gdG9SZWYocHRyLmdldCgp
KTsKK30KKworaW5saW5lIEpTR2xvYmFsQ29udGV4dFJlZiB0b0dsb2JhbFJlZihDb250ZXh0V3Jh
cHBlciogcHRyKQoreworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTR2xvYmFsQ29udGV4
dFJlZj4ocHRyKTsKK30KKworaW5saW5lIEpTR2xvYmFsQ29udGV4dFJlZiB0b0dsb2JhbFJlZihQ
YXNzUmVmUHRyPENvbnRleHRXcmFwcGVyID4gcHRyKQoreworICAgIHJldHVybiB0b0dsb2JhbFJl
ZihwdHIuZ2V0KCkpOworfQorCitpbmxpbmUgSlNHbG9iYWxDb250ZXh0UmVmIHRvR2xvYmFsUmVm
KHY4OjpIYW5kbGU8djg6OkNvbnRleHQ+IGhhbmRsZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxKU0dsb2JhbENvbnRleHRSZWY+KENvbnRleHRXcmFwcGVyOjpjcmVhdGUoaGFuZGxl
KS5sZWFrUmVmKCkpOworfQorCitpbmxpbmUgSlNDb250ZXh0UmVmIHRvUmVmKHY4OjpIYW5kbGU8
djg6OkNvbnRleHQ+IGhhbmRsZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0Nv
bnRleHRSZWY+KENvbnRleHRXcmFwcGVyOjpjcmVhdGUoaGFuZGxlKS5sZWFrUmVmKCkpOworfQor
CisvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0KKworfSAvLyBuYW1lc3BhY2UgVjhKU0NBUElTaGlt
CisKK3VzaW5nIG5hbWVzcGFjZSBWOEpTQ0FQSVNoaW07CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0NsYXNz
V3JhcHBlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNj
cmlwdENvcmUvQ2xhc3NXcmFwcGVyLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5mOTEyMDU5OGJkZGIxM2YxOGVk
ZjBlZDExNDlhYmZlMDg0YjFkOTllCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0NsYXNzV3JhcHBlci5jcHAKQEAg
LTAsMCArMSw2MyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBDb21wdXRlciwg
SW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJz
aXR5IG9mIFN6ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycg
QU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xB
SU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNv
bmZpZy5oIgorI2luY2x1ZGUgIkNsYXNzV3JhcHBlci5oIgorCit1c2luZyBuYW1lc3BhY2Ugdjg7
CisKK25hbWVzcGFjZSBWOEpTQ0FQSVNoaW0geworCitDbGFzc1dyYXBwZXI6On5DbGFzc1dyYXBw
ZXIoKQoreworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX3N0YXRpY0Z1bmN0aW9ucy5z
aXplKCk7ICsraSkgeworICAgICAgICBQZXJzaXN0ZW50PFZhbHVlPiYgZnVuYyA9IG1fc3RhdGlj
RnVuY3Rpb25zW2ldOworICAgICAgICBBU1NFUlQoIWZ1bmMuSXNFbXB0eSgpKTsKKyAgICAgICAg
ZnVuYy5EaXNwb3NlKCk7CisgICAgICAgIGZ1bmMuQ2xlYXIoKTsKKyAgICB9CisgICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IG1fc3RhdGljVmFsdWVDYWxsYmFja3NMaXN0LnNpemUoKTsgKytp
KSB7CisgICAgICAgIFBlcnNpc3RlbnQ8VmFsdWU+JiBjYWxsYmFja3MgPSBtX3N0YXRpY1ZhbHVl
Q2FsbGJhY2tzTGlzdFtpXTsKKyAgICAgICAgQVNTRVJUKCFjYWxsYmFja3MuSXNFbXB0eSgpKTsK
KyAgICAgICAgU3RhdGljVmFsdWVDYWxsYmFja3MqIHJhd1B0ciA9IGJpdHdpc2VfY2FzdDxTdGF0
aWNWYWx1ZUNhbGxiYWNrcyo+KEV4dGVybmFsOjpVbndyYXAoY2FsbGJhY2tzKSk7CisgICAgICAg
IGRlbGV0ZSByYXdQdHI7CisgICAgICAgIGNhbGxiYWNrcy5EaXNwb3NlKCk7CisgICAgICAgIGNh
bGxiYWNrcy5DbGVhcigpOworICAgIH0KKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9w
cm9wZXJ0eUNhbGxiYWNrc0xpc3Quc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgUGVyc2lzdGVudDxW
YWx1ZT4mIGNhbGxiYWNrcyA9IG1fcHJvcGVydHlDYWxsYmFja3NMaXN0W2ldOworICAgICAgICBB
U1NFUlQoIWNhbGxiYWNrcy5Jc0VtcHR5KCkpOworICAgICAgICBOYW1lZFByb3BlcnR5Q2FsbGJh
Y2tzKiByYXdQdHIgPSBiaXR3aXNlX2Nhc3Q8TmFtZWRQcm9wZXJ0eUNhbGxiYWNrcyo+KEV4dGVy
bmFsOjpVbndyYXAoY2FsbGJhY2tzKSk7CisgICAgICAgIGRlbGV0ZSByYXdQdHI7CisgICAgICAg
IGNhbGxiYWNrcy5EaXNwb3NlKCk7CisgICAgICAgIGNhbGxiYWNrcy5DbGVhcigpOworICAgIH0K
KyAgICBBU1NFUlQoIW1fZnVuY3Rpb25ULklzRW1wdHkoKSk7CisgICAgbV9mdW5jdGlvblQuRGlz
cG9zZSgpOworICAgIG1fZnVuY3Rpb25ULkNsZWFyKCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFY4
SlNDQVBJU2hpbQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElT
aGltL0phdmFTY3JpcHRDb3JlL0NsYXNzV3JhcHBlci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGlu
Z3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0NsYXNzV3JhcHBlci5oCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjI1Mjc2Y2FmMjc2NzIyYTc5MTk5MDYxZTMyYjUyMTIwZGNjMTMzN2YKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUv
Q2xhc3NXcmFwcGVyLmgKQEAgLTAsMCArMSwxMTIgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIw
MTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBDb3B5cmln
aHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisg
KgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywg
d2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQg
dGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVw
cm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBDT01QVVRF
UiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5E
SVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJ
QUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVO
VCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IK
KyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5E
IE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RS
SUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVS
V0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRX
QVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgor
ICovCisKKyNpZm5kZWYgQ2xhc3NXcmFwcGVyX2gKKyNkZWZpbmUgQ2xhc3NXcmFwcGVyX2gKKwor
I2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSS9KU09iamVjdFJlZi5oPgorI2luY2x1ZGUgPHY4
Lmg+CisjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVm
Q291bnRlZC5oPgorI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KKworbmFtZXNwYWNlIFY4SlNDQVBJ
U2hpbSB7CisKK2NsYXNzIENsYXNzV3JhcHBlciA6IHB1YmxpYyBUaHJlYWRTYWZlUmVmQ291bnRl
ZDxDbGFzc1dyYXBwZXI+IHsKK3B1YmxpYzoKKyAgICBzdGF0aWMgUGFzc1JlZlB0cjxDbGFzc1dy
YXBwZXI+IGNyZWF0ZShjb25zdCBKU0NsYXNzRGVmaW5pdGlvbiogZGVmKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBDbGFzc1dyYXBwZXIoZGVmKSk7CisgICAgfQorCisgICAg
Q2xhc3NXcmFwcGVyKiBwYXJlbnQoKSBjb25zdCB7IHJldHVybiBtX3BhcmVudC5nZXQoKTsgfQor
ICAgIHZvaWQgc2V0UGFyZW50KENsYXNzV3JhcHBlciogcGFyZW50KSB7IG1fcGFyZW50ID0gcGFy
ZW50OyB9CisKKyAgICB2ODo6SGFuZGxlPHY4OjpGdW5jdGlvblRlbXBsYXRlPiBmdW5jdGlvblRl
bXBsYXRlKCkgY29uc3QgeyByZXR1cm4gbV9mdW5jdGlvblQ7IH0KKyAgICB2b2lkIHNldEZ1bmN0
aW9uVGVtcGxhdGUodjg6OkhhbmRsZTx2ODo6RnVuY3Rpb25UZW1wbGF0ZT4gdGVtcGwpCisgICAg
eworICAgICAgICBtX2Z1bmN0aW9uVCA9IHY4OjpQZXJzaXN0ZW50PHY4OjpGdW5jdGlvblRlbXBs
YXRlPjo6TmV3KHRlbXBsKTsKKyAgICB9CisKKyAgICB2b2lkIHRha2VTdGF0aWNGdW5jUHRyKHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gcHRyKSB7IG1fc3RhdGljRnVuY3Rpb25zLmFwcGVuZChw
dHIpOyB9CisgICAgdm9pZCB0YWtlU3RhdGljVmFsdWVDYWxsYmFjayh2ODo6UGVyc2lzdGVudDx2
ODo6VmFsdWU+IHB0cikgeyBtX3N0YXRpY1ZhbHVlQ2FsbGJhY2tzTGlzdC5hcHBlbmQocHRyKTsg
fQorICAgIHZvaWQgdGFrZVByb3BlcnR5Q2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVl
PiBwdHIpIHsgbV9wcm9wZXJ0eUNhbGxiYWNrc0xpc3QuYXBwZW5kKHB0cik7IH0KKworICAgIGNv
bnN0IEpTQ2xhc3NEZWZpbml0aW9uJiBjbGFzc0RlZigpIGNvbnN0IHsgcmV0dXJuIG1fZGVmaW5p
dGlvbjsgfQorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgVGhyZWFkU2FmZVJlZkNvdW50ZWQ8
Q2xhc3NXcmFwcGVyPjsKKworICAgIGV4cGxpY2l0IENsYXNzV3JhcHBlcihjb25zdCBKU0NsYXNz
RGVmaW5pdGlvbiogZGVmaW5pdGlvbikKKyAgICB7CisgICAgICAgIEFTU0VSVChkZWZpbml0aW9u
KTsKKyAgICAgICAgbV9kZWZpbml0aW9uID0gKmRlZmluaXRpb247CisgICAgfQorCisgICAgfkNs
YXNzV3JhcHBlcigpOworCisgICAgdjg6OlBlcnNpc3RlbnQ8djg6OkZ1bmN0aW9uVGVtcGxhdGU+
IG1fZnVuY3Rpb25UOworICAgIFJlZlB0cjxDbGFzc1dyYXBwZXI+IG1fcGFyZW50OworICAgIEpT
Q2xhc3NEZWZpbml0aW9uIG1fZGVmaW5pdGlvbjsKKyAgICBWZWN0b3I8djg6OlBlcnNpc3RlbnQ8
djg6OlZhbHVlPiA+IG1fc3RhdGljRnVuY3Rpb25zOworICAgIFZlY3Rvcjx2ODo6UGVyc2lzdGVu
dDx2ODo6VmFsdWU+ID4gbV9zdGF0aWNWYWx1ZUNhbGxiYWNrc0xpc3Q7CisgICAgVmVjdG9yPHY4
OjpQZXJzaXN0ZW50PHY4OjpWYWx1ZT4gPiBtX3Byb3BlcnR5Q2FsbGJhY2tzTGlzdDsKK307CisK
K3N0cnVjdCBTdGF0aWNWYWx1ZUNhbGxiYWNrcyB7CisgICAgYm9vbCBpc0VtcHR5KCkgY29uc3QK
KyAgICB7CisgICAgICAgIHJldHVybiAhKGdldFByb3AgfHwgc2V0UHJvcCk7CisgICAgfQorICAg
IEpTT2JqZWN0R2V0UHJvcGVydHlDYWxsYmFjayBnZXRQcm9wOworICAgIEpTT2JqZWN0U2V0UHJv
cGVydHlDYWxsYmFjayBzZXRQcm9wOworfTsKKworc3RydWN0IE5hbWVkUHJvcGVydHlDYWxsYmFj
a3MgeworICAgIGJvb2wgaXNFbXB0eSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gIShn
ZXRQcm9wIHx8IHNldFByb3AgfHwgZGVsZXRlUHJvcCB8fCBnZXRQcm9wTmFtZXMpOworICAgIH0K
KyAgICBKU09iamVjdEdldFByb3BlcnR5Q2FsbGJhY2sgZ2V0UHJvcDsKKyAgICBKU09iamVjdFNl
dFByb3BlcnR5Q2FsbGJhY2sgc2V0UHJvcDsKKyAgICBKU09iamVjdERlbGV0ZVByb3BlcnR5Q2Fs
bGJhY2sgZGVsZXRlUHJvcDsKKyAgICBKU09iamVjdEdldFByb3BlcnR5TmFtZXNDYWxsYmFjayBn
ZXRQcm9wTmFtZXM7Cit9OworCitpbmxpbmUgQ2xhc3NXcmFwcGVyKiB0b0ltcGwoSlNDbGFzc1Jl
ZiByZWYpCit7CisgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8Q2xhc3NXcmFwcGVyKj4ocmVm
KTsKK30KKworaW5saW5lIEpTQ2xhc3NSZWYgdG9SZWYoQ2xhc3NXcmFwcGVyKiB3cmFwcGVyKQor
eworICAgIHJldHVybiByZWludGVycHJldF9jYXN0PEpTQ2xhc3NSZWY+KHdyYXBwZXIpOworfQor
CitDbGFzc1dyYXBwZXIqIGdldENsYXNzT2ZPYmplY3Qodjg6OkhhbmRsZTx2ODo6T2JqZWN0Pik7
CisKK30gLy8gbmFtZXNwYWNlIFY4SlNDQVBJU2hpbQorCisjZW5kaWYKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU0Jhc2Uu
Y3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3Jl
L0pTQmFzZS5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTg3OWY5OWU2YzUxNzcwZWM4NWIyYTkxNTllYjhhNzZi
NWQ4MjU3MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlND
QVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU0Jhc2UuY3BwCkBAIC0wLDAgKzEsNjggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKiBDb3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBt
ZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJp
bmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBp
biB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRl
ZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1Mg
T1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhF
CisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZP
UiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBT
SEFMTCBBUFBMRSBDT01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBG
T1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExB
UlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQg
VE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NT
IE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhF
UiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
CisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJK
U0Jhc2UuaCIKKworI2luY2x1ZGUgIkFQSUNhc3QuaCIKKyNpbmNsdWRlICJPcGFxdWVKU1N0cmlu
Zy5oIgorI2luY2x1ZGUgIlY4SlNDQVBJU2hpbU1hY3Jvcy5oIgorCit1c2luZyBuYW1lc3BhY2Ug
djg7Cit1c2luZyBuYW1lc3BhY2UgVjhKU0NBUElTaGltOworCitKU1ZhbHVlUmVmIEpTRXZhbHVh
dGVTY3JpcHQoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTU3RyaW5nUmVmIHNjcmlwdCwgSlNPYmpl
Y3RSZWYgdGhpc09iamVjdCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBKU1N0cmluZ1Jl
ZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlv
bikKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisKKyAgICBIYW5kbGU8djg6OlN0cmlu
Zz4gdXJsID0gc291cmNlVVJMLT50b1Y4U3RyaW5nKCk7CisgICAgVHJ5Q2F0Y2ggdHJ5Q2F0Y2g7
CisgICAgU2NyaXB0T3JpZ2luIG9yaWdpbih1cmwsIEludGVnZXI6Ok5ldyhzdGFydGluZ0xpbmVO
dW1iZXIpLCBJbnRlZ2VyOjpOZXcoMCkpOworICAgIEhhbmRsZTxTY3JpcHQ+IHNyYyA9IFNjcmlw
dDo6TmV3KHNjcmlwdC0+dG9WOFN0cmluZygpLCAmb3JpZ2luKTsKKyAgICBFU0NBUEVfT05fRVhD
RVBUSU9OKHRyeUNhdGNoLCBleGNlcHRpb24sIG51bGxWYWx1ZSgpKTsKKworICAgIEhhbmRsZTxW
YWx1ZT4gcmVzdWx0ID0gc3JjLT5SdW4oKTsKKyAgICBFU0NBUEVfT05fRVhDRVBUSU9OKHRyeUNh
dGNoLCBleGNlcHRpb24sIG51bGxWYWx1ZSgpKTsKKyAgICByZXR1cm4gdG9SZWYocmVzdWx0KTsK
K30KKworYm9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0
cmluZ1JlZiBzY3JpcHQsIEpTU3RyaW5nUmVmIHNvdXJjZVVSTCwgaW50IHN0YXJ0aW5nTGluZU51
bWJlciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0
KTsKKworICAgIEhhbmRsZTx2ODo6U3RyaW5nPiB1cmwgPSBzb3VyY2VVUkwtPnRvVjhTdHJpbmco
KTsKKyAgICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBTY3JpcHRPcmlnaW4gb3JpZ2luKHVybCwg
SW50ZWdlcjo6TmV3KHN0YXJ0aW5nTGluZU51bWJlciksIEludGVnZXI6Ok5ldygwKSk7CisgICAg
U2NyaXB0OjpOZXcoc2NyaXB0LT50b1Y4U3RyaW5nKCksICZvcmlnaW4pOworICAgIEVTQ0FQRV9P
Tl9FWENFUFRJT04odHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwgZmFsc2UpOworICAgIHJldHVybiB0cnVl
OworfQorCit2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7Cisg
ICAgVjg6Okxvd01lbW9yeU5vdGlmaWNhdGlvbigpOworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTQmFzZS5oIGIvU291
cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTQmFzZS5o
Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAuLmIwMGZjN2E3MWU5ZTcwMzBhNjRkMTNhYTdiYTVmM2M0M2MyMzczYWUKLS0t
IC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2
YVNjcmlwdENvcmUvSlNCYXNlLmgKQEAgLTAsMCArMSwyNTkgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpZm5kZWYgSlNCYXNlX2gKKyNkZWZpbmUgSlNCYXNlX2gKKworLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0KKy8vIEJFR0lOIE1hY3JvcyBhbmQgdHlwZWRlZnMgY29taW5nIGZyb20gdGhlIG9yaWdp
bmFsIEpTQmFzZS5oCisKKy8qIEphdmFTY3JpcHQgc3ltYm9sIGV4cG9ydHMgKi8KKy8qIFRoZXNl
IHJ1bGVzIHNob3VsZCBzdGF5IHRoZSBzYW1lIGFzIGluIFdlYktpdDIvU2hhcmVkL0FQSS9jL1dL
QmFzZS5oICovCisKKyN1bmRlZiBKU19FWFBPUlQKKworI2lmIGRlZmluZWQoSlNfTk9fRVhQT1JU
KQorI2RlZmluZSBKU19FWFBPUlQKKyNlbGlmIGRlZmluZWQoX19HTlVDX18pICYmICFkZWZpbmVk
KF9fQ0NfQVJNKSAmJiAhZGVmaW5lZChfX0FSTUNDX18pCisjZGVmaW5lIEpTX0VYUE9SVCBfX2F0
dHJpYnV0ZV9fKCh2aXNpYmlsaXR5KCJkZWZhdWx0IikpKQorI2VsaWYgZGVmaW5lZChXSU4zMikg
fHwgZGVmaW5lZChfV0lOMzIpIHx8IGRlZmluZWQoX1dJTjMyX1dDRSkgfHwgZGVmaW5lZChfX0ND
X0FSTSkgfHwgZGVmaW5lZChfX0FSTUNDX18pCisjaWYgZGVmaW5lZChCVUlMRElOR19KYXZhU2Ny
aXB0Q29yZSkgfHwgZGVmaW5lZChCVUlMRElOR19XVEYpCisjZGVmaW5lIEpTX0VYUE9SVCBfX2Rl
Y2xzcGVjKGRsbGV4cG9ydCkKKyNlbHNlCisjZGVmaW5lIEpTX0VYUE9SVCBfX2RlY2xzcGVjKGRs
bGltcG9ydCkKKyNlbmRpZgorI2Vsc2UgLyogIWRlZmluZWQoSlNfTk9fRVhQT1JUKSAqLworI2Rl
ZmluZSBKU19FWFBPUlQKKyNlbmRpZiAvKiBkZWZpbmVkKEpTX05PX0VYUE9SVCkgKi8KKworLyog
SlMgdGVzdHMgdXNlcyBXVEYgYnV0IGhhcyBubyBjb25maWcuaCwgc28gd2UgbmVlZCB0byBzZXQg
dGhlIGV4cG9ydCBkZWZpbmVzIGhlcmUuICovCisjaWZuZGVmIFdURl9FWFBPUlRfUFJJVkFURQor
I2RlZmluZSBXVEZfRVhQT1JUX1BSSVZBVEUgSlNfRVhQT1JUCisjZW5kaWYKKworLyogSmF2YVNj
cmlwdCBlbmdpbmUgaW50ZXJmYWNlICovCisKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9wYXF1ZUpT
Q29udGV4dEdyb3VwKiBKU0NvbnRleHRHcm91cFJlZjsKK3R5cGVkZWYgY29uc3Qgc3RydWN0IE9w
YXF1ZUpTQ29udGV4dCogSlNDb250ZXh0UmVmOwordHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNDb250
ZXh0KiBKU0dsb2JhbENvbnRleHRSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU1N0cmluZyog
SlNTdHJpbmdSZWY7Cit0eXBlZGVmIHN0cnVjdCBPcGFxdWVKU0NsYXNzKiBKU0NsYXNzUmVmOwor
dHlwZWRlZiBzdHJ1Y3QgT3BhcXVlSlNQcm9wZXJ0eU5hbWVBcnJheSogSlNQcm9wZXJ0eU5hbWVB
cnJheVJlZjsKK3R5cGVkZWYgc3RydWN0IE9wYXF1ZUpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3Iq
IEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JSZWY7CisKKy8vIEVORAorLy8gLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKwor
I2luY2x1ZGUgPHY4Lmg+CisjaW5jbHVkZSA8d3RmL0hhc2hGdW5jdGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvSGFzaFRyYWl0cy5oPgorI2luY2x1ZGUgPHd0Zi9SZWZDb3VudGVkLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorCituYW1lc3BhY2UgVjhKU0NBUElTaGltIHsKKwordm9pZCB3ZWFr
UmVmZXJlbmNlRGVzdHJveWVyQ2FsbGJhY2sodjg6OlBlcnNpc3RlbnQ8djg6OlZhbHVlPiwgdm9p
ZCopOworCisvLyBSZWZjb3VudGVkIHdyYXBwZXIgdGhhdCBob2xkcyBhIFBlcnNpc3RlbnQuCit0
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4KK2NsYXNzIFdyYXBwZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxX
cmFwcGVyPFQ+ID4geworcHVibGljOgorICAgIHN0YXRpYyBQYXNzUmVmUHRyPFdyYXBwZXI8VD4g
PiBjcmVhdGUodjg6OkhhbmRsZTxUPiB2YWx1ZSkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9w
dFJlZihuZXcgV3JhcHBlcjxUPih2YWx1ZSkpOworICAgIH0KKyAgICBzdGF0aWMgUGFzc1JlZlB0
cjxXcmFwcGVyPFQ+ID4gY3JlYXRlKCkKKyAgICB7CisgICAgICAgIHJldHVybiBhZG9wdFJlZihu
ZXcgV3JhcHBlcjxUPigpKTsKKyAgICB9CisKKyAgICB2ODo6SGFuZGxlPFQ+IGdldCgpIGNvbnN0
IHsgcmV0dXJuIG1fdmFsdWU7IH0KKyAgICBib29sIGlzRW1wdHkoKSBjb25zdCB7IHJldHVybiBt
X3ZhbHVlLklzRW1wdHkoKTsgfQorCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBSZWZDb3Vu
dGVkPFdyYXBwZXI8VD4gPjsKKworICAgIFdyYXBwZXIoKSB7IH0KKyAgICBleHBsaWNpdCBXcmFw
cGVyKHY4OjpIYW5kbGU8VD4gdmFsdWUpOworCisgICAgfldyYXBwZXIoKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fdmFsdWUuSXNFbXB0eSgpKQorICAgICAgICAgICByZXR1cm47CisgICAgICAgIG1f
dmFsdWUuRGlzcG9zZSgpOworICAgICAgICBtX3ZhbHVlLkNsZWFyKCk7CisgICAgfQorCisgICAg
djg6OlBlcnNpc3RlbnQ8VD4gbV92YWx1ZTsKK307CisKK3RlbXBsYXRlIDx0eXBlbmFtZSBUPgor
aW5saW5lIFdyYXBwZXI8VD46OldyYXBwZXIodjg6OkhhbmRsZTxUPiB2YWx1ZSkKK3sKKyAgICB2
ODo6SGFuZGxlU2NvcGUgc2NvcGU7CisgICAgQVNTRVJUKCF2YWx1ZS5Jc0VtcHR5KCkpOworICAg
IG1fdmFsdWUgPSB2ODo6UGVyc2lzdGVudDxUPjo6TmV3KHZhbHVlKTsKK30KKwordHlwZWRlZiBX
cmFwcGVyPHY4OjpPYmplY3Q+IE9iamVjdFdyYXBwZXI7Cit0eXBlZGVmIFdyYXBwZXI8djg6OlZh
bHVlPiBWYWx1ZVdyYXBwZXI7CisKKy8vIFdlIHVzZSBzbWFydCBwb2ludGVycyB0byBmaWxsIHRo
ZSBnYXAgYmV0d2VlbiB0aGUgaW1wbGljaXQKKy8vIG1lbW9yeSBoYW5kbGluZyBpbiBKYXZhU2Ny
aXB0Q29yZSBhbmQgdGhlIEhhbmRsZSBjb25jZXB0IG9mIHY4LgorLy8gV2UgbmVlZCB0byBjb25z
dHVtaXplIFJlZlB0ciB0byBiZSBwb3NzaWJsZSB0byBjYXN0IGZyb20KKy8vIEpTT2JqZWN0UmVm
IHRvIEpTVmFsdWVSZWYgYW5kIHRvIGFzc2lnbiBudWxsIHRvIGVhY2guCisKK2NsYXNzIE9iamVj
dFdyYXBwZXJSZWZQdHIgOiBwdWJsaWMgUmVmUHRyPE9iamVjdFdyYXBwZXI+IHsKKyAgICB0eXBl
ZGVmIFJlZlB0cjxPYmplY3RXcmFwcGVyPiBCYXNlOworICAgIHR5cGVkZWYgUGFzc1JlZlB0cjxP
YmplY3RXcmFwcGVyPiBQYXNzQmFzZTsKK3B1YmxpYzoKKyAgICBPYmplY3RXcmFwcGVyUmVmUHRy
KCkKKyAgICAgICAgOiBCYXNlKCkKKyAgICB7IH0KKyAgICBPYmplY3RXcmFwcGVyUmVmUHRyKGNv
bnN0IFBhc3NCYXNlJiBwdHIpCisgICAgICAgIDogQmFzZShwdHIpCisgICAgeyB9CisgICAgT2Jq
ZWN0V3JhcHBlclJlZlB0ciYgb3BlcmF0b3IgPShjb25zdCBQYXNzQmFzZSYgcHRyKQorICAgIHsK
KyAgICAgICAgKnN0YXRpY19jYXN0PEJhc2UqPih0aGlzKSA9IHB0cjsKKyAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgIH0KKyAgICBPYmplY3RXcmFwcGVyUmVmUHRyKHZvaWQqIHB0cikKKyAgICAg
ICAgOiBCYXNlKCkKKyAgICB7CisgICAgICAgIENPTVBJTEVfQVNTRVJUKCFwdHIsIG9ubHlfbnVs
bF9pc19hbGxvd2VkX3RvX2JlX3Bhc3NlZF9hc19yYXdfcG9pbnRlcik7CisgICAgfQorICAgIE9i
amVjdFdyYXBwZXJSZWZQdHImIG9wZXJhdG9yID0odm9pZCogcHRyKQorICAgIHsKKyAgICAgICAg
KnRoaXMgPSBPYmplY3RXcmFwcGVyUmVmUHRyKCk7CisgICAgICAgIENPTVBJTEVfQVNTRVJUKCFw
dHIsIG9ubHlfbnVsbF9pc19hbGxvd2VkX3RvX2JlX3Bhc3NlZF9hc19yYXdfcG9pbnRlcik7Cisg
ICAgICAgIHJldHVybiAqdGhpczsKKyAgICB9Cit9OworCitjbGFzcyBWYWx1ZVdyYXBwZXJSZWZQ
dHIgOiBwdWJsaWMgUmVmUHRyPFZhbHVlV3JhcHBlcj4geworICAgIHR5cGVkZWYgUmVmUHRyPFZh
bHVlV3JhcHBlcj4gQmFzZTsKKyAgICB0eXBlZGVmIFBhc3NSZWZQdHI8VmFsdWVXcmFwcGVyPiBQ
YXNzQmFzZTsKK3B1YmxpYzoKKyAgICBWYWx1ZVdyYXBwZXJSZWZQdHIoKQorICAgICAgICA6IEJh
c2UoKQorICAgIHsgfQorICAgIFZhbHVlV3JhcHBlclJlZlB0cihjb25zdCBQYXNzQmFzZSYgcHRy
KQorICAgICAgICA6IEJhc2UocHRyKQorICAgIHsgfQorICAgIFZhbHVlV3JhcHBlclJlZlB0ciYg
b3BlcmF0b3IgPShjb25zdCBQYXNzQmFzZSYgcHRyKQorICAgIHsKKyAgICAgICAgKnN0YXRpY19j
YXN0PFJlZlB0cjxWYWx1ZVdyYXBwZXI+Kj4odGhpcykgPSBwdHI7CisgICAgICAgIHJldHVybiAq
dGhpczsKKyAgICB9CisgICAgVmFsdWVXcmFwcGVyUmVmUHRyKHZvaWQqIHB0cikKKyAgICAgICAg
OiBCYXNlKCkKKyAgICB7CisgICAgICAgIENPTVBJTEVfQVNTRVJUKCFwdHIsIHNob3VsZF9vbmx5
X3Bhc3NfbnVsbF9hc19yYXdfcG9pbnRlcik7CisgICAgfQorICAgIFZhbHVlV3JhcHBlclJlZlB0
ciYgb3BlcmF0b3IgPSh2b2lkKiBwdHIpCisgICAgeworICAgICAgICAqdGhpcyA9IFZhbHVlV3Jh
cHBlclJlZlB0cigpOworICAgICAgICBDT01QSUxFX0FTU0VSVCghcHRyLCBvbmx5X251bGxfaXNf
YWxsb3dlZF90b19iZV9wYXNzZWRfYXNfcmF3X3BvaW50ZXIpOworICAgICAgICByZXR1cm4gKnRo
aXM7CisgICAgfQorICAgIFZhbHVlV3JhcHBlclJlZlB0cihjb25zdCBPYmplY3RXcmFwcGVyUmVm
UHRyJiBwdHIpCisgICAgICAgIDogQmFzZShWYWx1ZVdyYXBwZXI6OmNyZWF0ZSh2ODo6SGFuZGxl
PHY4OjpWYWx1ZT4ocHRyLT5nZXQoKSkpKQorICAgIHsgfQorICAgIFZhbHVlV3JhcHBlclJlZlB0
cihjb25zdCBQYXNzUmVmUHRyPE9iamVjdFdyYXBwZXI+JiBwdHIpCisgICAgICAgIDogQmFzZShW
YWx1ZVdyYXBwZXI6OmNyZWF0ZSh2ODo6SGFuZGxlPHY4OjpWYWx1ZT4ocHRyLmxlYWtSZWYoKS0+
Z2V0KCkpKSkKKyAgICB7IH0KKworICAgIC8vIEMgc3R5bGUgY2FzdDogKEpTT2JqZWN0UmVmKXZh
bHVlCisgICAgb3BlcmF0b3IgUGFzc1JlZlB0cjxPYmplY3RXcmFwcGVyPiAoKQorICAgIHsKKyAg
ICAgICAgQVNTRVJUKGdldCgpLT5nZXQoKS0+SXNPYmplY3QoKSk7CisgICAgICAgIHJldHVybiBP
YmplY3RXcmFwcGVyOjpjcmVhdGUoZ2V0KCktPmdldCgpLkFzPHY4OjpPYmplY3Q+KCkpOworICAg
IH0KK307CisKK30gLy8gbmFtZXNjcGFjZSBWOEpTQ0FQSVNoaW0KKwordHlwZWRlZiBWOEpTQ0FQ
SVNoaW06OlZhbHVlV3JhcHBlclJlZlB0ciBKU1ZhbHVlUmVmOwordHlwZWRlZiBWOEpTQ0FQSVNo
aW06Ok9iamVjdFdyYXBwZXJSZWZQdHIgSlNPYmplY3RSZWY7CisKKyNpZmRlZiBfX2NwbHVzcGx1
cworZXh0ZXJuICJDIiB7CisjZW5kaWYKKworLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKy8vIEJFR0lOIEFQSSBjb21p
bmcgZnJvbSB0aGUgb3JpZ2luYWwgSlNCYXNlLmgKKworLyogU2NyaXB0IEV2YWx1YXRpb24gKi8K
KworLyohCitAZnVuY3Rpb24gSlNFdmFsdWF0ZVNjcmlwdAorQGFic3RyYWN0IEV2YWx1YXRlcyBh
IHN0cmluZyBvZiBKYXZhU2NyaXB0LgorQHBhcmFtIGN0eCBUaGUgZXhlY3V0aW9uIGNvbnRleHQg
dG8gdXNlLgorQHBhcmFtIHNjcmlwdCBBIEpTU3RyaW5nIGNvbnRhaW5pbmcgdGhlIHNjcmlwdCB0
byBldmFsdWF0ZS4KK0BwYXJhbSB0aGlzT2JqZWN0IFRoZSBvYmplY3QgdG8gdXNlIGFzICJ0aGlz
LCIgb3IgTlVMTCB0byB1c2UgdGhlIGdsb2JhbCBvYmplY3QgYXMgInRoaXMuIgorQHBhcmFtIHNv
dXJjZVVSTCBBIEpTU3RyaW5nIGNvbnRhaW5pbmcgYSBVUkwgZm9yIHRoZSBzY3JpcHQncyBzb3Vy
Y2UgZmlsZS4gVGhpcyBpcyBvbmx5IHVzZWQgd2hlbiByZXBvcnRpbmcgZXhjZXB0aW9ucy4gUGFz
cyBOVUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBpbmNsdWRlIHNvdXJjZSBmaWxlIGluZm9ybWF0
aW9uIGluIGV4Y2VwdGlvbnMuCitAcGFyYW0gc3RhcnRpbmdMaW5lTnVtYmVyIEFuIGludGVnZXIg
dmFsdWUgc3BlY2lmeWluZyB0aGUgc2NyaXB0J3Mgc3RhcnRpbmcgbGluZSBudW1iZXIgaW4gdGhl
IGZpbGUgbG9jYXRlZCBhdCBzb3VyY2VVUkwuIFRoaXMgaXMgb25seSB1c2VkIHdoZW4gcmVwb3J0
aW5nIGV4Y2VwdGlvbnMuCitAcGFyYW0gZXhjZXB0aW9uIEEgcG9pbnRlciB0byBhIEpTVmFsdWVS
ZWYgaW4gd2hpY2ggdG8gc3RvcmUgYW4gZXhjZXB0aW9uLCBpZiBhbnkuIFBhc3MgTlVMTCBpZiB5
b3UgZG8gbm90IGNhcmUgdG8gc3RvcmUgYW4gZXhjZXB0aW9uLgorQHJlc3VsdCBUaGUgSlNWYWx1
ZSB0aGF0IHJlc3VsdHMgZnJvbSBldmFsdWF0aW5nIHNjcmlwdCwgb3IgTlVMTCBpZiBhbiBleGNl
cHRpb24gaXMgdGhyb3duLgorKi8KK0pTX0VYUE9SVCBKU1ZhbHVlUmVmIEpTRXZhbHVhdGVTY3Jp
cHQoSlNDb250ZXh0UmVmIGN0eCwgSlNTdHJpbmdSZWYgc2NyaXB0LCBKU09iamVjdFJlZiB0aGlz
T2JqZWN0LCBKU1N0cmluZ1JlZiBzb3VyY2VVUkwsIGludCBzdGFydGluZ0xpbmVOdW1iZXIsIEpT
VmFsdWVSZWYqIGV4Y2VwdGlvbik7CisKKy8qIQorQGZ1bmN0aW9uIEpTQ2hlY2tTY3JpcHRTeW50
YXgKK0BhYnN0cmFjdCBDaGVja3MgZm9yIHN5bnRheCBlcnJvcnMgaW4gYSBzdHJpbmcgb2YgSmF2
YVNjcmlwdC4KK0BwYXJhbSBjdHggVGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHVzZS4KK0BwYXJh
bSBzY3JpcHQgQSBKU1N0cmluZyBjb250YWluaW5nIHRoZSBzY3JpcHQgdG8gY2hlY2sgZm9yIHN5
bnRheCBlcnJvcnMuCitAcGFyYW0gc291cmNlVVJMIEEgSlNTdHJpbmcgY29udGFpbmluZyBhIFVS
TCBmb3IgdGhlIHNjcmlwdCdzIHNvdXJjZSBmaWxlLiBUaGlzIGlzIG9ubHkgdXNlZCB3aGVuIHJl
cG9ydGluZyBleGNlcHRpb25zLiBQYXNzIE5VTEwgaWYgeW91IGRvIG5vdCBjYXJlIHRvIGluY2x1
ZGUgc291cmNlIGZpbGUgaW5mb3JtYXRpb24gaW4gZXhjZXB0aW9ucy4KK0BwYXJhbSBzdGFydGlu
Z0xpbmVOdW1iZXIgQW4gaW50ZWdlciB2YWx1ZSBzcGVjaWZ5aW5nIHRoZSBzY3JpcHQncyBzdGFy
dGluZyBsaW5lIG51bWJlciBpbiB0aGUgZmlsZSBsb2NhdGVkIGF0IHNvdXJjZVVSTC4gVGhpcyBp
cyBvbmx5IHVzZWQgd2hlbiByZXBvcnRpbmcgZXhjZXB0aW9ucy4KK0BwYXJhbSBleGNlcHRpb24g
QSBwb2ludGVyIHRvIGEgSlNWYWx1ZVJlZiBpbiB3aGljaCB0byBzdG9yZSBhIHN5bnRheCBlcnJv
ciBleGNlcHRpb24sIGlmIGFueS4gUGFzcyBOVUxMIGlmIHlvdSBkbyBub3QgY2FyZSB0byBzdG9y
ZSBhIHN5bnRheCBlcnJvciBleGNlcHRpb24uCitAcmVzdWx0IHRydWUgaWYgdGhlIHNjcmlwdCBp
cyBzeW50YWN0aWNhbGx5IGNvcnJlY3QsIG90aGVyd2lzZSBmYWxzZS4KKyovCitKU19FWFBPUlQg
Ym9vbCBKU0NoZWNrU2NyaXB0U3ludGF4KEpTQ29udGV4dFJlZiBjdHgsIEpTU3RyaW5nUmVmIHNj
cmlwdCwgSlNTdHJpbmdSZWYgc291cmNlVVJMLCBpbnQgc3RhcnRpbmdMaW5lTnVtYmVyLCBKU1Zh
bHVlUmVmKiBleGNlcHRpb24pOworCisvKiEKK0BmdW5jdGlvbiBKU0dhcmJhZ2VDb2xsZWN0CitA
YWJzdHJhY3QgUGVyZm9ybXMgYSBKYXZhU2NyaXB0IGdhcmJhZ2UgY29sbGVjdGlvbi4KK0BwYXJh
bSBjdHggVGhlIGV4ZWN1dGlvbiBjb250ZXh0IHRvIHVzZS4KK0BkaXNjdXNzaW9uIEphdmFTY3Jp
cHQgdmFsdWVzIHRoYXQgYXJlIG9uIHRoZSBtYWNoaW5lIHN0YWNrLCBpbiBhIHJlZ2lzdGVyLAor
IHByb3RlY3RlZCBieSBKU1ZhbHVlUHJvdGVjdCwgc2V0IGFzIHRoZSBnbG9iYWwgb2JqZWN0IG9m
IGFuIGV4ZWN1dGlvbiBjb250ZXh0LAorIG9yIHJlYWNoYWJsZSBmcm9tIGFueSBzdWNoIHZhbHVl
IHdpbGwgbm90IGJlIGNvbGxlY3RlZC4KKworIER1cmluZyBKYXZhU2NyaXB0IGV4ZWN1dGlvbiwg
eW91IGFyZSBub3QgcmVxdWlyZWQgdG8gY2FsbCB0aGlzIGZ1bmN0aW9uOyB0aGUKKyBKYXZhU2Ny
aXB0IGVuZ2luZSB3aWxsIGdhcmJhZ2UgY29sbGVjdCBhcyBuZWVkZWQuIEphdmFTY3JpcHQgdmFs
dWVzIGNyZWF0ZWQKKyB3aXRoaW4gYSBjb250ZXh0IGdyb3VwIGFyZSBhdXRvbWF0aWNhbGx5IGRl
c3Ryb3llZCB3aGVuIHRoZSBsYXN0IHJlZmVyZW5jZQorIHRvIHRoZSBjb250ZXh0IGdyb3VwIGlz
IHJlbGVhc2VkLgorKi8KK0pTX0VYUE9SVCB2b2lkIEpTR2FyYmFnZUNvbGxlY3QoSlNDb250ZXh0
UmVmIGN0eCk7CisKKyNpZmRlZiBfX2NwbHVzcGx1cworfQorI2VuZGlmCisKKy8vIEVORAorLy8g
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KKworI2VuZGlmIC8qIEpTQmFzZV9oICovCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9K
U0NvbnRleHRSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmQ5MTRhM2QxODlmNDRmNDU0OWE1NDNiNGFjMDlm
MmY0MDcwZWQzODcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9W
OEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmNwcApAQCAtMCwwICsxLDEz
MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxs
IHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6
ZWdlZC4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgor
I2luY2x1ZGUgIkpTQ29udGV4dFJlZi5oIgorCisjaW5jbHVkZSAiQVBJQ2FzdC5oIgorI2luY2x1
ZGUgIkNsYXNzV3JhcHBlci5oIgorI2luY2x1ZGUgIkpTQmFzZS5oIgorI2luY2x1ZGUgIlY4SlND
QVBJU2hpbU1hY3Jvcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3Rm
L1RocmVhZGluZy5oPgorCit1c2luZyBuYW1lc3BhY2Ugdjg7Cit1c2luZyBuYW1lc3BhY2UgVjhK
U0NBUElTaGltOworCitjbGFzcyBJc29sYXRlV3JhcHBlciA6IHB1YmxpYyBSZWZDb3VudGVkPElz
b2xhdGVXcmFwcGVyPiB7CitwdWJsaWM6CisgICAgc3RhdGljIFBhc3NSZWZQdHI8SXNvbGF0ZVdy
YXBwZXI+IGNyZWF0ZSh2ODo6SXNvbGF0ZSogaXNvbGF0ZSkKKyAgICB7CisgICAgICAgIHJldHVy
biBhZG9wdFJlZihuZXcgSXNvbGF0ZVdyYXBwZXIoaXNvbGF0ZSkpOworICAgIH0KKyAgICB2ODo6
SXNvbGF0ZSogZ2V0KCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBtX2lzb2xhdGU7Cisg
ICAgfQorcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgUmVmQ291bnRlZDxJc29sYXRlV3JhcHBl
cj47CisKKyAgICBleHBsaWNpdCBJc29sYXRlV3JhcHBlcih2ODo6SXNvbGF0ZSogaXNvbGF0ZSkg
OiBtX2lzb2xhdGUoaXNvbGF0ZSkgeyB9CisKKyAgICB+SXNvbGF0ZVdyYXBwZXIoKQorICAgIHsK
KyAgICAgICAgaWYgKHY4OjpJc29sYXRlOjpHZXRDdXJyZW50KCkgPT0gbV9pc29sYXRlKQorICAg
ICAgICAgICAgbV9pc29sYXRlLT5FeGl0KCk7CisgICAgICAgIG1faXNvbGF0ZS0+RGlzcG9zZSgp
OworICAgIH0KKworICAgIHY4OjpJc29sYXRlKiBtX2lzb2xhdGU7Cit9OworCitpbmxpbmUgSXNv
bGF0ZVdyYXBwZXIqIHRvSW1wbChKU0NvbnRleHRHcm91cFJlZiByZWYpCit7CisgICAgcmV0dXJu
IHJlaW50ZXJwcmV0X2Nhc3Q8SXNvbGF0ZVdyYXBwZXIqPihjb25zdF9jYXN0PE9wYXF1ZUpTQ29u
dGV4dEdyb3VwKj4ocmVmKSk7Cit9CisKK2lubGluZSBKU0NvbnRleHRHcm91cFJlZiB0b1JlZih2
ODo6SXNvbGF0ZSogaXNvbGF0ZSkKK3sKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxKU0Nv
bnRleHRHcm91cFJlZj4oSXNvbGF0ZVdyYXBwZXI6OmNyZWF0ZShpc29sYXRlKS5sZWFrUmVmKCkp
OworfQorCitKU0NvbnRleHRHcm91cFJlZiBKU0NvbnRleHRHcm91cENyZWF0ZSgpCit7CisgICAg
V1RGOjppbml0aWFsaXplVGhyZWFkaW5nKCk7CisKKyAgICBJc29sYXRlKiBpc29sYXRlID0gSXNv
bGF0ZTo6TmV3KCk7CisgICAgaXNvbGF0ZS0+RW50ZXIoKTsKKyAgICByZXR1cm4gdG9SZWYoaXNv
bGF0ZSk7Cit9CisKK0pTQ29udGV4dEdyb3VwUmVmIEpTQ29udGV4dEdyb3VwUmV0YWluKEpTQ29u
dGV4dEdyb3VwUmVmIGdyb3VwKQoreworICAgIHRvSW1wbChncm91cCktPnJlZigpOworICAgIHJl
dHVybiBncm91cDsKK30KKwordm9pZCBKU0NvbnRleHRHcm91cFJlbGVhc2UoSlNDb250ZXh0R3Jv
dXBSZWYgZ3JvdXApCit7CisgICAgdG9JbXBsKGdyb3VwKS0+ZGVyZWYoKTsKK30KKworSlNHbG9i
YWxDb250ZXh0UmVmIEpTR2xvYmFsQ29udGV4dENyZWF0ZShKU0NsYXNzUmVmIGdsb2JhbE9iamVj
dENsYXNzKQoreworICAgIFdURjo6aW5pdGlhbGl6ZVRocmVhZGluZygpOworCisgICAgLy8gV2Ug
cmVseSBvbiB2OCB0byBpbXBsaWNpdGx5IGVudGVyIHRvIHRoZSBjb250ZXh0LgorCisgICAgSGFu
ZGxlU2NvcGUgc2NvcGU7CisgICAgaWYgKCFnbG9iYWxPYmplY3RDbGFzcykKKyAgICAgICAgcmV0
dXJuIHRvR2xvYmFsUmVmKENvbnRleHQ6Ok5ldygpKTsKKyAgICBDbGFzc1dyYXBwZXIqIGdsb2Jh
bENsYXNzID0gdG9JbXBsKGdsb2JhbE9iamVjdENsYXNzKTsKKyAgICBMb2NhbDxPYmplY3RUZW1w
bGF0ZT4gZ2xvYmFsVCA9IGdsb2JhbENsYXNzLT5mdW5jdGlvblRlbXBsYXRlKCktPkluc3RhbmNl
VGVtcGxhdGUoKTsKKyAgICBQZXJzaXN0ZW50PENvbnRleHQ+IG5ld0NvbnRleHQgPSBDb250ZXh0
OjpOZXcoMCwgZ2xvYmFsVCk7CisgICAgbmV3Q29udGV4dC5NYWtlV2VhaygwLCAmd2Vha1JlZmVy
ZW5jZURlc3Ryb3llckNhbGxiYWNrKTsKKyAgICByZXR1cm4gdG9HbG9iYWxSZWYobmV3Q29udGV4
dCk7Cit9CisKK0pTR2xvYmFsQ29udGV4dFJlZiBKU0dsb2JhbENvbnRleHRDcmVhdGVJbkdyb3Vw
KEpTQ29udGV4dEdyb3VwUmVmIGdyb3VwLCBKU0NsYXNzUmVmIGdsb2JhbE9iamVjdENsYXNzKQor
eworICAgIHJldHVybiBKU0dsb2JhbENvbnRleHRDcmVhdGUoZ2xvYmFsT2JqZWN0Q2xhc3MpOwor
fQorCitKU0dsb2JhbENvbnRleHRSZWYgSlNHbG9iYWxDb250ZXh0UmV0YWluKEpTR2xvYmFsQ29u
dGV4dFJlZiBjb250ZXh0KQoreworICAgIHRvSW1wbChjb250ZXh0KS0+cmVmKCk7CisgICAgcmV0
dXJuIGNvbnRleHQ7Cit9CisKK3ZvaWQgSlNHbG9iYWxDb250ZXh0UmVsZWFzZShKU0dsb2JhbENv
bnRleHRSZWYgY29udGV4dCkKK3sKKyAgICB0b0ltcGwoY29udGV4dCktPmRlcmVmKCk7Cit9CisK
K0pTT2JqZWN0UmVmIEpTQ29udGV4dEdldEdsb2JhbE9iamVjdChKU0NvbnRleHRSZWYgY29udGV4
dCkKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgcmV0dXJuIHRvUmVmKHRvVjgo
Y29udGV4dCktPkdsb2JhbCgpKTsKK30KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU0NvbnRleHRSZWYu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi5mN2U1N2JlODNiY2ExZDEwMzNiYmZiNDAwODgxNGM2ODI3MzQ2YTBlCi0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0ph
dmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oCkBAIC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZh
U2NyaXB0Q29yZS9BUEkvSlNDb250ZXh0UmVmLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNPYmplY3RSZWYuY3BwIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTT2Jq
ZWN0UmVmLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi40YzRkODI1NTZkZTZmYTdlNjE3NjI3OTIyOGUyYThjMGQ4
MTgyMzZmCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NB
UElTaGltL0phdmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmNwcApAQCAtMCwwICsxLDU1NCBAQAor
LyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0
cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4g
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRP
LCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVW
RU5UIFNIQUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVY
RU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7
IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBU
SU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBX
SEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVE
SU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRI
RSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lC
SUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5oIgorI2luY2x1
ZGUgIkpTT2JqZWN0UmVmLmgiCisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQ2xh
c3NXcmFwcGVyLmgiCisjaW5jbHVkZSAiT3BhcXVlSlNTdHJpbmcuaCIKKyNpbmNsdWRlICJWOEpT
Q0FQSVNoaW1NYWNyb3MuaCIKKyNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgorI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KKwordXNpbmcgbmFtZXNwYWNlIHY4OworCitjb25zdCBKU0NsYXNzRGVmaW5p
dGlvbiBrSlNDbGFzc0RlZmluaXRpb25FbXB0eSA9IHsgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwg
MCwgMCwgMCwgMCwgMCwgMCwgMCwgMCwgMCB9OworCituYW1lc3BhY2UgVjhKU0NBUElTaGltIHsK
Kwordm9pZCB3ZWFrUmVmZXJlbmNlRGVzdHJveWVyQ2FsbGJhY2soUGVyc2lzdGVudDxWYWx1ZT4g
cCwgdm9pZCopCit7CisgICAgcC5EaXNwb3NlKCk7CisgICAgcC5DbGVhcigpOworfQorCitzdGF0
aWMgSGFuZGxlPFZhbHVlPiBzdGF0aWNGdW5jdGlvbkNhbGxUaHVuayhjb25zdCBBcmd1bWVudHMm
IGFyZ3MpCit7CisgICAgSGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgSGFuZGxlPFZhbHVl
PiBkYXRhID0gYXJncy5EYXRhKCk7CisgICAgSlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNr
IGZ1bmNQdHIgPSBiaXR3aXNlX2Nhc3Q8SlNPYmplY3RDYWxsQXNGdW5jdGlvbkNhbGxiYWNrPihF
eHRlcm5hbDo6VW53cmFwKGRhdGEpKTsKKyAgICB1aW50IG5BcmdzID0gYXJncy5MZW5ndGgoKTsK
KyAgICBWZWN0b3I8SlNWYWx1ZVJlZj4gYXJnc1cobkFyZ3MpOworICAgIGZvciAodWludCBpID0g
MDsgaSA8IG5BcmdzOyArK2kpCisgICAgICAgIGFyZ3NXW2ldID0gdG9SZWYoYXJnc1tpXSk7CisK
KyAgICBIYW5kbGU8Q29udGV4dD4gY29udGV4dCA9IENvbnRleHQ6OkdldEN1cnJlbnQoKTsKKyAg
ICBSZWZQdHI8Q29udGV4dFdyYXBwZXI+IGNvbnRleHRXID0gQ29udGV4dFdyYXBwZXI6OmNyZWF0
ZShjb250ZXh0KTsKKworICAgIENPTVBJTEVfQVNTRVJUKHNpemVvZihKU1ZhbHVlUmVmKSA9PSBz
aXplb2Yodm9pZCopLCBKU1ZhbHVlUmVmX211c3RfYmVfcG9pbnRlcl9zaXplZCk7CisgICAgY29u
c3QgSlNWYWx1ZVJlZiogYXJnc0FzQVBJID0gcmVpbnRlcnByZXRfY2FzdDxjb25zdCBKU1ZhbHVl
UmVmKj4oYXJnc1cuZGF0YSgpKTsKKworICAgIEpTVmFsdWVSZWYgZXhjZXB0aW9uOworICAgIEpT
VmFsdWVSZWYgcmVzdWx0KGZ1bmNQdHIodG9SZWYoY29udGV4dFcpLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgdG9SZWYoYXJncy5DYWxsZWUoKS5BczxPYmplY3Q+KCkpLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgdG9SZWYoYXJncy5UaGlzKCkpLAorICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgbkFyZ3MsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBh
cmdzQXNBUEksCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmZXhjZXB0aW9uKSk7Cisg
ICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgVGhyb3dFeGNlcHRpb24oZXhjZXB0aW9uLT5nZXQo
KSk7CisKKyAgICByZXR1cm4gaGFuZGxlU2NvcGUuQ2xvc2UocmVzdWx0LT5nZXQoKSk7Cit9CisK
K3N0YXRpYyBIYW5kbGU8VmFsdWU+IHN0YXRpY1ZhbHVlR2V0dGVyVGh1bmsoTG9jYWw8djg6OlN0
cmluZz4gcHJvcGVydHksIGNvbnN0IEFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBIYW5kbGVT
Y29wZSBoYW5kbGVTY29wZTsKKyAgICBTdGF0aWNWYWx1ZUNhbGxiYWNrcyogY2FsbGJhY2tzID0g
Yml0d2lzZV9jYXN0PFN0YXRpY1ZhbHVlQ2FsbGJhY2tzKj4oRXh0ZXJuYWw6OlVud3JhcChpbmZv
LkRhdGEoKSkpOworICAgIEpTT2JqZWN0R2V0UHJvcGVydHlDYWxsYmFjayBmdW5jUHRyID0gY2Fs
bGJhY2tzLT5nZXRQcm9wOworICAgIFJlZlB0cjxDb250ZXh0V3JhcHBlcj4gY29udGV4dCA9IENv
bnRleHRXcmFwcGVyOjpjcmVhdGUoQ29udGV4dDo6R2V0Q3VycmVudCgpKTsKKyAgICBSZWZQdHI8
T3BhcXVlSlNTdHJpbmc+IHByb3AgPSBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHByb3BlcnR5KTsK
KyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHJlc3VsdChmdW5jUHRy
KHRvUmVmKGNvbnRleHQpLCB0b1JlZihpbmZvLlRoaXMoKSksIHByb3AuZ2V0KCksICZleGNlcHRp
b24pKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBUaHJvd0V4Y2VwdGlvbihleGNlcHRp
b24tPmdldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0ID8gaGFuZGxlU2NvcGUuQ2xvc2UocmVzdWx0
LT5nZXQoKSkgOiBIYW5kbGU8VmFsdWU+KCk7Cit9CisKK3N0YXRpYyB2b2lkIHN0YXRpY1ZhbHVl
U2V0dGVyVGh1bmsoTG9jYWw8djg6OlN0cmluZz4gcHJvcGVydHksIExvY2FsPFZhbHVlPiB2YWx1
ZSwgY29uc3QgQWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEhhbmRsZVNjb3BlIGhhbmRsZVNj
b3BlOworICAgIFN0YXRpY1ZhbHVlQ2FsbGJhY2tzKiBjYWxsYmFja3MgPSBiaXR3aXNlX2Nhc3Q8
U3RhdGljVmFsdWVDYWxsYmFja3MqPihFeHRlcm5hbDo6VW53cmFwKGluZm8uRGF0YSgpKSk7Cisg
ICAgSlNPYmplY3RTZXRQcm9wZXJ0eUNhbGxiYWNrIGZ1bmNQdHIgPSBjYWxsYmFja3MtPnNldFBy
b3A7CisgICAgUmVmUHRyPENvbnRleHRXcmFwcGVyPiBjb250ZXh0ID0gQ29udGV4dFdyYXBwZXI6
OmNyZWF0ZShDb250ZXh0OjpHZXRDdXJyZW50KCkpOworICAgIFJlZlB0cjxPcGFxdWVKU1N0cmlu
Zz4gcHJvcCA9IE9wYXF1ZUpTU3RyaW5nOjpjcmVhdGUocHJvcGVydHkpOworICAgIEpTVmFsdWVS
ZWYgZXhjZXB0aW9uOworICAgIGZ1bmNQdHIodG9SZWYoY29udGV4dCksIHRvUmVmKGluZm8uVGhp
cygpKSwgcHJvcC5nZXQoKSwgdG9SZWYodmFsdWUpLCAmZXhjZXB0aW9uKTsKKyAgICBpZiAoZXhj
ZXB0aW9uKQorICAgICAgICBUaHJvd0V4Y2VwdGlvbihleGNlcHRpb24tPmdldCgpKTsKK30KKwor
c3RhdGljIGlubGluZSBQcm9wZXJ0eUF0dHJpYnV0ZSB0b1Y4QXR0cmlidXRlcyhKU1Byb3BlcnR5
QXR0cmlidXRlcyBhdHRyaWJ1dGUpCit7CisgICAgaW50IHJlc3VsdCA9IHY4OjpOb25lOworICAg
IGlmIChhdHRyaWJ1dGUgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZVJlYWRPbmx5KQorICAgICAgICBy
ZXN1bHQgfD0gdjg6OlJlYWRPbmx5OworICAgIGlmIChhdHRyaWJ1dGUgJiBrSlNQcm9wZXJ0eUF0
dHJpYnV0ZURvbnRFbnVtKQorICAgICAgICByZXN1bHQgfD0gdjg6OkRvbnRFbnVtOworICAgIGlm
IChhdHRyaWJ1dGUgJiBrSlNQcm9wZXJ0eUF0dHJpYnV0ZURvbnREZWxldGUpCisgICAgICAgIHJl
c3VsdCB8PSB2ODo6RG9udERlbGV0ZTsKKyAgICByZXR1cm4gUHJvcGVydHlBdHRyaWJ1dGUocmVz
dWx0KTsKK30KKworc3RhdGljIEhhbmRsZTxWYWx1ZT4gZ2V0UHJvcGVydHlUaHVuayhMb2NhbDx2
ODo6U3RyaW5nPiBwcm9wZXJ0eSwgY29uc3QgQWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEhh
bmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIE5hbWVkUHJvcGVydHlDYWxsYmFja3MqIGNhbGxi
YWNrcyA9IGJpdHdpc2VfY2FzdDxOYW1lZFByb3BlcnR5Q2FsbGJhY2tzKj4oRXh0ZXJuYWw6OlVu
d3JhcChpbmZvLkRhdGEoKSkpOworICAgIEpTT2JqZWN0R2V0UHJvcGVydHlDYWxsYmFjayBmdW5j
UHRyID0gY2FsbGJhY2tzLT5nZXRQcm9wOworICAgIFJlZlB0cjxDb250ZXh0V3JhcHBlcj4gY29u
dGV4dCA9IENvbnRleHRXcmFwcGVyOjpjcmVhdGUoQ29udGV4dDo6R2V0Q3VycmVudCgpKTsKKyAg
ICBSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IHByb3AgPSBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHBy
b3BlcnR5KTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBKU1ZhbHVlUmVmIHJlc3Vs
dChmdW5jUHRyKHRvUmVmKGNvbnRleHQpLCB0b1JlZihpbmZvLlRoaXMoKSksIHByb3AuZ2V0KCks
ICZleGNlcHRpb24pKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBUaHJvd0V4Y2VwdGlv
bihleGNlcHRpb24tPmdldCgpKTsKKyAgICByZXR1cm4gcmVzdWx0ID8gaGFuZGxlU2NvcGUuQ2xv
c2UocmVzdWx0LT5nZXQoKSkgOiBIYW5kbGU8VmFsdWU+KCk7Cit9CisKK3N0YXRpYyBIYW5kbGU8
VmFsdWU+IHNldFByb3BlcnR5VGh1bmsoTG9jYWw8djg6OlN0cmluZz4gcHJvcGVydHksIExvY2Fs
PFZhbHVlPiB2YWx1ZSwgY29uc3QgQWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEhhbmRsZVNj
b3BlIGhhbmRsZVNjb3BlOworICAgIE5hbWVkUHJvcGVydHlDYWxsYmFja3MqIGNhbGxiYWNrcyA9
IGJpdHdpc2VfY2FzdDxOYW1lZFByb3BlcnR5Q2FsbGJhY2tzKj4oRXh0ZXJuYWw6OlVud3JhcChp
bmZvLkRhdGEoKSkpOworICAgIEpTT2JqZWN0U2V0UHJvcGVydHlDYWxsYmFjayBmdW5jUHRyID0g
Y2FsbGJhY2tzLT5zZXRQcm9wOworICAgIFJlZlB0cjxDb250ZXh0V3JhcHBlcj4gY29udGV4dCA9
IENvbnRleHRXcmFwcGVyOjpjcmVhdGUoQ29udGV4dDo6R2V0Q3VycmVudCgpKTsKKyAgICBSZWZQ
dHI8T3BhcXVlSlNTdHJpbmc+IHByb3AgPSBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHByb3BlcnR5
KTsKKyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gZnVu
Y1B0cih0b1JlZihjb250ZXh0KSwgdG9SZWYoaW5mby5UaGlzKCkpLCBwcm9wLmdldCgpLCB0b1Jl
Zih2YWx1ZSksICZleGNlcHRpb24pOworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIFRocm93
RXhjZXB0aW9uKGV4Y2VwdGlvbi0+Z2V0KCkpOworICAgIHJldHVybiBoYXNQcm9wZXJ0eSA/IGhh
bmRsZVNjb3BlLkNsb3NlKHZhbHVlKSA6IEhhbmRsZTxWYWx1ZT4oKTsKK30KKworc3RhdGljIEhh
bmRsZTxCb29sZWFuPiBwcm9wZXJ0eURlbGV0ZXJUaHVuayhMb2NhbDx2ODo6U3RyaW5nPiBwcm9w
ZXJ0eSwgY29uc3QgQWNjZXNzb3JJbmZvJiBpbmZvKQoreworICAgIEhhbmRsZVNjb3BlIGhhbmRs
ZVNjb3BlOworICAgIE5hbWVkUHJvcGVydHlDYWxsYmFja3MqIGNhbGxiYWNrcyA9IGJpdHdpc2Vf
Y2FzdDxOYW1lZFByb3BlcnR5Q2FsbGJhY2tzKj4oRXh0ZXJuYWw6OlVud3JhcChpbmZvLkRhdGEo
KSkpOworICAgIEpTT2JqZWN0RGVsZXRlUHJvcGVydHlDYWxsYmFjayBmdW5jUHRyID0gY2FsbGJh
Y2tzLT5kZWxldGVQcm9wOworICAgIFJlZlB0cjxDb250ZXh0V3JhcHBlcj4gY29udGV4dCA9IENv
bnRleHRXcmFwcGVyOjpjcmVhdGUoQ29udGV4dDo6R2V0Q3VycmVudCgpKTsKKyAgICBSZWZQdHI8
T3BhcXVlSlNTdHJpbmc+IHByb3AgPSBPcGFxdWVKU1N0cmluZzo6Y3JlYXRlKHByb3BlcnR5KTsK
KyAgICBKU1ZhbHVlUmVmIGV4Y2VwdGlvbjsKKyAgICBib29sIGhhc1Byb3BlcnR5ID0gZnVuY1B0
cih0b1JlZihjb250ZXh0KSwgdG9SZWYoaW5mby5UaGlzKCkpLCBwcm9wLmdldCgpLCAmZXhjZXB0
aW9uKTsKKyAgICBpZiAoZXhjZXB0aW9uKQorICAgICAgICBUaHJvd0V4Y2VwdGlvbihleGNlcHRp
b24tPmdldCgpKTsKKyAgICByZXR1cm4gQm9vbGVhbjo6TmV3KGhhc1Byb3BlcnR5KTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgVjhKU0NBUElTaGltCisKK3N0cnVjdCBPcGFxdWVKU1Byb3BlcnR5TmFt
ZUFjY3VtdWxhdG9yIHsKKyAgICBWZWN0b3I8SlNTdHJpbmdSZWY+IGRhdGE7Cit9OworCituYW1l
c3BhY2UgVjhKU0NBUElTaGltIHsKKworc3RhdGljIEhhbmRsZTxBcnJheT4gZ2V0UHJvcGVydHlO
YW1lc1RodW5rKGNvbnN0IEFjY2Vzc29ySW5mbyYgaW5mbykKK3sKKyAgICBIYW5kbGVTY29wZSBo
YW5kbGVTY29wZTsKKyAgICBOYW1lZFByb3BlcnR5Q2FsbGJhY2tzKiBjYWxsYmFja3MgPSBiaXR3
aXNlX2Nhc3Q8TmFtZWRQcm9wZXJ0eUNhbGxiYWNrcyo+KEV4dGVybmFsOjpVbndyYXAoaW5mby5E
YXRhKCkpKTsKKyAgICBKU09iamVjdEdldFByb3BlcnR5TmFtZXNDYWxsYmFjayBmdW5jUHRyID0g
Y2FsbGJhY2tzLT5nZXRQcm9wTmFtZXM7CisgICAgUmVmUHRyPENvbnRleHRXcmFwcGVyPiBjb250
ZXh0ID0gQ29udGV4dFdyYXBwZXI6OmNyZWF0ZShDb250ZXh0OjpHZXRDdXJyZW50KCkpOworICAg
IE9wYXF1ZUpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3IgYWNjdW11bGF0b3I7CisgICAgZnVuY1B0
cih0b1JlZihjb250ZXh0KSwgdG9SZWYoaW5mby5UaGlzKCkpLCAmYWNjdW11bGF0b3IpOworICAg
IGNvbnN0IFZlY3RvcjxKU1N0cmluZ1JlZj4mIGRhdGEgPSBhY2N1bXVsYXRvci5kYXRhOworICAg
IExvY2FsPEFycmF5PiByZXN1bHQgPSBBcnJheTo6TmV3KGRhdGEuc2l6ZSgpKTsKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgZGF0YS5zaXplKCk7ICsraSkgeworICAgICAgICBSZWZQdHI8
T3BhcXVlSlNTdHJpbmc+IG5hbWUgPSBhZG9wdFJlZihkYXRhW2ldKTsKKyAgICAgICAgcmVzdWx0
LT5TZXQoaSwgbmFtZS0+dG9WOFN0cmluZygpKTsKKyAgICB9CisgICAgcmV0dXJuIGhhbmRsZVNj
b3BlLkNsb3NlKHJlc3VsdCk7Cit9CisKK30gLy8gbmFtZXNwYWNlIFY4SlNDQVBJU2hpbQorCit1
c2luZyBuYW1lc3BhY2UgVjhKU0NBUElTaGltOworCitKU0NsYXNzUmVmIEpTQ2xhc3NDcmVhdGUo
Y29uc3QgSlNDbGFzc0RlZmluaXRpb24qIGRlZmluaXRpb24pCit7CisgICAgSGFuZGxlU2NvcGUg
aGFuZGxlU2NvcGU7CisKKyAgICBSZWZQdHI8Q2xhc3NXcmFwcGVyPiB3cmFwcGVyID0gQ2xhc3NX
cmFwcGVyOjpjcmVhdGUoZGVmaW5pdGlvbik7CisgICAgYm9vbCB1c2VQcm90byA9ICEoZGVmaW5p
dGlvbi0+YXR0cmlidXRlcyAmIGtKU0NsYXNzQXR0cmlidXRlTm9BdXRvbWF0aWNQcm90b3R5cGUp
OworICAgIEhhbmRsZTxGdW5jdGlvblRlbXBsYXRlPiBmdW5jVCA9IEZ1bmN0aW9uVGVtcGxhdGU6
Ok5ldygpOworICAgIGlmIChkZWZpbml0aW9uLT5wYXJlbnRDbGFzcykgeworICAgICAgICBDbGFz
c1dyYXBwZXIqIHBhcmVudCA9IHRvSW1wbChkZWZpbml0aW9uLT5wYXJlbnRDbGFzcyk7CisgICAg
ICAgIHdyYXBwZXItPnNldFBhcmVudChwYXJlbnQpOworICAgICAgICBmdW5jVC0+SW5oZXJpdChw
YXJlbnQtPmZ1bmN0aW9uVGVtcGxhdGUoKSk7CisgICAgfQorCisgICAgaWYgKGRlZmluaXRpb24t
PmNsYXNzTmFtZSkKKyAgICAgICAgZnVuY1QtPlNldENsYXNzTmFtZSh2ODo6U3RyaW5nOjpOZXco
ZGVmaW5pdGlvbi0+Y2xhc3NOYW1lKSk7CisKKyAgICBIYW5kbGU8T2JqZWN0VGVtcGxhdGU+IHBy
b3RvVCA9IGZ1bmNULT5Qcm90b3R5cGVUZW1wbGF0ZSgpOworICAgIEhhbmRsZTxPYmplY3RUZW1w
bGF0ZT4gb2JqVCA9IGZ1bmNULT5JbnN0YW5jZVRlbXBsYXRlKCk7CisgICAgb2JqVC0+U2V0SW50
ZXJuYWxGaWVsZENvdW50KDEpOworICAgIEhhbmRsZTxPYmplY3RUZW1wbGF0ZT4gc0Z1bmNzVGFy
Z2V0ID0gdXNlUHJvdG8gPyBwcm90b1QgOiBvYmpUOworICAgIGNvbnN0IEpTU3RhdGljRnVuY3Rp
b24qIHNGdW5jID0gZGVmaW5pdGlvbi0+c3RhdGljRnVuY3Rpb25zOworICAgIHdoaWxlIChzRnVu
YyAmJiBzRnVuYy0+bmFtZSkgeworICAgICAgICBBU1NFUlQoc0Z1bmMtPmNhbGxBc0Z1bmN0aW9u
KTsKKyAgICAgICAgUGVyc2lzdGVudDxWYWx1ZT4gZnVuY1B0ciA9IFBlcnNpc3RlbnQ8VmFsdWU+
OjpOZXcoRXh0ZXJuYWw6OldyYXAoYml0d2lzZV9jYXN0PHZvaWQqPihzRnVuYy0+Y2FsbEFzRnVu
Y3Rpb24pKSk7CisgICAgICAgIHdyYXBwZXItPnRha2VTdGF0aWNGdW5jUHRyKGZ1bmNQdHIpOwor
ICAgICAgICBzRnVuY3NUYXJnZXQtPlNldCh2ODo6U3RyaW5nOjpOZXcoc0Z1bmMtPm5hbWUpLCBG
dW5jdGlvblRlbXBsYXRlOjpOZXcoc3RhdGljRnVuY3Rpb25DYWxsVGh1bmssIGZ1bmNQdHIpLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICB0b1Y4QXR0cmlidXRlcyhzRnVuYy0+YXR0cmlidXRl
cykpOworICAgICAgICArK3NGdW5jOworICAgIH0KKworICAgIGNvbnN0IEpTU3RhdGljVmFsdWUq
IHNWYWx1ZSA9IGRlZmluaXRpb24tPnN0YXRpY1ZhbHVlczsKKyAgICB3aGlsZSAoc1ZhbHVlICYm
IHNWYWx1ZS0+bmFtZSkgeworICAgICAgICBTdGF0aWNWYWx1ZUNhbGxiYWNrcyogY2FsbGJhY2tz
ID0gbmV3IFN0YXRpY1ZhbHVlQ2FsbGJhY2tzOworICAgICAgICBjYWxsYmFja3MtPmdldFByb3Ag
PSBzVmFsdWUtPmdldFByb3BlcnR5OworICAgICAgICBjYWxsYmFja3MtPnNldFByb3AgPSBzVmFs
dWUtPnNldFByb3BlcnR5OworICAgICAgICBBU1NFUlQoIWNhbGxiYWNrcy0+aXNFbXB0eSgpKTsK
KyAgICAgICAgUGVyc2lzdGVudDxWYWx1ZT4gZGF0YSA9IFBlcnNpc3RlbnQ8VmFsdWU+OjpOZXco
RXh0ZXJuYWw6OldyYXAoYml0d2lzZV9jYXN0PHZvaWQqPihjYWxsYmFja3MpKSk7CisgICAgICAg
IHdyYXBwZXItPnRha2VTdGF0aWNWYWx1ZUNhbGxiYWNrKGRhdGEpOworICAgICAgICBvYmpULT5T
ZXRBY2Nlc3Nvcih2ODo6U3RyaW5nOjpOZXcoc1ZhbHVlLT5uYW1lKSwgc1ZhbHVlLT5nZXRQcm9w
ZXJ0eSA/ICZzdGF0aWNWYWx1ZUdldHRlclRodW5rIDogMCwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgc1ZhbHVlLT5zZXRQcm9wZXJ0eSA/ICZzdGF0aWNWYWx1ZVNldHRlclRodW5rIDogMCwg
ZGF0YSwgREVGQVVMVCwgdG9WOEF0dHJpYnV0ZXMoc1ZhbHVlLT5hdHRyaWJ1dGVzKSk7CisgICAg
ICAgICsrc1ZhbHVlOworICAgIH0KKworICAgIE5hbWVkUHJvcGVydHlDYWxsYmFja3MqIHByb3BG
dW5jcyA9IG5ldyBOYW1lZFByb3BlcnR5Q2FsbGJhY2tzOworICAgIHByb3BGdW5jcy0+Z2V0UHJv
cCA9IGRlZmluaXRpb24tPmdldFByb3BlcnR5OworICAgIHByb3BGdW5jcy0+c2V0UHJvcCA9IGRl
ZmluaXRpb24tPnNldFByb3BlcnR5OworICAgIHByb3BGdW5jcy0+ZGVsZXRlUHJvcCA9IGRlZmlu
aXRpb24tPmRlbGV0ZVByb3BlcnR5OworICAgIHByb3BGdW5jcy0+Z2V0UHJvcE5hbWVzID0gZGVm
aW5pdGlvbi0+Z2V0UHJvcGVydHlOYW1lczsKKyAgICBpZiAoIXByb3BGdW5jcy0+aXNFbXB0eSgp
KSB7CisgICAgICAgIC8vIEZJWE1FOiBtaXNzaW5nIG1hcHBpbmcgZm9yIGhhc1Byb3BlcnR5Lgor
ICAgICAgICBpZiAoZGVmaW5pdGlvbi0+aGFzUHJvcGVydHkgJiYgIWRlZmluaXRpb24tPmdldFBy
b3BlcnR5KSB7CisgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIGdldFByb3BlcnR5IGl0IGNh
biBiZSB1c2VkIGluc3RlYWQsIG90aGVyd2lzZSB0aGlzIGlzIGZhdGFsLgorICAgICAgICAgICAg
RkFUQUwoIlY4SlNDQVBJU2hpbTogbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBmb3IgSlNDbGFzc0Rl
ZmluaXRpb246Omhhc1Byb3BlcnR5Iik7CisgICAgICAgIH0KKworICAgICAgICBQZXJzaXN0ZW50
PFZhbHVlPiBwcm9wZXJ0eURhdGEgPSBQZXJzaXN0ZW50PFZhbHVlPjo6TmV3KEV4dGVybmFsOjpX
cmFwKGJpdHdpc2VfY2FzdDx2b2lkKj4ocHJvcEZ1bmNzKSkpOworICAgICAgICB3cmFwcGVyLT50
YWtlUHJvcGVydHlDYWxsYmFjayhwcm9wZXJ0eURhdGEpOworICAgICAgICBvYmpULT5TZXROYW1l
ZFByb3BlcnR5SGFuZGxlcihkZWZpbml0aW9uLT5nZXRQcm9wZXJ0eSA/ICZnZXRQcm9wZXJ0eVRo
dW5rIDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlv
bi0+c2V0UHJvcGVydHkgPyAmc2V0UHJvcGVydHlUaHVuayA6IDAsCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgIDAsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgIGRlZmluaXRpb24tPmRlbGV0ZVByb3BlcnR5ID8gJnByb3BlcnR5RGVsZXRlclRodW5r
IDogMCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZGVmaW5pdGlvbi0+
Z2V0UHJvcGVydHlOYW1lcyA/ICZnZXRQcm9wZXJ0eU5hbWVzVGh1bmsgOiAwLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBwcm9wZXJ0eURhdGEpOworICAgIH0KKworICAg
IGlmIChkZWZpbml0aW9uLT5jYWxsQXNGdW5jdGlvbikgeworICAgICAgICBQZXJzaXN0ZW50PFZh
bHVlPiBjYWxsQXNGdW5jRGF0YSA9IFBlcnNpc3RlbnQ8VmFsdWU+OjpOZXcoRXh0ZXJuYWw6Oldy
YXAoYml0d2lzZV9jYXN0PHZvaWQqPihkZWZpbml0aW9uLT5jYWxsQXNGdW5jdGlvbikpKTsKKyAg
ICAgICAgd3JhcHBlci0+dGFrZVN0YXRpY0Z1bmNQdHIoY2FsbEFzRnVuY0RhdGEpOworICAgICAg
ICBvYmpULT5TZXRDYWxsQXNGdW5jdGlvbkhhbmRsZXIoJnN0YXRpY0Z1bmN0aW9uQ2FsbFRodW5r
LCBjYWxsQXNGdW5jRGF0YSk7CisgICAgfQorCisgICAgLy8gRklYTUU6IG1pc3NpbmcgbWFwcGlu
ZyBmb3IgY2FsbEFzQ29uc3RydWN0b3IsIGhhc0luc3RhbmNlLCBjb252ZXJ0VG9UeXBlLgorICAg
IGlmIChkZWZpbml0aW9uLT5jYWxsQXNDb25zdHJ1Y3RvcikKKyAgICAgICAgRkFUQUwoIlY4SlND
QVBJU2hpbTogbWlzc2luZyBpbXBsZW1lbnRhdGlvbiBmb3IgSlNDbGFzc0RlZmluaXRpb246OmNh
bGxBc0NvbnN0cnVjdG9yIik7CisgICAgaWYgKGRlZmluaXRpb24tPmhhc0luc3RhbmNlKQorICAg
ICAgICBGQVRBTCgiVjhKU0NBUElTaGltOiBtaXNzaW5nIGltcGxlbWVudGF0aW9uIGZvciBKU0Ns
YXNzRGVmaW5pdGlvbjo6aGFzSW5zdGFuY2UiKTsKKyAgICBpZiAoZGVmaW5pdGlvbi0+Y29udmVy
dFRvVHlwZSkKKyAgICAgICAgRkFUQUwoIlY4SlNDQVBJU2hpbTogbWlzc2luZyBpbXBsZW1lbnRh
dGlvbiBmb3IgSlNDbGFzc0RlZmluaXRpb246OmNvbnZlcnRUb1R5cGUiKTsKKworICAgIHdyYXBw
ZXItPnNldEZ1bmN0aW9uVGVtcGxhdGUoZnVuY1QpOworICAgIHJldHVybiB0b1JlZih3cmFwcGVy
LnJlbGVhc2UoKS5sZWFrUmVmKCkpOworfQorCitKU0NsYXNzUmVmIEpTQ2xhc3NSZXRhaW4oSlND
bGFzc1JlZiBqc0NsYXNzKQoreworICAgIHRvSW1wbChqc0NsYXNzKS0+cmVmKCk7CisgICAgcmV0
dXJuIGpzQ2xhc3M7Cit9CisKK3ZvaWQgSlNDbGFzc1JlbGVhc2UoSlNDbGFzc1JlZiBqc0NsYXNz
KQoreworICAgIHRvSW1wbChqc0NsYXNzKS0+ZGVyZWYoKTsKK30KKworbmFtZXNwYWNlIFY4SlND
QVBJU2hpbSB7CisKK3N0cnVjdCBFbWJlZGRlZE9iamVjdERhdGE7CisKK3N0YXRpYyBIYXNoU2V0
PEVtYmVkZGVkT2JqZWN0RGF0YSo+JiBhbGxFbWJlZGRlZE9iamVjdERhdGEoKQoreworICAgIERF
RklORV9TVEFUSUNfTE9DQUwoSGFzaFNldDxFbWJlZGRlZE9iamVjdERhdGEqPiwgbWFwLCAoKSk7
CisgICAgcmV0dXJuIG1hcDsKK30KKworc3RydWN0IEVtYmVkZGVkT2JqZWN0RGF0YSB7CisgICAg
RW1iZWRkZWRPYmplY3REYXRhKENsYXNzV3JhcHBlciogX2pzQ2xhc3MsIHZvaWQqIGRhdGEpCisg
ICAgICAgIDoganNDbGFzcyhfanNDbGFzcykKKyAgICAgICAgLCBwcml2YXRlRGF0YShkYXRhKQor
ICAgIHsKKyAgICAgICAgYWxsRW1iZWRkZWRPYmplY3REYXRhKCkuYWRkKHRoaXMpOworICAgIH0K
KworICAgIHN0YXRpYyBib29sIGlzRW1iZWRkZWRPYmplY3REYXRhKHZvaWQqIHB0cikKKyAgICB7
CisgICAgICAgIHJldHVybiBhbGxFbWJlZGRlZE9iamVjdERhdGEoKS5jb250YWlucyhzdGF0aWNf
Y2FzdDxFbWJlZGRlZE9iamVjdERhdGEqPihwdHIpKTsKKyAgICB9CisKKyAgICBDbGFzc1dyYXBw
ZXIqIGpzQ2xhc3M7CisgICAgdm9pZCogcHJpdmF0ZURhdGE7CisgICAgUGVyc2lzdGVudDxPYmpl
Y3Q+IHdlYWtSZWY7Cit9OworCit2b2lkIGVtYmVkZGVkT2JqZWN0RGVzdHJveWVyQ2FsbGJhY2so
UGVyc2lzdGVudDxWYWx1ZT4gb2JqZWN0QXNWYWx1ZSwgdm9pZCopOworCit9CisKK0pTT2JqZWN0
UmVmIEpTT2JqZWN0TWFrZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNDbGFzc1JlZiBqc0NsYXNz
LCB2b2lkKiBkYXRhKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAgICBpZiAoIWpz
Q2xhc3MpCisgICAgICAgIHJldHVybiB0b1JlZihPYmplY3Q6Ok5ldygpKTsKKworICAgIENsYXNz
V3JhcHBlciogY2xhc3NXID0gdG9JbXBsKGpzQ2xhc3MpOworICAgIGNsYXNzVy0+cmVmKCk7Cisg
ICAgSGFuZGxlPE9iamVjdD4gb2JqZWN0ID0gY2xhc3NXLT5mdW5jdGlvblRlbXBsYXRlKCktPklu
c3RhbmNlVGVtcGxhdGUoKS0+TmV3SW5zdGFuY2UoKTsKKyAgICBFbWJlZGRlZE9iamVjdERhdGEq
IGVtYkRhdGEgPSBuZXcgRW1iZWRkZWRPYmplY3REYXRhKGNsYXNzVywgZGF0YSk7CisgICAgb2Jq
ZWN0LT5TZXRQb2ludGVySW5JbnRlcm5hbEZpZWxkKDAsIGVtYkRhdGEpOworCisgICAgZW1iRGF0
YS0+d2Vha1JlZiA9IFBlcnNpc3RlbnQ8T2JqZWN0Pjo6TmV3KG9iamVjdCk7CisgICAgZW1iRGF0
YS0+d2Vha1JlZi5NYWtlV2VhaygwLCAmZW1iZWRkZWRPYmplY3REZXN0cm95ZXJDYWxsYmFjayk7
CisKKyAgICAvLyBDYWxsIGluaXRpYWxpemVycyBmcm9tIGFuY2VzdG9yIHRvIGRlc2NlbmRhbnQu
CisgICAgVmVjdG9yPEpTT2JqZWN0SW5pdGlhbGl6ZUNhbGxiYWNrPiBpbml0aWFsaXplcnM7Cisg
ICAgQ2xhc3NXcmFwcGVyKiBjdXJyZW50ID0gY2xhc3NXOworICAgIHdoaWxlIChjdXJyZW50KSB7
CisgICAgICAgIGNvbnN0IEpTQ2xhc3NEZWZpbml0aW9uJiBkZWYgPSBjdXJyZW50LT5jbGFzc0Rl
ZigpOworICAgICAgICBpZiAoZGVmLmluaXRpYWxpemUpCisgICAgICAgICAgICBpbml0aWFsaXpl
cnMuYXBwZW5kKGRlZi5pbml0aWFsaXplKTsKKyAgICAgICAgY3VycmVudCA9IGN1cnJlbnQtPnBh
cmVudCgpOworICAgIH0KKyAgICBKU09iamVjdFJlZiBvYmpSZWYgPSB0b1JlZihvYmplY3QpOwor
ICAgIGZvciAoaW50IGkgPSBpbml0aWFsaXplcnMuc2l6ZSgpIC0gMTsgaSA+PSAwIDsgLS1pKQor
ICAgICAgICAoaW5pdGlhbGl6ZXJzW2ldKShjb250ZXh0LCBvYmpSZWYpOworCisgICAgcmV0dXJu
IG9ialJlZjsKK30KKworbmFtZXNwYWNlIFY4SlNDQVBJU2hpbSB7CisKK0NsYXNzV3JhcHBlciog
Z2V0Q2xhc3NPZk9iamVjdChIYW5kbGU8T2JqZWN0PiBvYmplY3QpCit7CisgICAgaWYgKCFvYmpl
Y3QtPkludGVybmFsRmllbGRDb3VudCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBFbWJlZGRl
ZE9iamVjdERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFbWJlZGRlZE9iamVjdERhdGEqPihvYmpl
Y3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCgwKSk7CisgICAgaWYgKCFFbWJlZGRlZE9i
amVjdERhdGE6OmlzRW1iZWRkZWRPYmplY3REYXRhKGRhdGEpKQorICAgICAgICByZXR1cm4gMDsK
KyAgICByZXR1cm4gZGF0YS0+anNDbGFzczsKK30KKwordm9pZCBlbWJlZGRlZE9iamVjdERlc3Ry
b3llckNhbGxiYWNrKFBlcnNpc3RlbnQ8VmFsdWU+IG9iamVjdEFzVmFsdWUsIHZvaWQqKQorewor
ICAgIEhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIEFTU0VSVChvYmplY3RBc1ZhbHVlLT5J
c09iamVjdCgpKTsKKyAgICBIYW5kbGU8T2JqZWN0PiBvYmplY3QgPSBvYmplY3RBc1ZhbHVlLkFz
PE9iamVjdD4oKTsKKyAgICBBU1NFUlQob2JqZWN0LT5JbnRlcm5hbEZpZWxkQ291bnQoKSk7CisK
KyAgICBFbWJlZGRlZE9iamVjdERhdGEqIGRhdGEgPSBzdGF0aWNfY2FzdDxFbWJlZGRlZE9iamVj
dERhdGEqPihvYmplY3QtPkdldFBvaW50ZXJGcm9tSW50ZXJuYWxGaWVsZCgwKSk7CisgICAgQVNT
RVJUKCpkYXRhLT53ZWFrUmVmID09ICpvYmplY3RBc1ZhbHVlKTsKKworICAgIENsYXNzV3JhcHBl
cioganNDbGFzcyA9IGRhdGEtPmpzQ2xhc3M7CisKKyAgICAvLyBDYWxsIGZpbmFsaXplcnMgZnJv
bSBkZXNjZW5kYW50IHRvIGFuY2VzdG9yLgorICAgIEpTT2JqZWN0UmVmIG9iakFQSSh0b1JlZihv
YmplY3QpKTsKKyAgICBDbGFzc1dyYXBwZXIqIGN1cnJlbnRDbGFzcyA9IGpzQ2xhc3M7CisgICAg
ZG8geworICAgICAgICBpZiAoSlNPYmplY3RGaW5hbGl6ZUNhbGxiYWNrIGZpbmFsaXplciA9IGN1
cnJlbnRDbGFzcy0+Y2xhc3NEZWYoKS5maW5hbGl6ZSkKKyAgICAgICAgICAgIGZpbmFsaXplcihv
YmpBUEkpOworICAgICAgICBjdXJyZW50Q2xhc3MgPSBqc0NsYXNzLT5wYXJlbnQoKTsKKyAgICB9
IHdoaWxlIChjdXJyZW50Q2xhc3MpOworCisgICAganNDbGFzcy0+ZGVyZWYoKTsKKworICAgIG9i
amVjdEFzVmFsdWUuRGlzcG9zZSgpOworICAgIG9iamVjdEFzVmFsdWUuQ2xlYXIoKTsKKyAgICBk
YXRhLT53ZWFrUmVmLkNsZWFyKCk7CisgICAgZGVsZXRlIGRhdGE7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFY4SlNDQVBJU2hpbQorCit2b2lkKiBKU09iamVjdEdldFByaXZhdGUoSlNPYmplY3RSZWYg
b2JqZWN0KQoreworICAgIEhhbmRsZVNjb3BlIGhhbmRsZVNjb3BlOworICAgIEhhbmRsZTxPYmpl
Y3Q+IG9iaiA9IG9iamVjdC0+Z2V0KCk7CisgICAgaWYgKCFvYmotPkludGVybmFsRmllbGRDb3Vu
dCgpKQorICAgICAgICByZXR1cm4gMDsKKyAgICBFbWJlZGRlZE9iamVjdERhdGEqIGRhdGEgPSBz
dGF0aWNfY2FzdDxFbWJlZGRlZE9iamVjdERhdGEqPihvYmplY3QtPmdldCgpLT5HZXRQb2ludGVy
RnJvbUludGVybmFsRmllbGQoMCkpOworICAgIGlmICghRW1iZWRkZWRPYmplY3REYXRhOjppc0Vt
YmVkZGVkT2JqZWN0RGF0YShkYXRhKSkKKyAgICAgICAgcmV0dXJuIDA7CisgICAgcmV0dXJuIGRh
dGEtPnByaXZhdGVEYXRhOworfQorCitib29sIEpTT2JqZWN0U2V0UHJpdmF0ZShKU09iamVjdFJl
ZiBvYmplY3QsIHZvaWQqIGRhdGEpCit7CisgICAgSGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7Cisg
ICAgSGFuZGxlPE9iamVjdD4gb2JqID0gb2JqZWN0LT5nZXQoKTsKKyAgICBpZiAoIW9iai0+SW50
ZXJuYWxGaWVsZENvdW50KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICBFbWJlZGRlZE9i
amVjdERhdGEqIGVtYkRhdGEgPSBzdGF0aWNfY2FzdDxFbWJlZGRlZE9iamVjdERhdGEqPihvYmpl
Y3QtPmdldCgpLT5HZXRQb2ludGVyRnJvbUludGVybmFsRmllbGQoMCkpOworICAgIGlmICghRW1i
ZWRkZWRPYmplY3REYXRhOjppc0VtYmVkZGVkT2JqZWN0RGF0YShlbWJEYXRhKSkKKyAgICAgICAg
cmV0dXJuIDA7CisgICAgZW1iRGF0YS0+cHJpdmF0ZURhdGEgPSBkYXRhOworICAgIHJldHVybiB0
cnVlOworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lQWNjdW11bGF0b3JBZGROYW1lKEpTUHJvcGVy
dHlOYW1lQWNjdW11bGF0b3JSZWYgYWNjdW11bGF0b3IsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFt
ZSkKK3sKKyAgICBIYW5kbGVTY29wZSBoYW5kbGVTY29wZTsKKyAgICAvLyBUaGlzIGNhbiBvbmx5
IGJlICBjYWxsZWQgZnJvbSBjYWxsYmFja3MgY2FsbGVkIGZyb20gSlMuCisgICAgQVNTRVJUKENv
bnRleHQ6OkluQ29udGV4dCgpKTsKKyAgICBhY2N1bXVsYXRvci0+ZGF0YS5hcHBlbmQocHJvcGVy
dHlOYW1lKTsKK30KKworSlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU09iamVjdENvcHlQcm9wZXJ0
eU5hbWVzKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QpCit7CisgICAg
QVBJX1BST0xPR1VFKGNvbnRleHQpOworICAgIEhhbmRsZTxPYmplY3Q+IG9iaiA9IG9iamVjdC0+
Z2V0KCk7CisgICAgcmV0dXJuIHRvUmVmKG9iai0+R2V0UHJvcGVydHlOYW1lcygpKTsKK30KKwor
SlNQcm9wZXJ0eU5hbWVBcnJheVJlZiBKU1Byb3BlcnR5TmFtZUFycmF5UmV0YWluKEpTUHJvcGVy
dHlOYW1lQXJyYXlSZWYgYXJyYXkpCit7CisgICAgdG9JbXBsKGFycmF5KS0+cmVmKCk7CisgICAg
cmV0dXJuIGFycmF5OworfQorCit2b2lkIEpTUHJvcGVydHlOYW1lQXJyYXlSZWxlYXNlKEpTUHJv
cGVydHlOYW1lQXJyYXlSZWYgYXJyYXkpCit7CisgICAgdG9JbXBsKGFycmF5KS0+ZGVyZWYoKTsK
K30KKworc2l6ZV90IEpTUHJvcGVydHlOYW1lQXJyYXlHZXRDb3VudChKU1Byb3BlcnR5TmFtZUFy
cmF5UmVmIGFycmF5KQoreworICAgIHJldHVybiB0b0ltcGwoYXJyYXkpLT5nZXQoKS0+TGVuZ3Ro
KCk7Cit9CisKK0pTU3RyaW5nUmVmIEpTUHJvcGVydHlOYW1lQXJyYXlHZXROYW1lQXRJbmRleChK
U1Byb3BlcnR5TmFtZUFycmF5UmVmIGFycmF5UmVmLCBzaXplX3QgaW5kZXgpCit7CisgICAgSGFu
ZGxlU2NvcGUgaGFuZGxlU2NvcGU7CisgICAgSGFuZGxlPEFycmF5PiBhcnJheSA9IHRvSW1wbChh
cnJheVJlZiktPmdldCgpOworICAgIEhhbmRsZTx2ODo6U3RyaW5nPiBuYW1lID0gYXJyYXktPkdl
dChpbmRleCkuQXM8djg6OlN0cmluZz4oKTsKKyAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6OmNy
ZWF0ZShuYW1lKS5sZWFrUmVmKCk7Cit9CisKK0pTT2JqZWN0UmVmIEpTT2JqZWN0TWFrZUZ1bmN0
aW9uV2l0aENhbGxiYWNrKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBuYW1lLCBK
U09iamVjdENhbGxBc0Z1bmN0aW9uQ2FsbGJhY2sgY2FsbEFzRnVuY3Rpb24pCit7CisgICAgQVBJ
X1BST0xPR1VFKGNvbnRleHQpOworICAgIFBlcnNpc3RlbnQ8VmFsdWU+IGZ1bmNQdHIgPSBQZXJz
aXN0ZW50PFZhbHVlPjo6TmV3KEV4dGVybmFsOjpXcmFwKGJpdHdpc2VfY2FzdDx2b2lkKj4oY2Fs
bEFzRnVuY3Rpb24pKSk7CisgICAgZnVuY1B0ci5NYWtlV2VhaygwLCB3ZWFrUmVmZXJlbmNlRGVz
dHJveWVyQ2FsbGJhY2spOworICAgIEhhbmRsZTxGdW5jdGlvblRlbXBsYXRlPiBmdW5jVCA9IEZ1
bmN0aW9uVGVtcGxhdGU6Ok5ldygmc3RhdGljRnVuY3Rpb25DYWxsVGh1bmssIGZ1bmNQdHIpOwor
ICAgIEhhbmRsZTx2ODo6RnVuY3Rpb24+IGZ1bmNPYmogPSBmdW5jVC0+R2V0RnVuY3Rpb24oKTsK
KyAgICBmdW5jT2JqLT5TZXROYW1lKG5hbWUtPnRvVjhTdHJpbmcoKSk7CisgICAgcmV0dXJuIHRv
UmVmKGZ1bmNPYmouQXM8T2JqZWN0PigpKTsKK30KKworSlNPYmplY3RSZWYgSlNPYmplY3RNYWtl
QXJyYXkoSlNDb250ZXh0UmVmIGNvbnRleHQsIHNpemVfdCBhcmd1bWVudENvdW50LCBjb25zdCBK
U1ZhbHVlUmVmIGFyZ3VtZW50c1tdLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAgQVBJ
X1BST0xPR1VFKGNvbnRleHQpOworICAgIFRyeUNhdGNoIHRyeUNhdGNoOworICAgIEhhbmRsZTxB
cnJheT4gYXJyYXkgPSBBcnJheTo6TmV3KGFyZ3VtZW50Q291bnQpOworICAgIEVTQ0FQRV9PTl9F
WENFUFRJT04odHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwgbnVsbE9iamVjdCgpKTsKKyAgICBmb3IgKHVu
c2lnbmVkIGkgPSAwOyBpIDwgYXJndW1lbnRDb3VudDsgKytpKSB7CisgICAgICAgIGFycmF5LT5T
ZXQoaSwgYXJndW1lbnRzW2ldLT5nZXQoKSk7CisgICAgICAgIEVTQ0FQRV9PTl9FWENFUFRJT04o
dHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwgbnVsbE9iamVjdCgpKTsKKyAgICB9CisgICAgcmV0dXJuIHRv
UmVmKGFycmF5LkFzPE9iamVjdD4oKSk7Cit9CisKK0pTVmFsdWVSZWYgSlNPYmplY3RHZXRQcm90
b3R5cGUoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCkKK3sKKyAgICBB
UElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgcmV0dXJuIHRvUmVmKG9iamVjdC0+Z2V0KCktPkdl
dFByb3RvdHlwZSgpKTsKK30KKworSlNWYWx1ZVJlZiBKU09iamVjdEdldFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0
KTsKKyAgICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBIYW5kbGU8VmFsdWU+IHJlc3VsdCA9IG9i
amVjdC0+Z2V0KCktPkdldChwcm9wZXJ0eU5hbWUtPnRvVjhTdHJpbmcoKSk7CisgICAgRVNDQVBF
X09OX0VYQ0VQVElPTih0cnlDYXRjaCwgZXhjZXB0aW9uLCBqc1VuZGVmaW5lZCgpKTsKKyAgICBy
ZXR1cm4gdG9SZWYocmVzdWx0KTsKK30KKwordm9pZCBKU09iamVjdFNldFByb3BlcnR5KEpTQ29u
dGV4dFJlZiBjb250ZXh0LCBKU09iamVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5
TmFtZSwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNQcm9wZXJ0eUF0dHJpYnV0ZXMgYXR0cmlidXRlcywg
SlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAg
ICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBvYmplY3QtPmdldCgpLT5TZXQocHJvcGVydHlOYW1l
LT50b1Y4U3RyaW5nKCksIHZhbHVlLT5nZXQoKSwgdG9WOEF0dHJpYnV0ZXMoYXR0cmlidXRlcykp
OworICAgIEVTQ0FQRV9PTl9FWENFUFRJT05fVk9JRCh0cnlDYXRjaCwgZXhjZXB0aW9uKTsKK30K
KworYm9vbCBKU09iamVjdERlbGV0ZVByb3BlcnR5KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09i
amVjdFJlZiBvYmplY3QsIEpTU3RyaW5nUmVmIHByb3BlcnR5TmFtZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAgICBUcnlDYXRjaCB0cnlD
YXRjaDsKKyAgICBib29sIHJlc3VsdCA9IG9iamVjdC0+Z2V0KCktPkRlbGV0ZShwcm9wZXJ0eU5h
bWUtPnRvVjhTdHJpbmcoKSk7CisgICAgRVNDQVBFX09OX0VYQ0VQVElPTih0cnlDYXRjaCwgZXhj
ZXB0aW9uLCBmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworSlNWYWx1ZVJlZiBKU09i
amVjdEdldFByb3BlcnR5QXRJbmRleChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYg
b2JqZWN0LCB1bnNpZ25lZCBwcm9wZXJ0eUluZGV4LCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7
CisgICAgQVBJX1BST0xPR1VFKGNvbnRleHQpOworICAgIFRyeUNhdGNoIHRyeUNhdGNoOworICAg
IEhhbmRsZTxWYWx1ZT4gcmVzdWx0ID0gb2JqZWN0LT5nZXQoKS0+R2V0KHByb3BlcnR5SW5kZXgp
OworICAgIEVTQ0FQRV9PTl9FWENFUFRJT04odHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwganNVbmRlZmlu
ZWQoKSk7CisgICAgcmV0dXJuIHRvUmVmKHJlc3VsdCk7Cit9CisKK3ZvaWQgSlNPYmplY3RTZXRQ
cm9wZXJ0eUF0SW5kZXgoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTT2JqZWN0UmVmIG9iamVjdCwg
dW5zaWduZWQgcHJvcGVydHlJbmRleCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiogZXhj
ZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAgICBUcnlDYXRjaCB0cnlD
YXRjaDsKKyAgICBvYmplY3QtPmdldCgpLT5TZXQocHJvcGVydHlJbmRleCwgdmFsdWUtPmdldCgp
KTsKKyAgICBFU0NBUEVfT05fRVhDRVBUSU9OX1ZPSUQodHJ5Q2F0Y2gsIGV4Y2VwdGlvbik7Cit9
CisKK2Jvb2wgSlNPYmplY3RJc0Z1bmN0aW9uKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU09iamVj
dFJlZiBvYmplY3QpCit7CisgICAgQVBJX1BST0xPR1VFKGNvbnRleHQpOworICAgIHJldHVybiBv
YmplY3QtPmdldCgpLT5Jc0Z1bmN0aW9uKCk7Cit9CisKK0pTVmFsdWVSZWYgSlNPYmplY3RDYWxs
QXNGdW5jdGlvbihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNPYmplY3RSZWYgb2JqZWN0LCBKU09i
amVjdFJlZiB0aGlzT2JqZWN0LCBzaXplX3QgYXJndW1lbnRDb3VudCwgY29uc3QgSlNWYWx1ZVJl
ZiBhcmd1bWVudHNbXSwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFQSV9QUk9MT0dV
RShjb250ZXh0KTsKKyAgICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBIYW5kbGU8T2JqZWN0PiBv
YmogPSBvYmplY3QtPmdldCgpOworICAgIEhhbmRsZTxPYmplY3Q+IHRoaXNPYmogPSB0aGlzT2Jq
ZWN0LT5nZXQoKTsKKyAgICBWZWN0b3I8SGFuZGxlPFZhbHVlPiA+IGFyZ3MoYXJndW1lbnRDb3Vu
dCk7CisgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGFyZ3VtZW50Q291bnQ7ICsraSkKKyAg
ICAgICAgYXJncy5hcHBlbmQoYXJndW1lbnRzW2ldLT5nZXQoKSk7CisKKyAgICBpZiAob2JqLT5J
c0Z1bmN0aW9uKCkpIHsKKyAgICAgICAgSGFuZGxlPHY4OjpGdW5jdGlvbj4gZnVuYyA9IG9iai5B
czx2ODo6RnVuY3Rpb24+KCk7CisgICAgICAgIEhhbmRsZTxWYWx1ZT4gcmVzdWx0ID0gZnVuYy0+
Q2FsbCh0aGlzT2JqLCBhcmdzLnNpemUoKSwgYXJncy5kYXRhKCkpOworICAgICAgICBFU0NBUEVf
T05fRVhDRVBUSU9OKHRyeUNhdGNoLCBleGNlcHRpb24sIG51bGxWYWx1ZSgpKTsKKyAgICAgICAg
cmV0dXJuIHRvUmVmKHJlc3VsdCk7CisgICAgfQorICAgIGlmIChvYmotPklzQ2FsbGFibGUoKSkg
eworICAgICAgICBIYW5kbGU8VmFsdWU+IHJlc3VsdCA9IG9iai0+Q2FsbEFzRnVuY3Rpb24odGhp
c09iaiwgYXJncy5zaXplKCksIGFyZ3MuZGF0YSgpKTsKKyAgICAgICAgRVNDQVBFX09OX0VYQ0VQ
VElPTih0cnlDYXRjaCwgZXhjZXB0aW9uLCBudWxsVmFsdWUoKSk7CisgICAgICAgIHJldHVybiB0
b1JlZihyZXN1bHQpOworICAgIH0KKworICAgIHJldHVybiBudWxsVmFsdWUoKTsKK30KZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29y
ZS9KU09iamVjdFJlZi5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0ph
dmFTY3JpcHRDb3JlL0pTT2JqZWN0UmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzcxMzcyMjNkOGYwNGUxMGZh
NTM1ODgzZDU5MTU2NmU3ODIzYjY2MwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oCkBAIC0w
LDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUEkvSlNPYmplY3RSZWYuaD4KZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0
Q29yZS9KU1JldGFpblB0ci5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGlt
L0phdmFTY3JpcHRDb3JlL0pTUmV0YWluUHRyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uZTA0OGQzNDc1NmViYmM0
NmFmNjMwMTQ5ZjQwZWQwOTcyYzU5ZGUyZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU1JldGFpblB0ci5oCkBA
IC0wLDAgKzEgQEAKKyNpbmNsdWRlIDxKYXZhU2NyaXB0Q29yZS9BUEkvSlNSZXRhaW5QdHIuaD4K
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2Ny
aXB0Q29yZS9KU1N0cmluZ1JlZi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQ
SVNoaW0vSmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmFkYjk0Njdj
YTczYjFhYWViNDQxNzEzZTU4NGQwZjY0NmE3ZGI0MTkKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNTdHJpbmdS
ZWYuY3BwCkBAIC0wLDAgKzEsMTEzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxl
IENvbXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAy
MDEyIFVuaXZlcnNpdHkgb2YgU3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25z
IG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5v
dGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1l
ci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJT
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4g
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSlNTdHJpbmdSZWYuaCIKKworI2luY2x1ZGUg
Ik9wYXF1ZUpTU3RyaW5nLmgiCisjaW5jbHVkZSA8d3RmL1RocmVhZGluZy5oPgorI2luY2x1ZGUg
PHd0Zi91bmljb2RlL1VURjguaD4KKwordXNpbmcgbmFtZXNwYWNlIEpTQzsKK3VzaW5nIG5hbWVz
cGFjZSBXVEY6OlVuaWNvZGU7CisKK0pTU3RyaW5nUmVmIEpTU3RyaW5nQ3JlYXRlV2l0aENoYXJh
Y3RlcnMoY29uc3QgSlNDaGFyKiBjaGFycywgc2l6ZV90IG51bUNoYXJzKQoreworICAgIFdURjo6
aW5pdGlhbGl6ZVRocmVhZGluZygpOworICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3JlYXRl
KGNoYXJzLCBudW1DaGFycykubGVha1JlZigpOworfQorCitKU1N0cmluZ1JlZiBKU1N0cmluZ0Ny
ZWF0ZVdpdGhVVEY4Q1N0cmluZyhjb25zdCBjaGFyKiBzdHJpbmcpCit7CisgICAgV1RGOjppbml0
aWFsaXplVGhyZWFkaW5nKCk7CisgICAgaWYgKHN0cmluZykgeworICAgICAgICBzaXplX3QgbGVu
Z3RoID0gc3RybGVuKHN0cmluZyk7CisgICAgICAgIFZlY3RvcjxVQ2hhciwgMTAyND4gYnVmZmVy
KGxlbmd0aCk7CisgICAgICAgIFVDaGFyKiBwID0gYnVmZmVyLmRhdGEoKTsKKyAgICAgICAgaWYg
KGNvbnZlcnNpb25PSyA9PSBjb252ZXJ0VVRGOFRvVVRGMTYoJnN0cmluZywgc3RyaW5nICsgbGVu
Z3RoLCAmcCwgcCArIGxlbmd0aCkpCisgICAgICAgICAgICByZXR1cm4gT3BhcXVlSlNTdHJpbmc6
OmNyZWF0ZShidWZmZXIuZGF0YSgpLCBwIC0gYnVmZmVyLmRhdGEoKSkubGVha1JlZigpOworICAg
IH0KKworICAgIC8vIE51bGwgc3RyaW5nLgorICAgIHJldHVybiBPcGFxdWVKU1N0cmluZzo6Y3Jl
YXRlKCkubGVha1JlZigpOworfQorCitKU1N0cmluZ1JlZiBKU1N0cmluZ1JldGFpbihKU1N0cmlu
Z1JlZiBzdHJpbmcpCit7CisgICAgc3RyaW5nLT5yZWYoKTsKKyAgICByZXR1cm4gc3RyaW5nOwor
fQorCit2b2lkIEpTU3RyaW5nUmVsZWFzZShKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgc3Ry
aW5nLT5kZXJlZigpOworfQorCitzaXplX3QgSlNTdHJpbmdHZXRMZW5ndGgoSlNTdHJpbmdSZWYg
c3RyaW5nKQoreworICAgIHJldHVybiBzdHJpbmctPmxlbmd0aCgpOworfQorCitjb25zdCBKU0No
YXIqIEpTU3RyaW5nR2V0Q2hhcmFjdGVyc1B0cihKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAg
cmV0dXJuIHN0cmluZy0+Y2hhcmFjdGVycygpOworfQorCitzaXplX3QgSlNTdHJpbmdHZXRNYXhp
bXVtVVRGOENTdHJpbmdTaXplKEpTU3RyaW5nUmVmIHN0cmluZykKK3sKKyAgICAvLyBBbnkgVVRG
OCBjaGFyYWN0ZXIgPiAzIGJ5dGVzIGVuY29kZXMgYXMgYSBVVEYxNiBzdXJyb2dhdGUgcGFpci4K
KyAgICByZXR1cm4gc3RyaW5nLT5sZW5ndGgoKSAqIDMgKyAxOyAvLyArIDEgZm9yIHRlcm1pbmF0
aW5nICdcMCcKK30KKworc2l6ZV90IEpTU3RyaW5nR2V0VVRGOENTdHJpbmcoSlNTdHJpbmdSZWYg
c3RyaW5nLCBjaGFyKiBidWZmZXIsIHNpemVfdCBidWZmZXJTaXplKQoreworICAgIGlmICghYnVm
ZmVyU2l6ZSkKKyAgICAgICAgcmV0dXJuIDA7CisKKyAgICBjaGFyKiBwID0gYnVmZmVyOworICAg
IGNvbnN0IFVDaGFyKiBkID0gc3RyaW5nLT5jaGFyYWN0ZXJzKCk7CisgICAgQ29udmVyc2lvblJl
c3VsdCByZXN1bHQgPSBjb252ZXJ0VVRGMTZUb1VURjgoJmQsIGQgKyBzdHJpbmctPmxlbmd0aCgp
LCAmcCwgcCArIGJ1ZmZlclNpemUgLSAxLCB0cnVlKTsKKyAgICAqcCsrID0gJ1wwJzsKKyAgICBp
ZiAocmVzdWx0ICE9IGNvbnZlcnNpb25PSyAmJiByZXN1bHQgIT0gdGFyZ2V0RXhoYXVzdGVkKQor
ICAgICAgICByZXR1cm4gMDsKKworICAgIHJldHVybiBwIC0gYnVmZmVyOworfQorCitib29sIEpT
U3RyaW5nSXNFcXVhbChKU1N0cmluZ1JlZiBhLCBKU1N0cmluZ1JlZiBiKQoreworICAgIHVuc2ln
bmVkIGxlbiA9IGEtPmxlbmd0aCgpOworICAgIHJldHVybiBsZW4gPT0gYi0+bGVuZ3RoKCkgJiYg
IW1lbWNtcChhLT5jaGFyYWN0ZXJzKCksIGItPmNoYXJhY3RlcnMoKSwgbGVuICogc2l6ZW9mKFVD
aGFyKSk7Cit9CisKK2Jvb2wgSlNTdHJpbmdJc0VxdWFsVG9VVEY4Q1N0cmluZyhKU1N0cmluZ1Jl
ZiBhLCBjb25zdCBjaGFyKiBiKQoreworICAgIEpTU3RyaW5nUmVmIGJ1ZmZlciA9IEpTU3RyaW5n
Q3JlYXRlV2l0aFVURjhDU3RyaW5nKGIpOworICAgIGJvb2wgcmVzdWx0ID0gSlNTdHJpbmdJc0Vx
dWFsKGEsIGJ1ZmZlcik7CisgICAgSlNTdHJpbmdSZWxlYXNlKGJ1ZmZlcik7CisKKyAgICByZXR1
cm4gcmVzdWx0OworfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NB
UElTaGltL0phdmFTY3JpcHRDb3JlL0pTU3RyaW5nUmVmLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSlNTdHJpbmdSZWYuaApuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li5kMzJlMGM3MzQ1YTJiOWQ0MjgzMjg1ZjAwZmFmYjM5MGQ4ODE4MDFjCi0tLSAvZGV2L251bGwK
KysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3Jl
L0pTU3RyaW5nUmVmLmgKQEAgLTAsMCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQ
SS9KU1N0cmluZ1JlZi5oPgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhK
U0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuY3BwIGIvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuY3BwCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLjFmZjI5MGFkOTAzN2Y0YWYwNTVlZjdlYzU4MDU0OTc1NWE1MjM0ZjcKLS0tIC9kZXYv
bnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlw
dENvcmUvSlNWYWx1ZVJlZi5jcHAKQEAgLTAsMCArMSwyMzAgQEAKKy8qCisgKiBDb3B5cmlnaHQg
KEMpIDIwMTIgQXBwbGUgQ29tcHV0ZXIsIEluYy4gIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTIgVW5pdmVyc2l0eSBvZiBTemVnZWQuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09Q
WVJJR0hUIEhPTERFUlMgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBD
T01QVVRFUiwgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVD
VCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFU
QSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJKU1ZhbHVlUmVmLmgi
CisKKyNpbmNsdWRlICJBUElDYXN0LmgiCisjaW5jbHVkZSAiQ2xhc3NXcmFwcGVyLmgiCisjaW5j
bHVkZSAiSlNTdHJpbmdSZWYuaCIKKyNpbmNsdWRlICJPcGFxdWVKU1N0cmluZy5oIgorI2luY2x1
ZGUgIlY4SlNDQVBJU2hpbU1hY3Jvcy5oIgorI2luY2x1ZGUgPHd0Zi9IYXNoU2V0Lmg+CisKK3Vz
aW5nIG5hbWVzcGFjZSB2ODsKK3VzaW5nIG5hbWVzcGFjZSBWOEpTQ0FQSVNoaW07CisKK0pTVHlw
ZSBKU1ZhbHVlR2V0VHlwZShKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkK
K3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgSGFuZGxlPFZhbHVlPiB2OFZhbHVl
ID0gdG9WOCh2YWx1ZSk7CisKKyAgICBpZiAodjhWYWx1ZS0+SXNVbmRlZmluZWQoKSkKKyAgICAg
ICAgcmV0dXJuIGtKU1R5cGVVbmRlZmluZWQ7CisgICAgaWYgKHY4VmFsdWUtPklzTnVsbCgpKQor
ICAgICAgICByZXR1cm4ga0pTVHlwZU51bGw7CisgICAgaWYgKHY4VmFsdWUtPklzQm9vbGVhbigp
KQorICAgICAgICByZXR1cm4ga0pTVHlwZUJvb2xlYW47CisgICAgaWYgKHY4VmFsdWUtPklzTnVt
YmVyKCkpCisgICAgICAgIHJldHVybiBrSlNUeXBlTnVtYmVyOworICAgIGlmICh2OFZhbHVlLT5J
c1N0cmluZygpKQorICAgICAgICByZXR1cm4ga0pTVHlwZVN0cmluZzsKKyAgICBBU1NFUlQodjhW
YWx1ZS0+SXNPYmplY3QoKSk7CisgICAgcmV0dXJuIGtKU1R5cGVPYmplY3Q7Cit9CisKK2Jvb2wg
SlNWYWx1ZUlzVW5kZWZpbmVkKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVl
KQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAgICByZXR1cm4gdG9WOCh2YWx1ZSkt
PklzVW5kZWZpbmVkKCk7Cit9CisKK2Jvb2wgSlNWYWx1ZUlzTnVsbChKU0NvbnRleHRSZWYgY29u
dGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7Cisg
ICAgcmV0dXJuIHRvVjgodmFsdWUpLT5Jc051bGwoKTsKK30KKworYm9vbCBKU1ZhbHVlSXNCb29s
ZWFuKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIEFQSV9Q
Uk9MT0dVRShjb250ZXh0KTsKKyAgICByZXR1cm4gdG9WOCh2YWx1ZSktPklzQm9vbGVhbigpOwor
fQorCitib29sIEpTVmFsdWVJc051bWJlcihKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJl
ZiB2YWx1ZSkKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgcmV0dXJuIHRvVjgo
dmFsdWUpLT5Jc051bWJlcigpOworfQorCitib29sIEpTVmFsdWVJc1N0cmluZyhKU0NvbnRleHRS
ZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4
dCk7CisgICAgcmV0dXJuIHRvVjgodmFsdWUpLT5Jc1N0cmluZygpOworfQorCitib29sIEpTVmFs
dWVJc09iamVjdChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAg
ICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgcmV0dXJuIHRvVjgodmFsdWUpLT5Jc09iamVj
dCgpOworfQorCitib29sIEpTVmFsdWVJc09iamVjdE9mQ2xhc3MoSlNDb250ZXh0UmVmIGNvbnRl
eHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTQ2xhc3NSZWYganNDbGFzcykKK3sKKyAgICBBUElfUFJP
TE9HVUUoY29udGV4dCk7CisgICAgSGFuZGxlPFZhbHVlPiBqc1ZhbHVlID0gdG9WOCh2YWx1ZSk7
CisgICAgaWYgKCFqc1ZhbHVlLT5Jc09iamVjdCgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgSGFuZGxlPE9iamVjdD4gb2JqZWN0ID0ganNWYWx1ZS0+VG9PYmplY3QoKTsKKyAgICBDbGFz
c1dyYXBwZXIqIG9iakNsYXNzID0gVjhKU0NBUElTaGltOjpnZXRDbGFzc09mT2JqZWN0KG9iamVj
dCk7CisgICAgcmV0dXJuIG9iakNsYXNzID09IHRvSW1wbChqc0NsYXNzKTsKK30KKworYm9vbCBK
U1ZhbHVlSXNFcXVhbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhLCBKU1ZhbHVl
UmVmIGIsIEpTVmFsdWVSZWYqIGV4Y2VwdGlvbikKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4
dCk7CisgICAgSGFuZGxlPFZhbHVlPiB2OEEgPSB0b1Y4KGEpOworICAgIEhhbmRsZTxWYWx1ZT4g
djhCID0gdG9WOChiKTsKKyAgICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBib29sIHJlc3VsdCA9
IHY4QS0+RXF1YWxzKHY4Qik7CisgICAgRVNDQVBFX09OX0VYQ0VQVElPTih0cnlDYXRjaCwgZXhj
ZXB0aW9uLCBmYWxzZSk7CisgICAgcmV0dXJuIHJlc3VsdDsKK30KKworYm9vbCBKU1ZhbHVlSXNT
dHJpY3RFcXVhbChKU0NvbnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiBhLCBKU1ZhbHVlUmVm
IGIpCit7CisgICAgQVBJX1BST0xPR1VFKGNvbnRleHQpOworICAgIEhhbmRsZTxWYWx1ZT4gdjhB
ID0gdG9WOChhKTsKKyAgICBIYW5kbGU8VmFsdWU+IHY4QiA9IHRvVjgoYik7CisgICAgcmV0dXJu
IHY4QS0+U3RyaWN0RXF1YWxzKHY4Qik7Cit9CisKK2Jvb2wgSlNWYWx1ZUlzSW5zdGFuY2VPZkNv
bnN0cnVjdG9yKEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU09iamVj
dFJlZiBjb25zdHJ1Y3RvciwgSlNWYWx1ZVJlZiogZXhjZXB0aW9uKQoreworICAgIEFQSV9QUk9M
T0dVRShjb250ZXh0KTsKKyAgICBIYW5kbGU8VmFsdWU+IHY4VmFsdWUgPSB0b1Y4KHZhbHVlKTsK
KyAgICBpZiAoIXY4VmFsdWUtPklzT2JqZWN0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICBIYW5kbGU8T2JqZWN0PiB2OENvbnN0cnVjdG9yID0gdG9WOChjb25zdHJ1Y3Rvcik7CisgICAg
aWYgKCF2OENvbnN0cnVjdG9yLT5Jc0Z1bmN0aW9uKCkpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICByZXR1cm4gdjhDb25zdHJ1Y3Rvci0+R2V0UHJvdG90eXBlKCkgPT0gdjhWYWx1ZS5BczxP
YmplY3Q+KCktPkdldFByb3RvdHlwZSgpOworfQorCitKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlVW5k
ZWZpbmVkKEpTQ29udGV4dFJlZiBjb250ZXh0KQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0
KTsKKyAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKK30KKworSlNWYWx1ZVJlZiBKU1ZhbHVlTWFr
ZU51bGwoSlNDb250ZXh0UmVmIGNvbnRleHQpCit7CisgICAgQVBJX1BST0xPR1VFKGNvbnRleHQp
OworICAgIHJldHVybiB0b1JlZihIYW5kbGU8VmFsdWU+KE51bGwoKSkpOworfQorCitKU1ZhbHVl
UmVmIEpTVmFsdWVNYWtlQm9vbGVhbihKU0NvbnRleHRSZWYgY29udGV4dCwgYm9vbCB2YWx1ZSkK
K3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgcmV0dXJuIHRvUmVmKEhhbmRsZTxW
YWx1ZT4oQm9vbGVhbjo6TmV3KHZhbHVlKSkpOworfQorCitKU1ZhbHVlUmVmIEpTVmFsdWVNYWtl
TnVtYmVyKEpTQ29udGV4dFJlZiBjb250ZXh0LCBkb3VibGUgdmFsdWUpCit7CisgICAgQVBJX1BS
T0xPR1VFKGNvbnRleHQpOworICAgIHJldHVybiB0b1JlZihIYW5kbGU8VmFsdWU+KE51bWJlcjo6
TmV3KHZhbHVlKSkpOworfQorCitKU1ZhbHVlUmVmIEpTVmFsdWVNYWtlU3RyaW5nKEpTQ29udGV4
dFJlZiBjb250ZXh0LCBKU1N0cmluZ1JlZiBzdHJpbmcpCit7CisgICAgQVBJX1BST0xPR1VFKGNv
bnRleHQpOworICAgIHJldHVybiB0b1JlZihIYW5kbGU8VmFsdWU+KHN0cmluZy0+dG9WOFN0cmlu
ZygpKSk7Cit9CisKK2Jvb2wgSlNWYWx1ZVRvQm9vbGVhbihKU0NvbnRleHRSZWYgY29udGV4dCwg
SlNWYWx1ZVJlZiB2YWx1ZSkKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgSGFu
ZGxlPFZhbHVlPiB2OFZhbHVlID0gdG9WOCh2YWx1ZSk7CisgICAgcmV0dXJuIHY4VmFsdWUtPkJv
b2xlYW5WYWx1ZSgpOworfQorCitkb3VibGUgSlNWYWx1ZVRvTnVtYmVyKEpTQ29udGV4dFJlZiBj
b250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlLCBKU1ZhbHVlUmVmKiBleGNlcHRpb24pCit7CisgICAg
QVBJX1BST0xPR1VFKGNvbnRleHQpOworICAgIEhhbmRsZTxWYWx1ZT4gdjhWYWx1ZSA9IHRvVjgo
dmFsdWUpOworICAgIFRyeUNhdGNoIHRyeUNhdGNoOworICAgIGRvdWJsZSBudW1iZXIgPSB2OFZh
bHVlLT5OdW1iZXJWYWx1ZSgpOworICAgIEVTQ0FQRV9PTl9FWENFUFRJT04odHJ5Q2F0Y2gsIGV4
Y2VwdGlvbiwgc3RkOjpudW1lcmljX2xpbWl0czxkb3VibGU+OjpxdWlldF9OYU4oKSk7CisgICAg
cmV0dXJuIG51bWJlcjsKK30KKworSlNTdHJpbmdSZWYgSlNWYWx1ZVRvU3RyaW5nQ29weShKU0Nv
bnRleHRSZWYgY29udGV4dCwgSlNWYWx1ZVJlZiB2YWx1ZSwgSlNWYWx1ZVJlZiAqZXhjZXB0aW9u
KQoreworICAgIEFQSV9QUk9MT0dVRShjb250ZXh0KTsKKyAgICBIYW5kbGU8VmFsdWU+IHY4VmFs
dWUgPSB0b1Y4KHZhbHVlKTsKKyAgICBUcnlDYXRjaCB0cnlDYXRjaDsKKyAgICBIYW5kbGU8djg6
OlN0cmluZz4gcmVzdWx0ID0gdjhWYWx1ZS0+VG9TdHJpbmcoKTsKKyAgICBFU0NBUEVfT05fRVhD
RVBUSU9OKHRyeUNhdGNoLCBleGNlcHRpb24sIDApOworICAgIHJldHVybiBPcGFxdWVKU1N0cmlu
Zzo6Y3JlYXRlKHJlc3VsdCkubGVha1JlZigpOworfQorCitKU09iamVjdFJlZiBKU1ZhbHVlVG9P
YmplY3QoSlNDb250ZXh0UmVmIGNvbnRleHQsIEpTVmFsdWVSZWYgdmFsdWUsIEpTVmFsdWVSZWYq
IGV4Y2VwdGlvbikKK3sKKyAgICBBUElfUFJPTE9HVUUoY29udGV4dCk7CisgICAgSGFuZGxlPFZh
bHVlPiB2OFZhbHVlID0gdG9WOCh2YWx1ZSk7CisgICAgVHJ5Q2F0Y2ggdHJ5Q2F0Y2g7CisgICAg
SGFuZGxlPE9iamVjdD4gdjhPYmplY3QgPSB2OFZhbHVlLT5Ub09iamVjdCgpOworICAgIEVTQ0FQ
RV9PTl9FWENFUFRJT04odHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwgbnVsbE9iamVjdCgpKTsKKyAgICBy
ZXR1cm4gdG9SZWYodjhPYmplY3QpOworfQorCisvLyBOb3RlOiBwcm9iYWJseSBwcm90ZWN0IC8g
dW5wcm90ZWN0IGNvdWxkIGJlIG5vb3AuCisKK3N0YXRpYyBIYXNoU2V0PFZhbHVlV3JhcHBlcio+
IHByb3RlY3RlZFZhbHVlcygpCit7CisgICAgREVGSU5FX1NUQVRJQ19MT0NBTChIYXNoU2V0PFZh
bHVlV3JhcHBlcio+LCBtYXAsICgpKTsKKyAgICByZXR1cm4gbWFwOworfQorCit2b2lkIEpTVmFs
dWVQcm90ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAg
IGlmICghdmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICB2YWx1ZS0+cmVmKCk7CisgICAgcHJv
dGVjdGVkVmFsdWVzKCkuYWRkKHZhbHVlLmdldCgpKTsKK30KKwordm9pZCBKU1ZhbHVlVW5wcm90
ZWN0KEpTQ29udGV4dFJlZiBjb250ZXh0LCBKU1ZhbHVlUmVmIHZhbHVlKQoreworICAgIGlmICgh
dmFsdWUpCisgICAgICAgIHJldHVybjsKKyAgICBIYXNoU2V0PFZhbHVlV3JhcHBlcio+OjppdGVy
YXRvciBmb3VuZCA9IHByb3RlY3RlZFZhbHVlcygpLmZpbmQodmFsdWUuZ2V0KCkpOworICAgIGlm
IChmb3VuZCA9PSBwcm90ZWN0ZWRWYWx1ZXMoKS5lbmQoKSkKKyAgICAgICAgcmV0dXJuOworICAg
IFZhbHVlV3JhcHBlciogcHRyID0gKmZvdW5kLmdldCgpOworICAgIHB0ci0+ZGVyZWYoKTsKKyAg
ICBwcm90ZWN0ZWRWYWx1ZXMoKS5yZW1vdmUoZm91bmQpOworfQpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYu
aCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9K
U1ZhbHVlUmVmLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNzE4NjI4NzUwMzNjZmMzYWRiODZkOTNlYjNiZDA3MGM2
YzI1MTU3MAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlND
QVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmgKQEAgLTAsMCArMSBAQAorI2luY2x1
ZGUgPEphdmFTY3JpcHRDb3JlL0FQSS9KU1ZhbHVlUmVmLmg+CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdC5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjkwYzZkNzVjNDE0Zjg5ZmE5NmVkNWZjY2FhODZlYTU5
NDE5OWY4Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NB
UElTaGltL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaApAQCAtMCwwICsxIEBACisjaW5jbHVk
ZSA8SmF2YVNjcmlwdENvcmUvQVBJL0phdmFTY3JpcHQuaD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmlu
Zy5oIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3Jl
L09wYXF1ZUpTU3RyaW5nLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uYTJjMjMwODlmYjhjMjgwMmQ3MTliOGFiMjZh
Y2ExZWY5YmFkNjljZgotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L1Y4SlNDQVBJU2hpbS9KYXZhU2NyaXB0Q29yZS9PcGFxdWVKU1N0cmluZy5oCkBAIC0wLDAgKzEs
MTA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDEyIEFwcGxlIENvbXB1dGVyLCBJbmMuICBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDEyIFVuaXZlcnNpdHkgb2Yg
U3plZ2VkLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11
c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJp
YnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRl
cmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdB
UkUgSVMgUFJPVklERUQgQlkgVEhFIENPUFlSSUdIVCBIT0xERVJTIGBgQVMgSVMnJyBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAg
SU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgQ09NUFVURVIsIElOQy4gT1IKKyAqIENPTlRSSUJVVE9S
UyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBT
RVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJ
TlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFC
SUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAq
IChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBP
VVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE9wYXF1ZUpTU3Ry
aW5nX2gKKyNkZWZpbmUgT3BhcXVlSlNTdHJpbmdfaAorCisjaW5jbHVkZSAiSlNTdHJpbmdSZWYu
aCIKKyNpbmNsdWRlIDx2OC5oPgorI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9UaHJlYWRTYWZlUmVmQ291bnRlZC5oPgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0ltcGwuaD4KKworc3RydWN0IE9wYXF1ZUpTU3RyaW5n
IDogcHVibGljIFRocmVhZFNhZmVSZWZDb3VudGVkPE9wYXF1ZUpTU3RyaW5nPiB7CisKKyAgICBz
dGF0aWMgUGFzc1JlZlB0cjxPcGFxdWVKU1N0cmluZz4gY3JlYXRlKCkgLy8gbnVsbAorICAgIHsK
KyAgICAgICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBPcGFxdWVKU1N0cmluZyk7CisgICAgfQorCisg
ICAgc3RhdGljIFBhc3NSZWZQdHI8T3BhcXVlSlNTdHJpbmc+IGNyZWF0ZShjb25zdCBVQ2hhciog
Y2hhcmFjdGVycywgdW5zaWduZWQgbGVuZ3RoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIGFkb3B0
UmVmKG5ldyBPcGFxdWVKU1N0cmluZyhjaGFyYWN0ZXJzLCBsZW5ndGgpKTsKKyAgICB9CisKKyAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxPcGFxdWVKU1N0cmluZz4gY3JlYXRlKHY4OjpIYW5kbGU8djg6
OlN0cmluZz4gdjhTdHJpbmcpCisgICAgeworICAgICAgICByZXR1cm4gUGFzc1JlZlB0cjxPcGFx
dWVKU1N0cmluZz4obmV3IE9wYXF1ZUpTU3RyaW5nKHY4U3RyaW5nKSk7CisgICAgfQorCisgICAg
VUNoYXIqIGNoYXJhY3RlcnMoKSBjb25zdCB7IHJldHVybiB0aGlzID8gbV9jaGFyYWN0ZXJzIDog
MDsgfQorICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0IHsgcmV0dXJuIHRoaXMgPyBtX2xlbmd0
aCA6IDA7IH0KKworICAgIHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdG9WOFN0cmluZygpIGNvbnN0
CisgICAgeworICAgICAgICBpZiAoY2hhcmFjdGVycygpKQorICAgICAgICAgICAgcmV0dXJuIHY4
OjpTdHJpbmc6Ok5ldyhtX2NoYXJhY3RlcnMsIG1fbGVuZ3RoKTsKKyAgICAgICAgcmV0dXJuIHY4
OjpTdHJpbmc6OkVtcHR5KCk7CisgICAgfQorCisjaWZuZGVmIE5ERUJVRworICAgIE5FVkVSX0lO
TElORSBjb25zdCBjaGFyKiB0b1V0ZjgoKQorICAgIHsKKyAgICAgICAgdjg6OkhhbmRsZVNjb3Bl
IGhhbmRsZVNjb3BlOworICAgICAgICB2ODo6SGFuZGxlPHY4OjpTdHJpbmc+IHY4U3RyID0gdG9W
OFN0cmluZygpOworICAgICAgICByZXR1cm4gKnY4OjpTdHJpbmc6OlV0ZjhWYWx1ZSh2OFN0cik7
CisgICAgfQorI2VuZGlmCisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIFdURjo6VGhyZWFk
U2FmZVJlZkNvdW50ZWQ8T3BhcXVlSlNTdHJpbmc+OworCisgICAgT3BhcXVlSlNTdHJpbmcoKQor
ICAgICAgICA6IG1fY2hhcmFjdGVycygwKQorICAgICAgICAsIG1fbGVuZ3RoKDApCisgICAgewor
ICAgIH0KKworICAgIE9wYXF1ZUpTU3RyaW5nKGNvbnN0IFVDaGFyKiBjaGFyYWN0ZXJzLCB1bnNp
Z25lZCBsZW5ndGgpCisgICAgICAgIDogbV9sZW5ndGgobGVuZ3RoKQorICAgIHsKKyAgICAgICAg
bV9jaGFyYWN0ZXJzID0gbmV3IFVDaGFyW2xlbmd0aF07CisgICAgICAgIG1lbWNweShtX2NoYXJh
Y3RlcnMsIGNoYXJhY3RlcnMsIGxlbmd0aCAqIHNpemVvZihVQ2hhcikpOworICAgIH0KKworICAg
IE9wYXF1ZUpTU3RyaW5nKHY4OjpIYW5kbGU8djg6OlN0cmluZz4gdjhTdHJpbmcpCisgICAgICAg
IDogbV9sZW5ndGgodjhTdHJpbmctPkxlbmd0aCgpKQorICAgIHsKKyAgICAgICAgbV9jaGFyYWN0
ZXJzID0gbmV3IFVDaGFyW21fbGVuZ3RoXTsKKyAgICAgICAgdjhTdHJpbmctPldyaXRlKHN0YXRp
Y19jYXN0PHVpbnQxNl90Kj4obV9jaGFyYWN0ZXJzKSwgMCwgbV9sZW5ndGgpOworICAgIH0KKwor
ICAgIH5PcGFxdWVKU1N0cmluZygpCisgICAgeworICAgICAgICBkZWxldGVbXSBtX2NoYXJhY3Rl
cnM7CisgICAgfQorCisgICAgVUNoYXIqIG1fY2hhcmFjdGVyczsKKyAgICB1bnNpZ25lZCBtX2xl
bmd0aDsKK307CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
VjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL1Y4SlNDQVBJU2hpbU1hY3Jvcy5oIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL1Y4SlNDQVBJU2hp
bU1hY3Jvcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1MDFlOTZkZWM2ZTZhNzMzNjc0NDUzNzJlYjE0ZDQ4YTY4
ZDUwNGUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQ
SVNoaW0vSmF2YVNjcmlwdENvcmUvVjhKU0NBUElTaGltTWFjcm9zLmgKQEAgLTAsMCArMSw0NCBA
QAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxMiBVbml2ZXJzaXR5IG9mIFN6ZWdlZC4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIENPTVBVVEVSLCBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZP
UiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFS
WSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1Mg
T0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBI
T1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5F
R0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UK
KyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBWOEpTQ0FQSVNoaW1NYWNyb3NfaAorI2Rl
ZmluZSBWOEpTQ0FQSVNoaW1NYWNyb3NfaAorCisjZGVmaW5lIEFQSV9QUk9MT0dVRShjb250ZXh0
KSBcCisgICAgSGFuZGxlU2NvcGUgaGFuZGxlU2NvcGU7IFwKKyAgICBDb250ZXh0OjpTY29wZSBj
b250ZXh0U2NvcGUodG9JbXBsKGNvbnRleHQpLT5nZXQoKSkKKworI2RlZmluZSBFU0NBUEVfT05f
RVhDRVBUSU9OKHRyeUNhdGNoLCBleGNlcHRpb24sIHZhbHVlKSBcCisgICAgZG8geyBcCisgICAg
ICAgIGlmICh0cnlDYXRjaC5IYXNDYXVnaHQoKSkgeyBcCisgICAgICAgICAgICBpZiAoZXhjZXB0
aW9uKSBcCisgICAgICAgICAgICAgICAgKmV4Y2VwdGlvbiA9IHRvUmVmKHRyeUNhdGNoLkV4Y2Vw
dGlvbigpKTsgXAorICAgICAgICAgICAgcmV0dXJuIHZhbHVlOyBcCisgICAgICAgIH0gXAorICAg
IH0gd2hpbGUgKDApCisKKyNkZWZpbmUgRVNDQVBFX09OX0VYQ0VQVElPTl9WT0lEKHRyeUNhdGNo
LCBleGNlcHRpb24pIEVTQ0FQRV9PTl9FWENFUFRJT04odHJ5Q2F0Y2gsIGV4Y2VwdGlvbiwgc3Rh
dGljX2Nhc3Q8dm9pZD4oMCkpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
YmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL1dlYktpdEF2YWlsYWJpbGl0eS5o
IGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL0phdmFTY3JpcHRDb3JlL1dl
YktpdEF2YWlsYWJpbGl0eS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjBjNTg4OTBiZDEyNDdkZjRmN2I2NzE0OGM4
NDNkZGYyM2RlYTQzZjYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9WOEpTQ0FQSVNoaW0vSmF2YVNjcmlwdENvcmUvV2ViS2l0QXZhaWxhYmlsaXR5LmgKQEAgLTAs
MCArMSBAQAorI2luY2x1ZGUgPEphdmFTY3JpcHRDb3JlL0FQSS9XZWJLaXRBdmFpbGFiaWxpdHku
aD4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9WOEpT
Q0FQSVNoaW0ucHJpIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltL1Y4SlND
QVBJU2hpbS5wcmkKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNDkyMmI1YTE3Y2E3Y2EzMDQxODA2NzM0YjBkZjc3NGY3
NWVhMGMzOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlND
QVBJU2hpbS9WOEpTQ0FQSVNoaW0ucHJpCkBAIC0wLDAgKzEgQEAKK0lOQ0xVREVQQVRIICs9ICQk
e1JPT1RfV0VCS0lUX0RJUn0vU291cmNlL1dlYkNvcmUvYmluZGluZ3MvVjhKU0NBUElTaGltCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNoaW0vVjhKU0NBUElT
aGltLnBybyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbS9WOEpTQ0FQSVNo
aW0ucHJvCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAuLjcyZTcyMDY1ZDA5NmI5OTJlNmFlNDk0YzNkY2U5ZWMxYjA5ZjIx
MzYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpTQ0FQSVNo
aW0vVjhKU0NBUElTaGltLnBybwpAQCAtMCwwICsxLDMwIEBACitURU1QTEFURSA9IGxpYgorVEFS
R0VUID0gdjhqc2NhcGlzaGltCitDT05GSUcgKz0gc3RhdGljbGliCisKK2luY2x1ZGUoVjhKU0NB
UElTaGltLnByaSkKKworVlBBVEggKz0gJCRQV0QvSmF2YVNjcmlwdENvcmUKKworV0VCS0lUICs9
IHd0ZgorUVQgPSBjb3JlIHY4LXByaXZhdGUKKworU09VUkNFUyArPSBcCisgICAgSmF2YVNjcmlw
dENvcmUvQ2xhc3NXcmFwcGVyLmNwcCBcCisgICAgSmF2YVNjcmlwdENvcmUvSlNCYXNlLmNwcCBc
CisgICAgSmF2YVNjcmlwdENvcmUvSlNDb250ZXh0UmVmLmNwcCBcCisgICAgSmF2YVNjcmlwdENv
cmUvSlNPYmplY3RSZWYuY3BwIFwKKyAgICBKYXZhU2NyaXB0Q29yZS9KU1N0cmluZ1JlZi5jcHAg
XAorICAgIEphdmFTY3JpcHRDb3JlL0pTVmFsdWVSZWYuY3BwCisKK0hFQURFUlMgKz0gXAorICAg
IEphdmFTY3JpcHRDb3JlL0FQSUNhc3QuaCBcCisgICAgSmF2YVNjcmlwdENvcmUvQ2xhc3NXcmFw
cGVyLmggXAorICAgIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHQuaCBcCisgICAgSmF2YVNjcmlw
dENvcmUvSlNCYXNlLmggXAorICAgIEphdmFTY3JpcHRDb3JlL0pTQ29udGV4dFJlZi5oIFwKKyAg
ICBKYXZhU2NyaXB0Q29yZS9KU09iamVjdFJlZi5oIFwKKyAgICBKYXZhU2NyaXB0Q29yZS9KU1N0
cmluZ1JlZi5oIFwKKyAgICBKYXZhU2NyaXB0Q29yZS9KU1ZhbHVlUmVmLmggXAorICAgIEphdmFT
Y3JpcHRDb3JlL09wYXF1ZUpTU3RyaW5nLmggXAorICAgIEphdmFTY3JpcHRDb3JlL1Y4SlNDQVBJ
U2hpbU1hY3Jvcy5oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0Mi9TY3JpcHRzL2dlbmVyYXRl
LWZvcndhcmRpbmctaGVhZGVycy5wbCBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUt
Zm9yd2FyZGluZy1oZWFkZXJzLnBsCmluZGV4IDcyY2Y2M2YyMGIyNWYzNWRlZjg1MmJlYmZhMGUy
ZDg5NTc5NDI3Y2IuLmM2YjA2MzA0NzViNjE4ZTNmOTY5NzUyZDZlNzQ2YzBiZjhkYmIwY2IgMTAw
NzU1Ci0tLSBhL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1oZWFk
ZXJzLnBsCisrKyBiL1NvdXJjZS9XZWJLaXQyL1NjcmlwdHMvZ2VuZXJhdGUtZm9yd2FyZGluZy1o
ZWFkZXJzLnBsCkBAIC0zNSwyMCArMzUsMjUgQEAgdXNlIEZpbGU6OlNwZWM6OkZ1bmN0aW9uczsK
IAogbXkgJHNyY1Jvb3QgPSByZWFscGF0aChGaWxlOjpTcGVjLT5jYXRmaWxlKGRpcm5hbWUoYWJz
X3BhdGgoJDApKSwgIi4uLy4uIikpOwogbXkgJGluY0Zyb21Sb290ID0gYWJzX3BhdGgoJEFSR1Zb
MF0pOwotbXkgQHBsYXRmb3JtUHJlZml4ZXMgPSAoImJsYWNrYmVycnkiLCAiY2YiLCAiY2hyb21p
dW0iLCAiY3VybCIsICJlZmwiLCAiZ3RrIiwgIm1hYyIsICJxdCIsICJzb3VwIiwgInY4IiwgIndp
biIsICJ3eCIpOworbXkgQHBsYXRmb3JtUHJlZml4ZXMgPSAoImJsYWNrYmVycnkiLCAiY2YiLCAi
Y2hyb21pdW0iLCAiY3VybCIsICJlZmwiLCAiZ3RrIiwgIm1hYyIsICJxdCIsICJzb3VwIiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICJqcyIsICJ2OCIsICJ3aW4iLCAid3giLCAiSmF2YVNjcmlw
dENvcmUvQVBJIik7CiBteSBAZnJhbWV3b3JrcyA9ICggIkphdmFTY3JpcHRDb3JlIiwgIldlYkNv
cmUiLCAiV2ViS2l0MiIpOwogbXkgQHNraXBwZWRQcmVmaXhlczsKIG15IEBmcmFtZXdvcmtIZWFk
ZXJzOwogbXkgJGZyYW1ld29yazsKIG15ICVuZWVkZWRIZWFkZXJzOworbXkgQHBsYXRmb3JtczsK
IAogc2hpZnQ7CiBteSAkb3V0cHV0RGlyZWN0b3J5ID0gJEFSR1ZbMF07CiBzaGlmdDsKLW15ICRw
bGF0Zm9ybSAgPSAkQVJHVlswXTsKK3doaWxlIChAQVJHVikgeworICAgIHB1c2goQHBsYXRmb3Jt
cywgJEFSR1ZbMF0pOworICAgIHNoaWZ0OworfQogCiBmb3JlYWNoIG15ICRwcmVmaXggKEBwbGF0
Zm9ybVByZWZpeGVzKSB7Ci0gICAgcHVzaChAc2tpcHBlZFByZWZpeGVzLCAkcHJlZml4KSB1bmxl
c3MgKCRwcmVmaXggPX4gJHBsYXRmb3JtKTsKKyAgICBwdXNoKEBza2lwcGVkUHJlZml4ZXMsICRw
cmVmaXgpIHVubGVzcyAkcHJlZml4IH5+IEBwbGF0Zm9ybXM7CiB9CiAKIGZvcmVhY2ggKEBmcmFt
ZXdvcmtzKSB7CkBAIC04MCw3ICs4NSw5IEBAIHN1YiBjb2xsZWN0RmFtZXdvcmtIZWFkZXJQYXRo
cyB7CiAgICAgbXkgJGZpbGUgPSAkXzsKICAgICBpZiAoJGZpbGVQYXRoID1+ICdcLmgkJyAmJiAk
ZmlsZVBhdGggIX4gIkZvcndhcmRpbmdIZWFkZXJzIiAmJiBncmVweyRmaWxlIGVxICRffSBrZXlz
ICVuZWVkZWRIZWFkZXJzKSB7CiAgICAgICAgIG15ICRoZWFkZXJQYXRoID0gc3Vic3RyKCRmaWxl
UGF0aCwgbGVuZ3RoKEZpbGU6OlNwZWMtPmNhdGZpbGUoJHNyY1Jvb3QsICRmcmFtZXdvcmspKSAr
IDEgKTsKLSAgICAgICAgcHVzaChAZnJhbWV3b3JrSGVhZGVycywgJGhlYWRlclBhdGgpIHVubGVz
cyAoZ3JlcCgkaGVhZGVyUGF0aCA9fiAiJF8vIiwgQHNraXBwZWRQcmVmaXhlcykgfHwgJGhlYWRl
clBhdGggPX4gImNvbmZpZy5oIik7CisgICAgICAgIHB1c2goQGZyYW1ld29ya0hlYWRlcnMsICRo
ZWFkZXJQYXRoKSB1bmxlc3MgKGdyZXAoJGhlYWRlclBhdGggPX4gIiRfLyIsIEBza2lwcGVkUHJl
Zml4ZXMpCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgIHx8IGdyZXAoIiRmcmFtZXdvcmsvJGhlYWRlclBhdGgiID1+ICIkXy8iLCBAc2tpcHBlZFBy
ZWZpeGVzKQorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICB8fCAkaGVhZGVyUGF0aCA9fiAiY29uZmlnLmgiKTsKICAgICB9CiB9CiAKQEAgLTkwLDgg
Kzk3LDE3IEBAIHN1YiBjcmVhdGVGb3J3YXJkaW5nSGVhZGVyc0ZvckZyYW1ld29yayB7CiAgICAg
Zm9yZWFjaCBteSAkaGVhZGVyIChAZnJhbWV3b3JrSGVhZGVycykgewogICAgICAgICBteSAkaGVh
ZGVyTmFtZSA9IGJhc2VuYW1lKCRoZWFkZXIpOwogCi0gICAgICAgICMgSWYgd2UgZm91bmQgbW9y
ZSBoZWFkZXJzIHdpdGggdGhlIHNhbWUgbmFtZSwgb25seSBnZW5lcmF0ZSBhIGZvcndhcmRpbmcg
aGVhZGVyIGZvciB0aGUgY3VycmVudCBwbGF0Zm9ybQotICAgICAgICBpZihncmVwKCRfID1+ICIv
JGhlYWRlck5hbWVcJCIsIEBmcmFtZXdvcmtIZWFkZXJzKSA9PSAxIHx8ICRoZWFkZXIgPX4gIi8k
cGxhdGZvcm0vIiApIHsKKyAgICAgICAgIyBJZiB3ZSBmb3VuZCBtb3JlIGhlYWRlcnMgd2l0aCB0
aGUgc2FtZSBuYW1lLCBvbmx5IGdlbmVyYXRlIGEgZm9yd2FyZGluZyBoZWFkZXIKKyAgICAgICAg
IyBpZiBpdCBoYXMgYSBtYXRjaGluZyBwbGF0Zm9ybSBwcmVmaXguCisgICAgICAgIG15ICRpc01h
dGNoaW5nUGxhdGZvcm0gPSAwOworICAgICAgICBmb3JlYWNoIG15ICRwbGF0Zm9ybSAoQHBsYXRm
b3JtcykgeworICAgICAgICAgICAgaWYgKCRoZWFkZXIgPX4gIi8kcGxhdGZvcm0vIikgeworICAg
ICAgICAgICAgICAgICRpc01hdGNoaW5nUGxhdGZvcm0gPSAxOworICAgICAgICAgICAgfQorICAg
ICAgICB9CisKKyAgICAgICAgbXkgJG51bU1hdGNoZXMgPSBzY2FsYXIoZ3JlcCgkXyA9fiAiLyRo
ZWFkZXJOYW1lXCQiLCBAZnJhbWV3b3JrSGVhZGVycykpOworICAgICAgICBpZiAoJG51bU1hdGNo
ZXMgPT0gMSB8fCAoJG51bU1hdGNoZXMgPiAwICYmICRpc01hdGNoaW5nUGxhdGZvcm0pKSB7CiAg
ICAgICAgICAgICBteSAkZm9yd2FyZGluZ0hlYWRlclBhdGggPSBGaWxlOjpTcGVjLT5jYXRmaWxl
KCR0YXJnZXREaXJlY3RvcnksICRoZWFkZXJOYW1lKTsKICAgICAgICAgICAgIG15ICRleHBlY3Rl
ZEluY2x1ZGVTdGF0ZW1lbnQgPSAiI2luY2x1ZGUgXCIkZnJhbWV3b3JrLyRoZWFkZXJcIiI7CiAg
ICAgICAgICAgICBteSAkZm91bmRJbmNsdWRlU3RhdGVtZW50ID0gMDsKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA0ZTI1ZGY2NWViMmFhYWIxZjNl
OTY2NTQ4MGZkZTcxZTA4MDcyMjRkLi5kYTJmYjBiODgwZDU4MTcwY2QyMTU4MzRmMTg0ZjJhMTJh
NTI4YmE1IDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsMTIgQEAKKzIwMTItMDUtMzEgIEJhbGF6cyBLZWxlbWVuICA8a2JhbGF6c0B3
ZWJraXQub3JnPgorCisgICAgICAgIFtRdF0gSW1wbGVtZW50IGEgc2hpbSBsYXllciB0byB3cmFw
IHY4IGJlaGluZCB0aGUgSmF2YVNjcmlwdENvcmUgQVBJCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04Nzg3MgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgICogcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3Y4anNjYXBp
c2hpbS5wcmY6IEFkZGVkLgorCiAyMDEyLTA1LTMwICBNaWtoYWlsIFBvemRueWFrb3YgIDxtaWto
YWlsLnBvemRueWFrb3ZAaW50ZWwuY29tPgogCiAgICAgICAgIFtFRkxdW0RSVF0gaHR0cC90ZXN0
cy9uYXZpZ2F0aW9uL25ldy13aW5kb3ctcmVkaXJlY3QtaGlzdG9yeS5odG1sIGRvZXMgbm90IHBh
c3MKZGlmZiAtLWdpdCBhL1Rvb2xzL3FtYWtlL21rc3BlY3MvbW9kdWxlcy92OGpzY2FwaXNoaW0u
cHJmIGIvVG9vbHMvcW1ha2UvbWtzcGVjcy9tb2R1bGVzL3Y4anNjYXBpc2hpbS5wcmYKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWIzYmUwZDdmMmY2NzQ4MTMxMTRmNTY1ODZmNzkxYmY1MjUxZjBmNAotLS0gL2Rldi9u
dWxsCisrKyBiL1Rvb2xzL3FtYWtlL21rc3BlY3MvbW9kdWxlcy92OGpzY2FwaXNoaW0ucHJmCkBA
IC0wLDAgKzEsMyBAQAorV0VCS0lULnY4anNjYXBpc2hpbS5yb290X3NvdXJjZV9kaXIgPSAkJHtS
T09UX1dFQktJVF9ESVJ9L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL1Y4SlNDQVBJU2hpbQorCitp
bmNsdWRlKCQke1dFQktJVC52OGpzY2FwaXNoaW0ucm9vdF9zb3VyY2VfZGlyfS9WOEpTQ0FQSVNo
aW0ucHJpKQpkaWZmIC0tZ2l0IGEvQ2hhbmdlTG9nIGIvQ2hhbmdlTG9nCmluZGV4IDY4YjZmZDE3
ZjMyMjk2YTlhNTNiNGIxZTBjOWU1MjM5YzM0MGE4NDEuLmQ1NWFhYWI3MWRhYzVjMTAwMmY4MmUx
MmRhMjk2ODUxYmZjY2QxNzYgMTAwNjQ0Ci0tLSBhL0NoYW5nZUxvZworKysgYi9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwxMiBAQAorMjAxMi0wNS0zMSAgQmFsYXpzIEtlbGVtZW4gIDxrYmFsYXpzQHdl
YmtpdC5vcmc+CisKKyAgICAgICAgW1F0XSBJbXBsZW1lbnQgYSBzaGltIGxheWVyIHRvIHdyYXAg
djggYmVoaW5kIHRoZSBKYXZhU2NyaXB0Q29yZSBBUEkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg3ODcyCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgKiBXZWJLaXQucHJvOiBBZGRlZCB0aGUgbmV3IHN1YmRp
ciB0byB0aGUgcHJvamVjdC4KKwogMjAxMi0wNS0zMCAgTWFyaXVzeiBHcnplZ29yY3p5ayAgPG1h
cml1c3ouZ0BzYW1zdW5nLmNvbT4sIFJ5dWFuIENob2kgIDxyeXVhbi5jaG9pQHNhbXN1bmcuY29t
PgogCiAgICAgICAgIFtFRkxdW1dLMl0gRml4IFdlYktpdDItRUZMIGJ1aWxkCmRpZmYgLS1naXQg
YS9XZWJLaXQucHJvIGIvV2ViS2l0LnBybwppbmRleCBlYjIzZmQzMzFhYjYzZGIzMDE2YTcxODFm
MjFhMjIzMDJjYjgzMGY5Li45ZGYyOWQ1ZGZmNjdmMmQ3MTk2MWUxN2I2NmViMWI4ZTE3M2JjMTk1
IDEwMDY0NAotLS0gYS9XZWJLaXQucHJvCisrKyBiL1dlYktpdC5wcm8KQEAgLTI2LDYgKzI2LDEy
IEBAIFNVQkRJUlMgKz0gV1RGCiAgICAgU1VCRElSUyArPSBKYXZhU2NyaXB0Q29yZQogfQogCit2
OCB7CisgICAgdjhqc2NhcGlzaGltLmZpbGUgPSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9WOEpT
Q0FQSVNoaW0vVjhKU0NBUElTaGltLnBybworICAgIHY4anNjYXBpc2hpbS5tYWtlZmlsZSA9IE1h
a2VmaWxlLnY4anNjYXBpc2hpbQorICAgIFNVQkRJUlMgKz0gdjhqc2NhcGlzaGltCit9CisKIFdl
YkNvcmUuZmlsZSA9IFNvdXJjZS9XZWJDb3JlL1dlYkNvcmUucHJvCiBXZWJDb3JlLm1ha2VmaWxl
ID0gTWFrZWZpbGUuV2ViQ29yZQogU1VCRElSUyArPSBXZWJDb3JlCg==
</data>

          </attachment>
      

    </bug>

</bugzilla>