<?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>74121</bug_id>
          
          <creation_ts>2011-12-08 13:15:16 -0800</creation_ts>
          <short_desc>Consider user&apos;s preferred language when choosing text tracks</short_desc>
          <delta_ts>2012-02-01 21:12:25 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Media</component>
          <version>528+ (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>
          <dependson>76138</dependson>
          <blocked>43668</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Carlson">eric.carlson</reporter>
          <assigned_to name="Eric Carlson">eric.carlson</assigned_to>
          <cc>ap</cc>
    
    <cc>vcarbune</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>517721</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2011-12-08 13:15:16 -0800</bug_when>
    <thetext>The rules for sourcing out-of-band text tracks require access to the user&apos;s preferred language. For example:

   If the text track kind is subtitles or captions and the user has indicated an interest in having a track with this text track kind, text track language, and text track label enabled, and there is no other text track in the media element&apos;s list of text tracks with a text track kind of either subtitles or captions whose text track mode is showing

http://www.whatwg.org/specs/web-apps/current-work/multipage/the-video-element.html#sourcing-out-of-band-text-tracks

On OS X, at least, the preference is an ordered list of languages.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>517722</commentid>
    <comment_count>1</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2011-12-08 13:15:37 -0800</bug_when>
    <thetext>&lt;rdar://problem/10551005&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547371</commentid>
    <comment_count>2</comment_count>
      <attachid>125015</attachid>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-01 14:24:15 -0800</bug_when>
    <thetext>Created attachment 125015
Proposed patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547375</commentid>
    <comment_count>3</comment_count>
      <attachid>125015</attachid>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-01 14:31:28 -0800</bug_when>
    <thetext>Comment on attachment 125015
Proposed patch

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

&gt; Source/WebCore/html/HTMLMediaElement.cpp:2365
&gt; +            // ...

?

&gt; Source/WebCore/platform/Language.cpp:93
&gt; +    if (lowercaseLanguageCode.length() &gt;= 3 &amp;&amp; lowercaseLanguageCode[2] == &apos;_&apos;)
&gt; +        lowercaseLanguageCode.replace(2, 1, &quot;-&quot;);

Don&apos;t we want to use CoreFoundation to canonicalize? AppleLanguages can contains things like &quot;English&quot; on some systems.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547385</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-01 14:46:56 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (From update of attachment 125015 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=125015&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/html/HTMLMediaElement.cpp:2365
&gt; &gt; +            // ...
&gt; 
&gt; ?

  I was tryingo indicate that the text is not the first thing after the section label. I can remove it if it is confusing.

&gt; 
&gt; &gt; Source/WebCore/platform/Language.cpp:93
&gt; &gt; +    if (lowercaseLanguageCode.length() &gt;= 3 &amp;&amp; lowercaseLanguageCode[2] == &apos;_&apos;)
&gt; &gt; +        lowercaseLanguageCode.replace(2, 1, &quot;-&quot;);
&gt; 
&gt; Don&apos;t we want to use CoreFoundation to canonicalize? AppleLanguages can contains things like &quot;English&quot; on some systems.

Maybe. This is how we canonicalize language codes returned by AppleLanguages in createHTTPStyleLanguageCode (Languages.mm). Do you know if we have had an reports of problems with that code?

Thanks for the quick review!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547478</commentid>
    <comment_count>5</comment_count>
    <who name="Alexey Proskuryakov">ap</who>
    <bug_when>2012-02-01 16:33:17 -0800</bug_when>
    <thetext>&gt; Maybe. This is how we canonicalize language codes returned by AppleLanguages in createHTTPStyleLanguageCode (Languages.mm). Do you know if we have had an reports of problems with that code?

No, none that I would remember.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547623</commentid>
    <comment_count>6</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-01 21:12:10 -0800</bug_when>
    <thetext>(In reply to comment #5)
&gt; &gt; Maybe. This is how we canonicalize language codes returned by AppleLanguages in createHTTPStyleLanguageCode (Languages.mm). Do you know if we have had an reports of problems with that code?
&gt; 
&gt; No, none that I would remember.

OK, lets keep an eye out and problem show up I will add a platform specific version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>547624</commentid>
    <comment_count>7</comment_count>
    <who name="Eric Carlson">eric.carlson</who>
    <bug_when>2012-02-01 21:12:25 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/106531</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>125015</attachid>
            <date>2012-02-01 14:24:15 -0800</date>
            <delta_ts>2012-02-01 14:31:28 -0800</delta_ts>
            <desc>Proposed patch</desc>
            <filename>language_selection_patch_9.txt</filename>
            <type>text/plain</type>
            <size>39003</size>
            <attacher name="Eric Carlson">eric.carlson</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ4MCkKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQxIEBACisyMDEyLTAyLTAxICBFcmljIENh
cmxzb24gIDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENvbnNpZGVyIHVzZXIn
cyBwcmVmZXJyZWQgbGFuZ3VhZ2Ugd2hlbiBjaG9vc2luZyB0ZXh0IHRyYWNrcworICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMjEKKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBUZXN0czogbWVkaWEvdHJhY2sv
dHJhY2stbGFuZ3VhZ2UtcHJlZmVyZW5jZS5odG1sCisgICAgICAgICAgICAgICBtZWRpYS90cmFj
ay90cmFjay1wcmVmZXItY2FwdGlvbnMuaHRtbAorCisgICAgICAgICogaHRtbC9IVE1MTWVkaWFF
bGVtZW50LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OmxvYWRUaW1l
ckZpcmVkKTogY29uZmlndXJlVGV4dFRyYWNrcyAtPiBjb25maWd1cmVOZXdUZXh0VHJhY2tzLgor
ICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlhRWxlbWVudDo6dGV4dFRyYWNrc0FyZVJlYWR5KTog
QWRkIG1vcmUgY29tbWVudHMuCisgICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojp0
ZXh0VHJhY2tNb2RlQ2hhbmdlZCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6SFRNTE1lZGlh
RWxlbWVudDo6c2hvd2luZ1RyYWNrV2l0aFNhbWVLaW5kKTogTWlub3IgcmVzdHJ1Y3R1cmluZy4K
KyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OnVzZXJJc0ludGVyZXN0ZWRJblRo
aXNUcmFja0tpbmQpOiBSZW5hbWVkIGZyb20gdXNlcklzSW50ZXJlc3RlZEluVGhpc1RyYWNrLAor
ICAgICAgICAgICAgZG9uJ3QgY29uc2lkZXIgdXNlcidzIGxhbmd1YWdlIHByZWZlcmVuY2UuCisg
ICAgICAgIChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2tHcm91
cCk6IE5ldywgY29uZmlndXJlIGFsbCB0cmFja3MgaW4gYSBncm91cCwgCisgICAgICAgICAgICBj
b25zaWRlcmluZyB1c2VyJ3Mga2luZCBhbmQgbGFuZ3VhZ2UgcHJlZmVyZW5jZXMuCisgICAgICAg
IChXZWJDb3JlOjpIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVOZXdUZXh0VHJhY2tzKTogTmV3
LCBjb25maWd1cmUgYWxsIG5ld2x5IGFkZGVkIHRyYWNrcy4KKyAgICAgICAgKiBodG1sL0hUTUxN
ZWRpYUVsZW1lbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6OkhUTUxNZWRpYUVsZW1lbnQ6OlRyYWNr
R3JvdXA6OlRyYWNrR3JvdXApOgorICAgICAgICAoVHJhY2tHcm91cCk6CisKKyAgICAgICAgKiBw
bGF0Zm9ybS9MYW5ndWFnZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpjYW5vbmljYWxMYW5ndWFn
ZUlkZW50aWZpZXIpOiBOZXcsIGNyZWF0ZSBhIGNhbm9uaWNhbGl6ZWQgdmVyc2lvbiBvZiBhIGxh
bmd1YWdlIHN0cmluZy4KKyAgICAgICAgKFdlYkNvcmU6OmJlc3RNYXRjaGluZ0xhbmd1YWdlKTog
TmV3LCByZXR1cm4gdGhlIGxhbmd1YWdlIGZyb20gdGhlIGxpc3QgdGhhdCBiZXN0IG1hdGNoZXMg
dGhlIAorICAgICAgICAgICAgc3BlY2lmaWVkIGxhbmd1YWdlLgorICAgICAgICAoV2ViQ29yZTo6
cHJlZmVycmVkTGFuZ3VhZ2VGcm9tTGlzdCk6IE5ldywgcmV0dXJuIHRoZSBsYW5ndWFnZSBpbiB0
aGUgc3BlY2lmaWVkIGxpc3QgdGhhdCBiZXN0CisgICAgICAgICAgICBtYXRjaGVzIHRoZSB1c2Vy
J3MgbGFuZ3VhZ2UgcHJlZmVyZW5jZS4KKyAgICAgICAgKiBwbGF0Zm9ybS9MYW5ndWFnZS5oOgor
CisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW50
ZXJuYWxzOjpzZXRTaG91bGREaXNwbGF5VHJhY2tUeXBlKTogTmV3LCBhbGxvdyBEUlQgdG8gc2V0
IHRoZSB0cmFjayB0eXBlIHByZWZlcmVuY2UuCisgICAgICAgIChXZWJDb3JlOjpJbnRlcm5hbHM6
OnNob3VsZERpc3BsYXlUcmFja1R5cGUpOiBOZXcsIGFsbG93IERSVCB0byByZWFkIHRoZSB0cmFj
ayB0eXBlIHByZWZlcmVuY2UuCisgICAgICAgICogdGVzdGluZy9JbnRlcm5hbHMuaDoKKyAgICAg
ICAgKiB0ZXN0aW5nL0ludGVybmFscy5pZGw6CisKIDIwMTItMDItMDEgIE1heCBWdWpvdmljICA8
bXZ1am92aWNAYWRvYmUuY29tPgogCiAgICAgICAgIEFkZCBzdXBwb3J0IGZvciBmaXhlZCBhbmQg
cGVyY2VudCBtaW4td2lkdGggb24gdGhlIHRhYmxlIGVsZW1lbnQgZm9yIHRhYmxlLWxheW91dDog
YXV0byB0bwpJbmRleDogU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVtZW50LmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQuY3BwCShy
ZXZpc2lvbiAxMDY0NzQpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC01MSw2ICs1MSw3IEBACiAjaW5jbHVkZSAiSFRNTE5hbWVz
LmgiCiAjaW5jbHVkZSAiSFRNTFNvdXJjZUVsZW1lbnQuaCIKICNpbmNsdWRlICJIVE1MVmlkZW9F
bGVtZW50LmgiCisjaW5jbHVkZSAiTGFuZ3VhZ2UuaCIKICNpbmNsdWRlICJMb2dnaW5nLmgiCiAj
aW5jbHVkZSAiTWVkaWFDb250cm9sbGVyLmgiCiAjaW5jbHVkZSAiTWVkaWFDb250cm9scy5oIgpA
QCAtNTU3LDcgKzU1OCw3IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6bG9hZFRpbWVyRmlyZWQo
VGkKIAogI2lmIEVOQUJMRShWSURFT19UUkFDSykKICAgICBpZiAobV9wZW5kaW5nTG9hZEZsYWdz
ICYgVGV4dFRyYWNrUmVzb3VyY2UpCi0gICAgICAgIGNvbmZpZ3VyZVRleHRUcmFja3MoKTsKKyAg
ICAgICAgY29uZmlndXJlTmV3VGV4dFRyYWNrcygpOwogI2VuZGlmCiAKICAgICBtX3BlbmRpbmdM
b2FkRmxhZ3MgPSAwOwpAQCAtOTY1LDYgKzk2Niw4IEBAIHZvaWQgSFRNTE1lZGlhRWxlbWVudDo6
dXBkYXRlQWN0aXZlVGV4dFQKIAogYm9vbCBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhY2tzQXJl
UmVhZHkoKSBjb25zdAogeworICAgIC8vIDQuOC4xMC4xMi4xIFRleHQgdHJhY2sgbW9kZWwKKyAg
ICAvLyAuLi4KICAgICAvLyBUaGUgdGV4dCB0cmFja3Mgb2YgYSBtZWRpYSBlbGVtZW50IGFyZSBy
ZWFkeSBpZiBhbGwgdGhlIHRleHQgdHJhY2tzIHdob3NlIG1vZGUgd2FzIG5vdCAKICAgICAvLyBp
biB0aGUgZGlzYWJsZWQgc3RhdGUgd2hlbiB0aGUgZWxlbWVudCdzIHJlc291cmNlIHNlbGVjdGlv
biBhbGdvcml0aG0gbGFzdCBzdGFydGVkIG5vdwogICAgIC8vIGhhdmUgYSB0ZXh0IHRyYWNrIHJl
YWRpbmVzcyBzdGF0ZSBvZiBsb2FkZWQgb3IgZmFpbGVkIHRvIGxvYWQuCkBAIC0xMDAwLDcgKzEw
MDMsNyBAQCB2b2lkIEhUTUxNZWRpYUVsZW1lbnQ6OnRleHRUcmFja01vZGVDaGFuCiAgICAgICAg
ICAgICBpZiAodHJhY2tFbGVtZW50LT50cmFjaygpICE9IHRyYWNrKQogICAgICAgICAgICAgICAg
IGNvbnRpbnVlOwogICAgICAgICAgICAgCi0gICAgICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sg
YXMgImNvbmZpZ3VyZWQiIHNvIGNvbmZpZ3VyZVRleHRUcmFjayB3b24ndCBjaGFuZ2UgdGhlIG1v
ZGUgYWdhaW4uCisgICAgICAgICAgICAvLyBNYXJrIHRoaXMgdHJhY2sgYXMgImNvbmZpZ3VyZWQi
IHNvIGNvbmZpZ3VyZU5ld1RleHRUcmFja3Mgd29uJ3QgY2hhbmdlIHRoZSBtb2RlIGFnYWluLgog
ICAgICAgICAgICAgdHJhY2tFbGVtZW50LT5zZXRIYXNCZWVuQ29uZmlndXJlZCh0cnVlKTsKICAg
ICAgICAgICAgIGlmICh0cmFjay0+bW9kZSgpICE9IFRleHRUcmFjazo6RElTQUJMRUQgJiYgdHJh
Y2tFbGVtZW50LT5yZWFkeVN0YXRlKCkgPT0gSFRNTFRyYWNrRWxlbWVudDo6Tk9ORSkKICAgICAg
ICAgICAgICAgICB0cmFja0VsZW1lbnQtPnNjaGVkdWxlTG9hZCgpOwpAQCAtMjI0MCwxNSArMjI0
MywxMyBAQCBUZXh0VHJhY2tMaXN0KiBIVE1MTWVkaWFFbGVtZW50Ojp0ZXh0VHJhCiAKIEhUTUxU
cmFja0VsZW1lbnQqIEhUTUxNZWRpYUVsZW1lbnQ6OnNob3dpbmdUcmFja1dpdGhTYW1lS2luZChI
VE1MVHJhY2tFbGVtZW50KiB0cmFja0VsZW1lbnQpIGNvbnN0CiB7Ci0gICAgSFRNTFRyYWNrRWxl
bWVudCogc2hvd2luZ1RyYWNrID0gMDsKLSAgICAKICAgICBmb3IgKE5vZGUqIG5vZGUgPSBmaXJz
dENoaWxkKCk7IG5vZGU7IG5vZGUgPSBub2RlLT5uZXh0U2libGluZygpKSB7CiAgICAgICAgIGlm
ICh0cmFja0VsZW1lbnQgPT0gbm9kZSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICBp
ZiAoIW5vZGUtPmhhc1RhZ05hbWUodHJhY2tUYWcpKQogICAgICAgICAgICAgY29udGludWU7CiAK
LSAgICAgICAgc2hvd2luZ1RyYWNrID0gc3RhdGljX2Nhc3Q8SFRNTFRyYWNrRWxlbWVudCo+KG5v
ZGUpOworICAgICAgICBIVE1MVHJhY2tFbGVtZW50KiBzaG93aW5nVHJhY2sgPSBzdGF0aWNfY2Fz
dDxIVE1MVHJhY2tFbGVtZW50Kj4obm9kZSk7CiAgICAgICAgIGlmIChzaG93aW5nVHJhY2stPmtp
bmQoKSA9PSB0cmFja0VsZW1lbnQtPmtpbmQoKSAmJiBzaG93aW5nVHJhY2stPnRyYWNrKCktPm1v
ZGUoKSA9PSBUZXh0VHJhY2s6OlNIT1dJTkcpCiAgICAgICAgICAgICByZXR1cm4gc2hvd2luZ1Ry
YWNrOwogICAgIH0KQEAgLTIzMTUsMTMxICsyMzE2LDE3NiBAQCBib29sIEhUTUxNZWRpYUVsZW1l
bnQ6OnVzZXJJc0ludGVyZXN0ZWRJCiAgICAgcmV0dXJuIHRydWU7CiB9CiAKLWJvb2wgSFRNTE1l
ZGlhRWxlbWVudDo6dXNlcklzSW50ZXJlc3RlZEluVGhpc1RyYWNrKEhUTUxUcmFja0VsZW1lbnQq
IHRyYWNrRWxlbWVudCkgY29uc3QKK2Jvb2wgSFRNTE1lZGlhRWxlbWVudDo6dXNlcklzSW50ZXJl
c3RlZEluVGhpc1RyYWNrS2luZChTdHJpbmcga2luZCkgY29uc3QKIHsKLSAgICBSZWZQdHI8VGV4
dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7Ci0gICAgaWYgKCF0ZXh0
VHJhY2spCi0gICAgICAgIHJldHVybiBmYWxzZTsKLQotICAgIFN0cmluZyBraW5kID0gdGV4dFRy
YWNrLT5raW5kKCk7Ci0gICAgaWYgKCFUZXh0VHJhY2s6OmlzVmFsaWRLaW5kS2V5d29yZChraW5k
KSkKLSAgICAgICAgcmV0dXJuIGZhbHNlOwotCiAgICAgLy8gSWYgLi4uIHRoZSB1c2VyIGhhcyBp
bmRpY2F0ZWQgYW4gaW50ZXJlc3QgaW4gaGF2aW5nIGEgdHJhY2sgd2l0aCB0aGlzIHRleHQgdHJh
Y2sga2luZCwgdGV4dCB0cmFjayBsYW5ndWFnZSwgLi4uIAogICAgIFNldHRpbmdzKiBzZXR0aW5n
cyA9IGRvY3VtZW50KCktPnNldHRpbmdzKCk7CiAgICAgaWYgKCFzZXR0aW5ncykKICAgICAgICAg
cmV0dXJuIGZhbHNlOwogCi0gICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3
b3JkKCkgfHwga2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpKSB7Ci0gICAgICAg
IGlmIChraW5kID09IFRleHRUcmFjazo6c3VidGl0bGVzS2V5d29yZCgpICYmICFzZXR0aW5ncy0+
c2hvdWxkRGlzcGxheVN1YnRpdGxlcygpKQotICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAg
ICAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpICYmICFzZXR0aW5n
cy0+c2hvdWxkRGlzcGxheUNhcHRpb25zKCkpCi0gICAgICAgICAgICByZXR1cm4gZmFsc2U7Ci0g
ICAgICAgIHJldHVybiB1c2VySXNJbnRlcmVzdGVkSW5UaGlzTGFuZ3VhZ2UodHJhY2tFbGVtZW50
LT5zcmNsYW5nKCkpOwotICAgIH0KKyAgICBpZiAoa2luZCA9PSBUZXh0VHJhY2s6OnN1YnRpdGxl
c0tleXdvcmQoKSkKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzLT5zaG91bGREaXNwbGF5U3VidGl0
bGVzKCk7CisgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdvcmQoKSkKKyAg
ICAgICAgcmV0dXJuIHNldHRpbmdzLT5zaG91bGREaXNwbGF5Q2FwdGlvbnMoKTsKKyAgICBpZiAo
a2luZCA9PSBUZXh0VHJhY2s6OmRlc2NyaXB0aW9uc0tleXdvcmQoKSkKKyAgICAgICAgcmV0dXJu
IHNldHRpbmdzLT5zaG91bGREaXNwbGF5VGV4dERlc2NyaXB0aW9ucygpOwogCi0gICAgaWYgKGtp
bmQgPT0gVGV4dFRyYWNrOjpkZXNjcmlwdGlvbnNLZXl3b3JkKCkpIHsKLSAgICAgICAgaWYgKCFz
ZXR0aW5ncy0+c2hvdWxkRGlzcGxheVRleHREZXNjcmlwdGlvbnMoKSkKLSAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKLSAgICAgICAgcmV0dXJuIHVzZXJJc0ludGVyZXN0ZWRJblRoaXNMYW5ndWFn
ZSh0cmFja0VsZW1lbnQtPnNyY2xhbmcoKSk7Ci0gICAgfQotICAgIAogICAgIHJldHVybiBmYWxz
ZTsKIH0KIAotdm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1cmVUZXh0VHJhY2soSFRNTFRy
YWNrRWxlbWVudCogdHJhY2tFbGVtZW50KQordm9pZCBIVE1MTWVkaWFFbGVtZW50Ojpjb25maWd1
cmVUZXh0VHJhY2tHcm91cChjb25zdCBUcmFja0dyb3VwJiBncm91cCkgY29uc3QKIHsKLSNpZiAh
TE9HX0RJU0FCTEVECi0gICAgaWYgKHRyYWNrRWxlbWVudC0+aGFzVGFnTmFtZSh0cmFja1RhZykp
IHsKLSAgICAgICAgS1VSTCB1cmwgPSB0cmFja0VsZW1lbnQtPmdldE5vbkVtcHR5VVJMQXR0cmli
dXRlKHNyY0F0dHIpOwotICAgICAgICBMT0coTWVkaWEsICJIVE1MTWVkaWFFbGVtZW50Ojpjb25m
aWd1cmVUZXh0VHJhY2sgLSAnc3JjJyBpcyAlcyIsIHVybEZvckxvZ2dpbmcodXJsKS51dGY4KCku
ZGF0YSgpKTsKLSAgICB9Ci0jZW5kaWYKKyAgICBBU1NFUlQoZ3JvdXAudHJhY2tzLnNpemUoKSk7
CiAKLSAgICAvLyA0LjguMTAuMTIuMyBTb3VyY2luZyBvdXQtb2YtYmFuZCB0ZXh0IHRyYWNrcwot
ICAgIAotICAgIC8vIFdoZW4gYSB0ZXh0IHRyYWNrIGNvcnJlc3BvbmRpbmcgdG8gYSB0cmFjayBl
bGVtZW50IGlzIGFkZGVkIHRvIGEgbWVkaWEgZWxlbWVudCdzIGxpc3Qgb2YgdGV4dCB0cmFja3Ms
Ci0gICAgLy8gdGhlIHVzZXIgYWdlbnQgbXVzdCBzZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBhcHBy
b3ByaWF0ZWx5LCBhcyBkZXRlcm1pbmVkIGJ5IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9uczoKLSAg
ICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7Ci0g
ICAgaWYgKCF0ZXh0VHJhY2spCi0gICAgICAgIHJldHVybjsKLSAgICAKLSAgICBUZXh0VHJhY2s6
Ok1vZGUgbW9kZSA9IFRleHRUcmFjazo6SElEREVOOwotICAgIEhUTUxUcmFja0VsZW1lbnQqIHRy
YWNrRWxlbWVudEN1cnJlbnRseVNob3dpbmcgPSBzaG93aW5nVHJhY2tXaXRoU2FtZUtpbmQodHJh
Y2tFbGVtZW50KTsKLSAgICBTdHJpbmcga2luZCA9IHRleHRUcmFjay0+a2luZCgpOwotICAgIGJv
b2wgaGlkZURlZmF1bHRUcmFjayA9IGZhbHNlOwotCi0gICAgaWYgKHVzZXJJc0ludGVyZXN0ZWRJ
blRoaXNUcmFjayh0cmFja0VsZW1lbnQpKSB7Ci0gICAgICAgIGlmIChraW5kID09IFRleHRUcmFj
azo6c3VidGl0bGVzS2V5d29yZCgpIHx8IGtpbmQgPT0gVGV4dFRyYWNrOjpjYXB0aW9uc0tleXdv
cmQoKSkgewotICAgICAgICAgICAgLy8gKiBJZiB0aGUgdGV4dCB0cmFjayBraW5kIGlzIHN1YnRp
dGxlcyBvciBjYXB0aW9ucyBhbmQgdGhlIHVzZXIgaGFzIGluZGljYXRlZCBhbiBpbnRlcmVzdCBp
biBoYXZpbmcgYQorICAgIFN0cmluZyBiZXN0TWF0Y2hpbmdMYW5ndWFnZTsKKyAgICBpZiAoZ3Jv
dXAuaGFzU3JjTGFuZykgeworICAgICAgICBWZWN0b3I8U3RyaW5nPiBsYW5ndWFnZXM7CisgICAg
ICAgIGxhbmd1YWdlcy5yZXNlcnZlSW5pdGlhbENhcGFjaXR5KGdyb3VwLnRyYWNrcy5zaXplKCkp
OworICAgICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGdyb3VwLnRyYWNrcy5zaXplKCk7ICsr
aSkgeworICAgICAgICAgICAgU3RyaW5nIHNyY0xhbmd1YWdlID0gZ3JvdXAudHJhY2tzW2ldLT50
cmFjaygpLT5sYW5ndWFnZSgpOworICAgICAgICAgICAgaWYgKHNyY0xhbmd1YWdlLmxlbmd0aCgp
KQorICAgICAgICAgICAgICAgIGxhbmd1YWdlcy5hcHBlbmQoc3JjTGFuZ3VhZ2UpOworICAgICAg
ICB9CisgICAgICAgIGJlc3RNYXRjaGluZ0xhbmd1YWdlID0gcHJlZmVycmVkTGFuZ3VhZ2VGcm9t
TGlzdChsYW5ndWFnZXMpOworICAgIH0KKworICAgIC8vIEZpcnN0LCBmaW5kIHRoZSB0cmFjayBp
biB0aGUgZ3JvdXAgdGhhdCBzaG91bGQgYmUgZW5hYmxlZCAoaWYgYW55KS4KKyAgICBIVE1MVHJh
Y2tFbGVtZW50KiB0cmFja0VsZW1lbnRUb0VuYWJsZSA9IDA7CisgICAgSFRNTFRyYWNrRWxlbWVu
dCogZGVmYXVsdFRyYWNrID0gMDsKKyAgICBIVE1MVHJhY2tFbGVtZW50KiBmYWxsYmFja1RyYWNr
ID0gMDsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGkg
PCBncm91cC50cmFja3Muc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgSFRNTFRyYWNrRWxlbWVudCog
dHJhY2tFbGVtZW50ID0gZ3JvdXAudHJhY2tzW2ldOworICAgICAgICBSZWZQdHI8VGV4dFRyYWNr
PiB0ZXh0VHJhY2sgPSB0cmFja0VsZW1lbnQtPnRyYWNrKCk7CisKKyAgICAgICAgaWYgKHVzZXJJ
c0ludGVyZXN0ZWRJblRoaXNUcmFja0tpbmQodGV4dFRyYWNrLT5raW5kKCkpKSB7CisgICAgICAg
ICAgICAvLyAqIElmIHRoZSB0ZXh0IHRyYWNrIGtpbmQgaXMgeyBbc3VidGl0bGVzIG9yIGNhcHRp
b25zXSBbZGVzY3JpcHRpb25zXSB9IGFuZCB0aGUgdXNlciBoYXMgaW5kaWNhdGVkIGFuIGludGVy
ZXN0IGluIGhhdmluZyBhCiAgICAgICAgICAgICAvLyB0cmFjayB3aXRoIHRoaXMgdGV4dCB0cmFj
ayBraW5kLCB0ZXh0IHRyYWNrIGxhbmd1YWdlLCBhbmQgdGV4dCB0cmFjayBsYWJlbCBlbmFibGVk
LCBhbmQgdGhlcmUgaXMgbm8KICAgICAgICAgICAgIC8vIG90aGVyIHRleHQgdHJhY2sgaW4gdGhl
IG1lZGlhIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIHdpdGggYSB0ZXh0IHRyYWNrIGtp
bmQgb2YgZWl0aGVyIHN1YnRpdGxlcwogICAgICAgICAgICAgLy8gb3IgY2FwdGlvbnMgd2hvc2Ug
dGV4dCB0cmFjayBtb2RlIGlzIHNob3dpbmcKLSAgICAgICAgICAgIGhpZGVEZWZhdWx0VHJhY2sg
PSB0cmFja0VsZW1lbnRDdXJyZW50bHlTaG93aW5nICYmIHRyYWNrRWxlbWVudEN1cnJlbnRseVNo
b3dpbmctPnRyYWNrKCktPnNob3dpbmdCeURlZmF1bHQoKTsKLSAgICAgICAgICAgIGlmICghdHJh
Y2tFbGVtZW50Q3VycmVudGx5U2hvd2luZyB8fCBoaWRlRGVmYXVsdFRyYWNrKSB7Ci0gICAgICAg
ICAgICAgICAgLy8gICAgTGV0IHRoZSB0ZXh0IHRyYWNrIG1vZGUgYmUgc2hvd2luZy4KLSAgICAg
ICAgICAgICAgICAvLyAgICBJZiB0aGVyZSBpcyBhIHRleHQgdHJhY2sgaW4gdGhlIG1lZGlhIGVs
ZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIHdob3NlIHRleHQgdHJhY2sgbW9kZSBpcyBzaG93
aW5nIAotICAgICAgICAgICAgICAgIC8vICAgIGJ5IGRlZmF1bHQsIHRoZSB1c2VyIGFnZW50IG11
c3QgZnVydGhlcm1vcmUgY2hhbmdlIHRoYXQgdGV4dCB0cmFjaydzIHRleHQgdHJhY2sgbW9kZSB0
byBoaWRkZW4uCi0gICAgICAgICAgICAgICAgbW9kZSA9IFRleHRUcmFjazo6U0hPV0lORzsKLSAg
ICAgICAgICAgIH0KLSAgICAgICAgfSBlbHNlIGlmIChraW5kID09IFRleHRUcmFjazo6ZGVzY3Jp
cHRpb25zS2V5d29yZCgpKSB7Ci0gICAgICAgICAgICAvLyAqIElmIHRoZSB0ZXh0IHRyYWNrIGtp
bmQgaXMgZGVzY3JpcHRpb25zIGFuZCB0aGUgdXNlciBoYXMgaW5kaWNhdGVkIGFuIGludGVyZXN0
IGluIGhhdmluZyB0ZXh0IAotICAgICAgICAgICAgLy8gZGVzY3JpcHRpb25zIHdpdGggdGhpcyB0
ZXh0IHRyYWNrIGxhbmd1YWdlIGFuZCB0ZXh0IHRyYWNrIGxhYmVsIGVuYWJsZWQsIGFuZCB0aGVy
ZSBpcyBubyBvdGhlciB0ZXh0IAotICAgICAgICAgICAgLy8gdHJhY2sgaW4gdGhlIG1lZGlhIGVs
ZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIHdpdGggYSB0ZXh0IHRyYWNrIGtpbmQgb2YgZGVz
Y3JpcHRpb25zIHdob3NlIHRleHQgCi0gICAgICAgICAgICAvLyB0cmFjayBtb2RlIGlzIHNob3dp
bmcKLSAgICAgICAgICAgIGhpZGVEZWZhdWx0VHJhY2sgPSB0cmFja0VsZW1lbnRDdXJyZW50bHlT
aG93aW5nICYmIHRyYWNrRWxlbWVudEN1cnJlbnRseVNob3dpbmctPnRyYWNrKCktPnNob3dpbmdC
eURlZmF1bHQoKTsKLSAgICAgICAgICAgIGlmICghdHJhY2tFbGVtZW50Q3VycmVudGx5U2hvd2lu
ZyB8fCBoaWRlRGVmYXVsdFRyYWNrKSB7Ci0gICAgICAgICAgICAgICAgLy8gICAgTGV0IHRoZSB0
ZXh0IHRyYWNrIG1vZGUgYmUgc2hvd2luZy4KLSAgICAgICAgICAgICAgICAvLyAgICBJZiB0aGVy
ZSBpcyBhIHRleHQgdHJhY2sgaW4gdGhlIG1lZGlhIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJh
Y2tzIHdob3NlIHRleHQgdHJhY2sgbW9kZSBpcyBzaG93aW5nIAotICAgICAgICAgICAgICAgIC8v
ICAgIGJ5IGRlZmF1bHQsIHRoZSB1c2VyIGFnZW50IG11c3QgZnVydGhlcm1vcmUgY2hhbmdlIHRo
YXQgdGV4dCB0cmFjaydzIHRleHQgdHJhY2sgbW9kZSB0byBoaWRkZW4uCi0gICAgICAgICAgICAg
ICAgbW9kZSA9IFRleHRUcmFjazo6U0hPV0lORzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgfSBl
bHNlIGlmIChraW5kID09IFRleHRUcmFjazo6Y2hhcHRlcnNLZXl3b3JkKCkpIHsKKyAgICAgICAg
ICAgIC8vIC4uLgogICAgICAgICAgICAgLy8gKiBJZiB0aGUgdGV4dCB0cmFjayBraW5kIGlzIGNo
YXB0ZXJzIGFuZCB0aGUgdGV4dCB0cmFjayBsYW5ndWFnZSBpcyBvbmUgdGhhdCB0aGUgdXNlciBh
Z2VudCBoYXMgcmVhc29uCiAgICAgICAgICAgICAvLyB0byBiZWxpZXZlIGlzIGFwcHJvcHJpYXRl
IGZvciB0aGUgdXNlciwgYW5kIHRoZXJlIGlzIG5vIG90aGVyIHRleHQgdHJhY2sgaW4gdGhlIG1l
ZGlhIGVsZW1lbnQncyBsaXN0IG9mCiAgICAgICAgICAgICAvLyB0ZXh0IHRyYWNrcyB3aXRoIGEg
dGV4dCB0cmFjayBraW5kIG9mIGNoYXB0ZXJzIHdob3NlIHRleHQgdHJhY2sgbW9kZSBpcyBzaG93
aW5nCiAgICAgICAgICAgICAvLyAgICBMZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBiZSBzaG93aW5n
LgotICAgICAgICAgICAgaWYgKCF0cmFja0VsZW1lbnRDdXJyZW50bHlTaG93aW5nKQotICAgICAg
ICAgICAgICAgIG1vZGUgPSBUZXh0VHJhY2s6OlNIT1dJTkc7CisgICAgICAgICAgICBpZiAoYmVz
dE1hdGNoaW5nTGFuZ3VhZ2UubGVuZ3RoKCkpIHsKKyAgICAgICAgICAgICAgICBpZiAodGV4dFRy
YWNrLT5sYW5ndWFnZSgpID09IGJlc3RNYXRjaGluZ0xhbmd1YWdlKQorICAgICAgICAgICAgICAg
ICAgICB0cmFja0VsZW1lbnRUb0VuYWJsZSA9IHRyYWNrRWxlbWVudDsKKyAgICAgICAgICAgIH0g
ZWxzZSBpZiAodHJhY2tFbGVtZW50LT5pc0RlZmF1bHQoKSkgeworICAgICAgICAgICAgICAgIC8v
IFRoZSB1c2VyIGlzIGludGVyZXN0ZWQgaW4gdGhpcyB0eXBlIG9mIHRyYWNrLCBidXQgdGhlaXIg
bGFuZ3VhZ2UgcHJlZmVyZW5jZSBkb2Vzbid0IG1hdGNoIGFueSB0cmFjayBzbyB3ZSB3aWxsCisg
ICAgICAgICAgICAgICAgLy8gZW5hYmxlIHRoZSAnZGVmYXVsdCcgdHJhY2suCisgICAgICAgICAg
ICAgICAgZGVmYXVsdFRyYWNrID0gdHJhY2tFbGVtZW50OworICAgICAgICAgICAgfQorCisgICAg
ICAgICAgICAvLyBSZW1lbWJlciB0aGUgZmlyc3QgdHJhY2sgdGhhdCBkb2Vzbid0IG1hdGNoIGxh
bmd1YWdlIG9yIGhhdmUgJ2RlZmF1bHQnIHRvIHBvdGVudGlhbGx5IHVzZSBhcyBmYWxsYmFjay4K
KyAgICAgICAgICAgIGlmICghZmFsbGJhY2tUcmFjaykKKyAgICAgICAgICAgICAgICBmYWxsYmFj
a1RyYWNrID0gdHJhY2tFbGVtZW50OworICAgICAgICB9IGVsc2UgaWYgKCFncm91cC52aXNpYmxl
VHJhY2sgJiYgIWRlZmF1bHRUcmFjayAmJiB0cmFja0VsZW1lbnQtPmlzRGVmYXVsdCgpKSB7Cisg
ICAgICAgICAgICAvLyAqIElmIHRoZSB0cmFjayBlbGVtZW50IGhhcyBhIGRlZmF1bHQgYXR0cmli
dXRlIHNwZWNpZmllZCwgYW5kIHRoZXJlIGlzIG5vIG90aGVyIHRleHQgdHJhY2sgaW4gdGhlIG1l
ZGlhCisgICAgICAgICAgICAvLyBlbGVtZW50J3MgbGlzdCBvZiB0ZXh0IHRyYWNrcyB3aG9zZSB0
ZXh0IHRyYWNrIG1vZGUgaXMgc2hvd2luZyBvciBzaG93aW5nIGJ5IGRlZmF1bHQKKyAgICAgICAg
ICAgIC8vICAgIExldCB0aGUgdGV4dCB0cmFjayBtb2RlIGJlIHNob3dpbmcgYnkgZGVmYXVsdC4K
KyAgICAgICAgICAgIGRlZmF1bHRUcmFjayA9IHRyYWNrRWxlbWVudDsKICAgICAgICAgfQotICAg
IH0gZWxzZSBpZiAoIXRyYWNrRWxlbWVudEN1cnJlbnRseVNob3dpbmcgJiYgdHJhY2tFbGVtZW50
LT5pc0RlZmF1bHQoKSkgewotICAgICAgICAvLyAqIElmIHRoZSB0cmFjayBlbGVtZW50IGhhcyBh
IGRlZmF1bHQgYXR0cmlidXRlIHNwZWNpZmllZCwgYW5kIHRoZXJlIGlzIG5vIG90aGVyIHRleHQg
dHJhY2sgaW4gdGhlIG1lZGlhCi0gICAgICAgIC8vIGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJh
Y2tzIHdob3NlIHRleHQgdHJhY2sgbW9kZSBpcyBzaG93aW5nIG9yIHNob3dpbmcgYnkgZGVmYXVs
dAotICAgICAgICAvLyAgICBMZXQgdGhlIHRleHQgdHJhY2sgbW9kZSBiZSBzaG93aW5nIGJ5IGRl
ZmF1bHQuCi0gICAgICAgIG1vZGUgPSBUZXh0VHJhY2s6OlNIT1dJTkc7Ci0gICAgICAgIHRleHRU
cmFjay0+c2V0U2hvd2luZ0J5RGVmYXVsdChmYWxzZSk7Ci0gICAgfSBlbHNlIHsKLSAgICAgICAg
Ly8gT3RoZXJ3aXNlCi0gICAgICAgIC8vICAgIExldCB0aGUgdGV4dCB0cmFjayBtb2RlIGJlIGRp
c2FibGVkLgotICAgICAgICBtb2RlID0gVGV4dFRyYWNrOjpESVNBQkxFRDsKICAgICB9CiAKLSAg
ICBFeGNlcHRpb25Db2RlIHVudXNlZEV4Y2VwdGlvbjsKLSAgICBpZiAoaGlkZURlZmF1bHRUcmFj
aykgewotICAgICAgICB0cmFja0VsZW1lbnRDdXJyZW50bHlTaG93aW5nLT50cmFjaygpLT5zZXRN
b2RlKFRleHRUcmFjazo6SElEREVOLCB1bnVzZWRFeGNlcHRpb24pOwotICAgICAgICB0cmFja0Vs
ZW1lbnRDdXJyZW50bHlTaG93aW5nLT50cmFjaygpLT5zZXRTaG93aW5nQnlEZWZhdWx0KGZhbHNl
KTsKKyAgICBpZiAoIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGRlZmF1bHRUcmFjaykKKyAgICAg
ICAgdHJhY2tFbGVtZW50VG9FbmFibGUgPSBkZWZhdWx0VHJhY2s7CisKKyAgICAvLyBJZiBubyB0
cmFjayBtYXRjaGVzIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlIGFuZCBub24gd2FzIG1h
cmtlZCAnZGVmYXVsdCcsIGVuYWJsZSB0aGUgZmlyc3QgdHJhY2sKKyAgICAvLyBiZWNhdXNlIHRo
ZSB1c2VyIGhhcyBleHBsaWNpdGx5IHN0YXRlZCBhIHByZWZlcmVuY2UgZm9yIHRoaXMga2luZCBv
ZiB0cmFjay4KKyAgICBpZiAoIXRyYWNrRWxlbWVudFRvRW5hYmxlICYmIGZhbGxiYWNrVHJhY2sp
CisgICAgICAgIHRyYWNrRWxlbWVudFRvRW5hYmxlID0gZmFsbGJhY2tUcmFjazsKKworICAgIGZv
ciAoc2l6ZV90IGkgPSAwOyBpIDwgZ3JvdXAudHJhY2tzLnNpemUoKTsgKytpKSB7CisgICAgICAg
IEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCA9IGdyb3VwLnRyYWNrc1tpXTsKKyAgICAg
ICAgUmVmUHRyPFRleHRUcmFjaz4gdGV4dFRyYWNrID0gdHJhY2tFbGVtZW50LT50cmFjaygpOwor
ICAgICAgICBFeGNlcHRpb25Db2RlIHVudXNlZEV4Y2VwdGlvbjsKKyAgICAgICAgCisgICAgICAg
IGlmICh0cmFja0VsZW1lbnRUb0VuYWJsZSA9PSB0cmFja0VsZW1lbnQpIHsKKyAgICAgICAgICAg
IHRleHRUcmFjay0+c2V0TW9kZShUZXh0VHJhY2s6OlNIT1dJTkcsIHVudXNlZEV4Y2VwdGlvbik7
CisgICAgICAgICAgICBpZiAoZGVmYXVsdFRyYWNrID09IHRyYWNrRWxlbWVudCkKKyAgICAgICAg
ICAgICAgICB0ZXh0VHJhY2stPnNldFNob3dpbmdCeURlZmF1bHQodHJ1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBpZiAodGV4dFRyYWNrLT5zaG93aW5nQnlEZWZhdWx0KCkpIHsK
KyAgICAgICAgICAgICAgICAvLyBJZiB0aGVyZSBpcyBhIHRleHQgdHJhY2sgaW4gdGhlIG1lZGlh
IGVsZW1lbnQncyBsaXN0IG9mIHRleHQgdHJhY2tzIHdob3NlIHRleHQgdHJhY2sKKyAgICAgICAg
ICAgICAgICAvLyBtb2RlIGlzIHNob3dpbmcgYnkgZGVmYXVsdCwgdGhlIHVzZXIgYWdlbnQgbXVz
dCBmdXJ0aGVybW9yZSBjaGFuZ2UgdGhhdCB0ZXh0IHRyYWNrJ3MKKyAgICAgICAgICAgICAgICAv
LyB0ZXh0IHRyYWNrIG1vZGUgdG8gaGlkZGVuLgorICAgICAgICAgICAgICAgIHRleHRUcmFjay0+
c2V0U2hvd2luZ0J5RGVmYXVsdChmYWxzZSk7CisgICAgICAgICAgICAgICAgdGV4dFRyYWNrLT5z
ZXRNb2RlKFRleHRUcmFjazo6SElEREVOLCB1bnVzZWRFeGNlcHRpb24pOworICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRNb2RlKFRleHRUcmFjazo6RElT
QUJMRUQsIHVudXNlZEV4Y2VwdGlvbik7CisgICAgICAgIH0KICAgICB9CiAKLSAgICB0ZXh0VHJh
Y2stPnNldE1vZGUobW9kZSwgdW51c2VkRXhjZXB0aW9uKTsKKyAgICBpZiAodHJhY2tFbGVtZW50
VG9FbmFibGUgJiYgZ3JvdXAuZGVmYXVsdFRyYWNrICYmIGdyb3VwLmRlZmF1bHRUcmFjayAhPSB0
cmFja0VsZW1lbnRUb0VuYWJsZSkgeworICAgICAgICBSZWZQdHI8VGV4dFRyYWNrPiB0ZXh0VHJh
Y2sgPSBncm91cC5kZWZhdWx0VHJhY2stPnRyYWNrKCk7CisgICAgICAgIGlmICh0ZXh0VHJhY2sg
JiYgdGV4dFRyYWNrLT5zaG93aW5nQnlEZWZhdWx0KCkpIHsKKyAgICAgICAgICAgIEV4Y2VwdGlv
bkNvZGUgdW51c2VkRXhjZXB0aW9uOworICAgICAgICAgICAgdGV4dFRyYWNrLT5zZXRTaG93aW5n
QnlEZWZhdWx0KGZhbHNlKTsKKyAgICAgICAgICAgIHRleHRUcmFjay0+c2V0TW9kZShUZXh0VHJh
Y2s6OkhJRERFTiwgdW51c2VkRXhjZXB0aW9uKTsKKyAgICAgICAgfQorICAgIH0KIH0KLSAKLXZv
aWQgSFRNTE1lZGlhRWxlbWVudDo6Y29uZmlndXJlVGV4dFRyYWNrcygpCisKK3ZvaWQgSFRNTE1l
ZGlhRWxlbWVudDo6Y29uZmlndXJlTmV3VGV4dFRyYWNrcygpCiB7CisgICAgVHJhY2tHcm91cCBj
YXB0aW9uQW5kU3VidGl0bGVUcmFja3MoVHJhY2tHcm91cDo6Q2FwdGlvbnNBbmRTdWJ0aXRsZXMp
OworICAgIFRyYWNrR3JvdXAgZGVzY3JpcHRpb25UcmFja3MoVHJhY2tHcm91cDo6RGVzY3JpcHRp
b24pOworICAgIFRyYWNrR3JvdXAgY2hhcHRlclRyYWNrcyhUcmFja0dyb3VwOjpDaGFwdGVyKTsK
KyAgICBUcmFja0dyb3VwIG1ldGFkYXRhVHJhY2tzKFRyYWNrR3JvdXA6Ok1ldGFkYXRhKTsKKyAg
ICBUcmFja0dyb3VwIG90aGVyVHJhY2tzKFRyYWNrR3JvdXA6Ok90aGVyKTsKKwogICAgIGZvciAo
Tm9kZSogbm9kZSA9IGZpcnN0Q2hpbGQoKTsgbm9kZTsgbm9kZSA9IG5vZGUtPm5leHRTaWJsaW5n
KCkpIHsKICAgICAgICAgaWYgKCFub2RlLT5oYXNUYWdOYW1lKHRyYWNrVGFnKSkKICAgICAgICAg
ICAgIGNvbnRpbnVlOworCiAgICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHRyYWNrRWxlbWVudCA9
IHN0YXRpY19jYXN0PEhUTUxUcmFja0VsZW1lbnQqPihub2RlKTsKKyAgICAgICAgUmVmUHRyPFRl
eHRUcmFjaz4gdGV4dFRyYWNrID0gdHJhY2tFbGVtZW50LT50cmFjaygpOworICAgICAgICBpZiAo
IXRleHRUcmFjaykKKyAgICAgICAgICAgIGNvbnRpbnVlOworCisgICAgICAgIFN0cmluZyBraW5k
ID0gdGV4dFRyYWNrLT5raW5kKCk7CisgICAgICAgIFRyYWNrR3JvdXAqIGN1cnJlbnRHcm91cDsK
KyAgICAgICAgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjpzdWJ0aXRsZXNLZXl3b3JkKCkgfHwga2lu
ZCA9PSBUZXh0VHJhY2s6OmNhcHRpb25zS2V5d29yZCgpKQorICAgICAgICAgICAgY3VycmVudEdy
b3VwID0gJmNhcHRpb25BbmRTdWJ0aXRsZVRyYWNrczsKKyAgICAgICAgZWxzZSBpZiAoa2luZCA9
PSBUZXh0VHJhY2s6OmRlc2NyaXB0aW9uc0tleXdvcmQoKSkKKyAgICAgICAgICAgIGN1cnJlbnRH
cm91cCA9ICZkZXNjcmlwdGlvblRyYWNrczsKKyAgICAgICAgZWxzZSBpZiAoa2luZCA9PSBUZXh0
VHJhY2s6OmNoYXB0ZXJzS2V5d29yZCgpKQorICAgICAgICAgICAgY3VycmVudEdyb3VwID0gJmNo
YXB0ZXJUcmFja3M7CisgICAgICAgIGVsc2UgaWYgKGtpbmQgPT0gVGV4dFRyYWNrOjptZXRhZGF0
YUtleXdvcmQoKSkKKyAgICAgICAgICAgIGN1cnJlbnRHcm91cCA9ICZtZXRhZGF0YVRyYWNrczsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgY3VycmVudEdyb3VwID0gJm90aGVyVHJhY2tzOwor
CisgICAgICAgIGlmICghY3VycmVudEdyb3VwLT52aXNpYmxlVHJhY2sgJiYgdGV4dFRyYWNrLT5t
b2RlKCkgPT0gVGV4dFRyYWNrOjpTSE9XSU5HKQorICAgICAgICAgICAgY3VycmVudEdyb3VwLT52
aXNpYmxlVHJhY2sgPSB0cmFja0VsZW1lbnQ7CisgICAgICAgIGlmICghY3VycmVudEdyb3VwLT5k
ZWZhdWx0VHJhY2sgJiYgdHJhY2tFbGVtZW50LT5pc0RlZmF1bHQoKSkKKyAgICAgICAgICAgIGN1
cnJlbnRHcm91cC0+ZGVmYXVsdFRyYWNrID0gdHJhY2tFbGVtZW50OworCisgICAgICAgIC8vIERv
IG5vdCBhZGQgdGhpcyB0cmFjayB0byB0aGUgZ3JvdXAgaWYgaXQgaGFzIGFscmVhZHkgYmVlbiBh
dXRvbWF0aWNhbGx5IGNvbmZpZ3VyZWQKKyAgICAgICAgLy8gYXMgd2Ugb25seSB3YW50IHRvIGNh
bGwgY29uZmlndXJlVGV4dFRyYWNrIG9uY2UgcGVyIHRyYWNrIHNvIHRoYXQgYWRkaW5nIGFub3Ro
ZXIgCisgICAgICAgIC8vIHRyYWNrIGFmdGVyIHRoZSBpbml0aWFsIGNvbmZpZ3VyYXRpb24gZG9l
c24ndCByZWNvbmZpZ3VyZSBldmVyeSB0cmFjayAtIG9ubHkgdGhvc2UgCisgICAgICAgIC8vIHRo
YXQgc2hvdWxkIGJlIGNoYW5nZWQgYnkgdGhlIG5ldyBhZGRpdGlvbi4gRm9yIGV4YW1wbGUgYWxs
IG1ldGFkYXRhIHRyYWNrcyBhcmUgCisgICAgICAgIC8vIGRpc2FibGVkIGJ5IGRlZmF1bHQsIGFu
ZCB3ZSBkb24ndCB3YW50IGEgdHJhY2sgdGhhdCBoYXMgYmVlbiBlbmFibGVkIGJ5IHNjcmlwdCAK
KyAgICAgICAgLy8gdG8gYmUgZGlzYWJsZWQgYXV0b21hdGljYWxseSB3aGVuIGEgbmV3IG1ldGFk
YXRhIHRyYWNrIGlzIGFkZGVkIGxhdGVyLgorICAgICAgICBpZiAodHJhY2tFbGVtZW50LT5oYXNC
ZWVuQ29uZmlndXJlZCgpKQorICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIAotICAgICAg
ICAvLyBPbmx5IGNhbGwgY29uZmlndXJlVGV4dFRyYWNrIG9uY2UgcGVyIHRyYWNrIHNvIHRoYXQg
YWRkaW5nIGFub3RoZXIgdHJhY2sgYWZ0ZXIKLSAgICAgICAgLy8gdGhlIGluaXRpYWwgY29uZmln
dXJhdGlvbiBkb2Vzbid0IHJlY29uZmlndXJlIGV2ZXJ5IHRyYWNrLCBvbmx5IHRob3NlIHRoYXQg
c2hvdWxkCi0gICAgICAgIC8vIGJlIGNoYW5nZWQgYnkgdGhlIG5ldyBhZGRpdGlvbi4gRm9yIGV4
YW1wbGUgYWxsIG1ldGFkYXRhIHRyYWNrcyBhcmUgZGlzYWJsZWQgYnkgCi0gICAgICAgIC8vIGRl
ZmF1bHQsIGFuZCB3ZSBkb24ndCB3YW50IGEgdHJhY2sgdGhhdCBoYXMgYmVlbiBlbmFibGVkIGJ5
IHNjcmlwdCB0byBiZSBkaXNhYmxlZAotICAgICAgICAvLyBhdXRvbWF0aWNhbGx5IHdoZW4gYSBu
ZXcgdHJhY2sgZWxlbWVudCBpcyBhZGRlZCBsYXRlci4KLSAgICAgICAgaWYgKCF0cmFja0VsZW1l
bnQtPmhhc0JlZW5Db25maWd1cmVkKCkpCi0gICAgICAgICAgICBjb25maWd1cmVUZXh0VHJhY2so
dHJhY2tFbGVtZW50KTsKKyAgICAgICAgaWYgKHRleHRUcmFjay0+bGFuZ3VhZ2UoKS5sZW5ndGgo
KSkKKyAgICAgICAgICAgIGN1cnJlbnRHcm91cC0+aGFzU3JjTGFuZyA9IHRydWU7CisgICAgICAg
IGN1cnJlbnRHcm91cC0+dHJhY2tzLmFwcGVuZCh0cmFja0VsZW1lbnQpOwogICAgIH0KKyAgICAK
KyAgICBpZiAoY2FwdGlvbkFuZFN1YnRpdGxlVHJhY2tzLnRyYWNrcy5zaXplKCkpCisgICAgICAg
IGNvbmZpZ3VyZVRleHRUcmFja0dyb3VwKGNhcHRpb25BbmRTdWJ0aXRsZVRyYWNrcyk7CisgICAg
aWYgKGRlc2NyaXB0aW9uVHJhY2tzLnRyYWNrcy5zaXplKCkpCisgICAgICAgIGNvbmZpZ3VyZVRl
eHRUcmFja0dyb3VwKGRlc2NyaXB0aW9uVHJhY2tzKTsKKyAgICBpZiAoY2hhcHRlclRyYWNrcy50
cmFja3Muc2l6ZSgpKQorICAgICAgICBjb25maWd1cmVUZXh0VHJhY2tHcm91cChjaGFwdGVyVHJh
Y2tzKTsKKyAgICBpZiAobWV0YWRhdGFUcmFja3MudHJhY2tzLnNpemUoKSkKKyAgICAgICAgY29u
ZmlndXJlVGV4dFRyYWNrR3JvdXAobWV0YWRhdGFUcmFja3MpOworICAgIGlmIChvdGhlclRyYWNr
cy50cmFja3Muc2l6ZSgpKQorICAgICAgICBjb25maWd1cmVUZXh0VHJhY2tHcm91cChvdGhlclRy
YWNrcyk7CiB9Ci0KICNlbmRpZgogCiBib29sIEhUTUxNZWRpYUVsZW1lbnQ6OmhhdmVQb3RlbnRp
YWxTb3VyY2VDaGlsZCgpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1l
bnQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxNZWRpYUVsZW1lbnQu
aAkocmV2aXNpb24gMTA2NDc0KQorKysgU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MTWVkaWFFbGVt
ZW50LmgJKHdvcmtpbmcgY29weSkKQEAgLTIwNyw4ICsyMDcsMjkgQEAgcHVibGljOgogICAgIHZp
cnR1YWwgdm9pZCB0cmFja1dhc0FkZGVkKEhUTUxUcmFja0VsZW1lbnQqKTsKICAgICB2aXJ0dWFs
IHZvaWQgdHJhY2tXYXNSZW1vdmVkKEhUTUxUcmFja0VsZW1lbnQqKTsKIAotICAgIHZvaWQgY29u
ZmlndXJlVGV4dFRyYWNrKEhUTUxUcmFja0VsZW1lbnQqKTsKLSAgICB2b2lkIGNvbmZpZ3VyZVRl
eHRUcmFja3MoKTsKKyAgICBzdHJ1Y3QgVHJhY2tHcm91cCB7CisgICAgICAgIGVudW0gR3JvdXBL
aW5kIHsgQ2FwdGlvbnNBbmRTdWJ0aXRsZXMsIERlc2NyaXB0aW9uLCBDaGFwdGVyLCBNZXRhZGF0
YSwgT3RoZXIgfTsKKworICAgICAgICBUcmFja0dyb3VwKEdyb3VwS2luZCBraW5kKQorICAgICAg
ICAgICAgOiB2aXNpYmxlVHJhY2soMCkKKyAgICAgICAgICAgICwgZGVmYXVsdFRyYWNrKDApCisg
ICAgICAgICAgICAsIGtpbmQoa2luZCkKKyAgICAgICAgICAgICwgaGFzU3JjTGFuZyhmYWxzZSkK
KyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgVmVjdG9yPEhUTUxUcmFja0VsZW1lbnQq
PiB0cmFja3M7CisgICAgICAgIEhUTUxUcmFja0VsZW1lbnQqIHZpc2libGVUcmFjazsKKyAgICAg
ICAgSFRNTFRyYWNrRWxlbWVudCogZGVmYXVsdFRyYWNrOworICAgICAgICBHcm91cEtpbmQga2lu
ZDsKKyAgICAgICAgYm9vbCBoYXNTcmNMYW5nOworICAgIH07CisKKyAgICB2b2lkIGNvbmZpZ3Vy
ZVRleHRUcmFja0dyb3VwRm9yTGFuZ3VhZ2UoY29uc3QgVHJhY2tHcm91cCYpIGNvbnN0OworICAg
IHZvaWQgY29uZmlndXJlTmV3VGV4dFRyYWNrcygpOworICAgIHZvaWQgY29uZmlndXJlVGV4dFRy
YWNrR3JvdXAoY29uc3QgVHJhY2tHcm91cCYpIGNvbnN0OworCisgICAgYm9vbCB1c2VySXNJbnRl
cmVzdGVkSW5UaGlzVHJhY2tLaW5kKFN0cmluZykgY29uc3Q7CiAgICAgYm9vbCB0ZXh0VHJhY2tz
QXJlUmVhZHkoKSBjb25zdDsKICAgICB2b2lkIGNvbmZpZ3VyZVRleHRUcmFja0Rpc3BsYXkoKTsK
IApAQCAtNDAxLDcgKzQyMiw2IEBAIHByaXZhdGU6CiAjaWYgRU5BQkxFKFZJREVPX1RSQUNLKQog
ICAgIHZvaWQgdXBkYXRlQWN0aXZlVGV4dFRyYWNrQ3VlcyhmbG9hdCk7CiAgICAgYm9vbCB1c2Vy
SXNJbnRlcmVzdGVkSW5UaGlzTGFuZ3VhZ2UoY29uc3QgU3RyaW5nJikgY29uc3Q7Ci0gICAgYm9v
bCB1c2VySXNJbnRlcmVzdGVkSW5UaGlzVHJhY2soSFRNTFRyYWNrRWxlbWVudCopIGNvbnN0Owog
ICAgIEhUTUxUcmFja0VsZW1lbnQqIHNob3dpbmdUcmFja1dpdGhTYW1lS2luZChIVE1MVHJhY2tF
bGVtZW50KikgY29uc3Q7CiAKICAgICBib29sIGlnbm9yZVRyYWNrRGlzcGxheVVwZGF0ZVJlcXVl
c3RzKCkgY29uc3QgeyByZXR1cm4gbV9pZ25vcmVUcmFja0Rpc3BsYXlVcGRhdGUgPiAwOyB9Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuY3BwCShyZXZpc2lvbiAxMDY0NzQpCisr
KyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9MYW5ndWFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTg1LDQgKzg1LDYyIEBAIFZlY3RvcjxTdHJpbmc+IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKQog
ICAgIHJldHVybiBwbGF0Zm9ybVVzZXJQcmVmZXJyZWRMYW5ndWFnZXMoKTsKIH0KIAorc3RhdGlj
IFN0cmluZyBjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBsYW5ndWFn
ZUNvZGUpCit7CisgICAgU3RyaW5nIGxvd2VyY2FzZUxhbmd1YWdlQ29kZSA9IGxhbmd1YWdlQ29k
ZS5sb3dlcigpOworICAgIAorICAgIGlmIChsb3dlcmNhc2VMYW5ndWFnZUNvZGUubGVuZ3RoKCkg
Pj0gMyAmJiBsb3dlcmNhc2VMYW5ndWFnZUNvZGVbMl0gPT0gJ18nKQorICAgICAgICBsb3dlcmNh
c2VMYW5ndWFnZUNvZGUucmVwbGFjZSgyLCAxLCAiLSIpOworCisgICAgcmV0dXJuIGxvd2VyY2Fz
ZUxhbmd1YWdlQ29kZTsKK30KKworc3RhdGljIFN0cmluZyBiZXN0TWF0Y2hpbmdMYW5ndWFnZShj
b25zdCBTdHJpbmcmIGxhbmd1YWdlLCBjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VMaXN0
KQoreworICAgIGJvb2wgY2FuTWF0Y2hMYW5ndWFnZU9ubHkgPSAobGFuZ3VhZ2UubGVuZ3RoKCkg
PT0gMiB8fCAobGFuZ3VhZ2UubGVuZ3RoKCkgPj0gMyAmJiBsYW5ndWFnZVsyXSA9PSAnLScpKTsK
KyAgICBTdHJpbmcgbGFuZ3VhZ2VXaXRob3V0TG9jYWxlTWF0Y2g7CisgICAgU3RyaW5nIGxhbmd1
YWdlTWF0Y2hCdXROb3RMb2NhbGU7CisKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGxhbmd1
YWdlTGlzdC5zaXplKCk7ICsraSkgeworICAgICAgICBTdHJpbmcgY2Fub25pY2FsaXplZExhbmd1
YWdlRnJvbUxpc3QgPSBjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXIobGFuZ3VhZ2VMaXN0W2ld
KTsKKworICAgICAgICBpZiAobGFuZ3VhZ2UgPT0gY2Fub25pY2FsaXplZExhbmd1YWdlRnJvbUxp
c3QpCisgICAgICAgICAgICByZXR1cm4gbGFuZ3VhZ2VMaXN0W2ldOworCisgICAgICAgIGlmIChj
YW5NYXRjaExhbmd1YWdlT25seSAmJiBjYW5vbmljYWxpemVkTGFuZ3VhZ2VGcm9tTGlzdC5sZW5n
dGgoKSA+PSAyKSB7CisgICAgICAgICAgICBpZiAobGFuZ3VhZ2VbMF0gPT0gY2Fub25pY2FsaXpl
ZExhbmd1YWdlRnJvbUxpc3RbMF0gJiYgbGFuZ3VhZ2VbMV0gPT0gY2Fub25pY2FsaXplZExhbmd1
YWdlRnJvbUxpc3RbMV0pIHsKKyAgICAgICAgICAgICAgICBpZiAoIWxhbmd1YWdlV2l0aG91dExv
Y2FsZU1hdGNoLmxlbmd0aCgpICYmIGNhbm9uaWNhbGl6ZWRMYW5ndWFnZUZyb21MaXN0Lmxlbmd0
aCgpID09IDIpCisgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlV2l0aG91dExvY2FsZU1hdGNo
ID0gbGFuZ3VhZ2VMaXN0W2ldOworICAgICAgICAgICAgICAgIGlmICghbGFuZ3VhZ2VNYXRjaEJ1
dE5vdExvY2FsZS5sZW5ndGgoKSAmJiBjYW5vbmljYWxpemVkTGFuZ3VhZ2VGcm9tTGlzdC5sZW5n
dGgoKSA+PSAzKQorICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZU1hdGNoQnV0Tm90TG9jYWxl
ID0gbGFuZ3VhZ2VMaXN0W2ldOworICAgICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisg
ICAgLy8gSWYgd2UgaGF2ZSBib3RoIGEgbGFuZ3VhZ2Utb25seSBtYXRjaCBhbmQgYSBsYW5ndWdl
LWJ1dC1ub3QtbG9jYWxlIG1hdGNoLCByZXR1cm4gdGhlIAorICAgIC8vIGxhbmd1Z2Utb25seSBt
YXRjaCBhcyBpcyBjb25zaWRlcmVkIGEgImJldHRlciIgbWF0Y2guIEZvciBleGFtcGxlLCBpZiB0
aGUgbGlzdAorICAgIC8vIHByb3ZpZGVkIGhhcyBib3RoICJlbi1HQiIgYW5kICJlbiIgYW5kIHRo
ZSB1c2VyIHByZWZlcnMgImVuLVVTIiB3ZSB3aWxsIHJldHVybiAiZW4iLgorICAgIGlmIChsYW5n
dWFnZVdpdGhvdXRMb2NhbGVNYXRjaC5sZW5ndGgoKSkKKyAgICAgICAgcmV0dXJuIGxhbmd1YWdl
V2l0aG91dExvY2FsZU1hdGNoOworCisgICAgaWYgKGxhbmd1YWdlTWF0Y2hCdXROb3RMb2NhbGUu
bGVuZ3RoKCkpCisgICAgICAgIHJldHVybiBsYW5ndWFnZU1hdGNoQnV0Tm90TG9jYWxlOworICAg
IAorICAgIHJldHVybiBlbXB0eVN0cmluZygpOworfQorCitTdHJpbmcgcHJlZmVycmVkTGFuZ3Vh
Z2VGcm9tTGlzdChjb25zdCBWZWN0b3I8U3RyaW5nPiYgbGFuZ3VhZ2VMaXN0KQoreworICAgIFZl
Y3RvcjxTdHJpbmc+IHByZWZlcnJlZExhbmd1YWdlcyA9IHVzZXJQcmVmZXJyZWRMYW5ndWFnZXMo
KTsKKworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgcHJlZmVycmVkTGFuZ3VhZ2VzLnNpemUo
KTsgKytpKSB7CisgICAgICAgIFN0cmluZyBiZXN0TWF0Y2ggPSBiZXN0TWF0Y2hpbmdMYW5ndWFn
ZShjYW5vbmljYWxMYW5ndWFnZUlkZW50aWZpZXIocHJlZmVycmVkTGFuZ3VhZ2VzW2ldKSwgbGFu
Z3VhZ2VMaXN0KTsKKworICAgICAgICBpZiAoYmVzdE1hdGNoLmxlbmd0aCgpKQorICAgICAgICAg
ICAgcmV0dXJuIGJlc3RNYXRjaDsKKyAgICB9CisKKyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsK
K30KKyAgICAKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL0xhbmd1YWdlLmgKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuaAkocmV2aXNpb24g
MTA2NDc0KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vTGFuZ3VhZ2UuaAkod29ya2luZyBj
b3B5KQpAQCAtMzQsNiArMzQsNyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBTdHJpbmcgZGVmYXVs
dExhbmd1YWdlKCk7CiBWZWN0b3I8U3RyaW5nPiB1c2VyUHJlZmVycmVkTGFuZ3VhZ2VzKCk7CiB2
b2lkIG92ZXJyaWRlVXNlclByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5nPiYp
OworU3RyaW5nIHByZWZlcnJlZExhbmd1YWdlRnJvbUxpc3QoY29uc3QgVmVjdG9yPFN0cmluZz4m
KTsKIAogLy8gVGhlIG9ic2VydmVyIGZ1bmN0aW9uIHdpbGwgYmUgY2FsbGVkIHdoZW4gc3lzdGVt
IGxhbmd1YWdlIGNoYW5nZXMuCiB0eXBlZGVmIHZvaWQgKCpMYW5ndWFnZUNoYW5nZU9ic2VydmVy
RnVuY3Rpb24pKHZvaWQqIGNvbnRleHQpOwpJbmRleDogU291cmNlL1dlYkNvcmUvdGVzdGluZy9J
bnRlcm5hbHMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJu
YWxzLmNwcAkocmV2aXNpb24gMTA2NDc0KQorKysgU291cmNlL1dlYkNvcmUvdGVzdGluZy9JbnRl
cm5hbHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTEsNCArNDkxLDUzIEBAIHZvaWQgSW50ZXJu
YWxzOjpzZXRVc2VyUHJlZmVycmVkTGFuZ3VhZ2UKICAgICBXZWJDb3JlOjpvdmVycmlkZVVzZXJQ
cmVmZXJyZWRMYW5ndWFnZXMobGFuZ3VhZ2VzKTsKIH0KIAordm9pZCBJbnRlcm5hbHM6OnNldFNo
b3VsZERpc3BsYXlUcmFja0tpbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGtp
bmQsIGJvb2wgZW5hYmxlZCwgRXhjZXB0aW9uQ29kZSYgZWMpCit7CisgICAgaWYgKCFkb2N1bWVu
dCB8fCAhZG9jdW1lbnQtPmZyYW1lKCkgfHwgIWRvY3VtZW50LT5mcmFtZSgpLT5zZXR0aW5ncygp
KSB7CisgICAgICAgIGVjID0gSU5WQUxJRF9BQ0NFU1NfRVJSOworICAgICAgICByZXR1cm47Cisg
ICAgfQorICAgIAorI2lmIEVOQUJMRShWSURFT19UUkFDSykKKyAgICBTZXR0aW5ncyogc2V0dGlu
Z3MgPSBkb2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKTsKKyAgICAKKyAgICBpZiAoZXF1YWxJ
Z25vcmluZ0Nhc2Uoa2luZCwgIlN1YnRpdGxlcyIpKQorICAgICAgICBzZXR0aW5ncy0+c2V0U2hv
dWxkRGlzcGxheVN1YnRpdGxlcyhlbmFibGVkKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5n
Q2FzZShraW5kLCAiQ2FwdGlvbnMiKSkKKyAgICAgICAgc2V0dGluZ3MtPnNldFNob3VsZERpc3Bs
YXlDYXB0aW9ucyhlbmFibGVkKTsKKyAgICBlbHNlIGlmIChlcXVhbElnbm9yaW5nQ2FzZShraW5k
LCAiVGV4dERlc2NyaXB0aW9ucyIpKQorICAgICAgICBzZXR0aW5ncy0+c2V0U2hvdWxkRGlzcGxh
eVRleHREZXNjcmlwdGlvbnMoZW5hYmxlZCk7CisgICAgZWxzZQorICAgICAgICBlYyA9IFNZTlRB
WF9FUlI7CisjZWxzZQorICAgIFVOVVNFRF9QQVJBTShraW5kKTsKKyAgICBVTlVTRURfUEFSQU0o
ZW5hYmxlZCk7CisjZW5kaWYKK30KKworYm9vbCBJbnRlcm5hbHM6OnNob3VsZERpc3BsYXlUcmFj
a0tpbmQoRG9jdW1lbnQqIGRvY3VtZW50LCBjb25zdCBTdHJpbmcmIGtpbmQsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQoreworICAgIGlmICghZG9jdW1lbnQgfHwgIWRvY3VtZW50LT5mcmFtZSgpIHx8ICFk
b2N1bWVudC0+ZnJhbWUoKS0+c2V0dGluZ3MoKSkgeworICAgICAgICBlYyA9IElOVkFMSURfQUND
RVNTX0VSUjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICAKKyNpZiBFTkFCTEUo
VklERU9fVFJBQ0spCisgICAgU2V0dGluZ3MqIHNldHRpbmdzID0gZG9jdW1lbnQtPmZyYW1lKCkt
PnNldHRpbmdzKCk7CisgICAgCisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtpbmQsICJTdWJ0
aXRsZXMiKSkKKyAgICAgICAgcmV0dXJuIHNldHRpbmdzLT5zaG91bGREaXNwbGF5U3VidGl0bGVz
KCk7CisgICAgaWYgKGVxdWFsSWdub3JpbmdDYXNlKGtpbmQsICJDYXB0aW9ucyIpKQorICAgICAg
ICByZXR1cm4gc2V0dGluZ3MtPnNob3VsZERpc3BsYXlDYXB0aW9ucygpOworICAgIGlmIChlcXVh
bElnbm9yaW5nQ2FzZShraW5kLCAiVGV4dERlc2NyaXB0aW9ucyIpKQorICAgICAgICByZXR1cm4g
c2V0dGluZ3MtPnNob3VsZERpc3BsYXlUZXh0RGVzY3JpcHRpb25zKCk7CisKKyAgICBlYyA9IFNZ
TlRBWF9FUlI7CisgICAgcmV0dXJuIGZhbHNlOworI2Vsc2UKKyAgICBVTlVTRURfUEFSQU0oa2lu
ZCk7CisgICAgcmV0dXJuIGZhbHNlOworI2VuZGlmCit9CisgICAgCiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHJldmlzaW9uIDEwNjQ3NCkKKysrIFNvdXJjZS9XZWJDb3Jl
L3Rlc3RpbmcvSW50ZXJuYWxzLmgJKHdvcmtpbmcgY29weSkKQEAgLTEwMiw2ICsxMDIsOSBAQCBw
dWJsaWM6CiAgICAgVmVjdG9yPFN0cmluZz4gdXNlclByZWZlcnJlZExhbmd1YWdlcygpIGNvbnN0
OwogICAgIHZvaWQgc2V0VXNlclByZWZlcnJlZExhbmd1YWdlcyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYpOwogCisgICAgdm9pZCBzZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKERvY3VtZW50KiwgY29u
c3QgU3RyaW5nJiBraW5kLCBib29sLCBFeGNlcHRpb25Db2RlJik7CisgICAgYm9vbCBzaG91bGRE
aXNwbGF5VHJhY2tLaW5kKERvY3VtZW50KiwgY29uc3QgU3RyaW5nJiBraW5kLCBFeGNlcHRpb25D
b2RlJik7CisKICAgICBzdGF0aWMgY29uc3QgY2hhciogaW50ZXJuYWxzSWQ7CiAKICAgICBJbnRl
cm5hbFNldHRpbmdzKiBzZXR0aW5ncygpIGNvbnN0IHsgcmV0dXJuIG1fc2V0dGluZ3MuZ2V0KCk7
IH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS90ZXN0aW5nL0ludGVybmFscy5pZGwJKHJldmlzaW9uIDEwNjQ3
NCkKKysrIFNvdXJjZS9XZWJDb3JlL3Rlc3RpbmcvSW50ZXJuYWxzLmlkbAkod29ya2luZyBjb3B5
KQpAQCAtNzMsNiArNzMsMTAgQEAgbW9kdWxlIHdpbmRvdyB7CiAgICAgICAgIGxvbmcgbGFzdFNw
ZWxsQ2hlY2tSZXF1ZXN0U2VxdWVuY2UoaW4gRG9jdW1lbnQgZG9jdW1lbnQpIHJhaXNlcyAoRE9N
RXhjZXB0aW9uKTsKICAgICAgICAgbG9uZyBsYXN0U3BlbGxDaGVja1Byb2Nlc3NlZFNlcXVlbmNl
KGluIERvY3VtZW50IGRvY3VtZW50KSByYWlzZXMgKERPTUV4Y2VwdGlvbik7CiAKKyNpZiBkZWZp
bmVkKEVOQUJMRV9WSURFT19UUkFDSykgJiYgRU5BQkxFX1ZJREVPX1RSQUNLCisgICAgICAgIHZv
aWQgc2V0U2hvdWxkRGlzcGxheVRyYWNrS2luZChpbiBEb2N1bWVudCBkb2N1bWVudCwgaW4gRE9N
U3RyaW5nIGtpbmQsIGluIGJvb2xlYW4gZW5hYmxlZCkgcmFpc2VzIChET01FeGNlcHRpb24pOwor
ICAgICAgICBib29sZWFuIHNob3VsZERpc3BsYXlUcmFja0tpbmQoaW4gRG9jdW1lbnQgZG9jdW1l
bnQsIGluIERPTVN0cmluZyB0cmFja0tpbmQpIHJhaXNlcyAoRE9NRXhjZXB0aW9uKTsKKyNlbmRp
ZgogICAgICAgICBhdHRyaWJ1dGUgW0N1c3RvbV0gQXJyYXkgdXNlclByZWZlcnJlZExhbmd1YWdl
czsKIAogICAgICAgICByZWFkb25seSBhdHRyaWJ1dGUgSW50ZXJuYWxTZXR0aW5ncyBzZXR0aW5n
czsKSW5kZXg6IExheW91dFRlc3RzL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0
cy9DaGFuZ2VMb2cJKHJldmlzaW9uIDEwNjQ4MCkKKysrIExheW91dFRlc3RzL0NoYW5nZUxvZwko
d29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDE2IEBACisyMDEyLTAyLTAxICBFcmljIENhcmxzb24g
IDxlcmljLmNhcmxzb25AYXBwbGUuY29tPgorCisgICAgICAgIENvbnNpZGVyIHVzZXIncyBwcmVm
ZXJyZWQgbGFuZ3VhZ2Ugd2hlbiBjaG9vc2luZyB0ZXh0IHRyYWNrcworICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NzQxMjEKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIG1lZGlhL3RyYWNrL3RyYWNrLWxhbmd1
YWdlLXByZWZlcmVuY2UtZXhwZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBtZWRpYS90cmFj
ay90cmFjay1sYW5ndWFnZS1wcmVmZXJlbmNlLmh0bWw6IEFkZGVkLgorICAgICAgICAqIG1lZGlh
L3RyYWNrL3RyYWNrLXByZWZlci1jYXB0aW9ucy1leHBlY3RlZC50eHQ6IEFkZGVkLgorICAgICAg
ICAqIG1lZGlhL3RyYWNrL3RyYWNrLXByZWZlci1jYXB0aW9ucy5odG1sOiBBZGRlZC4KKyAgICAg
ICAgKiBwbGF0Zm9ybS9tYWMvU2tpcHBlZDoKKwogMjAxMi0wMi0wMSAgU3ppbGFyZCBMZWRhbiAg
PExlZGFuLU11bnRlYW4uU3ppbGFyZEBzdHVkLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIEZpeGVk
IHNvbWUgbGluZXMgaW4gdGhlIGRhdGUtY29uc3RydWN0b3IuanMgdGVzdC4KSW5kZXg6IExheW91
dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWxhbmd1YWdlLXByZWZlcmVuY2UtZXhwZWN0ZWQudHh0
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWxhbmd1YWdlLXBy
ZWZlcmVuY2UtZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEv
dHJhY2svdHJhY2stbGFuZ3VhZ2UtcHJlZmVyZW5jZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDAp
CkBAIC0wLDAgKzEsMzIgQEAKK1Rlc3RzIHRoYXQgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3Vh
Z2VzIGFyZSBob25vcmVkLgorCisqKlNldCB0cmFjayBwcmVmZXJlbmNlcyBhbmQgdXNlciBwcmVm
ZXJyZWQgbGFuZ3VhZ2VzCitSVU4oaW50ZXJuYWxzLnNldFNob3VsZERpc3BsYXlUcmFja0tpbmQo
ZG9jdW1lbnQsICdDYXB0aW9ucycsIHRydWUpKQorUlVOKGludGVybmFscy51c2VyUHJlZmVycmVk
TGFuZ3VhZ2VzID0gWydqcCcsICdlcy1FUycsICdlbicsICdmciddKQorCitUZXN0OiBhIHRyYWNr
IGxhbmd1YWdlIG1hdGNoZXMgb25lIG9mIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcyBl
eGFjdGx5LgorLSBjcmVhdGluZyB0cmFja3MgZm9yOiBbZnIsZW4sanBdLgorRVZFTlQobG9hZCkK
K0VYUEVDVEVEICh0cmFjay5yZWFkeVN0YXRlID09ICcyJykgT0sKK0VYUEVDVEVEICh0cmFjay5z
cmNsYW5nID09ICdqcCcpIE9LCisKK1Rlc3Q6IGEgdHJhY2sgbGFuZ3VhZ2Ugd2l0aG91dCBsb2Nh
bGUgZXhhY3RseSBtYXRjaGVzIG9uZSBvZiB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMu
CistIGNyZWF0aW5nIHRyYWNrcyBmb3I6IFtmci1DSCxkYV0uCitFVkVOVChsb2FkKQorRVhQRUNU
RUQgKHRyYWNrLnJlYWR5U3RhdGUgPT0gJzInKSBPSworRVhQRUNURUQgKHRyYWNrLnNyY2xhbmcg
PT0gJ2ZyLUNIJykgT0sKKworVGVzdDogYSB0cmFjayBsYW5ndWFnZSB3aXRob3V0IGxvY2FsZSBt
YXRjaGVzIG9uZSBvZiB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMgd2l0aG91dCBsb2Nh
bGUuCistIGNyZWF0aW5nIHRyYWNrcyBmb3I6IFtmcixlcy1NWF0uCitFVkVOVChsb2FkKQorRVhQ
RUNURUQgKHRyYWNrLnJlYWR5U3RhdGUgPT0gJzInKSBPSworRVhQRUNURUQgKHRyYWNrLnNyY2xh
bmcgPT0gJ2VzLU1YJykgT0sKKworVGVzdDogbm8gdHJhY2sgbGFuZ3VhZ2UgbWF0Y2hlcyBhbnkg
b2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzLgorLSBjcmVhdGluZyB0cmFja3MgZm9y
OiBbZmEscnUsbm9dLgorRVZFTlQobG9hZCkKK0VYUEVDVEVEICh0cmFjay5yZWFkeVN0YXRlID09
ICcyJykgT0sKK0VYUEVDVEVEICh0cmFjay5zcmNsYW5nID09ICdmYScpIE9LCisKK0VORCBPRiBU
RVNUCisKSW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLWxhbmd1YWdlLXByZWZl
cmVuY2UuaHRtbAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9tZWRpYS90cmFjay90cmFjay1s
YW5ndWFnZS1wcmVmZXJlbmNlLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9tZWRp
YS90cmFjay90cmFjay1sYW5ndWFnZS1wcmVmZXJlbmNlLmh0bWwJKHJldmlzaW9uIDApCkBAIC0w
LDAgKzEsMTE3IEBACis8IURPQ1RZUEUgaHRtbD4KKzxodG1sPgorICAgIDxoZWFkPgorICAgICAg
ICA8bWV0YSBodHRwLWVxdWl2PSJDb250ZW50LVR5cGUiIGNvbnRlbnQ9InRleHQvaHRtbDsgY2hh
cnNldD11dGYtOCIgLz4KKworICAgICAgICA8c3R5bGU+CisgICAgICAgICAgICB2aWRlbyB7IGJh
Y2tncm91bmQtY29sb3I6IHllbGxvdzsgd2lkdGg6IDMyMHB4OyBoZWlnaHQ6IDI0MHB4O30KKyAg
ICAgICAgPC9zdHlsZT4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vbWVkaWEtZmlsZS5qcz48L3Nj
cmlwdD4KKyAgICAgICAgPHNjcmlwdCBzcmM9Li4vdmlkZW8tdGVzdC5qcz48L3NjcmlwdD4KKyAg
ICAgICAgPHNjcmlwdD4KKworICAgICAgICAgICAgdmFyIHRpbWVyID0gbnVsbDsKKyAgICAgICAg
ICAgIHZhciBleHBlY3RlZExhbmd1YWdlOworICAgICAgICAgICAgdmFyIHRlc3RMaXN0ID0gCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgY3VycmVudCA6IC0xLAorICAgICAgICAgICAg
ICAgIHRlc3RzIDogCisgICAgICAgICAgICAgICAgWyAKKyAgICAgICAgICAgICAgICAgICAgewor
ICAgICAgICAgICAgICAgICAgICAgICAgZGVzY3JpcHRpb246ICJhIHRyYWNrIGxhbmd1YWdlIG1h
dGNoZXMgb25lIG9mIHRoZSB1c2VyJ3MgcHJlZmVycmVkIGxhbmd1YWdlcyBleGFjdGx5IiwgCisg
ICAgICAgICAgICAgICAgICAgICAgICBsYW5ndWFnZXMgOiBbJ2ZyJywgJ2VuJywgJ2pwJ10sIAor
ICAgICAgICAgICAgICAgICAgICAgICAgZXhwZWN0ZWRMYW5ndWFnZSA6ICJqcCIsIAorICAgICAg
ICAgICAgICAgICAgICB9LAorICAgICAgICAgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAg
ICAgICAgICBkZXNjcmlwdGlvbjogImEgdHJhY2sgbGFuZ3VhZ2Ugd2l0aG91dCBsb2NhbGUgZXhh
Y3RseSBtYXRjaGVzIG9uZSBvZiB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMiLCAKKyAg
ICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyA6IFsnZnItQ0gnLCAnZGEnXSwgCisgICAg
ICAgICAgICAgICAgICAgICAgICBleHBlY3RlZExhbmd1YWdlIDogImZyLUNIIiwgCisgICAgICAg
ICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICAg
ICAgICAgIGRlc2NyaXB0aW9uOiAiYSB0cmFjayBsYW5ndWFnZSB3aXRob3V0IGxvY2FsZSBtYXRj
aGVzIG9uZSBvZiB0aGUgdXNlcidzIHByZWZlcnJlZCBsYW5ndWFnZXMgd2l0aG91dCBsb2NhbGUi
LCAKKyAgICAgICAgICAgICAgICAgICAgICAgIGxhbmd1YWdlcyA6IFsnZnInLCAnZXMtTVgnXSwg
CisgICAgICAgICAgICAgICAgICAgICAgICBleHBlY3RlZExhbmd1YWdlIDogImVzLU1YIiwgCisg
ICAgICAgICAgICAgICAgICAgIH0sCisgICAgICAgICAgICAgICAgICAgIHsKKyAgICAgICAgICAg
ICAgICAgICAgICAgIGRlc2NyaXB0aW9uOiAibm8gdHJhY2sgbGFuZ3VhZ2UgbWF0Y2hlcyBhbnkg
b2YgdGhlIHVzZXIncyBwcmVmZXJyZWQgbGFuZ3VhZ2VzIiwgCisgICAgICAgICAgICAgICAgICAg
ICAgICBsYW5ndWFnZXMgOiBbJ2ZhJywgJ3J1JywgJ25vJ10sIAorICAgICAgICAgICAgICAgICAg
ICAgICAgZXhwZWN0ZWRMYW5ndWFnZSA6ICJmYSIsIAorICAgICAgICAgICAgICAgICAgICB9LAor
ICAgICAgICAgICAgICAgIF0KKyAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgIGZ1bmN0aW9u
IHJ1bk5leHRUZXN0KCkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBjb25zb2xlV3Jp
dGUoIiIpOworICAgICAgICAgICAgICAgIHRlc3RMaXN0LmN1cnJlbnQrKzsKKyAgICAgICAgICAg
ICAgICBpZiAodGVzdExpc3QuY3VycmVudCA+PSB0ZXN0TGlzdC50ZXN0cy5sZW5ndGgpIHsKKyAg
ICAgICAgICAgICAgICAgICAgZW5kVGVzdCgpOworICAgICAgICAgICAgICAgICAgICByZXR1cm47
CisgICAgICAgICAgICAgICAgfQorCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8Yj5U
ZXN0OiA8L2I+IDxlbT4iKyB0ZXN0TGlzdC50ZXN0c1t0ZXN0TGlzdC5jdXJyZW50XS5kZXNjcmlw
dGlvbiArICIuPC9lbT4iKTsKKyAgICAgICAgICAgICAgICBjcmVhdGVUcmFja0VsZW1lbnRzKHRl
c3RMaXN0LnRlc3RzW3Rlc3RMaXN0LmN1cnJlbnRdLmxhbmd1YWdlcyk7CisgICAgICAgICAgICB9
CisKKyAgICAgICAgICAgIGZ1bmN0aW9uIHRyYWNrTG9hZGVkKCkKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIkVWRU5UKGxvYWQpIik7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICAgICAgLy8gRG9uJ3QgbG9nIHRoZSBldmVudCBuYW1lIGJlY2F1c2Ug
dGhlIG9yZGVyIG9mIHRoZSB0d28gZXZlbnRzIGluIG5vdCBwcmVkaWN0YWJsZS4KKyAgICAgICAg
ICAgICAgICB0cmFjayA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0
ZWQoInRyYWNrLnJlYWR5U3RhdGUiLCBIVE1MVHJhY2tFbGVtZW50LkxPQURFRCk7CisgICAgICAg
ICAgICAgICAgdGVzdEV4cGVjdGVkKCJ0cmFjay5zcmNsYW5nIiwgdGVzdExpc3QudGVzdHNbdGVz
dExpc3QuY3VycmVudF0uZXhwZWN0ZWRMYW5ndWFnZSk7CisKKyAgICAgICAgICAgICAgICB0aW1l
ciA9IHNldFRpbWVvdXQocnVuTmV4dFRlc3QsIDIwMCk7CisgICAgICAgICAgICB9CisKKyAgICAg
ICAgICAgIGZ1bmN0aW9uIHNldFByZWZlcmVuY2VzKCkKKyAgICAgICAgICAgIHsKKyAgICAgICAg
ICAgICAgICBpZiAoIXdpbmRvdy5pbnRlcm5hbHMpIHsKKyAgICAgICAgICAgICAgICAgICAgY29u
c29sZVdyaXRlKCI8Yj4qKiBUaGlzIHRlc3Qgb25seSB3b3JrcyBpbiBEUlQhICoqPCIgKyAiL2I+
Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgICAgICB9CisKKyAg
ICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxpPioqU2V0IHRyYWNrIHByZWZlcmVuY2VzIGFu
ZCB1c2VyIHByZWZlcnJlZCBsYW5ndWFnZXM8IiArICIvaT4iKTsKKyAgICAgICAgICAgICAgICBy
dW4oImludGVybmFscy5zZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKGRvY3VtZW50LCAnQ2FwdGlv
bnMnLCB0cnVlKSIpOworICAgICAgICAgICAgICAgIHJ1bigiaW50ZXJuYWxzLnVzZXJQcmVmZXJy
ZWRMYW5ndWFnZXMgPSBbJ2pwJywgJ2VzLUVTJywgJ2VuJywgJ2ZyJ10iKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgZnVuY3Rpb24gY3JlYXRlVHJhY2tFbGVtZW50
KGxhbmd1YWdlLCBzcmMpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgdmFyIHRyYWNr
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndHJhY2snKTsKKyAgICAgICAgICAgICAgICB0cmFj
ay5zZXRBdHRyaWJ1dGUoJ2tpbmQnLCAiY2FwdGlvbnMiKTsKKyAgICAgICAgICAgICAgICB0cmFj
ay5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyYyk7CisgICAgICAgICAgICAgICAgdHJhY2suc2V0QXR0
cmlidXRlKCdzcmNsYW5nJywgbGFuZ3VhZ2UpOworICAgICAgICAgICAgICAgIHRyYWNrLnNldEF0
dHJpYnV0ZSgnb25sb2FkJywgJ3RyYWNrTG9hZGVkKCknKTsKKyAgICAgICAgICAgICAgICB2aWRl
by5hcHBlbmRDaGlsZCh0cmFjayk7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGZ1bmN0
aW9uIGNyZWF0ZVRyYWNrRWxlbWVudHMobGFuZ3VhZ2VzKQorICAgICAgICAgICAgeworICAgICAg
ICAgICAgICAgIHZhciB0cmFja3MgPSBkb2N1bWVudC5xdWVyeVNlbGVjdG9yQWxsKCd0cmFjaycp
OworICAgICAgICAgICAgICAgIGZvciAodmFyIG5keCA9IDA7IG5keCA8IHRyYWNrcy5sZW5ndGg7
ICsrbmR4KQorICAgICAgICAgICAgICAgICAgICB2aWRlby5yZW1vdmVDaGlsZCh0cmFja3NbbmR4
XSk7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxpPi0gY3JlYXRpbmcgdHJhY2tz
IGZvcjogWyIgKyBsYW5ndWFnZXMgKyAiXS48IiArICIvaT4iKTsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciBuZHggPSAwOyBuZHggPCBsYW5ndWFnZXMubGVuZ3RoOyArK25keCkKKyAgICAgICAg
ICAgICAgICAgICAgY3JlYXRlVHJhY2tFbGVtZW50KGxhbmd1YWdlc1tuZHhdLCAiY2FwdGlvbnMt
d2VidnR0L3RjMDA0LXdlYnZ0dC1maWxlLnZ0dCIpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBmdW5jdGlvbiBzZXR1cCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgZmlu
ZE1lZGlhRWxlbWVudCgpOworCisgICAgICAgICAgICAgICAgc2V0UHJlZmVyZW5jZXMoIlN1YnRp
dGxlcyIsIHRydWUpOworCisgICAgICAgICAgICAgICAgcnVuTmV4dFRlc3QoKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICA8L3NjcmlwdD4KKyAgICA8L2hlYWQ+CisgICAgPGJvZHkgb25sb2Fk
PSJzZXR1cCgpIj4KKyAgICAgICAgPHA+VGVzdHMgdGhhdCB0aGUgdXNlcidzIHByZWZlcnJlZCBs
YW5ndWFnZXMgYXJlIGhvbm9yZWQuPC9wPgorICAgICAgICA8dmlkZW8+CisgICAgICAgIDwvdmlk
ZW8+CisgICAgPC9ib2R5PgorPC9odG1sPgpJbmRleDogTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2sv
dHJhY2stcHJlZmVyLWNhcHRpb25zLWV4cGVjdGVkLnR4dAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9tZWRpYS90cmFjay90cmFjay1wcmVmZXItY2FwdGlvbnMtZXhwZWN0ZWQudHh0CShyZXZp
c2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2stcHJlZmVyLWNhcHRpb25z
LWV4cGVjdGVkLnR4dAkocmV2aXNpb24gMCkKQEAgLTAsMCArMSwyNSBAQAorVGVzdHMgdGhhdCB0
aGUgdXNlciBwcmVmZXJlbmNlcyBmb3IgdHJhY2sga2luZCBhcmUgaG9ub3JlZC4KKworKipTZXQg
cHJlZmVyZW5jZXMgc28gc3VidGl0bGVzIGFuZCBkZXNjcmlwdGlvbnMgbG9hZCwgYnV0IGNhcHRp
b25zIGRvIG5vdAorUlVOKGludGVybmFscy5zZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKGRvY3Vt
ZW50LCAnU3VidGl0bGVzJywgdHJ1ZSkpCitFWFBFQ1RFRCAoaW50ZXJuYWxzLnNob3VsZERpc3Bs
YXlUcmFja0tpbmQoZG9jdW1lbnQsICdTdWJ0aXRsZXMnKSA9PSAndHJ1ZScpIE9LCitSVU4oaW50
ZXJuYWxzLnNldFNob3VsZERpc3BsYXlUcmFja0tpbmQoZG9jdW1lbnQsICdDYXB0aW9ucycsIGZh
bHNlKSkKK0VYUEVDVEVEIChpbnRlcm5hbHMuc2hvdWxkRGlzcGxheVRyYWNrS2luZChkb2N1bWVu
dCwgJ0NhcHRpb25zJykgPT0gJ2ZhbHNlJykgT0sKK1JVTihpbnRlcm5hbHMuc2V0U2hvdWxkRGlz
cGxheVRyYWNrS2luZChkb2N1bWVudCwgJ1RleHREZXNjcmlwdGlvbnMnLCB0cnVlKSkKK0VYUEVD
VEVEIChpbnRlcm5hbHMuc2hvdWxkRGlzcGxheVRyYWNrS2luZChkb2N1bWVudCwgJ1RleHREZXNj
cmlwdGlvbnMnKSA9PSAndHJ1ZScpIE9LCisKKyoqQ3JlYXRlIHRyYWNrIGVsZW1lbnRzIGR5bmFt
aWNhbGx5IHNvIHRoZXkgYXJlbid0IHByb2Nlc3NlZCBieSB0aGUgbWVkaWEgZWxlbWVudCB1bnRp
bCBhZnRlciBwcmVmZXJlbmNlcyBoYXZlIGJlZW4gY29uZmlndXJlZC4KKy0gY3JlYXRpbmcgJ3N1
YnRpdGxlcycgdHJhY2suCistIGNyZWF0aW5nICdjYXB0aW9ucycgdHJhY2suCistIGNyZWF0aW5n
ICdkZXNjcmlwdGlvbnMnIHRyYWNrLgorCitFVkVOVChsb2FkKQorRVhQRUNURUQgKHRyYWNrLnJl
YWR5U3RhdGUgPT0gJzInKSBPSworRVhQRUNURUQgKHRyYWNrLmtpbmQgIT0gJ2NhcHRpb25zJykg
T0sKKworRVZFTlQobG9hZCkKK0VYUEVDVEVEICh0cmFjay5yZWFkeVN0YXRlID09ICcyJykgT0sK
K0VYUEVDVEVEICh0cmFjay5raW5kICE9ICdjYXB0aW9ucycpIE9LCisKK0VORCBPRiBURVNUCisK
SW5kZXg6IExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXByZWZlci1jYXB0aW9ucy5odG1s
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL21lZGlhL3RyYWNrL3RyYWNrLXByZWZlci1jYXB0
aW9ucy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvbWVkaWEvdHJhY2svdHJhY2st
cHJlZmVyLWNhcHRpb25zLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsODcgQEAKKzwhRE9D
VFlQRSBodG1sPgorPGh0bWw+CisgICAgPGhlYWQ+CisgICAgICAgIDxtZXRhIGh0dHAtZXF1aXY9
IkNvbnRlbnQtVHlwZSIgY29udGVudD0idGV4dC9odG1sOyBjaGFyc2V0PXV0Zi04IiAvPgorCisg
ICAgICAgIDxzdHlsZT4KKyAgICAgICAgICAgIHZpZGVvIHsgYmFja2dyb3VuZC1jb2xvcjogeWVs
bG93OyB3aWR0aDogMzIwcHg7IGhlaWdodDogMjQwcHg7fQorICAgICAgICA8L3N0eWxlPgorICAg
ICAgICA8c2NyaXB0IHNyYz0uLi9tZWRpYS1maWxlLmpzPjwvc2NyaXB0PgorICAgICAgICA8c2Ny
aXB0IHNyYz0uLi92aWRlby10ZXN0LmpzPjwvc2NyaXB0PgorICAgICAgICA8c2NyaXB0PgorCisg
ICAgICAgICAgICB2YXIgdGltZXIgPSBudWxsOworICAgICAgICAgICAgdmFyIGNvdW50ZXIgPSAw
OworCisgICAgICAgICAgICBmdW5jdGlvbiB0cmFja0xvYWRlZCgpCisgICAgICAgICAgICB7Cisg
ICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCJFVkVOVChsb2FkKSIpOworICAgICAgICAgICAg
ICAgIAorICAgICAgICAgICAgICAgIC8vIERvbid0IGxvZyB0aGUgdHJhY2sgdHlwZSBiZWNhdXNl
IHRoZSBsb2FkIG9yZGVyIGlzIG5vdCBwcmVkaWN0YWJsZS4KKyAgICAgICAgICAgICAgICB0cmFj
ayA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgICAgICAgICB0ZXN0RXhwZWN0ZWQoInRyYWNrLnJl
YWR5U3RhdGUiLCBIVE1MVHJhY2tFbGVtZW50LkxPQURFRCk7CisgICAgICAgICAgICAgICAgdGVz
dEV4cGVjdGVkKCJ0cmFjay5raW5kIiwgImNhcHRpb25zIiwgIiE9Iik7CisKKyAgICAgICAgICAg
ICAgICAvLyBFbmQgdGhlIHRlc3QgYWZ0ZXIgYSBicmllZiBwYXVzZSBzbyB3ZSBhbGxvdyB0aGUg
dGhpcmQgdHJhY2sgdG8gbG9hZCBpZiBpdCB3aWxsLgorICAgICAgICAgICAgICAgIGlmICgrK2Nv
dW50ZXIgPT0gMikKKyAgICAgICAgICAgICAgICAgICAgdGltZXIgPSBzZXRUaW1lb3V0KGVuZFRl
c3QsIDIwMCk7CisKKyAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAg
ICAgfQorCisgICAgICAgICAgICBmdW5jdGlvbiBzZXRUZXh0VHJhY2tQcmVmZXJlbmNlcyh0eXBl
LCBmbGFnKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGlmICghd2luZG93LmludGVy
bmFscykgeworICAgICAgICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIjxiPioqVGhpcyB0ZXN0
IG9ubHkgd29ya3MgaW4gRFJUPCIgKyAiL2I+Iik7CisgICAgICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBydW4oImludGVybmFscy5z
ZXRTaG91bGREaXNwbGF5VHJhY2tLaW5kKGRvY3VtZW50LCAnIiArIHR5cGUgKyAiJywgIiArIGZs
YWcgKyAiKSIpOworICAgICAgICAgICAgICAgIHRlc3RFeHBlY3RlZCgiaW50ZXJuYWxzLnNob3Vs
ZERpc3BsYXlUcmFja0tpbmQoZG9jdW1lbnQsICciICsgdHlwZSArICInKSIsIGZsYWcpOworICAg
ICAgICAgICAgfQorICAgICAgICAgICAgCisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmFj
a0VsZW1lbnQoa2luZCwgc3JjKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIGNvbnNv
bGVXcml0ZSgiPGk+LSBjcmVhdGluZyAnIiArIGtpbmQgKyAiJyB0cmFjay48IiArICIvaT4iKTsK
KyAgICAgICAgICAgICAgICB2YXIgdHJhY2sgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd0cmFj
aycpOworICAgICAgICAgICAgICAgIHRyYWNrLnNldEF0dHJpYnV0ZSgna2luZCcsIGtpbmQpOwor
ICAgICAgICAgICAgICAgIHRyYWNrLnNldEF0dHJpYnV0ZSgnb25sb2FkJywgJ3RyYWNrTG9hZGVk
KCknKTsKKyAgICAgICAgICAgICAgICB0cmFjay5zZXRBdHRyaWJ1dGUoJ3NyYycsIHNyYyk7Cisg
ICAgICAgICAgICAgICAgdmlkZW8uYXBwZW5kQ2hpbGQodHJhY2spOworICAgICAgICAgICAgfQor
CisgICAgICAgICAgICBmdW5jdGlvbiBjcmVhdGVUcmFja0VsZW1lbnRzKCkKKyAgICAgICAgICAg
IHsKKyAgICAgICAgICAgICAgICB2YXIgdHJhY2tzID0gZG9jdW1lbnQucXVlcnlTZWxlY3RvckFs
bCgndHJhY2snKTsKKyAgICAgICAgICAgICAgICBmb3IgKHZhciBuZHggPSAwOyBuZHggPCB0cmFj
a3MubGVuZ3RoOyArK25keCkKKyAgICAgICAgICAgICAgICAgICAgdmlkZW8ucmVtb3ZlQ2hpbGQo
dHJhY2tzW25keF0pOworCisgICAgICAgICAgICAgICBjcmVhdGVUcmFja0VsZW1lbnQoInN1YnRp
dGxlcyIsICJjYXB0aW9ucy13ZWJ2dHQvdGMwMDQtd2VidnR0LWZpbGUudnR0IikKKyAgICAgICAg
ICAgICAgIGNyZWF0ZVRyYWNrRWxlbWVudCgiY2FwdGlvbnMiLCAiY2FwdGlvbnMtd2VidnR0L3Rj
MDA0LXdlYnZ0dC1maWxlLnZ0dCIpCisgICAgICAgICAgICAgICBjcmVhdGVUcmFja0VsZW1lbnQo
ImRlc2NyaXB0aW9ucyIsICJjYXB0aW9ucy13ZWJ2dHQvdGMwMDQtd2VidnR0LWZpbGUudnR0IikK
KyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgZnVuY3Rpb24gc2V0dXAoKQorICAgICAgICAg
ICAgeworICAgICAgICAgICAgICAgIGZpbmRNZWRpYUVsZW1lbnQoKTsKKworICAgICAgICAgICAg
ICAgIGNvbnNvbGVXcml0ZSgiPGk+KipTZXQgcHJlZmVyZW5jZXMgc28gc3VidGl0bGVzIGFuZCBk
ZXNjcmlwdGlvbnMgbG9hZCwgYnV0IGNhcHRpb25zIGRvIG5vdDwiICsgIi9pPiIpOworICAgICAg
ICAgICAgICAgIHNldFRleHRUcmFja1ByZWZlcmVuY2VzKCJTdWJ0aXRsZXMiLCB0cnVlKTsKKyAg
ICAgICAgICAgICAgICBzZXRUZXh0VHJhY2tQcmVmZXJlbmNlcygiQ2FwdGlvbnMiLCBmYWxzZSk7
CisgICAgICAgICAgICAgICAgc2V0VGV4dFRyYWNrUHJlZmVyZW5jZXMoIlRleHREZXNjcmlwdGlv
bnMiLCB0cnVlKTsKKworICAgICAgICAgICAgICAgIC8vIENyZWF0ZSB0cmFjayBlbGVtZW50cyBk
eW5hbWljYWxseSBzbyB0aGV5IGFyZW4ndCBwcm9jZXNzZWQgYnkgdGhlIG1lZGlhIGVsZW1lbnQK
KyAgICAgICAgICAgICAgICAvLyB1bnRpbCBhZnRlciB3ZSBoYXZlIGNvbmZpZ3VyZWQgcHJlZmVy
ZW5jZXMuCisgICAgICAgICAgICAgICAgY29uc29sZVdyaXRlKCI8YnI+PGk+KipDcmVhdGUgdHJh
Y2sgZWxlbWVudHMgZHluYW1pY2FsbHkgc28gdGhleSBhcmVuJ3QgcHJvY2Vzc2VkIGJ5IHRoZSBt
ZWRpYSBlbGVtZW50IHVudGlsIGFmdGVyIHByZWZlcmVuY2VzIGhhdmUgYmVlbiBjb25maWd1cmVk
LjwiICsgIi9pPiIpOworICAgICAgICAgICAgICAgIGNyZWF0ZVRyYWNrRWxlbWVudHMoKTsKKyAg
ICAgICAgICAgICAgICBjb25zb2xlV3JpdGUoIiIpOworICAgICAgICAgICAgfQorCisgICAgICAg
IDwvc2NyaXB0PgorICAgIDwvaGVhZD4KKyAgICA8Ym9keSBvbmxvYWQ9InNldHVwKCkiPgorICAg
ICAgICA8cD5UZXN0cyB0aGF0IHRoZSB1c2VyIHByZWZlcmVuY2VzIGZvciB0cmFjayBraW5kIGFy
ZSBob25vcmVkLjwvcD4KKyAgICAgICAgPHZpZGVvPgorICAgICAgICA8L3ZpZGVvPgorICAgIDwv
Ym9keT4KKzwvaHRtbD4K
</data>
<flag name="review"
          id="126416"
          type_id="1"
          status="+"
          setter="ap"
    />
          </attachment>
      

    </bug>

</bugzilla>