<?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>185803</bug_id>
          
          <creation_ts>2018-05-19 12:42:04 -0700</creation_ts>
          <short_desc>[DFG] InById should be converted to MatchStructure</short_desc>
          <delta_ts>2018-06-01 11:46:27 -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>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>185682</dependson>
    
    <dependson>185695</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Yusuke Suzuki">ysuzuki</reporter>
          <assigned_to name="Yusuke Suzuki">ysuzuki</assigned_to>
          <cc>ews-watchlist</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>saam</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1425460</commentid>
    <comment_count>0</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 12:42:04 -0700</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425474</commentid>
    <comment_count>1</comment_count>
      <attachid>340787</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 15:24:47 -0700</bug_when>
    <thetext>Created attachment 340787
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425480</commentid>
    <comment_count>2</comment_count>
      <attachid>340788</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 16:36:25 -0700</bug_when>
    <thetext>Created attachment 340788
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425482</commentid>
    <comment_count>3</comment_count>
      <attachid>340789</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-19 17:26:24 -0700</bug_when>
    <thetext>Created attachment 340789
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1425497</commentid>
    <comment_count>4</comment_count>
      <attachid>340793</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-20 05:01:32 -0700</bug_when>
    <thetext>Created attachment 340793
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1426113</commentid>
    <comment_count>5</comment_count>
      <attachid>340793</attachid>
    <who name="Caio Lima">ticaiolima</who>
    <bug_when>2018-05-22 05:16:35 -0700</bug_when>
    <thetext>Comment on attachment 340793
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=340793&amp;action=review

I think it is good add tests considering proxy cases and check if we are not breaking it. Also, Is there any kind of program we could add on microbenchmark to check performance?

&gt; Source/JavaScriptCore/bytecode/InByIdStatus.cpp:170
&gt; +            ComplexGetStatus complexGetStatus = ComplexGetStatus::computeFor(structure, access.conditionSet(), uid);

Maybe it is time to rename this class to &quot;ComplexPropertyAccessStatus&quot; or something related? Current name is not reflecting the real usage of it.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428420</commentid>
    <comment_count>6</comment_count>
      <attachid>340793</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-30 07:35:30 -0700</bug_when>
    <thetext>Comment on attachment 340793
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=340793&amp;action=review

Sounds nice, I&apos;ve added a micorbenchmarks.

&gt;&gt; Source/JavaScriptCore/bytecode/InByIdStatus.cpp:170
&gt;&gt; +            ComplexGetStatus complexGetStatus = ComplexGetStatus::computeFor(structure, access.conditionSet(), uid);
&gt; 
&gt; Maybe it is time to rename this class to &quot;ComplexPropertyAccessStatus&quot; or something related? Current name is not reflecting the real usage of it.

I would like to make it a separate patch since it involves many changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1428421</commentid>
    <comment_count>7</comment_count>
      <attachid>341571</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-30 07:36:38 -0700</bug_when>
    <thetext>Created attachment 341571
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429095</commentid>
    <comment_count>8</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-05-31 18:26:38 -0700</bug_when>
    <thetext>Ping?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429284</commentid>
    <comment_count>9</comment_count>
      <attachid>341571</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2018-06-01 11:16:22 -0700</bug_when>
    <thetext>Comment on attachment 341571
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=341571&amp;action=review

r=me.

&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6458
&gt; +                        data-&gt;variants.append(matchVariant);

Nit: Not that it matters now but we should probably WTFMove(matchVariant)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429289</commentid>
    <comment_count>10</comment_count>
      <attachid>341571</attachid>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-06-01 11:37:54 -0700</bug_when>
    <thetext>Comment on attachment 341571
Patch

View in context: https://bugs.webkit.org/attachment.cgi?id=341571&amp;action=review

Thank you!

&gt;&gt; Source/JavaScriptCore/dfg/DFGByteCodeParser.cpp:6458
&gt;&gt; +                        data-&gt;variants.append(matchVariant);
&gt; 
&gt; Nit: Not that it matters now but we should probably WTFMove(matchVariant)

Nice, fixed.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429290</commentid>
    <comment_count>11</comment_count>
    <who name="Yusuke Suzuki">ysuzuki</who>
    <bug_when>2018-06-01 11:40:02 -0700</bug_when>
    <thetext>Committed r232400: &lt;https://trac.webkit.org/changeset/232400&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1429294</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-06-01 11:46:27 -0700</bug_when>
    <thetext>&lt;rdar://problem/40728977&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340787</attachid>
            <date>2018-05-19 15:24:47 -0700</date>
            <delta_ts>2018-05-19 16:36:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185803-20180520072445.patch</filename>
            <type>text/plain</type>
            <size>25992</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjI4MTc2ZTcyYjVhMzMzMjIxMzU4YzRmM2JlYTg0MTBjZWFmMGRhLi5lNTA2Mzc0NjA0OWFjYTky
Nzg1OWE4MDM3YzE3NTMyODUzZDk2Zjk0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxOC0wNS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBNYXRj
aFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgSW5CeUlkIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gTWF0Y2hTdHJ1Y3R1cmUgbm9kZSB3aXRo
IENoZWNrU3RydWN0dXJlcy4KKyAgICAgICAgTWF0Y2hTdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBm
b3IgaW5zdGFuY2VvZiBvcHRpbWl6YXRpb24uIEJ1dCB0aGlzIG5vZGUKKyAgICAgICAgaXMgYWxz
byB1c2VmdWwgZm9yIEluQnlJZCBub2RlLgorCisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6Oklu
QnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6
aGFzRXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgor
ICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAg
IChKU0M6OkluQnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVl
ZGJhY2spOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChK
U0M6OkluQnlJZFN0YXR1czo6ZHVtcCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlk
U3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OkluQnlJZFN0YXR1
cyk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAo
SlNDOjpJbkJ5SWRTdGF0dXM6OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3Rh
dHVzOjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpp
c1NpbXBsZSBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6bnVtVmFyaWFudHMg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAg
ICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjphdCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJ
ZFN0YXR1czo6b3BlcmF0b3JbXSBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6
dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6d2FzU2Vl
bkluSklUIGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OkluQnlJZFZhcmlhbnQpOgorICAgICAg
ICAoSlNDOjpJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6Oklu
QnlJZFZhcmlhbnQ6OmR1bXAgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50Ojpk
dW1wSW5Db250ZXh0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6
IEFkZGVkLgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50Ojppc1NldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAo
SlNDOjpJbkJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJ
bkJ5SWRWYXJpYW50OjpzdHJ1Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50
Ojpjb25kaXRpb25TZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpvZmZz
ZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50Ojppc0hpdCBjb25zdCk6Cisg
ICAgICAgICogYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaDoKKyAgICAgICAgKiBkZmcv
REZHQnl0ZUNvZGVQYXJzZXIuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKToKKwogMjAxOC0wNS0xOCAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUu
Y29tPgogCiAgICAgICAgIERGRyBzaG91bGQgaW5saW5lIEluc3RhbmNlT2YgSUNzCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKaW5kZXggNmFkMWE0NWQ3ZjU5N2Y2MTYyZGE5MWE0ZTBkOTQ5M2Ez
ODIxYTNmMi4uODgwNjkxYjJkZjNiMmZmN2IyYmViZDc1Njk1ODdkY2I0MjZjZTdiYSAxMDA2NDQK
LS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjE5LDYgKzIxOSw4IEBAIGJ5dGVjb2RlL0Z1bmN0
aW9uQ29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAKIGJ5dGVjb2RlL0dl
dEJ5SWRWYXJpYW50LmNwcAogYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNzQ2FzZS5jcHAKK2J5
dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKK2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCiBieXRl
Y29kZS9JbmxpbmVBY2Nlc3MuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWUuY3BwCiBieXRl
Y29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9i
eXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjA2ZTkzYzcxZDQ1MzMzZTBjZjMz
MjU4MDk2MTNhYWY0NzZmMDk4MmYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcApAQCAtMCwwICsxLDI0NiBAQAorLyoKKyAq
IENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+
LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3Zp
ZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0
IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBv
ZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5D
LiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBP
RiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9T
RSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENP
TlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBH
T09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBC
VVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisg
KiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4g
QU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJ
U0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAi
Y29uZmlnLmgiCisjaW5jbHVkZSAiSW5CeUlkU3RhdHVzLmgiCisKKyNpbmNsdWRlICJDb2RlQmxv
Y2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVkZSAiSUNTdGF0dXNV
dGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQb2x5bW9ycGhpY0Fj
Y2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5jbHVkZSA8d3RmL0xp
c3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIEluQnlJZFN0YXR1czo6YXBwZW5k
VmFyaWFudChjb25zdCBJbkJ5SWRWYXJpYW50JiB2YXJpYW50KQoreworICAgIHJldHVybiBhcHBl
bmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKK2Jvb2wgSW5CeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShDb2RlQmxvY2sqIHByb2Zp
bGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVW5saW5rZWRDb2RlQmxv
Y2sqIHVubGlua2VkQ29kZUJsb2NrID0gcHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2RlQmxvY2so
KTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5tX2xv
Y2spOworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBE
Rkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAgICB8
fCB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50RXhp
dFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRDYWNoZSkpOworfQorI2VuZGlmCisKK0lu
QnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxlZEJs
b2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVkU3Ry
aW5nSW1wbCogdWlkKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRC
bG9jay0+bV9sb2NrKTsKKworICAgIEluQnlJZFN0YXR1cyByZXN1bHQ7CisKKyNpZiBFTkFCTEUo
REZHX0pJVCkKKyAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVG
ZWVkYmFjayhsb2NrZXIsIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVpZCk7
CisKKyAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYgaGFzRXhpdFNpdGUocHJvZmls
ZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCwgdHJ1ZSk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtYXApOworI2VuZGlm
CisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCisjaWYgRU5BQkxFKERGR19KSVQpCitJbkJ5SWRT
dGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgSW5CeUlkU3RhdHVzIHJlc3VsdCA9IEluQnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2sobG9ja2VyLCBzdHViSW5mbywgdWlkKTsK
KworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSAmJiBJbkJ5SWRTdGF0dXM6Omhhc0V4
aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpCisgICAgICAg
IHJldHVybiBJbkJ5SWRTdGF0dXMoSW5CeUlkU3RhdHVzOjpUYWtlc1Nsb3dQYXRoLCB0cnVlKTsK
KyAgICByZXR1cm4gcmVzdWx0OworfQorI2VuZGlmIC8vIEVOQUJMRShERkdfSklUKQorCisjaWYg
RU5BQkxFKEpJVCkKK0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5m
b1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKAorICAgIGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYs
IFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5mbywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sK
KyAgICBpZiAoIXN0dWJJbmZvIHx8ICFzdHViSW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAg
IHJldHVybiBJbkJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisKKyAgICBpZiAoc3R1YkluZm8t
PnRvb2tTbG93UGF0aCkKKyAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKworICAgIC8vIEZpbmFsbHkgZmlndXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2Vz
cyBzdHJhdGVneS4KKyAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRl
ID0gU2ltcGxlOworICAgIHJlc3VsdC5tX3dhc1NlZW5JbkpJVCA9IHRydWU7IC8vIFRoaXMgaXMg
aW50ZXJlc3RpbmcgZm9yIGJ5dGVjb2RlIGR1bXBpbmcgb25seS4KKyAgICBzd2l0Y2ggKHN0dWJJ
bmZvLT5jYWNoZVR5cGUpIHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIHJl
dHVybiBJbkJ5SWRTdGF0dXMoTm9JbmZvcm1hdGlvbik7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6
SW5CeUlkU2VsZjogeworICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51
LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIGlmIChzdHJ1Y3R1
cmUtPnRha2VzU2xvd1BhdGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgICAgICBy
ZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICB1bnNpZ25l
ZCBhdHRyaWJ1dGVzOworICAgICAgICBJbkJ5SWRWYXJpYW50IHZhcmlhbnQ7CisgICAgICAgIHZh
cmlhbnQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0
ZXMpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZzZXQodmFyaWFudC5tX29mZnNldCkpCisgICAg
ICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAg
ICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikKKyAg
ICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1ZSk7CisKKyAg
ICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJlKTsKKyAgICAgICAgYm9v
bCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KTsKKyAgICAgICAgQVNT
RVJUX1VOVVNFRChkaWRBcHBlbmQsIGRpZEFwcGVuZCk7CisgICAgICAgIHJldHVybiByZXN1bHQ7
CisgICAgfQorCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAgICAgICAgUG9seW1vcnBo
aWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAgICBmb3IgKHVuc2lnbmVk
IGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsgKytsaXN0SW5kZXgpIHsK
KyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxpc3QtPmF0KGxpc3RJbmRl
eCk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisgICAgICAgICAgICAgICAg
cmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKworICAgICAgICAgICAg
aWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEluQnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKworICAgICAgICAgICAgU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN0cnVjdHVy
ZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBjYXNlcyBhcmlzZSBk
dWUgdG8gYXJyYXkubGVuZ3RoLiBXZSBoYXZlIG5vIHdheSBvZiBjcmVhdGluZyBhCisgICAgICAg
ICAgICAgICAgLy8gSW5CeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBkb24ndCByZWFsbHkg
aGF2ZSB0byBzaW5jZSB0aGUgREZHIGhhbmRsZXMgdGhvc2UKKyAgICAgICAgICAgICAgICAvLyBj
YXNlcyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhhdCdzIGEgYml0IGF3
a3dhcmQgLSB3ZSBzaG91bGRuJ3QKKyAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHVzZSB2YWx1
ZSBwcm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFjY2Vzc0Nhc2UgY291
bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHRvbGQgdXMuIEJ1dCwgaXQgd29ya3Mgd2VsbCBl
bm91Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90CisgICAgICAgICAgICAg
ICAgLy8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJuIElu
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAgICAgIH0KKworICAgICAg
ICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1
czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKKyAg
ICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRo
OgorICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCwgdHJ1
ZSk7CisKKyAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbk1pc3M6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgICAgICAgICAg
ZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IEl0IHdvdWxkIGJlIHRvdGFs
bHkgc3dlZXQgdG8gc3VwcG9ydCBtb3JlIG9mIHRoZXNlIGF0IHNvbWUgcG9pbnQgaW4gdGhlCisg
ICAgICAgICAgICAgICAgICAgIC8vIGZ1dHVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTEzMzA1MgorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgsIHRydWUpOworICAgICAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgICAgIEluQnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAgICAgICAgU3RydWN0
dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCksCisgICAgICAgICAg
ICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCkpOworCisgICAgICAgICAg
ICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfQor
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAgICAgICAg
cmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoLCB0cnVlKTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoKTsK
K30KKyNlbmRpZiAvLyBFTkFCTEUoSklUKQorCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpj
b21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZUJsb2NrKiBkZmdC
bG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLAorICAgIFN0dWJJbmZvTWFwJiBkZmdNYXAs
IENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyNpZiBF
TkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGZnQmxvY2spIHsKKyAgICAgICAgQ2FsbExpbmtTdGF0
dXM6OkV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIENv
bmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAg
ICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKAor
ICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7
CisgICAgICAgIH0KKworICAgICAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OworICAgICAgICB7Cisg
ICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xvY2spOwor
ICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVl
ZGJhY2sobG9ja2VyLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAgICB9CisK
KyAgICAgICAgaWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICByZXR1cm4g
cmVzdWx0OworCisgICAgICAgIGlmIChoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBjb2RlT3Jp
Z2luLmJ5dGVjb2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtl
c1Nsb3dQYXRoLCB0cnVlKTsKKworICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRmZ0Js
b2NrKTsKKyAgICBVTlVTRURfUEFSQU0oZGZnTWFwKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGNv
bXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgdWlkKTsKK30KKwordm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1
cmVTZXQmIHN0cnVjdHVyZVNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAg
ICAgIHJldHVybjsKKyAgICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHN0cnVj
dHVyZVNldCk7CisgICAgaWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRl
ID0gTm9JbmZvcm1hdGlvbjsKK30KKwordm9pZCBJbkJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJl
YW0mIG91dCkgY29uc3QKK3sKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBzd2l0Y2ggKG1fc3Rh
dGUpIHsKKyAgICBjYXNlIE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiTm9JbmZv
cm1hdGlvbiIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0
LnByaW50KCJTaW1wbGUiKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWtlc1Nsb3dQYXRo
OgorICAgICAgICBvdXQucHJpbnQoIlRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAgYnJlYWs7Cisg
ICAgfQorICAgIG91dC5wcmludCgiLCAiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIiwgc2Vlbklu
SklUID0gIiwgbV93YXNTZWVuSW5KSVQsICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQwor
CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uNDI0NjUzMmQxYTUwODQ3ZjdlNjkxNTQzYjAxYzEzYTY3MWY1MGRiMQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaApA
QCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtp
IDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2Ug
aW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0
aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25z
CisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3Qg
cmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0
aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBP
UiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUK
KyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9S
IEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNI
QUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJF
Q1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05T
RVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJP
Q1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERB
VEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FV
U0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJB
Q1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBP
UiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJ
UyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIkNhbGxMaW5rU3RhdHVzLmgi
CisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNvbmN1cnJlbnRKU0xvY2suaCIK
KyNpbmNsdWRlICJJbkJ5SWRWYXJpYW50LmgiCisKK25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBB
Y2Nlc3NDYXNlOworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU3RydWN0dXJlU3R1YkluZm87CisK
K3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVTdHViSW5mbyosIENvZGVPcmln
aW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitjbGFzcyBJbkJ5SWRTdGF0dXMgewor
cHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJdCdzIHVuY2FjaGVkIHNvIHdl
IGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3JtYXRpb24sCisgICAgICAgIC8v
IEl0J3MgY2FjaGVkIGZvciBhIHNpbXBsZSBhY2Nlc3MgdG8gYSBrbm93biBvYmplY3QgcHJvcGVy
dHkgd2l0aAorICAgICAgICAvLyBhIHBvc3NpYmxlIHN0cnVjdHVyZSBjaGFpbiBhbmQgYSBwb3Nz
aWJsZSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgU2ltcGxlLAorICAgICAgICAvLyBJdCdzIGtu
b3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICBUYWtlc1Nsb3dQYXRoLAorICAg
IH07CisKKyAgICBJbkJ5SWRTdGF0dXMoKSA9IGRlZmF1bHQ7CisKKyAgICBleHBsaWNpdCBJbkJ5
SWRTdGF0dXMoU3RhdGUgc3RhdGUpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVChzdGF0ZSA9PSBOb0luZm9ybWF0aW9uIHx8IHN0YXRlID09IFRha2VzU2xv
d1BhdGgpOworICAgIH0KKworICAgIEluQnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSwgYm9vbCB3YXNT
ZWVuSW5KSVQsIGNvbnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgPSBJbkJ5SWRWYXJpYW50KCkp
CisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICAgICAgLCBtX3dhc1NlZW5JbkpJVCh3YXNT
ZWVuSW5KSVQpCisgICAgeworICAgICAgICBBU1NFUlQoKHN0YXRlID09IFNpbXBsZSkgPT0gdmFy
aWFudC5pc1NldCgpKTsKKyAgICAgICAgbV92YXJpYW50cy5hcHBlbmQodmFyaWFudCk7CisgICAg
fQorCisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayosIFN0dWJJ
bmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVC
bG9jaywgQ29kZUJsb2NrKiBkZmdCbG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBTdHVi
SW5mb01hcCYgZGZnTWFwLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKwor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0
dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9j
aywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlk
KTsKKyNlbmRpZgorCisgICAgU3RhdGUgc3RhdGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9
CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0
aW9uOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0
KCk7IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1w
bGU7IH0KKworICAgIHNpemVfdCBudW1WYXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFu
dHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9yPEluQnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7IH0KKyAgICBjb25zdCBJbkJ5SWRWYXJpYW50
JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9Cisg
ICAgY29uc3QgSW5CeUlkVmFyaWFudCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsg
cmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgYm9vbCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRoOyB9CisKKyAgICBib29sIHdhc1NlZW5JbkpJ
VCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzU2VlbkluSklUOyB9CisKKyAgICAvLyBBdHRlbXB0cyB0
byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBmaXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBz
ZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgorICAgIHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVj
dHVyZVNldCYpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7CisKK3ByaXZh
dGU6CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc3RhdGljIGJvb2wgaGFzRXhpdFNpdGUoQ29k
ZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7CisjZW5kaWYKKyNpZiBFTkFCTEUoSklU
KQorICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2soY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8q
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyNlbmRpZgorICAgIGJvb2wgYXBwZW5kVmFyaWFu
dChjb25zdCBJbkJ5SWRWYXJpYW50Jik7CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgTm9JbmZvcm1h
dGlvbiB9OworICAgIFZlY3RvcjxJbkJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworICAgIGJv
b2wgbV93YXNTZWVuSW5KSVQgeyBmYWxzZSB9OworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjI2YTVkMzMzMjk5MDI0NGFiN2I4MWRjYmY1ZWU1OWI1NjE1MDBiYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbkJ5SWRW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitJbkJ5SWRWYXJpYW50OjpJbkJ5SWRWYXJpYW50
KGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBt
X3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYgKCFzdHJ1Y3R1cmVTZXQu
c2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CisgICAg
ICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgSW5C
eUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpCit7
CisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIGlmICghbV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0
aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICBpZiAoIW1l
cmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKworICAgIG1fc3RydWN0dXJl
U2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEluQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgSW5CeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sK
KyAgICBpZiAoIWlzU2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoCisgICAgICAgICI8IiwgaW5Db250
ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsK
KyAgICBvdXQucHJpbnQoIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI1
YWMzYzYyMGUyOTdlMzA4OWU0ZjFhNTJhZmM0MGFmNjA3MmJjYWEKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIERPTUpJVCB7CitjbGFzcyBHZXR0ZXJT
ZXR0ZXI7Cit9CisKK2NsYXNzIEluQnlJZFN0YXR1czsKK3N0cnVjdCBEdW1wQ29udGV4dDsKKwor
Y2xhc3MgSW5CeUlkVmFyaWFudCB7CitwdWJsaWM6CisgICAgSW5CeUlkVmFyaWFudChjb25zdCBT
dHJ1Y3R1cmVTZXQmID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9m
ZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSk7CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0
cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXQoKTsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisKKyAgICAvLyBBIG5vbi1l
bXB0eSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBsb2FkLgor
ICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25z
dCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsgfQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0
KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7IH0KKworICAgIGJvb2wgaXNIaXQoKSBjb25zdCB7
IHJldHVybiBvZmZzZXQoKSAhPSBpbnZhbGlkT2Zmc2V0OyB9CisKKyAgICBib29sIGF0dGVtcHRU
b01lcmdlKGNvbnN0IEluQnlJZFZhcmlhbnQmIG90aGVyKTsKKworICAgIHZvaWQgZHVtcChQcmlu
dFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQgZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1
bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZhdGU6CisgICAgZnJpZW5kIGNsYXNzIEluQnlJZFN0
YXR1czsKKworICAgIFN0cnVjdHVyZVNldCBtX3N0cnVjdHVyZVNldDsKKyAgICBPYmplY3RQcm9w
ZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlvblNldDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29m
ZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaAppbmRleCA1MmFiNzZlODU1
NzRmZDY4ODdmYjY4ZjZmNDVjM2RjMzAyOWRiOTM0Li5iNDllNGUyNDJlNTJmMDgxMzE1ZTQ4ZmIx
ZTFiY2MyOTdlNTI4YWUwIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaApAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3Bh
Y2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwogY2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBK
U09iamVjdDsKIGNsYXNzIFByb3BlcnR5U2xvdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKaW5kZXggZmEwOTdmMzJjNjY2ZWQzZjMzZmRiYzRi
YmUzOGMxNTQ0MmI0ZDZlMS4uMGM3NzM4YjQ2ODBmYTY4MDE5YTA4NjAyNGRkZjMyOTRkZjZiZTlj
ZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHAKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5j
cHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNsdWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2lu
Y2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKICNpbmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5C
eUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiSW5zdGFuY2VPZlN0YXR1cy5oIgogI2luY2x1ZGUgIkpT
Q0lubGluZXMuaCIKICNpbmNsdWRlICJKU0ZpeGVkQXJyYXkuaCIKQEAgLTY0MDIsMTAgKzY0MDMs
MzMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAg
ICAgICAgY2FzZSBvcF9pbl9ieV9pZDogewogICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChW
aXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAg
ICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRl
bnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVjdGlvblszXS51Lm9wZXJhbmRdOwotICAgICAgICAg
ICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwK
LSAgICAgICAgICAgICAgICBhZGRUb0dyYXBoKEluQnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1i
ZXIpLCBiYXNlKSk7CisgICAgICAgICAgICBVbmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFw
aC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJOdW1iZXJdOworCisgICAgICAgICAgICBJbkJ5SWRT
dGF0dXMgc3RhdHVzID0gSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAg
IG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmlsZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCisgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9z
LAorICAgICAgICAgICAgICAgIGN1cnJlbnRDb2RlT3JpZ2luKCksIHVpZCk7CisKKyAgICAgICAg
ICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkgeworICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0
dXJlRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9tYXRjaFN0cnVjdHVyZURhdGEuYWRkKCk7CisgICAg
ICAgICAgICAgICAgZm9yIChjb25zdCBJbkJ5SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZh
cmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAgICAgICAgY2hlY2sodmFyaWFudC5jb25kaXRpb25T
ZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2
YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBNYXRjaFN0
cnVjdHVyZVZhcmlhbnQgbWF0Y2hWYXJpYW50OworICAgICAgICAgICAgICAgICAgICAgICAgbWF0
Y2hWYXJpYW50LnN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJl
KTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVmFyaWFudC5yZXN1bHQgPSB2YXJpYW50
LmlzSGl0KCk7CisKKyAgICAgICAgICAgICAgICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVu
ZChtYXRjaFZhcmlhbnQpOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAg
fQorCisgICAgICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0
dXJlLCBPcEluZm8oZGF0YSksIGJhc2UpOworICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1hdGNoKTsKKyAgICAgICAg
ICAgICAgICBORVhUX09QQ09ERShvcF9pbl9ieV9pZCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFu
ZCksIGFkZFRvR3JhcGgoSW5CeUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsK
ICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX2J5X2lkKTsKLSAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAKICAgICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340788</attachid>
            <date>2018-05-19 16:36:25 -0700</date>
            <delta_ts>2018-05-19 17:26:21 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185803-20180520083624.patch</filename>
            <type>text/plain</type>
            <size>28531</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDAwCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjI4MTc2ZTcyYjVhMzMzMjIxMzU4YzRmM2JlYTg0MTBjZWFmMGRhLi4yYTRlMWU4MDNlNjAzOGFm
OGY0MGM2NDg2OTEzNGYxMWM3MjUxZjRmIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MSBAQAorMjAxOC0wNS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBNYXRj
aFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWF0Y2hTdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBmb3IgaW5zdGFuY2VvZiBvcHRpbWl6YXRp
b24uIEJ1dCB0aGlzIG5vZGUKKyAgICAgICAgaXMgYWxzbyB1c2VmdWwgZm9yIEluQnlJZCBub2Rl
LiBUaGlzIHBhdGNoIGNvbnZlcnRzIEluQnlJZCB0byBNYXRjaFN0cnVjdHVyZQorICAgICAgICBu
b2RlIHdpdGggQ2hlY2tTdHJ1Y3R1cmVzIGlmIHBvc3NpYmxlIGJ5IHVzaW5nIEluQnlJZFN0YXR1
cy4KKworICAgICAgICAqIFNvdXJjZXMudHh0OgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFN0
YXR1cy5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlh
bnQpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IpOgorICAgICAgICAo
SlNDOjpJbkJ5SWRTdGF0dXM6Omhhc0V4aXRTaXRlKToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3Rh
dHVzOjpjb21wdXRlRm9yU3R1YkluZm8pOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmNv
bXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKToKKyAgICAgICAgKEpTQzo6
SW5CeUlkU3RhdHVzOjpmaWx0ZXIpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmR1bXAg
Y29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFN0YXR1cy5oOiBBZGRlZC4KKyAgICAg
ICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpJbkJ5SWRTdGF0dXMpOgorICAgICAgICAoSlNDOjpJbkJ5
SWRTdGF0dXM6OnN0YXRlIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjppc1Nl
dCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6b3BlcmF0b3IgYm9vbCBjb25z
dCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6aXNTaW1wbGUgY29uc3QpOgorICAgICAg
ICAoSlNDOjpJbkJ5SWRTdGF0dXM6Om51bVZhcmlhbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6
SW5CeUlkU3RhdHVzOjp2YXJpYW50cyBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1
czo6YXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6Om9wZXJhdG9yW10gY29u
c3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OnRha2VzU2xvd1BhdGggY29uc3QpOgor
ICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6SW5CeUlkVmFyaWFudDo6SW5CeUlkVmFyaWFudCk6CisgICAgICAgIChKU0M6OkluQnlJZFZh
cmlhbnQ6OmF0dGVtcHRUb01lcmdlKToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6ZHVt
cCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQgY29u
c3QpOgorICAgICAgICAqIGJ5dGVjb2RlL0luQnlJZFZhcmlhbnQuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluQnlJZFZhcmlhbnQ6OmlzU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlk
VmFyaWFudDo6b3BlcmF0b3IgYm9vbCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlh
bnQ6OnN0cnVjdHVyZVNldCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OnN0
cnVjdHVyZVNldCk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OmNvbmRpdGlvblNldCBj
b25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6Om9mZnNldCBjb25zdCk6CisgICAg
ICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OmlzSGl0IGNvbnN0KToKKyAgICAgICAgKiBieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oOgorICAgICAgICAqIGRmZy9ERkdCeXRlQ29kZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6Qnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2spOgor
CiAyMDE4LTA1LTE4ICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAg
REZHIHNob3VsZCBpbmxpbmUgSW5zdGFuY2VPZiBJQ3MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9Tb3VyY2VzLnR4dCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4
dAppbmRleCA2YWQxYTQ1ZDdmNTk3ZjYxNjJkYTkxYTRlMGQ5NDkzYTM4MjFhM2YyLi44ODA2OTFi
MmRmM2IyZmY3YjJiZWJkNzU2OTU4N2RjYjQyNmNlN2JhIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2
YVNjcmlwdENvcmUvU291cmNlcy50eHQKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJj
ZXMudHh0CkBAIC0yMTksNiArMjE5LDggQEAgYnl0ZWNvZGUvRnVuY3Rpb25Db2RlQmxvY2suY3Bw
CiBieXRlY29kZS9HZXRCeUlkU3RhdHVzLmNwcAogYnl0ZWNvZGUvR2V0QnlJZFZhcmlhbnQuY3Bw
CiBieXRlY29kZS9HZXR0ZXJTZXR0ZXJBY2Nlc3NDYXNlLmNwcAorYnl0ZWNvZGUvSW5CeUlkU3Rh
dHVzLmNwcAorYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKIGJ5dGVjb2RlL0lubGluZUFjY2Vz
cy5jcHAKIGJ5dGVjb2RlL0lubGluZUNhbGxGcmFtZS5jcHAKIGJ5dGVjb2RlL0lubGluZUNhbGxG
cmFtZVNldC5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMC4uOGIzMTBmYjk5YjQxNmJkNDFmZjZkMmJlZjdkNjNlYWI4MTkz
NzkzZAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRTdGF0dXMuY3BwCkBAIC0wLDAgKzEsMjM3IEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0
cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRo
b3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9s
bG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQg
QU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElU
WSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVE
LiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNs
dWRlICJJbkJ5SWRTdGF0dXMuaCIKKworI2luY2x1ZGUgIkNvZGVCbG9jay5oIgorI2luY2x1ZGUg
IkNvbXBsZXhHZXRTdGF0dXMuaCIKKyNpbmNsdWRlICJJQ1N0YXR1c1V0aWxzLmgiCisjaW5jbHVk
ZSAiSlNDSW5saW5lcy5oIgorI2luY2x1ZGUgIlBvbHltb3JwaGljQWNjZXNzLmgiCisjaW5jbHVk
ZSAiU3RydWN0dXJlU3R1YkluZm8uaCIKKyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFt
ZXNwYWNlIEpTQyB7CisKK2Jvb2wgSW5CeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50KGNvbnN0IElu
QnlJZFZhcmlhbnQmIHZhcmlhbnQpCit7CisgICAgcmV0dXJuIGFwcGVuZElDU3RhdHVzVmFyaWFu
dChtX3ZhcmlhbnRzLCB2YXJpYW50KTsKK30KKworSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6
Y29tcHV0ZUZvcihDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0dWJJbmZvTWFwJiBtYXAsIHVu
c2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisgICAgQ29u
Y3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxlZEJsb2NrLT5tX2xvY2spOworCisgICAgSW5C
eUlkU3RhdHVzIHJlc3VsdDsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIHJlc3VsdCA9IGNv
bXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKGxvY2tlciwgbWFwLmdldChD
b2RlT3JpZ2luKGJ5dGVjb2RlSW5kZXgpKSwgdWlkKTsKKworICAgIGlmICghcmVzdWx0LnRha2Vz
U2xvd1BhdGgoKSAmJiBoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBieXRlY29kZUluZGV4KSkK
KyAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyNlbHNlCisgICAg
VU5VU0VEX1BBUkFNKG1hcCk7CisjZW5kaWYKKworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0lu
QnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBDb2RlQmxvY2sqIGRmZ0Jsb2NrLCBTdHViSW5mb01hcCYgYmFzZWxpbmVNYXAs
CisgICAgU3R1YkluZm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworI2lmIEVOQUJMRShERkdfSklUKQorICAgIGlmIChkZmdCbG9j
aykgeworICAgICAgICBDYWxsTGlua1N0YXR1czo6RXhpdFNpdGVEYXRhIGV4aXRTaXRlRGF0YTsK
KyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVudEpTTG9ja2VyIGxvY2tlcihwcm9maWxl
ZEJsb2NrLT5tX2xvY2spOworICAgICAgICAgICAgZXhpdFNpdGVEYXRhID0gQ2FsbExpbmtTdGF0
dXM6OmNvbXB1dGVFeGl0U2l0ZURhdGEoCisgICAgICAgICAgICAgICAgcHJvZmlsZWRCbG9jaywg
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4KTsKKyAgICAgICAgfQorCisgICAgICAgIEluQnlJZFN0
YXR1cyByZXN1bHQ7CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIoZGZnQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICByZXN1bHQgPSBjb21wdXRlRm9y
U3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayhsb2NrZXIsIGRmZ01hcC5nZXQoY29kZU9y
aWdpbiksIHVpZCk7CisgICAgICAgIH0KKworICAgICAgICBpZiAocmVzdWx0LnRha2VzU2xvd1Bh
dGgoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisKKyAgICAgICAgaWYgKGhhc0V4aXRT
aXRlKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpCisgICAgICAgICAg
ICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgIGlmIChyZXN1
bHQuaXNTZXQoKSkKKyAgICAgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorI2Vsc2UKKyAg
ICBVTlVTRURfUEFSQU0oZGZnQmxvY2spOworICAgIFVOVVNFRF9QQVJBTShkZmdNYXApOworI2Vu
ZGlmCisKKyAgICByZXR1cm4gY29tcHV0ZUZvcihwcm9maWxlZEJsb2NrLCBiYXNlbGluZU1hcCwg
Y29kZU9yaWdpbi5ieXRlY29kZUluZGV4LCB1aWQpOworfQorCisjaWYgRU5BQkxFKERGR19KSVQp
Citib29sIEluQnlJZFN0YXR1czo6aGFzRXhpdFNpdGUoQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCB1bnNpZ25lZCBieXRlY29kZUluZGV4KQoreworICAgIFVubGlua2VkQ29kZUJsb2NrKiB1bmxp
bmtlZENvZGVCbG9jayA9IHByb2ZpbGVkQmxvY2stPnVubGlua2VkQ29kZUJsb2NrKCk7CisgICAg
Q29uY3VycmVudEpTTG9ja2VyIGxvY2tlcih1bmxpbmtlZENvZGVCbG9jay0+bV9sb2NrKTsKKyAg
ICByZXR1cm4gdW5saW5rZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVx
dWVudEV4aXRTaXRlKGJ5dGVjb2RlSW5kZXgsIEJhZENhY2hlKSkKKyAgICAgICAgfHwgdW5saW5r
ZWRDb2RlQmxvY2stPmhhc0V4aXRTaXRlKGxvY2tlciwgREZHOjpGcmVxdWVudEV4aXRTaXRlKGJ5
dGVjb2RlSW5kZXgsIEJhZENvbnN0YW50Q2FjaGUpKTsKK30KKworSW5CeUlkU3RhdHVzIEluQnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYgbG9j
a2VyLCBDb2RlQmxvY2sqIHByb2ZpbGVkQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHViSW5m
bywgQ29kZU9yaWdpbiBjb2RlT3JpZ2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAg
IEluQnlJZFN0YXR1cyByZXN1bHQgPSBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dp
dGhvdXRFeGl0U2l0ZUZlZWRiYWNrKGxvY2tlciwgc3R1YkluZm8sIHVpZCk7CisKKyAgICBpZiAo
IXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYgSW5CeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShwcm9m
aWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKQorICAgICAgICByZXR1cm4gSW5C
eUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgIHJldHVybiByZXN1bHQ7Cit9CisKK0luQnlJ
ZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZl
ZWRiYWNrKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVyZVN0dWJJbmZvKiBzdHVi
SW5mbywgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBpZiAoIXN0dWJJbmZvIHx8ICFz
dHViSW5mby0+ZXZlckNvbnNpZGVyZWQpCisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoTm9J
bmZvcm1hdGlvbik7CisKKyAgICBpZiAoc3R1YkluZm8tPnRvb2tTbG93UGF0aCkKKyAgICAgICAg
cmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgIC8vIEZpbmFsbHkgZmln
dXJlIG91dCBpZiB3ZSBjYW4gZGVyaXZlIGFuIGFjY2VzcyBzdHJhdGVneS4KKyAgICBJbkJ5SWRT
dGF0dXMgcmVzdWx0OworICAgIHJlc3VsdC5tX3N0YXRlID0gU2ltcGxlOworICAgIHN3aXRjaCAo
c3R1YkluZm8tPmNhY2hlVHlwZSkgeworICAgIGNhc2UgQ2FjaGVUeXBlOjpVbnNldDoKKyAgICAg
ICAgcmV0dXJuIEluQnlJZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKworICAgIGNhc2UgQ2FjaGVU
eXBlOjpJbkJ5SWRTZWxmOiB7CisgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gc3R1Yklu
Zm8tPnUuYnlJZFNlbGYuYmFzZU9iamVjdFN0cnVjdHVyZS5nZXQoKTsKKyAgICAgICAgaWYgKHN0
cnVjdHVyZS0+dGFrZXNTbG93UGF0aEluREZHRm9ySW1wdXJlUHJvcGVydHkoKSkKKyAgICAgICAg
ICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIHVuc2lnbmVk
IGF0dHJpYnV0ZXM7CisgICAgICAgIEluQnlJZFZhcmlhbnQgdmFyaWFudDsKKyAgICAgICAgdmFy
aWFudC5tX29mZnNldCA9IHN0cnVjdHVyZS0+Z2V0Q29uY3VycmVudGx5KHVpZCwgYXR0cmlidXRl
cyk7CisgICAgICAgIGlmICghaXNWYWxpZE9mZnNldCh2YXJpYW50Lm1fb2Zmc2V0KSkKKyAgICAg
ICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgIGlmIChh
dHRyaWJ1dGVzICYgUHJvcGVydHlBdHRyaWJ1dGU6OkN1c3RvbUFjY2Vzc29yKQorICAgICAgICAg
ICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICB2YXJpYW50
Lm1fc3RydWN0dXJlU2V0LmFkZChzdHJ1Y3R1cmUpOworICAgICAgICBib29sIGRpZEFwcGVuZCA9
IHJlc3VsdC5hcHBlbmRWYXJpYW50KHZhcmlhbnQpOworICAgICAgICBBU1NFUlRfVU5VU0VEKGRp
ZEFwcGVuZCwgZGlkQXBwZW5kKTsKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisKKyAg
ICBjYXNlIENhY2hlVHlwZTo6U3R1YjogeworICAgICAgICBQb2x5bW9ycGhpY0FjY2VzcyogbGlz
dCA9IHN0dWJJbmZvLT51LnN0dWI7CisgICAgICAgIGZvciAodW5zaWduZWQgbGlzdEluZGV4ID0g
MDsgbGlzdEluZGV4IDwgbGlzdC0+c2l6ZSgpOyArK2xpc3RJbmRleCkgeworICAgICAgICAgICAg
Y29uc3QgQWNjZXNzQ2FzZSYgYWNjZXNzID0gbGlzdC0+YXQobGlzdEluZGV4KTsKKyAgICAgICAg
ICAgIGlmIChhY2Nlc3MudmlhUHJveHkoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBpZiAoYWNjZXNzLnVzZXNQb2x5
UHJvdG8oKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1Bh
dGgpOworCisgICAgICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IGFjY2Vzcy5zdHJ1Y3R1
cmUoKTsKKyAgICAgICAgICAgIGlmICghc3RydWN0dXJlKSB7CisgICAgICAgICAgICAgICAgLy8g
VGhlIG51bGwgc3RydWN0dXJlIGNhc2VzIGFyaXNlIGR1ZSB0byBhcnJheS5sZW5ndGguIFdlIGhh
dmUgbm8gd2F5IG9mIGNyZWF0aW5nIGEKKyAgICAgICAgICAgICAgICAvLyBJbkJ5SWRWYXJpYW50
IGZvciB0aG9zZSwgYW5kIHdlIGRvbid0IHJlYWxseSBoYXZlIHRvIHNpbmNlIHRoZSBERkcgaGFu
ZGxlcyB0aG9zZQorICAgICAgICAgICAgICAgIC8vIGNhc2VzIGluIEZpeHVwUGhhc2UgdXNpbmcg
dmFsdWUgcHJvZmlsaW5nLiBUaGF0J3MgYSBiaXQgYXdrd2FyZCAtIHdlIHNob3VsZG4ndAorICAg
ICAgICAgICAgICAgIC8vIGhhdmUgdG8gdXNlIHZhbHVlIHByb2ZpbGluZyB0byBkaXNjb3ZlciBz
b21ldGhpbmcgdGhhdCB0aGUgQWNjZXNzQ2FzZSBjb3VsZCBoYXZlCisgICAgICAgICAgICAgICAg
Ly8gdG9sZCB1cy4gQnV0LCBpdCB3b3JrcyB3ZWxsIGVub3VnaC4gU28sIG91ciBvbmx5IGNvbmNl
cm4gaGVyZSBpcyB0byBub3QKKyAgICAgICAgICAgICAgICAvLyBjcmFzaCBvbiBudWxsIHN0cnVj
dHVyZS4KKyAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBDb21wbGV4R2V0U3RhdHVzIGNvbXBsZXhH
ZXRTdGF0dXMgPSBDb21wbGV4R2V0U3RhdHVzOjpjb21wdXRlRm9yKHN0cnVjdHVyZSwgYWNjZXNz
LmNvbmRpdGlvblNldCgpLCB1aWQpOworICAgICAgICAgICAgc3dpdGNoIChjb21wbGV4R2V0U3Rh
dHVzLmtpbmQoKSkgeworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpTaG91bGRT
a2lwOgorICAgICAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgICAgICBjYXNlIENvbXBs
ZXhHZXRTdGF0dXM6OlRha2VzU2xvd1BhdGg6CisgICAgICAgICAgICAgICAgcmV0dXJuIEluQnlJ
ZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3Rh
dHVzOjpJbmxpbmVhYmxlOiB7CisgICAgICAgICAgICAgICAgc3dpdGNoIChhY2Nlc3MudHlwZSgp
KSB7CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbkhpdDoKKyAgICAgICAgICAg
ICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluTWlzczoKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7
CisgICAgICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIElu
QnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAg
ICAgICAgICBJbkJ5SWRWYXJpYW50IHZhcmlhbnQoCisgICAgICAgICAgICAgICAgICAgIFN0cnVj
dHVyZVNldChzdHJ1Y3R1cmUpLCBjb21wbGV4R2V0U3RhdHVzLm9mZnNldCgpLAorICAgICAgICAg
ICAgICAgICAgICBjb21wbGV4R2V0U3RhdHVzLmNvbmRpdGlvblNldCgpKTsKKworICAgICAgICAg
ICAgICAgIGlmICghcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCkpCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgICAgICAgICAg
ICAgYnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKworICAgIGRlZmF1bHQ6CisgICAgICAgIHJldHVy
biBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgfQorCisgICAgUkVMRUFTRV9BU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICByZXR1cm4gSW5CeUlkU3RhdHVzKCk7Cit9CisjZW5kaWYK
Kwordm9pZCBJbkJ5SWRTdGF0dXM6OmZpbHRlcihjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVy
ZVNldCkKK3sKKyAgICBpZiAobV9zdGF0ZSAhPSBTaW1wbGUpCisgICAgICAgIHJldHVybjsKKyAg
ICBmaWx0ZXJJQ1N0YXR1c1ZhcmlhbnRzKG1fdmFyaWFudHMsIHN0cnVjdHVyZVNldCk7CisgICAg
aWYgKG1fdmFyaWFudHMuaXNFbXB0eSgpKQorICAgICAgICBtX3N0YXRlID0gTm9JbmZvcm1hdGlv
bjsKK30KKwordm9pZCBJbkJ5SWRTdGF0dXM6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QK
K3sKKyAgICBvdXQucHJpbnQoIigiKTsKKyAgICBzd2l0Y2ggKG1fc3RhdGUpIHsKKyAgICBjYXNl
IE5vSW5mb3JtYXRpb246CisgICAgICAgIG91dC5wcmludCgiTm9JbmZvcm1hdGlvbiIpOworICAg
ICAgICBicmVhazsKKyAgICBjYXNlIFNpbXBsZToKKyAgICAgICAgb3V0LnByaW50KCJTaW1wbGUi
KTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBUYWtlc1Nsb3dQYXRoOgorICAgICAgICBvdXQu
cHJpbnQoIlRha2VzU2xvd1BhdGgiKTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgIG91dC5w
cmludCgiLCAiLCBsaXN0RHVtcChtX3ZhcmlhbnRzKSwgIikiKTsKK30KKworfSAvLyBuYW1lc3Bh
Y2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRTdGF0dXMuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMu
aApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwLi42NjE1ZGZjZGY4ZjRjYjE2MDdlYjQxNDUwOGQwNTFmNWQ3ZWY4MDE4Ci0t
LSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0luQnlJZFN0
YXR1cy5oCkBAIC0wLDAgKzEsOTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtl
IFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBh
bmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1v
ZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29u
ZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29k
ZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRp
c3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIg
bWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNP
RlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBB
TlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwg
T1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywK
KyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0Yg
VVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dF
VkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElO
IENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJ
R0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCisgKi8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJDYWxsTGlua1N0
YXR1cy5oIgorI2luY2x1ZGUgIkNvZGVPcmlnaW4uaCIKKyNpbmNsdWRlICJDb25jdXJyZW50SlNM
b2NrLmgiCisjaW5jbHVkZSAiSW5CeUlkVmFyaWFudC5oIgorCituYW1lc3BhY2UgSlNDIHsKKwor
Y2xhc3MgQWNjZXNzQ2FzZTsKK2NsYXNzIENvZGVCbG9jazsKK2NsYXNzIFN0cnVjdHVyZVN0dWJJ
bmZvOworCit0eXBlZGVmIEhhc2hNYXA8Q29kZU9yaWdpbiwgU3RydWN0dXJlU3R1YkluZm8qLCBD
b2RlT3JpZ2luQXBwcm94aW1hdGVIYXNoPiBTdHViSW5mb01hcDsKKworY2xhc3MgSW5CeUlkU3Rh
dHVzIHsKK3B1YmxpYzoKKyAgICBlbnVtIFN0YXRlIHsKKyAgICAgICAgLy8gSXQncyB1bmNhY2hl
ZCBzbyB3ZSBoYXZlIG5vIGluZm9ybWF0aW9uLgorICAgICAgICBOb0luZm9ybWF0aW9uLAorICAg
ICAgICAvLyBJdCdzIGNhY2hlZCBmb3IgYSBzaW1wbGUgYWNjZXNzIHRvIGEga25vd24gb2JqZWN0
IHByb3BlcnR5IHdpdGgKKyAgICAgICAgLy8gYSBwb3NzaWJsZSBzdHJ1Y3R1cmUgY2hhaW4gYW5k
IGEgcG9zc2libGUgc3BlY2lmaWMgdmFsdWUuCisgICAgICAgIFNpbXBsZSwKKyAgICAgICAgLy8g
SXQncyBrbm93biB0byBvZnRlbiB0YWtlIHNsb3cgcGF0aC4KKyAgICAgICAgVGFrZXNTbG93UGF0
aCwKKyAgICB9OworCisgICAgSW5CeUlkU3RhdHVzKCkgPSBkZWZhdWx0OworCisgICAgSW5CeUlk
U3RhdHVzKFN0YXRlIHN0YXRlLCBjb25zdCBJbkJ5SWRWYXJpYW50JiB2YXJpYW50ID0gSW5CeUlk
VmFyaWFudCgpKQorICAgICAgICA6IG1fc3RhdGUoc3RhdGUpCisgICAgeworICAgICAgICBBU1NF
UlQoKHN0YXRlID09IFNpbXBsZSkgPT0gdmFyaWFudC5pc1NldCgpKTsKKyAgICAgICAgbV92YXJp
YW50cy5hcHBlbmQodmFyaWFudCk7CisgICAgfQorCisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBj
b21wdXRlRm9yKENvZGVCbG9jayosIFN0dWJJbmZvTWFwJiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRl
eCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21w
dXRlRm9yKENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgQ29kZUJsb2NrKiBkZmdCbG9jaywgU3R1
YkluZm9NYXAmIGJhc2VsaW5lTWFwLCBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2RlT3JpZ2luLCBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKworI2lmIEVOQUJMRShERkdfSklUKQorICAgIHN0YXRp
YyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tl
ciYsIENvZGVCbG9jayogYmFzZWxpbmVCbG9jaywgU3RydWN0dXJlU3R1YkluZm8qLCBDb2RlT3Jp
Z2luLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyNlbmRpZgorCisgICAgU3RhdGUgc3RhdGUo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlOyB9CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyBy
ZXR1cm4gbV9zdGF0ZSAhPSBOb0luZm9ybWF0aW9uOyB9CisgICAgZXhwbGljaXQgb3BlcmF0b3Ig
Ym9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KKyAgICBib29sIGlzU2ltcGxlKCkgY29u
c3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBTaW1wbGU7IH0KKworICAgIHNpemVfdCBudW1WYXJpYW50
cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHMuc2l6ZSgpOyB9CisgICAgY29uc3QgVmVjdG9y
PEluQnlJZFZhcmlhbnQsIDE+JiB2YXJpYW50cygpIGNvbnN0IHsgcmV0dXJuIG1fdmFyaWFudHM7
IH0KKyAgICBjb25zdCBJbkJ5SWRWYXJpYW50JiBhdChzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFyaWFudHNbaW5kZXhdOyB9CisgICAgY29uc3QgSW5CeUlkVmFyaWFudCYgb3BlcmF0
b3JbXShzaXplX3QgaW5kZXgpIGNvbnN0IHsgcmV0dXJuIGF0KGluZGV4KTsgfQorCisgICAgYm9v
bCB0YWtlc1Nsb3dQYXRoKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZSA9PSBUYWtlc1Nsb3dQYXRo
OyB9CisKKyAgICAvLyBBdHRlbXB0cyB0byByZWR1Y2UgdGhlIHNldCBvZiB2YXJpYW50cyB0byBm
aXQgdGhlIGdpdmVuIHN0cnVjdHVyZSBzZXQuIFRoaXMgbWF5IGJlIGFwcHJveGltYXRlLgorICAg
IHZvaWQgZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNldCYpOworCisgICAgdm9pZCBkdW1wKFByaW50
U3RyZWFtJikgY29uc3Q7CisKK3ByaXZhdGU6CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAgc3Rh
dGljIGJvb2wgaGFzRXhpdFNpdGUoQ29kZUJsb2NrKiwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCk7
CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNp
dGVGZWVkYmFjayhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyos
IFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworI2VuZGlmCisgICAgYm9vbCBhcHBlbmRWYXJpYW50
KGNvbnN0IEluQnlJZFZhcmlhbnQmKTsKKworICAgIFN0YXRlIG1fc3RhdGUgeyBOb0luZm9ybWF0
aW9uIH07CisgICAgVmVjdG9yPEluQnlJZFZhcmlhbnQsIDE+IG1fdmFyaWFudHM7Cit9OworCit9
IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29kZS9JbkJ5SWRWYXJpYW50LmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9J
bkJ5SWRWYXJpYW50LmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi42MjZhNWQzMzMyOTkwMjQ0YWI3YjgxZGNiZjVl
ZTU5YjU2MTUwMGJjCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCkBAIC0wLDAgKzEsODUgQEAKKy8qCisgKiBDb3B5cmln
aHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAqCisg
KiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRo
IG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0
IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1
Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRh
dGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlv
bi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJ
UycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hB
TlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJ
U0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRP
UlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lB
TCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1Ig
U0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1Mg
SU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElB
QklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisg
KiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkg
T1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBU
SEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZpZy5o
IgorI2luY2x1ZGUgIkluQnlJZFZhcmlhbnQuaCIKKworI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIK
KyNpbmNsdWRlIDx3dGYvTGlzdER1bXAuaD4KKworbmFtZXNwYWNlIEpTQyB7CisKK0luQnlJZFZh
cmlhbnQ6OkluQnlJZFZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQsIFBy
b3BlcnR5T2Zmc2V0IG9mZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmIGNv
bmRpdGlvblNldCkKKyAgICA6IG1fc3RydWN0dXJlU2V0KHN0cnVjdHVyZVNldCkKKyAgICAsIG1f
Y29uZGl0aW9uU2V0KGNvbmRpdGlvblNldCkKKyAgICAsIG1fb2Zmc2V0KG9mZnNldCkKK3sKKyAg
ICBpZiAoIXN0cnVjdHVyZVNldC5zaXplKCkpIHsKKyAgICAgICAgQVNTRVJUKG9mZnNldCA9PSBp
bnZhbGlkT2Zmc2V0KTsKKyAgICAgICAgQVNTRVJUKGNvbmRpdGlvblNldC5pc0VtcHR5KCkpOwor
ICAgIH0KK30KKworYm9vbCBJbkJ5SWRWYXJpYW50OjphdHRlbXB0VG9NZXJnZShjb25zdCBJbkJ5
SWRWYXJpYW50JiBvdGhlcikKK3sKKyAgICBpZiAobV9vZmZzZXQgIT0gb3RoZXIubV9vZmZzZXQp
CisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGlmIChtX2NvbmRpdGlvblNldC5pc0VtcHR5
KCkgIT0gb3RoZXIubV9jb25kaXRpb25TZXQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtZXJnZWRDb25kaXRpb25TZXQ7
CisgICAgaWYgKCFtX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpIHsKKyAgICAgICAgbWVyZ2VkQ29u
ZGl0aW9uU2V0ID0gbV9jb25kaXRpb25TZXQubWVyZ2VkV2l0aChvdGhlci5tX2NvbmRpdGlvblNl
dCk7CisgICAgICAgIGlmICghbWVyZ2VkQ29uZGl0aW9uU2V0LmlzVmFsaWQoKSB8fCAhbWVyZ2Vk
Q29uZGl0aW9uU2V0Lmhhc09uZVNsb3RCYXNlQ29uZGl0aW9uKCkpCisgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorICAgIG1fY29uZGl0aW9uU2V0ID0gbWVyZ2VkQ29uZGl0aW9uU2V0
OworCisgICAgbV9zdHJ1Y3R1cmVTZXQubWVyZ2Uob3RoZXIubV9zdHJ1Y3R1cmVTZXQpOworCisg
ICAgcmV0dXJuIHRydWU7Cit9CisKK3ZvaWQgSW5CeUlkVmFyaWFudDo6ZHVtcChQcmludFN0cmVh
bSYgb3V0KSBjb25zdAoreworICAgIGR1bXBJbkNvbnRleHQob3V0LCAwKTsKK30KKwordm9pZCBJ
bkJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiBvdXQsIER1bXBDb250ZXh0
KiBjb250ZXh0KSBjb25zdAoreworICAgIGlmICghaXNTZXQoKSkgeworICAgICAgICBvdXQucHJp
bnQoIjxlbXB0eT4iKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG91dC5wcmludCgK
KyAgICAgICAgIjwiLCBpbkNvbnRleHQoc3RydWN0dXJlU2V0KCksIGNvbnRleHQpLCAiLCAiLCBp
bkNvbnRleHQobV9jb25kaXRpb25TZXQsIGNvbnRleHQpKTsKKyAgICBvdXQucHJpbnQoIiwgb2Zm
c2V0ID0gIiwgb2Zmc2V0KCkpOworICAgIG91dC5wcmludCgiPiIpOworfQorCit9IC8vIG5hbWVz
cGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJp
YW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uYjc4OThhMzY4Nzg3MTljMjhiN2ZjOTE2YjczYWM2ZjllNzZmMmM0
NQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5
SWRWYXJpYW50LmgKQEAgLTAsMCArMSw2OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZ
dXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElO
IE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUg
Rk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBM
QVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9T
UyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04p
IEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcg
TkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVT
RQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElU
WSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIk9iamVj
dFByb3BlcnR5Q29uZGl0aW9uU2V0LmgiCisjaW5jbHVkZSAiUHJvcGVydHlPZmZzZXQuaCIKKyNp
bmNsdWRlICJTdHJ1Y3R1cmVTZXQuaCIKKworbmFtZXNwYWNlIEpTQyB7CituYW1lc3BhY2UgRE9N
SklUIHsKK2NsYXNzIEdldHRlclNldHRlcjsKK30KKworY2xhc3MgSW5CeUlkU3RhdHVzOworc3Ry
dWN0IER1bXBDb250ZXh0OworCitjbGFzcyBJbkJ5SWRWYXJpYW50IHsKK3B1YmxpYzoKKyAgICBJ
bkJ5SWRWYXJpYW50KGNvbnN0IFN0cnVjdHVyZVNldCYgPSBTdHJ1Y3R1cmVTZXQoKSwgUHJvcGVy
dHlPZmZzZXQgPSBpbnZhbGlkT2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dCYgPSBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCgpKTsKKworICAgIGJvb2wgaXNTZXQoKSBj
b25zdCB7IHJldHVybiAhIW1fc3RydWN0dXJlU2V0LnNpemUoKTsgfQorICAgIGV4cGxpY2l0IG9w
ZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgpOyB9CisgICAgY29uc3QgU3RydWN0
dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSBjb25zdCB7IHJldHVybiBtX3N0cnVjdHVyZVNldDsgfQor
ICAgIFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7
IH0KKworICAgIC8vIEEgbm9uLWVtcHR5IGNvbmRpdGlvbiBzZXQgbWVhbnMgdGhhdCB0aGlzIGlz
IGEgcHJvdG90eXBlIGluLWhpdC9pbi1taXNzLgorICAgIGNvbnN0IE9iamVjdFByb3BlcnR5Q29u
ZGl0aW9uU2V0JiBjb25kaXRpb25TZXQoKSBjb25zdCB7IHJldHVybiBtX2NvbmRpdGlvblNldDsg
fQorCisgICAgUHJvcGVydHlPZmZzZXQgb2Zmc2V0KCkgY29uc3QgeyByZXR1cm4gbV9vZmZzZXQ7
IH0KKworICAgIGJvb2wgaXNIaXQoKSBjb25zdCB7IHJldHVybiBvZmZzZXQoKSAhPSBpbnZhbGlk
T2Zmc2V0OyB9CisKKyAgICBib29sIGF0dGVtcHRUb01lcmdlKGNvbnN0IEluQnlJZFZhcmlhbnQm
IG90aGVyKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworICAgIHZvaWQg
ZHVtcEluQ29udGV4dChQcmludFN0cmVhbSYsIER1bXBDb250ZXh0KikgY29uc3Q7CisKK3ByaXZh
dGU6CisgICAgZnJpZW5kIGNsYXNzIEluQnlJZFN0YXR1czsKKworICAgIFN0cnVjdHVyZVNldCBt
X3N0cnVjdHVyZVNldDsKKyAgICBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCBtX2NvbmRpdGlv
blNldDsKKyAgICBQcm9wZXJ0eU9mZnNldCBtX29mZnNldDsKK307CisKK30gLy8gbmFtZXNwYWNl
IEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90
b0FjY2Vzc0NoYWluLmggYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3Rv
QWNjZXNzQ2hhaW4uaAppbmRleCA1MmFiNzZlODU1NzRmZDY4ODdmYjY4ZjZmNDVjM2RjMzAyOWRi
OTM0Li5iNDllNGUyNDJlNTJmMDgxMzE1ZTQ4ZmIxZTFiY2MyOTdlNTI4YWUwIDEwMDY0NAotLS0g
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4u
aApAQCAtMjksNiArMjksNyBAQAogCiBuYW1lc3BhY2UgSlNDIHsKIAorY2xhc3MgSlNDZWxsOwog
Y2xhc3MgSlNHbG9iYWxPYmplY3Q7CiBjbGFzcyBKU09iamVjdDsKIGNsYXNzIFByb3BlcnR5U2xv
dDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAK
aW5kZXggZmEwOTdmMzJjNjY2ZWQzZjMzZmRiYzRiYmUzOGMxNTQ0MmI0ZDZlMS4uMGM3NzM4YjQ2
ODBmYTY4MDE5YTA4NjAyNGRkZjMyOTRkZjZiZTljZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2RmZy9ERkdCeXRlQ29kZVBhcnNlci5jcHAKQEAgLTQ4LDYgKzQ4LDcgQEAKICNpbmNs
dWRlICJGdW5jdGlvbkNvZGVCbG9jay5oIgogI2luY2x1ZGUgIkdldEJ5SWRTdGF0dXMuaCIKICNp
bmNsdWRlICJIZWFwLmgiCisjaW5jbHVkZSAiSW5CeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiSW5z
dGFuY2VPZlN0YXR1cy5oIgogI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKICNpbmNsdWRlICJKU0Zp
eGVkQXJyYXkuaCIKQEAgLTY0MDIsMTAgKzY0MDMsMzMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6
cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1pdCkKICAgICAgICAgY2FzZSBvcF9pbl9ieV9pZDogewog
ICAgICAgICAgICAgTm9kZSogYmFzZSA9IGdldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3Ry
dWN0aW9uWzJdLnUub3BlcmFuZCkpOwogICAgICAgICAgICAgdW5zaWduZWQgaWRlbnRpZmllck51
bWJlciA9IG1faW5saW5lU3RhY2tUb3AtPm1faWRlbnRpZmllclJlbWFwW2N1cnJlbnRJbnN0cnVj
dGlvblszXS51Lm9wZXJhbmRdOwotICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJy
ZW50SW5zdHJ1Y3Rpb25bMV0udS5vcGVyYW5kKSwKLSAgICAgICAgICAgICAgICBhZGRUb0dyYXBo
KEluQnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlKSk7CisgICAgICAgICAgICBV
bmlxdWVkU3RyaW5nSW1wbCogdWlkID0gbV9ncmFwaC5pZGVudGlmaWVycygpW2lkZW50aWZpZXJO
dW1iZXJdOworCisgICAgICAgICAgICBJbkJ5SWRTdGF0dXMgc3RhdHVzID0gSW5CeUlkU3RhdHVz
Ojpjb21wdXRlRm9yKAorICAgICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fcHJvZmls
ZWRCbG9jaywgbV9kZmdDb2RlQmxvY2ssCisgICAgICAgICAgICAgICAgbV9pbmxpbmVTdGFja1Rv
cC0+bV9zdHViSW5mb3MsIG1fZGZnU3R1YkluZm9zLAorICAgICAgICAgICAgICAgIGN1cnJlbnRD
b2RlT3JpZ2luKCksIHVpZCk7CisKKyAgICAgICAgICAgIGlmIChzdGF0dXMuaXNTaW1wbGUoKSkg
eworICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJlRGF0YSogZGF0YSA9IG1fZ3JhcGgubV9t
YXRjaFN0cnVjdHVyZURhdGEuYWRkKCk7CisgICAgICAgICAgICAgICAgZm9yIChjb25zdCBJbkJ5
SWRWYXJpYW50JiB2YXJpYW50IDogc3RhdHVzLnZhcmlhbnRzKCkpIHsKKyAgICAgICAgICAgICAg
ICAgICAgY2hlY2sodmFyaWFudC5jb25kaXRpb25TZXQoKSk7CisgICAgICAgICAgICAgICAgICAg
IGZvciAoU3RydWN0dXJlKiBzdHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7Cisg
ICAgICAgICAgICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZVZhcmlhbnQgbWF0Y2hWYXJpYW50
OworICAgICAgICAgICAgICAgICAgICAgICAgbWF0Y2hWYXJpYW50LnN0cnVjdHVyZSA9IG1fZ3Jh
cGgucmVnaXN0ZXJTdHJ1Y3R1cmUoc3RydWN0dXJlKTsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoVmFyaWFudC5yZXN1bHQgPSB2YXJpYW50LmlzSGl0KCk7CisKKyAgICAgICAgICAgICAg
ICAgICAgICAgIGRhdGEtPnZhcmlhbnRzLmFwcGVuZChtYXRjaFZhcmlhbnQpOworICAgICAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgTm9kZSog
bWF0Y2ggPSBhZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIGJhc2UpOwor
ICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFd
LnUub3BlcmFuZCksIG1hdGNoKTsKKyAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9i
eV9pZCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIo
Y3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSW5CeUlkLCBPcElu
Zm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9w
X2luX2J5X2lkKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAgICAgICAgY2Fz
ZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvQ2hhbmdl
TG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNzJmOTk1NGZhZDQ3NmI0ZDNjZDdjMmEwZGVm
NTU0NGZjZmU0YjU3Ny4uOTRlOGFkYmRlOGVkZTdlNzliOGE2ZmY3YzMwMmFhOGJhY2Q0NDkyMSAx
MDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFuZ2VMb2cKQEAg
LTEsMyArMSwyMCBAQAorMjAxOC0wNS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdt
YWlsLmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBN
YXRjaFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5j
Z2k/aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAg
ICAgICAgKiBzdHJlc3MvaW4tYnktaWQtY29uc3RhbnQuanM6IEFkZGVkLgorICAgICAgICAoc2hv
dWxkQmUpOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAqIHN0cmVzcy9pbi1ieS1pZC1tYXRj
aC1pbnZhbGlkLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRlc3Qx
KToKKyAgICAgICAgKiBzdHJlc3MvaW4tYnktaWQtbWF0Y2guanM6IEFkZGVkLgorICAgICAgICAo
c2hvdWxkQmUpOgorICAgICAgICAodGVzdDEpOgorCiAyMDE4LTA1LTE5ICBZdXN1a2UgU3V6dWtp
ICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgogCiAgICAgICAgIFtKU0NdIEpTQyBzaG91bGQgaGF2
ZSBjb25zaXN0ZW50IEluQnlJZCBJQwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaW4tYnkt
aWQtY29uc3RhbnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1jb25zdGFudC5qcwpuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi45MzE5ZWE4M2M3NmQ3ODg0Y2IxMGE5ODg3YjlmNmNlODAxYWZhZDQzCi0tLSAvZGV2
L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtY29uc3RhbnQuanMKQEAgLTAsMCAr
MSwzMyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTog
JyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKG9iaikKK3sKKyAgICByZXR1cm4gImhl
bGxvIiBpbiBvYmoKK30KK25vSW5saW5lKHRlc3QxKTsKKworbGV0IGFycmF5ID0gWworICAgIFt7
CisgICAgICAgIGhlbGxvOiA0MgorICAgIH0sIHRydWVdLAorICAgIFt7CisgICAgICAgIGhlbGxv
OiA0MiwKKyAgICAgICAgd29ybGQ6IDQzCisgICAgfSwgdHJ1ZV0sCisgICAgW3sKKyAgICAgICAg
X19wcm90b19fOiB7CisgICAgICAgICAgICBoZWxsbzogNDQKKyAgICAgICAgfQorICAgIH0sIHRy
dWVdCitdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGZvciAobGV0IFtv
YmosIHJlc3VsdF0gb2YgYXJyYXkpCisgICAgICAgIHNob3VsZEJlKHRlc3QxKG9iaiksIHJlc3Vs
dCk7Cit9CisKKy8vIE9TUkV4aXRzLgorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICBzaG91bGRCZSh0ZXN0MSh7fSksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMgYi9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1tYXRj
aC1pbnZhbGlkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxNzU1ZTIxMmVhNmYwZWI5ZTBiNGVhYzBiM2JkZjUw
ZjE1YTljYzIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1tYXRj
aC1pbnZhbGlkLmpzCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cg
bmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5jdGlvbiB0ZXN0MShv
YmopCit7CisgICAgcmV0dXJuICJoZWxsbyIgaW4gb2JqCit9Citub0lubGluZSh0ZXN0MSk7CisK
K2xldCBvYmplY3QxID0geworICAgIGhlbGxvOiA0MgorfTsKK2xldCBvYmplY3QyID0geworICAg
IGNvY29hOiA0NAorfTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBzaG91
bGRCZSh0ZXN0MShvYmplY3QxKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVzdDEob2JqZWN0Miks
IGZhbHNlKTsKK30KK29iamVjdDIuaGVsbG8gPSA0NDsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1
OyArK2kpIHsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QxKSwgdHJ1ZSk7CisgICAgc2hvdWxk
QmUodGVzdDEob2JqZWN0MiksIHRydWUpOworfQorCisvLyBPU1JFeGl0cy4KK2ZvciAobGV0IGkg
PSAwOyBpIDwgMWU1OyArK2kpCisgICAgc2hvdWxkQmUodGVzdDEoe30pLCBmYWxzZSk7CmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1tYXRjaC5qcyBiL0pTVGVzdHMvc3RyZXNz
L2luLWJ5LWlkLW1hdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyY2NjMzFjY2ZlMTBhYmJhZjgzNThhNWUw
OTBkYTEwMTRjMzFjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1p
ZC1tYXRjaC5qcwpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBzaG91bGRCZShhY3R1YWwsIGV4
cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAgIHRocm93IG5l
dyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24gdGVzdDEob2Jq
KQoreworICAgIHJldHVybiAiaGVsbG8iIGluIG9iagorfQorbm9JbmxpbmUodGVzdDEpOworCits
ZXQgYXJyYXkgPSBbCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyCisgICAgfSwgdHJ1ZV0sCisg
ICAgW3sKKyAgICAgICAgd29ybGQ6IDQzCisgICAgfSwgZmFsc2VdLAorICAgIFt7CisgICAgICAg
IF9fcHJvdG9fXzogeworICAgICAgICAgICAgaGVsbG86IDQ0CisgICAgICAgIH0KKyAgICB9LCB0
cnVlXQorXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBmb3IgKGxldCBb
b2JqLCByZXN1bHRdIG9mIGFycmF5KQorICAgICAgICBzaG91bGRCZSh0ZXN0MShvYmopLCByZXN1
bHQpOworfQorCisvLyBPU1JFeGl0cy4KK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisg
ICAgc2hvdWxkQmUodGVzdDEoe30pLCBmYWxzZSk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340789</attachid>
            <date>2018-05-19 17:26:24 -0700</date>
            <delta_ts>2018-05-20 05:01:30 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185803-20180520092622.patch</filename>
            <type>text/plain</type>
            <size>40815</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDAxCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
MjI4MTc2ZTcyYjVhMzMzMjIxMzU4YzRmM2JlYTg0MTBjZWFmMGRhLi5lOTI0Mjk1NzM1OTZkMDg4
M2RjMDIxN2VkNWM5NTAxNGIyYzAwOTU5IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxOC0wNS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBNYXRj
aFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWF0Y2hTdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBmb3IgaW5zdGFuY2VvZiBvcHRpbWl6YXRp
b24uIEJ1dCB0aGlzIG5vZGUKKyAgICAgICAgaXMgYWxzbyB1c2VmdWwgZm9yIEluQnlJZCBub2Rl
LiBUaGlzIHBhdGNoIGNvbnZlcnRzIEluQnlJZCB0byBNYXRjaFN0cnVjdHVyZQorICAgICAgICBu
b2RlIHdpdGggQ2hlY2tTdHJ1Y3R1cmVzIGlmIHBvc3NpYmxlIGJ5IHVzaW5nIEluQnlJZFN0YXR1
cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudCk6
CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6
OkluQnlJZFN0YXR1czo6aGFzRXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAoSlNDOjpJbkJ5
SWRTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6ZHVtcCBjb25z
dCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpJbkJ5SWRTdGF0dXM6OkluQnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OkluQnlJZFN0
YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmlzU2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjppc1NpbXBsZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkluQnlJZFN0YXR1czo6bnVtVmFyaWFudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5
SWRTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjph
dCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6b3BlcmF0b3JbXSBjb25zdCk6
CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJ
bkJ5SWRWYXJpYW50OjpJbkJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6SW5CeUlkVmFyaWFudDo6aXNTZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJp
YW50OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6
c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6c3RydWN0
dXJlU2V0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SW5CeUlkVmFyaWFudDo6aXNIaXQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1Bv
bHlQcm90b0FjY2Vzc0NoYWluLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisKIDIw
MTgtMDUtMTggIEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcg
c2hvdWxkIGlubGluZSBJbnN0YW5jZU9mIElDcwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2ogYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAyODAyZWY2NDE4OTM2MGJiNzA0Y2QzNTg4ODllMGRmY2I1NDc2ODMxLi40YmE4NmU5YWIy
OTk5NDFmZjUxOWNiZDdjOWIxOWJhODUzNzY1MzY0IDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvagpAQCAtMTY5OCw2ICsxNjk4LDggQEAKIAkJRTMyOERBRTkxRDM4RDAwNTAwMUEyNTI5IC8q
IEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmls
ZVJlZiA9IEUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBoLmggKi87IHNl
dHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMyOERBRUIxRDM4
RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRDI2NDJBMUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRl
Y29kZVJld3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsg
fTsgfTsKIAkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1ibGVySGVscGVy
cy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTM4MEE3
NkIxRENENzE5NTAwMEY4OUU2IC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzMzA1RkIzMjBCMEY3ODgw
MENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzMzA1RkFGMjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMu
aCAqLzsgfTsKKwkJRTMzMDVGQjUyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMzA1RkIxMjBC
MEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmggKi87IH07CiAJCUUzMzYzN0E2MUI2MzIy
MDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFMzM2MzdBNDFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9i
amVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJ
CUUzM0IzRTI2MUI3QUJENzUwMDQ4REIyRSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmpl
Y3QubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBF
MzNCM0UyNTFCN0FCRDc1MDA0OERCMkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0
Lmx1dC5oICovOyB9OwogCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIgLyogSlNOYXRpdmVTdGRG
dW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0g
RTMzRThEMUIxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24uaCAqLzsgc2V0
dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDU1NCw2ICs0NTU2
LDEwIEBACiAJCUUzMjZDNDk2MUVDQkVGNTcwMEE5QTkwNSAvKiBDbGFzc0luZm8uY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xhc3NJbmZvLmNwcDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQjkxRkU5MzBBMzAwRURBRjcxIC8qIFlhcnJFcnJv
ckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0gWWFyckVycm9y
Q29kZS5jcHA7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuY3BwOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQlFMzI4MkJCQTFGRTkzMEE0MDBFREFGNzEgLyogWWFyckVycm9yQ29kZS5o
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRXJyb3JDb2RlLmg7IHBhdGgg
PSB5YXJyL1lhcnJFcnJvckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMz
MDVGQUYyMEIwRjc4NzAwQ0VCODJCIC8qIEluQnlJZFN0YXR1cy5oICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jLmg7IHBhdGggPSBJbkJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTMzMDVGQjAyMEIwRjc4NzAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuY3BwICovID0g
e2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVU
eXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5CeUlkVmFyaWFudC5jcHA7IHNvdXJj
ZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMzA1RkIxMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5
SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEluQnlJZFZhcmlh
bnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMzMDVGQjIyMEIwRjc4ODAwQ0VC
ODJCIC8qIEluQnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmls
ZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBh
dGggPSBJbkJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzM2
MzdBMzFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZsZWN0T2JqZWN0LmNwcDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJRTMzNjM3QTQxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
aCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25v
d25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmbGVjdE9iamVjdC5oOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNCM0UyNTFCN0FCRDc1MDA0OERCMkUgLyogSW5z
cGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1dC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
Lmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QubHV0Lmg7IHNvdXJjZVRy
ZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODY3LDkgKzU4NzMsOSBAQAogCQkJCTE0QkQ1QTJCMEEz
RTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCAqLywKIAkJCQkxNDgyQjZFQTBBNDMwMEIz
MDA1MTdDRkMgLyogSlNWYWx1ZVJlZi5oICovLAogCQkJCTg2RTNDNjBGMTY3QkFCODcwMDZENzYw
QSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggKi8sCi0JCQkJNzk1QUM2MTcyMEEyMzU0QjAwNTJDNzZD
IC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggKi8sCiAJCQkJODZFM0M2MTAxNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8sCiAJCQkJODZFM0M2MTExNjdCQUI4NzAw
NkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovLAorCQkJCTc5NUFDNjE3MjBB
MjM1NEIwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oICovLAogCQkJCUE3NDgy
RTM3MTE2QTY5N0IwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oICovLAog
CQkJCUE3NDgyQjdBMTE2NkNERUEwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZQcml2YXRl
LmNwcCAqLywKIAkJCQlBNzQ4MkI3OTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFrT2JqZWN0TWFw
UmVmUHJpdmF0ZS5oICovLApAQCAtNjY3Nyw2ICs2NjgzLDcgQEAKIAkJCQk4NjVBMzBGMDEzNTAw
N0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQlGRTJCMEI2ODFGRDBE
Mjk3MDA3NURBNUYgLyogSlNDUG9pc29uLmNwcCAqLywKIAkJCQlGRTJCMEI3MDFGRDhDNDYzMDA3
NURBNUYgLyogSlNDUG9pc29uLmggKi8sCisJCQkJRkU3NDk3RTUyMDkwMDFCMDAwMDM1NjVCIC8q
IEpTQ1B0clRhZy5oICovLAogCQkJCTcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAvKiBKU0N1c3Rv
bUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLywKIAkJCQk3MkFBRjdDQzFEMEQzMThCMDA1RTYw
QkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovLAogCQkJCTBGMkI2NkJEMTdC
NkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKQEAgLTY3NjIsNyArNjc2OSw2IEBA
CiAJCQkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1lRW51bWVyYXRv
ci5oICovLAogCQkJCTg2MjU1M0NFMTYxMzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5LmNwcCAqLywK
IAkJCQk4NjI1NTNDRjE2MTM2QUE1MDA5RjE3RDAgLyogSlNQcm94eS5oICovLAotCQkJCUZFNzQ5
N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCAqLywKIAkJCQk1MzQ2Mzg3MjFFNzBE
MDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAogCQkJCTUzNDYzODcwMUU3MENG
M0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTE0ODc0QUUxMTVFQkRFNEEw
MDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLywKQEAgLTc2MzMsNiArNzYzOSwxMCBAQAogCQkJCTE0
QUQ5MTA4MURDQTkyOTQwMDE0RjlGRSAvKiBHbG9iYWxDb2RlQmxvY2suaCAqLywKIAkJCQkwRjBC
ODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKIAkJCQkwRkIzOTlCRDIw
QUY2QjM4MDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oICovLAorCQkJCUUzMzA1RkIyMjBCMEY3
ODgwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuY3BwICovLAorCQkJCUUzMzA1RkFGMjBCMEY3ODcw
MENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCAqLywKKwkJCQlFMzMwNUZCMDIwQjBGNzg3MDBDRUI4
MkIgLyogSW5CeUlkVmFyaWFudC5jcHAgKi8sCisJCQkJRTMzMDVGQjEyMEIwRjc4ODAwQ0VCODJC
IC8qIEluQnlJZFZhcmlhbnQuaCAqLywKIAkJCQk3OTA1QkI2NjFEMTIwNTBFMDAxOUZFNTcgLyog
SW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZFNTcgLyogSW5s
aW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAwMkQ5MTU3IC8qIElubGluZUNh
bGxGcmFtZS5jcHAgKi8sCkBAIC04NjIzLDcgKzg2MzMsNiBAQAogCQkJCTBGRkI5MjFDMTZEMDJG
MTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBpbGVyQ29tbW9u
LmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3MjggLyogREZHT1NS
RXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAotCQkJCTc5NUFDNjE4MjBBMjM1NUUwMDUyQzc2QyAv
KiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFRkM5QUIx
NjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBpbiBIZWFkZXJz
ICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0UHJlcGFyYXRp
b24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJFQSAvKiBERkdQ
aGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg2Nyw5ICs4ODc2LDEy
IEBACiAJCQkJRkUxQkQwMjUxRTcyMDUzODAwMTM0QkM5IC8qIEhlYXBWZXJpZmllci5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RDYWxsUmV0dXJu
VmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDMjE0MzA3MUNBMzJFNTUwMDBBODg2OSAvKiBJ
Q1N0YXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMgLyog
SUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2RjVDRDAwQjM0
NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVBMThEQTQ0QUIw
MEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTVGRDAw
NzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhlYWRlcnMgKi8s
CisJCQkJRTMzMDVGQjMyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFN0YXR1cy5oIGluIEhlYWRl
cnMgKi8sCisJCQkJRTMzMDVGQjUyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuaCBp
biBIZWFkZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJbmNyZW1lbnRh
bFN3ZWVwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYwMEYxNjdCMiAv
KiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUExNUVEOEU0NjAw
RjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCkBAIC04OTEz
LDYgKzg5MjUsOSBAQAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJbnNwZWN0b3JQ
cm90b2NvbFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTBFNEI2MjE4ODA5REQ1MDA2OEE0
NkQgLyogSW5zcGVjdG9yUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTUxNjVE
MzFCREYwQjlFMDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2VudC5oIGluIEhl
YWRlcnMgKi8sCisJCQkJMEY0OUU5QUEyMEFCNEQwMDAwMUNBMEFBIC8qIEluc3RhbmNlT2ZBY2Nl
c3NDYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRjIwQUY2QjNGMDAxN0UyMTMgLyog
SW5zdGFuY2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMzk5QzAyMEFGNkI0MzAw
MTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJCQk5NjlBMDc5
OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCUE3
QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhlYWRlcnMgKi8s
CkBAIC04OTYxLDYgKzg5NzYsNyBAQAogCQkJCUZFM0EwNkE2MUMxMEI3MkQwMDM5MEZERCAvKiBK
SVRCaXRPckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QjQxQzEwQ0I5MzAw
MzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDQ0VG
REUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRkI4
MEJDMjBBNzk0NzMwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJRkU0NzZGRjQyMDdFODVENTAwOTNDQTJEIC8qIEpJVENvZGVNYXAuaCBpbiBIZWFkZXJzICov
LAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlvbkVmZm9ydC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8qIEpJVERpc2Fz
c2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDE4LDYgKzkwMzQsNyBAQAogCQkJCUE1RDJF
NjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMg
Ki8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJlZlByaXZhdGUu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMkIwQjczMUZEOUVGNzAwMDc1REE1RiAvKiBKU0NQb2lz
b24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1QiAvKiBKU0NQ
dHJUYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4MDI4QyAvKiBK
U0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyQUFGN0NFMUQwRDMxQjMw
MDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVhZGVycyAqLywK
IAkJCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGluIEhlYWRlcnMg
Ki8sCkBAIC05MDY4LDcgKzkwODUsNiBAQAogCQkJCUE1MDNGQTFFMTg4RTBGQjAwMDExMEYxNCAv
KiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTcw
MTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMx
OEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50LmggaW4gSGVhZGVy
cyAqLywKLQkJCQkwRkIzOTlDMDIwQUY2QjQzMDAxN0UyMTMgLyogSW5zdGFuY2VPZlZhcmlhbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAvKiBKU0xvY2su
aCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAvKiBKU01hbmFn
ZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAwOEEwRkNEIC8q
IEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5NCw3ICs5MTEw
LDYgQEAKIAkJCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNlRGVmZXJyZWQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAvKiBKU1Byb21p
c2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzFGMUJEQTA4RUYwMDMzMUI4
NCAvKiBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKLQkJCQlGRTc0OTdF
NjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywKIAkJCQkyQTA1
QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9yLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94eS5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVtb3RlSW5zcGVj
dG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzcsNiArOTE1Miw3IEBACiAJCQkJQkMxOEM0MkMw
RTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWVSZWYuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2RTND
NjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGluZUludGVybmFs
LmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMgLyogSlNWaXJ0
dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4MTdEQTQxQUUw
MDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgyRTkzMTE2QTdD
QUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1hcFJlZlByaXZh
dGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTE5Myw3ICs5MjA5LDYgQEAKIAkJCQkwRjQ2ODBDRDE0
QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJOTgxRUQ4MjMyODIzNEQ5MUJBRUNDQURFIC8qIE1hY2hpbmVDb250ZXh0LmggaW4gSGVhZGVy
cyAqLywKIAkJCQkxNEI3MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGluZVN0YWNrTWFya2Vy
LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkIzOTlCRjIwQUY2QjNGMDAxN0UyMTMgLyogSW5zdGFu
Y2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDMzZFRUEwRUUxMjg5RDAwQjNERjU5
IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJDNjEwMTU2QkRF
MDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAogCQkJCUExQTAw
OUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4gSGVhZGVycyAq
LywKQEAgLTkyMjgsNyArOTI0Myw2IEBACiAJCQkJN0MwMDhDRTcxODc2MzFCNjAwOTU1QzI0IC8q
IE1pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyQTg3NjAxRjAyMzgxNjAwRUIzMUIy
IC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkM1NjhF
MjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCi0JCQkJ
MEY0OUU5QUEyMEFCNEQwMDAwMUNBMEFBIC8qIEluc3RhbmNlT2ZBY2Nlc3NDYXNlLmggaW4gSGVh
ZGVycyAqLywKIAkJCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxzLnB5IGluIEhl
YWRlcnMgKi8sCiAJCQkJRTM3OTRFNzYxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVsZUFuYWx5emVy
LmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjYzNDM0NTc3Mjc0RkFGQjkzMzZDMzggLyogTW9kdWxl
TmFtZXNwYWNlQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjczLDcgKzkyODcsNiBA
QAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBpbiBIZWFkZXJz
ICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYwIC8qIFBhcnNlci5oIGluIEhlYWRl
cnMgKi8sCi0JCQkJMEZGQjgwQkMyMEE3OTQ3MzAwMDZBQUY2IC8qIEpJVENvZGVJbmxpbmVzLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5MDA0OEZEQzMgLyogUGFyc2VyQXJl
bmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1QiAvKiBQYXJz
ZXJFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAwNjQwQTQ3IC8q
IFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk0NTIsNyArOTQ2NSw2IEBACiAJCQkJ
NzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmggaW4gSGVhZGVy
cyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29uc3RydWN0b3Iu
bHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3NTcgLyogU3lt
Ym9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkIzOTlCRTIwQUY2QjNEMDAxN0UyMTMg
LyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIxQTZFNTAxRTAw
NzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJOTk2QjczMjgx
QkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFkZXJzICovLAog
CQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGluIEhlYWRlcnMg
Ki8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNmFkMWE0NWQ3ZjU5N2Y2MTYyZGE5
MWE0ZTBkOTQ5M2EzODIxYTNmMi4uODgwNjkxYjJkZjNiMmZmN2IyYmViZDc1Njk1ODdkY2I0MjZj
ZTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0CisrKyBi
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjE5LDYgKzIxOSw4IEBAIGJ5
dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvR2V0QnlJZFN0YXR1cy5jcHAK
IGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAogYnl0ZWNvZGUvR2V0dGVyU2V0dGVyQWNjZXNz
Q2FzZS5jcHAKK2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKK2J5dGVjb2RlL0luQnlJZFZhcmlh
bnQuY3BwCiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJh
bWUuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjhiMzEwZmI5
OWI0MTZiZDQxZmY2ZDJiZWY3ZDYzZWFiODE5Mzc5M2QKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcApAQCAtMCwwICsxLDIz
NyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRl
YUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0
OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBh
Ym92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5k
IHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5h
cnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2Us
IHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4g
dGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQg
d2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQg
QlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQg
V0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxB
UgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElO
Qy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERB
TUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0Yg
U1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQ
Uk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBB
TlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBM
SUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0Up
IEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwg
RVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLwor
CisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5CeUlkU3RhdHVzLmgiCisKKyNpbmNs
dWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgiCisjaW5jbHVk
ZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNpbmNsdWRlICJQ
b2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZvLmgiCisjaW5j
bHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29sIEluQnlJZFN0
YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBJbkJ5SWRWYXJpYW50JiB2YXJpYW50KQoreworICAg
IHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFudCk7Cit9CisK
K0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2NrKiBwcm9maWxl
ZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4LCBVbmlxdWVk
U3RyaW5nSW1wbCogdWlkKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmls
ZWRCbG9jay0+bV9sb2NrKTsKKworICAgIEluQnlJZFN0YXR1cyByZXN1bHQ7CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNp
dGVGZWVkYmFjayhsb2NrZXIsIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUluZGV4KSksIHVp
ZCk7CisKKyAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYgaGFzRXhpdFNpdGUocHJv
ZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtYXApOworI2VuZGlmCisK
KyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21w
dXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZUJsb2NrKiBkZmdCbG9j
aywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLAorICAgIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENv
ZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyNpZiBFTkFC
TEUoREZHX0pJVCkKKyAgICBpZiAoZGZnQmxvY2spIHsKKyAgICAgICAgQ2FsbExpbmtTdGF0dXM6
OkV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CisgICAgICAgIHsKKyAgICAgICAgICAgIENvbmN1
cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAg
IGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVEYXRhKAorICAg
ICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCk7Cisg
ICAgICAgIH0KKworICAgICAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OworICAgICAgICB7CisgICAg
ICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xvY2spOworICAg
ICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJh
Y2sobG9ja2VyLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAgICB9CisKKyAg
ICAgICAgaWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICByZXR1cm4gcmVz
dWx0OworCisgICAgICAgIGlmIChoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBjb2RlT3JpZ2lu
LmJ5dGVjb2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Ns
b3dQYXRoKTsKKworICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAgICAgICByZXR1
cm4gcmVzdWx0OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRmZ0Jsb2NrKTsKKyAg
ICBVTlVTRURfUEFSQU0oZGZnTWFwKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGNvbXB1dGVGb3Io
cHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCwgdWlk
KTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQorYm9vbCBJbkJ5SWRTdGF0dXM6Omhhc0V4aXRT
aXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCkKK3sK
KyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBwcm9maWxlZEJsb2Nr
LT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIodW5s
aW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgcmV0dXJuIHVubGlua2VkQ29kZUJsb2NrLT5o
YXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBC
YWRDYWNoZSkpCisgICAgICAgIHx8IHVubGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2Nr
ZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25zdGFudENhY2hl
KSk7Cit9CisKK0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JTdHViSW5mbyhj
b25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9maWxlZEJsb2Nr
LCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5p
cXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0ID0gSW5CeUlk
U3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayhsb2NrZXIs
IHN0dWJJbmZvLCB1aWQpOworCisgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0aCgpICYmIElu
QnlJZFN0YXR1czo6aGFzRXhpdFNpdGUocHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29k
ZUluZGV4KSkKKyAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICByZXR1cm4gcmVzdWx0OworfQorCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRl
Rm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayhjb25zdCBDb25jdXJyZW50SlNMb2Nr
ZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQp
Cit7CisgICAgaWYgKCFzdHViSW5mbyB8fCAhc3R1YkluZm8tPmV2ZXJDb25zaWRlcmVkKQorICAg
ICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOworCisgICAgaWYgKHN0dWJJ
bmZvLT50b29rU2xvd1BhdGgpCisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisKKyAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRlcml2ZSBhbiBh
Y2Nlc3Mgc3RyYXRlZ3kuCisgICAgSW5CeUlkU3RhdHVzIHJlc3VsdDsKKyAgICByZXN1bHQubV9z
dGF0ZSA9IFNpbXBsZTsKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUpIHsKKyAgICBj
YXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoTm9JbmZv
cm1hdGlvbik7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjogeworICAgICAgICBT
dHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VPYmplY3RTdHJ1
Y3R1cmUuZ2V0KCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1BhdGhJbkRGR0Zv
ckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAgICBJbkJ5SWRW
YXJpYW50IHZhcmlhbnQ7CisgICAgICAgIHZhcmlhbnQubV9vZmZzZXQgPSBzdHJ1Y3R1cmUtPmdl
dENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoIWlzVmFsaWRPZmZz
ZXQodmFyaWFudC5tX29mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5QXR0cmlidXRl
OjpDdXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNT
bG93UGF0aCk7CisKKyAgICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5hZGQoc3RydWN0dXJl
KTsKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50
KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRBcHBlbmQsIGRpZEFwcGVuZCk7CisgICAgICAg
IHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0dWI6IHsKKyAg
ICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHViOworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3QtPnNpemUoKTsg
KytsaXN0SW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFjY2VzcyA9IGxp
c3QtPmF0KGxpc3RJbmRleCk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVByb3h5KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAg
ICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAgICAgICAgcmV0
dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAgU3RydWN0dXJl
KiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBpZiAoIXN0cnVj
dHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBjYXNlcyBhcmlz
ZSBkdWUgdG8gYXJyYXkubGVuZ3RoLiBXZSBoYXZlIG5vIHdheSBvZiBjcmVhdGluZyBhCisgICAg
ICAgICAgICAgICAgLy8gSW5CeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBkb24ndCByZWFs
bHkgaGF2ZSB0byBzaW5jZSB0aGUgREZHIGhhbmRsZXMgdGhvc2UKKyAgICAgICAgICAgICAgICAv
LyBjYXNlcyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhhdCdzIGEgYml0
IGF3a3dhcmQgLSB3ZSBzaG91bGRuJ3QKKyAgICAgICAgICAgICAgICAvLyBoYXZlIHRvIHVzZSB2
YWx1ZSBwcm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFjY2Vzc0Nhc2Ug
Y291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHRvbGQgdXMuIEJ1dCwgaXQgd29ya3Mgd2Vs
bCBlbm91Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90CisgICAgICAgICAg
ICAgICAgLy8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAgICAgcmV0dXJu
IEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdldFN0YXR1czo6
Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlkKTsKKyAgICAg
ICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAgICAgICAgIGNh
c2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAgICBjb250aW51
ZTsKKworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Nsb3dQYXRoOgor
ICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAg
ICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogeworICAgICAgICAg
ICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAgIGNhc2UgQWNj
ZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNlOjpJbk1pc3M6
CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRlZmF1bHQ6Cisg
ICAgICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7Cisg
ICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSW5CeUlkVmFyaWFudCB2YXJpYW50
KAorICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwgY29tcGxleEdl
dFN0YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdldFN0YXR1cy5j
b25kaXRpb25TZXQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5hcHBlbmRWYXJp
YW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRh
a2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAg
ICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9CisK
KyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgp
OworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgcmV0dXJu
IEluQnlJZFN0YXR1cygpOworfQorI2VuZGlmCisKK3ZvaWQgSW5CeUlkU3RhdHVzOjpmaWx0ZXIo
Y29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAgaWYgKG1fc3RhdGUgIT0g
U2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJpYW50cyhtX3Zh
cmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1wdHkoKSkKKyAg
ICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgSW5CeUlkU3RhdHVzOjpk
dW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIoIik7CisgICAg
c3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAgICAgICBvdXQu
cHJpbnQoIk5vSW5mb3JtYXRpb24iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBTaW1wbGU6
CisgICAgICAgIG91dC5wcmludCgiU2ltcGxlIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
VGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJUYWtlc1Nsb3dQYXRoIik7CisgICAg
ICAgIGJyZWFrOworICAgIH0KKyAgICBvdXQucHJpbnQoIiwgIiwgbGlzdER1bXAobV92YXJpYW50
cyksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmggYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWRmY2RmOGY0Y2Ix
NjA3ZWI0MTQ1MDhkMDUxZjVkN2VmODAxOAotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaApAQCAtMCwwICsxLDk4IEBACisvKgor
ICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNv
bT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBS
ZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHly
aWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxv
d2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0
IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAg
IGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBk
aXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJ
TkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQ
T1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICog
Q09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5U
QUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9S
IEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkK
KyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwg
T1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJ
TiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFE
VklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEg
b25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJDb2RlT3JpZ2lu
LmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgorI2luY2x1ZGUgIkluQnlJZFZhcmlh
bnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFjY2Vzc0Nhc2U7CitjbGFzcyBDb2Rl
QmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNoTWFwPENvZGVP
cmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRlSGFzaD4gU3R1
YkluZm9NYXA7CisKK2NsYXNzIEluQnlJZFN0YXR1cyB7CitwdWJsaWM6CisgICAgZW51bSBTdGF0
ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZvcm1hdGlvbi4K
KyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQgZm9yIGEgc2lt
cGxlIGFjY2VzcyB0byBhIGtub3duIG9iamVjdCBwcm9wZXJ0eSB3aXRoCisgICAgICAgIC8vIGEg
cG9zc2libGUgc3RydWN0dXJlIGNoYWluIGFuZCBhIHBvc3NpYmxlIHNwZWNpZmljIHZhbHVlLgor
ICAgICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4gdGFrZSBzbG93
IHBhdGguCisgICAgICAgIFRha2VzU2xvd1BhdGgsCisgICAgfTsKKworICAgIEluQnlJZFN0YXR1
cygpID0gZGVmYXVsdDsKKworICAgIEluQnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSwgY29uc3QgSW5C
eUlkVmFyaWFudCYgdmFyaWFudCA9IEluQnlJZFZhcmlhbnQoKSkKKyAgICAgICAgOiBtX3N0YXRl
KHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChzdGF0ZSA9PSBTaW1wbGUpID09IHZhcmlh
bnQuaXNTZXQoKSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQpOworICAgIH0K
KworICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqLCBTdHViSW5m
b01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOwor
ICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJhc2VsaW5lQmxv
Y2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNlbGluZU1hcCwgU3R1Yklu
Zm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisKKyNp
ZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHVi
SW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2VsaW5lQmxvY2ss
IFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7
CisjZW5kaWYKKworICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9zdGF0ZTsgfQor
CisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9JbmZvcm1hdGlv
bjsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVybiBpc1NldCgp
OyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gU2ltcGxl
OyB9CisKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRz
LnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbkJ5SWRWYXJpYW50LCAxPiYgdmFyaWFudHMo
KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgSW5CeUlkVmFyaWFudCYg
YXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4XTsgfQorICAg
IGNvbnN0IEluQnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBjb25zdCB7IHJl
dHVybiBhdChpbmRleCk7IH0KKworICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQorCisgICAgLy8gQXR0ZW1wdHMgdG8gcmVk
dWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1cmUgc2V0LiBU
aGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KKyAgICB2b2lkIGZpbHRlcihjb25zdCBTdHJ1Y3R1cmVT
ZXQmKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitwcml2YXRlOgor
I2lmIEVOQUJMRShERkdfSklUKQorICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRlKENvZGVCbG9j
ayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29t
cHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyNl
bmRpZgorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBJbkJ5SWRWYXJpYW50Jik7CisKKyAg
ICBTdGF0ZSBtX3N0YXRlIHsgTm9JbmZvcm1hdGlvbiB9OworICAgIFZlY3RvcjxJbkJ5SWRWYXJp
YW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKbmV3IGZpbGUgbW9k
ZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4u
NjI2YTVkMzMzMjk5MDI0NGFiN2I4MWRjYmY1ZWU1OWI1NjE1MDBiYwotLS0gL2Rldi9udWxsCisr
KyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcApAQCAt
MCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0
YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBz
b3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24s
IGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAq
IGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0
aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQ
Uk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElN
UExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICog
SU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQ
QVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwg
QVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwg
SU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVF
TlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJF
TUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwg
T1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQg
QU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwg
U1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9U
SEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNP
RlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdF
LgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbkJ5SWRWYXJpYW50Lmgi
CisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisK
K25hbWVzcGFjZSBKU0MgeworCitJbkJ5SWRWYXJpYW50OjpJbkJ5SWRWYXJpYW50KGNvbnN0IFN0
cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQsIGNvbnN0IE9i
amVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBtX3N0cnVjdHVy
ZVNldChzdHJ1Y3R1cmVTZXQpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRpb25TZXQpCisg
ICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYgKCFzdHJ1Y3R1cmVTZXQuc2l6ZSgpKSB7
CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CisgICAgICAgIEFTU0VS
VChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgSW5CeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpCit7CisgICAgaWYg
KG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT2JqZWN0UHJvcGVydHlDb25k
aXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIGlmICghbV9jb25kaXRpb25TZXQuaXNF
bXB0eSgpKSB7CisgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0aW9uU2V0Lm1l
cmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICBpZiAoIW1lcmdlZENvbmRp
dGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVTbG90QmFzZUNv
bmRpdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICBtX2NvbmRp
dGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKworICAgIG1fc3RydWN0dXJlU2V0Lm1lcmdl
KG90aGVyLm1fc3RydWN0dXJlU2V0KTsKKworICAgIHJldHVybiB0cnVlOworfQorCit2b2lkIElu
QnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAgICBkdW1wSW5D
b250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgSW5CeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dChQ
cmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzU2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAgICAgIHJldHVy
bjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoCisgICAgICAgICI8IiwgaW5Db250ZXh0KHN0cnVj
dHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9uU2V0LCBjb250
ZXh0KSk7CisgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsKKyAgICBvdXQu
cHJpbnQoIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmggYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3ODk4YTM2ODc4
NzE5YzI4YjdmYzkxNmI3M2FjNmY5ZTc2ZjJjNDUKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCkBAIC0wLDAgKzEsNjkgQEAK
Ky8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21h
aWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmlu
YXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRl
ZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAq
IDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZv
cm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQor
ICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGgg
dGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQ
UExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5U
SUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJB
TlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAq
IFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9S
CisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VT
IChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNU
SVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklU
UzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRI
RU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklM
SVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklT
SU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI3By
YWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldC5oIgorI2lu
Y2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0LmgiCisKK25h
bWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIERPTUpJVCB7CitjbGFzcyBHZXR0ZXJTZXR0ZXI7Cit9
CisKK2NsYXNzIEluQnlJZFN0YXR1czsKK3N0cnVjdCBEdW1wQ29udGV4dDsKKworY2xhc3MgSW5C
eUlkVmFyaWFudCB7CitwdWJsaWM6CisgICAgSW5CeUlkVmFyaWFudChjb25zdCBTdHJ1Y3R1cmVT
ZXQmID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9mZnNldCwgY29u
c3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlDb25kaXRpb25T
ZXQoKSk7CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0cnVjdHVyZVNl
dC5zaXplKCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4g
aXNTZXQoKTsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0KCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNl
dCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisKKyAgICAvLyBBIG5vbi1lbXB0eSBjb25k
aXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBpbi1oaXQvaW4tbWlzcy4K
KyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9uU2V0KCkgY29u
c3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFByb3BlcnR5T2Zmc2V0IG9mZnNl
dCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKKyAgICBib29sIGlzSGl0KCkgY29uc3Qg
eyByZXR1cm4gb2Zmc2V0KCkgIT0gaW52YWxpZE9mZnNldDsgfQorCisgICAgYm9vbCBhdHRlbXB0
VG9NZXJnZShjb25zdCBJbkJ5SWRWYXJpYW50JiBvdGhlcik7CisKKyAgICB2b2lkIGR1bXAoUHJp
bnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mLCBE
dW1wQ29udGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFzcyBJbkJ5SWRT
dGF0dXM7CisKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUHJvcGVydHlPZmZzZXQgbV9v
ZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKaW5kZXggNTJhYjc2ZTg1
NTc0ZmQ2ODg3ZmI2OGY2ZjQ1YzNkYzMwMjlkYjkzNC4uYjQ5ZTRlMjQyZTUyZjA4MTMxNWU0OGZi
MWUxYmNjMjk3ZTUyOGFlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKQEAgLTI5LDYgKzI5LDcgQEAKIAogbmFtZXNw
YWNlIEpTQyB7CiAKK2NsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0OwogY2xhc3Mg
SlNPYmplY3Q7CiBjbGFzcyBQcm9wZXJ0eVNsb3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGZhMDk3ZjMyYzY2NmVkM2YzM2ZkYmM0
YmJlMzhjMTU0NDJiNGQ2ZTEuLjBjNzczOGI0NjgwZmE2ODAxOWEwODYwMjRkZGYzMjk0ZGY2YmU5
Y2QgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJz
ZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxvY2suaCIKICNp
bmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2luY2x1ZGUgIklu
QnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkluc3RhbmNlT2ZTdGF0dXMuaCIKICNpbmNsdWRlICJK
U0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaXhlZEFycmF5LmgiCkBAIC02NDAyLDEwICs2NDAz
LDMzIEBAIHZvaWQgQnl0ZUNvZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAg
ICAgICAgIGNhc2Ugb3BfaW5fYnlfaWQ6IHsKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQo
VmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAg
ICAgICAgIHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lk
ZW50aWZpZXJSZW1hcFtjdXJyZW50SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKLSAgICAgICAg
ICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCks
Ci0gICAgICAgICAgICAgICAgYWRkVG9HcmFwaChJbkJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVt
YmVyKSwgYmFzZSkpOworICAgICAgICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3Jh
cGguaWRlbnRpZmllcnMoKVtpZGVudGlmaWVyTnVtYmVyXTsKKworICAgICAgICAgICAgSW5CeUlk
U3RhdHVzIHN0YXR1cyA9IEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAg
ICBtX2lubGluZVN0YWNrVG9wLT5tX3Byb2ZpbGVkQmxvY2ssIG1fZGZnQ29kZUJsb2NrLAorICAg
ICAgICAgICAgICAgIG1faW5saW5lU3RhY2tUb3AtPm1fc3R1YkluZm9zLCBtX2RmZ1N0dWJJbmZv
cywKKyAgICAgICAgICAgICAgICBjdXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworCisgICAgICAg
ICAgICBpZiAoc3RhdHVzLmlzU2ltcGxlKCkpIHsKKyAgICAgICAgICAgICAgICBNYXRjaFN0cnVj
dHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVEYXRhLmFkZCgpOworICAg
ICAgICAgICAgICAgIGZvciAoY29uc3QgSW5CeUlkVmFyaWFudCYgdmFyaWFudCA6IHN0YXR1cy52
YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGNoZWNrKHZhcmlhbnQuY29uZGl0aW9u
U2V0KCkpOworICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDog
dmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTWF0Y2hT
dHJ1Y3R1cmVWYXJpYW50IG1hdGNoVmFyaWFudDsKKyAgICAgICAgICAgICAgICAgICAgICAgIG1h
dGNoVmFyaWFudC5zdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVy
ZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQucmVzdWx0ID0gdmFyaWFu
dC5pc0hpdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5hcHBl
bmQobWF0Y2hWYXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAg
IH0KKworICAgICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gYWRkVG9HcmFwaChNYXRjaFN0cnVj
dHVyZSwgT3BJbmZvKGRhdGEpLCBiYXNlKTsKKyAgICAgICAgICAgICAgICBzZXQoVmlydHVhbFJl
Z2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBtYXRjaCk7CisgICAgICAg
ICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfaWQpOworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJh
bmQpLCBhZGRUb0dyYXBoKEluQnlJZCwgT3BJbmZvKGlkZW50aWZpZXJOdW1iZXIpLCBiYXNlKSk7
CiAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbl9ieV9pZCk7Ci0gICAgICAgICAgICBicmVh
azsKICAgICAgICAgfQogCiAgICAgICAgIGNhc2Ugb3BfZ2V0X2VudW1lcmFibGVfbGVuZ3RoOiB7
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL0NoYW5nZUxvZyBiL0pTVGVzdHMvQ2hhbmdlTG9nCmluZGV4
IDcyZjk5NTRmYWQ0NzZiNGQzY2Q3YzJhMGRlZjU1NDRmY2ZlNGI1NzcuLjk0ZThhZGJkZThlZGU3
ZTc5YjhhNmZmN2MzMDJhYThiYWNkNDQ5MjEgMTAwNjQ0Ci0tLSBhL0pTVGVzdHMvQ2hhbmdlTG9n
CisrKyBiL0pTVGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDUgKzEsMjIgQEAKIDIwMTgtMDUtMTkgIFl1
c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKKyAgICAgICAgW0RGR10gSW5C
eUlkIHNob3VsZCBiZSBjb252ZXJ0ZWQgdG8gTWF0Y2hTdHJ1Y3R1cmUKKyAgICAgICAgaHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTgwMworCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogc3RyZXNzL2luLWJ5LWlkLWNvbnN0
YW50LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRlc3QxKToKKyAg
ICAgICAgKiBzdHJlc3MvaW4tYnktaWQtbWF0Y2gtaW52YWxpZC5qczogQWRkZWQuCisgICAgICAg
IChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0MSk6CisgICAgICAgICogc3RyZXNzL2luLWJ5LWlk
LW1hdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRlc3QxKToK
KworMjAxOC0wNS0xOSAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4KKwog
ICAgICAgICBbSlNDXSBKU0Mgc2hvdWxkIGhhdmUgY29uc2lzdGVudCBJbkJ5SWQgSUMKICAgICAg
ICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4NTY4MgogCmRpZmYg
LS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1jb25zdGFudC5qcyBiL0pTVGVzdHMvc3Ry
ZXNzL2luLWJ5LWlkLWNvbnN0YW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMTllYTgzYzc2ZDc4ODRjYjEw
YTk4ODdiOWY2Y2U4MDFhZmFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9p
bi1ieS1pZC1jb25zdGFudC5qcwpAQCAtMCwwICsxLDMzIEBACitmdW5jdGlvbiBzaG91bGRCZShh
Y3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAgICAg
IHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rpb24g
dGVzdDEob2JqKQoreworICAgIHJldHVybiAiaGVsbG8iIGluIG9iagorfQorbm9JbmxpbmUodGVz
dDEpOworCitsZXQgYXJyYXkgPSBbCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyCisgICAgfSwg
dHJ1ZV0sCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyLAorICAgICAgICB3b3JsZDogNDMKKyAg
ICB9LCB0cnVlXSwKKyAgICBbeworICAgICAgICBfX3Byb3RvX186IHsKKyAgICAgICAgICAgIGhl
bGxvOiA0NAorICAgICAgICB9CisgICAgfSwgdHJ1ZV0KK107Citmb3IgKGxldCBpID0gMDsgaSA8
IDFlNTsgKytpKSB7CisgICAgZm9yIChsZXQgW29iaiwgcmVzdWx0XSBvZiBhcnJheSkKKyAgICAg
ICAgc2hvdWxkQmUodGVzdDEob2JqKSwgcmVzdWx0KTsKK30KKworLy8gT1NSRXhpdHMuCitmb3Ig
KGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHNob3VsZEJlKHRlc3QxKHt9KSwgZmFsc2Up
OwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtbWF0Y2gtaW52YWxpZC5qcyBi
L0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNTE3
NTVlMjEyZWE2ZjBlYjllMGI0ZWFjMGIzYmRmNTBmMTVhOWNjMgotLS0gL2Rldi9udWxsCisrKyBi
L0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMKQEAgLTAsMCArMSwzMCBA
QAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChhY3R1YWwg
IT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTogJyArIGFj
dHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKG9iaikKK3sKKyAgICByZXR1cm4gImhlbGxvIiBp
biBvYmoKK30KK25vSW5saW5lKHRlc3QxKTsKKworbGV0IG9iamVjdDEgPSB7CisgICAgaGVsbG86
IDQyCit9OworbGV0IG9iamVjdDIgPSB7CisgICAgY29jb2E6IDQ0Cit9OworZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHNob3VsZEJlKHRlc3QxKG9iamVjdDEpLCB0cnVlKTsK
KyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QyKSwgZmFsc2UpOworfQorb2JqZWN0Mi5oZWxsbyA9
IDQ0OworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHNob3VsZEJlKHRlc3Qx
KG9iamVjdDEpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QyKSwgdHJ1ZSk7Cit9
CisKKy8vIE9TUkV4aXRzLgorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICBzaG91
bGRCZSh0ZXN0MSh7fSksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNzL2luLWJ5
LWlkLW1hdGNoLmpzIGIvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtbWF0Y2guanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNjJjY2MzMWNjZmUxMGFiYmFmODM1OGE1ZTA5MGRhMTAxNGMzMWMzZgotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLmpzCkBAIC0wLDAgKzEsMzIgQEAK
K2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9
PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1
YWwpOworfQorCitmdW5jdGlvbiB0ZXN0MShvYmopCit7CisgICAgcmV0dXJuICJoZWxsbyIgaW4g
b2JqCit9Citub0lubGluZSh0ZXN0MSk7CisKK2xldCBhcnJheSA9IFsKKyAgICBbeworICAgICAg
ICBoZWxsbzogNDIKKyAgICB9LCB0cnVlXSwKKyAgICBbeworICAgICAgICB3b3JsZDogNDMKKyAg
ICB9LCBmYWxzZV0sCisgICAgW3sKKyAgICAgICAgX19wcm90b19fOiB7CisgICAgICAgICAgICBo
ZWxsbzogNDQKKyAgICAgICAgfQorICAgIH0sIHRydWVdCitdOworZm9yIChsZXQgaSA9IDA7IGkg
PCAxZTU7ICsraSkgeworICAgIGZvciAobGV0IFtvYmosIHJlc3VsdF0gb2YgYXJyYXkpCisgICAg
ICAgIHNob3VsZEJlKHRlc3QxKG9iaiksIHJlc3VsdCk7Cit9CisKKy8vIE9TUkV4aXRzLgorZm9y
IChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICBzaG91bGRCZSh0ZXN0MSh7fSksIGZhbHNl
KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>340793</attachid>
            <date>2018-05-20 05:01:32 -0700</date>
            <delta_ts>2018-05-30 07:36:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185803-20180520210131.patch</filename>
            <type>text/plain</type>
            <size>42588</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMDAyCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
NGNhMTBkNmYzNDIxMjMwNTA4YmJmNTA0MmIyZGNjNGZiZGMwMjk3Li43ZmYwOTg5NWI1MDYyOWU1
NjIzY2I5YjI5ZTNmMWFhZmRmYmY3NDllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1MiBAQAorMjAxOC0wNS0yMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBNYXRj
aFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWF0Y2hTdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBmb3IgaW5zdGFuY2VvZiBvcHRpbWl6YXRp
b24uIEJ1dCB0aGlzIG5vZGUKKyAgICAgICAgaXMgYWxzbyB1c2VmdWwgZm9yIEluQnlJZCBub2Rl
LiBUaGlzIHBhdGNoIGNvbnZlcnRzIEluQnlJZCB0byBNYXRjaFN0cnVjdHVyZQorICAgICAgICBu
b2RlIHdpdGggQ2hlY2tTdHJ1Y3R1cmVzIGlmIHBvc3NpYmxlIGJ5IHVzaW5nIEluQnlJZFN0YXR1
cy4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6
CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVz
LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudCk6
CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcik6CisgICAgICAgIChKU0M6
OkluQnlJZFN0YXR1czo6aGFzRXhpdFNpdGUpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6
OmNvbXB1dGVGb3JTdHViSW5mbyk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6Y29tcHV0
ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2spOgorICAgICAgICAoSlNDOjpJbkJ5
SWRTdGF0dXM6OmZpbHRlcik6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6ZHVtcCBjb25z
dCk6CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpJbkJ5SWRTdGF0dXM6OkluQnlJZFN0YXR1cyk6CisgICAgICAgIChKU0M6OkluQnlJZFN0
YXR1czo6c3RhdGUgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmlzU2V0IGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpvcGVyYXRvciBib29sIGNvbnN0KToK
KyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjppc1NpbXBsZSBjb25zdCk6CisgICAgICAgIChK
U0M6OkluQnlJZFN0YXR1czo6bnVtVmFyaWFudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5
SWRTdGF0dXM6OnZhcmlhbnRzIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjph
dCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6b3BlcmF0b3JbXSBjb25zdCk6
CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6dGFrZXNTbG93UGF0aCBjb25zdCk6CisgICAg
ICAgICogYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHA6IEFkZGVkLgorICAgICAgICAoSlNDOjpJ
bkJ5SWRWYXJpYW50OjpJbkJ5SWRWYXJpYW50KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFu
dDo6YXR0ZW1wdFRvTWVyZ2UpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6ZHVtcEluQ29udGV4dCBjb25zdCk6
CisgICAgICAgICogYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6SW5CeUlkVmFyaWFudDo6aXNTZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJp
YW50OjpvcGVyYXRvciBib29sIGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6
c3RydWN0dXJlU2V0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6c3RydWN0
dXJlU2V0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6Y29uZGl0aW9uU2V0IGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SW5CeUlkVmFyaWFudDo6b2Zmc2V0IGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SW5CeUlkVmFyaWFudDo6aXNIaXQgY29uc3QpOgorICAgICAgICAqIGJ5dGVjb2RlL1Bv
bHlQcm90b0FjY2Vzc0NoYWluLmg6CisgICAgICAgICogZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNw
cDoKKyAgICAgICAgKEpTQzo6REZHOjpCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayk6CisKIDIw
MTgtMDUtMjAgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+CiAKICAgICAg
ICAgW0RGR10gQ2hlY2tUeXBlSW5mb0ZsYWdzIHNob3VsZCBzYXkgYGVsaW1pbmF0ZWRgIGlmIGl0
IGlzIHJlbW92ZWQgaW4gY29uc3RhbnQgZm9sZGluZyBwaGFzZQpkaWZmIC0tZ2l0IGEvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2og
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvagppbmRleCAyODAyZWY2NDE4OTM2MGJiNzA0Y2QzNTg4ODllMGRmY2I1NDc2ODMxLi40
YmE4NmU5YWIyOTk5NDFmZjUxOWNiZDdjOWIxOWJhODUzNzY1MzY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagpAQCAtMTY5OCw2ICsxNjk4LDggQEAKIAkJRTMyOERBRTkxRDM4RDAwNTAw
MUEyNTI5IC8qIEJ5dGVjb2RlR3JhcGguaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxk
RmlsZTsgZmlsZVJlZiA9IEUzRDI2NDI4MUQzOEMwNDIwMDBCRTE3NCAvKiBCeXRlY29kZUdyYXBo
LmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKIAkJRTMy
OERBRUIxRDM4RDAwNTAwMUEyNTI5IC8qIEJ5dGVjb2RlUmV3cml0ZXIuaCBpbiBIZWFkZXJzICov
ID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzRDI2NDJBMUQzOEMwNDIwMDBCRTE3
NCAvKiBCeXRlY29kZVJld3JpdGVyLmggKi87IHNldHRpbmdzID0ge0FUVFJJQlVURVMgPSAoUHJp
dmF0ZSwgKTsgfTsgfTsKIAkJRTMyQUIyNDQxRENENzVGNDAwRDc1MzNBIC8qIE1hY3JvQXNzZW1i
bGVySGVscGVycy5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gRTM4MEE3NkIxRENENzE5NTAwMEY4OUU2IC8qIE1hY3JvQXNzZW1ibGVySGVscGVycy5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CisJCUUzMzA1RkIz
MjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9
IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzMzA1RkFGMjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5
SWRTdGF0dXMuaCAqLzsgfTsKKwkJRTMzMDVGQjUyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZh
cmlhbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUz
MzA1RkIxMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmggKi87IH07CiAJCUUzMzYz
N0E2MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggaW4gSGVhZGVycyAqLyA9IHtp
c2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzM2MzdBNDFCNjMyMjAyMDBFRTA4NDAgLyog
UmVmbGVjdE9iamVjdC5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7
IH07IH07CiAJCUUzM0IzRTI2MUI3QUJENzUwMDQ4REIyRSAvKiBJbnNwZWN0b3JJbnN0cnVtZW50
YXRpb25PYmplY3QubHV0LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZp
bGVSZWYgPSBFMzNCM0UyNTFCN0FCRDc1MDA0OERCMkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0
aW9uT2JqZWN0Lmx1dC5oICovOyB9OwogCQlFMzNFOEQxRDFCOTAxM0MzMDAzNDZCNTIgLyogSlNO
YXRpdmVTdGRGdW5jdGlvbi5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBm
aWxlUmVmID0gRTMzRThEMUIxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rpb24u
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwpAQCAtNDU1
NCw2ICs0NTU2LDEwIEBACiAJCUUzMjZDNDk2MUVDQkVGNTcwMEE5QTkwNSAvKiBDbGFzc0luZm8u
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQ2xhc3NJbmZvLmNwcDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMyODJCQjkxRkU5MzBBMzAwRURBRjcxIC8q
IFlhcnJFcnJvckNvZGUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBuYW1lID0g
WWFyckVycm9yQ29kZS5jcHA7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuY3BwOyBzb3VyY2VU
cmVlID0gIjxncm91cD4iOyB9OwogCQlFMzI4MkJCQTFGRTkzMEE0MDBFREFGNzEgLyogWWFyckVy
cm9yQ29kZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IG5hbWUgPSBZYXJyRXJyb3JDb2Rl
Lmg7IHBhdGggPSB5YXJyL1lhcnJFcnJvckNvZGUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+Ijsg
fTsKKwkJRTMzMDVGQUYyMEIwRjc4NzAwQ0VCODJCIC8qIEluQnlJZFN0YXR1cy5oICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBl
ID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5SWRTdGF0dXMuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKKwkJRTMzMDVGQjAyMEIwRjc4NzAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQu
Y3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSW5CeUlkVmFyaWFudC5j
cHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMzA1RkIxMjBCMEY3ODgwMENFQjgy
QiAvKiBJbkJ5SWRWYXJpYW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IElu
QnlJZFZhcmlhbnQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJRTMzMDVGQjIyMEIw
Rjc4ODAwQ0VCODJCIC8qIEluQnlJZFN0YXR1cy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNw
cC5jcHA7IHBhdGggPSBJbkJ5SWRTdGF0dXMuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlFMzM2MzdBMzFCNjMyMjAyMDBFRTA4NDAgLyogUmVmbGVjdE9iamVjdC5jcHAgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZWZsZWN0T2JqZWN0LmNwcDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzNjM3QTQxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxl
Y3RPYmplY3QuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0
OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gUmVmbGVjdE9iamVj
dC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlFMzNCM0UyNTFCN0FCRDc1MDA0OERC
MkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1dC5oICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jLmg7IHBhdGggPSBJbnNwZWN0b3JJbnN0cnVtZW50YXRpb25PYmplY3QubHV0Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC01ODY3LDkgKzU4NzMsOSBAQAogCQkJCTE0
QkQ1QTJCMEEzRTkxRjYwMEJBRjU5QyAvKiBKU1ZhbHVlUmVmLmNwcCAqLywKIAkJCQkxNDgyQjZF
QTBBNDMwMEIzMDA1MTdDRkMgLyogSlNWYWx1ZVJlZi5oICovLAogCQkJCTg2RTNDNjBGMTY3QkFC
ODcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggKi8sCi0JCQkJNzk1QUM2MTcyMEEyMzU0
QjAwNTJDNzZDIC8qIEpTVmlydHVhbE1hY2hpbmVQcml2YXRlLmggKi8sCiAJCQkJODZFM0M2MTAx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmUubW0gKi8sCiAJCQkJODZFM0M2MTEx
NjdCQUI4NzAwNkQ3NjBBIC8qIEpTVmlydHVhbE1hY2hpbmVJbnRlcm5hbC5oICovLAorCQkJCTc5
NUFDNjE3MjBBMjM1NEIwMDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oICovLAog
CQkJCUE3NDgyRTM3MTE2QTY5N0IwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5h
bC5oICovLAogCQkJCUE3NDgyQjdBMTE2NkNERUEwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBS
ZWZQcml2YXRlLmNwcCAqLywKIAkJCQlBNzQ4MkI3OTExNjZDREVBMDAzQjA3MTIgLyogSlNXZWFr
T2JqZWN0TWFwUmVmUHJpdmF0ZS5oICovLApAQCAtNjY3Nyw2ICs2NjgzLDcgQEAKIAkJCQk4NjVB
MzBGMDEzNTAwN0UxMDBDREI0OUUgLyogSlNDSlNWYWx1ZUlubGluZXMuaCAqLywKIAkJCQlGRTJC
MEI2ODFGRDBEMjk3MDA3NURBNUYgLyogSlNDUG9pc29uLmNwcCAqLywKIAkJCQlGRTJCMEI3MDFG
RDhDNDYzMDA3NURBNUYgLyogSlNDUG9pc29uLmggKi8sCisJCQkJRkU3NDk3RTUyMDkwMDFCMDAw
MDM1NjVCIC8qIEpTQ1B0clRhZy5oICovLAogCQkJCTcyQUFGN0NCMUQwRDMxOEIwMDVFNjBCRSAv
KiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmNwcCAqLywKIAkJCQk3MkFBRjdDQzFEMEQz
MThCMDA1RTYwQkUgLyogSlNDdXN0b21HZXR0ZXJTZXR0ZXJGdW5jdGlvbi5oICovLAogCQkJCTBG
MkI2NkJEMTdCNkI1QUIwMEE3QUUzRiAvKiBKU0RhdGFWaWV3LmNwcCAqLywKQEAgLTY3NjIsNyAr
Njc2OSw2IEBACiAJCQkJMkEwNUFCRDQxOTYxREYyNDAwMzQxNzUwIC8qIEpTUHJvcGVydHlOYW1l
RW51bWVyYXRvci5oICovLAogCQkJCTg2MjU1M0NFMTYxMzZBQTUwMDlGMTdEMCAvKiBKU1Byb3h5
LmNwcCAqLywKIAkJCQk4NjI1NTNDRjE2MTM2QUE1MDA5RjE3RDAgLyogSlNQcm94eS5oICovLAot
CQkJCUZFNzQ5N0U1MjA5MDAxQjAwMDAzNTY1QiAvKiBKU0NQdHJUYWcuaCAqLywKIAkJCQk1MzQ2
Mzg3MjFFNzBEMDE1MDBGMTJBQzEgLyogSlNSdW5Mb29wVGltZXIuY3BwICovLAogCQkJCTUzNDYz
ODcwMUU3MENGM0QwMEYxMkFDMSAvKiBKU1J1bkxvb3BUaW1lci5oICovLAogCQkJCTE0ODc0QUUx
MTVFQkRFNEEwMDJFMzU4NyAvKiBKU1Njb3BlLmNwcCAqLywKQEAgLTc2MzMsNiArNzYzOSwxMCBA
QAogCQkJCTE0QUQ5MTA4MURDQTkyOTQwMDE0RjlGRSAvKiBHbG9iYWxDb2RlQmxvY2suaCAqLywK
IAkJCQkwRjBCODNBODE0QkNGNTVFMDA4ODVCNEYgLyogSGFuZGxlckluZm8uaCAqLywKIAkJCQkw
RkIzOTlCRDIwQUY2QjM4MDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oICovLAorCQkJCUUzMzA1
RkIyMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuY3BwICovLAorCQkJCUUzMzA1RkFG
MjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCAqLywKKwkJCQlFMzMwNUZCMDIwQjBG
Nzg3MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5jcHAgKi8sCisJCQkJRTMzMDVGQjEyMEIwRjc4
ODAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuaCAqLywKIAkJCQk3OTA1QkI2NjFEMTIwNTBFMDAx
OUZFNTcgLyogSW5saW5lQWNjZXNzLmNwcCAqLywKIAkJCQk3OTA1QkI2NzFEMTIwNTBFMDAxOUZF
NTcgLyogSW5saW5lQWNjZXNzLmggKi8sCiAJCQkJMTQ4QTdCRUQxQjgyOTc1QTAwMkQ5MTU3IC8q
IElubGluZUNhbGxGcmFtZS5jcHAgKi8sCkBAIC04NjIzLDcgKzg2MzMsNiBAQAogCQkJCTBGRkI5
MjFDMTZEMDJGMTEwMDU1QTVEQiAvKiBERkdPU1JFeGl0Q29tcGlsYXRpb25JbmZvLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjcwMjVBQTE3MTRCMEZDMDAzODJDMEUgLyogREZHT1NSRXhpdENvbXBp
bGVyQ29tbW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjM5MkM4QTFCNDYxODg0MDA4NDQ3Mjgg
LyogREZHT1NSRXhpdEZ1enouaCBpbiBIZWFkZXJzICovLAotCQkJCTc5NUFDNjE4MjBBMjM1NUUw
MDUyQzc2QyAvKiBKU1ZpcnR1YWxNYWNoaW5lUHJpdmF0ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
MEZFRkM5QUIxNjgxQTNCNjAwNTY3RjUzIC8qIERGR09TUkV4aXRKdW1wUGxhY2Vob2xkZXIuaCBp
biBIZWFkZXJzICovLAogCQkJCTBGMjM1QkVFMTcxNzhFNzMwMDY5MEM3RiAvKiBERkdPU1JFeGl0
UHJlcGFyYXRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNjIzNzk4MUFFNDVDQTcwMEQ0MDJF
QSAvKiBERkdQaGFudG9tSW5zZXJ0aW9uUGhhc2UuaCBpbiBIZWFkZXJzICovLApAQCAtODg2Nyw5
ICs4ODc2LDEyIEBACiAJCQkJRkUxQkQwMjUxRTcyMDUzODAwMTM0QkM5IC8qIEhlYXBWZXJpZmll
ci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0NjgwRDUxNEJCRDI0QjAwQkZFMjcyIC8qIEhvc3RD
YWxsUmV0dXJuVmFsdWUuaCBpbiBIZWFkZXJzICovLAogCQkJCURDMjE0MzA3MUNBMzJFNTUwMDBB
ODg2OSAvKiBJQ1N0YXRzLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRTIwQUY2QjNEMDAx
N0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0MEYwRTE2
RjVDRDAwQjM0NDYwIC8qIElkZW50aWZpZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTg2MDZEREVB
MThEQTQ0QUIwMEEzODNEMCAvKiBJZGVudGlmaWVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJQTVGRDAwNzYxODlCMDM4QzAwNjMzMjMxIC8qIElkZW50aWZpZXJzRmFjdG9yeS5oIGluIEhl
YWRlcnMgKi8sCisJCQkJRTMzMDVGQjMyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFN0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCisJCQkJRTMzMDVGQjUyMEIwRjc4ODAwQ0VCODJCIC8qIEluQnlJZFZh
cmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUY4QkNFMTU3NTQ0QTkwMDI0NUI3MSAvKiBJ
bmNyZW1lbnRhbFN3ZWVwZXIuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQjdGMzk5MTVFRDhFNDYw
MEYxNjdCMiAvKiBJbmRleGluZ0hlYWRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCN0YzOUEx
NUVEOEU0NjAwRjE2N0IyIC8qIEluZGV4aW5nSGVhZGVySW5saW5lcy5oIGluIEhlYWRlcnMgKi8s
CkBAIC04OTEzLDYgKzg5MjUsOSBAQAogCQkJCUE1NUQ5M0FDMTg1MTRGNzkwMDQwMERFRCAvKiBJ
bnNwZWN0b3JQcm90b2NvbFR5cGVzLmggaW4gSGVhZGVycyAqLywKIAkJCQlBNTBFNEI2MjE4ODA5
REQ1MDA2OEE0NkQgLyogSW5zcGVjdG9yUnVudGltZUFnZW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQlBNTUxNjVEMzFCREYwQjlFMDAzQjc1QzEgLyogSW5zcGVjdG9yU2NyaXB0UHJvZmlsZXJBZ2Vu
dC5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEY0OUU5QUEyMEFCNEQwMDAwMUNBMEFBIC8qIEluc3Rh
bmNlT2ZBY2Nlc3NDYXNlLmggaW4gSGVhZGVycyAqLywKKwkJCQkwRkIzOTlCRjIwQUY2QjNGMDAx
N0UyMTMgLyogSW5zdGFuY2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCisJCQkJMEZCMzk5QzAy
MEFGNkI0MzAwMTdFMjEzIC8qIEluc3RhbmNlT2ZWYXJpYW50LmggaW4gSGVhZGVycyAqLywKIAkJ
CQk5NjlBMDc5OTBFRDFEM0FFMDBGMUY2ODEgLyogSW5zdHJ1Y3Rpb24uaCBpbiBIZWFkZXJzICov
LAogCQkJCUE3QThBRjNCMTdBREI1RjMwMDVBQjE3NCAvKiBJbnQxNkFycmF5LmggaW4gSGVhZGVy
cyAqLywKIAkJCQlBN0E4QUYzQzE3QURCNUYzMDA1QUIxNzQgLyogSW50MzJBcnJheS5oIGluIEhl
YWRlcnMgKi8sCkBAIC04OTYxLDYgKzg5NzYsNyBAQAogCQkJCUZFM0EwNkE2MUMxMEI3MkQwMDM5
MEZERCAvKiBKSVRCaXRPckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUzQTA2QjQx
QzEwQ0I5MzAwMzkwRkREIC8qIEpJVEJpdFhvckdlbmVyYXRvci5oIGluIEhlYWRlcnMgKi8sCiAJ
CQkJODZDQ0VGREUwRjQxM0Y4OTAwRkQ3RjlFIC8qIEpJVENvZGUuaCBpbiBIZWFkZXJzICovLAor
CQkJCTBGRkI4MEJDMjBBNzk0NzMwMDA2QUFGNiAvKiBKSVRDb2RlSW5saW5lcy5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU0NzZGRjQyMDdFODVENTAwOTNDQTJEIC8qIEpJVENvZGVNYXAuaCBpbiBI
ZWFkZXJzICovLAogCQkJCTBGMDc3NkJGMTRGRjAwMkIwMDEwMjMzMiAvKiBKSVRDb21waWxhdGlv
bkVmZm9ydC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZBRjdFRkUxNjVCQTkxRjAwMEM4NDU1IC8q
IEpJVERpc2Fzc2VtYmxlci5oIGluIEhlYWRlcnMgKi8sCkBAIC05MDE4LDYgKzkwMzQsNyBAQAog
CQkJCUE1RDJFNjY1MTk1RTE3NDAwMEE1MThFNyAvKiBKU0NvbnRleHRSZWZJbnRlcm5hbC5oIGlu
IEhlYWRlcnMgKi8sCiAJCQkJMTQ4Q0QxRDgxMDhDRjkwMjAwODE2M0M2IC8qIEpTQ29udGV4dFJl
ZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFMkIwQjczMUZEOUVGNzAwMDc1REE1RiAv
KiBKU0NQb2lzb24uaCBpbiBIZWFkZXJzICovLAorCQkJCUZFNzQ5N0U2MjA5MDAxQjEwMDAzNTY1
QiAvKiBKU0NQdHJUYWcuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3MjAyOEI4MTc5NzYwMUUwMDk4
MDI4QyAvKiBKU0NUZXN0UnVubmVyVXRpbHMuaCBpbiBIZWFkZXJzICovLAogCQkJCTcyQUFGN0NF
MUQwRDMxQjMwMDVFNjBCRSAvKiBKU0N1c3RvbUdldHRlclNldHRlckZ1bmN0aW9uLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRjJCNjZFQzE3QjZCNUFCMDBBN0FFM0YgLyogSlNEYXRhVmlldy5oIGlu
IEhlYWRlcnMgKi8sCkBAIC05MDY4LDcgKzkwODUsNiBAQAogCQkJCUE1MDNGQTFFMTg4RTBGQjAw
MDExMEYxNCAvKiBKU0phdmFTY3JpcHRDYWxsRnJhbWVQcm90b3R5cGUuaCBpbiBIZWFkZXJzICov
LAogCQkJCTcwMTNDQThDMUI0OTFBOTQwMENBRTYxMyAvKiBKU0pvYi5oIGluIEhlYWRlcnMgKi8s
CiAJCQkJQkMxOEM0MTYwRTE2RjVDRDAwQjM0NDYwIC8qIEpTTGV4aWNhbEVudmlyb25tZW50Lmgg
aW4gSGVhZGVycyAqLywKLQkJCQkwRkIzOTlDMDIwQUY2QjQzMDAxN0UyMTMgLyogSW5zdGFuY2VP
ZlZhcmlhbnQuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDNDIzMEUxNkY1Q0QwMEIzNDQ2MCAv
KiBKU0xvY2suaCBpbiBIZWFkZXJzICovLAogCQkJCUMyNUQ3MDlDMTZERTk5RjQwMEZDQTZCQyAv
KiBKU01hbmFnZWRWYWx1ZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMkE0QkI3RjMxOEE0MTE3OTAw
OEEwRkNEIC8qIEpTTWFuYWdlZFZhbHVlSW50ZXJuYWwuaCBpbiBIZWFkZXJzICovLApAQCAtOTA5
NCw3ICs5MTEwLDYgQEAKIAkJCQk3QzAwOENEQjE4NzEyNEJCMDA5NTVDMjQgLyogSlNQcm9taXNl
RGVmZXJyZWQuaCBpbiBIZWFkZXJzICovLAogCQkJCTdDMTg0RTFGMTdCRUUyMkUwMDdDQjYzQSAv
KiBKU1Byb21pc2VQcm90b3R5cGUuaCBpbiBIZWFkZXJzICovLAogCQkJCTk5NkI3MzFGMUJEQTA4
RUYwMDMzMUI4NCAvKiBKU1Byb21pc2VQcm90b3R5cGUubHV0LmggaW4gSGVhZGVycyAqLywKLQkJ
CQlGRTc0OTdFNjIwOTAwMUIxMDAwMzU2NUIgLyogSlNDUHRyVGFnLmggaW4gSGVhZGVycyAqLywK
IAkJCQkyQTA1QUJENjE5NjFERjI0MDAzNDE3NTAgLyogSlNQcm9wZXJ0eU5hbWVFbnVtZXJhdG9y
LmggaW4gSGVhZGVycyAqLywKIAkJCQk4NjI1NTNEMjE2MTM2RTFBMDA5RjE3RDAgLyogSlNQcm94
eS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTU1MkMzODAxQUREQjhGRTAwMTM5NzI2IC8qIEpTUmVt
b3RlSW5zcGVjdG9yLmggaW4gSGVhZGVycyAqLywKQEAgLTkxMzcsNiArOTE1Miw3IEBACiAJCQkJ
QkMxOEM0MkMwRTE2RjVDRDAwQjM0NDYwIC8qIEpTVmFsdWVSZWYuaCBpbiBIZWFkZXJzICovLAog
CQkJCTg2RTNDNjE1MTY3QkFCRDcwMDZENzYwQSAvKiBKU1ZpcnR1YWxNYWNoaW5lLmggaW4gSGVh
ZGVycyAqLywKIAkJCQk4NkUzQzYxRDE2N0JBQkVFMDA2RDc2MEEgLyogSlNWaXJ0dWFsTWFjaGlu
ZUludGVybmFsLmggaW4gSGVhZGVycyAqLywKKwkJCQk3OTVBQzYxODIwQTIzNTVFMDA1MkM3NkMg
LyogSlNWaXJ0dWFsTWFjaGluZVByaXZhdGUuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3Q0EzQUU4
MTdEQTQxQUUwMDY1MzhBRiAvKiBKU1dlYWtNYXAuaCBpbiBIZWFkZXJzICovLAogCQkJCUE3NDgy
RTkzMTE2QTdDQUQwMDNCMDcxMiAvKiBKU1dlYWtPYmplY3RNYXBSZWZJbnRlcm5hbC5oIGluIEhl
YWRlcnMgKi8sCiAJCQkJQTc0ODJCOTMxMTY3MTE0NzAwM0IwNzEyIC8qIEpTV2Vha09iamVjdE1h
cFJlZlByaXZhdGUuaCBpbiBIZWFkZXJzICovLApAQCAtOTE5Myw3ICs5MjA5LDYgQEAKIAkJCQkw
RjQ2ODBDRDE0QkJCMTdEMDBCRkUyNzIgLyogTG93TGV2ZWxJbnRlcnByZXRlci5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJOTgxRUQ4MjMyODIzNEQ5MUJBRUNDQURFIC8qIE1hY2hpbmVDb250ZXh0Lmgg
aW4gSGVhZGVycyAqLywKIAkJCQkxNEI3MjNCODEyRDdEQTZGMDAzQkQ1RUQgLyogTWFjaGluZVN0
YWNrTWFya2VyLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkIzOTlCRjIwQUY2QjNGMDAxN0UyMTMg
LyogSW5zdGFuY2VPZlN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODZDMzZFRUEwRUUxMjg5
RDAwQjNERjU5IC8qIE1hY3JvQXNzZW1ibGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk4NkQzQjJD
NjEwMTU2QkRFMDAyODY1RTcgLyogTWFjcm9Bc3NlbWJsZXJBUk0uaCBpbiBIZWFkZXJzICovLAog
CQkJCUExQTAwOUMwMTgzMUEyMkQwMENGODcxMSAvKiBNYWNyb0Fzc2VtYmxlckFSTTY0LmggaW4g
SGVhZGVycyAqLywKQEAgLTkyMjgsNyArOTI0Myw2IEBACiAJCQkJN0MwMDhDRTcxODc2MzFCNjAw
OTU1QzI0IC8qIE1pY3JvdGFzay5oIGluIEhlYWRlcnMgKi8sCiAJCQkJRkUyQTg3NjAxRjAyMzgx
NjAwRUIzMUIyIC8qIE1pbmltdW1SZXNlcnZlZFpvbmVTaXplLmggaW4gSGVhZGVycyAqLywKIAkJ
CQk4NkM1NjhFMjExQTIxM0VFMDAwN0Y3RjAgLyogTUlQU0Fzc2VtYmxlci5oIGluIEhlYWRlcnMg
Ki8sCi0JCQkJMEY0OUU5QUEyMEFCNEQwMDAwMUNBMEFBIC8qIEluc3RhbmNlT2ZBY2Nlc3NDYXNl
LmggaW4gSGVhZGVycyAqLywKIAkJCQlDNDcwM0NENzE5Mjg0NENDMDAxM0ZCRUEgLyogbW9kZWxz
LnB5IGluIEhlYWRlcnMgKi8sCiAJCQkJRTM3OTRFNzYxQjc3RUI5NzAwNTU0M0FFIC8qIE1vZHVs
ZUFuYWx5emVyLmggaW4gSGVhZGVycyAqLywKIAkJCQk5RjYzNDM0NTc3Mjc0RkFGQjkzMzZDMzgg
LyogTW9kdWxlTmFtZXNwYWNlQWNjZXNzQ2FzZS5oIGluIEhlYWRlcnMgKi8sCkBAIC05MjczLDcg
KzkyODcsNiBAQAogCQkJCUUzNEU2NTc1MjA2NjhFQUEwMEZCODFBQyAvKiBQYXJzZUhhc2guaCBp
biBIZWFkZXJzICovLAogCQkJCTM3QzczOEQyMUVEQjU2RTQwMDNGMkIwQiAvKiBQYXJzZUludC5o
IGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0NEIwRTE2RjVDRDAwQjM0NDYwIC8qIFBhcnNlci5o
IGluIEhlYWRlcnMgKi8sCi0JCQkJMEZGQjgwQkMyMEE3OTQ3MzAwMDZBQUY2IC8qIEpJVENvZGVJ
bmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk5MzA1MkMzNTBGQjc5MjE5MDA0OEZEQzMgLyog
UGFyc2VyQXJlbmEuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGQ0NBRTQ1MTZEMENGNzQwMEQwQzY1
QiAvKiBQYXJzZXJFcnJvci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQTc3RjE4MjUxNjQxOTJDNzAw
NjQwQTQ3IC8qIFBhcnNlck1vZGVzLmggaW4gSGVhZGVycyAqLywKQEAgLTk0NTIsNyArOTQ2NSw2
IEBACiAJCQkJNzA1QjQxQUUxQTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbENvbnN0cnVjdG9yLmgg
aW4gSGVhZGVycyAqLywKIAkJCQk5OTZCNzMyNzFCREEwOEVGMDAzMzFCODQgLyogU3ltYm9sQ29u
c3RydWN0b3IubHV0LmggaW4gSGVhZGVycyAqLywKIAkJCQk3MDVCNDFCMDFBNkU1MDFFMDA3MTY3
NTcgLyogU3ltYm9sT2JqZWN0LmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkIzOTlCRTIwQUY2QjNE
MDAxN0UyMTMgLyogSUNTdGF0dXNVdGlscy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJNzA1QjQxQjIx
QTZFNTAxRTAwNzE2NzU3IC8qIFN5bWJvbFByb3RvdHlwZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
OTk2QjczMjgxQkRBMDhFRjAwMzMxQjg0IC8qIFN5bWJvbFByb3RvdHlwZS5sdXQuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUJDMThDNDZCMEUxNkY1Q0QwMEIzNDQ2MCAvKiBTeW1ib2xUYWJsZS5oIGlu
IEhlYWRlcnMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50
eHQgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvU291cmNlcy50eHQKaW5kZXggNmFkMWE0NWQ3ZjU5
N2Y2MTYyZGE5MWE0ZTBkOTQ5M2EzODIxYTNmMi4uODgwNjkxYjJkZjNiMmZmN2IyYmViZDc1Njk1
ODdkY2I0MjZjZTdiYSAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMu
dHh0CisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dApAQCAtMjE5LDYgKzIx
OSw4IEBAIGJ5dGVjb2RlL0Z1bmN0aW9uQ29kZUJsb2NrLmNwcAogYnl0ZWNvZGUvR2V0QnlJZFN0
YXR1cy5jcHAKIGJ5dGVjb2RlL0dldEJ5SWRWYXJpYW50LmNwcAogYnl0ZWNvZGUvR2V0dGVyU2V0
dGVyQWNjZXNzQ2FzZS5jcHAKK2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKK2J5dGVjb2RlL0lu
QnlJZFZhcmlhbnQuY3BwCiBieXRlY29kZS9JbmxpbmVBY2Nlc3MuY3BwCiBieXRlY29kZS9Jbmxp
bmVDYWxsRnJhbWUuY3BwCiBieXRlY29kZS9JbmxpbmVDYWxsRnJhbWVTZXQuY3BwCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcCBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
LjhiMzEwZmI5OWI0MTZiZDQxZmY2ZDJiZWY3ZDYzZWFiODE5Mzc5M2QKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmNwcApAQCAt
MCwwICsxLDIzNyBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1
dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJ
TVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAq
IElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEg
UEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxM
IEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1Qs
IElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFV
RU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VS
RU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEs
IE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VE
IEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1Qs
IFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBP
VEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBT
T0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFH
RS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5CeUlkU3RhdHVzLmgi
CisKKyNpbmNsdWRlICJDb2RlQmxvY2suaCIKKyNpbmNsdWRlICJDb21wbGV4R2V0U3RhdHVzLmgi
CisjaW5jbHVkZSAiSUNTdGF0dXNVdGlscy5oIgorI2luY2x1ZGUgIkpTQ0lubGluZXMuaCIKKyNp
bmNsdWRlICJQb2x5bW9ycGhpY0FjY2Vzcy5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVN0dWJJbmZv
LmgiCisjaW5jbHVkZSA8d3RmL0xpc3REdW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitib29s
IEluQnlJZFN0YXR1czo6YXBwZW5kVmFyaWFudChjb25zdCBJbkJ5SWRWYXJpYW50JiB2YXJpYW50
KQoreworICAgIHJldHVybiBhcHBlbmRJQ1N0YXR1c1ZhcmlhbnQobV92YXJpYW50cywgdmFyaWFu
dCk7Cit9CisKK0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoQ29kZUJsb2Nr
KiBwcm9maWxlZEJsb2NrLCBTdHViSW5mb01hcCYgbWFwLCB1bnNpZ25lZCBieXRlY29kZUluZGV4
LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2Nr
ZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKworICAgIEluQnlJZFN0YXR1cyByZXN1bHQ7CisK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICByZXN1bHQgPSBjb21wdXRlRm9yU3R1YkluZm9XaXRo
b3V0RXhpdFNpdGVGZWVkYmFjayhsb2NrZXIsIG1hcC5nZXQoQ29kZU9yaWdpbihieXRlY29kZUlu
ZGV4KSksIHVpZCk7CisKKyAgICBpZiAoIXJlc3VsdC50YWtlc1Nsb3dQYXRoKCkgJiYgaGFzRXhp
dFNpdGUocHJvZmlsZWRCbG9jaywgYnl0ZWNvZGVJbmRleCkpCisgICAgICAgIHJldHVybiBJbkJ5
SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShtYXApOwor
I2VuZGlmCisKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3Rh
dHVzOjpjb21wdXRlRm9yKAorICAgIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgQ29kZUJsb2Nr
KiBkZmdCbG9jaywgU3R1YkluZm9NYXAmIGJhc2VsaW5lTWFwLAorICAgIFN0dWJJbmZvTWFwJiBk
ZmdNYXAsIENvZGVPcmlnaW4gY29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sK
KyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBpZiAoZGZnQmxvY2spIHsKKyAgICAgICAgQ2FsbExp
bmtTdGF0dXM6OkV4aXRTaXRlRGF0YSBleGl0U2l0ZURhdGE7CisgICAgICAgIHsKKyAgICAgICAg
ICAgIENvbmN1cnJlbnRKU0xvY2tlciBsb2NrZXIocHJvZmlsZWRCbG9jay0+bV9sb2NrKTsKKyAg
ICAgICAgICAgIGV4aXRTaXRlRGF0YSA9IENhbGxMaW5rU3RhdHVzOjpjb21wdXRlRXhpdFNpdGVE
YXRhKAorICAgICAgICAgICAgICAgIHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCk7CisgICAgICAgIH0KKworICAgICAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OworICAgICAg
ICB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKGRmZ0Jsb2NrLT5tX2xv
Y2spOworICAgICAgICAgICAgcmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRT
aXRlRmVlZGJhY2sobG9ja2VyLCBkZmdNYXAuZ2V0KGNvZGVPcmlnaW4pLCB1aWQpOworICAgICAg
ICB9CisKKyAgICAgICAgaWYgKHJlc3VsdC50YWtlc1Nsb3dQYXRoKCkpCisgICAgICAgICAgICBy
ZXR1cm4gcmVzdWx0OworCisgICAgICAgIGlmIChoYXNFeGl0U2l0ZShwcm9maWxlZEJsb2NrLCBj
b2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1
cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICBpZiAocmVzdWx0LmlzU2V0KCkpCisgICAgICAg
ICAgICByZXR1cm4gcmVzdWx0OworICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKGRmZ0Js
b2NrKTsKKyAgICBVTlVTRURfUEFSQU0oZGZnTWFwKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIGNv
bXB1dGVGb3IocHJvZmlsZWRCbG9jaywgYmFzZWxpbmVNYXAsIGNvZGVPcmlnaW4uYnl0ZWNvZGVJ
bmRleCwgdWlkKTsKK30KKworI2lmIEVOQUJMRShERkdfSklUKQorYm9vbCBJbkJ5SWRTdGF0dXM6
Omhhc0V4aXRTaXRlKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgdW5zaWduZWQgYnl0ZWNvZGVJ
bmRleCkKK3sKKyAgICBVbmxpbmtlZENvZGVCbG9jayogdW5saW5rZWRDb2RlQmxvY2sgPSBwcm9m
aWxlZEJsb2NrLT51bmxpbmtlZENvZGVCbG9jaygpOworICAgIENvbmN1cnJlbnRKU0xvY2tlciBs
b2NrZXIodW5saW5rZWRDb2RlQmxvY2stPm1fbG9jayk7CisgICAgcmV0dXJuIHVubGlua2VkQ29k
ZUJsb2NrLT5oYXNFeGl0U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29k
ZUluZGV4LCBCYWRDYWNoZSkpCisgICAgICAgIHx8IHVubGlua2VkQ29kZUJsb2NrLT5oYXNFeGl0
U2l0ZShsb2NrZXIsIERGRzo6RnJlcXVlbnRFeGl0U2l0ZShieXRlY29kZUluZGV4LCBCYWRDb25z
dGFudENhY2hlKSk7Cit9CisKK0luQnlJZFN0YXR1cyBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3JT
dHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImIGxvY2tlciwgQ29kZUJsb2NrKiBwcm9m
aWxlZEJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIENvZGVPcmlnaW4gY29kZU9y
aWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkKK3sKKyAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0
ID0gSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFj
ayhsb2NrZXIsIHN0dWJJbmZvLCB1aWQpOworCisgICAgaWYgKCFyZXN1bHQudGFrZXNTbG93UGF0
aCgpICYmIEluQnlJZFN0YXR1czo6aGFzRXhpdFNpdGUocHJvZmlsZWRCbG9jaywgY29kZU9yaWdp
bi5ieXRlY29kZUluZGV4KSkKKyAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQ
YXRoKTsKKyAgICByZXR1cm4gcmVzdWx0OworfQorCitJbkJ5SWRTdGF0dXMgSW5CeUlkU3RhdHVz
Ojpjb21wdXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayhjb25zdCBDb25jdXJy
ZW50SlNMb2NrZXImLCBTdHJ1Y3R1cmVTdHViSW5mbyogc3R1YkluZm8sIFVuaXF1ZWRTdHJpbmdJ
bXBsKiB1aWQpCit7CisgICAgaWYgKCFzdHViSW5mbyB8fCAhc3R1YkluZm8tPmV2ZXJDb25zaWRl
cmVkKQorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOworCisgICAg
aWYgKHN0dWJJbmZvLT50b29rU2xvd1BhdGgpCisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisKKyAgICAvLyBGaW5hbGx5IGZpZ3VyZSBvdXQgaWYgd2UgY2FuIGRl
cml2ZSBhbiBhY2Nlc3Mgc3RyYXRlZ3kuCisgICAgSW5CeUlkU3RhdHVzIHJlc3VsdDsKKyAgICBy
ZXN1bHQubV9zdGF0ZSA9IFNpbXBsZTsKKyAgICBzd2l0Y2ggKHN0dWJJbmZvLT5jYWNoZVR5cGUp
IHsKKyAgICBjYXNlIENhY2hlVHlwZTo6VW5zZXQ6CisgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0
dXMoTm9JbmZvcm1hdGlvbik7CisKKyAgICBjYXNlIENhY2hlVHlwZTo6SW5CeUlkU2VsZjogewor
ICAgICAgICBTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA9IHN0dWJJbmZvLT51LmJ5SWRTZWxmLmJhc2VP
YmplY3RTdHJ1Y3R1cmUuZ2V0KCk7CisgICAgICAgIGlmIChzdHJ1Y3R1cmUtPnRha2VzU2xvd1Bh
dGhJbkRGR0ZvckltcHVyZVByb3BlcnR5KCkpCisgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3Rh
dHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICB1bnNpZ25lZCBhdHRyaWJ1dGVzOworICAgICAg
ICBJbkJ5SWRWYXJpYW50IHZhcmlhbnQ7CisgICAgICAgIHZhcmlhbnQubV9vZmZzZXQgPSBzdHJ1
Y3R1cmUtPmdldENvbmN1cnJlbnRseSh1aWQsIGF0dHJpYnV0ZXMpOworICAgICAgICBpZiAoIWlz
VmFsaWRPZmZzZXQodmFyaWFudC5tX29mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gSW5CeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICBpZiAoYXR0cmlidXRlcyAmIFByb3BlcnR5
QXR0cmlidXRlOjpDdXN0b21BY2Nlc3NvcikKKyAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0
dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgdmFyaWFudC5tX3N0cnVjdHVyZVNldC5hZGQo
c3RydWN0dXJlKTsKKyAgICAgICAgYm9vbCBkaWRBcHBlbmQgPSByZXN1bHQuYXBwZW5kVmFyaWFu
dCh2YXJpYW50KTsKKyAgICAgICAgQVNTRVJUX1VOVVNFRChkaWRBcHBlbmQsIGRpZEFwcGVuZCk7
CisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgY2FzZSBDYWNoZVR5cGU6OlN0
dWI6IHsKKyAgICAgICAgUG9seW1vcnBoaWNBY2Nlc3MqIGxpc3QgPSBzdHViSW5mby0+dS5zdHVi
OworICAgICAgICBmb3IgKHVuc2lnbmVkIGxpc3RJbmRleCA9IDA7IGxpc3RJbmRleCA8IGxpc3Qt
PnNpemUoKTsgKytsaXN0SW5kZXgpIHsKKyAgICAgICAgICAgIGNvbnN0IEFjY2Vzc0Nhc2UmIGFj
Y2VzcyA9IGxpc3QtPmF0KGxpc3RJbmRleCk7CisgICAgICAgICAgICBpZiAoYWNjZXNzLnZpYVBy
b3h5KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRo
KTsKKworICAgICAgICAgICAgaWYgKGFjY2Vzcy51c2VzUG9seVByb3RvKCkpCisgICAgICAgICAg
ICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKworICAgICAgICAgICAg
U3RydWN0dXJlKiBzdHJ1Y3R1cmUgPSBhY2Nlc3Muc3RydWN0dXJlKCk7CisgICAgICAgICAgICBp
ZiAoIXN0cnVjdHVyZSkgeworICAgICAgICAgICAgICAgIC8vIFRoZSBudWxsIHN0cnVjdHVyZSBj
YXNlcyBhcmlzZSBkdWUgdG8gYXJyYXkubGVuZ3RoLiBXZSBoYXZlIG5vIHdheSBvZiBjcmVhdGlu
ZyBhCisgICAgICAgICAgICAgICAgLy8gSW5CeUlkVmFyaWFudCBmb3IgdGhvc2UsIGFuZCB3ZSBk
b24ndCByZWFsbHkgaGF2ZSB0byBzaW5jZSB0aGUgREZHIGhhbmRsZXMgdGhvc2UKKyAgICAgICAg
ICAgICAgICAvLyBjYXNlcyBpbiBGaXh1cFBoYXNlIHVzaW5nIHZhbHVlIHByb2ZpbGluZy4gVGhh
dCdzIGEgYml0IGF3a3dhcmQgLSB3ZSBzaG91bGRuJ3QKKyAgICAgICAgICAgICAgICAvLyBoYXZl
IHRvIHVzZSB2YWx1ZSBwcm9maWxpbmcgdG8gZGlzY292ZXIgc29tZXRoaW5nIHRoYXQgdGhlIEFj
Y2Vzc0Nhc2UgY291bGQgaGF2ZQorICAgICAgICAgICAgICAgIC8vIHRvbGQgdXMuIEJ1dCwgaXQg
d29ya3Mgd2VsbCBlbm91Z2guIFNvLCBvdXIgb25seSBjb25jZXJuIGhlcmUgaXMgdG8gbm90Cisg
ICAgICAgICAgICAgICAgLy8gY3Jhc2ggb24gbnVsbCBzdHJ1Y3R1cmUuCisgICAgICAgICAgICAg
ICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAgICAgICAgIH0KKwor
ICAgICAgICAgICAgQ29tcGxleEdldFN0YXR1cyBjb21wbGV4R2V0U3RhdHVzID0gQ29tcGxleEdl
dFN0YXR1czo6Y29tcHV0ZUZvcihzdHJ1Y3R1cmUsIGFjY2Vzcy5jb25kaXRpb25TZXQoKSwgdWlk
KTsKKyAgICAgICAgICAgIHN3aXRjaCAoY29tcGxleEdldFN0YXR1cy5raW5kKCkpIHsKKyAgICAg
ICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6U2hvdWxkU2tpcDoKKyAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKworICAgICAgICAgICAgY2FzZSBDb21wbGV4R2V0U3RhdHVzOjpUYWtlc1Ns
b3dQYXRoOgorICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0
aCk7CisKKyAgICAgICAgICAgIGNhc2UgQ29tcGxleEdldFN0YXR1czo6SW5saW5lYWJsZTogewor
ICAgICAgICAgICAgICAgIHN3aXRjaCAoYWNjZXNzLnR5cGUoKSkgeworICAgICAgICAgICAgICAg
IGNhc2UgQWNjZXNzQ2FzZTo6SW5IaXQ6CisgICAgICAgICAgICAgICAgY2FzZSBBY2Nlc3NDYXNl
OjpJbk1pc3M6CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIGRl
ZmF1bHQ6CisgICAgICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93
UGF0aCk7CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgSW5CeUlkVmFyaWFu
dCB2YXJpYW50KAorICAgICAgICAgICAgICAgICAgICBTdHJ1Y3R1cmVTZXQoc3RydWN0dXJlKSwg
Y29tcGxleEdldFN0YXR1cy5vZmZzZXQoKSwKKyAgICAgICAgICAgICAgICAgICAgY29tcGxleEdl
dFN0YXR1cy5jb25kaXRpb25TZXQoKSk7CisKKyAgICAgICAgICAgICAgICBpZiAoIXJlc3VsdC5h
cHBlbmRWYXJpYW50KHZhcmlhbnQpKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gSW5CeUlk
U3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAgcmV0dXJuIHJlc3VsdDsK
KyAgICB9CisKKyAgICBkZWZhdWx0OgorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2Vz
U2xvd1BhdGgpOworICAgIH0KKworICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgcmV0dXJuIEluQnlJZFN0YXR1cygpOworfQorI2VuZGlmCisKK3ZvaWQgSW5CeUlkU3RhdHVz
OjpmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQpCit7CisgICAgaWYgKG1f
c3RhdGUgIT0gU2ltcGxlKQorICAgICAgICByZXR1cm47CisgICAgZmlsdGVySUNTdGF0dXNWYXJp
YW50cyhtX3ZhcmlhbnRzLCBzdHJ1Y3R1cmVTZXQpOworICAgIGlmIChtX3ZhcmlhbnRzLmlzRW1w
dHkoKSkKKyAgICAgICAgbV9zdGF0ZSA9IE5vSW5mb3JtYXRpb247Cit9CisKK3ZvaWQgSW5CeUlk
U3RhdHVzOjpkdW1wKFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgb3V0LnByaW50KCIo
Iik7CisgICAgc3dpdGNoIChtX3N0YXRlKSB7CisgICAgY2FzZSBOb0luZm9ybWF0aW9uOgorICAg
ICAgICBvdXQucHJpbnQoIk5vSW5mb3JtYXRpb24iKTsKKyAgICAgICAgYnJlYWs7CisgICAgY2Fz
ZSBTaW1wbGU6CisgICAgICAgIG91dC5wcmludCgiU2ltcGxlIik7CisgICAgICAgIGJyZWFrOwor
ICAgIGNhc2UgVGFrZXNTbG93UGF0aDoKKyAgICAgICAgb3V0LnByaW50KCJUYWtlc1Nsb3dQYXRo
Iik7CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBvdXQucHJpbnQoIiwgIiwgbGlzdER1bXAo
bV92YXJpYW50cyksICIpIik7Cit9CisKK30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQg
YS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmggYi9Tb3VyY2Uv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkU3RhdHVzLmgKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNjYxNWRm
Y2RmOGY0Y2IxNjA3ZWI0MTQ1MDhkMDUxZjVkN2VmODAxOAotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRTdGF0dXMuaApAQCAtMCwwICsxLDk4
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVh
QGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFi
b3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFy
eSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwg
dGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0
aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3
aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBC
WSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FS
UkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
CisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5D
LiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiQ2FsbExpbmtTdGF0dXMuaCIKKyNpbmNsdWRlICJD
b2RlT3JpZ2luLmgiCisjaW5jbHVkZSAiQ29uY3VycmVudEpTTG9jay5oIgorI2luY2x1ZGUgIklu
QnlJZFZhcmlhbnQuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK2NsYXNzIEFjY2Vzc0Nhc2U7Citj
bGFzcyBDb2RlQmxvY2s7CitjbGFzcyBTdHJ1Y3R1cmVTdHViSW5mbzsKKwordHlwZWRlZiBIYXNo
TWFwPENvZGVPcmlnaW4sIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbkFwcHJveGltYXRl
SGFzaD4gU3R1YkluZm9NYXA7CisKK2NsYXNzIEluQnlJZFN0YXR1cyB7CitwdWJsaWM6CisgICAg
ZW51bSBTdGF0ZSB7CisgICAgICAgIC8vIEl0J3MgdW5jYWNoZWQgc28gd2UgaGF2ZSBubyBpbmZv
cm1hdGlvbi4KKyAgICAgICAgTm9JbmZvcm1hdGlvbiwKKyAgICAgICAgLy8gSXQncyBjYWNoZWQg
Zm9yIGEgc2ltcGxlIGFjY2VzcyB0byBhIGtub3duIG9iamVjdCBwcm9wZXJ0eSB3aXRoCisgICAg
ICAgIC8vIGEgcG9zc2libGUgc3RydWN0dXJlIGNoYWluIGFuZCBhIHBvc3NpYmxlIHNwZWNpZmlj
IHZhbHVlLgorICAgICAgICBTaW1wbGUsCisgICAgICAgIC8vIEl0J3Mga25vd24gdG8gb2Z0ZW4g
dGFrZSBzbG93IHBhdGguCisgICAgICAgIFRha2VzU2xvd1BhdGgsCisgICAgfTsKKworICAgIElu
QnlJZFN0YXR1cygpID0gZGVmYXVsdDsKKworICAgIEluQnlJZFN0YXR1cyhTdGF0ZSBzdGF0ZSwg
Y29uc3QgSW5CeUlkVmFyaWFudCYgdmFyaWFudCA9IEluQnlJZFZhcmlhbnQoKSkKKyAgICAgICAg
OiBtX3N0YXRlKHN0YXRlKQorICAgIHsKKyAgICAgICAgQVNTRVJUKChzdGF0ZSA9PSBTaW1wbGUp
ID09IHZhcmlhbnQuaXNTZXQoKSk7CisgICAgICAgIG1fdmFyaWFudHMuYXBwZW5kKHZhcmlhbnQp
OworICAgIH0KKworICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sq
LCBTdHViSW5mb01hcCYsIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgsIFVuaXF1ZWRTdHJpbmdJbXBs
KiB1aWQpOworICAgIHN0YXRpYyBJbkJ5SWRTdGF0dXMgY29tcHV0ZUZvcihDb2RlQmxvY2sqIGJh
c2VsaW5lQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBiYXNlbGluZU1h
cCwgU3R1YkluZm9NYXAmIGRmZ01hcCwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVp
ZCk7CisKKyNpZiBFTkFCTEUoREZHX0pJVCkKKyAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1
dGVGb3JTdHViSW5mbyhjb25zdCBDb25jdXJyZW50SlNMb2NrZXImLCBDb2RlQmxvY2sqIGJhc2Vs
aW5lQmxvY2ssIFN0cnVjdHVyZVN0dWJJbmZvKiwgQ29kZU9yaWdpbiwgVW5pcXVlZFN0cmluZ0lt
cGwqIHVpZCk7CisjZW5kaWYKKworICAgIFN0YXRlIHN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9z
dGF0ZTsgfQorCisgICAgYm9vbCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUgIT0gTm9J
bmZvcm1hdGlvbjsgfQorICAgIGV4cGxpY2l0IG9wZXJhdG9yIGJvb2woKSBjb25zdCB7IHJldHVy
biBpc1NldCgpOyB9CisgICAgYm9vbCBpc1NpbXBsZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGUg
PT0gU2ltcGxlOyB9CisKKyAgICBzaXplX3QgbnVtVmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBt
X3ZhcmlhbnRzLnNpemUoKTsgfQorICAgIGNvbnN0IFZlY3RvcjxJbkJ5SWRWYXJpYW50LCAxPiYg
dmFyaWFudHMoKSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzOyB9CisgICAgY29uc3QgSW5CeUlk
VmFyaWFudCYgYXQoc2l6ZV90IGluZGV4KSBjb25zdCB7IHJldHVybiBtX3ZhcmlhbnRzW2luZGV4
XTsgfQorICAgIGNvbnN0IEluQnlJZFZhcmlhbnQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4KSBj
b25zdCB7IHJldHVybiBhdChpbmRleCk7IH0KKworICAgIGJvb2wgdGFrZXNTbG93UGF0aCgpIGNv
bnN0IHsgcmV0dXJuIG1fc3RhdGUgPT0gVGFrZXNTbG93UGF0aDsgfQorCisgICAgLy8gQXR0ZW1w
dHMgdG8gcmVkdWNlIHRoZSBzZXQgb2YgdmFyaWFudHMgdG8gZml0IHRoZSBnaXZlbiBzdHJ1Y3R1
cmUgc2V0LiBUaGlzIG1heSBiZSBhcHByb3hpbWF0ZS4KKyAgICB2b2lkIGZpbHRlcihjb25zdCBT
dHJ1Y3R1cmVTZXQmKTsKKworICAgIHZvaWQgZHVtcChQcmludFN0cmVhbSYpIGNvbnN0OworCitw
cml2YXRlOgorI2lmIEVOQUJMRShERkdfSklUKQorICAgIHN0YXRpYyBib29sIGhhc0V4aXRTaXRl
KENvZGVCbG9jayosIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpOworICAgIHN0YXRpYyBJbkJ5SWRT
dGF0dXMgY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2soY29uc3QgQ29u
Y3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1YkluZm8qLCBVbmlxdWVkU3RyaW5nSW1wbCog
dWlkKTsKKyNlbmRpZgorICAgIGJvb2wgYXBwZW5kVmFyaWFudChjb25zdCBJbkJ5SWRWYXJpYW50
Jik7CisKKyAgICBTdGF0ZSBtX3N0YXRlIHsgTm9JbmZvcm1hdGlvbiB9OworICAgIFZlY3RvcjxJ
bkJ5SWRWYXJpYW50LCAxPiBtX3ZhcmlhbnRzOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5j
cHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjI2YTVkMzMzMjk5MDI0NGFiN2I4MWRjYmY1ZWU1OWI1NjE1MDBiYwotLS0gL2Rl
di9udWxsCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50
LmNwcApAQCAtMCwwICsxLDg1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE4IFl1c3VrZSBT
dXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICogUmVkaXN0cmlidXRpb24gYW5k
IHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2Rp
ZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRp
dGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUg
bXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0
cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dp
bmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1h
dGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZU
V0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5Z
IERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9S
IENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisg
KiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVT
RSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZF
UiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBD
T05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdF
TkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBP
RiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKyNpbmNsdWRlICJJbkJ5SWRW
YXJpYW50LmgiCisKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSA8d3RmL0xpc3RE
dW1wLmg+CisKK25hbWVzcGFjZSBKU0MgeworCitJbkJ5SWRWYXJpYW50OjpJbkJ5SWRWYXJpYW50
KGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0LCBQcm9wZXJ0eU9mZnNldCBvZmZzZXQs
IGNvbnN0IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0JiBjb25kaXRpb25TZXQpCisgICAgOiBt
X3N0cnVjdHVyZVNldChzdHJ1Y3R1cmVTZXQpCisgICAgLCBtX2NvbmRpdGlvblNldChjb25kaXRp
b25TZXQpCisgICAgLCBtX29mZnNldChvZmZzZXQpCit7CisgICAgaWYgKCFzdHJ1Y3R1cmVTZXQu
c2l6ZSgpKSB7CisgICAgICAgIEFTU0VSVChvZmZzZXQgPT0gaW52YWxpZE9mZnNldCk7CisgICAg
ICAgIEFTU0VSVChjb25kaXRpb25TZXQuaXNFbXB0eSgpKTsKKyAgICB9Cit9CisKK2Jvb2wgSW5C
eUlkVmFyaWFudDo6YXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5CeUlkVmFyaWFudCYgb3RoZXIpCit7
CisgICAgaWYgKG1fb2Zmc2V0ICE9IG90aGVyLm1fb2Zmc2V0KQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBpZiAobV9jb25kaXRpb25TZXQuaXNFbXB0eSgpICE9IG90aGVyLm1fY29uZGl0
aW9uU2V0LmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgT2JqZWN0UHJv
cGVydHlDb25kaXRpb25TZXQgbWVyZ2VkQ29uZGl0aW9uU2V0OworICAgIGlmICghbV9jb25kaXRp
b25TZXQuaXNFbXB0eSgpKSB7CisgICAgICAgIG1lcmdlZENvbmRpdGlvblNldCA9IG1fY29uZGl0
aW9uU2V0Lm1lcmdlZFdpdGgob3RoZXIubV9jb25kaXRpb25TZXQpOworICAgICAgICBpZiAoIW1l
cmdlZENvbmRpdGlvblNldC5pc1ZhbGlkKCkgfHwgIW1lcmdlZENvbmRpdGlvblNldC5oYXNPbmVT
bG90QmFzZUNvbmRpdGlvbigpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAg
ICBtX2NvbmRpdGlvblNldCA9IG1lcmdlZENvbmRpdGlvblNldDsKKworICAgIG1fc3RydWN0dXJl
U2V0Lm1lcmdlKG90aGVyLm1fc3RydWN0dXJlU2V0KTsKKworICAgIHJldHVybiB0cnVlOworfQor
Cit2b2lkIEluQnlJZFZhcmlhbnQ6OmR1bXAoUHJpbnRTdHJlYW0mIG91dCkgY29uc3QKK3sKKyAg
ICBkdW1wSW5Db250ZXh0KG91dCwgMCk7Cit9CisKK3ZvaWQgSW5CeUlkVmFyaWFudDo6ZHVtcElu
Q29udGV4dChQcmludFN0cmVhbSYgb3V0LCBEdW1wQ29udGV4dCogY29udGV4dCkgY29uc3QKK3sK
KyAgICBpZiAoIWlzU2V0KCkpIHsKKyAgICAgICAgb3V0LnByaW50KCI8ZW1wdHk+Iik7CisgICAg
ICAgIHJldHVybjsKKyAgICB9CisKKyAgICBvdXQucHJpbnQoCisgICAgICAgICI8IiwgaW5Db250
ZXh0KHN0cnVjdHVyZVNldCgpLCBjb250ZXh0KSwgIiwgIiwgaW5Db250ZXh0KG1fY29uZGl0aW9u
U2V0LCBjb250ZXh0KSk7CisgICAgb3V0LnByaW50KCIsIG9mZnNldCA9ICIsIG9mZnNldCgpKTsK
KyAgICBvdXQucHJpbnQoIj4iKTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKZGlmZiAtLWdp
dCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9JbkJ5SWRWYXJpYW50LmggYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCm5ldyBmaWxlIG1vZGUg
MTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI3
ODk4YTM2ODc4NzE5YzI4YjdmYzkxNmI3M2FjNmY5ZTc2ZjJjNDUKLS0tIC9kZXYvbnVsbAorKysg
Yi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oCkBAIC0wLDAg
KzEsNjkgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFu
ZS50ZWFAZ21haWwuY29tPi4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJj
ZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJl
IHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJl
IG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25z
IGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4g
YmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90
aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVy
IGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3Zp
ZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJ
REVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElF
RCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBM
SUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJ
Q1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBM
RSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJ
UkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElB
TCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5U
IE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgor
ICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQg
T04gQU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJ
Q1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJX
SVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdB
UkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisg
Ki8KKworI3ByYWdtYSBvbmNlCisKKyNpbmNsdWRlICJPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNl
dC5oIgorI2luY2x1ZGUgIlByb3BlcnR5T2Zmc2V0LmgiCisjaW5jbHVkZSAiU3RydWN0dXJlU2V0
LmgiCisKK25hbWVzcGFjZSBKU0MgeworbmFtZXNwYWNlIERPTUpJVCB7CitjbGFzcyBHZXR0ZXJT
ZXR0ZXI7Cit9CisKK2NsYXNzIEluQnlJZFN0YXR1czsKK3N0cnVjdCBEdW1wQ29udGV4dDsKKwor
Y2xhc3MgSW5CeUlkVmFyaWFudCB7CitwdWJsaWM6CisgICAgSW5CeUlkVmFyaWFudChjb25zdCBT
dHJ1Y3R1cmVTZXQmID0gU3RydWN0dXJlU2V0KCksIFByb3BlcnR5T2Zmc2V0ID0gaW52YWxpZE9m
ZnNldCwgY29uc3QgT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQmID0gT2JqZWN0UHJvcGVydHlD
b25kaXRpb25TZXQoKSk7CisKKyAgICBib29sIGlzU2V0KCkgY29uc3QgeyByZXR1cm4gISFtX3N0
cnVjdHVyZVNldC5zaXplKCk7IH0KKyAgICBleHBsaWNpdCBvcGVyYXRvciBib29sKCkgY29uc3Qg
eyByZXR1cm4gaXNTZXQoKTsgfQorICAgIGNvbnN0IFN0cnVjdHVyZVNldCYgc3RydWN0dXJlU2V0
KCkgY29uc3QgeyByZXR1cm4gbV9zdHJ1Y3R1cmVTZXQ7IH0KKyAgICBTdHJ1Y3R1cmVTZXQmIHN0
cnVjdHVyZVNldCgpIHsgcmV0dXJuIG1fc3RydWN0dXJlU2V0OyB9CisKKyAgICAvLyBBIG5vbi1l
bXB0eSBjb25kaXRpb24gc2V0IG1lYW5zIHRoYXQgdGhpcyBpcyBhIHByb3RvdHlwZSBpbi1oaXQv
aW4tbWlzcy4KKyAgICBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRpdGlvblNldCYgY29uZGl0aW9u
U2V0KCkgY29uc3QgeyByZXR1cm4gbV9jb25kaXRpb25TZXQ7IH0KKworICAgIFByb3BlcnR5T2Zm
c2V0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9CisKKyAgICBib29sIGlzSGl0
KCkgY29uc3QgeyByZXR1cm4gb2Zmc2V0KCkgIT0gaW52YWxpZE9mZnNldDsgfQorCisgICAgYm9v
bCBhdHRlbXB0VG9NZXJnZShjb25zdCBJbkJ5SWRWYXJpYW50JiBvdGhlcik7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKyAgICB2b2lkIGR1bXBJbkNvbnRleHQoUHJpbnRT
dHJlYW0mLCBEdW1wQ29udGV4dCopIGNvbnN0OworCitwcml2YXRlOgorICAgIGZyaWVuZCBjbGFz
cyBJbkJ5SWRTdGF0dXM7CisKKyAgICBTdHJ1Y3R1cmVTZXQgbV9zdHJ1Y3R1cmVTZXQ7CisgICAg
T2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQgbV9jb25kaXRpb25TZXQ7CisgICAgUHJvcGVydHlP
ZmZzZXQgbV9vZmZzZXQ7Cit9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oIGIvU291
cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKaW5kZXgg
NTJhYjc2ZTg1NTc0ZmQ2ODg3ZmI2OGY2ZjQ1YzNkYzMwMjlkYjkzNC4uYjQ5ZTRlMjQyZTUyZjA4
MTMxNWU0OGZiMWUxYmNjMjk3ZTUyOGFlMCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKKysrIGIvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL1BvbHlQcm90b0FjY2Vzc0NoYWluLmgKQEAgLTI5LDYgKzI5LDcgQEAK
IAogbmFtZXNwYWNlIEpTQyB7CiAKK2NsYXNzIEpTQ2VsbDsKIGNsYXNzIEpTR2xvYmFsT2JqZWN0
OwogY2xhc3MgSlNPYmplY3Q7CiBjbGFzcyBQcm9wZXJ0eVNsb3Q7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcCBiL1NvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNvZGVQYXJzZXIuY3BwCmluZGV4IGZhMDk3ZjMyYzY2NmVk
M2YzM2ZkYmM0YmJlMzhjMTU0NDJiNGQ2ZTEuLmU1Nzk0ZDI5ZWUxZGMxNTkyMjQzYmQ1MGZjMDg3
NTc0NDgyNjdkNzcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0
ZUNvZGVQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQnl0ZUNv
ZGVQYXJzZXIuY3BwCkBAIC00OCw2ICs0OCw3IEBACiAjaW5jbHVkZSAiRnVuY3Rpb25Db2RlQmxv
Y2suaCIKICNpbmNsdWRlICJHZXRCeUlkU3RhdHVzLmgiCiAjaW5jbHVkZSAiSGVhcC5oIgorI2lu
Y2x1ZGUgIkluQnlJZFN0YXR1cy5oIgogI2luY2x1ZGUgIkluc3RhbmNlT2ZTdGF0dXMuaCIKICNp
bmNsdWRlICJKU0NJbmxpbmVzLmgiCiAjaW5jbHVkZSAiSlNGaXhlZEFycmF5LmgiCkBAIC00ODAx
LDkgKzQ4MDIsMTMgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBs
aW1pdCkKICAgICAgICAgICAgIGlmIChKU09iamVjdCogY29tbW9uUHJvdG90eXBlID0gc3RhdHVz
LmNvbW1vblByb3RvdHlwZSgpKSB7CiAgICAgICAgICAgICAgICAgYWRkVG9HcmFwaChDaGVja0Nl
bGwsIE9wSW5mbyhtX2dyYXBoLmZyZWV6ZShjb21tb25Qcm90b3R5cGUpKSwgcHJvdG90eXBlKTsK
ICAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgICAgICBib29sIGFsbE9LID0gdHJ1ZTsKICAg
ICAgICAgICAgICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hT
dHJ1Y3R1cmVEYXRhLmFkZCgpOwogICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5zdGFuY2VP
ZlZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkgewotICAgICAgICAgICAgICAg
ICAgICBjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKCFjaGVjayh2YXJpYW50LmNvbmRpdGlvblNldCgpKSkgeworICAgICAgICAgICAgICAgICAg
ICAgICAgYWxsT0sgPSBmYWxzZTsKKyAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgIGZvciAoU3RydWN0dXJlKiBz
dHJ1Y3R1cmUgOiB2YXJpYW50LnN0cnVjdHVyZVNldCgpKSB7CiAgICAgICAgICAgICAgICAgICAg
ICAgICBNYXRjaFN0cnVjdHVyZVZhcmlhbnQgbWF0Y2hWYXJpYW50OwogICAgICAgICAgICAgICAg
ICAgICAgICAgbWF0Y2hWYXJpYW50LnN0cnVjdHVyZSA9IG1fZ3JhcGgucmVnaXN0ZXJTdHJ1Y3R1
cmUoc3RydWN0dXJlKTsKQEAgLTQ4MTMsOSArNDgxOCwxMSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2Vy
OjpwYXJzZUJsb2NrKHVuc2lnbmVkIGxpbWl0KQogICAgICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIAotICAgICAgICAgICAgICAgIE5vZGUqIG1h
dGNoID0gYWRkVG9HcmFwaChNYXRjaFN0cnVjdHVyZSwgT3BJbmZvKGRhdGEpLCB2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3QoKSksIG1hdGNo
KTsKLSAgICAgICAgICAgICAgICBORVhUX09QQ09ERShvcF9pbnN0YW5jZW9mKTsKKyAgICAgICAg
ICAgICAgICBpZiAoYWxsT0spIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBh
ZGRUb0dyYXBoKE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIHZhbHVlKTsKKyAgICAgICAg
ICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5kc3QoKSksIG1hdGNoKTsK
KyAgICAgICAgICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5zdGFuY2VvZik7CisgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICAgICAgCiAgICAgICAgICAgICBzZXQo
VmlydHVhbFJlZ2lzdGVyKGJ5dGVjb2RlLmRzdCgpKSwgYWRkVG9HcmFwaChJbnN0YW5jZU9mLCB2
YWx1ZSwgcHJvdG90eXBlKSk7CkBAIC02NDAyLDEwICs2NDA5LDM5IEBAIHZvaWQgQnl0ZUNvZGVQ
YXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgIGNhc2Ugb3BfaW5fYnlf
aWQ6IHsKICAgICAgICAgICAgIE5vZGUqIGJhc2UgPSBnZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJl
bnRJbnN0cnVjdGlvblsyXS51Lm9wZXJhbmQpKTsKICAgICAgICAgICAgIHVuc2lnbmVkIGlkZW50
aWZpZXJOdW1iZXIgPSBtX2lubGluZVN0YWNrVG9wLT5tX2lkZW50aWZpZXJSZW1hcFtjdXJyZW50
SW5zdHJ1Y3Rpb25bM10udS5vcGVyYW5kXTsKLSAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0
ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksCi0gICAgICAgICAgICAgICAgYWRk
VG9HcmFwaChJbkJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwgYmFzZSkpOworICAgICAg
ICAgICAgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCA9IG1fZ3JhcGguaWRlbnRpZmllcnMoKVtpZGVu
dGlmaWVyTnVtYmVyXTsKKworICAgICAgICAgICAgSW5CeUlkU3RhdHVzIHN0YXR1cyA9IEluQnlJ
ZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5t
X3Byb2ZpbGVkQmxvY2ssIG1fZGZnQ29kZUJsb2NrLAorICAgICAgICAgICAgICAgIG1faW5saW5l
U3RhY2tUb3AtPm1fc3R1YkluZm9zLCBtX2RmZ1N0dWJJbmZvcywKKyAgICAgICAgICAgICAgICBj
dXJyZW50Q29kZU9yaWdpbigpLCB1aWQpOworCisgICAgICAgICAgICBpZiAoc3RhdHVzLmlzU2lt
cGxlKCkpIHsKKyAgICAgICAgICAgICAgICBib29sIGFsbE9LID0gdHJ1ZTsKKyAgICAgICAgICAg
ICAgICBNYXRjaFN0cnVjdHVyZURhdGEqIGRhdGEgPSBtX2dyYXBoLm1fbWF0Y2hTdHJ1Y3R1cmVE
YXRhLmFkZCgpOworICAgICAgICAgICAgICAgIGZvciAoY29uc3QgSW5CeUlkVmFyaWFudCYgdmFy
aWFudCA6IHN0YXR1cy52YXJpYW50cygpKSB7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hl
Y2sodmFyaWFudC5jb25kaXRpb25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFs
bE9LID0gZmFsc2U7CisgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJl
IDogdmFyaWFudC5zdHJ1Y3R1cmVTZXQoKSkgeworICAgICAgICAgICAgICAgICAgICAgICAgTWF0
Y2hTdHJ1Y3R1cmVWYXJpYW50IG1hdGNoVmFyaWFudDsKKyAgICAgICAgICAgICAgICAgICAgICAg
IG1hdGNoVmFyaWFudC5zdHJ1Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVj
dHVyZSk7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQucmVzdWx0ID0gdmFy
aWFudC5pc0hpdCgpOworCisgICAgICAgICAgICAgICAgICAgICAgICBkYXRhLT52YXJpYW50cy5h
cHBlbmQobWF0Y2hWYXJpYW50KTsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgICAgIGlmIChhbGxPSykgeworICAgICAgICAgICAgICAgICAg
ICBOb2RlKiBtYXRjaCA9IGFkZFRvR3JhcGgoTWF0Y2hTdHJ1Y3R1cmUsIE9wSW5mbyhkYXRhKSwg
YmFzZSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVnaXN0ZXIoY3VycmVudElu
c3RydWN0aW9uWzFdLnUub3BlcmFuZCksIG1hdGNoKTsKKyAgICAgICAgICAgICAgICAgICAgTkVY
VF9PUENPREUob3BfaW5fYnlfaWQpOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMV0u
dS5vcGVyYW5kKSwgYWRkVG9HcmFwaChJbkJ5SWQsIE9wSW5mbyhpZGVudGlmaWVyTnVtYmVyKSwg
YmFzZSkpOwogICAgICAgICAgICAgTkVYVF9PUENPREUob3BfaW5fYnlfaWQpOwotICAgICAgICAg
ICAgYnJlYWs7CiAgICAgICAgIH0KIAogICAgICAgICBjYXNlIG9wX2dldF9lbnVtZXJhYmxlX2xl
bmd0aDogewpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9DaGFuZ2VMb2cgYi9KU1Rlc3RzL0NoYW5nZUxv
ZwppbmRleCA3MmY5OTU0ZmFkNDc2YjRkM2NkN2MyYTBkZWY1NTQ0ZmNmZTRiNTc3Li4zMTQwZmZl
YzAwZGUyZTM0NWU1OWQ5MzM1YmI2ZTFmOGY1MDEzMmJhIDEwMDY0NAotLS0gYS9KU1Rlc3RzL0No
YW5nZUxvZworKysgYi9KU1Rlc3RzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDIwIEBACisyMDE4LTA1
LTIwICBZdXN1a2UgU3V6dWtpICA8dXRhdGFuZS50ZWFAZ21haWwuY29tPgorCisgICAgICAgIFtE
RkddIEluQnlJZCBzaG91bGQgYmUgY29udmVydGVkIHRvIE1hdGNoU3RydWN0dXJlCisgICAgICAg
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODU4MDMKKworICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIHN0cmVzcy9pbi1ieS1p
ZC1jb25zdGFudC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0
MSk6CisgICAgICAgICogc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanM6IEFkZGVkLgor
ICAgICAgICAoc2hvdWxkQmUpOgorICAgICAgICAodGVzdDEpOgorICAgICAgICAqIHN0cmVzcy9p
bi1ieS1pZC1tYXRjaC5qczogQWRkZWQuCisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0
ZXN0MSk6CisKIDIwMTgtMDUtMTkgIFl1c3VrZSBTdXp1a2kgIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+CiAKICAgICAgICAgW0pTQ10gSlNDIHNob3VsZCBoYXZlIGNvbnNpc3RlbnQgSW5CeUlkIElD
CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1jb25zdGFudC5qcyBiL0pTVGVz
dHMvc3RyZXNzL2luLWJ5LWlkLWNvbnN0YW50LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjkzMTllYTgzYzc2ZDc4
ODRjYjEwYTk4ODdiOWY2Y2U4MDFhZmFkNDMKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9pbi1ieS1pZC1jb25zdGFudC5qcwpAQCAtMCwwICsxLDMzIEBACitmdW5jdGlvbiBzaG91
bGRCZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisg
ICAgICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVu
Y3Rpb24gdGVzdDEob2JqKQoreworICAgIHJldHVybiAiaGVsbG8iIGluIG9iagorfQorbm9Jbmxp
bmUodGVzdDEpOworCitsZXQgYXJyYXkgPSBbCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyCisg
ICAgfSwgdHJ1ZV0sCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyLAorICAgICAgICB3b3JsZDog
NDMKKyAgICB9LCB0cnVlXSwKKyAgICBbeworICAgICAgICBfX3Byb3RvX186IHsKKyAgICAgICAg
ICAgIGhlbGxvOiA0NAorICAgICAgICB9CisgICAgfSwgdHJ1ZV0KK107Citmb3IgKGxldCBpID0g
MDsgaSA8IDFlNTsgKytpKSB7CisgICAgZm9yIChsZXQgW29iaiwgcmVzdWx0XSBvZiBhcnJheSkK
KyAgICAgICAgc2hvdWxkQmUodGVzdDEob2JqKSwgcmVzdWx0KTsKK30KKworLy8gT1NSRXhpdHMu
Citmb3IgKGxldCBpID0gMDsgaSA8IDFlNTsgKytpKQorICAgIHNob3VsZEJlKHRlc3QxKHt9KSwg
ZmFsc2UpOwpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtbWF0Y2gtaW52YWxp
ZC5qcyBiL0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MC4uNTE3NTVlMjEyZWE2ZjBlYjllMGI0ZWFjMGIzYmRmNTBmMTVhOWNjMgotLS0gL2Rldi9udWxs
CisrKyBiL0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMKQEAgLTAsMCAr
MSwzMCBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkgeworICAgIGlmIChh
Y3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoJ2JhZCB2YWx1ZTog
JyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKG9iaikKK3sKKyAgICByZXR1cm4gImhl
bGxvIiBpbiBvYmoKK30KK25vSW5saW5lKHRlc3QxKTsKKworbGV0IG9iamVjdDEgPSB7CisgICAg
aGVsbG86IDQyCit9OworbGV0IG9iamVjdDIgPSB7CisgICAgY29jb2E6IDQ0Cit9OworZm9yIChs
ZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHNob3VsZEJlKHRlc3QxKG9iamVjdDEpLCB0
cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QyKSwgZmFsc2UpOworfQorb2JqZWN0Mi5o
ZWxsbyA9IDQ0OworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAgIHNob3VsZEJl
KHRlc3QxKG9iamVjdDEpLCB0cnVlKTsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QyKSwgdHJ1
ZSk7Cit9CisKKy8vIE9TUkV4aXRzLgorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAg
ICBzaG91bGRCZSh0ZXN0MSh7fSksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL0pTVGVzdHMvc3RyZXNz
L2luLWJ5LWlkLW1hdGNoLmpzIGIvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtbWF0Y2guanMKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMC4uNjJjY2MzMWNjZmUxMGFiYmFmODM1OGE1ZTA5MGRhMTAxNGMzMWMzZgotLS0gL2Rl
di9udWxsCisrKyBiL0pTVGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLmpzCkBAIC0wLDAgKzEs
MzIgQEAKK2Z1bmN0aW9uIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0
dWFsICE9PSBleHBlY3RlZCkKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcg
KyBhY3R1YWwpOworfQorCitmdW5jdGlvbiB0ZXN0MShvYmopCit7CisgICAgcmV0dXJuICJoZWxs
byIgaW4gb2JqCit9Citub0lubGluZSh0ZXN0MSk7CisKK2xldCBhcnJheSA9IFsKKyAgICBbewor
ICAgICAgICBoZWxsbzogNDIKKyAgICB9LCB0cnVlXSwKKyAgICBbeworICAgICAgICB3b3JsZDog
NDMKKyAgICB9LCBmYWxzZV0sCisgICAgW3sKKyAgICAgICAgX19wcm90b19fOiB7CisgICAgICAg
ICAgICBoZWxsbzogNDQKKyAgICAgICAgfQorICAgIH0sIHRydWVdCitdOworZm9yIChsZXQgaSA9
IDA7IGkgPCAxZTU7ICsraSkgeworICAgIGZvciAobGV0IFtvYmosIHJlc3VsdF0gb2YgYXJyYXkp
CisgICAgICAgIHNob3VsZEJlKHRlc3QxKG9iaiksIHJlc3VsdCk7Cit9CisKKy8vIE9TUkV4aXRz
LgorZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkKKyAgICBzaG91bGRCZSh0ZXN0MSh7fSks
IGZhbHNlKTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>341571</attachid>
            <date>2018-05-30 07:36:38 -0700</date>
            <delta_ts>2018-06-01 11:16:22 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-185803-20180530233637.patch</filename>
            <type>text/plain</type>
            <size>39031</size>
            <attacher name="Yusuke Suzuki">ysuzuki</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjMyMjg5CmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA4
YTNjMjM2NGZmZTZmMjg0ZjViMDA5YjgzMWUyMjg0YzBiOGUxMzVhLi5jNDRmOGNlYjE1NDY3NDVh
ZWYyYzZmZjE0MjRkNGU0OGJjMTkyNjllIDEwMDY0NAotLS0gYS9Tb3VyY2UvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEs
MyArMSw1OSBAQAorMjAxOC0wNS0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRhbmUudGVhQGdtYWls
LmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZlcnRlZCB0byBNYXRj
aFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAg
ICAgTWF0Y2hTdHJ1Y3R1cmUgaXMgaW50cm9kdWNlZCBmb3IgaW5zdGFuY2VvZiBvcHRpbWl6YXRp
b24uIEJ1dCB0aGlzIG5vZGUKKyAgICAgICAgaXMgYWxzbyB1c2VmdWwgZm9yIEluQnlJZCBub2Rl
LiBUaGlzIHBhdGNoIGNvbnZlcnRzIEluQnlJZCB0byBNYXRjaFN0cnVjdHVyZQorICAgICAgICBu
b2RlIHdpdGggQ2hlY2tTdHJ1Y3R1cmVzIGlmIHBvc3NpYmxlIGJ5IHVzaW5nIEluQnlJZFN0YXR1
cy4KKworICAgICAgICBBZGRlZCBtaWNyb2JlbmNobWFya3Mgc2hvdyBpbXByb3ZlbWVudHMuCisK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgYmFzZWxpbmUgICAgICAgICAgICAg
ICAgICBwYXRjaGVkCisKKyAgICAgICAgaW4tYnktaWQtcmVtb3ZlZCAgICAgICAxOC4xMTk2Ky0w
LjgxMDggICAgIF4gICAgIDE2LjE3MDIrLTAuOTc3MyAgICAgICAgXiBkZWZpbml0ZWx5IDEuMTIw
NnggZmFzdGVyCisgICAgICAgIGluLWJ5LWlkLW1hdGNoICAgICAgICAgMTYuMzkxMistMC4yNjA4
ICAgICBeICAgICAxNS4yNzM2Ky0wLjgxNzMgICAgICAgIF4gZGVmaW5pdGVseSAxLjA3MzJ4IGZh
c3RlcgorCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
ajoKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRTdGF0
dXMuY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjphcHBlbmRWYXJpYW50
KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yKToKKyAgICAgICAgKEpT
Qzo6SW5CeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZSk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1
czo6Y29tcHV0ZUZvclN0dWJJbmZvKToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpjb21w
dXRlRm9yU3R1YkluZm9XaXRob3V0RXhpdFNpdGVGZWVkYmFjayk6CisgICAgICAgIChKU0M6Oklu
QnlJZFN0YXR1czo6ZmlsdGVyKToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpkdW1wIGNv
bnN0KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRTdGF0dXMuaDogQWRkZWQuCisgICAgICAg
IChKU0M6OkluQnlJZFN0YXR1czo6SW5CeUlkU3RhdHVzKToKKyAgICAgICAgKEpTQzo6SW5CeUlk
U3RhdHVzOjpzdGF0ZSBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFN0YXR1czo6aXNTZXQg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6Om9wZXJhdG9yIGJvb2wgY29uc3Qp
OgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6OmlzU2ltcGxlIGNvbnN0KToKKyAgICAgICAg
KEpTQzo6SW5CeUlkU3RhdHVzOjpudW1WYXJpYW50cyBjb25zdCk6CisgICAgICAgIChKU0M6Oklu
QnlJZFN0YXR1czo6dmFyaWFudHMgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRTdGF0dXM6
OmF0IGNvbnN0KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjpvcGVyYXRvcltdIGNvbnN0
KToKKyAgICAgICAgKEpTQzo6SW5CeUlkU3RhdHVzOjp0YWtlc1Nsb3dQYXRoIGNvbnN0KToKKyAg
ICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6
OkluQnlJZFZhcmlhbnQ6OkluQnlJZFZhcmlhbnQpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJp
YW50OjphdHRlbXB0VG9NZXJnZSk6CisgICAgICAgIChKU0M6OkluQnlJZFZhcmlhbnQ6OmR1bXAg
Y29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpkdW1wSW5Db250ZXh0IGNvbnN0
KToKKyAgICAgICAgKiBieXRlY29kZS9JbkJ5SWRWYXJpYW50Lmg6IEFkZGVkLgorICAgICAgICAo
SlNDOjpJbkJ5SWRWYXJpYW50Ojppc1NldCBjb25zdCk6CisgICAgICAgIChKU0M6OkluQnlJZFZh
cmlhbnQ6Om9wZXJhdG9yIGJvb2wgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50
OjpzdHJ1Y3R1cmVTZXQgY29uc3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpzdHJ1
Y3R1cmVTZXQpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50Ojpjb25kaXRpb25TZXQgY29u
c3QpOgorICAgICAgICAoSlNDOjpJbkJ5SWRWYXJpYW50OjpvZmZzZXQgY29uc3QpOgorICAgICAg
ICAoSlNDOjpJbkJ5SWRWYXJpYW50Ojppc0hpdCBjb25zdCk6CisgICAgICAgICogYnl0ZWNvZGUv
UG9seVByb3RvQWNjZXNzQ2hhaW4uaDoKKyAgICAgICAgKiBkZmcvREZHQnl0ZUNvZGVQYXJzZXIu
Y3BwOgorICAgICAgICAoSlNDOjpERkc6OkJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKToKKwog
MjAxOC0wNS0yOSAgU2FhbSBCYXJhdGkgIDxzYmFyYXRpQGFwcGxlLmNvbT4KIAogICAgICAgICBB
ZGQgYSB2ZXJzaW9uIG9mIEpTVmlydHVhbE1hY2hpbmUgc2hyaW5rRm9vdHByaW50IHRoYXQgcnVu
cyB3aGVuIHRoZSBWTSBnb2VzIGlkbGUKZGlmZiAtLWdpdCBhL1NvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKaW5kZXgg
MjljYmFiNGQzYjA0Yjg4OGUwZWI1ZTE4NDA1NWQ4ZDNiYmQ1NjBkYi4uMTNkYWZiYmQxYmU1YzQ1
ZmQ1ZWFhMTFiYzQxMzliZjgxNzhiNDBmZCAxMDA2NDQKLS0tIGEvU291cmNlL0phdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNl
L0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTE3MDIsNiArMTcwMiw4IEBACiAJCUUzMjhEQUU5MUQzOEQwMDUwMDFBMjUyOSAvKiBCeXRl
Y29kZUdyYXBoLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYg
PSBFM0QyNjQyODFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVHcmFwaC5oICovOyBzZXR0aW5n
cyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCUUzMjhEQUVCMUQzOEQwMDUw
MDFBMjUyOSAvKiBCeXRlY29kZVJld3JpdGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhC
dWlsZEZpbGU7IGZpbGVSZWYgPSBFM0QyNjQyQTFEMzhDMDQyMDAwQkUxNzQgLyogQnl0ZWNvZGVS
ZXdyaXRlci5oICovOyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07
CiAJCUUzMkFCMjQ0MURDRDc1RjQwMEQ3NTMzQSAvKiBNYWNyb0Fzc2VtYmxlckhlbHBlcnMuaCBp
biBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzODBBNzZCMURD
RDcxOTUwMDBGODlFNiAvKiBNYWNyb0Fzc2VtYmxlckhlbHBlcnMuaCAqLzsgc2V0dGluZ3MgPSB7
QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OworCQlFMzMwNUZCMzIwQjBGNzg4MDBDRUI4
MkIgLyogSW5CeUlkU3RhdHVzLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7
IGZpbGVSZWYgPSBFMzMwNUZBRjIwQjBGNzg3MDBDRUI4MkIgLyogSW5CeUlkU3RhdHVzLmggKi87
IH07CisJCUUzMzA1RkI1MjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmggaW4gSGVh
ZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBFMzMwNUZCMTIwQjBGNzg4
MDBDRUI4MkIgLyogSW5CeUlkVmFyaWFudC5oICovOyB9OwogCQlFMzM2MzdBNjFCNjMyMjAyMDBF
RTA4NDAgLyogUmVmbGVjdE9iamVjdC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gRTMzNjM3QTQxQjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3Qu
aCAqLzsgc2V0dGluZ3MgPSB7QVRUUklCVVRFUyA9IChQcml2YXRlLCApOyB9OyB9OwogCQlFMzNC
M0UyNjFCN0FCRDc1MDA0OERCMkUgLyogSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1
dC5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gRTMzQjNF
MjUxQjdBQkQ3NTAwNDhEQjJFIC8qIEluc3BlY3Rvckluc3RydW1lbnRhdGlvbk9iamVjdC5sdXQu
aCAqLzsgfTsKIAkJRTMzRThEMUQxQjkwMTNDMzAwMzQ2QjUyIC8qIEpTTmF0aXZlU3RkRnVuY3Rp
b24uaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IEUzM0U4
RDFCMUI5MDEzQzMwMDM0NkI1MiAvKiBKU05hdGl2ZVN0ZEZ1bmN0aW9uLmggKi87IHNldHRpbmdz
ID0ge0FUVFJJQlVURVMgPSAoUHJpdmF0ZSwgKTsgfTsgfTsKQEAgLTQ1NjgsNiArNDU3MCwxMCBA
QAogCQlFMzI2QzQ5NjFFQ0JFRjU3MDBBOUE5MDUgLyogQ2xhc3NJbmZvLmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IENsYXNzSW5mby5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CiAJCUUzMjgyQkI5MUZFOTMwQTMwMEVEQUY3MSAvKiBZYXJyRXJyb3JDb2Rl
LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgbmFtZSA9IFlhcnJFcnJvckNvZGUu
Y3BwOyBwYXRoID0geWFyci9ZYXJyRXJyb3JDb2RlLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKIAkJRTMyODJCQkExRkU5MzBBNDAwRURBRjcxIC8qIFlhcnJFcnJvckNvZGUuaCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBuYW1lID0gWWFyckVycm9yQ29kZS5oOyBwYXRoID0geWFy
ci9ZYXJyRXJyb3JDb2RlLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMzA1RkFG
MjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRTdGF0dXMuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVm
ZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUu
Yy5oOyBwYXRoID0gSW5CeUlkU3RhdHVzLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJ
CUUzMzA1RkIwMjBCMEY3ODcwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmNwcCAqLyA9IHtpc2Eg
PSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9
IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEluQnlJZFZhcmlhbnQuY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OworCQlFMzMwNUZCMTIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeUlkVmFy
aWFudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJbkJ5SWRWYXJpYW50Lmg7
IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUUzMzA1RkIyMjBCMEY3ODgwMENFQjgyQiAv
KiBJbkJ5SWRTdGF0dXMuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0g
SW5CeUlkU3RhdHVzLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzNjM3QTMx
QjYzMjIwMjAwRUUwODQwIC8qIFJlZmxlY3RPYmplY3QuY3BwICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jcHAuY3BwOyBwYXRoID0gUmVmbGVjdE9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3Vw
PiI7IH07CiAJCUUzMzYzN0E0MUI2MzIyMDIwMEVFMDg0MCAvKiBSZWZsZWN0T2JqZWN0LmggKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFJlZmxlY3RPYmplY3QuaDsgc291cmNlVHJl
ZSA9ICI8Z3JvdXA+IjsgfTsKIAkJRTMzQjNFMjUxQjdBQkQ3NTAwNDhEQjJFIC8qIEluc3BlY3Rv
ckluc3RydW1lbnRhdGlvbk9iamVjdC5sdXQuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNl
OyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBw
YXRoID0gSW5zcGVjdG9ySW5zdHJ1bWVudGF0aW9uT2JqZWN0Lmx1dC5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwpAQCAtNDkxMiw5ICs0OTE4LDkgQEAKIAkJCQkxNEJENTlCRjBBM0U4Rjkw
MDBCQUY1OUMgLyogdGVzdGFwaSAqLywKIAkJCQkwRkVDODVBRDFCREI1Q0YxMDA4MEZGNzQgLyog
dGVzdGIzICovLAogCQkJCUZFNTMzQ0FDMUYyMTdEQjQwMDE2QTFGRSAvKiB0ZXN0bWFzbSAqLywK
KwkJCQk3OTI4MUJEQzIwQjYyQjNFMDAyRTJBNjAgLyogdGVzdG1lbSAqLywKIAkJCQk2NTExMjMw
NTE0MDQ2QTRDMDAyQjEwMUQgLyogdGVzdFJlZ0V4cCAqLywKIAkJCQk5MzJGNUJEOTA4MjJBMUM3
MDA3MzY5NzUgLyogSmF2YVNjcmlwdENvcmUuZnJhbWV3b3JrICovLAotCQkJCTc5MjgxQkRDMjBC
NjJCM0UwMDJFMkE2MCAvKiB0ZXN0bWVtICovLAogCQkJKTsKIAkJCW5hbWUgPSBQcm9kdWN0czsK
IAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC02Mjg2LDggKzYyOTIsOCBAQAogCQk3OUFC
Q0M1NTIwQjc4MTI2MDAzMjNENUYgLyogdGVzdG1lbTIgKi8gPSB7CiAJCQlpc2EgPSBQQlhHcm91
cDsKIAkJCWNoaWxkcmVuID0gKAotCQkJCTc5QUJDQzU2MjBCNzgxMjYwMDMyM0Q1RiAvKiB0ZXN0
bWVtMi5tICovLAogCQkJCTc5QUJDQzU4MjBCNzgxMjYwMDMyM0Q1RiAvKiB0ZXN0bWVtMi4xICov
LAorCQkJCTc5QUJDQzU2MjBCNzgxMjYwMDMyM0Q1RiAvKiB0ZXN0bWVtMi5tICovLAogCQkJKTsK
IAkJCXBhdGggPSB0ZXN0bWVtMjsKIAkJCXNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7CkBAIC03Njc1
LDYgKzc2ODEsMTAgQEAKIAkJCQkxNEFEOTEwODFEQ0E5Mjk0MDAxNEY5RkUgLyogR2xvYmFsQ29k
ZUJsb2NrLmggKi8sCiAJCQkJMEYwQjgzQTgxNEJDRjU1RTAwODg1QjRGIC8qIEhhbmRsZXJJbmZv
LmggKi8sCiAJCQkJMEZCMzk5QkQyMEFGNkIzODAwMTdFMjEzIC8qIElDU3RhdHVzVXRpbHMuaCAq
LywKKwkJCQlFMzMwNUZCMjIwQjBGNzg4MDBDRUI4MkIgLyogSW5CeUlkU3RhdHVzLmNwcCAqLywK
KwkJCQlFMzMwNUZBRjIwQjBGNzg3MDBDRUI4MkIgLyogSW5CeUlkU3RhdHVzLmggKi8sCisJCQkJ
RTMzMDVGQjAyMEIwRjc4NzAwQ0VCODJCIC8qIEluQnlJZFZhcmlhbnQuY3BwICovLAorCQkJCUUz
MzA1RkIxMjBCMEY3ODgwMENFQjgyQiAvKiBJbkJ5SWRWYXJpYW50LmggKi8sCiAJCQkJNzkwNUJC
NjYxRDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5jcHAgKi8sCiAJCQkJNzkwNUJCNjcx
RDEyMDUwRTAwMTlGRTU3IC8qIElubGluZUFjY2Vzcy5oICovLAogCQkJCTE0OEE3QkVEMUI4Mjk3
NUEwMDJEOTE1NyAvKiBJbmxpbmVDYWxsRnJhbWUuY3BwICovLApAQCAtODM2NSw3ICs4Mzc1LDYg
QEAKIAkJCQkwRjRDOTE2NjFDMjlGNEYyMDA0MzQxQTYgLyogQjNPcmlnaW5EdW1wLmggaW4gSGVh
ZGVycyAqLywKIAkJCQkwRkVDODUyNjFCREFDREFDMDA4MEZGNzQgLyogQjNQYXRjaHBvaW50U3Bl
Y2lhbC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZFQzg1MjgxQkRBQ0RBQzAwODBGRjc0IC8qIEIz
UGF0Y2hwb2ludFZhbHVlLmggaW4gSGVhZGVycyAqLywKLQkJCQkwRkQyRkQ5NTIwQjUyQkUyMDBG
MDk0NDEgLyogSXNvU3Vic3BhY2VJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQk3OTlFRjdD
NDFDNTZFRDk2MDAyQjA1MzQgLyogQjNQQ1RvT3JpZ2luTWFwLmggaW4gSGVhZGVycyAqLywKIAkJ
CQkwRkVDODUyQTFCREFDREFDMDA4MEZGNzQgLyogQjNQaGFzZVNjb3BlLmggaW4gSGVhZGVycyAq
LywKIAkJCQkwRjM3MzA4RDFDMEJEMjkxMDAwNTJCRkEgLyogQjNQaGlDaGlsZHJlbi5oIGluIEhl
YWRlcnMgKi8sCkBAIC04NDkzLDYgKzg1MDIsNyBAQAogCQkJCUE3RTVBM0E4MTc5NzQzMkQwMEU4
OTNDMCAvKiBDb21waWxhdGlvblJlc3VsdC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEY0RjExRTgy
MDlCQ0RBQjAwNzA5NjU0IC8qIENvbXBpbGVyVGltaW5nU2NvcGUuaCBpbiBIZWFkZXJzICovLAog
CQkJCTBGRENFMTJBMUZBRkE4NUYwMDZGMzkwMSAvKiBDb21wbGV0ZVN1YnNwYWNlLmggaW4gSGVh
ZGVycyAqLywKKwkJCQkwRkQyRkQ5NDIwQjUyQkRFMDBGMDk0NDEgLyogQ29tcGxldGVTdWJzcGFj
ZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCUJDMThDM0Y0MEUxNkY1Q0QwMEIzNDQ2MCAv
KiBDb21wbGV0aW9uLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRjZGQzc1MTE5NjExMEE4MDBFMUQw
MkQgLyogQ29tcGxleEdldFN0YXR1cy5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZEQjJDRUExNzQ4
OTZDNzAwN0IzQzFCIC8qIENvbmN1cnJlbnRKU0xvY2suaCBpbiBIZWFkZXJzICovLApAQCAtODk5
MCw2ICs5MDAwLDcgQEAKIAkJCQkwRkI0Njc4MDFGRERBNkYxMDAzRkNCMDkgLyogSXNvQ2VsbFNl
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMEZCNDY3ODExRkREQTZGNzAwM0ZDQjA5IC8qIElzb0Nl
bGxTZXRJbmxpbmVzLmggaW4gSGVhZGVycyAqLywKIAkJCQkwRkRDRTEyRDFGQUZCNEU1MDA2RjM5
MDEgLyogSXNvU3Vic3BhY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTBGRDJGRDk1MjBCNTJCRTIw
MEYwOTQ0MSAvKiBJc29TdWJzcGFjZUlubGluZXMuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNUUw
RkU3MjA4NkFENDgwMDk3RjBERSAvKiBJc29TdWJzcGFjZVBlclZNLmggaW4gSGVhZGVycyAqLywK
IAkJCQk4QjlGNkQ1NjFENTkxMkZBMDAxQzczOUYgLyogSXRlcmF0aW9uS2luZC5oIGluIEhlYWRl
cnMgKi8sCiAJCQkJRkU0RDU1QjgxQUU3MTZDQTAwNTJFNDU5IC8qIEl0ZXJhdGlvblN0YXR1cy5o
IGluIEhlYWRlcnMgKi8sCkBAIC05MDAwLDcgKzkwMTEsNiBAQAogCQkJCUJDMThDNDE0MEUxNkY1
Q0QwMEIzNDQ2MCAvKiBKYXZhU2NyaXB0Q29yZS5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQkMxOEM0
MTUwRTE2RjVDRDAwQjM0NDYwIC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggaW4gSGVhZGVycyAq
LywKIAkJCQkxNDI5RDkzMDBFRDIyRDcwMDBCODk2MTkgLyogSklULmggaW4gSGVhZGVycyAqLywK
LQkJCQkwRkQyRkQ5NDIwQjUyQkRFMDBGMDk0NDEgLyogQ29tcGxldGVTdWJzcGFjZUlubGluZXMu
aCBpbiBIZWFkZXJzICovLAogCQkJCUZFMTIyMDI3MUJFN0Y1OEMwMDM5RTZGMiAvKiBKSVRBZGRH
ZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCTBGNzVBMDY2MjAxM0U0RjEwMDM4RTJDRiAv
KiBKSVRBbGxvY2F0b3IuaCBpbiBIZWFkZXJzICovLAogCQkJCUZFM0EwNkIyMUMxMENCODkwMDM5
MEZERCAvKiBKSVRCaXRBbmRHZW5lcmF0b3IuaCBpbiBIZWFkZXJzICovLApkaWZmIC0tZ2l0IGEv
U291cmNlL0phdmFTY3JpcHRDb3JlL1NvdXJjZXMudHh0IGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L1NvdXJjZXMudHh0CmluZGV4IGMwMTFlZTZjNTIzMmNiZTQ2YmNjMDYxNDExYmI3YjZkNDQwMGQy
YTYuLjFkYTFmNzM4MTliYWRlNGFhYmI5YmZhZTg3ZDg4NmVhY2JhNDVjZjkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvSmF2YVNjcmlw
dENvcmUvU291cmNlcy50eHQKQEAgLTIxOSw2ICsyMTksOCBAQCBieXRlY29kZS9GdW5jdGlvbkNv
ZGVCbG9jay5jcHAKIGJ5dGVjb2RlL0dldEJ5SWRTdGF0dXMuY3BwCiBieXRlY29kZS9HZXRCeUlk
VmFyaWFudC5jcHAKIGJ5dGVjb2RlL0dldHRlclNldHRlckFjY2Vzc0Nhc2UuY3BwCitieXRlY29k
ZS9JbkJ5SWRTdGF0dXMuY3BwCitieXRlY29kZS9JbkJ5SWRWYXJpYW50LmNwcAogYnl0ZWNvZGUv
SW5saW5lQWNjZXNzLmNwcAogYnl0ZWNvZGUvSW5saW5lQ2FsbEZyYW1lLmNwcAogYnl0ZWNvZGUv
SW5saW5lQ2FsbEZyYW1lU2V0LmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkU3RhdHVzLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi44YjMxMGZiOTliNDE2YmQ0MWZmNmQyYmVm
N2Q2M2VhYjgxOTM3OTNkCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFN0YXR1cy5jcHAKQEAgLTAsMCArMSwyMzcgQEAKKy8qCisgKiBDb3B5
cmlnaHQgKEMpIDIwMTggWXVzdWtlIFN1enVraSA8dXRhdGFuZS50ZWFAZ21haWwuY29tPi4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2luY2x1ZGUgImNvbmZp
Zy5oIgorI2luY2x1ZGUgIkluQnlJZFN0YXR1cy5oIgorCisjaW5jbHVkZSAiQ29kZUJsb2NrLmgi
CisjaW5jbHVkZSAiQ29tcGxleEdldFN0YXR1cy5oIgorI2luY2x1ZGUgIklDU3RhdHVzVXRpbHMu
aCIKKyNpbmNsdWRlICJKU0NJbmxpbmVzLmgiCisjaW5jbHVkZSAiUG9seW1vcnBoaWNBY2Nlc3Mu
aCIKKyNpbmNsdWRlICJTdHJ1Y3R1cmVTdHViSW5mby5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVt
cC5oPgorCituYW1lc3BhY2UgSlNDIHsKKworYm9vbCBJbkJ5SWRTdGF0dXM6OmFwcGVuZFZhcmlh
bnQoY29uc3QgSW5CeUlkVmFyaWFudCYgdmFyaWFudCkKK3sKKyAgICByZXR1cm4gYXBwZW5kSUNT
dGF0dXNWYXJpYW50KG1fdmFyaWFudHMsIHZhcmlhbnQpOworfQorCitJbkJ5SWRTdGF0dXMgSW5C
eUlkU3RhdHVzOjpjb21wdXRlRm9yKENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3R1YkluZm9N
YXAmIG1hcCwgdW5zaWduZWQgYnl0ZWNvZGVJbmRleCwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCkK
K3sKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7
CisKKyAgICBJbkJ5SWRTdGF0dXMgcmVzdWx0OworCisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
cmVzdWx0ID0gY29tcHV0ZUZvclN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2sobG9ja2Vy
LCBtYXAuZ2V0KENvZGVPcmlnaW4oYnl0ZWNvZGVJbmRleCkpLCB1aWQpOworCisgICAgaWYgKCFy
ZXN1bHQudGFrZXNTbG93UGF0aCgpICYmIGhhc0V4aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGJ5dGVj
b2RlSW5kZXgpKQorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOwor
I2Vsc2UKKyAgICBVTlVTRURfUEFSQU0obWFwKTsKKyNlbmRpZgorCisgICAgcmV0dXJuIHJlc3Vs
dDsKK30KKworSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvcigKKyAgICBDb2Rl
QmxvY2sqIHByb2ZpbGVkQmxvY2ssIENvZGVCbG9jayogZGZnQmxvY2ssIFN0dWJJbmZvTWFwJiBi
YXNlbGluZU1hcCwKKyAgICBTdHViSW5mb01hcCYgZGZnTWFwLCBDb2RlT3JpZ2luIGNvZGVPcmln
aW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpCit7CisjaWYgRU5BQkxFKERGR19KSVQpCisgICAg
aWYgKGRmZ0Jsb2NrKSB7CisgICAgICAgIENhbGxMaW5rU3RhdHVzOjpFeGl0U2l0ZURhdGEgZXhp
dFNpdGVEYXRhOworICAgICAgICB7CisgICAgICAgICAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9j
a2VyKHByb2ZpbGVkQmxvY2stPm1fbG9jayk7CisgICAgICAgICAgICBleGl0U2l0ZURhdGEgPSBD
YWxsTGlua1N0YXR1czo6Y29tcHV0ZUV4aXRTaXRlRGF0YSgKKyAgICAgICAgICAgICAgICBwcm9m
aWxlZEJsb2NrLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgpOworICAgICAgICB9CisKKyAgICAg
ICAgSW5CeUlkU3RhdHVzIHJlc3VsdDsKKyAgICAgICAgeworICAgICAgICAgICAgQ29uY3VycmVu
dEpTTG9ja2VyIGxvY2tlcihkZmdCbG9jay0+bV9sb2NrKTsKKyAgICAgICAgICAgIHJlc3VsdCA9
IGNvbXB1dGVGb3JTdHViSW5mb1dpdGhvdXRFeGl0U2l0ZUZlZWRiYWNrKGxvY2tlciwgZGZnTWFw
LmdldChjb2RlT3JpZ2luKSwgdWlkKTsKKyAgICAgICAgfQorCisgICAgICAgIGlmIChyZXN1bHQu
dGFrZXNTbG93UGF0aCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKworICAgICAgICBp
ZiAoaGFzRXhpdFNpdGUocHJvZmlsZWRCbG9jaywgY29kZU9yaWdpbi5ieXRlY29kZUluZGV4KSkK
KyAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAg
ICAgaWYgKHJlc3VsdC5pc1NldCgpKQorICAgICAgICAgICAgcmV0dXJuIHJlc3VsdDsKKyAgICB9
CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShkZmdCbG9jayk7CisgICAgVU5VU0VEX1BBUkFNKGRm
Z01hcCk7CisjZW5kaWYKKworICAgIHJldHVybiBjb21wdXRlRm9yKHByb2ZpbGVkQmxvY2ssIGJh
c2VsaW5lTWFwLCBjb2RlT3JpZ2luLmJ5dGVjb2RlSW5kZXgsIHVpZCk7Cit9CisKKyNpZiBFTkFC
TEUoREZHX0pJVCkKK2Jvb2wgSW5CeUlkU3RhdHVzOjpoYXNFeGl0U2l0ZShDb2RlQmxvY2sqIHBy
b2ZpbGVkQmxvY2ssIHVuc2lnbmVkIGJ5dGVjb2RlSW5kZXgpCit7CisgICAgVW5saW5rZWRDb2Rl
QmxvY2sqIHVubGlua2VkQ29kZUJsb2NrID0gcHJvZmlsZWRCbG9jay0+dW5saW5rZWRDb2RlQmxv
Y2soKTsKKyAgICBDb25jdXJyZW50SlNMb2NrZXIgbG9ja2VyKHVubGlua2VkQ29kZUJsb2NrLT5t
X2xvY2spOworICAgIHJldHVybiB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2Vy
LCBERkc6OkZyZXF1ZW50RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ2FjaGUpKQorICAgICAg
ICB8fCB1bmxpbmtlZENvZGVCbG9jay0+aGFzRXhpdFNpdGUobG9ja2VyLCBERkc6OkZyZXF1ZW50
RXhpdFNpdGUoYnl0ZWNvZGVJbmRleCwgQmFkQ29uc3RhbnRDYWNoZSkpOworfQorCitJbkJ5SWRT
dGF0dXMgSW5CeUlkU3RhdHVzOjpjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3VycmVudEpT
TG9ja2VyJiBsb2NrZXIsIENvZGVCbG9jayogcHJvZmlsZWRCbG9jaywgU3RydWN0dXJlU3R1Yklu
Zm8qIHN0dWJJbmZvLCBDb2RlT3JpZ2luIGNvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQpCit7CisgICAgSW5CeUlkU3RhdHVzIHJlc3VsdCA9IEluQnlJZFN0YXR1czo6Y29tcHV0ZUZv
clN0dWJJbmZvV2l0aG91dEV4aXRTaXRlRmVlZGJhY2sobG9ja2VyLCBzdHViSW5mbywgdWlkKTsK
KworICAgIGlmICghcmVzdWx0LnRha2VzU2xvd1BhdGgoKSAmJiBJbkJ5SWRTdGF0dXM6Omhhc0V4
aXRTaXRlKHByb2ZpbGVkQmxvY2ssIGNvZGVPcmlnaW4uYnl0ZWNvZGVJbmRleCkpCisgICAgICAg
IHJldHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisgICAgcmV0dXJuIHJlc3VsdDsK
K30KKworSW5CeUlkU3RhdHVzIEluQnlJZFN0YXR1czo6Y29tcHV0ZUZvclN0dWJJbmZvV2l0aG91
dEV4aXRTaXRlRmVlZGJhY2soY29uc3QgQ29uY3VycmVudEpTTG9ja2VyJiwgU3RydWN0dXJlU3R1
YkluZm8qIHN0dWJJbmZvLCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKQoreworICAgIGlmICghc3R1
YkluZm8gfHwgIXN0dWJJbmZvLT5ldmVyQ29uc2lkZXJlZCkKKyAgICAgICAgcmV0dXJuIEluQnlJ
ZFN0YXR1cyhOb0luZm9ybWF0aW9uKTsKKworICAgIGlmIChzdHViSW5mby0+dG9va1Nsb3dQYXRo
KQorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgLy8g
RmluYWxseSBmaWd1cmUgb3V0IGlmIHdlIGNhbiBkZXJpdmUgYW4gYWNjZXNzIHN0cmF0ZWd5Lgor
ICAgIEluQnlJZFN0YXR1cyByZXN1bHQ7CisgICAgcmVzdWx0Lm1fc3RhdGUgPSBTaW1wbGU7Cisg
ICAgc3dpdGNoIChzdHViSW5mby0+Y2FjaGVUeXBlKSB7CisgICAgY2FzZSBDYWNoZVR5cGU6OlVu
c2V0OgorICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKE5vSW5mb3JtYXRpb24pOworCisgICAg
Y2FzZSBDYWNoZVR5cGU6OkluQnlJZFNlbGY6IHsKKyAgICAgICAgU3RydWN0dXJlKiBzdHJ1Y3R1
cmUgPSBzdHViSW5mby0+dS5ieUlkU2VsZi5iYXNlT2JqZWN0U3RydWN0dXJlLmdldCgpOworICAg
ICAgICBpZiAoc3RydWN0dXJlLT50YWtlc1Nsb3dQYXRoSW5ERkdGb3JJbXB1cmVQcm9wZXJ0eSgp
KQorICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICAg
ICAgdW5zaWduZWQgYXR0cmlidXRlczsKKyAgICAgICAgSW5CeUlkVmFyaWFudCB2YXJpYW50Owor
ICAgICAgICB2YXJpYW50Lm1fb2Zmc2V0ID0gc3RydWN0dXJlLT5nZXRDb25jdXJyZW50bHkodWlk
LCBhdHRyaWJ1dGVzKTsKKyAgICAgICAgaWYgKCFpc1ZhbGlkT2Zmc2V0KHZhcmlhbnQubV9vZmZz
ZXQpKQorICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgaWYgKGF0dHJpYnV0ZXMgJiBQcm9wZXJ0eUF0dHJpYnV0ZTo6Q3VzdG9tQWNjZXNzb3Ip
CisgICAgICAgICAgICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAg
ICAgIHZhcmlhbnQubV9zdHJ1Y3R1cmVTZXQuYWRkKHN0cnVjdHVyZSk7CisgICAgICAgIGJvb2wg
ZGlkQXBwZW5kID0gcmVzdWx0LmFwcGVuZFZhcmlhbnQodmFyaWFudCk7CisgICAgICAgIEFTU0VS
VF9VTlVTRUQoZGlkQXBwZW5kLCBkaWRBcHBlbmQpOworICAgICAgICByZXR1cm4gcmVzdWx0Owor
ICAgIH0KKworICAgIGNhc2UgQ2FjaGVUeXBlOjpTdHViOiB7CisgICAgICAgIFBvbHltb3JwaGlj
QWNjZXNzKiBsaXN0ID0gc3R1YkluZm8tPnUuc3R1YjsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBs
aXN0SW5kZXggPSAwOyBsaXN0SW5kZXggPCBsaXN0LT5zaXplKCk7ICsrbGlzdEluZGV4KSB7Cisg
ICAgICAgICAgICBjb25zdCBBY2Nlc3NDYXNlJiBhY2Nlc3MgPSBsaXN0LT5hdChsaXN0SW5kZXgp
OworICAgICAgICAgICAgaWYgKGFjY2Vzcy52aWFQcm94eSgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBJbkJ5SWRTdGF0dXMoVGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIGlmIChhY2Nl
c3MudXNlc1BvbHlQcm90bygpKQorICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMo
VGFrZXNTbG93UGF0aCk7CisKKyAgICAgICAgICAgIFN0cnVjdHVyZSogc3RydWN0dXJlID0gYWNj
ZXNzLnN0cnVjdHVyZSgpOworICAgICAgICAgICAgaWYgKCFzdHJ1Y3R1cmUpIHsKKyAgICAgICAg
ICAgICAgICAvLyBUaGUgbnVsbCBzdHJ1Y3R1cmUgY2FzZXMgYXJpc2UgZHVlIHRvIGFycmF5Lmxl
bmd0aC4gV2UgaGF2ZSBubyB3YXkgb2YgY3JlYXRpbmcgYQorICAgICAgICAgICAgICAgIC8vIElu
QnlJZFZhcmlhbnQgZm9yIHRob3NlLCBhbmQgd2UgZG9uJ3QgcmVhbGx5IGhhdmUgdG8gc2luY2Ug
dGhlIERGRyBoYW5kbGVzIHRob3NlCisgICAgICAgICAgICAgICAgLy8gY2FzZXMgaW4gRml4dXBQ
aGFzZSB1c2luZyB2YWx1ZSBwcm9maWxpbmcuIFRoYXQncyBhIGJpdCBhd2t3YXJkIC0gd2Ugc2hv
dWxkbid0CisgICAgICAgICAgICAgICAgLy8gaGF2ZSB0byB1c2UgdmFsdWUgcHJvZmlsaW5nIHRv
IGRpc2NvdmVyIHNvbWV0aGluZyB0aGF0IHRoZSBBY2Nlc3NDYXNlIGNvdWxkIGhhdmUKKyAgICAg
ICAgICAgICAgICAvLyB0b2xkIHVzLiBCdXQsIGl0IHdvcmtzIHdlbGwgZW5vdWdoLiBTbywgb3Vy
IG9ubHkgY29uY2VybiBoZXJlIGlzIHRvIG5vdAorICAgICAgICAgICAgICAgIC8vIGNyYXNoIG9u
IG51bGwgc3RydWN0dXJlLgorICAgICAgICAgICAgICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoVGFr
ZXNTbG93UGF0aCk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIENvbXBsZXhHZXRTdGF0
dXMgY29tcGxleEdldFN0YXR1cyA9IENvbXBsZXhHZXRTdGF0dXM6OmNvbXB1dGVGb3Ioc3RydWN0
dXJlLCBhY2Nlc3MuY29uZGl0aW9uU2V0KCksIHVpZCk7CisgICAgICAgICAgICBzd2l0Y2ggKGNv
bXBsZXhHZXRTdGF0dXMua2luZCgpKSB7CisgICAgICAgICAgICBjYXNlIENvbXBsZXhHZXRTdGF0
dXM6OlNob3VsZFNraXA6CisgICAgICAgICAgICAgICAgY29udGludWU7CisKKyAgICAgICAgICAg
IGNhc2UgQ29tcGxleEdldFN0YXR1czo6VGFrZXNTbG93UGF0aDoKKyAgICAgICAgICAgICAgICBy
ZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworCisgICAgICAgICAgICBjYXNlIENv
bXBsZXhHZXRTdGF0dXM6OklubGluZWFibGU6IHsKKyAgICAgICAgICAgICAgICBzd2l0Y2ggKGFj
Y2Vzcy50eXBlKCkpIHsKKyAgICAgICAgICAgICAgICBjYXNlIEFjY2Vzc0Nhc2U6OkluSGl0Ogor
ICAgICAgICAgICAgICAgIGNhc2UgQWNjZXNzQ2FzZTo6SW5NaXNzOgorICAgICAgICAgICAgICAg
ICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gSW5CeUlkU3RhdHVzKFRha2VzU2xvd1BhdGgpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIEluQnlJZFZhcmlhbnQgdmFyaWFudCgKKyAgICAgICAgICAgICAg
ICAgICAgU3RydWN0dXJlU2V0KHN0cnVjdHVyZSksIGNvbXBsZXhHZXRTdGF0dXMub2Zmc2V0KCks
CisgICAgICAgICAgICAgICAgICAgIGNvbXBsZXhHZXRTdGF0dXMuY29uZGl0aW9uU2V0KCkpOwor
CisgICAgICAgICAgICAgICAgaWYgKCFyZXN1bHQuYXBwZW5kVmFyaWFudCh2YXJpYW50KSkKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0KKyAgICAg
ICAgfQorCisgICAgICAgIHJldHVybiByZXN1bHQ7CisgICAgfQorCisgICAgZGVmYXVsdDoKKyAg
ICAgICAgcmV0dXJuIEluQnlJZFN0YXR1cyhUYWtlc1Nsb3dQYXRoKTsKKyAgICB9CisKKyAgICBS
RUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIHJldHVybiBJbkJ5SWRTdGF0dXMoKTsK
K30KKyNlbmRpZgorCit2b2lkIEluQnlJZFN0YXR1czo6ZmlsdGVyKGNvbnN0IFN0cnVjdHVyZVNl
dCYgc3RydWN0dXJlU2V0KQoreworICAgIGlmIChtX3N0YXRlICE9IFNpbXBsZSkKKyAgICAgICAg
cmV0dXJuOworICAgIGZpbHRlcklDU3RhdHVzVmFyaWFudHMobV92YXJpYW50cywgc3RydWN0dXJl
U2V0KTsKKyAgICBpZiAobV92YXJpYW50cy5pc0VtcHR5KCkpCisgICAgICAgIG1fc3RhdGUgPSBO
b0luZm9ybWF0aW9uOworfQorCit2b2lkIEluQnlJZFN0YXR1czo6ZHVtcChQcmludFN0cmVhbSYg
b3V0KSBjb25zdAoreworICAgIG91dC5wcmludCgiKCIpOworICAgIHN3aXRjaCAobV9zdGF0ZSkg
eworICAgIGNhc2UgTm9JbmZvcm1hdGlvbjoKKyAgICAgICAgb3V0LnByaW50KCJOb0luZm9ybWF0
aW9uIik7CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgU2ltcGxlOgorICAgICAgICBvdXQucHJp
bnQoIlNpbXBsZSIpOworICAgICAgICBicmVhazsKKyAgICBjYXNlIFRha2VzU2xvd1BhdGg6Cisg
ICAgICAgIG91dC5wcmludCgiVGFrZXNTbG93UGF0aCIpOworICAgICAgICBicmVhazsKKyAgICB9
CisgICAgb3V0LnByaW50KCIsICIsIGxpc3REdW1wKG1fdmFyaWFudHMpLCAiKSIpOworfQorCit9
IC8vIG5hbWVzcGFjZSBKU0MKKwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFN0YXR1cy5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0lu
QnlJZFN0YXR1cy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjY2MTVkZmNkZjhmNGNiMTYwN2ViNDE0NTA4ZDA1MWY1
ZDdlZjgwMTgKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvSW5CeUlkU3RhdHVzLmgKQEAgLTAsMCArMSw5OCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5jb20+LgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUg
IkNhbGxMaW5rU3RhdHVzLmgiCisjaW5jbHVkZSAiQ29kZU9yaWdpbi5oIgorI2luY2x1ZGUgIkNv
bmN1cnJlbnRKU0xvY2suaCIKKyNpbmNsdWRlICJJbkJ5SWRWYXJpYW50LmgiCisKK25hbWVzcGFj
ZSBKU0MgeworCitjbGFzcyBBY2Nlc3NDYXNlOworY2xhc3MgQ29kZUJsb2NrOworY2xhc3MgU3Ry
dWN0dXJlU3R1YkluZm87CisKK3R5cGVkZWYgSGFzaE1hcDxDb2RlT3JpZ2luLCBTdHJ1Y3R1cmVT
dHViSW5mbyosIENvZGVPcmlnaW5BcHByb3hpbWF0ZUhhc2g+IFN0dWJJbmZvTWFwOworCitjbGFz
cyBJbkJ5SWRTdGF0dXMgeworcHVibGljOgorICAgIGVudW0gU3RhdGUgeworICAgICAgICAvLyBJ
dCdzIHVuY2FjaGVkIHNvIHdlIGhhdmUgbm8gaW5mb3JtYXRpb24uCisgICAgICAgIE5vSW5mb3Jt
YXRpb24sCisgICAgICAgIC8vIEl0J3MgY2FjaGVkIGZvciBhIHNpbXBsZSBhY2Nlc3MgdG8gYSBr
bm93biBvYmplY3QgcHJvcGVydHkgd2l0aAorICAgICAgICAvLyBhIHBvc3NpYmxlIHN0cnVjdHVy
ZSBjaGFpbiBhbmQgYSBwb3NzaWJsZSBzcGVjaWZpYyB2YWx1ZS4KKyAgICAgICAgU2ltcGxlLAor
ICAgICAgICAvLyBJdCdzIGtub3duIHRvIG9mdGVuIHRha2Ugc2xvdyBwYXRoLgorICAgICAgICBU
YWtlc1Nsb3dQYXRoLAorICAgIH07CisKKyAgICBJbkJ5SWRTdGF0dXMoKSA9IGRlZmF1bHQ7CisK
KyAgICBJbkJ5SWRTdGF0dXMoU3RhdGUgc3RhdGUsIGNvbnN0IEluQnlJZFZhcmlhbnQmIHZhcmlh
bnQgPSBJbkJ5SWRWYXJpYW50KCkpCisgICAgICAgIDogbV9zdGF0ZShzdGF0ZSkKKyAgICB7Cisg
ICAgICAgIEFTU0VSVCgoc3RhdGUgPT0gU2ltcGxlKSA9PSB2YXJpYW50LmlzU2V0KCkpOworICAg
ICAgICBtX3ZhcmlhbnRzLmFwcGVuZCh2YXJpYW50KTsKKyAgICB9CisKKyAgICBzdGF0aWMgSW5C
eUlkU3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiwgU3R1YkluZm9NYXAmLCB1bnNpZ25lZCBi
eXRlY29kZUluZGV4LCBVbmlxdWVkU3RyaW5nSW1wbCogdWlkKTsKKyAgICBzdGF0aWMgSW5CeUlk
U3RhdHVzIGNvbXB1dGVGb3IoQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBDb2RlQmxvY2sqIGRm
Z0Jsb2NrLCBTdHViSW5mb01hcCYgYmFzZWxpbmVNYXAsIFN0dWJJbmZvTWFwJiBkZmdNYXAsIENv
ZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworCisjaWYgRU5BQkxFKERGR19KSVQp
CisgICAgc3RhdGljIEluQnlJZFN0YXR1cyBjb21wdXRlRm9yU3R1YkluZm8oY29uc3QgQ29uY3Vy
cmVudEpTTG9ja2VyJiwgQ29kZUJsb2NrKiBiYXNlbGluZUJsb2NrLCBTdHJ1Y3R1cmVTdHViSW5m
byosIENvZGVPcmlnaW4sIFVuaXF1ZWRTdHJpbmdJbXBsKiB1aWQpOworI2VuZGlmCisKKyAgICBT
dGF0ZSBzdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc3RhdGU7IH0KKworICAgIGJvb2wgaXNTZXQo
KSBjb25zdCB7IHJldHVybiBtX3N0YXRlICE9IE5vSW5mb3JtYXRpb247IH0KKyAgICBleHBsaWNp
dCBvcGVyYXRvciBib29sKCkgY29uc3QgeyByZXR1cm4gaXNTZXQoKTsgfQorICAgIGJvb2wgaXNT
aW1wbGUoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFNpbXBsZTsgfQorCisgICAgc2l6ZV90
IG51bVZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4gbV92YXJpYW50cy5zaXplKCk7IH0KKyAgICBj
b25zdCBWZWN0b3I8SW5CeUlkVmFyaWFudCwgMT4mIHZhcmlhbnRzKCkgY29uc3QgeyByZXR1cm4g
bV92YXJpYW50czsgfQorICAgIGNvbnN0IEluQnlJZFZhcmlhbnQmIGF0KHNpemVfdCBpbmRleCkg
Y29uc3QgeyByZXR1cm4gbV92YXJpYW50c1tpbmRleF07IH0KKyAgICBjb25zdCBJbkJ5SWRWYXJp
YW50JiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkgY29uc3QgeyByZXR1cm4gYXQoaW5kZXgpOyB9
CisKKyAgICBib29sIHRha2VzU2xvd1BhdGgoKSBjb25zdCB7IHJldHVybiBtX3N0YXRlID09IFRh
a2VzU2xvd1BhdGg7IH0KKworICAgIC8vIEF0dGVtcHRzIHRvIHJlZHVjZSB0aGUgc2V0IG9mIHZh
cmlhbnRzIHRvIGZpdCB0aGUgZ2l2ZW4gc3RydWN0dXJlIHNldC4gVGhpcyBtYXkgYmUgYXBwcm94
aW1hdGUuCisgICAgdm9pZCBmaWx0ZXIoY29uc3QgU3RydWN0dXJlU2V0Jik7CisKKyAgICB2b2lk
IGR1bXAoUHJpbnRTdHJlYW0mKSBjb25zdDsKKworcHJpdmF0ZToKKyNpZiBFTkFCTEUoREZHX0pJ
VCkKKyAgICBzdGF0aWMgYm9vbCBoYXNFeGl0U2l0ZShDb2RlQmxvY2sqLCB1bnNpZ25lZCBieXRl
Y29kZUluZGV4KTsKKyAgICBzdGF0aWMgSW5CeUlkU3RhdHVzIGNvbXB1dGVGb3JTdHViSW5mb1dp
dGhvdXRFeGl0U2l0ZUZlZWRiYWNrKGNvbnN0IENvbmN1cnJlbnRKU0xvY2tlciYsIFN0cnVjdHVy
ZVN0dWJJbmZvKiwgVW5pcXVlZFN0cmluZ0ltcGwqIHVpZCk7CisjZW5kaWYKKyAgICBib29sIGFw
cGVuZFZhcmlhbnQoY29uc3QgSW5CeUlkVmFyaWFudCYpOworCisgICAgU3RhdGUgbV9zdGF0ZSB7
IE5vSW5mb3JtYXRpb24gfTsKKyAgICBWZWN0b3I8SW5CeUlkVmFyaWFudCwgMT4gbV92YXJpYW50
czsKK307CisKK30gLy8gbmFtZXNwYWNlIEpTQwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwIGIvU291cmNlL0phdmFTY3JpcHRDb3Jl
L2J5dGVjb2RlL0luQnlJZFZhcmlhbnQuY3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyNmE1ZDMzMzI5OTAyNDRh
YjdiODFkY2JmNWVlNTliNTYxNTAwYmMKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvSW5CeUlkVmFyaWFudC5jcHAKQEAgLTAsMCArMSw4NSBAQAorLyoK
KyAqIENvcHlyaWdodCAoQykgMjAxOCBZdXN1a2UgU3V6dWtpIDx1dGF0YW5lLnRlYUBnbWFpbC5j
b20+LgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkg
Zm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHBy
b3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4g
UmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xs
b3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBt
dXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUg
ZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUg
SU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMs
IElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElF
UyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVS
UE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAq
IENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVU
RSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBP
UiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZ
CisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFks
IE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcg
SU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVk
ZSAiY29uZmlnLmgiCisjaW5jbHVkZSAiSW5CeUlkVmFyaWFudC5oIgorCisjaW5jbHVkZSAiSlND
SW5saW5lcy5oIgorI2luY2x1ZGUgPHd0Zi9MaXN0RHVtcC5oPgorCituYW1lc3BhY2UgSlNDIHsK
KworSW5CeUlkVmFyaWFudDo6SW5CeUlkVmFyaWFudChjb25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVj
dHVyZVNldCwgUHJvcGVydHlPZmZzZXQgb2Zmc2V0LCBjb25zdCBPYmplY3RQcm9wZXJ0eUNvbmRp
dGlvblNldCYgY29uZGl0aW9uU2V0KQorICAgIDogbV9zdHJ1Y3R1cmVTZXQoc3RydWN0dXJlU2V0
KQorICAgICwgbV9jb25kaXRpb25TZXQoY29uZGl0aW9uU2V0KQorICAgICwgbV9vZmZzZXQob2Zm
c2V0KQoreworICAgIGlmICghc3RydWN0dXJlU2V0LnNpemUoKSkgeworICAgICAgICBBU1NFUlQo
b2Zmc2V0ID09IGludmFsaWRPZmZzZXQpOworICAgICAgICBBU1NFUlQoY29uZGl0aW9uU2V0Lmlz
RW1wdHkoKSk7CisgICAgfQorfQorCitib29sIEluQnlJZFZhcmlhbnQ6OmF0dGVtcHRUb01lcmdl
KGNvbnN0IEluQnlJZFZhcmlhbnQmIG90aGVyKQoreworICAgIGlmIChtX29mZnNldCAhPSBvdGhl
ci5tX29mZnNldCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgaWYgKG1fY29uZGl0aW9u
U2V0LmlzRW1wdHkoKSAhPSBvdGhlci5tX2NvbmRpdGlvblNldC5pc0VtcHR5KCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0IG1lcmdlZENv
bmRpdGlvblNldDsKKyAgICBpZiAoIW1fY29uZGl0aW9uU2V0LmlzRW1wdHkoKSkgeworICAgICAg
ICBtZXJnZWRDb25kaXRpb25TZXQgPSBtX2NvbmRpdGlvblNldC5tZXJnZWRXaXRoKG90aGVyLm1f
Y29uZGl0aW9uU2V0KTsKKyAgICAgICAgaWYgKCFtZXJnZWRDb25kaXRpb25TZXQuaXNWYWxpZCgp
IHx8ICFtZXJnZWRDb25kaXRpb25TZXQuaGFzT25lU2xvdEJhc2VDb25kaXRpb24oKSkKKyAgICAg
ICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisgICAgbV9jb25kaXRpb25TZXQgPSBtZXJnZWRD
b25kaXRpb25TZXQ7CisKKyAgICBtX3N0cnVjdHVyZVNldC5tZXJnZShvdGhlci5tX3N0cnVjdHVy
ZVNldCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKK30KKwordm9pZCBJbkJ5SWRWYXJpYW50OjpkdW1w
KFByaW50U3RyZWFtJiBvdXQpIGNvbnN0Cit7CisgICAgZHVtcEluQ29udGV4dChvdXQsIDApOwor
fQorCit2b2lkIEluQnlJZFZhcmlhbnQ6OmR1bXBJbkNvbnRleHQoUHJpbnRTdHJlYW0mIG91dCwg
RHVtcENvbnRleHQqIGNvbnRleHQpIGNvbnN0Cit7CisgICAgaWYgKCFpc1NldCgpKSB7CisgICAg
ICAgIG91dC5wcmludCgiPGVtcHR5PiIpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
b3V0LnByaW50KAorICAgICAgICAiPCIsIGluQ29udGV4dChzdHJ1Y3R1cmVTZXQoKSwgY29udGV4
dCksICIsICIsIGluQ29udGV4dChtX2NvbmRpdGlvblNldCwgY29udGV4dCkpOworICAgIG91dC5w
cmludCgiLCBvZmZzZXQgPSAiLCBvZmZzZXQoKSk7CisgICAgb3V0LnByaW50KCI+Iik7Cit9CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUv
Ynl0ZWNvZGUvSW5CeUlkVmFyaWFudC5oIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5dGVjb2Rl
L0luQnlJZFZhcmlhbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNzg5OGEzNjg3ODcxOWMyOGI3ZmM5MTZiNzNh
YzZmOWU3NmYyYzQ1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0luQnlJZFZhcmlhbnQuaApAQCAtMCwwICsxLDY5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSAyMDE4IFl1c3VrZSBTdXp1a2kgPHV0YXRhbmUudGVhQGdtYWlsLmNvbT4uCisgKgorICog
UmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBv
ciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0
aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAxLiBSZWRpc3RyaWJ1dGlv
bnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNl
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgIGRvY3VtZW50YXRp
b24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24u
CisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBJTkMuIGBgQVMgSVMn
JyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVND
TEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JT
IEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUws
CisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNF
UlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5j
bHVkZSAiT2JqZWN0UHJvcGVydHlDb25kaXRpb25TZXQuaCIKKyNpbmNsdWRlICJQcm9wZXJ0eU9m
ZnNldC5oIgorI2luY2x1ZGUgIlN0cnVjdHVyZVNldC5oIgorCituYW1lc3BhY2UgSlNDIHsKK25h
bWVzcGFjZSBET01KSVQgeworY2xhc3MgR2V0dGVyU2V0dGVyOworfQorCitjbGFzcyBJbkJ5SWRT
dGF0dXM7CitzdHJ1Y3QgRHVtcENvbnRleHQ7CisKK2NsYXNzIEluQnlJZFZhcmlhbnQgeworcHVi
bGljOgorICAgIEluQnlJZFZhcmlhbnQoY29uc3QgU3RydWN0dXJlU2V0JiA9IFN0cnVjdHVyZVNl
dCgpLCBQcm9wZXJ0eU9mZnNldCA9IGludmFsaWRPZmZzZXQsIGNvbnN0IE9iamVjdFByb3BlcnR5
Q29uZGl0aW9uU2V0JiA9IE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0KCkpOworCisgICAgYm9v
bCBpc1NldCgpIGNvbnN0IHsgcmV0dXJuICEhbV9zdHJ1Y3R1cmVTZXQuc2l6ZSgpOyB9CisgICAg
ZXhwbGljaXQgb3BlcmF0b3IgYm9vbCgpIGNvbnN0IHsgcmV0dXJuIGlzU2V0KCk7IH0KKyAgICBj
b25zdCBTdHJ1Y3R1cmVTZXQmIHN0cnVjdHVyZVNldCgpIGNvbnN0IHsgcmV0dXJuIG1fc3RydWN0
dXJlU2V0OyB9CisgICAgU3RydWN0dXJlU2V0JiBzdHJ1Y3R1cmVTZXQoKSB7IHJldHVybiBtX3N0
cnVjdHVyZVNldDsgfQorCisgICAgLy8gQSBub24tZW1wdHkgY29uZGl0aW9uIHNldCBtZWFucyB0
aGF0IHRoaXMgaXMgYSBwcm90b3R5cGUgaW4taGl0L2luLW1pc3MuCisgICAgY29uc3QgT2JqZWN0
UHJvcGVydHlDb25kaXRpb25TZXQmIGNvbmRpdGlvblNldCgpIGNvbnN0IHsgcmV0dXJuIG1fY29u
ZGl0aW9uU2V0OyB9CisKKyAgICBQcm9wZXJ0eU9mZnNldCBvZmZzZXQoKSBjb25zdCB7IHJldHVy
biBtX29mZnNldDsgfQorCisgICAgYm9vbCBpc0hpdCgpIGNvbnN0IHsgcmV0dXJuIG9mZnNldCgp
ICE9IGludmFsaWRPZmZzZXQ7IH0KKworICAgIGJvb2wgYXR0ZW1wdFRvTWVyZ2UoY29uc3QgSW5C
eUlkVmFyaWFudCYgb3RoZXIpOworCisgICAgdm9pZCBkdW1wKFByaW50U3RyZWFtJikgY29uc3Q7
CisgICAgdm9pZCBkdW1wSW5Db250ZXh0KFByaW50U3RyZWFtJiwgRHVtcENvbnRleHQqKSBjb25z
dDsKKworcHJpdmF0ZToKKyAgICBmcmllbmQgY2xhc3MgSW5CeUlkU3RhdHVzOworCisgICAgU3Ry
dWN0dXJlU2V0IG1fc3RydWN0dXJlU2V0OworICAgIE9iamVjdFByb3BlcnR5Q29uZGl0aW9uU2V0
IG1fY29uZGl0aW9uU2V0OworICAgIFByb3BlcnR5T2Zmc2V0IG1fb2Zmc2V0OworfTsKKworfSAv
LyBuYW1lc3BhY2UgSlNDCmRpZmYgLS1naXQgYS9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvUG9seVByb3RvQWNjZXNzQ2hhaW4uaCBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29k
ZS9Qb2x5UHJvdG9BY2Nlc3NDaGFpbi5oCmluZGV4IDUyYWI3NmU4NTU3NGZkNjg4N2ZiNjhmNmY0
NWMzZGMzMDI5ZGI5MzQuLmI0OWU0ZTI0MmU1MmYwODEzMTVlNDhmYjFlMWJjYzI5N2U1MjhhZTAg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9BY2Nl
c3NDaGFpbi5oCisrKyBiL1NvdXJjZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Qb2x5UHJvdG9B
Y2Nlc3NDaGFpbi5oCkBAIC0yOSw2ICsyOSw3IEBACiAKIG5hbWVzcGFjZSBKU0MgewogCitjbGFz
cyBKU0NlbGw7CiBjbGFzcyBKU0dsb2JhbE9iamVjdDsKIGNsYXNzIEpTT2JqZWN0OwogY2xhc3Mg
UHJvcGVydHlTbG90OwpkaWZmIC0tZ2l0IGEvU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdC
eXRlQ29kZVBhcnNlci5jcHAgYi9Tb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2Rl
UGFyc2VyLmNwcAppbmRleCA3NDQyYjgxNTcwN2I4MzdiODE2YmE4YWE5NmVlYjc2NmE4MjQ1Y2E0
Li4zYzhhMTM5NjhlM2JlNmZmM2M3ZmRhOGJlMGI0ZTk1Y2ZkYzMzMmEyIDEwMDY0NAotLS0gYS9T
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcAorKysgYi9Tb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0J5dGVDb2RlUGFyc2VyLmNwcApAQCAtNDgsNiArNDgs
NyBAQAogI2luY2x1ZGUgIkZ1bmN0aW9uQ29kZUJsb2NrLmgiCiAjaW5jbHVkZSAiR2V0QnlJZFN0
YXR1cy5oIgogI2luY2x1ZGUgIkhlYXAuaCIKKyNpbmNsdWRlICJJbkJ5SWRTdGF0dXMuaCIKICNp
bmNsdWRlICJJbnN0YW5jZU9mU3RhdHVzLmgiCiAjaW5jbHVkZSAiSlNDSW5saW5lcy5oIgogI2lu
Y2x1ZGUgIkpTRml4ZWRBcnJheS5oIgpAQCAtNDgxMCw5ICs0ODExLDEzIEBAIHZvaWQgQnl0ZUNv
ZGVQYXJzZXI6OnBhcnNlQmxvY2sodW5zaWduZWQgbGltaXQpCiAgICAgICAgICAgICBpZiAoSlNP
YmplY3QqIGNvbW1vblByb3RvdHlwZSA9IHN0YXR1cy5jb21tb25Qcm90b3R5cGUoKSkgewogICAg
ICAgICAgICAgICAgIGFkZFRvR3JhcGgoQ2hlY2tDZWxsLCBPcEluZm8obV9ncmFwaC5mcmVlemUo
Y29tbW9uUHJvdG90eXBlKSksIHByb3RvdHlwZSk7CiAgICAgICAgICAgICAgICAgCisgICAgICAg
ICAgICAgICAgYm9vbCBhbGxPSyA9IHRydWU7CiAgICAgICAgICAgICAgICAgTWF0Y2hTdHJ1Y3R1
cmVEYXRhKiBkYXRhID0gbV9ncmFwaC5tX21hdGNoU3RydWN0dXJlRGF0YS5hZGQoKTsKICAgICAg
ICAgICAgICAgICBmb3IgKGNvbnN0IEluc3RhbmNlT2ZWYXJpYW50JiB2YXJpYW50IDogc3RhdHVz
LnZhcmlhbnRzKCkpIHsKLSAgICAgICAgICAgICAgICAgICAgY2hlY2sodmFyaWFudC5jb25kaXRp
b25TZXQoKSk7CisgICAgICAgICAgICAgICAgICAgIGlmICghY2hlY2sodmFyaWFudC5jb25kaXRp
b25TZXQoKSkpIHsKKyAgICAgICAgICAgICAgICAgICAgICAgIGFsbE9LID0gZmFsc2U7CisgICAg
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAgICAgfQogICAgICAg
ICAgICAgICAgICAgICBmb3IgKFN0cnVjdHVyZSogc3RydWN0dXJlIDogdmFyaWFudC5zdHJ1Y3R1
cmVTZXQoKSkgewogICAgICAgICAgICAgICAgICAgICAgICAgTWF0Y2hTdHJ1Y3R1cmVWYXJpYW50
IG1hdGNoVmFyaWFudDsKICAgICAgICAgICAgICAgICAgICAgICAgIG1hdGNoVmFyaWFudC5zdHJ1
Y3R1cmUgPSBtX2dyYXBoLnJlZ2lzdGVyU3RydWN0dXJlKHN0cnVjdHVyZSk7CkBAIC00ODIyLDkg
KzQ4MjcsMTEgQEAgdm9pZCBCeXRlQ29kZVBhcnNlcjo6cGFyc2VCbG9jayh1bnNpZ25lZCBsaW1p
dCkKICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAg
ICAgICAKLSAgICAgICAgICAgICAgICBOb2RlKiBtYXRjaCA9IGFkZFRvR3JhcGgoTWF0Y2hTdHJ1
Y3R1cmUsIE9wSW5mbyhkYXRhKSwgdmFsdWUpOwotICAgICAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoYnl0ZWNvZGUuZHN0KCkpLCBtYXRjaCk7Ci0gICAgICAgICAgICAgICAgTkVYVF9P
UENPREUob3BfaW5zdGFuY2VvZik7CisgICAgICAgICAgICAgICAgaWYgKGFsbE9LKSB7CisgICAg
ICAgICAgICAgICAgICAgIE5vZGUqIG1hdGNoID0gYWRkVG9HcmFwaChNYXRjaFN0cnVjdHVyZSwg
T3BJbmZvKGRhdGEpLCB2YWx1ZSk7CisgICAgICAgICAgICAgICAgICAgIHNldChWaXJ0dWFsUmVn
aXN0ZXIoYnl0ZWNvZGUuZHN0KCkpLCBtYXRjaCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2luc3RhbmNlb2YpOworICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0K
ICAgICAgICAgICAgIAogICAgICAgICAgICAgc2V0KFZpcnR1YWxSZWdpc3RlcihieXRlY29kZS5k
c3QoKSksIGFkZFRvR3JhcGgoSW5zdGFuY2VPZiwgdmFsdWUsIHByb3RvdHlwZSkpOwpAQCAtNjQy
OCwxMCArNjQzNSwzOSBAQCB2b2lkIEJ5dGVDb2RlUGFyc2VyOjpwYXJzZUJsb2NrKHVuc2lnbmVk
IGxpbWl0KQogICAgICAgICBjYXNlIG9wX2luX2J5X2lkOiB7CiAgICAgICAgICAgICBOb2RlKiBi
YXNlID0gZ2V0KFZpcnR1YWxSZWdpc3RlcihjdXJyZW50SW5zdHJ1Y3Rpb25bMl0udS5vcGVyYW5k
KSk7CiAgICAgICAgICAgICB1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyID0gbV9pbmxpbmVTdGFj
a1RvcC0+bV9pZGVudGlmaWVyUmVtYXBbY3VycmVudEluc3RydWN0aW9uWzNdLnUub3BlcmFuZF07
Ci0gICAgICAgICAgICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51
Lm9wZXJhbmQpLAotICAgICAgICAgICAgICAgIGFkZFRvR3JhcGgoSW5CeUlkLCBPcEluZm8oaWRl
bnRpZmllck51bWJlciksIGJhc2UpKTsKKyAgICAgICAgICAgIFVuaXF1ZWRTdHJpbmdJbXBsKiB1
aWQgPSBtX2dyYXBoLmlkZW50aWZpZXJzKClbaWRlbnRpZmllck51bWJlcl07CisKKyAgICAgICAg
ICAgIEluQnlJZFN0YXR1cyBzdGF0dXMgPSBJbkJ5SWRTdGF0dXM6OmNvbXB1dGVGb3IoCisgICAg
ICAgICAgICAgICAgbV9pbmxpbmVTdGFja1RvcC0+bV9wcm9maWxlZEJsb2NrLCBtX2RmZ0NvZGVC
bG9jaywKKyAgICAgICAgICAgICAgICBtX2lubGluZVN0YWNrVG9wLT5tX3N0dWJJbmZvcywgbV9k
ZmdTdHViSW5mb3MsCisgICAgICAgICAgICAgICAgY3VycmVudENvZGVPcmlnaW4oKSwgdWlkKTsK
KworICAgICAgICAgICAgaWYgKHN0YXR1cy5pc1NpbXBsZSgpKSB7CisgICAgICAgICAgICAgICAg
Ym9vbCBhbGxPSyA9IHRydWU7CisgICAgICAgICAgICAgICAgTWF0Y2hTdHJ1Y3R1cmVEYXRhKiBk
YXRhID0gbV9ncmFwaC5tX21hdGNoU3RydWN0dXJlRGF0YS5hZGQoKTsKKyAgICAgICAgICAgICAg
ICBmb3IgKGNvbnN0IEluQnlJZFZhcmlhbnQmIHZhcmlhbnQgOiBzdGF0dXMudmFyaWFudHMoKSkg
eworICAgICAgICAgICAgICAgICAgICBpZiAoIWNoZWNrKHZhcmlhbnQuY29uZGl0aW9uU2V0KCkp
KSB7CisgICAgICAgICAgICAgICAgICAgICAgICBhbGxPSyA9IGZhbHNlOworICAgICAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAg
ICAgICAgZm9yIChTdHJ1Y3R1cmUqIHN0cnVjdHVyZSA6IHZhcmlhbnQuc3RydWN0dXJlU2V0KCkp
IHsKKyAgICAgICAgICAgICAgICAgICAgICAgIE1hdGNoU3RydWN0dXJlVmFyaWFudCBtYXRjaFZh
cmlhbnQ7CisgICAgICAgICAgICAgICAgICAgICAgICBtYXRjaFZhcmlhbnQuc3RydWN0dXJlID0g
bV9ncmFwaC5yZWdpc3RlclN0cnVjdHVyZShzdHJ1Y3R1cmUpOworICAgICAgICAgICAgICAgICAg
ICAgICAgbWF0Y2hWYXJpYW50LnJlc3VsdCA9IHZhcmlhbnQuaXNIaXQoKTsKKworICAgICAgICAg
ICAgICAgICAgICAgICAgZGF0YS0+dmFyaWFudHMuYXBwZW5kKG1hdGNoVmFyaWFudCk7CisgICAg
ICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBp
ZiAoYWxsT0spIHsKKyAgICAgICAgICAgICAgICAgICAgTm9kZSogbWF0Y2ggPSBhZGRUb0dyYXBo
KE1hdGNoU3RydWN0dXJlLCBPcEluZm8oZGF0YSksIGJhc2UpOworICAgICAgICAgICAgICAgICAg
ICBzZXQoVmlydHVhbFJlZ2lzdGVyKGN1cnJlbnRJbnN0cnVjdGlvblsxXS51Lm9wZXJhbmQpLCBt
YXRjaCk7CisgICAgICAgICAgICAgICAgICAgIE5FWFRfT1BDT0RFKG9wX2luX2J5X2lkKTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHNldChWaXJ0dWFs
UmVnaXN0ZXIoY3VycmVudEluc3RydWN0aW9uWzFdLnUub3BlcmFuZCksIGFkZFRvR3JhcGgoSW5C
eUlkLCBPcEluZm8oaWRlbnRpZmllck51bWJlciksIGJhc2UpKTsKICAgICAgICAgICAgIE5FWFRf
T1BDT0RFKG9wX2luX2J5X2lkKTsKLSAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9CiAKICAg
ICAgICAgY2FzZSBvcF9nZXRfZW51bWVyYWJsZV9sZW5ndGg6IHsKZGlmZiAtLWdpdCBhL0pTVGVz
dHMvQ2hhbmdlTG9nIGIvSlNUZXN0cy9DaGFuZ2VMb2cKaW5kZXggYTY4ZmQyOTk5MmY5YzY5Mjhj
NzA2ZjhmZGFmZTc3NzhmOWUzYTc4Yi4uYjc5YzZjMWUzNWYzZGUzOTQzNmQ2OGFiYzQ0ZTAxZDAx
YjNhYzU2MCAxMDA2NDQKLS0tIGEvSlNUZXN0cy9DaGFuZ2VMb2cKKysrIGIvSlNUZXN0cy9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwyNCBAQAorMjAxOC0wNS0zMCAgWXVzdWtlIFN1enVraSAgPHV0YXRh
bmUudGVhQGdtYWlsLmNvbT4KKworICAgICAgICBbREZHXSBJbkJ5SWQgc2hvdWxkIGJlIGNvbnZl
cnRlZCB0byBNYXRjaFN0cnVjdHVyZQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MTg1ODAzCisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCisKKyAgICAgICAgKiBtaWNyb2JlbmNobWFya3MvaW4tYnktaWQtbWF0Y2guanM6IEFkZGVk
LgorICAgICAgICAodGVzdCk6CisgICAgICAgICogbWljcm9iZW5jaG1hcmtzL2luLWJ5LWlkLXJl
bW92ZWQuanM6IEFkZGVkLgorICAgICAgICAodGVzdCk6CisgICAgICAgICogc3RyZXNzL2luLWJ5
LWlkLWNvbnN0YW50LmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAgKHRl
c3QxKToKKyAgICAgICAgKiBzdHJlc3MvaW4tYnktaWQtbWF0Y2gtaW52YWxpZC5qczogQWRkZWQu
CisgICAgICAgIChzaG91bGRCZSk6CisgICAgICAgICh0ZXN0MSk6CisgICAgICAgICogc3RyZXNz
L2luLWJ5LWlkLW1hdGNoLmpzOiBBZGRlZC4KKyAgICAgICAgKHNob3VsZEJlKToKKyAgICAgICAg
KHRlc3QxKToKKwogMjAxOC0wNS0yOSAgQ2FpdGxpbiBQb3R0ZXIgIDxjYWl0cEBpZ2FsaWEuY29t
PgogCiAgICAgICAgIFtKU1Rlc3RzXSB1cGRhdGUgdGVzdDI2MiBleHBlY3RhdGlvbnMgYWZ0ZXIg
cjIzMjI2MQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvaW4tYnktaWQtbWF0
Y2guanMgYi9KU1Rlc3RzL21pY3JvYmVuY2htYXJrcy9pbi1ieS1pZC1tYXRjaC5qcwpuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwLi5kMjg3Yzg2ZWE1NWI1YjQ5YzgxNzMzNTY5MjcwYjAzZThiN2M4YWU0Ci0tLSAvZGV2L251
bGwKKysrIGIvSlNUZXN0cy9taWNyb2JlbmNobWFya3MvaW4tYnktaWQtbWF0Y2guanMKQEAgLTAs
MCArMSwxOSBAQAorZnVuY3Rpb24gdGVzdChvYmplY3QpCit7CisgICAgaWYgKCJjb2NvYSIgaW4g
b2JqZWN0KQorICAgICAgICByZXR1cm4gb2JqZWN0LmNvY29hOworICAgIHJldHVybiAwOworfQor
bm9JbmxpbmUodGVzdCk7CisKK3ZhciBvMSA9IHsKKyAgICBjb2NvYTogNDIKK307Cit2YXIgbzIg
PSB7CisgICAgY2FwcHVjY2lubzogNDEKK307CisKK2ZvciAodmFyIGkgPSAwOyBpIDwgMWU2OyAr
K2kpIHsKKyAgICB0ZXN0KG8xKTsKKyAgICB0ZXN0KG8yKTsKK30KZGlmZiAtLWdpdCBhL0pTVGVz
dHMvbWljcm9iZW5jaG1hcmtzL2luLWJ5LWlkLXJlbW92ZWQuanMgYi9KU1Rlc3RzL21pY3JvYmVu
Y2htYXJrcy9pbi1ieS1pZC1yZW1vdmVkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjQ4YTgyNzhjZWI2ODdlN2Ey
NTAyNzNiMWVlNTkwYjc1NTc3YjZkMTIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL21pY3Jv
YmVuY2htYXJrcy9pbi1ieS1pZC1yZW1vdmVkLmpzCkBAIC0wLDAgKzEsMjAgQEAKK2Z1bmN0aW9u
IHRlc3Qob2JqZWN0KQoreworICAgIGlmICgiY29jb2EiIGluIG9iamVjdCkKKyAgICAgICAgcmV0
dXJuIG9iamVjdC5jb2NvYTsKKyAgICByZXR1cm4gMDsKK30KK25vSW5saW5lKHRlc3QpOworCit2
YXIgbzEgPSB7CisgICAgY29jb2E6IDQyCit9OwordmFyIG8yID0geworICAgIGNvY29hOiA0MCwK
KyAgICBjYXBwdWNjaW5vOiA0MQorfTsKKworZm9yICh2YXIgaSA9IDA7IGkgPCAxZTY7ICsraSkg
eworICAgIHRlc3QobzEpOworICAgIHRlc3QobzIpOworfQpkaWZmIC0tZ2l0IGEvSlNUZXN0cy9z
dHJlc3MvaW4tYnktaWQtY29uc3RhbnQuanMgYi9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1jb25z
dGFudC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi45MzE5ZWE4M2M3NmQ3ODg0Y2IxMGE5ODg3YjlmNmNlODAxYWZh
ZDQzCi0tLSAvZGV2L251bGwKKysrIGIvSlNUZXN0cy9zdHJlc3MvaW4tYnktaWQtY29uc3RhbnQu
anMKQEAgLTAsMCArMSwzMyBAQAorZnVuY3Rpb24gc2hvdWxkQmUoYWN0dWFsLCBleHBlY3RlZCkg
eworICAgIGlmIChhY3R1YWwgIT09IGV4cGVjdGVkKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3Io
J2JhZCB2YWx1ZTogJyArIGFjdHVhbCk7Cit9CisKK2Z1bmN0aW9uIHRlc3QxKG9iaikKK3sKKyAg
ICByZXR1cm4gImhlbGxvIiBpbiBvYmoKK30KK25vSW5saW5lKHRlc3QxKTsKKworbGV0IGFycmF5
ID0gWworICAgIFt7CisgICAgICAgIGhlbGxvOiA0MgorICAgIH0sIHRydWVdLAorICAgIFt7Cisg
ICAgICAgIGhlbGxvOiA0MiwKKyAgICAgICAgd29ybGQ6IDQzCisgICAgfSwgdHJ1ZV0sCisgICAg
W3sKKyAgICAgICAgX19wcm90b19fOiB7CisgICAgICAgICAgICBoZWxsbzogNDQKKyAgICAgICAg
fQorICAgIH0sIHRydWVdCitdOworZm9yIChsZXQgaSA9IDA7IGkgPCAxZTU7ICsraSkgeworICAg
IGZvciAobGV0IFtvYmosIHJlc3VsdF0gb2YgYXJyYXkpCisgICAgICAgIHNob3VsZEJlKHRlc3Qx
KG9iaiksIHJlc3VsdCk7Cit9CisKKy8vIE9TUkV4aXRzLgorZm9yIChsZXQgaSA9IDA7IGkgPCAx
ZTU7ICsraSkKKyAgICBzaG91bGRCZSh0ZXN0MSh7fSksIGZhbHNlKTsKZGlmZiAtLWdpdCBhL0pT
VGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLWludmFsaWQuanMgYi9KU1Rlc3RzL3N0cmVzcy9p
bi1ieS1pZC1tYXRjaC1pbnZhbGlkLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjUxNzU1ZTIxMmVhNmYwZWI5ZTBi
NGVhYzBiM2JkZjUwZjE1YTljYzIKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0cmVzcy9p
bi1ieS1pZC1tYXRjaC1pbnZhbGlkLmpzCkBAIC0wLDAgKzEsMzAgQEAKK2Z1bmN0aW9uIHNob3Vs
ZEJlKGFjdHVhbCwgZXhwZWN0ZWQpIHsKKyAgICBpZiAoYWN0dWFsICE9PSBleHBlY3RlZCkKKyAg
ICAgICAgdGhyb3cgbmV3IEVycm9yKCdiYWQgdmFsdWU6ICcgKyBhY3R1YWwpOworfQorCitmdW5j
dGlvbiB0ZXN0MShvYmopCit7CisgICAgcmV0dXJuICJoZWxsbyIgaW4gb2JqCit9Citub0lubGlu
ZSh0ZXN0MSk7CisKK2xldCBvYmplY3QxID0geworICAgIGhlbGxvOiA0MgorfTsKK2xldCBvYmpl
Y3QyID0geworICAgIGNvY29hOiA0NAorfTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kp
IHsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QxKSwgdHJ1ZSk7CisgICAgc2hvdWxkQmUodGVz
dDEob2JqZWN0MiksIGZhbHNlKTsKK30KK29iamVjdDIuaGVsbG8gPSA0NDsKK2ZvciAobGV0IGkg
PSAwOyBpIDwgMWU1OyArK2kpIHsKKyAgICBzaG91bGRCZSh0ZXN0MShvYmplY3QxKSwgdHJ1ZSk7
CisgICAgc2hvdWxkQmUodGVzdDEob2JqZWN0MiksIHRydWUpOworfQorCisvLyBPU1JFeGl0cy4K
K2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpCisgICAgc2hvdWxkQmUodGVzdDEoe30pLCBm
YWxzZSk7CmRpZmYgLS1naXQgYS9KU1Rlc3RzL3N0cmVzcy9pbi1ieS1pZC1tYXRjaC5qcyBiL0pT
VGVzdHMvc3RyZXNzL2luLWJ5LWlkLW1hdGNoLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjYyY2NjMzFjY2ZlMTBh
YmJhZjgzNThhNWUwOTBkYTEwMTRjMzFjM2YKLS0tIC9kZXYvbnVsbAorKysgYi9KU1Rlc3RzL3N0
cmVzcy9pbi1ieS1pZC1tYXRjaC5qcwpAQCAtMCwwICsxLDMyIEBACitmdW5jdGlvbiBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKSB7CisgICAgaWYgKGFjdHVhbCAhPT0gZXhwZWN0ZWQpCisgICAg
ICAgIHRocm93IG5ldyBFcnJvcignYmFkIHZhbHVlOiAnICsgYWN0dWFsKTsKK30KKworZnVuY3Rp
b24gdGVzdDEob2JqKQoreworICAgIHJldHVybiAiaGVsbG8iIGluIG9iagorfQorbm9JbmxpbmUo
dGVzdDEpOworCitsZXQgYXJyYXkgPSBbCisgICAgW3sKKyAgICAgICAgaGVsbG86IDQyCisgICAg
fSwgdHJ1ZV0sCisgICAgW3sKKyAgICAgICAgd29ybGQ6IDQzCisgICAgfSwgZmFsc2VdLAorICAg
IFt7CisgICAgICAgIF9fcHJvdG9fXzogeworICAgICAgICAgICAgaGVsbG86IDQ0CisgICAgICAg
IH0KKyAgICB9LCB0cnVlXQorXTsKK2ZvciAobGV0IGkgPSAwOyBpIDwgMWU1OyArK2kpIHsKKyAg
ICBmb3IgKGxldCBbb2JqLCByZXN1bHRdIG9mIGFycmF5KQorICAgICAgICBzaG91bGRCZSh0ZXN0
MShvYmopLCByZXN1bHQpOworfQorCisvLyBPU1JFeGl0cy4KK2ZvciAobGV0IGkgPSAwOyBpIDwg
MWU1OyArK2kpCisgICAgc2hvdWxkQmUodGVzdDEoe30pLCBmYWxzZSk7Cg==
</data>
<flag name="review"
          id="359738"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>