<?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>159213</bug_id>
          
          <creation_ts>2016-06-28 09:09:58 -0700</creation_ts>
          <short_desc>Move MathML-specific code into a separate accessibility class</short_desc>
          <delta_ts>2016-08-23 07:57:02 -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>Accessibility</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</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>
          
          <blocked>161081</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Frédéric Wang Nélar">fred.wang</reporter>
          <assigned_to name="Frédéric Wang Nélar">fred.wang</assigned_to>
          <cc>cfleizach</cc>
    
    <cc>jdiggs</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1206045</commentid>
    <comment_count>0</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-28 09:09:58 -0700</bug_when>
    <thetext>Currently, MathML is completely handled in the generic AccessibilityRenderObject and it&apos;s sometimes not very convenient to work with. We could improve the organization a bit and move MathML-specific code into a separate AccessibilityMathMLElement class:

1) textUnderElement

  The case isAnonymousMathOperator() can be moved into AccessibilityMathMLElement.

2) computeAccessibilityIsIgnored (and its helper function isIgnoredElementWithinMathTree)

   We can easily return the boolean value for math elements. However, we also ignore anonymous RenderBlock inside MathML which are *not* mathml renderers, so some special handling must be kept in AccessibilityRenderObject.

3) determineAccessibilityRole

   We can move the mapping mathTag =&gt; DocumentMathRole into AccessibilityMathMLElement.

4) All the other math functions (isMathElement, mathRadicandObject etc) can directly be moved into AccessibilityMathMLElement.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206046</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2016-06-28 09:10:32 -0700</bug_when>
    <thetext>&lt;rdar://problem/27056316&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206060</commentid>
    <comment_count>2</comment_count>
      <attachid>282253</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-28 10:13:25 -0700</bug_when>
    <thetext>Created attachment 282253
WIP Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1206314</commentid>
    <comment_count>3</comment_count>
      <attachid>282323</attachid>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-06-28 23:20:36 -0700</bug_when>
    <thetext>Created attachment 282323
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208844</commentid>
    <comment_count>4</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-07 15:41:10 -0700</bug_when>
    <thetext>@Chris: can you please take a look at this patch?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208921</commentid>
    <comment_count>5</comment_count>
      <attachid>282323</attachid>
    <who name="chris fleizach">cfleizach</who>
    <bug_when>2016-07-07 17:55:53 -0700</bug_when>
    <thetext>Comment on attachment 282323
Patch

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

&gt; Source/WebCore/accessibility/AccessibilityMathMLElement.cpp:146
&gt; +    if (!m_renderer || !m_renderer-&gt;isRenderMathMLOperator())

this can be written in one line</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1208975</commentid>
    <comment_count>6</comment_count>
    <who name="Frédéric Wang Nélar">fred.wang</who>
    <bug_when>2016-07-07 22:52:05 -0700</bug_when>
    <thetext>Committed r202961: &lt;http://trac.webkit.org/changeset/202961&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282253</attachid>
            <date>2016-06-28 10:13:25 -0700</date>
            <delta_ts>2016-06-28 23:20:29 -0700</delta_ts>
            <desc>WIP Patch</desc>
            <filename>0001-Move-MathML-specific-code-into-a-separate-accessibil.patch</filename>
            <type>text/plain</type>
            <size>37195</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">RnJvbSBhYjA0YmYzMmI1NTg1MjgyNjFhNWI4NjE2NGE2MzdhOGZiYzE2ODMwIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBGcmVkZXJpYyBXYW5nIDxmcmVkLndhbmdAZnJlZS5mcj4KRGF0
ZTogVHVlLCAyOCBKdW4gMjAxNiAxODo1NDowMCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIE1vdmUg
TWF0aE1MLXNwZWNpZmljIGNvZGUgaW50byBhIHNlcGFyYXRlIGFjY2Vzc2liaWxpdHkgY2xhc3MK
Ci0tLQogU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgICAgICAgICAgICAgICAgICAgICAg
fCAgIDEgKwogU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcCAg
ICAgfCAgMTEgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcCAg
ICAgICAgfCAgIDEgKwogLi4uL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1l
bnQuY3BwICAgfCA0MjIgKysrKysrKysrKysrKysrKysrKysrCiAuLi4vYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oICAgICB8IDExMCArKysrKysKIC4uLi9hY2Nlc3Np
YmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwICAgIHwgMzgxIC0tLS0tLS0tLS0t
LS0tLS0tLS0KIC4uLi9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuaCAg
ICAgIHwgIDUyIC0tLQogNyBmaWxlcyBjaGFuZ2VkLCA1NDUgaW5zZXJ0aW9ucygrKSwgNDMzIGRl
bGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IFNvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oCgpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29y
ZS9DTWFrZUxpc3RzLnR4dAppbmRleCA3NDY4OTU5Li5jM2Q5ZjI4IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dApAQCAtMTA1NSw2ICsxMDU1LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eUxpc3QuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5TGlzdEJveC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94
T3B0aW9uLmNwcAorICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQu
Y3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKICAg
ICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAKICAgICBhY2Nlc3NpYmls
aXR5L0FjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9h
Y2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCmluZGV4IDNhMjUyOGMuLmI0NzNhZTggMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAK
KysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENhY2hlLmNwcApAQCAt
NDEsNiArNDEsNyBAQAogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0LmgiCiAjaW5jbHVkZSAi
QWNjZXNzaWJpbGl0eUxpc3RCb3guaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdEJveE9w
dGlvbi5oIgorI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmgiCiAjaW5jbHVk
ZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5
TWVudUxpc3QuaCIKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaCIKQEAg
LTczLDEwICs3NCwxMiBAQAogI2luY2x1ZGUgIkhUTUxNZXRlckVsZW1lbnQuaCIKICNpbmNsdWRl
ICJIVE1MTmFtZXMuaCIKICNpbmNsdWRlICJJbmxpbmVFbGVtZW50Qm94LmgiCisjaW5jbHVkZSAi
TWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIlBhZ2UuaCIKICNpbmNsdWRlICJSZW5kZXJBdHRh
Y2htZW50LmgiCiAjaW5jbHVkZSAiUmVuZGVyTGluZUJyZWFrLmgiCiAjaW5jbHVkZSAiUmVuZGVy
TGlzdEJveC5oIgorI2luY2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCiAjaW5jbHVkZSAi
UmVuZGVyTWVudUxpc3QuaCIKICNpbmNsdWRlICJSZW5kZXJNZXRlci5oIgogI2luY2x1ZGUgIlJl
bmRlclByb2dyZXNzLmgiCkBAIC00NDQsNiArNDQ3LDE0IEBAIHN0YXRpYyBSZWY8QWNjZXNzaWJp
bGl0eU9iamVjdD4gY3JlYXRlRnJvbVJlbmRlcmVyKFJlbmRlck9iamVjdCogcmVuZGVyZXIpCiAg
ICAgaWYgKGlzPFNWR0VsZW1lbnQ+KG5vZGUpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJpbGl0
eVNWR0VsZW1lbnQ6OmNyZWF0ZShyZW5kZXJlcik7CiAKKyNpZiBFTkFCTEUoTUFUSE1MKQorICAg
IC8vIFRoZSBtZmVuY2VkIGVsZW1lbnQgY3JlYXRlcyBhbm9ueW1vdXMgUmVuZGVyTWF0aE1MT3Bl
cmF0b3JzIHdoaWNoIHNob3VsZCBiZSB0cmVhdGVkCisgICAgLy8gYXMgTWF0aE1MIGVsZW1lbnRz
IGFuZCBhc3NpZ25lZCB0aGUgTWF0aEVsZW1lbnRSb2xlIHNvIHRoYXQgcGxhdGZvcm0gbG9naWMg
cmVnYXJkaW5nCisgICAgLy8gaW5jbHVzaW9uIGFuZCByb2xlIG1hcHBpbmcgaXMgbm90IGJ5cGFz
c2VkLgorICAgIGlmIChpczxNYXRoTUxFbGVtZW50Pihub2RlKSB8fCAocmVuZGVyZXItPmlzQW5v
bnltb3VzKCkgJiYgaXM8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCpyZW5kZXJlcikpKQorICAgICAg
ICByZXR1cm4gQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmNyZWF0ZShyZW5kZXJlcik7Cisj
ZW5kaWYKKwogICAgIGlmIChpczxSZW5kZXJCb3hNb2RlbE9iamVjdD4oKnJlbmRlcmVyKSkgewog
ICAgICAgICBSZW5kZXJCb3hNb2RlbE9iamVjdCYgY3NzQm94ID0gZG93bmNhc3Q8UmVuZGVyQm94
TW9kZWxPYmplY3Q+KCpyZW5kZXJlcik7CiAgICAgICAgIGlmIChpczxSZW5kZXJMaXN0Qm94Pihj
c3NCb3gpKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3Np
YmlsaXR5QWxsSW5PbmUuY3BwCmluZGV4IGY3NTRlMTQuLjJjYmU0NTAgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eUFsbEluT25lLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHAK
QEAgLTM1LDYgKzM1LDcgQEAKICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdC5jcHAiCiAjaW5j
bHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlM
aXN0Qm94T3B0aW9uLmNwcCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5j
cHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIgogI2luY2x1ZGUg
IkFjY2Vzc2liaWxpdHlNZW51TGlzdC5jcHAiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVM
aXN0T3B0aW9uLmNwcCIKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkv
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJp
bGl0eS9BY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMC4uYzc5YzY4ZQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwCkBAIC0wLDAgKzEs
NDIyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE2IElnYWxpYSwgUy5MLgorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIFRIRSBDT1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAi
QVMgSVMiIEFORCBBTlkgRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVAorICogTElNSVRFRCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
CisgKiBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UCisgKiBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJj
b25maWcuaCIKKyNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIgorCisjaW5j
bHVkZSAiQVhPYmplY3RDYWNoZS5oIgorI2luY2x1ZGUgIk1hdGhNTE5hbWVzLmgiCisKK25hbWVz
cGFjZSBXZWJDb3JlIHsKKworQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OkFjY2Vzc2liaWxp
dHlNYXRoTUxFbGVtZW50KFJlbmRlck9iamVjdCogcmVuZGVyZXIpCisgICAgOiBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0KHJlbmRlcmVyKQoreworfQorCitBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudDo6fkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50KCkKK3sKK30KKworUmVmPEFjY2Vzc2li
aWxpdHlNYXRoTUxFbGVtZW50PiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6Y3JlYXRlKFJl
bmRlck9iamVjdCogcmVuZGVyZXIpCit7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgQWNjZXNz
aWJpbGl0eU1hdGhNTEVsZW1lbnQocmVuZGVyZXIpKTsKK30KKworQWNjZXNzaWJpbGl0eVJvbGUg
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkK
K3sKKyAgICBpZiAoIW1fcmVuZGVyZXIpCisgICAgICAgIHJldHVybiBVbmtub3duUm9sZTsKKwor
ICAgIGlmICgobV9hcmlhUm9sZSA9IGRldGVybWluZUFyaWFSb2xlQXR0cmlidXRlKCkpICE9IFVu
a25vd25Sb2xlKQorICAgICAgICByZXR1cm4gbV9hcmlhUm9sZTsKKworICAgIE5vZGUqIG5vZGUg
PSBtX3JlbmRlcmVyLT5ub2RlKCk7CisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICBpZiAobm9kZSAm
JiBub2RlLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptYXRoVGFnKSkKKyAgICAgICAgcmV0dXJu
IERvY3VtZW50TWF0aFJvbGU7CisjZW5kaWYKKworICAgIC8vIEl0J3Mgbm90IGNsZWFyIHdoaWNo
IHJvbGUgYSBwbGF0Zm9ybSBzaG91bGQgY2hvb3NlIGZvciBhIG1hdGggZWxlbWVudC4KKyAgICAv
LyBEZWNsYXJpbmcgYSBtYXRoIGVsZW1lbnQgcm9sZSBzaG91bGQgZ2l2ZSBmbGV4aWJpbGl0eSB0
byBwbGF0Zm9ybXMgdG8gY2hvb3NlLgorICAgIHJldHVybiBNYXRoRWxlbWVudFJvbGU7Cit9CisK
K2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aEZyYWN0aW9uKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTEZy
YWN0aW9uKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aEZl
bmNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNS
ZW5kZXJNYXRoTUxGZW5jZWQoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVu
dDo6aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSBjb25zdAoreworICAgIHJldHVybiBtX3Jl
bmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MU2NyaXB0cygpICYmICFpc01hdGhN
dWx0aXNjcmlwdCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01h
dGhSb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlz
UmVuZGVyTWF0aE1MUm93KCkgJiYgIWlzTWF0aFJvb3QoKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVW5kZXJPdmVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTFVuZGVyT3ZlcigpOworfQor
Citib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhTcXVhcmVSb290KCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhN
TFNxdWFyZVJvb3QoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNN
YXRoVG9rZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXIt
PmlzUmVuZGVyTWF0aE1MVG9rZW4oKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudDo6aXNNYXRoUm9vdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9y
ZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxSb290KCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1h
dGhNTEVsZW1lbnQ6OmlzTWF0aE9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICBpZiAoIW1fcmVuZGVy
ZXIgfHwgIW1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3IoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1h
dGhNTEVsZW1lbnQ6OmlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICByZXR1
cm4gaXM8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KG1fcmVuZGVyZXIpICYmIG1fcmVuZGVyZXItPmlz
QW5vbnltb3VzKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0
aEZlbmNlT3BlcmF0b3IoKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyTWF0aE1MT3BlcmF0
b3I+KG1fcmVuZGVyZXIpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gZG93
bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCptX3JlbmRlcmVyKS5oYXNPcGVyYXRvckZsYWco
TWF0aE1MT3BlcmF0b3JEaWN0aW9uYXJ5OjpGZW5jZSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFNlcGFyYXRvck9wZXJhdG9yKCkgY29uc3QKK3sKKyAgICBp
ZiAoIWlzPFJlbmRlck1hdGhNTE9wZXJhdG9yPihtX3JlbmRlcmVyKSkKKyAgICAgICAgcmV0dXJu
IGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigqbV9y
ZW5kZXJlcikuaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6U2VwYXJh
dG9yKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVGV4dCgp
IGNvbnN0Cit7CisgICAgcmV0dXJuIG5vZGUoKSAmJiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhN
TE5hbWVzOjptdGV4dFRhZykgfHwgaGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXNUYWcpKTsKK30K
KworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoTnVtYmVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6
bW5UYWcpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhJZGVu
dGlmaWVyKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFt
ZShNYXRoTUxOYW1lczo6bWlUYWcpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50Ojppc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5vZGUoKSAmJiBu
b2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1tdWx0aXNjcmlwdHNUYWcpOworfQorCiti
b29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhUYWJsZSgpIGNvbnN0Cit7Cisg
ICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10YWJs
ZVRhZyk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFRhYmxl
Um93KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbm9kZSgpICYmIChub2RlKCktPmhhc1RhZ05hbWUo
TWF0aE1MTmFtZXM6Om10clRhZykgfHwgaGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bWxhYmVsZWR0
clRhZykpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhUYWJs
ZUNlbGwoKSBjb25zdAoreworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1l
KE1hdGhNTE5hbWVzOjptdGRUYWcpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50Ojppc01hdGhTY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhTY3JpcHRPYmplY3RUeXBl
IHR5cGUpIGNvbnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50
T2JqZWN0VW5pZ25vcmVkKCk7CisgICAgaWYgKCFwYXJlbnQpCisgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgIHJldHVybiB0eXBlID09IFN1YnNjcmlwdCA/IHRoaXMgPT0gcGFyZW50LT5tYXRo
U3Vic2NyaXB0T2JqZWN0KCkgOiB0aGlzID09IHBhcmVudC0+bWF0aFN1cGVyc2NyaXB0T2JqZWN0
KCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aE11bHRpc2Ny
aXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlIHR5cGUpIGNv
bnN0Cit7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5p
Z25vcmVkKCk7CisgICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNNYXRoTXVsdGlzY3JpcHQo
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgLy8gVGhlIHNjcmlwdHMgaW4gYSBNYXRo
TUwgPG1tdWx0aXNjcmlwdHM+IGVsZW1lbnQgY29uc2lzdCBvZiBvbmUgb3IgbW9yZQorICAgIC8v
IHN1YnNjcmlwdCwgc3VwZXJzY3JpcHQgcGFpcnMuIEluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0
aGlzIG9iamVjdCBpcworICAgIC8vIGEgc2NyaXB0ZWQgdG9rZW4sIHdlIG5lZWQgdG8gZXhhbWlu
ZSBlYWNoIHNldCBvZiBwYWlycyB0byBzZWUgaWYgdGhlCisgICAgLy8gdGhpcyB0b2tlbiBpcyBw
cmVzZW50IGFuZCBpbiB0aGUgcG9zaXRpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSB0eXBlLgor
CisgICAgQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzIHBhaXJzOworICAgIGlmICh0
eXBlID09IFByZVN1YnNjcmlwdCB8fCB0eXBlID09IFByZVN1cGVyc2NyaXB0KQorICAgICAgICBw
YXJlbnQtPm1hdGhQcmVzY3JpcHRzKHBhaXJzKTsKKyAgICBlbHNlCisgICAgICAgIHBhcmVudC0+
bWF0aFBvc3RzY3JpcHRzKHBhaXJzKTsKKworICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHBh
aXJzKSB7CisgICAgICAgIGlmICh0aGlzID09IHBhaXIuZmlyc3QpCisgICAgICAgICAgICByZXR1
cm4gKHR5cGUgPT0gUHJlU3Vic2NyaXB0IHx8IHR5cGUgPT0gUG9zdFN1YnNjcmlwdCk7CisgICAg
ICAgIGlmICh0aGlzID09IHBhaXIuc2Vjb25kKQorICAgICAgICAgICAgcmV0dXJuICh0eXBlID09
IFByZVN1cGVyc2NyaXB0IHx8IHR5cGUgPT0gUG9zdFN1cGVyc2NyaXB0KTsKKyAgICB9CisKKyAg
ICByZXR1cm4gZmFsc2U7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50OjptYXRoUmFkaWNhbmRPYmplY3QoKQoreworICAgIGlmICghaXNNYXRoUm9v
dCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIC8vIEZvciBNYXRoU3F1YXJlUm9v
dCwgd2UgYWN0dWFsbHkgcmV0dXJuIHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgYmFzZS4KKyAgICAv
LyBTZWUgYWxzbyBodHRwczovL3dlYmtpdC5vcmcvYi8xNDY0NTIKKyAgICBjb25zdCBhdXRvJiBj
aGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDEp
CisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNoaWxkcmVuWzBdLmdldCgp
OworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6
bWF0aFJvb3RJbmRleE9iamVjdCgpCit7CisgICAgaWYgKCFpc01hdGhSb290KCkgfHwgaXNNYXRo
U3F1YXJlUm9vdCgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvbnN0IGF1dG8m
IGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpIDwg
MikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY2hpbGRyZW5bMV0uZ2V0
KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
OjptYXRoTnVtZXJhdG9yT2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0aEZyYWN0aW9uKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0gMikKKyAgICAgICAgcmV0
dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7Cit9CisKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoRGVub21pbmF0
b3JPYmplY3QoKQoreworICAgIGlmICghaXNNYXRoRnJhY3Rpb24oKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7
CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSAhPSAyKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsK
KworICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVj
dCogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhVbmRlck9iamVjdCgpCit7CisgICAg
aWYgKCFpc01hdGhVbmRlck92ZXIoKSB8fCAhbm9kZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBp
ZiAoY2hpbGRyZW4uc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
ZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJUYWcpIHx8IG5vZGUoKS0+
aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXVuZGVyb3ZlclRhZykpCisgICAgICAgIHJldHVybiBj
aGlsZHJlblsxXS5nZXQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmls
aXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aE92ZXJPYmplY3QoKQor
eworICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7
CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bW92ZXJUYWcpKQorICAg
ICAgICByZXR1cm4gY2hpbGRyZW5bMV0uZ2V0KCk7CisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFt
ZShNYXRoTUxOYW1lczo6bXVuZGVyb3ZlclRhZykpCisgICAgICAgIHJldHVybiBjaGlsZHJlblsy
XS5nZXQoKTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aEJhc2VPYmplY3QoKQoreworICAgIGlm
ICghaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSAmJiAhaXNNYXRoVW5kZXJPdmVyKCkgJiYg
IWlzTWF0aE11bHRpc2NyaXB0KCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29u
c3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIC8vIFRoZSBiYXNlIG9i
amVjdCBpbiBxdWVzdGlvbiBpcyBhbHdheXMgdGhlIGZpcnN0IGNoaWxkLgorICAgIGlmIChjaGls
ZHJlbi5zaXplKCkgPiAwKQorICAgICAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7CisKKyAg
ICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQ6Om1hdGhTdWJzY3JpcHRPYmplY3QoKQoreworICAgIGlmICghaXNNYXRo
U3Vic2NyaXB0U3VwZXJzY3JpcHQoKSB8fCAhbm9kZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0
cjsKKworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBp
ZiAoY2hpbGRyZW4uc2l6ZSgpIDwgMikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBp
ZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptc3ViVGFnKSB8fCBub2RlKCktPmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdWJzdXBUYWcpKQorICAgICAgICByZXR1cm4gY2hpbGRy
ZW5bMV0uZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhTdXBlcnNjcmlwdE9iamVjdCgp
Cit7CisgICAgaWYgKCFpc01hdGhTdWJzY3JpcHRTdXBlcnNjcmlwdCgpIHx8ICFub2RlKCkpCisg
ICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOworICAgIHVuc2lnbmVkIGNvdW50ID0gY2hpbGRyZW4uc2l6ZSgpOworCisg
ICAgaWYgKGNvdW50ID49IDIgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptc3Vw
VGFnKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzFdLmdldCgpOworCisgICAgaWYgKGNvdW50
ID49IDMgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptc3Vic3VwVGFnKSkKKyAg
ICAgICAgcmV0dXJuIGNoaWxkcmVuWzJdLmdldCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9
CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aEZlbmNlZE9wZW5TdHJp
bmcoKSBjb25zdAoreworICAgIGlmICghaXNNYXRoRmVuY2VkKCkpCisgICAgICAgIHJldHVybiBT
dHJpbmcoKTsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6Om9wZW5BdHRy
KTsKK30KKworU3RyaW5nIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoRmVuY2VkQ2xv
c2VTdHJpbmcoKSBjb25zdAoreworICAgIGlmICghaXNNYXRoRmVuY2VkKCkpCisgICAgICAgIHJl
dHVybiBTdHJpbmcoKTsKKworICAgIHJldHVybiBnZXRBdHRyaWJ1dGUoTWF0aE1MTmFtZXM6OmNs
b3NlQXR0cik7Cit9CisKK3ZvaWQgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhQcmVz
Y3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYgcHJlc2NyaXB0cykKK3sK
KyAgICBpZiAoIWlzTWF0aE11bHRpc2NyaXB0KCkgfHwgIW5vZGUoKSkKKyAgICAgICAgcmV0dXJu
OworCisgICAgYm9vbCBmb3VuZFByZXNjcmlwdCA9IGZhbHNlOworICAgIHN0ZDo6cGFpcjxBY2Nl
c3NpYmlsaXR5T2JqZWN0KiwgQWNjZXNzaWJpbGl0eU9iamVjdCo+IHByZXNjcmlwdFBhaXI7Cisg
ICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQg
PSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgeworICAgICAgICBpZiAoZm91bmRQcmVzY3JpcHQpIHsK
KyAgICAgICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBheE9iamVjdENhY2hl
KCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAgICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hp
bGQtPmlzTWF0aEVsZW1lbnQoKSkgeworICAgICAgICAgICAgICAgIGlmICghcHJlc2NyaXB0UGFp
ci5maXJzdCkKKyAgICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0UGFpci5maXJzdCA9IGF4Q2hp
bGQ7CisgICAgICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIHByZXNjcmlw
dFBhaXIuc2Vjb25kID0gYXhDaGlsZDsKKyAgICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0cy5h
cHBlbmQocHJlc2NyaXB0UGFpcik7CisgICAgICAgICAgICAgICAgICAgIHByZXNjcmlwdFBhaXIu
Zmlyc3QgPSBudWxscHRyOworICAgICAgICAgICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29u
ZCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICB9
IGVsc2UgaWYgKGNoaWxkLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptcHJlc2NyaXB0c1RhZykp
CisgICAgICAgICAgICBmb3VuZFByZXNjcmlwdCA9IHRydWU7CisgICAgfQorCisgICAgLy8gSGFu
ZGxlIHRoZSBvZGQgbnVtYmVyIG9mIHByZSBzY3JpcHRzIGNhc2UuCisgICAgaWYgKHByZXNjcmlw
dFBhaXIuZmlyc3QpCisgICAgICAgIHByZXNjcmlwdHMuYXBwZW5kKHByZXNjcmlwdFBhaXIpOwor
fQorCit2b2lkIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoUG9zdHNjcmlwdHMoQWNj
ZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwb3N0c2NyaXB0cykKK3sKKyAgICBpZiAo
IWlzTWF0aE11bHRpc2NyaXB0KCkgfHwgIW5vZGUoKSkKKyAgICAgICAgcmV0dXJuOworCisgICAg
Ly8gSW4gTXVsdGlzY3JpcHRzLCB0aGUgcG9zdC1zY3JpcHQgZWxlbWVudHMgc3RhcnQgYWZ0ZXIg
dGhlIGZpcnN0IGVsZW1lbnQgKHdoaWNoIGlzIHRoZSBiYXNlKQorICAgIC8vIGFuZCBjb250aW51
ZSB1bnRpbCBhIDxtcHJlc2NyaXB0cz4gdGFnIGlzIGZvdW5kCisgICAgc3RkOjpwYWlyPEFjY2Vz
c2liaWxpdHlPYmplY3QqLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4gcG9zdHNjcmlwdFBhaXI7Cisg
ICAgYm9vbCBmb3VuZEJhc2VFbGVtZW50ID0gZmFsc2U7CisgICAgZm9yIChOb2RlKiBjaGlsZCA9
IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmco
KSkgeworICAgICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1wcmVzY3Jp
cHRzVGFnKSkKKyAgICAgICAgICAgIGJyZWFrOworCisgICAgICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIGF4Q2hpbGQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKKyAgICAg
ICAgaWYgKGF4Q2hpbGQgJiYgYXhDaGlsZC0+aXNNYXRoRWxlbWVudCgpKSB7CisgICAgICAgICAg
ICBpZiAoIWZvdW5kQmFzZUVsZW1lbnQpCisgICAgICAgICAgICAgICAgZm91bmRCYXNlRWxlbWVu
dCA9IHRydWU7CisgICAgICAgICAgICBlbHNlIGlmICghcG9zdHNjcmlwdFBhaXIuZmlyc3QpCisg
ICAgICAgICAgICAgICAgcG9zdHNjcmlwdFBhaXIuZmlyc3QgPSBheENoaWxkOworICAgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICAgICAgcG9zdHNjcmlwdFBhaXIuc2Vjb25kID0gYXhDaGls
ZDsKKyAgICAgICAgICAgICAgICBwb3N0c2NyaXB0cy5hcHBlbmQocG9zdHNjcmlwdFBhaXIpOwor
ICAgICAgICAgICAgICAgIHBvc3RzY3JpcHRQYWlyLmZpcnN0ID0gbnVsbHB0cjsKKyAgICAgICAg
ICAgICAgICBwb3N0c2NyaXB0UGFpci5zZWNvbmQgPSBudWxscHRyOworICAgICAgICAgICAgfQor
ICAgICAgICB9CisgICAgfQorCisgICAgLy8gSGFuZGxlIHRoZSBvZGQgbnVtYmVyIG9mIHBvc3Qg
c2NyaXB0cyBjYXNlLgorICAgIGlmIChwb3N0c2NyaXB0UGFpci5maXJzdCkKKyAgICAgICAgcG9z
dHNjcmlwdHMuYXBwZW5kKHBvc3RzY3JpcHRQYWlyKTsKK30KKworaW50IEFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50OjptYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0Cit7CisgICAgaWYgKCFpczxS
ZW5kZXJNYXRoTUxGcmFjdGlvbj4obV9yZW5kZXJlcikpCisgICAgICAgIHJldHVybiAtMTsKKwor
ICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNYXRoTUxGcmFjdGlvbj4oKm1fcmVuZGVyZXIpLnJl
bGF0aXZlTGluZVRoaWNrbmVzcygpOworfQorCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxF
bGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRo
TUxFbGVtZW50LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNDg1N2E0OQot
LS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJp
bGl0eU1hdGhNTEVsZW1lbnQuaApAQCAtMCwwICsxLDExMCBAQAorLyoKKyAqIENvcHlyaWdodCAo
QykgMjAxNiBJZ2FsaWEsIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVk
aXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3
aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUg
Zm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0
aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNj
bGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJv
ZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3Vt
ZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmli
dXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hU
IEhPTERFUlMgQU5EIENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1Ig
SU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRI
RSBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgor
ICogQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxM
IFRIRSBDT1BZUklHSFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBV
U0UsCisgKiBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICog
T0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50X2gK
KyNkZWZpbmUgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnRfaAorCisjaW5jbHVkZSAiQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdC5oIgorCisjaW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIK
KyNpbmNsdWRlICJSZW5kZXJNYXRoTUxGcmFjdGlvbi5oIgorI2luY2x1ZGUgIlJlbmRlck1hdGhN
TE1hdGguaCIKKyNpbmNsdWRlICJSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgorI2luY2x1ZGUgIlJl
bmRlck1hdGhNTFJvb3QuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudCA6IHB1YmxpYyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsK
KworcHVibGljOgorICAgIHN0YXRpYyBSZWY8QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ+IGNy
ZWF0ZShSZW5kZXJPYmplY3QqKTsKKyAgICB2aXJ0dWFsIH5BY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudCgpOworCitwcm90ZWN0ZWQ6CisgICAgZXhwbGljaXQgQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQoUmVuZGVyT2JqZWN0Kik7CisKK3ByaXZhdGU6CisgICAgQWNjZXNzaWJpbGl0eVJvbGUg
ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKSBmaW5hbDsKKyAgICBib29sIGlzTWF0aEVsZW1l
bnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBib29sIGlzTWF0aEZyYWN0
aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhGZW5jZWQoKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBib29sIGlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgY29uc3Qgb3ZlcnJp
ZGU7CisgICAgYm9vbCBpc01hdGhSb3coKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0
aFVuZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoUm9vdCgpIGNvbnN0
IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoU3F1YXJlUm9vdCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoTnVt
YmVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhPcGVyYXRvcigpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZTsKKyAgICBi
b29sIGlzTWF0aElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0aFRh
YmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhUYWJsZVJvdygpIGNvbnN0IG92
ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAg
Ym9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRo
VG9rZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0aFNjcmlwdE9iamVjdChBY2Nl
c3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wg
aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdE9iamVj
dFR5cGUpIGNvbnN0IG92ZXJyaWRlOworICAgIAorICAgIC8vIEdlbmVyaWMgY29tcG9uZW50cy4K
KyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoQmFzZU9iamVjdCgpIG92ZXJyaWRlOworICAg
IAorICAgIC8vIFJvb3QgY29tcG9uZW50cy4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRo
UmFkaWNhbmRPYmplY3QoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRo
Um9vdEluZGV4T2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgCisgICAgLy8gRnJhY3Rpb24gY29tcG9u
ZW50cy4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoTnVtZXJhdG9yT2JqZWN0KCkgb3Zl
cnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0aERlbm9taW5hdG9yT2JqZWN0KCkg
b3ZlcnJpZGU7CisKKyAgICAvLyBVbmRlciBvdmVyIGNvbXBvbmVudHMuCisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogbWF0aFVuZGVyT2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0
eU9iamVjdCogbWF0aE92ZXJPYmplY3QoKSBvdmVycmlkZTsKKyAgICAKKyAgICAvLyBTdWJzY3Jp
cHQvc3VwZXJzY3JpcHQgY29tcG9uZW50cy4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRo
U3Vic2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0
aFN1cGVyc2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgCisgICAgLy8gRmVuY2VkIGNvbXBv
bmVudHMuCisgICAgU3RyaW5nIG1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3Qgb3ZlcnJpZGU7
CisgICAgU3RyaW5nIG1hdGhGZW5jZWRDbG9zZVN0cmluZygpIGNvbnN0IG92ZXJyaWRlOworICAg
IGludCBtYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNBbm9u
eW1vdXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZTsKKworICAgIC8vIE11bHRpc2NyaXB0
cyBjb21wb25lbnRzLgorICAgIHZvaWQgbWF0aFByZXNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhN
dWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGU7CisgICAgdm9pZCBtYXRoUG9zdHNjcmlwdHMoQWNj
ZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGU7Cit9OworCisKK30gLy8g
bmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZ
KEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LCBpc01hdGhFbGVtZW50KCkpCisKKyNlbmRpZiAv
LyBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudF9oCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwIGIvU291cmNlL1dl
YkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcAppbmRleCA2
ZTE2YWUyLi43YzEzYmY5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5
L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKQEAgLTgyLDExICs4Miw3IEBA
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdEJveC5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RJdGVtLmgi
CiAjaW5jbHVkZSAiUmVuZGVyTGlzdE1hcmtlci5oIgotI2luY2x1ZGUgIlJlbmRlck1hdGhNTEJs
b2NrLmgiCi0jaW5jbHVkZSAiUmVuZGVyTWF0aE1MRnJhY3Rpb24uaCIKLSNpbmNsdWRlICJSZW5k
ZXJNYXRoTUxNYXRoLmgiCiAjaW5jbHVkZSAiUmVuZGVyTWF0aE1MT3BlcmF0b3IuaCIKLSNpbmNs
dWRlICJSZW5kZXJNYXRoTUxSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWVudUxpc3QuaCIKICNp
bmNsdWRlICJSZW5kZXJTVkdSb290LmgiCiAjaW5jbHVkZSAiUmVuZGVyU1ZHU2hhcGUuaCIKQEAg
LTI2MjksMTUgKzI2MjUsNiBAQCBBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpCiAgICAgaWYgKGlzU3R5bGVGb3Jt
YXRHcm91cCgpKQogICAgICAgICByZXR1cm4gaXM8UmVuZGVySW5saW5lPigqbV9yZW5kZXJlcikg
PyBJbmxpbmVSb2xlIDogR3JvdXBSb2xlOwogICAgIAotI2lmIEVOQUJMRShNQVRITUwpCi0gICAg
aWYgKG5vZGUgJiYgbm9kZS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bWF0aFRhZykpCi0gICAg
ICAgIHJldHVybiBEb2N1bWVudE1hdGhSb2xlOwotI2VuZGlmCi0gICAgLy8gSXQncyBub3QgY2xl
YXIgd2hpY2ggcm9sZSBhIHBsYXRmb3JtIHNob3VsZCBjaG9vc2UgZm9yIGEgbWF0aCBlbGVtZW50
LgotICAgIC8vIERlY2xhcmluZyBhIG1hdGggZWxlbWVudCByb2xlIHNob3VsZCBnaXZlIGZsZXhp
YmlsaXR5IHRvIHBsYXRmb3JtcyB0byBjaG9vc2UuCi0gICAgaWYgKGlzTWF0aEVsZW1lbnQoKSkK
LSAgICAgICAgcmV0dXJuIE1hdGhFbGVtZW50Um9sZTsKLSAgICAKICAgICBpZiAobm9kZSAmJiBu
b2RlLT5oYXNUYWdOYW1lKGRkVGFnKSkKICAgICAgICAgcmV0dXJuIERlc2NyaXB0aW9uTGlzdERl
dGFpbFJvbGU7CiAgICAgCkBAIC0zNjA2LDE2MCArMzU5Myw2IEBAIHZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29uc3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogfQog
CiAjaWYgRU5BQkxFKE1BVEhNTCkKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNN
YXRoRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gVGhlIG1mZW5jZWQgZWxlbWVudCBjcmVhdGVzIGFub255
bW91cyBSZW5kZXJNYXRoTUxPcGVyYXRvcnMgd2hpY2ggc2hvdWxkIGJlIHRyZWF0ZWQKLSAgICAv
LyBhcyBNYXRoTUwgZWxlbWVudHMgYW5kIGFzc2lnbmVkIHRoZSBNYXRoRWxlbWVudFJvbGUgc28g
dGhhdCBwbGF0Zm9ybSBsb2dpYyByZWdhcmRpbmcKLSAgICAvLyBpbmNsdXNpb24gYW5kIHJvbGUg
bWFwcGluZyBpcyBub3QgYnlwYXNzZWQuCi0gICAgaWYgKGlzQW5vbnltb3VzTWF0aE9wZXJhdG9y
KCkpCi0gICAgICAgIHJldHVybiB0cnVlOwotCi0gICAgcmV0dXJuIGlzPE1hdGhNTEVsZW1lbnQ+
KG5vZGUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRnJh
Y3Rpb24oKSBjb25zdAotewotICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlz
UmVuZGVyTWF0aE1MRnJhY3Rpb24oKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc01hdGhGZW5jZWQoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1f
cmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MRmVuY2VkKCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSBjb25zdAotewotICAg
IHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MU2NyaXB0cygp
ICYmICFpc01hdGhNdWx0aXNjcmlwdCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzTWF0aFJvdygpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9y
ZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxSb3coKSAmJiAhaXNNYXRoUm9vdCgpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxVbmRlck92
ZXIoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhTcXVhcmVS
b290KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1Jl
bmRlck1hdGhNTFNxdWFyZVJvb3QoKTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdDo6aXNNYXRoVG9rZW4oKSBjb25zdAotewotICAgIHJldHVybiBtX3JlbmRlcmVyICYm
IG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MVG9rZW4oKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc01hdGhSb290KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5k
ZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTFJvb3QoKTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhPcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYg
KCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiB0cnVlOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3QKLXsK
LSAgICByZXR1cm4gaXM8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KG1fcmVuZGVyZXIpICYmIG1fcmVu
ZGVyZXItPmlzQW5vbnltb3VzKCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dDo6aXNNYXRoRmVuY2VPcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJNYXRo
TUxPcGVyYXRvcj4obV9yZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKm1fcmVuZGVyZXIpLmhhc09wZXJh
dG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OkZlbmNlKTsKLX0KLQotYm9vbCBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhTZXBhcmF0b3JPcGVyYXRvcigpIGNvbnN0Ci17
Ci0gICAgaWYgKCFpczxSZW5kZXJNYXRoTUxPcGVyYXRvcj4obV9yZW5kZXJlcikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRv
cj4oKm1fcmVuZGVyZXIpLmhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6
OlNlcGFyYXRvcik7Ci19Ci0gICAgCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TWF0aFRleHQoKSBjb25zdAotewotICAgIHJldHVybiBub2RlKCkgJiYgKG5vZGUoKS0+aGFzVGFn
TmFtZShNYXRoTUxOYW1lczo6bXRleHRUYWcpIHx8IGhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1z
VGFnKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoTnVtYmVy
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShNYXRo
TUxOYW1lczo6bW5UYWcpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TWF0aElkZW50aWZpZXIoKSBjb25zdAotewotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5o
YXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRhZyk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNNYXRoTXVsdGlzY3JpcHQoKSBjb25zdAotewotICAgIHJldHVybiBub2Rl
KCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptbXVsdGlzY3JpcHRzVGFnKTsK
LX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoVGFibGUoKSBj
b25zdAotewotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5h
bWVzOjptdGFibGVUYWcpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TWF0aFRhYmxlUm93KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9kZSgpICYmIChub2RlKCktPmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10clRhZykgfHwgaGFzVGFnTmFtZShNYXRoTUxOYW1lczo6
bWxhYmVsZWR0clRhZykpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Omlz
TWF0aFRhYmxlQ2VsbCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCktPmhh
c1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10ZFRhZyk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2Jq
ZWN0VHlwZSB0eXBlKSBjb25zdAotewotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9
IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOwotICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1
cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHlwZSA9PSBTdWJzY3JpcHQgPyB0aGlzID09IHBhcmVu
dC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpIDogdGhpcyA9PSBwYXJlbnQtPm1hdGhTdXBlcnNjcmlw
dE9iamVjdCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aE11
bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlIHR5
cGUpIGNvbnN0Ci17Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2Jq
ZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFwYXJlbnQgfHwgIXBhcmVudC0+aXNNYXRoTXVsdGlz
Y3JpcHQoKSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCi0gICAgLy8gVGhlIHNjcmlwdHMgaW4g
YSBNYXRoTUwgPG1tdWx0aXNjcmlwdHM+IGVsZW1lbnQgY29uc2lzdCBvZiBvbmUgb3IgbW9yZQot
ICAgIC8vIHN1YnNjcmlwdCwgc3VwZXJzY3JpcHQgcGFpcnMuIEluIG9yZGVyIHRvIGRldGVybWlu
ZSBpZiB0aGlzIG9iamVjdCBpcwotICAgIC8vIGEgc2NyaXB0ZWQgdG9rZW4sIHdlIG5lZWQgdG8g
ZXhhbWluZSBlYWNoIHNldCBvZiBwYWlycyB0byBzZWUgaWYgdGhlCi0gICAgLy8gdGhpcyB0b2tl
biBpcyBwcmVzZW50IGFuZCBpbiB0aGUgcG9zaXRpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSB0
eXBlLgotCi0gICAgQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzIHBhaXJzOwotICAg
IGlmICh0eXBlID09IFByZVN1YnNjcmlwdCB8fCB0eXBlID09IFByZVN1cGVyc2NyaXB0KQotICAg
ICAgICBwYXJlbnQtPm1hdGhQcmVzY3JpcHRzKHBhaXJzKTsKLSAgICBlbHNlCi0gICAgICAgIHBh
cmVudC0+bWF0aFBvc3RzY3JpcHRzKHBhaXJzKTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGFp
ciA6IHBhaXJzKSB7Ci0gICAgICAgIGlmICh0aGlzID09IHBhaXIuZmlyc3QpCi0gICAgICAgICAg
ICByZXR1cm4gKHR5cGUgPT0gUHJlU3Vic2NyaXB0IHx8IHR5cGUgPT0gUG9zdFN1YnNjcmlwdCk7
Ci0gICAgICAgIGlmICh0aGlzID09IHBhaXIuc2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuICh0
eXBlID09IFByZVN1cGVyc2NyaXB0IHx8IHR5cGUgPT0gUG9zdFN1cGVyc2NyaXB0KTsKLSAgICB9
Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0gICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJP
YmplY3Q6OmlzSWdub3JlZEVsZW1lbnRXaXRoaW5NYXRoVHJlZSgpIGNvbnN0CiB7CiAgICAgaWYg
KCFtX3JlbmRlcmVyKQpAQCAtMzc4MSwyMjAgKzM2MTQsNiBAQCBib29sIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6OmlzSWdub3JlZEVsZW1lbnRXaXRoaW5NYXRoVHJlZSgpIGNvbnN0CiAKICAg
ICByZXR1cm4gbV9yZW5kZXJlci0+aXNBbm9ueW1vdXMoKSAmJiBtX3JlbmRlcmVyLT5wYXJlbnQo
KSAmJiBpczxSZW5kZXJNYXRoTUxCbG9jaz4obV9yZW5kZXJlci0+cGFyZW50KCkpOwogfQotCi1B
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUmFkaWNh
bmRPYmplY3QoKQotewotICAgIGlmICghaXNNYXRoUm9vdCgpKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIC8vIEZvciBNYXRoU3F1YXJlUm9vdCwgd2UgYWN0dWFsbHkgcmV0dXJuIHRo
ZSBmaXJzdCBjaGlsZCBvZiB0aGUgYmFzZS4KLSAgICAvLyBTZWUgYWxzbyBodHRwczovL3dlYmtp
dC5vcmcvYi8xNDY0NTIKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVu
KCk7Ci0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybiBudWxscHRy
OwotCi0gICAgcmV0dXJuIGNoaWxkcmVuWzBdLmdldCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUm9vdEluZGV4T2JqZWN0KCkKLXsK
LSAgICBpZiAoIWlzTWF0aFJvb3QoKSB8fCBpc01hdGhTcXVhcmVSb290KCkpCi0gICAgICAgIHJl
dHVybiBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJl
bigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLQotICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLX0KLQotQWNjZXNzaWJpbGl0eU9i
amVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE51bWVyYXRvck9iamVjdCgpCi17
Ci0gICAgaWYgKCFpc01hdGhGcmFjdGlvbigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAg
ICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgaWYg
KGNoaWxkcmVuLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7Ci19Ci0gICAgCi1BY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoRGVub21pbmF0b3JPYmplY3QoKQotewot
ICAgIGlmICghaXNNYXRoRnJhY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0KLSAg
ICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgaWYgKGNoaWxk
cmVuLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICByZXR1
cm4gY2hpbGRyZW5bMV0uZ2V0KCk7Ci19Ci0gICAgCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nl
c3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoVW5kZXJPYmplY3QoKQotewotICAgIGlmICghaXNN
YXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAg
Ci0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIGlmIChj
aGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBp
ZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJUYWcpIHx8IG5vZGUoKS0+
aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXVuZGVyb3ZlclRhZykpCi0gICAgICAgIHJldHVybiBj
aGlsZHJlblsxXS5nZXQoKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQWNjZXNz
aWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE92ZXJPYmplY3Qo
KQotewotICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0
dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGls
ZHJlbigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLSAgICAKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptb3Zl
clRhZykpCi0gICAgICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLSAgICBpZiAobm9kZSgp
LT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJvdmVyVGFnKSkKLSAgICAgICAgcmV0dXJu
IGNoaWxkcmVuWzJdLmdldCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFjY2Vzc2li
aWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhCYXNlT2JqZWN0KCkK
LXsKLSAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgJiYgIWlzTWF0aFVuZGVy
T3ZlcigpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAg
Ly8gVGhlIGJhc2Ugb2JqZWN0IGluIHF1ZXN0aW9uIGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hpbGQu
Ci0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBjaGlsZHJlblsw
XS5nZXQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1BY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3Vic2NyaXB0T2JqZWN0KCkKLXsKLSAg
ICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgfHwgIW5vZGUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5j
aGlsZHJlbigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zdWJU
YWcpIHx8IG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXN1YnN1cFRhZykpCi0gICAg
ICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsK
LX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0
aFN1cGVyc2NyaXB0T2JqZWN0KCkKLXsKLSAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2Ny
aXB0KCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29u
c3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIHVuc2lnbmVkIGNvdW50
ID0gY2hpbGRyZW4uc2l6ZSgpOwotCi0gICAgaWYgKGNvdW50ID49IDIgJiYgbm9kZSgpLT5oYXNU
YWdOYW1lKE1hdGhNTE5hbWVzOjptc3VwVGFnKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzFd
LmdldCgpOwotCi0gICAgaWYgKGNvdW50ID49IDMgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhN
TE5hbWVzOjptc3Vic3VwVGFnKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzJdLmdldCgpOwot
ICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotU3RyaW5nIEFjY2Vzc2liaWxpdHlS
ZW5kZXJPYmplY3Q6Om1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAoIWlz
TWF0aEZlbmNlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgcmV0dXJu
IGdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6b3BlbkF0dHIpOwotfQotCi1TdHJpbmcgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3QKLXsKLSAg
ICBpZiAoIWlzTWF0aEZlbmNlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0g
ICAgcmV0dXJuIGdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6Y2xvc2VBdHRyKTsKLX0KLSAgICAK
LXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFByZXNjcmlwdHMoQWNjZXNzaWJp
bGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwcmVzY3JpcHRzKQotewotICAgIGlmICghaXNNYXRo
TXVsdGlzY3JpcHQoKSB8fCAhbm9kZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAgYm9v
bCBmb3VuZFByZXNjcmlwdCA9IGZhbHNlOwotICAgIHN0ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiwgQWNjZXNzaWJpbGl0eU9iamVjdCo+IHByZXNjcmlwdFBhaXI7Ci0gICAgZm9yIChOb2Rl
KiBjaGlsZCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4
dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoZm91bmRQcmVzY3JpcHQpIHsKLSAgICAgICAgICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3Jl
YXRlKGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hpbGQtPmlzTWF0aEVs
ZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmICghcHJlc2NyaXB0UGFpci5maXJzdCkKLSAg
ICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0UGFpci5maXJzdCA9IGF4Q2hpbGQ7Ci0gICAgICAg
ICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuc2Vjb25k
ID0gYXhDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0cy5hcHBlbmQocHJlc2Ny
aXB0UGFpcik7Ci0gICAgICAgICAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuZmlyc3QgPSBudWxs
cHRyOwotICAgICAgICAgICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29uZCA9IG51bGxwdHI7
Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYgKGNo
aWxkLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptcHJlc2NyaXB0c1RhZykpCi0gICAgICAgICAg
ICBmb3VuZFByZXNjcmlwdCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIC8vIEhhbmRsZSB0aGUg
b2RkIG51bWJlciBvZiBwcmUgc2NyaXB0cyBjYXNlLgotICAgIGlmIChwcmVzY3JpcHRQYWlyLmZp
cnN0KQotICAgICAgICBwcmVzY3JpcHRzLmFwcGVuZChwcmVzY3JpcHRQYWlyKTsKLX0KLQotdm9p
ZCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUG9zdHNjcmlwdHMoQWNjZXNzaWJpbGl0
eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwb3N0c2NyaXB0cykKLXsKLSAgICBpZiAoIWlzTWF0aE11
bHRpc2NyaXB0KCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuOwotCi0gICAgLy8gSW4gTXVs
dGlzY3JpcHRzLCB0aGUgcG9zdC1zY3JpcHQgZWxlbWVudHMgc3RhcnQgYWZ0ZXIgdGhlIGZpcnN0
IGVsZW1lbnQgKHdoaWNoIGlzIHRoZSBiYXNlKQotICAgIC8vIGFuZCBjb250aW51ZSB1bnRpbCBh
IDxtcHJlc2NyaXB0cz4gdGFnIGlzIGZvdW5kCi0gICAgc3RkOjpwYWlyPEFjY2Vzc2liaWxpdHlP
YmplY3QqLCBBY2Nlc3NpYmlsaXR5T2JqZWN0Kj4gcG9zdHNjcmlwdFBhaXI7Ci0gICAgYm9vbCBm
b3VuZEJhc2VFbGVtZW50ID0gZmFsc2U7Ci0gICAgZm9yIChOb2RlKiBjaGlsZCA9IG5vZGUoKS0+
Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+bmV4dFNpYmxpbmcoKSkgewotICAg
ICAgICBpZiAoY2hpbGQtPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1wcmVzY3JpcHRzVGFnKSkK
LSAgICAgICAgICAgIGJyZWFrOwotCi0gICAgICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hp
bGQgPSBheE9iamVjdENhY2hlKCktPmdldE9yQ3JlYXRlKGNoaWxkKTsKLSAgICAgICAgaWYgKGF4
Q2hpbGQgJiYgYXhDaGlsZC0+aXNNYXRoRWxlbWVudCgpKSB7Ci0gICAgICAgICAgICBpZiAoIWZv
dW5kQmFzZUVsZW1lbnQpCi0gICAgICAgICAgICAgICAgZm91bmRCYXNlRWxlbWVudCA9IHRydWU7
Ci0gICAgICAgICAgICBlbHNlIGlmICghcG9zdHNjcmlwdFBhaXIuZmlyc3QpCi0gICAgICAgICAg
ICAgICAgcG9zdHNjcmlwdFBhaXIuZmlyc3QgPSBheENoaWxkOwotICAgICAgICAgICAgZWxzZSB7
Ci0gICAgICAgICAgICAgICAgcG9zdHNjcmlwdFBhaXIuc2Vjb25kID0gYXhDaGlsZDsKLSAgICAg
ICAgICAgICAgICBwb3N0c2NyaXB0cy5hcHBlbmQocG9zdHNjcmlwdFBhaXIpOwotICAgICAgICAg
ICAgICAgIHBvc3RzY3JpcHRQYWlyLmZpcnN0ID0gbnVsbHB0cjsKLSAgICAgICAgICAgICAgICBw
b3N0c2NyaXB0UGFpci5zZWNvbmQgPSBudWxscHRyOwotICAgICAgICAgICAgfQotICAgICAgICB9
Ci0gICAgfQotCi0gICAgLy8gSGFuZGxlIHRoZSBvZGQgbnVtYmVyIG9mIHBvc3Qgc2NyaXB0cyBj
YXNlLgotICAgIGlmIChwb3N0c2NyaXB0UGFpci5maXJzdCkKLSAgICAgICAgcG9zdHNjcmlwdHMu
YXBwZW5kKHBvc3RzY3JpcHRQYWlyKTsKLX0KLQotaW50IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6Om1hdGhMaW5lVGhpY2tuZXNzKCkgY29uc3QKLXsKLSAgICBpZiAoIWlzPFJlbmRlck1hdGhN
TEZyYWN0aW9uPihtX3JlbmRlcmVyKSkKLSAgICAgICAgcmV0dXJuIC0xOwotICAgIAotICAgIHJl
dHVybiBkb3duY2FzdDxSZW5kZXJNYXRoTUxGcmFjdGlvbj4oKm1fcmVuZGVyZXIpLnJlbGF0aXZl
TGluZVRoaWNrbmVzcygpOwotfQotCiAjZW5kaWYKICAgICAKIH0gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5oIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0LmgKaW5kZXggNDQ1OWM0Ni4uNzZkYTcwOSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmgKKysr
IGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmgKQEAgLTI4MSw1OCArMjgxLDYgQEAgcHJpdmF0ZToKICAgICBib29sIHNob3VsZEdldFRleHRG
cm9tTm9kZShBY2Nlc3NpYmlsaXR5VGV4dFVuZGVyRWxlbWVudE1vZGUpIGNvbnN0OwogCiAjaWYg
RU5BQkxFKE1BVEhNTCkKLSAgICAvLyBBbGwgbWF0aCBlbGVtZW50cyByZXR1cm4gdHJ1ZSBmb3Ig
aXNNYXRoRWxlbWVudCgpLgotICAgIGJvb2wgaXNNYXRoRWxlbWVudCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgaXNNYXRoRnJhY3Rpb24oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
TWF0aEZlbmNlZCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoU3Vic2NyaXB0U3Vw
ZXJzY3JpcHQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0aFJvdygpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoVW5kZXJPdmVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAg
Ym9vbCBpc01hdGhSb290KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhTcXVhcmVS
b290KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhUZXh0KCkgY29uc3Qgb3ZlcnJp
ZGU7Ci0gICAgYm9vbCBpc01hdGhOdW1iZXIoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
TWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhGZW5jZU9wZXJh
dG9yKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhTZXBhcmF0b3JPcGVyYXRvcigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoSWRlbnRpZmllcigpIGNvbnN0IG92ZXJy
aWRlOwotICAgIGJvb2wgaXNNYXRoVGFibGUoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlz
TWF0aFRhYmxlUm93KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhUYWJsZUNlbGwo
KSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0aE11bHRpc2NyaXB0KCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc01hdGhUb2tlbigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZSkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmls
aXR5TWF0aE11bHRpc2NyaXB0T2JqZWN0VHlwZSkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgCi0gICAg
Ly8gR2VuZXJpYyBjb21wb25lbnRzLgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1hdGhCYXNl
T2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAgLy8gUm9vdCBjb21wb25lbnRzLgotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG1hdGhSYWRpY2FuZE9iamVjdCgpIG92ZXJyaWRlOwotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG1hdGhSb290SW5kZXhPYmplY3QoKSBvdmVycmlkZTsKLSAgICAK
LSAgICAvLyBGcmFjdGlvbiBjb21wb25lbnRzLgotICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1h
dGhOdW1lcmF0b3JPYmplY3QoKSBvdmVycmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBt
YXRoRGVub21pbmF0b3JPYmplY3QoKSBvdmVycmlkZTsKLQotICAgIC8vIFVuZGVyIG92ZXIgY29t
cG9uZW50cy4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoVW5kZXJPYmplY3QoKSBvdmVy
cmlkZTsKLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoT3Zlck9iamVjdCgpIG92ZXJyaWRl
OwotICAgIAotICAgIC8vIFN1YnNjcmlwdC9zdXBlcnNjcmlwdCBjb21wb25lbnRzLgotICAgIEFj
Y2Vzc2liaWxpdHlPYmplY3QqIG1hdGhTdWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZTsKLSAgICBB
Y2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoU3VwZXJzY3JpcHRPYmplY3QoKSBvdmVycmlkZTsKLSAg
ICAKLSAgICAvLyBGZW5jZWQgY29tcG9uZW50cy4KLSAgICBTdHJpbmcgbWF0aEZlbmNlZE9wZW5T
dHJpbmcoKSBjb25zdCBvdmVycmlkZTsKLSAgICBTdHJpbmcgbWF0aEZlbmNlZENsb3NlU3RyaW5n
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgaW50IG1hdGhMaW5lVGhpY2tuZXNzKCkgY29uc3Qgb3Zl
cnJpZGU7Ci0gICAgYm9vbCBpc0Fub255bW91c01hdGhPcGVyYXRvcigpIGNvbnN0IG92ZXJyaWRl
OwotCi0gICAgLy8gTXVsdGlzY3JpcHRzIGNvbXBvbmVudHMuCi0gICAgdm9pZCBtYXRoUHJlc2Ny
aXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmKSBvdmVycmlkZTsKLSAgICB2
b2lkIG1hdGhQb3N0c2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRpc2NyaXB0UGFpcnMmKSBv
dmVycmlkZTsKLSAgICAKICAgICBib29sIGlzSWdub3JlZEVsZW1lbnRXaXRoaW5NYXRoVHJlZSgp
IGNvbnN0OwogI2VuZGlmCiB9OwotLSAKMi44LjEKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>282323</attachid>
            <date>2016-06-28 23:20:36 -0700</date>
            <delta_ts>2016-07-07 17:55:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-159213-20160629082016.patch</filename>
            <type>text/plain</type>
            <size>57098</size>
            <attacher name="Frédéric Wang Nélar">fred.wang</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjAyNjEwCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggOTRjZTE3OWYyNzcyODI5
NzFjNWMwZjA5ZDIwYjNlZDU5Njg5ZDYxZi4uNGY0NjczNDBlZWJhOWM5OWQyZjIyMzY0YzlhYjJh
MjdjMTYzNDQ0OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEyMyBAQAorMjAxNi0wNi0yOCAgRnJl
ZGVyaWMgV2FuZyAgPGZ3YW5nQGlnYWxpYS5jb20+CisKKyAgICAgICAgTW92ZSBNYXRoTUwtc3Bl
Y2lmaWMgY29kZSBpbnRvIGEgc2VwYXJhdGUgYWNjZXNzaWJpbGl0eSBjbGFzcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTU5MjEzCisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQ3VycmVudGx5LCBNYXRoTUwg
YWNjZXNzaWJpbGl0eSBpcyBjb21wbGV0ZWx5IGhhbmRsZWQgaW4gdGhlIGdlbmVyaWMgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdAorICAgICAgICBhbmQgaXQncyBzb21ldGltZXMgbWVzc3kgYW5k
IHVuY29udmVuaWVudC4gSGVuY2Ugd2UgbW92ZSBtb3N0IG9mIHRoZSBNYXRoTUwtc3BlY2lmaWMg
Y29kZQorICAgICAgICBpbnRvIGEgc2VwYXJhdGUgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQg
Y2xhc3MgdG8gZmFjaWxpdGF0ZSBmdXR1cmUgd29yayBhbmQgbWFpbnRlbmFuY2UuCisKKyAgICAg
ICAgTm8gbmV3IHRlc3RzLCBhbHJlYWR5IGNvdmVyZWQgYnkgZXhpc3RpbmcgdGVzdHMuCisKKyAg
ICAgICAgKiBDTWFrZUxpc3RzLnR4dDogQWRkIG5ldyBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVu
dCBtb2R1bGUuCisgICAgICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOiBE
aXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9uZS5jcHA6
IERpdHRvLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHA6IEFkZCBN
YXRoTUwgaGVhZGVycyBhbmQgY3JlYXRlIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LgorICAg
ICAgICAoV2ViQ29yZTo6Y3JlYXRlRnJvbVJlbmRlcmVyKTogQ3JlYXRlIEFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50IGZvciBNYXRoTUwgZWxlbWVudHMgYW5kCisgICAgICAgIGFub255bW91cyBv
cGVyYXRvcnMgY3JlYXRlZCBieSB0aGUgbWZlbmNlZCBlbGVtZW50LgorICAgICAgICAqIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwOiBBZGRlZC4gVGhpcyBjbGFz
cyBoYW5kbGVzIGFsbCB0aGUgTWF0aE1MCisgICAgICAgIGVsZW1lbnRzIGFzIHdlbGwgYXMgdGhl
IGFub255bW91cyBvcGVyYXRvcnMgY3JlYXRlZCBieSB0aGUgbWZlbmNlZCBlbGVtZW50LiBBIGJv
b2xlYW4gaXMKKyAgICAgICAgcGFzc2VkIHRvIHRoZSBjb25zdHJ1Y3RvciB0byBpbmRpY2F0ZSB3
aGV0aGVyIHdlIGFyZSBpbiB0aGUgbGF0dGVyIGNhc2UuCisgICAgICAgIChXZWJDb3JlOjpBY2Nl
c3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQpOgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6On5BY2Nlc3NpYmlsaXR5
TWF0aE1MRWxlbWVudCk6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudDo6Y3JlYXRlKToKKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSk6IE1vdmUgaGFuZGxpbmcgb2Ygc3BlY2lm
aWMKKyAgICAgICAgTWF0aEVsZW1lbnRSb2xlIGFuZCBEb2N1bWVudE1hdGhSb2xlIGhlcmUuCisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6dGV4dFVuZGVyRWxl
bWVudCk6IE1vdmUgcmV0cmlldmFsIG9mIHRleHQgZnJvbSB0aGUKKyAgICAgICAgYW5vbnltb3Vz
IG9wZXJhdG9ycyBoZXJlLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQ6OnN0cmluZ1ZhbHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudDo6aXNJZ25vcmVkRWxlbWVudFdpdGhpbk1hdGhUcmVlKTogTW92ZSB0
aGUgZGV0ZXJtaW5hdGlvbgorICAgICAgICBvZiBpZ25vcmVkIG1hdGggZWxlbWVudHMgaGVyZS4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhGcmFj
dGlvbik6IE1vdmVkIGZyb20gQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhGZW5jZWQpOiBEaXR0by4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhTdWJz
Y3JpcHRTdXBlcnNjcmlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFJvdyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFVuZGVyT3Zlcik6IERpdHRvLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFNxdWFyZVJvb3Qp
OiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojpp
c01hdGhUb2tlbik6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQ6OmlzTWF0aFJvb3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhPcGVyYXRvcik6IERpdHRvLgorICAgICAgICAoV2Vi
Q29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzQW5vbnltb3VzTWF0aE9wZXJhdG9y
KTogTW92ZSB0aGUgZGV0ZXJtaW5hdGlvbiBvZgorICAgICAgICBhbm9ueW1vdXMgb3BlcmF0b3Jz
IGhlcmUuIFdlIG5vdyBqdXN0IHJldHVybiB0aGUgYm9vbGVhbiBwYXNzZWQgYXQgY3JlYXRpb24g
dGltZS4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01h
dGhGZW5jZU9wZXJhdG9yKTogTW92ZWQgZnJvbQorICAgICAgICBBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Omlz
TWF0aFNlcGFyYXRvck9wZXJhdG9yKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVGV4dCk6IERpdHRvLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aE51bWJlcik6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aElkZW50aWZp
ZXIpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
Ojppc01hdGhNdWx0aXNjcmlwdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJp
bGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFRhYmxlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVGFibGVSb3cpOiBEaXR0by4KKyAg
ICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhUYWJsZUNl
bGwpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
Ojppc01hdGhTY3JpcHRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhNdWx0aXNjcmlwdE9iamVjdCk6IERpdHRvLgorICAg
ICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhSYWRpY2FuZE9i
amVjdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1l
bnQ6Om1hdGhSb290SW5kZXhPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vz
c2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoTnVtZXJhdG9yT2JqZWN0KTogRGl0dG8uCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aERlbm9taW5hdG9y
T2JqZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudDo6bWF0aFVuZGVyT2JqZWN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aE92ZXJPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdl
YkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoQmFzZU9iamVjdCk6IERpdHRv
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhTdWJz
Y3JpcHRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlNYXRo
TUxFbGVtZW50OjptYXRoU3VwZXJzY3JpcHRPYmplY3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoRmVuY2VkT3BlblN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhG
ZW5jZWRDbG9zZVN0cmluZyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQ6Om1hdGhQcmVzY3JpcHRzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3Jl
OjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzKTogRGl0dG8uCisg
ICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aExpbmVUaGlj
a25lc3MpOiBEaXR0by4KKyAgICAgICAgKiBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRo
TUxFbGVtZW50Lmg6IEFkZGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc0lnbm9yZWRFbGVtZW50V2l0aGluTWF0aFRyZWUpOiBUaGUgY2FzZXMgb2YKKyAg
ICAgICAgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQgb2JqZWN0cyBhcmUgbm93IGhhbmRsZWQg
aW4gdGhlIGRlcml2ZWQgY2xhc3MuIFdlIHJlbW92ZSB0aGUgY2FzZQorICAgICAgICBvZiB0ZXh0
IG5vZGUgc2luY2UgdGhlIE1hdGhNTCBjb2RlIG5vIGxvbmdlciBjcmVhdGVzIGFub255bW91cyB0
ZXh0IG5vZGVzIGFmdGVyIHIyMDI0MjAuCisgICAgICAgIEFub255bW91cyBibG9jayBpbnNlcnRl
ZCBpbnRvIFJlbmRlck1hdGhNTEJsb2NrcyB0byBob25vciBDU1MgcnVsZXMgYXJlIG5vdCBBY2Nl
c3NpYmlsaXR5TWF0aE1MRWxlbWVudHMKKyAgICAgICAgYW5kIGl0IGRvZXMgbm90IHNlZW0gc2Fm
ZSB0byBtb2RpZnkgQVhPYmplY3RDYWNoZTo6Y3JlYXRlRnJvbVJlbmRlcmVyIHRvIGZvcmNlIHRo
YXQuIEhlbmNlCisgICAgICAgIHdlIHN0aWxsIG5lZWQgdG8gYmUgaGFuZGxlIHRoZW0gaGVyZS4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnRleHRVbmRlckVs
ZW1lbnQpOiBUaGlzIGNvZGUgaXMgbW92ZWQgaW50byBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVu
dC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OnN0cmluZ1Zh
bHVlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
OjpkZXRlcm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRWxlbWVudCk6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhGcmFjdGlvbik6
IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojpp
c01hdGhGZW5jZWQpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJl
bmRlck9iamVjdDo6aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQpOiBEZWxldGVkLgorICAgICAg
ICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoUm93KTogRGVsZXRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFVu
ZGVyT3Zlcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVy
T2JqZWN0Ojppc01hdGhTcXVhcmVSb290KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFj
Y2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRva2VuKTogRGVsZXRlZC4KKyAgICAgICAg
KFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFJvb3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoT3Bl
cmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6aXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRmVuY2VPcGVyYXRvcik6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhT
ZXBhcmF0b3JPcGVyYXRvcik6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc01hdGhUZXh0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6
OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aE51bWJlcik6IERlbGV0ZWQuCisgICAg
ICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhJZGVudGlmaWVy
KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmlzTWF0aE11bHRpc2NyaXB0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2li
aWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRhYmxlKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRhYmxlUm93KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRhYmxl
Q2VsbCk6IERlbGV0ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2Jq
ZWN0Ojppc01hdGhTY3JpcHRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoTXVsdGlzY3JpcHRPYmplY3QpOiBEZWxldGVk
LgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFJhZGlj
YW5kT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6Om1hdGhSb290SW5kZXhPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29y
ZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE51bWVyYXRvck9iamVjdCk6IERlbGV0
ZWQuCisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoRGVu
b21pbmF0b3JPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bWF0aFVuZGVyT2JqZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNv
cmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhPdmVyT2JqZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhCYXNlT2Jq
ZWN0KTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmpl
Y3Q6Om1hdGhTdWJzY3JpcHRPYmplY3QpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFN1cGVyc2NyaXB0T2JqZWN0KTogRGVsZXRlZC4K
KyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhGZW5jZWRP
cGVuU3RyaW5nKTogRGVsZXRlZC4KKyAgICAgICAgKFdlYkNvcmU6OkFjY2Vzc2liaWxpdHlSZW5k
ZXJPYmplY3Q6Om1hdGhGZW5jZWRDbG9zZVN0cmluZyk6IERlbGV0ZWQuCisgICAgICAgIChXZWJD
b3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUHJlc2NyaXB0cyk6IERlbGV0ZWQu
CisgICAgICAgIChXZWJDb3JlOjpBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUG9zdHNj
cmlwdHMpOiBEZWxldGVkLgorICAgICAgICAoV2ViQ29yZTo6QWNjZXNzaWJpbGl0eVJlbmRlck9i
amVjdDo6bWF0aExpbmVUaGlja25lc3MpOiBEZWxldGVkLgorICAgICAgICAqIGFjY2Vzc2liaWxp
dHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oOiBSZW1vdmUgZGVjbGFyYXRpb25zIG9mIGZ1
bmN0aW9ucyB0aGF0IGFyZSBub3cKKyAgICAgICAgb3ZlcnJpZGRlbiBpbiBBY2Nlc3NpYmlsaXR5
TWF0aE1MRWxlbWVudC4gTWFrZSBpc0lnbm9yZWRFbGVtZW50V2l0aGluTWF0aFRyZWUgdmlydHVh
bCBzbyB0aGF0CisgICAgICAgIGl0IGNhbiBiZSByZWltcGxlbWVudGVkIGluIEFjY2Vzc2liaWxp
dHlNYXRoTUxFbGVtZW50LgorCiAyMDE2LTA2LTI4ICBCZW5qYW1pbiBQb3VsYWluICA8YmVuamFt
aW5Ad2Via2l0Lm9yZz4KIAogICAgICAgICBSZW5hbWUgQ2hpbGRyZW5BZmZlY3RlZEJ5QWN0aXZl
IHRvIFN0eWxlQWZmZWN0ZWRCeUFjdGl2ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01h
a2VMaXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCAyZjc3OGYy
NjlkYjhmNGRkYzkxNzkyOTRmYTRiNzg2NDk0MWZmOTIyLi45MWQyYWJmZGUzMTYyZDJjOTEzOGVh
Njg2ZDBmYzI2NGQyNjU1ZjlhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3Rz
LnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTA1NSw2ICsxMDU1
LDcgQEAgc2V0KFdlYkNvcmVfU09VUkNFUwogICAgIGFjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0
eUxpc3QuY3BwCiAgICAgYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5TGlzdEJveC5jcHAKICAg
ICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcAorICAgIGFjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwCiAgICAgYWNjZXNzaWJpbGl0
eS9BY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vz
c2liaWxpdHlNZW51TGlzdC5jcHAKICAgICBhY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNZW51
TGlzdE9wdGlvbi5jcHAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVw
cm9qL3Byb2plY3QucGJ4cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3By
b2plY3QucGJ4cHJvagppbmRleCA5ZGViNjFlM2YwYzcxYzFkZGFlYzI0NWViN2VkY2FlNjI1Y2Ux
YTM3Li5hODhiYmQ1ZTVkMTE0ZTk4Y2ZhYjhiNTBkMzE2NTI0NWRhMWMxMzkxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIv
U291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0yOTQs
NiArMjk0LDcgQEAKIAkJMDdBQzQ3MDExOTUyMTAyMTAwRUU5NzIzIC8qIElTT1ZUVEN1ZS5jcHAg
aW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAwN0FDNDZGRjE5
NTIxMDIxMDBFRTk3MjMgLyogSVNPVlRUQ3VlLmNwcCAqLzsgfTsKIAkJMDdBQzQ3MDIxOTUyMTAy
MTAwRUU5NzIzIC8qIElTT1ZUVEN1ZS5oIGluIEhlYWRlcnMgKi8gPSB7aXNhID0gUEJYQnVpbGRG
aWxlOyBmaWxlUmVmID0gMDdBQzQ3MDAxOTUyMTAyMTAwRUU5NzIzIC8qIElTT1ZUVEN1ZS5oICov
OyB9OwogCQkwN0IwMTEzRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29u
dHJvbHMuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
QjAxMTNFMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5oICov
OyB9OworCQkwN0IwQUJDRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDA3
QjBBQkNFMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oICov
OyB9OwogCQkwN0I0NDJENjE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0
ZUFWRi5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0I0NDJENDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAg
Ki87IH07CiAJCTA3QjQ0MkQ3MTY2QzcwQjAwMDU1NkNBRCAvKiBJbmJhbmRUZXh0VHJhY2tQcml2
YXRlQVZGLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAw
N0I0NDJENTE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oICov
OyBzZXR0aW5ncyA9IHtBVFRSSUJVVEVTID0gKFByaXZhdGUsICk7IH07IH07CiAJCTA3QjVBMkRC
MTQ2NDMyMEEwMEE4MUVDRSAvKiBKU1RleHRUcmFja0xpc3QuY3BwIGluIFNvdXJjZXMgKi8gPSB7
aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMDdCNUEyRDkxNDY0MzIwQTAwQTgxRUNFIC8q
IEpTVGV4dFRyYWNrTGlzdC5jcHAgKi87IH07CkBAIC0xNTIwLDYgKzE1MjEsNyBAQAogCQkzN0Y1
N0FCRTFBNTA3MjdFMDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwIGluIFNvdXJj
ZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk4MUNBQTIxMzE4MjJFQzAw
RDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCAqLzsgfTsKIAkJMzdGNTdBQkYxQTUw
NzI4MTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlMaXN0Qm94T3B0aW9uLmNwcCBpbiBTb3VyY2Vz
ICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODFDQUEzMTMxODIyRUMwMEQx
MkYyQSAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAgKi87IH07CiAJCTM3RjU3QUMw
MUE1MDcyODQwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5TWVkaWFDb250cm9scy5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSAyOTgxQ0FBNDEzMTgyMkVD
MDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwICovOyB9OworCQkzN0Y1
N0FCQzFBNTA3Mjg0MDA4NzZGOTggLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwIGlu
IFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gMjk4MUFCQzQxMzE4
MjJFQzAwRDEyRjJBIC8qIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcCAqLzsgfTsKIAkJ
MzdGNTdBQzExQTUwNzI4NzAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlOb2RlT2JqZWN0LmNwcCBp
biBTb3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODU3MDkyMTVD
QzUzMkQwMDYzNTVDRCAvKiBBY2Nlc3NpYmlsaXR5Tm9kZU9iamVjdC5jcHAgKi87IH07CiAJCTM3
RjU3QUMyMUE1MDcyOEIwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCBpbiBTb3Vy
Y2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDI5ODFDQUE1MTMxODIyRUMw
MEQxMkYyQSAvKiBBY2Nlc3NpYmlsaXR5T2JqZWN0LmNwcCAqLzsgfTsKIAkJMzdGNTdBQzMxQTUw
NzI4RjAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlQcm9ncmVzc0luZGljYXRvci5jcHAgaW4gU291
cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSBBNDA5Qzk4MjExNkQwRERE
MDA3MTk3QkQgLyogQWNjZXNzaWJpbGl0eVByb2dyZXNzSW5kaWNhdG9yLmNwcCAqLzsgfTsKQEAg
LTc3NTYsNiArNzc1OCw3IEBACiAJCTA3QUM0NkZGMTk1MjEwMjEwMEVFOTcyMyAvKiBJU09WVFRD
dWUuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxh
c3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gSVNPVlRUQ3VlLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdBQzQ3MDAxOTUyMTAyMTAwRUU5NzIz
IC8qIElTT1ZUVEN1ZS5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBJU09WVFRD
dWUuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdCMDExM0UxMDMyMjQyMjAwRkJE
QzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggKi8gPSB7aXNhID0gUEJYRmlsZVJl
ZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2Rl
LmMuaDsgcGF0aCA9IEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmg7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IH07CisJCTA3QjBBQkNFMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5
TWF0aE1MRWxlbWVudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkwN0I0
NDJENDE2NkM3MEIwMDA1NTZDQUQgLyogSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5jcHAgKi8g
PSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmls
ZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBJbmJhbmRUZXh0VHJhY2tQcml2YXRl
QVZGLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMDdCNDQyRDUxNjZDNzBCMDAw
NTU2Q0FEIC8qIEluYmFuZFRleHRUcmFja1ByaXZhdGVBVkYuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gSW5iYW5kVGV4dFRyYWNrUHJpdmF0ZUFWRi5oOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OwogCQkwN0I1QTJEOTE0NjQzMjBBMDBBODFFQ0UgLyogSlNUZXh0VHJhY2tM
aXN0LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTVGV4dFRyYWNr
TGlzdC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC04NjkxLDYgKzg2OTQsNyBA
QAogCQkyOTgxQ0FBMjEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eUxpc3RCb3guY3Bw
ICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUxpc3RCb3guY3BwOyBzb3VyY2VUcmVl
ID0gIjxncm91cD4iOyB9OwogCQkyOTgxQ0FBMzEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJp
bGl0eUxpc3RCb3hPcHRpb24uY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RL
bm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eUxp
c3RCb3hPcHRpb24uY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTgxQ0FBNDEz
MTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwICovID0ge2lz
YSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAu
Y3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwOyBzb3VyY2VUcmVlID0g
Ijxncm91cD4iOyB9OworCQkyOTgxQUJDNDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGxhc3RLbm93
bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQkyOTgxQ0FBNTEzMTgy
MkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eU9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IGxpbmVF
bmRpbmcgPSAwOyBwYXRoID0gQWNjZXNzaWJpbGl0eU9iamVjdC5jcHA7IHNvdXJjZVRyZWUgPSAi
PGdyb3VwPiI7IHhjTGFuZ3VhZ2VTcGVjaWZpY2F0aW9uSWRlbnRpZmllciA9IHhjb2RlLmxhbmcu
Y3BwOyB9OwogCQkyOTgxQ0FBNjEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eVJlbmRl
ck9iamVjdC5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJMjk4MUNBQTcxMzE4MjJFQzAwRDEy
RjJBIC8qIEFjY2Vzc2liaWxpdHlTY3JvbGxiYXIuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gQWNj
ZXNzaWJpbGl0eVNjcm9sbGJhci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NjcwOSw2ICsxNjcxMyw4IEBACiAJCQkJMjlBODEyMjQwRkJCOUMxRDAwNTEwMjkzIC8qIEFjY2Vz
c2liaWxpdHlMaXN0Qm94T3B0aW9uLmggKi8sCiAJCQkJMjk4MUNBQTQxMzE4MjJFQzAwRDEyRjJB
IC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCAqLywKIAkJCQkwN0IwMTEzRTEwMzIy
NDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuaCAqLywKKwkJCQkyOTgx
QUJDNDEzMTgyMkVDMDBEMTJGMkEgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwICov
LAorCQkJCTA3QjBBQkNFMTAzMjI0MjIwMEZCREMzMyAvKiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudC5oICovLAogCQkJCTc2Q0REMkVDMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5
TWVudUxpc3QuY3BwICovLAogCQkJCTc2Q0REMkVEMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3Np
YmlsaXR5TWVudUxpc3QuaCAqLywKIAkJCQk3NkNERDJGMDExMDNEQTY2MDA2ODA1MjEgLyogQWNj
ZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmNwcCAqLywKQEAgLTI1MjY5LDYgKzI1Mjc1LDcgQEAK
IAkJCQkyOUE4MTI0MzBGQkI5QzFEMDA1MTAyOTMgLyogQWNjZXNzaWJpbGl0eUxpc3RCb3guaCBp
biBIZWFkZXJzICovLAogCQkJCTI5QTgxMjQyMEZCQjlDMUQwMDUxMDI5MyAvKiBBY2Nlc3NpYmls
aXR5TGlzdEJveE9wdGlvbi5oIGluIEhlYWRlcnMgKi8sCiAJCQkJMDdCMDExM0YxMDMyMjQyMjAw
RkJEQzMzIC8qIEFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmggaW4gSGVhZGVycyAqLywKKwkJ
CQkwN0IwQUJDRjEwMzIyNDIyMDBGQkRDMzMgLyogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQu
aCBpbiBIZWFkZXJzICovLAogCQkJCTc2Q0REMkYzMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3Np
YmlsaXR5TWVudUxpc3QuaCBpbiBIZWFkZXJzICovLAogCQkJCTc2Q0REMkY3MTEwM0RBNjYwMDY4
MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RPcHRpb24uaCBpbiBIZWFkZXJzICovLAogCQkJ
CTc2Q0REMkY1MTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVudUxpc3RQb3B1cC5o
IGluIEhlYWRlcnMgKi8sCkBAIC0yOTI4NCw2ICsyOTI5MSw3IEBACiAJCQkJMzdGNTdBQkUxQTUw
NzI3RTAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCBpbiBTb3VyY2VzICovLAog
CQkJCTM3RjU3QUJGMUE1MDcyODEwMDg3NkY5OCAvKiBBY2Nlc3NpYmlsaXR5TGlzdEJveE9wdGlv
bi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQkzN0Y1N0FDMDFBNTA3Mjg0MDA4NzZGOTggLyogQWNj
ZXNzaWJpbGl0eU1lZGlhQ29udHJvbHMuY3BwIGluIFNvdXJjZXMgKi8sCisJCQkJMzdGNTdBQkMx
QTUwNzI4NDAwODc2Rjk4IC8qIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcCBpbiBTb3Vy
Y2VzICovLAogCQkJCTc2Q0REMkYyMTEwM0RBNjYwMDY4MDUyMSAvKiBBY2Nlc3NpYmlsaXR5TWVu
dUxpc3QuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJNzZDREQyRjYxMTAzREE2NjAwNjgwNTIxIC8q
IEFjY2Vzc2liaWxpdHlNZW51TGlzdE9wdGlvbi5jcHAgaW4gU291cmNlcyAqLywKIAkJCQk3NkNE
RDJGNDExMDNEQTY2MDA2ODA1MjEgLyogQWNjZXNzaWJpbGl0eU1lbnVMaXN0UG9wdXAuY3BwIGlu
IFNvdXJjZXMgKi8sCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FY
T2JqZWN0Q2FjaGUuY3BwIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BWE9iamVjdENh
Y2hlLmNwcAppbmRleCAzYTI1MjhjNTE3NGQ5OGU5MWEwYTRhY2Q5MjMzZDU4Y2M1NmU3MmMwLi40
MzliY2U5OTJiYjI0NTQzZDUwZmJhOWU3ZjY3MGYzZTNmOWFjYTY0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FYT2JqZWN0Q2FjaGUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQVhPYmplY3RDYWNoZS5jcHAKQEAgLTQxLDYgKzQxLDcgQEAK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TGlzdC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlM
aXN0Qm94LmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3RCb3hPcHRpb24uaCIKKyNpbmNs
dWRlICJBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxp
dHlNZWRpYUNvbnRyb2xzLmgiCiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0LmgiCiAj
aW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1lbnVMaXN0T3B0aW9uLmgiCkBAIC03MywxMCArNzQsMTIg
QEAKICNpbmNsdWRlICJIVE1MTWV0ZXJFbGVtZW50LmgiCiAjaW5jbHVkZSAiSFRNTE5hbWVzLmgi
CiAjaW5jbHVkZSAiSW5saW5lRWxlbWVudEJveC5oIgorI2luY2x1ZGUgIk1hdGhNTEVsZW1lbnQu
aCIKICNpbmNsdWRlICJQYWdlLmgiCiAjaW5jbHVkZSAiUmVuZGVyQXR0YWNobWVudC5oIgogI2lu
Y2x1ZGUgIlJlbmRlckxpbmVCcmVhay5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RCb3guaCIKKyNp
bmNsdWRlICJSZW5kZXJNYXRoTUxPcGVyYXRvci5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0
LmgiCiAjaW5jbHVkZSAiUmVuZGVyTWV0ZXIuaCIKICNpbmNsdWRlICJSZW5kZXJQcm9ncmVzcy5o
IgpAQCAtNDQ0LDYgKzQ0NywxNSBAQCBzdGF0aWMgUmVmPEFjY2Vzc2liaWxpdHlPYmplY3Q+IGNy
ZWF0ZUZyb21SZW5kZXJlcihSZW5kZXJPYmplY3QqIHJlbmRlcmVyKQogICAgIGlmIChpczxTVkdF
bGVtZW50Pihub2RlKSkKICAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxpdHlTVkdFbGVtZW50Ojpj
cmVhdGUocmVuZGVyZXIpOwogCisjaWYgRU5BQkxFKE1BVEhNTCkKKyAgICAvLyBUaGUgbWZlbmNl
ZCBlbGVtZW50IGNyZWF0ZXMgYW5vbnltb3VzIFJlbmRlck1hdGhNTE9wZXJhdG9ycyB3aGljaCBz
aG91bGQgYmUgdHJlYXRlZAorICAgIC8vIGFzIE1hdGhNTCBlbGVtZW50cyBhbmQgYXNzaWduZWQg
dGhlIE1hdGhFbGVtZW50Um9sZSBzbyB0aGF0IHBsYXRmb3JtIGxvZ2ljIHJlZ2FyZGluZworICAg
IC8vIGluY2x1c2lvbiBhbmQgcm9sZSBtYXBwaW5nIGlzIG5vdCBieXBhc3NlZC4KKyAgICBib29s
IGlzQW5vbnltb3VzT3BlcmF0b3IgPSByZW5kZXJlci0+aXNBbm9ueW1vdXMoKSAmJiBpczxSZW5k
ZXJNYXRoTUxPcGVyYXRvcj4oKnJlbmRlcmVyKTsKKyAgICBpZiAoaXNBbm9ueW1vdXNPcGVyYXRv
ciB8fCBpczxNYXRoTUxFbGVtZW50Pihub2RlKSkKKyAgICAgICAgcmV0dXJuIEFjY2Vzc2liaWxp
dHlNYXRoTUxFbGVtZW50OjpjcmVhdGUocmVuZGVyZXIsIGlzQW5vbnltb3VzT3BlcmF0b3IpOwor
I2VuZGlmCisKICAgICBpZiAoaXM8UmVuZGVyQm94TW9kZWxPYmplY3Q+KCpyZW5kZXJlcikpIHsK
ICAgICAgICAgUmVuZGVyQm94TW9kZWxPYmplY3QmIGNzc0JveCA9IGRvd25jYXN0PFJlbmRlckJv
eE1vZGVsT2JqZWN0PigqcmVuZGVyZXIpOwogICAgICAgICBpZiAoaXM8UmVuZGVyTGlzdEJveD4o
Y3NzQm94KSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUFsbEluT25lLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNz
aWJpbGl0eUFsbEluT25lLmNwcAppbmRleCBmNzU0ZTE0Nzg4NTUxMTkwZmU5ZDAzMzY4ODUxZjRk
ZjNmOTRmMWMzLi4yY2JlNDUwNWM3ZjMzZWY3NDY1YTJlMDI5OTRmZmFmMzk0ZGI0NjgzIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlBbGxJbk9u
ZS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5QWxs
SW5PbmUuY3BwCkBAIC0zNSw2ICszNSw3IEBACiAjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eUxpc3Qu
Y3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlMaXN0Qm94LmNwcCIKICNpbmNsdWRlICJBY2Nl
c3NpYmlsaXR5TGlzdEJveE9wdGlvbi5jcHAiCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2liaWxpdHlNZWRpYUNvbnRyb2xzLmNwcCIK
ICNpbmNsdWRlICJBY2Nlc3NpYmlsaXR5TWVudUxpc3QuY3BwIgogI2luY2x1ZGUgIkFjY2Vzc2li
aWxpdHlNZW51TGlzdE9wdGlvbi5jcHAiCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9hY2Nl
c3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQuY3BwCm5ldyBmaWxlIG1v
ZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAu
Ljk3ZDZlNmFjNjQ4NzBjNjA1ODRlMWUzOTIyZTZlODBiMTZhZTcxYTYKLS0tIC9kZXYvbnVsbAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50LmNwcApAQCAtMCwwICsxLDQ1OSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAxNiBJZ2Fs
aWEsIFMuTC4KKyAqIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24g
YW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBt
b2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNv
bmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0
aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICog
Mi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJv
dmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQg
dGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5k
L29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKgor
ICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBUSEUgQ09QWVJJR0hUIEhPTERFUlMgQU5E
IENPTlRSSUJVVE9SUworICogIkFTIElTIiBBTkQgQU5ZIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJS
QU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QKKyAqIExJTUlURUQgVE8sIFRIRSBJTVBMSUVEIFdB
UlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUgorICogQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIFRIRSBDT1BZUklH
SFQKKyAqIE9XTkVSIE9SIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLAorICogU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRFRCBUTywgUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsCisgKiBEQVRB
LCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkKKyAqIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNpZiBFTkFCTEUoTUFUSE1MKQorI2luY2x1
ZGUgIkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50LmgiCisKKyNpbmNsdWRlICJBWE9iamVjdENh
Y2hlLmgiCisjaW5jbHVkZSAiTWF0aE1MTmFtZXMuaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgewor
CitBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQo
UmVuZGVyT2JqZWN0KiByZW5kZXJlciwgYm9vbCBpc0Fub255bW91c09wZXJhdG9yKQorICAgIDog
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdChyZW5kZXJlcikKKyAgICAsIG1faXNBbm9ueW1vdXNP
cGVyYXRvcihpc0Fub255bW91c09wZXJhdG9yKQoreworfQorCitBY2Nlc3NpYmlsaXR5TWF0aE1M
RWxlbWVudDo6fkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50KCkKK3sKK30KKworUmVmPEFjY2Vz
c2liaWxpdHlNYXRoTUxFbGVtZW50PiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6Y3JlYXRl
KFJlbmRlck9iamVjdCogcmVuZGVyZXIsIGJvb2wgaXNBbm9ueW1vdXNPcGVyYXRvcikKK3sKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudChyZW5kZXJl
ciwgaXNBbm9ueW1vdXNPcGVyYXRvcikpOworfQorCitBY2Nlc3NpYmlsaXR5Um9sZSBBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudDo6ZGV0ZXJtaW5lQWNjZXNzaWJpbGl0eVJvbGUoKQoreworICAg
IGlmICghbV9yZW5kZXJlcikKKyAgICAgICAgcmV0dXJuIFVua25vd25Sb2xlOworCisgICAgaWYg
KChtX2FyaWFSb2xlID0gZGV0ZXJtaW5lQXJpYVJvbGVBdHRyaWJ1dGUoKSkgIT0gVW5rbm93blJv
bGUpCisgICAgICAgIHJldHVybiBtX2FyaWFSb2xlOworCisgICAgTm9kZSogbm9kZSA9IG1fcmVu
ZGVyZXItPm5vZGUoKTsKKyAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1lKE1hdGhNTE5h
bWVzOjptYXRoVGFnKSkKKyAgICAgICAgcmV0dXJuIERvY3VtZW50TWF0aFJvbGU7CisKKyAgICAv
LyBJdCdzIG5vdCBjbGVhciB3aGljaCByb2xlIGEgcGxhdGZvcm0gc2hvdWxkIGNob29zZSBmb3Ig
YSBtYXRoIGVsZW1lbnQuCisgICAgLy8gRGVjbGFyaW5nIGEgbWF0aCBlbGVtZW50IHJvbGUgc2hv
dWxkIGdpdmUgZmxleGliaWxpdHkgdG8gcGxhdGZvcm1zIHRvIGNob29zZS4KKyAgICByZXR1cm4g
TWF0aEVsZW1lbnRSb2xlOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6
OnRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlIG1vZGUp
IGNvbnN0Cit7CisgICAgaWYgKG1faXNBbm9ueW1vdXNPcGVyYXRvcikgeworICAgICAgICBVQ2hh
ciBvcGVyYXRvckNoYXIgPSBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKm1fcmVuZGVy
ZXIpLnRleHRDb250ZW50KCk7CisgICAgICAgIHJldHVybiBvcGVyYXRvckNoYXIgPyBTdHJpbmco
Jm9wZXJhdG9yQ2hhciwgMSkgOiBTdHJpbmcoKTsKKyAgICB9CisKKyAgICByZXR1cm4gQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6dGV4dFVuZGVyRWxlbWVudChtb2RlKTsKK30KKworU3RyaW5n
IEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjpzdHJpbmdWYWx1ZSgpIGNvbnN0Cit7CisgICAg
aWYgKG1faXNBbm9ueW1vdXNPcGVyYXRvcikKKyAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1l
bnQoKTsKKworICAgIHJldHVybiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjpzdHJpbmdWYWx1
ZSgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc0lnbm9yZWRFbGVt
ZW50V2l0aGluTWF0aFRyZWUoKSBjb25zdAoreworICAgIGlmIChtX2lzQW5vbnltb3VzT3BlcmF0
b3IpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIC8vIE9ubHkgbWF0aCBlbGVtZW50cyB0
aGF0IHdlIGV4cGxpY2l0bHkgcmVjb2duaXplIHNob3VsZCBiZSBpbmNsdWRlZAorICAgIC8vIFdl
IGRvbid0IHdhbnQgdGhpbmdzIGxpa2UgPG1zdHlsZT4gdG8gYXBwZWFyIGluIHRoZSB0cmVlLgor
ICAgIGlmIChpc01hdGhGcmFjdGlvbigpIHx8IGlzTWF0aEZlbmNlZCgpIHx8IGlzTWF0aFN1YnNj
cmlwdFN1cGVyc2NyaXB0KCkgfHwgaXNNYXRoUm93KCkKKyAgICAgICAgfHwgaXNNYXRoVW5kZXJP
dmVyKCkgfHwgaXNNYXRoUm9vdCgpIHx8IGlzTWF0aFRleHQoKSB8fCBpc01hdGhOdW1iZXIoKQor
ICAgICAgICB8fCBpc01hdGhPcGVyYXRvcigpIHx8IGlzTWF0aEZlbmNlT3BlcmF0b3IoKSB8fCBp
c01hdGhTZXBhcmF0b3JPcGVyYXRvcigpCisgICAgICAgIHx8IGlzTWF0aElkZW50aWZpZXIoKSB8
fCBpc01hdGhUYWJsZSgpIHx8IGlzTWF0aFRhYmxlUm93KCkgfHwgaXNNYXRoVGFibGVDZWxsKCkg
fHwgaXNNYXRoTXVsdGlzY3JpcHQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0
dXJuIHRydWU7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aEZy
YWN0aW9uKCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5p
c1JlbmRlck1hdGhNTEZyYWN0aW9uKCk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQ6OmlzTWF0aEZlbmNlZCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYg
bV9yZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxGZW5jZWQoKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSBjb25zdAorewor
ICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MU2NyaXB0
cygpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRo
TUxFbGVtZW50Ojppc01hdGhSb3coKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmVyICYm
IG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MUm93KCkgJiYgIWlzTWF0aFJvb3QoKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVW5kZXJPdmVyKCkgY29uc3QK
K3sKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTFVu
ZGVyT3ZlcigpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhT
cXVhcmVSb290KCkgY29uc3QKK3sKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVy
LT5pc1JlbmRlck1hdGhNTFNxdWFyZVJvb3QoKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0
aE1MRWxlbWVudDo6aXNNYXRoVG9rZW4oKSBjb25zdAoreworICAgIHJldHVybiBtX3JlbmRlcmVy
ICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MVG9rZW4oKTsKK30KKworYm9vbCBBY2Nlc3Np
YmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoUm9vdCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIG1f
cmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxSb290KCk7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aE9wZXJhdG9yKCkgY29uc3QKK3sKKyAg
ICBpZiAoIW1fcmVuZGVyZXIgfHwgIW1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MT3BlcmF0b3Io
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgcmV0dXJuIHRydWU7Cit9CisKK2Jvb2wg
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6OmlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkgY29u
c3QKK3sKKyAgICByZXR1cm4gbV9pc0Fub255bW91c09wZXJhdG9yOworfQorCitib29sIEFjY2Vz
c2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhGZW5jZU9wZXJhdG9yKCkgY29uc3QKK3sKKyAg
ICBpZiAoIWlzPFJlbmRlck1hdGhNTE9wZXJhdG9yPihtX3JlbmRlcmVyKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgcmV0dXJuIGRvd25jYXN0PFJlbmRlck1hdGhNTE9wZXJhdG9yPigq
bV9yZW5kZXJlcikuaGFzT3BlcmF0b3JGbGFnKE1hdGhNTE9wZXJhdG9yRGljdGlvbmFyeTo6RmVu
Y2UpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50Ojppc01hdGhTZXBhcmF0
b3JPcGVyYXRvcigpIGNvbnN0Cit7CisgICAgaWYgKCFpczxSZW5kZXJNYXRoTUxPcGVyYXRvcj4o
bV9yZW5kZXJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIHJldHVybiBkb3duY2Fz
dDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKm1fcmVuZGVyZXIpLmhhc09wZXJhdG9yRmxhZyhNYXRo
TUxPcGVyYXRvckRpY3Rpb25hcnk6OlNlcGFyYXRvcik7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0
eU1hdGhNTEVsZW1lbnQ6OmlzTWF0aFRleHQoKSBjb25zdAoreworICAgIHJldHVybiBub2RlKCkg
JiYgKG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRleHRUYWcpIHx8IGhhc1RhZ05h
bWUoTWF0aE1MTmFtZXM6Om1zVGFnKSk7Cit9CisKK2Jvb2wgQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQ6OmlzTWF0aE51bWJlcigpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5vZGUoKSAmJiBub2Rl
KCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1uVGFnKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoSWRlbnRpZmllcigpIGNvbnN0Cit7CisgICAgcmV0dXJu
IG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1pVGFnKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoTXVsdGlzY3JpcHQoKSBjb25z
dAoreworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVz
OjptbXVsdGlzY3JpcHRzVGFnKTsKK30KKworYm9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVu
dDo6aXNNYXRoVGFibGUoKSBjb25zdAoreworICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5o
YXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdGFibGVUYWcpOworfQorCitib29sIEFjY2Vzc2liaWxp
dHlNYXRoTUxFbGVtZW50Ojppc01hdGhUYWJsZVJvdygpIGNvbnN0Cit7CisgICAgcmV0dXJuIG5v
ZGUoKSAmJiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdHJUYWcpIHx8IGhhc1Rh
Z05hbWUoTWF0aE1MTmFtZXM6Om1sYWJlbGVkdHJUYWcpKTsKK30KKworYm9vbCBBY2Nlc3NpYmls
aXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoVGFibGVDZWxsKCkgY29uc3QKK3sKKyAgICByZXR1cm4g
bm9kZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRkVGFnKTsKK30KKwor
Ym9vbCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6aXNNYXRoU2NyaXB0T2JqZWN0KEFjY2Vz
c2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEFjY2Vzc2li
aWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIGlmICgh
cGFyZW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICByZXR1cm4gdHlwZSA9PSBTdWJz
Y3JpcHQgPyB0aGlzID09IHBhcmVudC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpIDogdGhpcyA9PSBw
YXJlbnQtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpOworfQorCitib29sIEFjY2Vzc2liaWxpdHlN
YXRoTUxFbGVtZW50Ojppc01hdGhNdWx0aXNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aE11
bHRpc2NyaXB0T2JqZWN0VHlwZSB0eXBlKSBjb25zdAoreworICAgIEFjY2Vzc2liaWxpdHlPYmpl
Y3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOworICAgIGlmICghcGFyZW50IHx8
ICFwYXJlbnQtPmlzTWF0aE11bHRpc2NyaXB0KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgIC8vIFRoZSBzY3JpcHRzIGluIGEgTWF0aE1MIDxtbXVsdGlzY3JpcHRzPiBlbGVtZW50IGNv
bnNpc3Qgb2Ygb25lIG9yIG1vcmUKKyAgICAvLyBzdWJzY3JpcHQsIHN1cGVyc2NyaXB0IHBhaXJz
LiBJbiBvcmRlciB0byBkZXRlcm1pbmUgaWYgdGhpcyBvYmplY3QgaXMKKyAgICAvLyBhIHNjcmlw
dGVkIHRva2VuLCB3ZSBuZWVkIHRvIGV4YW1pbmUgZWFjaCBzZXQgb2YgcGFpcnMgdG8gc2VlIGlm
IHRoZQorICAgIC8vIHRoaXMgdG9rZW4gaXMgcHJlc2VudCBhbmQgaW4gdGhlIHBvc2l0aW9uIGNv
cnJlc3BvbmRpbmcgd2l0aCB0aGUgdHlwZS4KKworICAgIEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlz
Y3JpcHRQYWlycyBwYWlyczsKKyAgICBpZiAodHlwZSA9PSBQcmVTdWJzY3JpcHQgfHwgdHlwZSA9
PSBQcmVTdXBlcnNjcmlwdCkKKyAgICAgICAgcGFyZW50LT5tYXRoUHJlc2NyaXB0cyhwYWlycyk7
CisgICAgZWxzZQorICAgICAgICBwYXJlbnQtPm1hdGhQb3N0c2NyaXB0cyhwYWlycyk7CisKKyAg
ICBmb3IgKGNvbnN0IGF1dG8mIHBhaXIgOiBwYWlycykgeworICAgICAgICBpZiAodGhpcyA9PSBw
YWlyLmZpcnN0KQorICAgICAgICAgICAgcmV0dXJuICh0eXBlID09IFByZVN1YnNjcmlwdCB8fCB0
eXBlID09IFBvc3RTdWJzY3JpcHQpOworICAgICAgICBpZiAodGhpcyA9PSBwYWlyLnNlY29uZCkK
KyAgICAgICAgICAgIHJldHVybiAodHlwZSA9PSBQcmVTdXBlcnNjcmlwdCB8fCB0eXBlID09IFBv
c3RTdXBlcnNjcmlwdCk7CisgICAgfQorCisgICAgcmV0dXJuIGZhbHNlOworfQorCitBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aFJhZGljYW5kT2Jq
ZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0aFJvb3QoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7
CisKKyAgICAvLyBGb3IgTWF0aFNxdWFyZVJvb3QsIHdlIGFjdHVhbGx5IHJldHVybiB0aGUgZmly
c3QgY2hpbGQgb2YgdGhlIGJhc2UuCisgICAgLy8gU2VlIGFsc28gaHR0cHM6Ly93ZWJraXQub3Jn
L2IvMTQ2NDUyCisgICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwor
ICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAxKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKwor
ICAgIHJldHVybiBjaGlsZHJlblswXS5nZXQoKTsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCog
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6Om1hdGhSb290SW5kZXhPYmplY3QoKQoreworICAg
IGlmICghaXNNYXRoUm9vdCgpIHx8IGlzTWF0aFNxdWFyZVJvb3QoKSkKKyAgICAgICAgcmV0dXJu
IG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7
CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCisgICAgICAgIHJldHVybiBudWxscHRyOwor
CisgICAgcmV0dXJuIGNoaWxkcmVuWzFdLmdldCgpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0
KiBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aE51bWVyYXRvck9iamVjdCgpCit7Cisg
ICAgaWYgKCFpc01hdGhGcmFjdGlvbigpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICBpZiAoY2hpbGRy
ZW4uc2l6ZSgpICE9IDIpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgcmV0dXJuIGNo
aWxkcmVuWzBdLmdldCgpOworfQorCitBY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5
TWF0aE1MRWxlbWVudDo6bWF0aERlbm9taW5hdG9yT2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0
aEZyYWN0aW9uKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgYXV0byYg
Y2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgIT0g
MikKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICByZXR1cm4gY2hpbGRyZW5bMV0uZ2V0
KCk7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
OjptYXRoVW5kZXJPYmplY3QoKQoreworICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJl
biA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxO
YW1lczo6bXVuZGVyVGFnKSB8fCBub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om11bmRl
cm92ZXJUYWcpKQorICAgICAgICByZXR1cm4gY2hpbGRyZW5bMV0uZ2V0KCk7CisKKyAgICByZXR1
cm4gbnVsbHB0cjsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQ6Om1hdGhPdmVyT2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0aFVuZGVyT3Zlcigp
IHx8ICFub2RlKCkpCisgICAgICAgIHJldHVybiBudWxscHRyOworCisgICAgY29uc3QgYXV0byYg
Y2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOworICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAy
KQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUo
TWF0aE1MTmFtZXM6Om1vdmVyVGFnKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzFdLmdldCgp
OworICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om11bmRlcm92ZXJUYWcp
KQorICAgICAgICByZXR1cm4gY2hpbGRyZW5bMl0uZ2V0KCk7CisKKyAgICByZXR1cm4gbnVsbHB0
cjsKK30KKworQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ6
Om1hdGhCYXNlT2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0
KCkgJiYgIWlzTWF0aFVuZGVyT3ZlcigpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpKQorICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKKworICAgIGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hp
bGRyZW4oKTsKKyAgICAvLyBUaGUgYmFzZSBvYmplY3QgaW4gcXVlc3Rpb24gaXMgYWx3YXlzIHRo
ZSBmaXJzdCBjaGlsZC4KKyAgICBpZiAoY2hpbGRyZW4uc2l6ZSgpID4gMCkKKyAgICAgICAgcmV0
dXJuIGNoaWxkcmVuWzBdLmdldCgpOworCisgICAgcmV0dXJuIG51bGxwdHI7Cit9CisKK0FjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50OjptYXRoU3Vic2NyaXB0
T2JqZWN0KCkKK3sKKyAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgfHwgIW5v
ZGUoKSkKKyAgICAgICAgcmV0dXJuIG51bGxwdHI7CisKKyAgICBjb25zdCBhdXRvJiBjaGlsZHJl
biA9IHRoaXMtPmNoaWxkcmVuKCk7CisgICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDIpCisgICAg
ICAgIHJldHVybiBudWxscHRyOworCisgICAgaWYgKG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxO
YW1lczo6bXN1YlRhZykgfHwgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptc3Vic3Vw
VGFnKSkKKyAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzFdLmdldCgpOworCisgICAgcmV0dXJuIG51
bGxwdHI7Cit9CisKK0FjY2Vzc2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50OjptYXRoU3VwZXJzY3JpcHRPYmplY3QoKQoreworICAgIGlmICghaXNNYXRoU3Vic2NyaXB0
U3VwZXJzY3JpcHQoKSB8fCAhbm9kZSgpKQorICAgICAgICByZXR1cm4gbnVsbHB0cjsKKworICAg
IGNvbnN0IGF1dG8mIGNoaWxkcmVuID0gdGhpcy0+Y2hpbGRyZW4oKTsKKyAgICB1bnNpZ25lZCBj
b3VudCA9IGNoaWxkcmVuLnNpemUoKTsKKworICAgIGlmIChjb3VudCA+PSAyICYmIG5vZGUoKS0+
aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXN1cFRhZykpCisgICAgICAgIHJldHVybiBjaGlsZHJl
blsxXS5nZXQoKTsKKworICAgIGlmIChjb3VudCA+PSAzICYmIG5vZGUoKS0+aGFzVGFnTmFtZShN
YXRoTUxOYW1lczo6bXN1YnN1cFRhZykpCisgICAgICAgIHJldHVybiBjaGlsZHJlblsyXS5nZXQo
KTsKKworICAgIHJldHVybiBudWxscHRyOworfQorCitTdHJpbmcgQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQ6Om1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAoIWlzTWF0
aEZlbmNlZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4gZ2V0QXR0
cmlidXRlKE1hdGhNTE5hbWVzOjpvcGVuQXR0cik7Cit9CisKK1N0cmluZyBBY2Nlc3NpYmlsaXR5
TWF0aE1MRWxlbWVudDo6bWF0aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3QKK3sKKyAgICBpZiAo
IWlzTWF0aEZlbmNlZCgpKQorICAgICAgICByZXR1cm4gU3RyaW5nKCk7CisKKyAgICByZXR1cm4g
Z2V0QXR0cmlidXRlKE1hdGhNTE5hbWVzOjpjbG9zZUF0dHIpOworfQorCit2b2lkIEFjY2Vzc2li
aWxpdHlNYXRoTUxFbGVtZW50OjptYXRoUHJlc2NyaXB0cyhBY2Nlc3NpYmlsaXR5TWF0aE11bHRp
c2NyaXB0UGFpcnMmIHByZXNjcmlwdHMpCit7CisgICAgaWYgKCFpc01hdGhNdWx0aXNjcmlwdCgp
IHx8ICFub2RlKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGJvb2wgZm91bmRQcmVzY3JpcHQg
PSBmYWxzZTsKKyAgICBzdGQ6OnBhaXI8QWNjZXNzaWJpbGl0eU9iamVjdCosIEFjY2Vzc2liaWxp
dHlPYmplY3QqPiBwcmVzY3JpcHRQYWlyOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlKCkt
PmZpcnN0Q2hpbGQoKTsgY2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAg
ICAgICAgaWYgKGZvdW5kUHJlc2NyaXB0KSB7CisgICAgICAgICAgICBBY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBheENoaWxkID0gYXhPYmplY3RDYWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7CisgICAg
ICAgICAgICBpZiAoYXhDaGlsZCAmJiBheENoaWxkLT5pc01hdGhFbGVtZW50KCkpIHsKKyAgICAg
ICAgICAgICAgICBpZiAoIXByZXNjcmlwdFBhaXIuZmlyc3QpCisgICAgICAgICAgICAgICAgICAg
IHByZXNjcmlwdFBhaXIuZmlyc3QgPSBheENoaWxkOworICAgICAgICAgICAgICAgIGVsc2Ugewor
ICAgICAgICAgICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29uZCA9IGF4Q2hpbGQ7CisgICAg
ICAgICAgICAgICAgICAgIHByZXNjcmlwdHMuYXBwZW5kKHByZXNjcmlwdFBhaXIpOworICAgICAg
ICAgICAgICAgICAgICBwcmVzY3JpcHRQYWlyLmZpcnN0ID0gbnVsbHB0cjsKKyAgICAgICAgICAg
ICAgICAgICAgcHJlc2NyaXB0UGFpci5zZWNvbmQgPSBudWxscHRyOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBlbHNlIGlmIChjaGlsZC0+aGFzVGFnTmFtZShN
YXRoTUxOYW1lczo6bXByZXNjcmlwdHNUYWcpKQorICAgICAgICAgICAgZm91bmRQcmVzY3JpcHQg
PSB0cnVlOworICAgIH0KKworICAgIC8vIEhhbmRsZSB0aGUgb2RkIG51bWJlciBvZiBwcmUgc2Ny
aXB0cyBjYXNlLgorICAgIGlmIChwcmVzY3JpcHRQYWlyLmZpcnN0KQorICAgICAgICBwcmVzY3Jp
cHRzLmFwcGVuZChwcmVzY3JpcHRQYWlyKTsKK30KKwordm9pZCBBY2Nlc3NpYmlsaXR5TWF0aE1M
RWxlbWVudDo6bWF0aFBvc3RzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3JpcHRQYWly
cyYgcG9zdHNjcmlwdHMpCit7CisgICAgaWYgKCFpc01hdGhNdWx0aXNjcmlwdCgpIHx8ICFub2Rl
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIC8vIEluIE11bHRpc2NyaXB0cywgdGhlIHBvc3Qt
c2NyaXB0IGVsZW1lbnRzIHN0YXJ0IGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50ICh3aGljaCBpcyB0
aGUgYmFzZSkKKyAgICAvLyBhbmQgY29udGludWUgdW50aWwgYSA8bXByZXNjcmlwdHM+IHRhZyBp
cyBmb3VuZAorICAgIHN0ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQWNjZXNzaWJpbGl0
eU9iamVjdCo+IHBvc3RzY3JpcHRQYWlyOworICAgIGJvb2wgZm91bmRCYXNlRWxlbWVudCA9IGZh
bHNlOworICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsgY2hpbGQ7
IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKKyAgICAgICAgaWYgKGNoaWxkLT5oYXNU
YWdOYW1lKE1hdGhNTE5hbWVzOjptcHJlc2NyaXB0c1RhZykpCisgICAgICAgICAgICBicmVhazsK
KworICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheENoaWxkID0gYXhPYmplY3RDYWNoZSgp
LT5nZXRPckNyZWF0ZShjaGlsZCk7CisgICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hpbGQtPmlz
TWF0aEVsZW1lbnQoKSkgeworICAgICAgICAgICAgaWYgKCFmb3VuZEJhc2VFbGVtZW50KQorICAg
ICAgICAgICAgICAgIGZvdW5kQmFzZUVsZW1lbnQgPSB0cnVlOworICAgICAgICAgICAgZWxzZSBp
ZiAoIXBvc3RzY3JpcHRQYWlyLmZpcnN0KQorICAgICAgICAgICAgICAgIHBvc3RzY3JpcHRQYWly
LmZpcnN0ID0gYXhDaGlsZDsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHBv
c3RzY3JpcHRQYWlyLnNlY29uZCA9IGF4Q2hpbGQ7CisgICAgICAgICAgICAgICAgcG9zdHNjcmlw
dHMuYXBwZW5kKHBvc3RzY3JpcHRQYWlyKTsKKyAgICAgICAgICAgICAgICBwb3N0c2NyaXB0UGFp
ci5maXJzdCA9IG51bGxwdHI7CisgICAgICAgICAgICAgICAgcG9zdHNjcmlwdFBhaXIuc2Vjb25k
ID0gbnVsbHB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIC8vIEhh
bmRsZSB0aGUgb2RkIG51bWJlciBvZiBwb3N0IHNjcmlwdHMgY2FzZS4KKyAgICBpZiAocG9zdHNj
cmlwdFBhaXIuZmlyc3QpCisgICAgICAgIHBvc3RzY3JpcHRzLmFwcGVuZChwb3N0c2NyaXB0UGFp
cik7Cit9CisKK2ludCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudDo6bWF0aExpbmVUaGlja25l
c3MoKSBjb25zdAoreworICAgIGlmICghaXM8UmVuZGVyTWF0aE1MRnJhY3Rpb24+KG1fcmVuZGVy
ZXIpKQorICAgICAgICByZXR1cm4gLTE7CisKKyAgICByZXR1cm4gZG93bmNhc3Q8UmVuZGVyTWF0
aE1MRnJhY3Rpb24+KCptX3JlbmRlcmVyKS5yZWxhdGl2ZUxpbmVUaGlja25lc3MoKTsKK30KKwor
fSAvLyBuYW1lc3BhY2UgV2ViQ29yZQorCisjZW5kaWYgLy8gRU5BQkxFKE1BVEhNTCkKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eU1hdGhN
TEVsZW1lbnQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi43MmE2OTU4YmE4YjVhY2U0NWZjMjA0ZWM2NWRmMWMwOTc5
MmYwODgyCi0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvYWNjZXNzaWJpbGl0eS9B
Y2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudC5oCkBAIC0wLDAgKzEsMTE5IEBACisvKgorICogQ29w
eXJpZ2h0IChDKSAyMDE2IElnYWxpYSwgUy5MLgorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVk
aXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmln
aHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11
c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAg
ICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhl
IGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFRIRSBD
T1BZUklHSFQgSE9MREVSUyBBTkQgQ09OVFJJQlVUT1JTCisgKiAiQVMgSVMiIEFORCBBTlkgRVhQ
UkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVAorICogTElNSVRF
RCBUTywgVEhFIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5F
U1MgRk9SCisgKiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gSU4gTk8gRVZF
TlQgU0hBTEwgVEhFIENPUFlSSUdIVAorICogT1dORVIgT1IgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsCisgKiBTUEVDSUFMLCBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UCisgKiBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwKKyAqIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWQorICogVEhFT1JZIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQWNjZXNzaWJpbGl0eU1hdGhNTEVs
ZW1lbnRfaAorI2RlZmluZSBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudF9oCisKKyNpZiBFTkFC
TEUoTUFUSE1MKQorCisjaW5jbHVkZSAiQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oIgorCisj
aW5jbHVkZSAiUmVuZGVyTWF0aE1MQmxvY2suaCIKKyNpbmNsdWRlICJSZW5kZXJNYXRoTUxGcmFj
dGlvbi5oIgorI2luY2x1ZGUgIlJlbmRlck1hdGhNTE1hdGguaCIKKyNpbmNsdWRlICJSZW5kZXJN
YXRoTUxPcGVyYXRvci5oIgorI2luY2x1ZGUgIlJlbmRlck1hdGhNTFJvb3QuaCIKKworbmFtZXNw
YWNlIFdlYkNvcmUgeworCitjbGFzcyBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxlbWVudCA6IHB1Ymxp
YyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0IHsKKworcHVibGljOgorICAgIHN0YXRpYyBSZWY8
QWNjZXNzaWJpbGl0eU1hdGhNTEVsZW1lbnQ+IGNyZWF0ZShSZW5kZXJPYmplY3QqLCBib29sIGlz
QW5vbnltb3VzT3BlcmF0b3IpOworICAgIHZpcnR1YWwgfkFjY2Vzc2liaWxpdHlNYXRoTUxFbGVt
ZW50KCk7CisKK3Byb3RlY3RlZDoKKyAgICBleHBsaWNpdCBBY2Nlc3NpYmlsaXR5TWF0aE1MRWxl
bWVudChSZW5kZXJPYmplY3QqLCBib29sIGlzQW5vbnltb3VzT3BlcmF0b3IpOworCitwcml2YXRl
OgorICAgIEFjY2Vzc2liaWxpdHlSb2xlIGRldGVybWluZUFjY2Vzc2liaWxpdHlSb2xlKCkgZmlu
YWw7CisgICAgU3RyaW5nIHRleHRVbmRlckVsZW1lbnQoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVs
ZW1lbnRNb2RlID0gQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKCkpIGNvbnN0IG92
ZXJyaWRlOworICAgIFN0cmluZyBzdHJpbmdWYWx1ZSgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJv
b2wgaXNJZ25vcmVkRWxlbWVudFdpdGhpbk1hdGhUcmVlKCkgY29uc3QgZmluYWw7CisKKyAgICBi
b29sIGlzTWF0aEVsZW1lbnQoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CisKKyAgICBi
b29sIGlzTWF0aEZyYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhGZW5j
ZWQoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0
KCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhSb3coKSBjb25zdCBvdmVycmlkZTsK
KyAgICBib29sIGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNN
YXRoUm9vdCgpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoU3F1YXJlUm9vdCgpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlOworICAg
IGJvb2wgaXNNYXRoTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhPcGVy
YXRvcigpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigpIGNv
bnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBjb25zdCBv
dmVycmlkZTsKKyAgICBib29sIGlzTWF0aElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhUYWJs
ZVJvdygpIGNvbnN0IG92ZXJyaWRlOworICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkgY29uc3Qg
b3ZlcnJpZGU7CisgICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IG92ZXJyaWRlOwor
ICAgIGJvb2wgaXNNYXRoVG9rZW4oKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzTWF0aFNj
cmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJy
aWRlOworICAgIGJvb2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1hdGhN
dWx0aXNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOworCisgICAgLy8gR2VuZXJpYyBj
b21wb25lbnRzLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1hdGhCYXNlT2JqZWN0KCkgb3Zl
cnJpZGU7CisKKyAgICAvLyBSb290IGNvbXBvbmVudHMuCisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbWF0aFJhZGljYW5kT2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eU9iamVj
dCogbWF0aFJvb3RJbmRleE9iamVjdCgpIG92ZXJyaWRlOworCisgICAgLy8gRnJhY3Rpb24gY29t
cG9uZW50cy4KKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoTnVtZXJhdG9yT2JqZWN0KCkg
b3ZlcnJpZGU7CisgICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0aERlbm9taW5hdG9yT2JqZWN0
KCkgb3ZlcnJpZGU7CisKKyAgICAvLyBVbmRlciBvdmVyIGNvbXBvbmVudHMuCisgICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogbWF0aFVuZGVyT2JqZWN0KCkgb3ZlcnJpZGU7CisgICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogbWF0aE92ZXJPYmplY3QoKSBvdmVycmlkZTsKKworICAgIC8vIFN1YnNjcmlw
dC9zdXBlcnNjcmlwdCBjb21wb25lbnRzLgorICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIG1hdGhT
dWJzY3JpcHRPYmplY3QoKSBvdmVycmlkZTsKKyAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRo
U3VwZXJzY3JpcHRPYmplY3QoKSBvdmVycmlkZTsKKworICAgIC8vIEZlbmNlZCBjb21wb25lbnRz
LgorICAgIFN0cmluZyBtYXRoRmVuY2VkT3BlblN0cmluZygpIGNvbnN0IG92ZXJyaWRlOworICAg
IFN0cmluZyBtYXRoRmVuY2VkQ2xvc2VTdHJpbmcoKSBjb25zdCBvdmVycmlkZTsKKyAgICBpbnQg
bWF0aExpbmVUaGlja25lc3MoKSBjb25zdCBvdmVycmlkZTsKKyAgICBib29sIGlzQW5vbnltb3Vz
TWF0aE9wZXJhdG9yKCkgY29uc3Qgb3ZlcnJpZGU7CisKKyAgICAvLyBNdWx0aXNjcmlwdHMgY29t
cG9uZW50cy4KKyAgICB2b2lkIG1hdGhQcmVzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlz
Y3JpcHRQYWlycyYpIG92ZXJyaWRlOworICAgIHZvaWQgbWF0aFBvc3RzY3JpcHRzKEFjY2Vzc2li
aWxpdHlNYXRoTXVsdGlzY3JpcHRQYWlycyYpIG92ZXJyaWRlOworCisgICAgYm9vbCBtX2lzQW5v
bnltb3VzT3BlcmF0b3I7Cit9OworCisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworU1BFQ0lB
TElaRV9UWVBFX1RSQUlUU19BQ0NFU1NJQklMSVRZKEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50
LCBpc01hdGhFbGVtZW50KCkpCisKKyNlbmRpZiAvLyBFTkFCTEUoTUFUSE1MKQorI2VuZGlmIC8v
IEFjY2Vzc2liaWxpdHlNYXRoTUxFbGVtZW50X2gKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3QuY3BwCmluZGV4IDZl
MTZhZTJhOTk2ODA5MGIyODg5Yjc1ZDFjZGUwNzM3NmQyZTc0MzEuLjk2MzMzZGY3ZGMzMjI4MDY2
MDk2YTkwNThmZjA3YTA5NWZjYjRmMDAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2FjY2Vz
c2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvYWNjZXNzaWJpbGl0eS9BY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0LmNwcApAQCAtNjYsNyAr
NjYsNiBAQAogI2luY2x1ZGUgIkhpdFRlc3RSZXN1bHQuaCIKICNpbmNsdWRlICJJbWFnZS5oIgog
I2luY2x1ZGUgIkxvY2FsaXplZFN0cmluZ3MuaCIKLSNpbmNsdWRlICJNYXRoTUxOYW1lcy5oIgog
I2luY2x1ZGUgIk5vZGVMaXN0LmgiCiAjaW5jbHVkZSAiUGFnZS5oIgogI2luY2x1ZGUgIlByb2dy
ZXNzVHJhY2tlci5oIgpAQCAtODMsMTAgKzgyLDYgQEAKICNpbmNsdWRlICJSZW5kZXJMaXN0SXRl
bS5oIgogI2luY2x1ZGUgIlJlbmRlckxpc3RNYXJrZXIuaCIKICNpbmNsdWRlICJSZW5kZXJNYXRo
TUxCbG9jay5oIgotI2luY2x1ZGUgIlJlbmRlck1hdGhNTEZyYWN0aW9uLmgiCi0jaW5jbHVkZSAi
UmVuZGVyTWF0aE1MTWF0aC5oIgotI2luY2x1ZGUgIlJlbmRlck1hdGhNTE9wZXJhdG9yLmgiCi0j
aW5jbHVkZSAiUmVuZGVyTWF0aE1MUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlck1lbnVMaXN0Lmgi
CiAjaW5jbHVkZSAiUmVuZGVyU1ZHUm9vdC5oIgogI2luY2x1ZGUgIlJlbmRlclNWR1NoYXBlLmgi
CkBAIC02MzEsMTMgKzYyNiw2IEBAIFN0cmluZyBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojp0
ZXh0VW5kZXJFbGVtZW50KEFjY2Vzc2liaWxpdHlUZXh0VW5kZXJFbGVtZW50CiAKICAgICBib29s
IGlzUmVuZGVyVGV4dCA9IGlzPFJlbmRlclRleHQ+KCptX3JlbmRlcmVyKTsKIAotI2lmIEVOQUJM
RShNQVRITUwpCi0gICAgaWYgKGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkpIHsKLSAgICAgICAg
VUNoYXIgb3BlcmF0b3JDaGFyID0gZG93bmNhc3Q8UmVuZGVyTWF0aE1MT3BlcmF0b3I+KCptX3Jl
bmRlcmVyKS50ZXh0Q29udGVudCgpOwotICAgICAgICByZXR1cm4gb3BlcmF0b3JDaGFyID8gU3Ry
aW5nKCZvcGVyYXRvckNoYXIsIDEpIDogU3RyaW5nKCk7Ci0gICAgfQotI2VuZGlmCi0KICAgICBp
ZiAoc2hvdWxkR2V0VGV4dEZyb21Ob2RlKG1vZGUpKQogICAgICAgICByZXR1cm4gQWNjZXNzaWJp
bGl0eU5vZGVPYmplY3Q6OnRleHRVbmRlckVsZW1lbnQobW9kZSk7CiAKQEAgLTc2MSw5ICs3NDks
NiBAQCBTdHJpbmcgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c3RyaW5nVmFsdWUoKSBjb25z
dAogICAgIGlmIChpczxSZW5kZXJUZXh0PigqbV9yZW5kZXJlcikpCiAgICAgICAgIHJldHVybiB0
ZXh0VW5kZXJFbGVtZW50KCk7CiAKLSAgICBpZiAoaXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IoKSkK
LSAgICAgICAgcmV0dXJuIHRleHRVbmRlckVsZW1lbnQoKTsKLSAgICAKICAgICBpZiAoaXM8UmVu
ZGVyTWVudUxpc3Q+KGNzc0JveCkpIHsKICAgICAgICAgLy8gUmVuZGVyTWVudUxpc3Qgd2lsbCBn
byBzdHJhaWdodCB0byB0aGUgdGV4dCgpIG9mIGl0cyBzZWxlY3RlZCBpdGVtLgogICAgICAgICAv
LyBUaGlzIGhhcyB0byBiZSBvdmVycmlkZGVuIGluIHRoZSBjYXNlIHdoZXJlIHRoZSBzZWxlY3Rl
ZCBpdGVtIGhhcyBhbiBBUklBIGxhYmVsLgpAQCAtMjYyOSwxNSArMjYxNCw2IEBAIEFjY2Vzc2li
aWxpdHlSb2xlIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmRldGVybWluZUFjY2Vzc2liaWxp
dHlSb2xlKCkKICAgICBpZiAoaXNTdHlsZUZvcm1hdEdyb3VwKCkpCiAgICAgICAgIHJldHVybiBp
czxSZW5kZXJJbmxpbmU+KCptX3JlbmRlcmVyKSA/IElubGluZVJvbGUgOiBHcm91cFJvbGU7CiAg
ICAgCi0jaWYgRU5BQkxFKE1BVEhNTCkKLSAgICBpZiAobm9kZSAmJiBub2RlLT5oYXNUYWdOYW1l
KE1hdGhNTE5hbWVzOjptYXRoVGFnKSkKLSAgICAgICAgcmV0dXJuIERvY3VtZW50TWF0aFJvbGU7
Ci0jZW5kaWYKLSAgICAvLyBJdCdzIG5vdCBjbGVhciB3aGljaCByb2xlIGEgcGxhdGZvcm0gc2hv
dWxkIGNob29zZSBmb3IgYSBtYXRoIGVsZW1lbnQuCi0gICAgLy8gRGVjbGFyaW5nIGEgbWF0aCBl
bGVtZW50IHJvbGUgc2hvdWxkIGdpdmUgZmxleGliaWxpdHkgdG8gcGxhdGZvcm1zIHRvIGNob29z
ZS4KLSAgICBpZiAoaXNNYXRoRWxlbWVudCgpKQotICAgICAgICByZXR1cm4gTWF0aEVsZW1lbnRS
b2xlOwotICAgIAogICAgIGlmIChub2RlICYmIG5vZGUtPmhhc1RhZ05hbWUoZGRUYWcpKQogICAg
ICAgICByZXR1cm4gRGVzY3JpcHRpb25MaXN0RGV0YWlsUm9sZTsKICAgICAKQEAgLTM2MDYsMzk1
ICszNTgyLDEyIEBAIHZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6c2Nyb2xsVG8oY29u
c3QgSW50UG9pbnQmIHBvaW50KSBjb25zdAogfQogCiAjaWYgRU5BQkxFKE1BVEhNTCkKLWJvb2wg
QWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRWxlbWVudCgpIGNvbnN0Ci17Ci0gICAg
aWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgCi0gICAgLy8gVGhl
IG1mZW5jZWQgZWxlbWVudCBjcmVhdGVzIGFub255bW91cyBSZW5kZXJNYXRoTUxPcGVyYXRvcnMg
d2hpY2ggc2hvdWxkIGJlIHRyZWF0ZWQKLSAgICAvLyBhcyBNYXRoTUwgZWxlbWVudHMgYW5kIGFz
c2lnbmVkIHRoZSBNYXRoRWxlbWVudFJvbGUgc28gdGhhdCBwbGF0Zm9ybSBsb2dpYyByZWdhcmRp
bmcKLSAgICAvLyBpbmNsdXNpb24gYW5kIHJvbGUgbWFwcGluZyBpcyBub3QgYnlwYXNzZWQuCi0g
ICAgaWYgKGlzQW5vbnltb3VzTWF0aE9wZXJhdG9yKCkpCi0gICAgICAgIHJldHVybiB0cnVlOwot
Ci0gICAgcmV0dXJuIGlzPE1hdGhNTEVsZW1lbnQ+KG5vZGUoKSk7Ci19Ci0KLWJvb2wgQWNjZXNz
aWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRnJhY3Rpb24oKSBjb25zdAotewotICAgIHJldHVy
biBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MRnJhY3Rpb24oKTsKLX0K
LQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhGZW5jZWQoKSBjb25zdAot
ewotICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1MRmVu
Y2VkKCk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoU3Vic2Ny
aXB0U3VwZXJzY3JpcHQoKSBjb25zdAotewotICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVu
ZGVyZXItPmlzUmVuZGVyTWF0aE1MU2NyaXB0cygpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpOwot
fQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFJvdygpIGNvbnN0Ci17
Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9yZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxSb3co
KSAmJiAhaXNNYXRoUm9vdCgpOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6
OmlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIG1fcmVuZGVyZXIgJiYgbV9y
ZW5kZXJlci0+aXNSZW5kZXJNYXRoTUxVbmRlck92ZXIoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmls
aXR5UmVuZGVyT2JqZWN0Ojppc01hdGhTcXVhcmVSb290KCkgY29uc3QKLXsKLSAgICByZXR1cm4g
bV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRlck1hdGhNTFNxdWFyZVJvb3QoKTsKLX0K
LSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoVG9rZW4oKSBjb25z
dAotewotICAgIHJldHVybiBtX3JlbmRlcmVyICYmIG1fcmVuZGVyZXItPmlzUmVuZGVyTWF0aE1M
VG9rZW4oKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01hdGhSb290
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRlcmVyLT5pc1JlbmRl
ck1hdGhNTFJvb3QoKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01h
dGhPcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFtX3JlbmRlcmVyIHx8ICFtX3JlbmRlcmVy
LT5pc1JlbmRlck1hdGhNTE9wZXJhdG9yKCkpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAg
IHJldHVybiB0cnVlOwotfQotCi1ib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzQW5v
bnltb3VzTWF0aE9wZXJhdG9yKCkgY29uc3QKLXsKLSAgICByZXR1cm4gaXM8UmVuZGVyTWF0aE1M
T3BlcmF0b3I+KG1fcmVuZGVyZXIpICYmIG1fcmVuZGVyZXItPmlzQW5vbnltb3VzKCk7Ci19Ci0K
LWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoRmVuY2VPcGVyYXRvcigpIGNv
bnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJNYXRoTUxPcGVyYXRvcj4obV9yZW5kZXJlcikpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVybiBkb3duY2FzdDxSZW5kZXJNYXRoTUxP
cGVyYXRvcj4oKm1fcmVuZGVyZXIpLmhhc09wZXJhdG9yRmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rp
b25hcnk6OkZlbmNlKTsKLX0KLQotYm9vbCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0Ojppc01h
dGhTZXBhcmF0b3JPcGVyYXRvcigpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJNYXRoTUxP
cGVyYXRvcj4obV9yZW5kZXJlcikpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIHJldHVy
biBkb3duY2FzdDxSZW5kZXJNYXRoTUxPcGVyYXRvcj4oKm1fcmVuZGVyZXIpLmhhc09wZXJhdG9y
RmxhZyhNYXRoTUxPcGVyYXRvckRpY3Rpb25hcnk6OlNlcGFyYXRvcik7Ci19Ci0gICAgCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRleHQoKSBjb25zdAotewotICAgIHJl
dHVybiBub2RlKCkgJiYgKG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXRleHRUYWcp
IHx8IGhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1zVGFnKSk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJp
bGl0eVJlbmRlck9iamVjdDo6aXNNYXRoTnVtYmVyKCkgY29uc3QKLXsKLSAgICByZXR1cm4gbm9k
ZSgpICYmIG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bW5UYWcpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aElkZW50aWZpZXIoKSBjb25zdAotewot
ICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptaVRh
Zyk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoTXVsdGlzY3Jp
cHQoKSBjb25zdAotewotICAgIHJldHVybiBub2RlKCkgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1h
dGhNTE5hbWVzOjptbXVsdGlzY3JpcHRzVGFnKTsKLX0KLSAgICAKLWJvb2wgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6aXNNYXRoVGFibGUoKSBjb25zdAotewotICAgIHJldHVybiBub2RlKCkg
JiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdGFibGVUYWcpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRhYmxlUm93KCkgY29uc3QKLXsKLSAg
ICByZXR1cm4gbm9kZSgpICYmIChub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10clRh
ZykgfHwgaGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bWxhYmVsZWR0clRhZykpOwotfQotCi1ib29s
IEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aFRhYmxlQ2VsbCgpIGNvbnN0Ci17Ci0g
ICAgcmV0dXJuIG5vZGUoKSAmJiBub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om10ZFRh
Zyk7Ci19Ci0KLWJvb2wgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6aXNNYXRoU2NyaXB0T2Jq
ZWN0KEFjY2Vzc2liaWxpdHlNYXRoU2NyaXB0T2JqZWN0VHlwZSB0eXBlKSBjb25zdAotewotICAg
IEFjY2Vzc2liaWxpdHlPYmplY3QqIHBhcmVudCA9IHBhcmVudE9iamVjdFVuaWdub3JlZCgpOwot
ICAgIGlmICghcGFyZW50KQotICAgICAgICByZXR1cm4gZmFsc2U7Ci0KLSAgICByZXR1cm4gdHlw
ZSA9PSBTdWJzY3JpcHQgPyB0aGlzID09IHBhcmVudC0+bWF0aFN1YnNjcmlwdE9iamVjdCgpIDog
dGhpcyA9PSBwYXJlbnQtPm1hdGhTdXBlcnNjcmlwdE9iamVjdCgpOwotfQotCi1ib29sIEFjY2Vz
c2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzTWF0aE11bHRpc2NyaXB0T2JqZWN0KEFjY2Vzc2liaWxp
dHlNYXRoTXVsdGlzY3JpcHRPYmplY3RUeXBlIHR5cGUpIGNvbnN0Ci17Ci0gICAgQWNjZXNzaWJp
bGl0eU9iamVjdCogcGFyZW50ID0gcGFyZW50T2JqZWN0VW5pZ25vcmVkKCk7Ci0gICAgaWYgKCFw
YXJlbnQgfHwgIXBhcmVudC0+aXNNYXRoTXVsdGlzY3JpcHQoKSkKLSAgICAgICAgcmV0dXJuIGZh
bHNlOwotCi0gICAgLy8gVGhlIHNjcmlwdHMgaW4gYSBNYXRoTUwgPG1tdWx0aXNjcmlwdHM+IGVs
ZW1lbnQgY29uc2lzdCBvZiBvbmUgb3IgbW9yZQotICAgIC8vIHN1YnNjcmlwdCwgc3VwZXJzY3Jp
cHQgcGFpcnMuIEluIG9yZGVyIHRvIGRldGVybWluZSBpZiB0aGlzIG9iamVjdCBpcwotICAgIC8v
IGEgc2NyaXB0ZWQgdG9rZW4sIHdlIG5lZWQgdG8gZXhhbWluZSBlYWNoIHNldCBvZiBwYWlycyB0
byBzZWUgaWYgdGhlCi0gICAgLy8gdGhpcyB0b2tlbiBpcyBwcmVzZW50IGFuZCBpbiB0aGUgcG9z
aXRpb24gY29ycmVzcG9uZGluZyB3aXRoIHRoZSB0eXBlLgotCi0gICAgQWNjZXNzaWJpbGl0eU1h
dGhNdWx0aXNjcmlwdFBhaXJzIHBhaXJzOwotICAgIGlmICh0eXBlID09IFByZVN1YnNjcmlwdCB8
fCB0eXBlID09IFByZVN1cGVyc2NyaXB0KQotICAgICAgICBwYXJlbnQtPm1hdGhQcmVzY3JpcHRz
KHBhaXJzKTsKLSAgICBlbHNlCi0gICAgICAgIHBhcmVudC0+bWF0aFBvc3RzY3JpcHRzKHBhaXJz
KTsKLQotICAgIGZvciAoY29uc3QgYXV0byYgcGFpciA6IHBhaXJzKSB7Ci0gICAgICAgIGlmICh0
aGlzID09IHBhaXIuZmlyc3QpCi0gICAgICAgICAgICByZXR1cm4gKHR5cGUgPT0gUHJlU3Vic2Ny
aXB0IHx8IHR5cGUgPT0gUG9zdFN1YnNjcmlwdCk7Ci0gICAgICAgIGlmICh0aGlzID09IHBhaXIu
c2Vjb25kKQotICAgICAgICAgICAgcmV0dXJuICh0eXBlID09IFByZVN1cGVyc2NyaXB0IHx8IHR5
cGUgPT0gUG9zdFN1cGVyc2NyaXB0KTsKLSAgICB9Ci0KLSAgICByZXR1cm4gZmFsc2U7Ci19Ci0g
ICAgCiBib29sIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6OmlzSWdub3JlZEVsZW1lbnRXaXRo
aW5NYXRoVHJlZSgpIGNvbnN0CiB7Ci0gICAgaWYgKCFtX3JlbmRlcmVyKQotICAgICAgICByZXR1
cm4gdHJ1ZTsKLQotICAgIGlmIChpczxSZW5kZXJUZXh0PigqbV9yZW5kZXJlcikpCi0gICAgICAg
IHJldHVybiBmYWxzZTsKLQotICAgIC8vIE9ubHkgbWF0aCBlbGVtZW50cyB0aGF0IHdlIGV4cGxp
Y2l0bHkgcmVjb2duaXplIHNob3VsZCBiZSBpbmNsdWRlZAotICAgIC8vIFdlIGRvbid0IHdhbnQg
dGhpbmdzIGxpa2UgPG1zdHlsZT4gdG8gYXBwZWFyIGluIHRoZSB0cmVlLgotICAgIGlmIChpc01h
dGhFbGVtZW50KCkpIHsKLSAgICAgICAgaWYgKGlzTWF0aEZyYWN0aW9uKCkgfHwgaXNNYXRoRmVu
Y2VkKCkgfHwgaXNNYXRoU3Vic2NyaXB0U3VwZXJzY3JpcHQoKSB8fCBpc01hdGhSb3coKQotICAg
ICAgICAgICAgfHwgaXNNYXRoVW5kZXJPdmVyKCkgfHwgaXNNYXRoUm9vdCgpIHx8IGlzTWF0aFRl
eHQoKSB8fCBpc01hdGhOdW1iZXIoKQotICAgICAgICAgICAgfHwgaXNNYXRoT3BlcmF0b3IoKSB8
fCBpc01hdGhGZW5jZU9wZXJhdG9yKCkgfHwgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKQotICAg
ICAgICAgICAgfHwgaXNNYXRoSWRlbnRpZmllcigpIHx8IGlzTWF0aFRhYmxlKCkgfHwgaXNNYXRo
VGFibGVSb3coKSB8fCBpc01hdGhUYWJsZUNlbGwoKSB8fCBpc01hdGhNdWx0aXNjcmlwdCgpKQot
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICByZXR1cm4gdHJ1ZTsKLSAgICB9Ci0K
LSAgICByZXR1cm4gbV9yZW5kZXJlci0+aXNBbm9ueW1vdXMoKSAmJiBtX3JlbmRlcmVyLT5wYXJl
bnQoKSAmJiBpczxSZW5kZXJNYXRoTUxCbG9jaz4obV9yZW5kZXJlci0+cGFyZW50KCkpOwotfQot
Ci1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUmFk
aWNhbmRPYmplY3QoKQotewotICAgIGlmICghaXNNYXRoUm9vdCgpKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLQotICAgIC8vIEZvciBNYXRoU3F1YXJlUm9vdCwgd2UgYWN0dWFsbHkgcmV0dXJu
IHRoZSBmaXJzdCBjaGlsZCBvZiB0aGUgYmFzZS4KLSAgICAvLyBTZWUgYWxzbyBodHRwczovL3dl
YmtpdC5vcmcvYi8xNDY0NTIKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxk
cmVuKCk7Ci0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA8IDEpCi0gICAgICAgIHJldHVybiBudWxs
cHRyOwotCi0gICAgcmV0dXJuIGNoaWxkcmVuWzBdLmdldCgpOwotfQotCi1BY2Nlc3NpYmlsaXR5
T2JqZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoUm9vdEluZGV4T2JqZWN0KCkK
LXsKLSAgICBpZiAoIWlzTWF0aFJvb3QoKSB8fCBpc01hdGhTcXVhcmVSb290KCkpCi0gICAgICAg
IHJldHVybiBudWxscHRyOwotCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGls
ZHJlbigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gbnVs
bHB0cjsKLQotICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLX0KLQotQWNjZXNzaWJpbGl0
eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE51bWVyYXRvck9iamVjdCgp
Ci17Ci0gICAgaWYgKCFpc01hdGhGcmFjdGlvbigpKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsK
LSAgICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAg
aWYgKGNoaWxkcmVuLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAK
LSAgICByZXR1cm4gY2hpbGRyZW5bMF0uZ2V0KCk7Ci19Ci0gICAgCi1BY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoRGVub21pbmF0b3JPYmplY3QoKQot
ewotICAgIGlmICghaXNNYXRoRnJhY3Rpb24oKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0K
LSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0gICAgaWYgKGNo
aWxkcmVuLnNpemUoKSAhPSAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAgICBy
ZXR1cm4gY2hpbGRyZW5bMV0uZ2V0KCk7Ci19Ci0gICAgCi1BY2Nlc3NpYmlsaXR5T2JqZWN0KiBB
Y2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoVW5kZXJPYmplY3QoKQotewotICAgIGlmICgh
aXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0g
ICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIGlm
IChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4gbnVsbHB0cjsKLSAgICAKLSAg
ICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJUYWcpIHx8IG5vZGUo
KS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXVuZGVyb3ZlclRhZykpCi0gICAgICAgIHJldHVy
biBjaGlsZHJlblsxXS5nZXQoKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0cjsKLX0KLQotQWNj
ZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aE92ZXJPYmpl
Y3QoKQotewotICAgIGlmICghaXNNYXRoVW5kZXJPdmVyKCkgfHwgIW5vZGUoKSkKLSAgICAgICAg
cmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5j
aGlsZHJlbigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1cm4g
bnVsbHB0cjsKLSAgICAKLSAgICBpZiAobm9kZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjpt
b3ZlclRhZykpCi0gICAgICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLSAgICBpZiAobm9k
ZSgpLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptdW5kZXJvdmVyVGFnKSkKLSAgICAgICAgcmV0
dXJuIGNoaWxkcmVuWzJdLmdldCgpOwotCi0gICAgcmV0dXJuIG51bGxwdHI7Ci19Ci0KLUFjY2Vz
c2liaWxpdHlPYmplY3QqIEFjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Q6Om1hdGhCYXNlT2JqZWN0
KCkKLXsKLSAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgJiYgIWlzTWF0aFVu
ZGVyT3ZlcigpICYmICFpc01hdGhNdWx0aXNjcmlwdCgpKQotICAgICAgICByZXR1cm4gbnVsbHB0
cjsKLSAgICAKLSAgICBjb25zdCBhdXRvJiBjaGlsZHJlbiA9IHRoaXMtPmNoaWxkcmVuKCk7Ci0g
ICAgLy8gVGhlIGJhc2Ugb2JqZWN0IGluIHF1ZXN0aW9uIGlzIGFsd2F5cyB0aGUgZmlyc3QgY2hp
bGQuCi0gICAgaWYgKGNoaWxkcmVuLnNpemUoKSA+IDApCi0gICAgICAgIHJldHVybiBjaGlsZHJl
blswXS5nZXQoKTsKLQotICAgIHJldHVybiBudWxscHRyOwotfQotCi1BY2Nlc3NpYmlsaXR5T2Jq
ZWN0KiBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoU3Vic2NyaXB0T2JqZWN0KCkKLXsK
LSAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVyc2NyaXB0KCkgfHwgIW5vZGUoKSkKLSAgICAg
ICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAgY29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlz
LT5jaGlsZHJlbigpOwotICAgIGlmIChjaGlsZHJlbi5zaXplKCkgPCAyKQotICAgICAgICByZXR1
cm4gbnVsbHB0cjsKLQotICAgIGlmIChub2RlKCktPmhhc1RhZ05hbWUoTWF0aE1MTmFtZXM6Om1z
dWJUYWcpIHx8IG5vZGUoKS0+aGFzVGFnTmFtZShNYXRoTUxOYW1lczo6bXN1YnN1cFRhZykpCi0g
ICAgICAgIHJldHVybiBjaGlsZHJlblsxXS5nZXQoKTsKLSAgICAKLSAgICByZXR1cm4gbnVsbHB0
cjsKLX0KLQotQWNjZXNzaWJpbGl0eU9iamVjdCogQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6
bWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkKLXsKLSAgICBpZiAoIWlzTWF0aFN1YnNjcmlwdFN1cGVy
c2NyaXB0KCkgfHwgIW5vZGUoKSkKLSAgICAgICAgcmV0dXJuIG51bGxwdHI7Ci0gICAgCi0gICAg
Y29uc3QgYXV0byYgY2hpbGRyZW4gPSB0aGlzLT5jaGlsZHJlbigpOwotICAgIHVuc2lnbmVkIGNv
dW50ID0gY2hpbGRyZW4uc2l6ZSgpOwotCi0gICAgaWYgKGNvdW50ID49IDIgJiYgbm9kZSgpLT5o
YXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptc3VwVGFnKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVu
WzFdLmdldCgpOwotCi0gICAgaWYgKGNvdW50ID49IDMgJiYgbm9kZSgpLT5oYXNUYWdOYW1lKE1h
dGhNTE5hbWVzOjptc3Vic3VwVGFnKSkKLSAgICAgICAgcmV0dXJuIGNoaWxkcmVuWzJdLmdldCgp
OwotICAgIAotICAgIHJldHVybiBudWxscHRyOwotfQotICAgIAotU3RyaW5nIEFjY2Vzc2liaWxp
dHlSZW5kZXJPYmplY3Q6Om1hdGhGZW5jZWRPcGVuU3RyaW5nKCkgY29uc3QKLXsKLSAgICBpZiAo
IWlzTWF0aEZlbmNlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAgCi0gICAgcmV0
dXJuIGdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6b3BlbkF0dHIpOwotfQotCi1TdHJpbmcgQWNj
ZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aEZlbmNlZENsb3NlU3RyaW5nKCkgY29uc3QKLXsK
LSAgICBpZiAoIWlzTWF0aEZlbmNlZCgpKQotICAgICAgICByZXR1cm4gU3RyaW5nKCk7Ci0gICAg
Ci0gICAgcmV0dXJuIGdldEF0dHJpYnV0ZShNYXRoTUxOYW1lczo6Y2xvc2VBdHRyKTsKLX0KLSAg
ICAKLXZvaWQgQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdDo6bWF0aFByZXNjcmlwdHMoQWNjZXNz
aWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJiBwcmVzY3JpcHRzKQotewotICAgIGlmICghaXNN
YXRoTXVsdGlzY3JpcHQoKSB8fCAhbm9kZSgpKQotICAgICAgICByZXR1cm47Ci0gICAgCi0gICAg
Ym9vbCBmb3VuZFByZXNjcmlwdCA9IGZhbHNlOwotICAgIHN0ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5
T2JqZWN0KiwgQWNjZXNzaWJpbGl0eU9iamVjdCo+IHByZXNjcmlwdFBhaXI7Ci0gICAgZm9yIChO
b2RlKiBjaGlsZCA9IG5vZGUoKS0+Zmlyc3RDaGlsZCgpOyBjaGlsZDsgY2hpbGQgPSBjaGlsZC0+
bmV4dFNpYmxpbmcoKSkgewotICAgICAgICBpZiAoZm91bmRQcmVzY3JpcHQpIHsKLSAgICAgICAg
ICAgIEFjY2Vzc2liaWxpdHlPYmplY3QqIGF4Q2hpbGQgPSBheE9iamVjdENhY2hlKCktPmdldE9y
Q3JlYXRlKGNoaWxkKTsKLSAgICAgICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hpbGQtPmlzTWF0
aEVsZW1lbnQoKSkgewotICAgICAgICAgICAgICAgIGlmICghcHJlc2NyaXB0UGFpci5maXJzdCkK
LSAgICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0UGFpci5maXJzdCA9IGF4Q2hpbGQ7Ci0gICAg
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuc2Vj
b25kID0gYXhDaGlsZDsKLSAgICAgICAgICAgICAgICAgICAgcHJlc2NyaXB0cy5hcHBlbmQocHJl
c2NyaXB0UGFpcik7Ci0gICAgICAgICAgICAgICAgICAgIHByZXNjcmlwdFBhaXIuZmlyc3QgPSBu
dWxscHRyOwotICAgICAgICAgICAgICAgICAgICBwcmVzY3JpcHRQYWlyLnNlY29uZCA9IG51bGxw
dHI7Ci0gICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgfQotICAgICAgICB9IGVsc2UgaWYg
KGNoaWxkLT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptcHJlc2NyaXB0c1RhZykpCi0gICAgICAg
ICAgICBmb3VuZFByZXNjcmlwdCA9IHRydWU7Ci0gICAgfQotICAgIAotICAgIC8vIEhhbmRsZSB0
aGUgb2RkIG51bWJlciBvZiBwcmUgc2NyaXB0cyBjYXNlLgotICAgIGlmIChwcmVzY3JpcHRQYWly
LmZpcnN0KQotICAgICAgICBwcmVzY3JpcHRzLmFwcGVuZChwcmVzY3JpcHRQYWlyKTsKKyAgICAv
LyBXZSBpZ25vcmUgYW5vbnltb3VzIGJveGVzIGluc2VydGVkIGludG8gUmVuZGVyTWF0aE1MQmxv
Y2tzIHRvIGhvbm9yIENTUyBydWxlcy4KKyAgICAvLyBTZWUgaHR0cHM6Ly93d3cudzMub3JnL1RS
L2NzczMtYm94LyNibG9jay1sZXZlbDAKKyAgICByZXR1cm4gbV9yZW5kZXJlciAmJiBtX3JlbmRl
cmVyLT5pc0Fub255bW91cygpICYmIG1fcmVuZGVyZXItPnBhcmVudCgpICYmIGlzPFJlbmRlck1h
dGhNTEJsb2NrPihtX3JlbmRlcmVyLT5wYXJlbnQoKSk7CiB9Ci0KLXZvaWQgQWNjZXNzaWJpbGl0
eVJlbmRlck9iamVjdDo6bWF0aFBvc3RzY3JpcHRzKEFjY2Vzc2liaWxpdHlNYXRoTXVsdGlzY3Jp
cHRQYWlycyYgcG9zdHNjcmlwdHMpCi17Ci0gICAgaWYgKCFpc01hdGhNdWx0aXNjcmlwdCgpIHx8
ICFub2RlKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIC8vIEluIE11bHRpc2NyaXB0cywgdGhl
IHBvc3Qtc2NyaXB0IGVsZW1lbnRzIHN0YXJ0IGFmdGVyIHRoZSBmaXJzdCBlbGVtZW50ICh3aGlj
aCBpcyB0aGUgYmFzZSkKLSAgICAvLyBhbmQgY29udGludWUgdW50aWwgYSA8bXByZXNjcmlwdHM+
IHRhZyBpcyBmb3VuZAotICAgIHN0ZDo6cGFpcjxBY2Nlc3NpYmlsaXR5T2JqZWN0KiwgQWNjZXNz
aWJpbGl0eU9iamVjdCo+IHBvc3RzY3JpcHRQYWlyOwotICAgIGJvb2wgZm91bmRCYXNlRWxlbWVu
dCA9IGZhbHNlOwotICAgIGZvciAoTm9kZSogY2hpbGQgPSBub2RlKCktPmZpcnN0Q2hpbGQoKTsg
Y2hpbGQ7IGNoaWxkID0gY2hpbGQtPm5leHRTaWJsaW5nKCkpIHsKLSAgICAgICAgaWYgKGNoaWxk
LT5oYXNUYWdOYW1lKE1hdGhNTE5hbWVzOjptcHJlc2NyaXB0c1RhZykpCi0gICAgICAgICAgICBi
cmVhazsKLQotICAgICAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBheENoaWxkID0gYXhPYmplY3RD
YWNoZSgpLT5nZXRPckNyZWF0ZShjaGlsZCk7Ci0gICAgICAgIGlmIChheENoaWxkICYmIGF4Q2hp
bGQtPmlzTWF0aEVsZW1lbnQoKSkgewotICAgICAgICAgICAgaWYgKCFmb3VuZEJhc2VFbGVtZW50
KQotICAgICAgICAgICAgICAgIGZvdW5kQmFzZUVsZW1lbnQgPSB0cnVlOwotICAgICAgICAgICAg
ZWxzZSBpZiAoIXBvc3RzY3JpcHRQYWlyLmZpcnN0KQotICAgICAgICAgICAgICAgIHBvc3RzY3Jp
cHRQYWlyLmZpcnN0ID0gYXhDaGlsZDsKLSAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAg
ICAgIHBvc3RzY3JpcHRQYWlyLnNlY29uZCA9IGF4Q2hpbGQ7Ci0gICAgICAgICAgICAgICAgcG9z
dHNjcmlwdHMuYXBwZW5kKHBvc3RzY3JpcHRQYWlyKTsKLSAgICAgICAgICAgICAgICBwb3N0c2Ny
aXB0UGFpci5maXJzdCA9IG51bGxwdHI7Ci0gICAgICAgICAgICAgICAgcG9zdHNjcmlwdFBhaXIu
c2Vjb25kID0gbnVsbHB0cjsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfQotICAgIH0KLQotICAg
IC8vIEhhbmRsZSB0aGUgb2RkIG51bWJlciBvZiBwb3N0IHNjcmlwdHMgY2FzZS4KLSAgICBpZiAo
cG9zdHNjcmlwdFBhaXIuZmlyc3QpCi0gICAgICAgIHBvc3RzY3JpcHRzLmFwcGVuZChwb3N0c2Ny
aXB0UGFpcik7Ci19Ci0KLWludCBBY2Nlc3NpYmlsaXR5UmVuZGVyT2JqZWN0OjptYXRoTGluZVRo
aWNrbmVzcygpIGNvbnN0Ci17Ci0gICAgaWYgKCFpczxSZW5kZXJNYXRoTUxGcmFjdGlvbj4obV9y
ZW5kZXJlcikpCi0gICAgICAgIHJldHVybiAtMTsKLSAgICAKLSAgICByZXR1cm4gZG93bmNhc3Q8
UmVuZGVyTWF0aE1MRnJhY3Rpb24+KCptX3JlbmRlcmVyKS5yZWxhdGl2ZUxpbmVUaGlja25lc3Mo
KTsKLX0KLQogI2VuZGlmCiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9hY2Nlc3NpYmlsaXR5L0FjY2Vzc2liaWxpdHlSZW5kZXJPYmplY3Qu
aCBiL1NvdXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVj
dC5oCmluZGV4IDQ0NTljNDYzYzEwNmQ2NDBhNDNiNzBmYmU4MzRkZDQwOTc0MTg5OTcuLmQzYzBm
ZjljMDE3NGM1ZjNiZmExMTYwZGEzNjZiN2NmNDFjZjQ5Y2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2FjY2Vzc2liaWxpdHkvQWNjZXNzaWJpbGl0eVJlbmRlck9iamVjdC5oCkBA
IC0yMTUsNiArMjE1LDEwIEBAIHByb3RlY3RlZDoKICAgICBBY2Nlc3NpYmlsaXR5Um9sZSBkZXRl
cm1pbmVBY2Nlc3NpYmlsaXR5Um9sZSgpIG92ZXJyaWRlOwogICAgIGJvb2wgY29tcHV0ZUFjY2Vz
c2liaWxpdHlJc0lnbm9yZWQoKSBjb25zdCBvdmVycmlkZTsKIAorI2lmIEVOQUJMRShNQVRITUwp
CisgICAgdmlydHVhbCBib29sIGlzSWdub3JlZEVsZW1lbnRXaXRoaW5NYXRoVHJlZSgpIGNvbnN0
OworI2VuZGlmCisKICAgICBSZW5kZXJPYmplY3QqIG1fcmVuZGVyZXI7CiAKIHByaXZhdGU6CkBA
IC0yNzksNjIgKzI4Myw2IEBAIHByaXZhdGU6CiAgICAgYm9vbCBpbmhlcml0c1ByZXNlbnRhdGlv
bmFsUm9sZSgpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBzaG91bGRHZXRUZXh0RnJvbU5v
ZGUoQWNjZXNzaWJpbGl0eVRleHRVbmRlckVsZW1lbnRNb2RlKSBjb25zdDsKLQotI2lmIEVOQUJM
RShNQVRITUwpCi0gICAgLy8gQWxsIG1hdGggZWxlbWVudHMgcmV0dXJuIHRydWUgZm9yIGlzTWF0
aEVsZW1lbnQoKS4KLSAgICBib29sIGlzTWF0aEVsZW1lbnQoKSBjb25zdCBvdmVycmlkZTsKLSAg
ICBib29sIGlzTWF0aEZyYWN0aW9uKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhG
ZW5jZWQoKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0aFN1YnNjcmlwdFN1cGVyc2Ny
aXB0KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhSb3coKSBjb25zdCBvdmVycmlk
ZTsKLSAgICBib29sIGlzTWF0aFVuZGVyT3ZlcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wg
aXNNYXRoUm9vdCgpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoU3F1YXJlUm9vdCgp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoVGV4dCgpIGNvbnN0IG92ZXJyaWRlOwot
ICAgIGJvb2wgaXNNYXRoTnVtYmVyKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhP
cGVyYXRvcigpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoRmVuY2VPcGVyYXRvcigp
IGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoU2VwYXJhdG9yT3BlcmF0b3IoKSBjb25z
dCBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0aElkZW50aWZpZXIoKSBjb25zdCBvdmVycmlkZTsK
LSAgICBib29sIGlzTWF0aFRhYmxlKCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhU
YWJsZVJvdygpIGNvbnN0IG92ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoVGFibGVDZWxsKCkgY29u
c3Qgb3ZlcnJpZGU7Ci0gICAgYm9vbCBpc01hdGhNdWx0aXNjcmlwdCgpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgaXNNYXRoVG9rZW4oKSBjb25zdCBvdmVycmlkZTsKLSAgICBib29sIGlzTWF0
aFNjcmlwdE9iamVjdChBY2Nlc3NpYmlsaXR5TWF0aFNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92
ZXJyaWRlOwotICAgIGJvb2wgaXNNYXRoTXVsdGlzY3JpcHRPYmplY3QoQWNjZXNzaWJpbGl0eU1h
dGhNdWx0aXNjcmlwdE9iamVjdFR5cGUpIGNvbnN0IG92ZXJyaWRlOwotICAgIAotICAgIC8vIEdl
bmVyaWMgY29tcG9uZW50cy4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoQmFzZU9iamVj
dCgpIG92ZXJyaWRlOwotICAgIAotICAgIC8vIFJvb3QgY29tcG9uZW50cy4KLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBtYXRoUmFkaWNhbmRPYmplY3QoKSBvdmVycmlkZTsKLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBtYXRoUm9vdEluZGV4T2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgCi0gICAg
Ly8gRnJhY3Rpb24gY29tcG9uZW50cy4KLSAgICBBY2Nlc3NpYmlsaXR5T2JqZWN0KiBtYXRoTnVt
ZXJhdG9yT2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0aERl
bm9taW5hdG9yT2JqZWN0KCkgb3ZlcnJpZGU7Ci0KLSAgICAvLyBVbmRlciBvdmVyIGNvbXBvbmVu
dHMuCi0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0aFVuZGVyT2JqZWN0KCkgb3ZlcnJpZGU7
Ci0gICAgQWNjZXNzaWJpbGl0eU9iamVjdCogbWF0aE92ZXJPYmplY3QoKSBvdmVycmlkZTsKLSAg
ICAKLSAgICAvLyBTdWJzY3JpcHQvc3VwZXJzY3JpcHQgY29tcG9uZW50cy4KLSAgICBBY2Nlc3Np
YmlsaXR5T2JqZWN0KiBtYXRoU3Vic2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgQWNjZXNz
aWJpbGl0eU9iamVjdCogbWF0aFN1cGVyc2NyaXB0T2JqZWN0KCkgb3ZlcnJpZGU7Ci0gICAgCi0g
ICAgLy8gRmVuY2VkIGNvbXBvbmVudHMuCi0gICAgU3RyaW5nIG1hdGhGZW5jZWRPcGVuU3RyaW5n
KCkgY29uc3Qgb3ZlcnJpZGU7Ci0gICAgU3RyaW5nIG1hdGhGZW5jZWRDbG9zZVN0cmluZygpIGNv
bnN0IG92ZXJyaWRlOwotICAgIGludCBtYXRoTGluZVRoaWNrbmVzcygpIGNvbnN0IG92ZXJyaWRl
OwotICAgIGJvb2wgaXNBbm9ueW1vdXNNYXRoT3BlcmF0b3IoKSBjb25zdCBvdmVycmlkZTsKLQot
ICAgIC8vIE11bHRpc2NyaXB0cyBjb21wb25lbnRzLgotICAgIHZvaWQgbWF0aFByZXNjcmlwdHMo
QWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJpZGU7Ci0gICAgdm9pZCBt
YXRoUG9zdHNjcmlwdHMoQWNjZXNzaWJpbGl0eU1hdGhNdWx0aXNjcmlwdFBhaXJzJikgb3ZlcnJp
ZGU7Ci0gICAgCi0gICAgYm9vbCBpc0lnbm9yZWRFbGVtZW50V2l0aGluTWF0aFRyZWUoKSBjb25z
dDsKLSNlbmRpZgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQo=
</data>
<flag name="review"
          id="306146"
          type_id="1"
          status="+"
          setter="cfleizach"
    />
          </attachment>
      

    </bug>

</bugzilla>