<?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>43682</bug_id>
          
          <creation_ts>2010-08-07 14:59:25 -0700</creation_ts>
          <short_desc>Add missing String builder for SVGPathParser</short_desc>
          <delta_ts>2010-08-08 09:11:15 -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>SVG</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Dirk Schulze">krit</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>zimmermann</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>261793</commentid>
    <comment_count>0</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-07 14:59:25 -0700</bug_when>
    <thetext>Add missing String builder (inheriting from SVGCustomer) for SVGPathParser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261795</commentid>
    <comment_count>1</comment_count>
      <attachid>63832</attachid>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-07 15:16:15 -0700</bug_when>
    <thetext>Created attachment 63832
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261874</commentid>
    <comment_count>2</comment_count>
      <attachid>63832</attachid>
    <who name="Nikolas Zimmermann">zimmermann</who>
    <bug_when>2010-08-08 04:46:35 -0700</bug_when>
    <thetext>Comment on attachment 63832
Patch

WebCore/svg/SVGPathParserFactory.cpp:80
 +      s_parser-&gt;setCurrentSource(source);
For consistency, add a newline before this statement and remove the one before return s_parser :-)

WebCore/svg/SVGPathParserFactory.cpp:181
 +      ASSERT(stream);
Ok you misunderstood the suggestion I gave.

The passed in OwnPtr should not be initialized, this is the task of this function.
The function should be used like this:

OwnPtr&lt;SVGPathByteStream&gt; stream; // stream pointer is null here!
if (!factory-&gt;buildSVGPathByteStreamFromString(d, stream, NormalizedParsing))
    return false;
// stream pointer is now set.

That means, the ASSERT(stream) should go away. The function should be used like this:

bool SVGPathParserFactory::buildSVGPathByteStreamFromString(const String&amp; d, OwnPtr&lt;SVGPathByteStream&gt;&amp; result, PathParsingMode parsingMode)
{
    if (d.isEmpty())
        return false;

    OwnPtr&lt;SVGPathByteStream&gt; stream = SVGPathByteStream::create();
    SVGPathByteStreamBuilder* builder = globalSVGPathByteStreamBuilder(stream.get());

    OwnPtr&lt;SVGPathStringSource&gt; source = SVGPathStringSource::create(d);
    SVGPathParser* parser = globalSVGPathParser(source.get(), builder);
    bool ok = parser-&gt;parsePathDataFromSource(parsingMode);
    parser-&gt;cleanup();
    result = stream.release(); // this is the important step
    return ok;
}

r=me, with those fixes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>261887</commentid>
    <comment_count>3</comment_count>
    <who name="Dirk Schulze">krit</who>
    <bug_when>2010-08-08 09:11:15 -0700</bug_when>
    <thetext>Committed r64949: &lt;http://trac.webkit.org/changeset/64949&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>63832</attachid>
            <date>2010-08-07 15:16:15 -0700</date>
            <delta_ts>2010-08-08 04:46:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-43682-20100808001613.patch</filename>
            <type>text/plain</type>
            <size>34329</size>
            <attacher name="Dirk Schulze">krit</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA2NDkyMSkKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsNzEgQEAKKzIwMTAtMDgtMDcgIERpcmsgU2NodWx6ZSAgPGtyaXRAd2Via2l0Lm9y
Zz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQg
bWlzc2luZyBTdHJpbmcgYnVpbGRlciBmb3IgU1ZHUGF0aFBhcnNlcgorICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NDM2ODIKKworICAgICAgICBJbnRyb2R1
Y2VzIFNWR1BhdGhTdHJpbmdCdWlsZGVyLiBTVkdQYXRoUGFyc2VyIGNsaWVudHMsIGxpa2Ugbm9y
bWFsaXplZCBhbmQgdW5hbHRlcmVkCisgICAgICAgIFNWR1BhdGhTZWdMaXN0cyBvciBTVkdQYXRo
Qnl0ZVN0cmVhbXMsIGNhbiBiZSBwYXJzZWQgYW5kIHRyYW5zZm9ybWVkIHRvIGEgc3RyaW5nLgor
ICAgICAgICBTdHJpbmdCdWlsZGVyIGNhbiBjcmVhdGUgYSBzdHJpbmcgb2YgaW5kaXZpZHVhbCBz
dHJpbmdzLCBzZXBlcmF0ZWQgYnkgc3BhY2VzIG5vdy4KKyAgICAgICAgU2hhcmUgbW9yZSBjb2Rl
IGluIFNWR1BhdGhQYXJzZXJGYWN0b3J5IGFuZCB1c2UgYSBjb21tb24gZ2VuZXJhbCBjb25jZXB0
IHRvIG1hbmFnZSBTVkcgcGF0aAorICAgICAgICBkYXRhIHBhcnNpbmcuCisKKyAgICAgICAgRG9l
c24ndCBhZmZlY3QgYW55IHRlc3RzLgorCisgICAgICAgICogQW5kcm9pZC5tazoKKyAgICAgICAg
KiBHTlVtYWtlZmlsZS5hbToKKyAgICAgICAgKiBXZWJDb3JlLmd5cGk6CisgICAgICAgICogV2Vi
Q29yZS5wcm86CisgICAgICAgICogV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2o6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIHBsYXRm
b3JtL3RleHQvU3RyaW5nQnVpbGRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTdHJpbmdCdWls
ZGVyOjp0b1N0cmluZyk6IEFkZGVkIHBvc3NpYmlsaXR5IHRvIHVzZSBhIHNwYWNlIGJldHdlZW4g
aW5kaXZpZHVhbCBzdHJpbmdzLiAKKyAgICAgICAgKiBwbGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxk
ZXIuaDogQ2xlYW51cCBhY2NvcmRpbmcgdG8gV2ViS2l0IHN0eWxlLgorICAgICAgICAoV2ViQ29y
ZTo6KToKKyAgICAgICAgKFdlYkNvcmU6OlN0cmluZ0J1aWxkZXI6OlN0cmluZ0J1aWxkZXIpOgor
ICAgICAgICAoV2ViQ29yZTo6U3RyaW5nQnVpbGRlcjo6c2V0Tm9uTnVsbCk6CisgICAgICAgIChX
ZWJDb3JlOjpTdHJpbmdCdWlsZGVyOjppc051bGwpOgorICAgICAgICAqIHN2Zy9TVkdBbGxJbk9u
ZS5jcHA6CisgICAgICAgICogc3ZnL1NWR1BhdGhCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoQnVpbGRlcjo6Y2xlYW51cCk6IENsZWFyIGFsbCByZWZlcmVuY2VzLgorICAgICAg
ICAqIHN2Zy9TVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIuaDoKKyAgICAgICAgKFdlYkNvcmU6OlNW
R1BhdGhCeXRlU3RyZWFtQnVpbGRlcjo6Y2xlYW51cCk6IGRpdG8uCisgICAgICAgICogc3ZnL1NW
R1BhdGhDb25zdW1lci5oOgorICAgICAgICAqIHN2Zy9TVkdQYXRoUGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXI6OmNsZWFudXApOiBkaXRvLgorICAgICAgICAqIHN2
Zy9TVkdQYXRoUGFyc2VyLmg6CisgICAgICAgICogc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNw
cDogQ2xlYW51cCBvZiBmYWN0b3J5LiBNb3JlIGNvZGUgZ2V0IHNoYXJlZC4KKyAgICAgICAgKFdl
YkNvcmU6Omdsb2JhbFNWR1BhdGhCdWlsZGVyKToKKyAgICAgICAgKFdlYkNvcmU6Omdsb2JhbFNW
R1BhdGhTZWdMaXN0QnVpbGRlcik6CisgICAgICAgIChXZWJDb3JlOjpnbG9iYWxTVkdQYXRoQnl0
ZVN0cmVhbUJ1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2xvYmFsU1ZHUGF0aFN0cmluZ0J1
aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6Z2xvYmFsU1ZHUGF0aFBhcnNlcik6CisgICAgICAg
IChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRQYXRoRnJvbVN0cmluZyk6Cisg
ICAgICAgIChXZWJDb3JlOjpTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRQYXRoRnJvbUJ5dGVT
dHJlYW0pOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU1ZH
UGF0aFNlZ0xpc3RGcm9tU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhQYXJzZXJG
YWN0b3J5OjpidWlsZFNWR1BhdGhTZWdMaXN0RnJvbUJ5dGVTdHJlYW0pOgorICAgICAgICAoV2Vi
Q29yZTo6U1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU3RyaW5nRnJvbUJ5dGVTdHJlYW0pOgor
ICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU1ZHUGF0aEJ5dGVT
dHJlYW1Gcm9tU3RyaW5nKToKKyAgICAgICAgKiBzdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuaDoK
KyAgICAgICAgKiBzdmcvU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyLmg6CisgICAgICAgIChXZWJDb3Jl
OjpTVkdQYXRoU2VnTGlzdEJ1aWxkZXI6OmNsZWFudXApOgorICAgICAgICAqIHN2Zy9TVkdQYXRo
U3RyaW5nQnVpbGRlci5jcHA6IEFkZGVkLiBCdWlsZCBzdHJpbmcgZnJvbSBwYXJzZWQgU1ZHIGRh
dGEuCisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nQnVpbGRlcjo6U1ZHUGF0aFN0cmlu
Z0J1aWxkZXIpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1aWxkZXI6Om1vdmVU
byk6CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRvKToKKyAg
ICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpsaW5lVG9Ib3Jpem9udGFsKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpsaW5lVG9WZXJ0aWNhbCk6
CisgICAgICAgIChXZWJDb3JlOjpTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y3VydmVUb0N1YmljKToK
KyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjdXJ2ZVRvQ3ViaWNTbW9v
dGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9RdWFk
cmF0aWMpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9R
dWFkcmF0aWNTbW9vdGgpOgorICAgICAgICAoV2ViQ29yZTo6U1ZHUGF0aFN0cmluZ0J1aWxkZXI6
OmFyY1RvKToKKyAgICAgICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjbG9zZVBh
dGgpOgorICAgICAgICAqIHN2Zy9TVkdQYXRoU3RyaW5nQnVpbGRlci5oOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpjbGVhbnVwKToKKyAgICAgICAgKFdl
YkNvcmU6OlNWR1BhdGhTdHJpbmdCdWlsZGVyOjpyZXN1bHQpOgorCiAyMDEwLTA4LTA3ICBEYW4g
QmVybnN0ZWluICA8bWl0ekBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJz
IENhcmxzc29uLgpJbmRleDogV2ViQ29yZS9BbmRyb2lkLm1rCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvQW5kcm9pZC5tawkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3JlL0FuZHJvaWQubWsJKHdv
cmtpbmcgY29weSkKQEAgLTg4OSw2ICs4ODksNyBAQCBMT0NBTF9TUkNfRklMRVMgOj0gJChMT0NB
TF9TUkNfRklMRVMpIFwKIAlzdmcvU1ZHUGF0aFNlZ0xpc3QuY3BwIFwKIAlzdmcvU1ZHUGF0aFNl
Z0xpc3RCdWlsZGVyLmNwcCBcCiAJc3ZnL1NWR1BhdGhTZWdNb3ZldG8uY3BwIFwKKwlzdmcvU1ZH
UGF0aFN0cmluZ0J1aWxkZXIuY3BwIFwKIAlzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgXAog
CXN2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAgXAogCXN2Zy9TVkdQb2ludExpc3QuY3BwIFwKSW5k
ZXg6IFdlYkNvcmUvR05VbWFrZWZpbGUuYW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9HTlVtYWtl
ZmlsZS5hbQkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3JlL0dOVW1ha2VmaWxlLmFtCSh3b3Jr
aW5nIGNvcHkpCkBAIC00MTEzLDYgKzQxMTMsOCBAQCB3ZWJjb3JlX3NvdXJjZXMgKz0gXAogCVdl
YkNvcmUvc3ZnL1NWR1BhdGhTZWdNb3ZldG8uY3BwIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
TW92ZXRvLmggXAogCVdlYkNvcmUvc3ZnL1NWR1BhdGhTb3VyY2UuaCBcCisJV2ViQ29yZS9zdmcv
U1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwIFwKKwlXZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nQnVp
bGRlci5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcCBcCiAJV2ViQ29y
ZS9zdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIFwKIAlXZWJDb3JlL3N2Zy9TVkdQYXR0ZXJuRWxl
bWVudC5jcHAgXApJbmRleDogV2ViQ29yZS9XZWJDb3JlLmd5cGkKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2Vi
Q29yZS9XZWJDb3JlLmd5cGkJKHJldmlzaW9uIDY0OTIwKQorKysgV2ViQ29yZS9XZWJDb3JlLmd5
cGkJKHdvcmtpbmcgY29weSkKQEAgLTM4NjcsNiArMzg2Nyw4IEBACiAgICAgICAgICAgICAnc3Zn
L1NWR1BhdGhTZWdNb3ZldG8uY3BwJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNlZ01vdmV0
by5oJywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFNvdXJjZS5oJywKKyAgICAgICAgICAgICdz
dmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwJywKKyAgICAgICAgICAgICdzdmcvU1ZHUGF0aFN0
cmluZ0J1aWxkZXIuaCcsCiAgICAgICAgICAgICAnc3ZnL1NWR1BhdGhTdHJpbmdTb3VyY2UuY3Bw
JywKICAgICAgICAgICAgICdzdmcvU1ZHUGF0aFN0cmluZ1NvdXJjZS5oJywKICAgICAgICAgICAg
ICdzdmcvU1ZHUGF0dGVybkVsZW1lbnQuY3BwJywKSW5kZXg6IFdlYkNvcmUvV2ViQ29yZS5wcm8K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9XZWJDb3JlLnBybwkocmV2aXNpb24gNjQ5MjApCisrKyBX
ZWJDb3JlL1dlYkNvcmUucHJvCSh3b3JraW5nIGNvcHkpCkBAIC0yODcxLDYgKzI4NzEsNyBAQCBj
b250YWlucyhERUZJTkVTLCBFTkFCTEVfU1ZHPTEpIHsKICAgICAgICAgc3ZnL1NWR1BhdGhTZWdM
aXN0LmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRoU2VnTGlzdEJ1aWxkZXIuY3BwIFwKICAgICAg
ICAgc3ZnL1NWR1BhdGhTZWdNb3ZldG8uY3BwIFwKKyAgICAgICAgc3ZnL1NWR1BhdGhTdHJpbmdC
dWlsZGVyLmNwcCBcCiAgICAgICAgIHN2Zy9TVkdQYXRoU3RyaW5nU291cmNlLmNwcCBcCiAgICAg
ICAgIHN2Zy9TVkdQYXR0ZXJuRWxlbWVudC5jcHAgXAogICAgICAgICBzdmcvU1ZHUG9pbnRMaXN0
LmNwcCBcCkluZGV4OiBXZWJDb3JlL1dlYkNvcmUudmNwcm9qL1dlYkNvcmUudmNwcm9qCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFdlYkNvcmUvV2ViQ29yZS52Y3Byb2ovV2ViQ29yZS52Y3Byb2oJKHJldmlzaW9u
IDY0OTIwKQorKysgV2ViQ29yZS9XZWJDb3JlLnZjcHJvai9XZWJDb3JlLnZjcHJvagkod29ya2lu
ZyBjb3B5KQpAQCAtNDk1MjUsNiArNDk1MjUsMTAgQEAKIAkJCQk+DQogCQkJPC9GaWxlPg0KIAkJ
CTxGaWxlDQorCQkJCVJlbGF0aXZlUGF0aD0iLi5cc3ZnXFNWR1BhdGhTdHJpbmdCdWlsZGVyLmgi
DQorCQkJCT4NCisJCQk8L0ZpbGU+DQorCQkJPEZpbGUNCiAJCQkJUmVsYXRpdmVQYXRoPSIuLlxz
dmdcU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdl
YkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCShyZXZpc2lvbiA2NDkyMCkK
KysrIFdlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNv
cHkpCkBAIC0xNDM1LDYgKzE0MzUsOCBAQAogCQk4NDE5RDJBOTEyMEQ5MkQwMDAxNDFGOEYgLyog
U1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWls
ZEZpbGU7IGZpbGVSZWYgPSA4NDE5RDJBNjEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVT
dHJlYW1CdWlsZGVyLmggKi87IH07CiAJCTg0MTlEMkFDMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQ
YXRoQnl0ZVN0cmVhbVNvdXJjZS5jcHAgaW4gU291cmNlcyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZp
bGU7IGZpbGVSZWYgPSA4NDE5RDJBQTEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJl
YW1Tb3VyY2UuY3BwICovOyB9OwogCQk4NDE5RDJBRDEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZHUGF0
aEJ5dGVTdHJlYW1Tb3VyY2UuaCBpbiBIZWFkZXJzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsg
ZmlsZVJlZiA9IDg0MTlEMkFCMTIwRDkyRkMwMDE0MUY4RiAvKiBTVkdQYXRoQnl0ZVN0cmVhbVNv
dXJjZS5oICovOyB9OworCQk4NDE5RDJCOTEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmlu
Z0J1aWxkZXIuY3BwIGluIFNvdXJjZXMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVm
ID0gODQxOUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCAq
LzsgfTsKKwkJODQxOUQyQkExMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVy
LmggaW4gSGVhZGVycyAqLyA9IHtpc2EgPSBQQlhCdWlsZEZpbGU7IGZpbGVSZWYgPSA4NDE5RDJC
ODEyMEUwQzc2MDAxNDFGOEYgLyogU1ZHUGF0aFN0cmluZ0J1aWxkZXIuaCAqLzsgfTsKIAkJODQx
RkRDMjYxMTc4QzlCRTAwRjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmNwcCBpbiBT
b3VyY2VzICovID0ge2lzYSA9IFBCWEJ1aWxkRmlsZTsgZmlsZVJlZiA9IDg0MUZEQzI0MTE3OEM5
QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAgKi87IH07CiAJCTg0MUZE
QzI3MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oIGluIEhlYWRl
cnMgKi8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQxRkRDMjUxMTc4QzlCRTAw
RjhBQzlCIC8qIFJlbmRlclNWR1Jlc291cmNlRmlsdGVyLmggKi87IH07CiAJCTg0MjI0MTgzMTA3
RTc3RjQwMDc2NkE4NyAvKiBKU1NWR0ZFTW9ycGhvbG9neUVsZW1lbnQuY3BwIGluIFNvdXJjZXMg
Ki8gPSB7aXNhID0gUEJYQnVpbGRGaWxlOyBmaWxlUmVmID0gODQyMjQxODExMDdFNzdGNDAwNzY2
QTg3IC8qIEpTU1ZHRkVNb3JwaG9sb2d5RWxlbWVudC5jcHAgKi87IH07CkBAIC03MjY4LDYgKzcy
NzAsOCBAQAogCQk4NDE5RDJBNjEyMEQ5MkQwMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1C
dWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsg
bGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFNWR1BhdGhCeXRlU3Ry
ZWFtQnVpbGRlci5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDE5RDJBQTEyMEQ5
MkZDMDAxNDFGOEYgLyogU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwICovID0ge2lzYSA9IFBC
WEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291
cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gU1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuY3BwOyBzb3Vy
Y2VUcmVlID0gIjxncm91cD4iOyB9OwogCQk4NDE5RDJBQjEyMEQ5MkZDMDAxNDFGOEYgLyogU1ZH
UGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxl
RW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
U1ZHUGF0aEJ5dGVTdHJlYW1Tb3VyY2UuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJ
ODQxOUQyQjcxMjBFMEM3NjAwMTQxRjhGIC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IFNWR1BhdGhTdHJpbmdCdWlsZGVyLmNw
cDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJODQxOUQyQjgxMjBFMEM3NjAwMTQxRjhG
IC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0
aCA9IFNWR1BhdGhTdHJpbmdCdWlsZGVyLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJ
CTg0MUZEQzI0MTE3OEM5QkUwMEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZp
bHRlci5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCTg0MUZEQzI1MTE3OEM5QkUw
MEY4QUM5QiAvKiBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29k
ZS5jLmg7IHBhdGggPSBSZW5kZXJTVkdSZXNvdXJjZUZpbHRlci5oOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwogCQk4NDIyNDE4MTEwN0U3N0Y0MDA3NjZBODcgLyogSlNTVkdGRU1vcnBob2xv
Z3lFbGVtZW50LmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rpbmcg
PSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEpTU1ZH
RkVNb3JwaG9sb2d5RWxlbWVudC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CkBAIC0x
NTM2OCw2ICsxNTM3Miw4IEBACiAJCQkJQjIyMjc4RUYwRDAwQkYyMTAwNzFCNzgyIC8qIFNWR1Bh
dGhTZWdNb3ZldG9BYnMuaWRsICovLAogCQkJCUIyMjI3OEYwMEQwMEJGMjEwMDcxQjc4MiAvKiBT
VkdQYXRoU2VnTW92ZXRvUmVsLmlkbCAqLywKIAkJCQk4NDMwMEJENzEyMEM5QUQ0MDAyMTk1NEEg
LyogU1ZHUGF0aFNvdXJjZS5oICovLAorCQkJCTg0MTlEMkI3MTIwRTBDNzYwMDE0MUY4RiAvKiBT
VkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgKi8sCisJCQkJODQxOUQyQjgxMjBFMEM3NjAwMTQxRjhG
IC8qIFNWR1BhdGhTdHJpbmdCdWlsZGVyLmggKi8sCiAJCQkJODQzMDBCRDkxMjBDOUFFRDAwMjE5
NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuY3BwICovLAogCQkJCTg0MzAwQkQ1MTIwQzlBQUMw
MDIxOTU0QSAvKiBTVkdQYXRoU3RyaW5nU291cmNlLmggKi8sCiAJCQkJQjIyMjc4RjEwRDAwQkYy
MTAwNzFCNzgyIC8qIFNWR1BhdHRlcm5FbGVtZW50LmNwcCAqLywKQEAgLTE5ODQxLDYgKzE5ODQ3
LDcgQEAKIAkJCQk4NDc2QzlFNjExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyLmggaW4gSGVhZGVycyAqLywKIAkJCQlCMjIyN0E4NDBEMDBCRjIyMDA3MUI3ODIgLyogU1ZH
UGF0aFNlZ01vdmV0by5oIGluIEhlYWRlcnMgKi8sCiAJCQkJODQzMDBCRDgxMjBDOUFENDAwMjE5
NTRBIC8qIFNWR1BhdGhTb3VyY2UuaCBpbiBIZWFkZXJzICovLAorCQkJCTg0MTlEMkJBMTIwRTBD
NzYwMDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5oIGluIEhlYWRlcnMgKi8sCiAJCQkJ
ODQzMDBCRDYxMjBDOUFBQzAwMjE5NTRBIC8qIFNWR1BhdGhTdHJpbmdTb3VyY2UuaCBpbiBIZWFk
ZXJzICovLAogCQkJCUIyMjI3QTg4MEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXR0ZXJuRWxlbWVu
dC5oIGluIEhlYWRlcnMgKi8sCiAJCQkJQjI1NTk5OTUwRDAwRDhCQTAwQkI4MjVDIC8qIFNWR1Bv
aW50TGlnaHRTb3VyY2UuaCBpbiBIZWFkZXJzICovLApAQCAtMjIzMDQsNiArMjIzMTEsNyBAQAog
CQkJCUIyMjI3QTgwMEQwMEJGMjIwMDcxQjc4MiAvKiBTVkdQYXRoU2VnTGlzdC5jcHAgaW4gU291
cmNlcyAqLywKIAkJCQk4NDc2QzlFNTExREY2QTBCMDA1NTVCMDIgLyogU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyLmNwcCBpbiBTb3VyY2VzICovLAogCQkJCUIyMjI3QTgzMEQwMEJGMjIwMDcxQjc4MiAv
KiBTVkdQYXRoU2VnTW92ZXRvLmNwcCBpbiBTb3VyY2VzICovLAorCQkJCTg0MTlEMkI5MTIwRTBD
NzYwMDE0MUY4RiAvKiBTVkdQYXRoU3RyaW5nQnVpbGRlci5jcHAgaW4gU291cmNlcyAqLywKIAkJ
CQk4NDMwMEJEQTEyMEM5QUVEMDAyMTk1NEEgLyogU1ZHUGF0aFN0cmluZ1NvdXJjZS5jcHAgaW4g
U291cmNlcyAqLywKIAkJCQlCMjIyN0E4NzBEMDBCRjIyMDA3MUI3ODIgLyogU1ZHUGF0dGVybkVs
ZW1lbnQuY3BwIGluIFNvdXJjZXMgKi8sCiAJCQkJQjIyMjdBOEIwRDAwQkYyMjAwNzFCNzgyIC8q
IFNWR1BvaW50TGlzdC5jcHAgaW4gU291cmNlcyAqLywKSW5kZXg6IFdlYkNvcmUvcGxhdGZvcm0v
dGV4dC9TdHJpbmdCdWlsZGVyLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3BsYXRmb3JtL3Rl
eHQvU3RyaW5nQnVpbGRlci5jcHAJKHJldmlzaW9uIDY0OTIwKQorKysgV2ViQ29yZS9wbGF0Zm9y
bS90ZXh0L1N0cmluZ0J1aWxkZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNiBAQAog
LyoKICAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQu
CisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIEluIE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCBy
aWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2Ug
YW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBw
ZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTY3LDcg
KzY4LDcgQEAgdm9pZCBTdHJpbmdCdWlsZGVyOjphcHBlbmQoY2hhciBjKQogICAgIG1fc3RyaW5n
cy5hcHBlbmQoU3RyaW5nKCZjLCAxKSk7CiB9CiAKLVN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0
cmluZygpIGNvbnN0CitTdHJpbmcgU3RyaW5nQnVpbGRlcjo6dG9TdHJpbmcoQ29uY2F0TW9kZSBt
b2RlKSBjb25zdAogewogICAgIGlmIChpc051bGwoKSkKICAgICAgICAgcmV0dXJuIFN0cmluZygp
OwpAQCAtODAsMTcgKzgxLDM3IEBAIFN0cmluZyBTdHJpbmdCdWlsZGVyOjp0b1N0cmluZygpIGNv
bnN0CiAgICAgICAgIHJldHVybiBtX3N0cmluZ3NbMF07CiAKICAgICBVQ2hhciogYnVmZmVyOwot
ICAgIFN0cmluZyByZXN1bHQgPSBTdHJpbmc6OmNyZWF0ZVVuaW5pdGlhbGl6ZWQobV90b3RhbExl
bmd0aCwgYnVmZmVyKTsKKyAgICB1bnNpZ25lZCB0b3RhbExlbmd0aCA9IG1fdG90YWxMZW5ndGg7
CisgICAgaWYgKG1vZGUgPT0gQ29uY2F0QWRkaW5nU3BhY2VzQmV0d2VlbkluZGl2aWR1YWxTdHJp
bmdzKQorICAgICAgICB0b3RhbExlbmd0aCArPSBjb3VudCAtIDE7CisgICAgU3RyaW5nIHJlc3Vs
dCA9IFN0cmluZzo6Y3JlYXRlVW5pbml0aWFsaXplZCh0b3RhbExlbmd0aCwgYnVmZmVyKTsKIAog
ICAgIFVDaGFyKiBwID0gYnVmZmVyOwotICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBjb3Vu
dDsgKytpKSB7Ci0gICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IG1fc3RyaW5nc1tpXS5pbXBs
KCk7Ci0gICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmluZy0+bGVuZ3RoKCk7IAotICAgICAg
ICBtZW1jcHkocCwgc3RyaW5nLT5jaGFyYWN0ZXJzKCksIGxlbmd0aCAqIDIpOwotICAgICAgICBw
ICs9IGxlbmd0aDsKLSAgICB9CiAKLSAgICBBU1NFUlQocCA9PSBtX3RvdGFsTGVuZ3RoICsgYnVm
ZmVyKTsKKyAgICAvLyBXZSBjb3VsZCBoYW5kbGUgYm90aCBDb25jYXQgbW9kZXMgaW4gYSBzaW5n
bGUgZm9yIGxvb3AsIG5vdCBkb2luZyB0aGF0IGZvciBwZXJmb3JtYW5jZSByZWFzb25zLgorICAg
IGlmIChtb2RlID09IENvbmNhdFVuYWx0ZXJlZCkgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSAwOyBpIDwgY291bnQ7ICsraSkgeworICAgICAgICAgICAgU3RyaW5nSW1wbCogc3RyaW5nID0g
bV9zdHJpbmdzW2ldLmltcGwoKTsKKyAgICAgICAgICAgIHVuc2lnbmVkIGxlbmd0aCA9IHN0cmlu
Zy0+bGVuZ3RoKCk7IAorICAgICAgICAgICAgbWVtY3B5KHAsIHN0cmluZy0+Y2hhcmFjdGVycygp
LCBsZW5ndGggKiAyKTsKKyAgICAgICAgICAgIHAgKz0gbGVuZ3RoOworICAgICAgICB9CisgICAg
fSBlbHNlIHsKKyAgICAgICAgQVNTRVJUKG1vZGUgPT0gQ29uY2F0QWRkaW5nU3BhY2VzQmV0d2Vl
bkluZGl2aWR1YWxTdHJpbmdzKTsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGNv
dW50OyArK2kpIHsKKyAgICAgICAgICAgIFN0cmluZ0ltcGwqIHN0cmluZyA9IG1fc3RyaW5nc1tp
XS5pbXBsKCk7CisgICAgICAgICAgICB1bnNpZ25lZCBsZW5ndGggPSBzdHJpbmctPmxlbmd0aCgp
OyAKKyAgICAgICAgICAgIG1lbWNweShwLCBzdHJpbmctPmNoYXJhY3RlcnMoKSwgbGVuZ3RoICog
Mik7CisgICAgICAgICAgICBwICs9IGxlbmd0aDsKKworICAgICAgICAgICAgLy8gQWRkIHNwYWNl
IGFmdGVyIHN0cmluZyBiZWZvcmUgdGhlIHN0YXJ0IG9mIHRoZSBuZXh0IHN0cmluZywgaWYgd2Un
cmUgbm90IHByb2Nlc3NpbmcgdGhlIGxhc3Qgc3RyaW5nLgorICAgICAgICAgICAgaWYgKGkgPCBj
b3VudCAtIDEpIHsKKyAgICAgICAgICAgICAgICAqcCA9ICcgJzsKKyAgICAgICAgICAgICAgICAr
K3A7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisgICAgQVNTRVJUKHAgPT0gdG90
YWxMZW5ndGggKyBidWZmZXIpOwogCiAgICAgcmV0dXJuIHJlc3VsdDsKIH0KSW5kZXg6IFdlYkNv
cmUvcGxhdGZvcm0vdGV4dC9TdHJpbmdCdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9w
bGF0Zm9ybS90ZXh0L1N0cmluZ0J1aWxkZXIuaAkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3Jl
L3BsYXRmb3JtL3RleHQvU3RyaW5nQnVpbGRlci5oCSh3b3JraW5nIGNvcHkpCkBAIC0zMywyNyAr
MzMsMzYgQEAKIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCi0gICAgY2xhc3MgU3RyaW5nQnVpbGRl
ciB7Ci0gICAgcHVibGljOgotICAgICAgICBTdHJpbmdCdWlsZGVyKCkgOiBtX3RvdGFsTGVuZ3Ro
KFVJTlRfTUFYKSB7fQotCi0gICAgICAgIHZvaWQgc2V0Tm9uTnVsbCgpIHsgaWYgKG1fdG90YWxM
ZW5ndGggPT0gVUlOVF9NQVgpIG1fdG90YWxMZW5ndGggPSAwOyB9Ci0KLSAgICAgICAgdm9pZCBh
cHBlbmQoY29uc3QgU3RyaW5nJik7Ci0gICAgICAgIHZvaWQgYXBwZW5kKFVDaGFyKTsKLSAgICAg
ICAgdm9pZCBhcHBlbmQoY2hhcik7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGNsZWFyKCk7Ci0g
ICAgICAgIHVuc2lnbmVkIGxlbmd0aCgpIGNvbnN0OwotCi0gICAgICAgIFN0cmluZyB0b1N0cmlu
ZygpIGNvbnN0OwotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgYm9vbCBpc051bGwoKSBjb25zdCB7
IHJldHVybiBtX3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYOyB9Ci0KLSAgICAgICAgdW5zaWduZWQg
bV90b3RhbExlbmd0aDsKLSAgICAgICAgVmVjdG9yPFN0cmluZywgMTY+IG1fc3RyaW5nczsKLSAg
ICB9OworZW51bSBDb25jYXRNb2RlIHsKKyAgICBDb25jYXRVbmFsdGVyZWQsCisgICAgQ29uY2F0
QWRkaW5nU3BhY2VzQmV0d2VlbkluZGl2aWR1YWxTdHJpbmdzCit9OworCitjbGFzcyBTdHJpbmdC
dWlsZGVyIHsKK3B1YmxpYzoKKyAgICBTdHJpbmdCdWlsZGVyKCkgOiBtX3RvdGFsTGVuZ3RoKFVJ
TlRfTUFYKSB7fQorCisgICAgdm9pZCBzZXROb25OdWxsKCkKKyAgICB7CisgICAgICAgIGlmICht
X3RvdGFsTGVuZ3RoID09IFVJTlRfTUFYKQorICAgICAgICAgICAgbV90b3RhbExlbmd0aCA9IDA7
CisgICAgfQorCisgICAgdm9pZCBhcHBlbmQoY29uc3QgU3RyaW5nJik7CisgICAgdm9pZCBhcHBl
bmQoVUNoYXIpOworICAgIHZvaWQgYXBwZW5kKGNoYXIpOworICAgIAorICAgIHZvaWQgY2xlYXIo
KTsKKyAgICB1bnNpZ25lZCBsZW5ndGgoKSBjb25zdDsKKworICAgIFN0cmluZyB0b1N0cmluZyhD
b25jYXRNb2RlIG1vZGUgPSBDb25jYXRVbmFsdGVyZWQpIGNvbnN0OworCitwcml2YXRlOgorICAg
IGJvb2wgaXNOdWxsKCkgY29uc3QgeyByZXR1cm4gbV90b3RhbExlbmd0aCA9PSBVSU5UX01BWDsg
fQorCisgICAgdW5zaWduZWQgbV90b3RhbExlbmd0aDsKKyAgICBWZWN0b3I8U3RyaW5nLCAxNj4g
bV9zdHJpbmdzOworfTsKIAogfQogCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdBbGxJbk9uZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHQWxsSW5PbmUuY3BwCShyZXZpc2lvbiA2NDky
MCkKKysrIFdlYkNvcmUvc3ZnL1NWR0FsbEluT25lLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTI2
LDYgKzEyNiw3IEBACiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuY3BwIgogI2luY2x1ZGUgIlNW
R1BhdGhTZWdMaXN0QnVpbGRlci5jcHAiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ01vdmV0by5jcHAi
CisjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3BwIgogI2luY2x1ZGUgIlNWR1BhdGhT
dHJpbmdTb3VyY2UuY3BwIgogI2luY2x1ZGUgIlNWR1BhdHRlcm5FbGVtZW50LmNwcCIKICNpbmNs
dWRlICJTVkdQb2ludExpc3QuY3BwIgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aEJ1aWxkZXIu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQnVpbGRlci5oCShyZXZpc2lvbiA2
NDkyMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhCdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAg
LTM2LDYgKzM2LDcgQEAgcHVibGljOgogICAgIFNWR1BhdGhCdWlsZGVyKCk7CiAKICAgICB2b2lk
IHNldEN1cnJlbnRQYXRoKFBhdGgqIHBhdGgpIHsgbV9wYXRoID0gcGF0aDsgfQorICAgIHZpcnR1
YWwgdm9pZCBjbGVhbnVwKCkgeyBtX3BhdGggPSAwOyB9CiAKIHByaXZhdGU6CiAgICAgLy8gVXNl
ZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQYXJzaW5nIG1vZGVzLgpJbmRleDogV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29y
ZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHJldmlzaW9uIDY0OTIwKQorKysgV2Vi
Q29yZS9zdmcvU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0
LDYgKzM0LDcgQEAgcHVibGljOgogICAgIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcigpOwogCiAg
ICAgdm9pZCBzZXRDdXJyZW50Qnl0ZVN0cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSogYnl0ZVN0cmVh
bSkgeyBtX2J5dGVTdHJlYW0gPSBieXRlU3RyZWFtOyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFu
dXAoKSB7IG1fYnl0ZVN0cmVhbSA9IDA7IH0KIAogcHJpdmF0ZToKICAgICAvLyBVc2VkIGluIFVu
YWx0ZXJlZFBhcnNpbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCkluZGV4OiBXZWJDb3JlL3N2
Zy9TVkdQYXRoQ29uc3VtZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoQ29u
c3VtZXIuaAkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoQ29uc3VtZXIu
aAkod29ya2luZyBjb3B5KQpAQCAtNDIsNiArNDIsOSBAQCBlbnVtIFBhdGhQYXJzaW5nTW9kZSB7
CiAKIGNsYXNzIFNWR1BhdGhDb25zdW1lciA6IHB1YmxpYyBOb25jb3B5YWJsZSB7CiBwdWJsaWM6
CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSA9IDA7CisKK3B1YmxpYzoKICAgICAvLyBVc2Vk
IGluIFVuYWx0ZXJlZFBhcmlzbmcvTm9ybWFsaXplZFBhcnNpbmcgbW9kZXMuCiAgICAgdmlydHVh
bCB2b2lkIG1vdmVUbyhjb25zdCBGbG9hdFBvaW50JiwgYm9vbCBjbG9zZWQsIFBhdGhDb29yZGlu
YXRlTW9kZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBsaW5lVG8oY29uc3QgRmxvYXRQb2ludCYs
IFBhdGhDb29yZGluYXRlTW9kZSkgPSAwOwpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNl
ci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHJldmlz
aW9uIDY0OTIwKQorKysgV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQyNSw2ICs0MjUsMTYgQEAgYm9vbCBTVkdQYXRoUGFyc2VyOjpwYXJzZVBhdGhEYXRh
RnJvbVNvdQogICAgIHJldHVybiBmYWxzZTsKIH0KIAordm9pZCBTVkdQYXRoUGFyc2VyOjpjbGVh
bnVwKCkKK3sKKyAgICBBU1NFUlQobV9zb3VyY2UpOworICAgIEFTU0VSVChtX2NvbnN1bWVyKTsK
KworICAgIG1fY29uc3VtZXItPmNsZWFudXAoKTsKKyAgICBtX3NvdXJjZSA9IDA7CisgICAgbV9j
b25zdW1lciA9IDA7Cit9CisKIC8vIFRoaXMgd29ya3MgYnkgY29udmVydGluZyB0aGUgU1ZHIGFy
YyB0byAic2ltcGxlIiBiZXppZXJzLgogLy8gUGFydGx5IGFkYXB0ZWQgZnJvbSBOaWtvJ3MgY29k
ZSBpbiBrZGVsaWJzL2tkZWNvcmUvc3ZnaWNvbnMuCiAvLyBTZWUgYWxzbyBTVkcgaW1wbGVtZW50
YXRpb24gbm90ZXM6IGh0dHA6Ly93d3cudzMub3JnL1RSL1NWRy9pbXBsbm90ZS5odG1sI0FyY0Nv
bnZlcnNpb25FbmRwb2ludFRvQ2VudGVyCkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2Vy
LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlci5oCShyZXZpc2lvbiA2
NDkyMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhQYXJzZXIuaAkod29ya2luZyBjb3B5KQpAQCAt
NDIsNiArNDIsNyBAQCBwdWJsaWM6CiAgICAgYm9vbCBwYXJzZVBhdGhEYXRhRnJvbVNvdXJjZShQ
YXRoUGFyc2luZ01vZGUgcGF0aFBhcnNpbmdNb2RlKTsKICAgICB2b2lkIHNldEN1cnJlbnRDb25z
dW1lcihTVkdQYXRoQ29uc3VtZXIqIGNvbnN1bWVyKSB7IG1fY29uc3VtZXIgPSBjb25zdW1lcjsg
fQogICAgIHZvaWQgc2V0Q3VycmVudFNvdXJjZShTVkdQYXRoU291cmNlKiBzb3VyY2UpIHsgbV9z
b3VyY2UgPSBzb3VyY2U7IH0KKyAgICB2b2lkIGNsZWFudXAoKTsKIAogcHJpdmF0ZToKICAgICBi
b29sIGRlY29tcG9zZUFyY1RvQ3ViaWMoZmxvYXQsIGZsb2F0LCBmbG9hdCwgRmxvYXRQb2ludCYs
IEZsb2F0UG9pbnQmLCBib29sIGxhcmdlQXJjRmxhZywgYm9vbCBzd2VlcEZsYWcpOwpJbmRleDog
V2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZhY3RvcnkuY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNv
cmUvc3ZnL1NWR1BhdGhQYXJzZXJGYWN0b3J5LmNwcAkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJD
b3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFjdG9yeS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIyLDQ3
ICsyMiw2MyBAQAogI2lmIEVOQUJMRShTVkcpCiAjaW5jbHVkZSAiU1ZHUGF0aFBhcnNlckZhY3Rv
cnkuaCIKIAorI2luY2x1ZGUgIlN0cmluZ0J1aWxkZXIuaCIKICNpbmNsdWRlICJTVkdQYXRoQnVp
bGRlci5oIgogI2luY2x1ZGUgIlNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlci5oIgogI2luY2x1ZGUg
IlNWR1BhdGhCeXRlU3RyZWFtU291cmNlLmgiCisjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ0J1aWxk
ZXIuaCIKICNpbmNsdWRlICJTVkdQYXRoUGFyc2VyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xp
c3RCdWlsZGVyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ1NvdXJjZS5oIgogCiBuYW1lc3Bh
Y2UgV2ViQ29yZSB7CiAKLXN0YXRpYyBTVkdQYXRoQnVpbGRlciogZ2xvYmFsU1ZHUGF0aEJ1aWxk
ZXIoKQorc3RhdGljIFNWR1BhdGhCdWlsZGVyKiBnbG9iYWxTVkdQYXRoQnVpbGRlcihQYXRoJiBy
ZXN1bHQpCiB7CiAgICAgc3RhdGljIFNWR1BhdGhCdWlsZGVyKiBzX2J1aWxkZXIgPSAwOwogICAg
IGlmICghc19idWlsZGVyKQogICAgICAgICBzX2J1aWxkZXIgPSBuZXcgU1ZHUGF0aEJ1aWxkZXI7
CiAKKyAgICBzX2J1aWxkZXItPnNldEN1cnJlbnRQYXRoKCZyZXN1bHQpOwogICAgIHJldHVybiBz
X2J1aWxkZXI7CiB9CiAKLXN0YXRpYyBTVkdQYXRoU2VnTGlzdEJ1aWxkZXIqIGdsb2JhbFNWR1Bh
dGhTZWdMaXN0QnVpbGRlcigpCitzdGF0aWMgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKiBnbG9iYWxT
VkdQYXRoU2VnTGlzdEJ1aWxkZXIoU1ZHUGF0aFNlZ0xpc3QqIHJlc3VsdCkKIHsKICAgICBzdGF0
aWMgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKiBzX2J1aWxkZXIgPSAwOwogICAgIGlmICghc19idWls
ZGVyKQogICAgICAgICBzX2J1aWxkZXIgPSBuZXcgU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyOwogCisg
ICAgc19idWlsZGVyLT5zZXRDdXJyZW50U1ZHUGF0aFNlZ0xpc3QocmVzdWx0KTsKICAgICByZXR1
cm4gc19idWlsZGVyOwogfQogCi1zdGF0aWMgU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyKiBnbG9i
YWxTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIoKQorc3RhdGljIFNWR1BhdGhCeXRlU3RyZWFtQnVp
bGRlciogZ2xvYmFsU1ZHUGF0aEJ5dGVTdHJlYW1CdWlsZGVyKFNWR1BhdGhCeXRlU3RyZWFtKiBy
ZXN1bHQpCiB7CiAgICAgc3RhdGljIFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlciogc19idWlsZGVy
ID0gMDsKICAgICBpZiAoIXNfYnVpbGRlcikKICAgICAgICAgc19idWlsZGVyID0gbmV3IFNWR1Bh
dGhCeXRlU3RyZWFtQnVpbGRlcjsKIAorICAgIHNfYnVpbGRlci0+c2V0Q3VycmVudEJ5dGVTdHJl
YW0ocmVzdWx0KTsKICAgICByZXR1cm4gc19idWlsZGVyOwogfQogCi1zdGF0aWMgU1ZHUGF0aFBh
cnNlciogZ2xvYmFsU1ZHUGF0aFBhcnNlcigpCitzdGF0aWMgU1ZHUGF0aFN0cmluZ0J1aWxkZXIq
IGdsb2JhbFNWR1BhdGhTdHJpbmdCdWlsZGVyKCkKK3sKKyAgICBzdGF0aWMgU1ZHUGF0aFN0cmlu
Z0J1aWxkZXIqIHNfYnVpbGRlciA9IDA7CisgICAgaWYgKCFzX2J1aWxkZXIpCisgICAgICAgIHNf
YnVpbGRlciA9IG5ldyBTVkdQYXRoU3RyaW5nQnVpbGRlcjsKKworICAgIHJldHVybiBzX2J1aWxk
ZXI7Cit9CisKK3N0YXRpYyBTVkdQYXRoUGFyc2VyKiBnbG9iYWxTVkdQYXRoUGFyc2VyKFNWR1Bh
dGhTb3VyY2UqIHNvdXJjZSwgU1ZHUGF0aENvbnN1bWVyKiBjb25zdW1lcikKIHsKICAgICBzdGF0
aWMgU1ZHUGF0aFBhcnNlciogc19wYXJzZXIgPSAwOwogICAgIGlmICghc19wYXJzZXIpCiAgICAg
ICAgIHNfcGFyc2VyID0gbmV3IFNWR1BhdGhQYXJzZXI7CisgICAgc19wYXJzZXItPnNldEN1cnJl
bnRTb3VyY2Uoc291cmNlKTsKKyAgICBzX3BhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKGNvbnN1
bWVyKTsKIAogICAgIHJldHVybiBzX3BhcnNlcjsKIH0KQEAgLTg5LDE5ICsxMDUsMTIgQEAgYm9v
bCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRQYXRoRnJvbQogICAgIGlmIChkLmlzRW1wdHko
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgU1ZHUGF0aEJ1aWxkZXIqIGJ1aWxkZXIg
PSBnbG9iYWxTVkdQYXRoQnVpbGRlcigpOwotICAgIGJ1aWxkZXItPnNldEN1cnJlbnRQYXRoKCZy
ZXN1bHQpOwotCi0gICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFsU1ZHUGF0aFBhcnNl
cigpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKGJ1aWxkZXIpOworICAgIFNWR1Bh
dGhCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aEJ1aWxkZXIocmVzdWx0KTsKIAogICAg
IE93blB0cjxTVkdQYXRoU3RyaW5nU291cmNlPiBzb3VyY2UgPSBTVkdQYXRoU3RyaW5nU291cmNl
OjpjcmVhdGUoZCk7Ci0gICAgcGFyc2VyLT5zZXRDdXJyZW50U291cmNlKHNvdXJjZS5nZXQoKSk7
Ci0KKyAgICBTVkdQYXRoUGFyc2VyKiBwYXJzZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKHNvdXJj
ZS5nZXQoKSwgYnVpbGRlcik7CiAgICAgYm9vbCBvayA9IHBhcnNlci0+cGFyc2VQYXRoRGF0YUZy
b21Tb3VyY2UoTm9ybWFsaXplZFBhcnNpbmcpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1
bWVyKDApOwotICAgIHBhcnNlci0+c2V0Q3VycmVudFNvdXJjZSgwKTsKLSAgICBidWlsZGVyLT5z
ZXRDdXJyZW50UGF0aCgwKTsKKyAgICBwYXJzZXItPmNsZWFudXAoKTsKICAgICByZXR1cm4gb2s7
CiB9CiAKQEAgLTExMSwxOSArMTIwLDEyIEBAIGJvb2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1
aWxkUGF0aEZyb20KICAgICBpZiAoc3RyZWFtLT5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybiBm
YWxzZTsKIAotICAgIFNWR1BhdGhCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aEJ1aWxk
ZXIoKTsKLSAgICBidWlsZGVyLT5zZXRDdXJyZW50UGF0aCgmcmVzdWx0KTsKLQotICAgIFNWR1Bh
dGhQYXJzZXIqIHBhcnNlciA9IGdsb2JhbFNWR1BhdGhQYXJzZXIoKTsKLSAgICBwYXJzZXItPnNl
dEN1cnJlbnRDb25zdW1lcihidWlsZGVyKTsKKyAgICBTVkdQYXRoQnVpbGRlciogYnVpbGRlciA9
IGdsb2JhbFNWR1BhdGhCdWlsZGVyKHJlc3VsdCk7CiAKICAgICBPd25QdHI8U1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2U+IHNvdXJjZSA9IFNWR1BhdGhCeXRlU3RyZWFtU291cmNlOjpjcmVhdGUoc3Ry
ZWFtKTsKLSAgICBwYXJzZXItPnNldEN1cnJlbnRTb3VyY2Uoc291cmNlLmdldCgpKTsKLQorICAg
IFNWR1BhdGhQYXJzZXIqIHBhcnNlciA9IGdsb2JhbFNWR1BhdGhQYXJzZXIoc291cmNlLmdldCgp
LCBidWlsZGVyKTsKICAgICBib29sIG9rID0gcGFyc2VyLT5wYXJzZVBhdGhEYXRhRnJvbVNvdXJj
ZShOb3JtYWxpemVkUGFyc2luZyk7Ci0gICAgcGFyc2VyLT5zZXRDdXJyZW50Q29uc3VtZXIoMCk7
Ci0gICAgcGFyc2VyLT5zZXRDdXJyZW50U291cmNlKDApOwotICAgIGJ1aWxkZXItPnNldEN1cnJl
bnRQYXRoKDApOworICAgIHBhcnNlci0+Y2xlYW51cCgpOwogICAgIHJldHVybiBvazsKIH0KIApA
QCAtMTMzLDE5ICsxMzUsMTIgQEAgYm9vbCBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6YnVpbGRTVkdQ
YXRoUwogICAgIGlmIChkLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAg
U1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFNlZ0xpc3RCdWls
ZGVyKCk7Ci0gICAgYnVpbGRlci0+c2V0Q3VycmVudFNWR1BhdGhTZWdMaXN0KHJlc3VsdCk7Ci0K
LSAgICBTVkdQYXRoUGFyc2VyKiBwYXJzZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKCk7Ci0gICAg
cGFyc2VyLT5zZXRDdXJyZW50Q29uc3VtZXIoYnVpbGRlcik7CisgICAgU1ZHUGF0aFNlZ0xpc3RC
dWlsZGVyKiBidWlsZGVyID0gZ2xvYmFsU1ZHUGF0aFNlZ0xpc3RCdWlsZGVyKHJlc3VsdCk7CiAK
ICAgICBPd25QdHI8U1ZHUGF0aFN0cmluZ1NvdXJjZT4gc291cmNlID0gU1ZHUGF0aFN0cmluZ1Nv
dXJjZTo6Y3JlYXRlKGQpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudFNvdXJjZShzb3VyY2UuZ2V0
KCkpOwotCisgICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFsU1ZHUGF0aFBhcnNlcihz
b3VyY2UuZ2V0KCksIGJ1aWxkZXIpOwogICAgIGJvb2wgb2sgPSBwYXJzZXItPnBhcnNlUGF0aERh
dGFGcm9tU291cmNlKHBhcnNpbmdNb2RlKTsKLSAgICBwYXJzZXItPnNldEN1cnJlbnRDb25zdW1l
cigwKTsKLSAgICBwYXJzZXItPnNldEN1cnJlbnRTb3VyY2UoMCk7Ci0gICAgYnVpbGRlci0+c2V0
Q3VycmVudFNWR1BhdGhTZWdMaXN0KDApOworICAgIHBhcnNlci0+Y2xlYW51cCgpOwogICAgIHJl
dHVybiBvazsKIH0KIApAQCAtMTU2LDQ0ICsxNTEsNDQgQEAgYm9vbCBTVkdQYXRoUGFyc2VyRmFj
dG9yeTo6YnVpbGRTVkdQYXRoUwogICAgIGlmIChzdHJlYW0tPmlzRW1wdHkoKSkKICAgICAgICAg
cmV0dXJuIGZhbHNlOyAKIAotICAgIFNWR1BhdGhTZWdMaXN0QnVpbGRlciogYnVpbGRlciA9IGds
b2JhbFNWR1BhdGhTZWdMaXN0QnVpbGRlcigpOwotICAgIGJ1aWxkZXItPnNldEN1cnJlbnRTVkdQ
YXRoU2VnTGlzdChyZXN1bHQpOwotCi0gICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFs
U1ZHUGF0aFBhcnNlcigpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKGJ1aWxkZXIp
OworICAgIFNWR1BhdGhTZWdMaXN0QnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhTZWdM
aXN0QnVpbGRlcihyZXN1bHQpOwogCiAgICAgT3duUHRyPFNWR1BhdGhCeXRlU3RyZWFtU291cmNl
PiBzb3VyY2UgPSBTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZTo6Y3JlYXRlKHN0cmVhbSk7Ci0gICAg
cGFyc2VyLT5zZXRDdXJyZW50U291cmNlKHNvdXJjZS5nZXQoKSk7Ci0KKyAgICBTVkdQYXRoUGFy
c2VyKiBwYXJzZXIgPSBnbG9iYWxTVkdQYXRoUGFyc2VyKHNvdXJjZS5nZXQoKSwgYnVpbGRlcik7
CiAgICAgYm9vbCBvayA9IHBhcnNlci0+cGFyc2VQYXRoRGF0YUZyb21Tb3VyY2UocGFyc2luZ01v
ZGUpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKDApOwotICAgIHBhcnNlci0+c2V0
Q3VycmVudFNvdXJjZSgwKTsKLSAgICBidWlsZGVyLT5zZXRDdXJyZW50U1ZHUGF0aFNlZ0xpc3Qo
MCk7CisgICAgcGFyc2VyLT5jbGVhbnVwKCk7CiAgICAgcmV0dXJuIG9rOwogfQogCi1QYXNzT3du
UHRyPFNWR1BhdGhCeXRlU3RyZWFtPiBTVkdQYXRoUGFyc2VyRmFjdG9yeTo6Y3JlYXRlU1ZHUGF0
aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgZCwgUGF0aFBhcnNpbmdNb2RlIHBh
cnNpbmdNb2RlLCBib29sJiBvaykKK2Jvb2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU3Ry
aW5nRnJvbUJ5dGVTdHJlYW0oU1ZHUGF0aEJ5dGVTdHJlYW0qIHN0cmVhbSwgU3RyaW5nJiByZXN1
bHQsIFBhdGhQYXJzaW5nTW9kZSBwYXJzaW5nTW9kZSkKIHsKLSAgICBpZiAoZC5pc0VtcHR5KCkp
IHsKLSAgICAgICAgb2sgPSBmYWxzZTsKLSAgICAgICAgcmV0dXJuIFBhc3NPd25QdHI8U1ZHUGF0
aEJ5dGVTdHJlYW0+KCk7Ci0gICAgfQorICAgIEFTU0VSVChzdHJlYW0pOworICAgIGlmIChzdHJl
YW0tPmlzRW1wdHkoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOyAKIAotICAgIFNWR1BhdGhCeXRl
U3RyZWFtQnVpbGRlciogYnVpbGRlciA9IGdsb2JhbFNWR1BhdGhCeXRlU3RyZWFtQnVpbGRlcigp
OwotICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4gc3RyZWFtID0gU1ZHUGF0aEJ5dGVTdHJl
YW06OmNyZWF0ZSgpOwotICAgIGJ1aWxkZXItPnNldEN1cnJlbnRCeXRlU3RyZWFtKHN0cmVhbS5n
ZXQoKSk7CisgICAgU1ZHUGF0aFN0cmluZ0J1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRo
U3RyaW5nQnVpbGRlcigpOwogCi0gICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFsU1ZH
UGF0aFBhcnNlcigpOwotICAgIHBhcnNlci0+c2V0Q3VycmVudENvbnN1bWVyKGJ1aWxkZXIpOwor
ICAgIE93blB0cjxTVkdQYXRoQnl0ZVN0cmVhbVNvdXJjZT4gc291cmNlID0gU1ZHUGF0aEJ5dGVT
dHJlYW1Tb3VyY2U6OmNyZWF0ZShzdHJlYW0pOworICAgIFNWR1BhdGhQYXJzZXIqIHBhcnNlciA9
IGdsb2JhbFNWR1BhdGhQYXJzZXIoc291cmNlLmdldCgpLCBidWlsZGVyKTsKKyAgICBib29sIG9r
ID0gcGFyc2VyLT5wYXJzZVBhdGhEYXRhRnJvbVNvdXJjZShwYXJzaW5nTW9kZSk7CisgICAgcGFy
c2VyLT5jbGVhbnVwKCk7CisgICAgcmVzdWx0ID0gYnVpbGRlci0+cmVzdWx0KCk7CisgICAgcmV0
dXJuIG9rOworfQogCi0gICAgT3duUHRyPFNWR1BhdGhTdHJpbmdTb3VyY2U+IHNvdXJjZSA9IFNW
R1BhdGhTdHJpbmdTb3VyY2U6OmNyZWF0ZShkKTsKLSAgICBwYXJzZXItPnNldEN1cnJlbnRTb3Vy
Y2Uoc291cmNlLmdldCgpKTsKK2Jvb2wgU1ZHUGF0aFBhcnNlckZhY3Rvcnk6OmJ1aWxkU1ZHUGF0
aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYgZCwgT3duUHRyPFNWR1BhdGhCeXRl
U3RyZWFtPiYgc3RyZWFtLCBQYXRoUGFyc2luZ01vZGUgcGFyc2luZ01vZGUpCit7CisgICAgQVNT
RVJUKHN0cmVhbSk7CisgICAgaWYgKGQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7
CisKKyAgICBTVkdQYXRoQnl0ZVN0cmVhbUJ1aWxkZXIqIGJ1aWxkZXIgPSBnbG9iYWxTVkdQYXRo
Qnl0ZVN0cmVhbUJ1aWxkZXIoc3RyZWFtLmdldCgpKTsKIAotICAgIG9rID0gcGFyc2VyLT5wYXJz
ZVBhdGhEYXRhRnJvbVNvdXJjZShwYXJzaW5nTW9kZSk7Ci0gICAgcGFyc2VyLT5zZXRDdXJyZW50
Q29uc3VtZXIoMCk7Ci0gICAgcGFyc2VyLT5zZXRDdXJyZW50U291cmNlKDApOwotICAgIGJ1aWxk
ZXItPnNldEN1cnJlbnRCeXRlU3RyZWFtKDApOwotICAgIHJldHVybiBzdHJlYW0ucmVsZWFzZSgp
OworICAgIE93blB0cjxTVkdQYXRoU3RyaW5nU291cmNlPiBzb3VyY2UgPSBTVkdQYXRoU3RyaW5n
U291cmNlOjpjcmVhdGUoZCk7CisgICAgU1ZHUGF0aFBhcnNlciogcGFyc2VyID0gZ2xvYmFsU1ZH
UGF0aFBhcnNlcihzb3VyY2UuZ2V0KCksIGJ1aWxkZXIpOworICAgIGJvb2wgb2sgPSBwYXJzZXIt
PnBhcnNlUGF0aERhdGFGcm9tU291cmNlKHBhcnNpbmdNb2RlKTsKKyAgICBwYXJzZXItPmNsZWFu
dXAoKTsKKyAgICByZXR1cm4gb2s7CiB9CiAKIH0KSW5kZXg6IFdlYkNvcmUvc3ZnL1NWR1BhdGhQ
YXJzZXJGYWN0b3J5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9zdmcvU1ZHUGF0aFBhcnNlckZh
Y3RvcnkuaAkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoUGFyc2VyRmFj
dG9yeS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNiw3ICsyNiw3IEBACiAjaW5jbHVkZSAiU1ZHUGF0
aENvbnN1bWVyLmgiCiAjaW5jbHVkZSAiU1ZHUGF0aFNlZ0xpc3QuaCIKICNpbmNsdWRlICJTVkdQ
YXRoQnl0ZVN0cmVhbS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzT3duUHRyLmg+CisjaW5jbHVkZSA8
d3RmL093blB0ci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTQwLDcgKzQwLDkgQEAg
cHVibGljOgogICAgIGJvb2wgYnVpbGRTVkdQYXRoU2VnTGlzdEZyb21TdHJpbmcoY29uc3QgU3Ry
aW5nJiwgU1ZHUGF0aFNlZ0xpc3QqLCBQYXRoUGFyc2luZ01vZGUpOwogICAgIGJvb2wgYnVpbGRT
VkdQYXRoU2VnTGlzdEZyb21CeXRlU3RyZWFtKFNWR1BhdGhCeXRlU3RyZWFtKiwgU1ZHUGF0aFNl
Z0xpc3QqLCBQYXRoUGFyc2luZ01vZGUpOwogCi0gICAgUGFzc093blB0cjxTVkdQYXRoQnl0ZVN0
cmVhbT4gY3JlYXRlU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIFBh
dGhQYXJzaW5nTW9kZSwgYm9vbCYgb2spOworICAgIGJvb2wgYnVpbGRTdHJpbmdGcm9tQnl0ZVN0
cmVhbShTVkdQYXRoQnl0ZVN0cmVhbSosIFN0cmluZyYsIFBhdGhQYXJzaW5nTW9kZSk7CisKKyAg
ICBib29sIGJ1aWxkU1ZHUGF0aEJ5dGVTdHJlYW1Gcm9tU3RyaW5nKGNvbnN0IFN0cmluZyYsIE93
blB0cjxTVkdQYXRoQnl0ZVN0cmVhbT4mLCBQYXRoUGFyc2luZ01vZGUpOwogCiBwcml2YXRlOgog
ICAgIFNWR1BhdGhQYXJzZXJGYWN0b3J5KCk7CkluZGV4OiBXZWJDb3JlL3N2Zy9TVkdQYXRoU2Vn
TGlzdEJ1aWxkZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1
aWxkZXIuaAkocmV2aXNpb24gNjQ5MjApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU2VnTGlzdEJ1
aWxkZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMzYsNiArMzYsNyBAQCBwdWJsaWM6CiAgICAgU1ZH
UGF0aFNlZ0xpc3RCdWlsZGVyKCk7CiAKICAgICB2b2lkIHNldEN1cnJlbnRTVkdQYXRoU2VnTGlz
dChTVkdQYXRoU2VnTGlzdCogcGF0aFNlZ0xpc3QpIHsgbV9wYXRoU2VnTGlzdCA9IHBhdGhTZWdM
aXN0OyB9CisgICAgdmlydHVhbCB2b2lkIGNsZWFudXAoKSB7IG1fcGF0aFNlZ0xpc3QgPSAwOyB9
CiAKIHByaXZhdGU6CiAgICAgLy8gVXNlZCBpbiBVbmFsdGVyZWRQYXJpc25nL05vcm1hbGl6ZWRQ
YXJzaW5nIG1vZGVzLgpJbmRleDogV2ViQ29yZS9zdmcvU1ZHUGF0aFN0cmluZ0J1aWxkZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAkocmV2
aXNpb24gMCkKKysrIFdlYkNvcmUvc3ZnL1NWR1BhdGhTdHJpbmdCdWlsZGVyLmNwcAkocmV2aXNp
b24gMCkKQEAgLTAsMCArMSwxMTAgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIFJlc2VhcmNoIElu
IE1vdGlvbiBMaW1pdGVkIDIwMTAuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogVGhpcyBs
aWJyYXJ5IGlzIGZyZWUgc29mdHdhcmU7IHlvdSBjYW4gcmVkaXN0cmlidXRlIGl0IGFuZC9vcgor
ICogbW9kaWZ5IGl0IHVuZGVyIHRoZSB0ZXJtcyBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQ
dWJsaWMKKyAqIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5k
YXRpb247IGVpdGhlcgorICogdmVyc2lvbiAyIG9mIHRoZSBMaWNlbnNlLCBvciAoYXQgeW91ciBv
cHRpb24pIGFueSBsYXRlciB2ZXJzaW9uLgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBkaXN0cmli
dXRlZCBpbiB0aGUgaG9wZSB0aGF0IGl0IHdpbGwgYmUgdXNlZnVsLAorICogYnV0IFdJVEhPVVQg
QU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxpZWQgd2FycmFudHkgb2YKKyAqIE1F
UkNIQU5UQUJJTElUWSBvciBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRS4gIFNlZSB0
aGUgR05VCisgKiBMaWJyYXJ5IEdlbmVyYWwgUHVibGljIExpY2Vuc2UgZm9yIG1vcmUgZGV0YWls
cy4KKyAqCisgKiBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGli
cmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCisgKiBhbG9uZyB3aXRoIHRoaXMgbGlicmFyeTsg
c2VlIHRoZSBmaWxlIENPUFlJTkcuTElCLiAgSWYgbm90LCB3cml0ZSB0bworICogdGhlIEZyZWUg
U29mdHdhcmUgRm91bmRhdGlvbiwgSW5jLiwgNTEgRnJhbmtsaW4gU3RyZWV0LCBGaWZ0aCBGbG9v
ciwKKyAqIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwgVVNBLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShTVkcpCisjaW5jbHVkZSAiU1ZHUGF0aFN0cmluZ0J1aWxkZXIu
aCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitTVkdQYXRoU3RyaW5nQnVpbGRlcjo6U1ZHUGF0
aFN0cmluZ0J1aWxkZXIoKQoreworfQorCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjptb3Zl
VG8oY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIGJvb2wsIFBhdGhDb29yZGluYXRlTW9k
ZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAg
IG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIk0gJS42bGcgJS42bGciLCB0
YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9z
dHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgibSAlLjZsZyAlLjZsZyIsIHRhcmdl
dFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1
aWxkZXI6OmxpbmVUbyhjb25zdCBGbG9hdFBvaW50JiB0YXJnZXRQb2ludCwgUGF0aENvb3JkaW5h
dGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0gQWJzb2x1dGVDb29yZGluYXRlcykKKyAg
ICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiTCAlLjZsZyAlLjZs
ZyIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7CisgICAgZWxzZQorICAgICAg
ICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJsICUuNmxnICUuNmxnIiwg
dGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKK30KKwordm9pZCBTVkdQYXRoU3Ry
aW5nQnVpbGRlcjo6bGluZVRvSG9yaXpvbnRhbChmbG9hdCB4LCBQYXRoQ29vcmRpbmF0ZU1vZGUg
bW9kZSkKK3sKKyAgICBpZiAobW9kZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBt
X3N0cmluZ0J1aWxkZXIuYXBwZW5kKFN0cmluZzo6Zm9ybWF0KCJIICUuNmxnIiwgeCkpOworICAg
IGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgiaCAl
LjZsZyIsIHgpKTsKK30KKwordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6bGluZVRvVmVydGlj
YWwoZmxvYXQgeSwgUGF0aENvb3JkaW5hdGVNb2RlIG1vZGUpCit7CisgICAgaWYgKG1vZGUgPT0g
QWJzb2x1dGVDb29yZGluYXRlcykKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgiViAlLjZsZyIsIHkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVp
bGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInYgJS42bGciLCB5KSk7Cit9CisKK3ZvaWQgU1ZH
UGF0aFN0cmluZ0J1aWxkZXI6OmN1cnZlVG9DdWJpYyhjb25zdCBGbG9hdFBvaW50JiBwb2ludDEs
IGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MiwgY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQs
IFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29v
cmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQo
IkMgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBwb2ludDEueCgpLCBwb2lu
dDEueSgpLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBv
aW50LnkoKSkpOworICAgIGVsc2UKKyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJp
bmc6OmZvcm1hdCgiYyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyAlLjZsZyIsIHBvaW50
MS54KCksIHBvaW50MS55KCksIHBvaW50Mi54KCksIHBvaW50Mi55KCksIHRhcmdldFBvaW50Lngo
KSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1
cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9hdFBvaW50JiBwb2ludDIsIGNvbnN0IEZsb2F0UG9p
bnQmIHRhcmdldFBvaW50LCBQYXRoQ29vcmRpbmF0ZU1vZGUgbW9kZSkKK3sKKyAgICBpZiAobW9k
ZSA9PSBBYnNvbHV0ZUNvb3JkaW5hdGVzKQorICAgICAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5k
KFN0cmluZzo6Zm9ybWF0KCJTICUuNmxnICUuNmxnICUuNmxnICUuNmxnIiwgcG9pbnQyLngoKSwg
cG9pbnQyLnkoKSwgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQb2ludC55KCkpKTsKKyAgICBlbHNl
CisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoInMgJS42bGcg
JS42bGcgJS42bGcgJS42bGciLCBwb2ludDIueCgpLCBwb2ludDIueSgpLCB0YXJnZXRQb2ludC54
KCksIHRhcmdldFBvaW50LnkoKSkpOworfQorCit2b2lkIFNWR1BhdGhTdHJpbmdCdWlsZGVyOjpj
dXJ2ZVRvUXVhZHJhdGljKGNvbnN0IEZsb2F0UG9pbnQmIHBvaW50MSwgY29uc3QgRmxvYXRQb2lu
dCYgdGFyZ2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2Rl
ID09IEFic29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQo
U3RyaW5nOjpmb3JtYXQoIlEgJS42bGcgJS42bGcgJS42bGcgJS42bGciLCBwb2ludDEueCgpLCBw
b2ludDEueSgpLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworICAgIGVsc2UK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgicSAlLjZsZyAl
LjZsZyAlLjZsZyAlLjZsZyIsIHBvaW50MS54KCksIHBvaW50MS55KCksIHRhcmdldFBvaW50Lngo
KSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZHUGF0aFN0cmluZ0J1aWxkZXI6OmN1
cnZlVG9RdWFkcmF0aWNTbW9vdGgoY29uc3QgRmxvYXRQb2ludCYgdGFyZ2V0UG9pbnQsIFBhdGhD
b29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFic29sdXRlQ29vcmRpbmF0
ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5nOjpmb3JtYXQoIlQgJS42
bGcgJS42bGciLCB0YXJnZXRQb2ludC54KCksIHRhcmdldFBvaW50LnkoKSkpOworICAgIGVsc2UK
KyAgICAgICAgbV9zdHJpbmdCdWlsZGVyLmFwcGVuZChTdHJpbmc6OmZvcm1hdCgidCAlLjZsZyAl
LjZsZyIsIHRhcmdldFBvaW50LngoKSwgdGFyZ2V0UG9pbnQueSgpKSk7Cit9CisKK3ZvaWQgU1ZH
UGF0aFN0cmluZ0J1aWxkZXI6OmFyY1RvKGZsb2F0IHIxLCBmbG9hdCByMiwgZmxvYXQgYW5nbGUs
IGJvb2wgbGFyZ2VBcmNGbGFnLCBib29sIHN3ZWVwRmxhZywgY29uc3QgRmxvYXRQb2ludCYgdGFy
Z2V0UG9pbnQsIFBhdGhDb29yZGluYXRlTW9kZSBtb2RlKQoreworICAgIGlmIChtb2RlID09IEFi
c29sdXRlQ29vcmRpbmF0ZXMpCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3RyaW5n
Ojpmb3JtYXQoIkEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGciLCByMSwgcjIs
IGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgdGFyZ2V0UG9pbnQueCgpLCB0YXJnZXRQ
b2ludC55KCkpKTsKKyAgICBlbHNlCisgICAgICAgIG1fc3RyaW5nQnVpbGRlci5hcHBlbmQoU3Ry
aW5nOjpmb3JtYXQoImEgJS42bGcgJS42bGcgJS42bGcgJWQgJWQgJS42bGcgJS42bGciLCByMSwg
cjIsIGFuZ2xlLCBsYXJnZUFyY0ZsYWcsIHN3ZWVwRmxhZywgdGFyZ2V0UG9pbnQueCgpLCB0YXJn
ZXRQb2ludC55KCkpKTsKK30KKwordm9pZCBTVkdQYXRoU3RyaW5nQnVpbGRlcjo6Y2xvc2VQYXRo
KCkKK3sKKyAgICBtX3N0cmluZ0J1aWxkZXIuYXBwZW5kKCJaIik7Cit9CisKK30gLy8gbmFtZXNw
YWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJMRShTVkcpCkluZGV4OiBXZWJDb3JlL3N2Zy9T
VkdQYXRoU3RyaW5nQnVpbGRlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvc3ZnL1NWR1BhdGhT
dHJpbmdCdWlsZGVyLmgJKHJldmlzaW9uIDApCisrKyBXZWJDb3JlL3N2Zy9TVkdQYXRoU3RyaW5n
QnVpbGRlci5oCShyZXZpc2lvbiAwKQpAQCAtMCwwICsxLDU5IEBACisvKgorICogQ29weXJpZ2h0
IChDKSBSZXNlYXJjaCBJbiBNb3Rpb24gTGltaXRlZCAyMDEwLiBBbGwgcmlnaHRzIHJlc2VydmVk
LgorICoKKyAqIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKKyAqIG1vZGlmeSBpdCB1bmRlciB0aGUgdGVybXMgb2YgdGhlIEdOVSBM
aWJyYXJ5IEdlbmVyYWwgUHVibGljCisgKiBMaWNlbnNlIGFzIHB1Ymxpc2hlZCBieSB0aGUgRnJl
ZSBTb2Z0d2FyZSBGb3VuZGF0aW9uOyBlaXRoZXIKKyAqIHZlcnNpb24gMiBvZiB0aGUgTGljZW5z
ZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KKyAqCisgKiBUaGlzIGxp
YnJhcnkgaXMgZGlzdHJpYnV0ZWQgaW4gdGhlIGhvcGUgdGhhdCBpdCB3aWxsIGJlIHVzZWZ1bCwK
KyAqIGJ1dCBXSVRIT1VUIEFOWSBXQVJSQU5UWTsgd2l0aG91dCBldmVuIHRoZSBpbXBsaWVkIHdh
cnJhbnR5IG9mCisgKiBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UuICBTZWUgdGhlIEdOVQorICogTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNl
IGZvciBtb3JlIGRldGFpbHMuCisgKgorICogWW91IHNob3VsZCBoYXZlIHJlY2VpdmVkIGEgY29w
eSBvZiB0aGUgR05VIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMgTGljZW5zZQorICogYWxvbmcgd2l0
aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5vdCwgd3JpdGUg
dG8KKyAqIHRoZSBGcmVlIFNvZnR3YXJlIEZvdW5kYXRpb24sIEluYy4sIDUxIEZyYW5rbGluIFN0
cmVldCwgRmlmdGggRmxvb3IsCisgKiBCb3N0b24sIE1BIDAyMTEwLTEzMDEsIFVTQS4KKyAqLwor
CisjaWZuZGVmIFNWR1BhdGhTdHJpbmdCdWlsZGVyX2gKKyNkZWZpbmUgU1ZHUGF0aFN0cmluZ0J1
aWxkZXJfaAorCisjaWYgRU5BQkxFKFNWRykKKyNpbmNsdWRlICJGbG9hdFBvaW50LmgiCisjaW5j
bHVkZSAiU1ZHUGF0aENvbnN1bWVyLmgiCisjaW5jbHVkZSAiU3RyaW5nQnVpbGRlci5oIgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK2NsYXNzIFNWR1BhdGhTdHJpbmdCdWlsZGVyIDogcHVibGlj
IFNWR1BhdGhDb25zdW1lciB7CitwdWJsaWM6CisgICAgU1ZHUGF0aFN0cmluZ0J1aWxkZXIoKTsK
KworICAgIHZpcnR1YWwgdm9pZCBjbGVhbnVwKCkgeyBtX3N0cmluZ0J1aWxkZXIuY2xlYXIoKTsg
fQorICAgIFN0cmluZyByZXN1bHQoKSB7IHJldHVybiBtX3N0cmluZ0J1aWxkZXIudG9TdHJpbmco
Q29uY2F0QWRkaW5nU3BhY2VzQmV0d2VlbkluZGl2aWR1YWxTdHJpbmdzKTsgfQorCitwcml2YXRl
OgorICAgIC8vIFVzZWQgaW4gVW5hbHRlcmVkUGFyc2luZy9Ob3JtYWxpemVkUGFyc2luZyBtb2Rl
cy4KKyAgICB2aXJ0dWFsIHZvaWQgbW92ZVRvKGNvbnN0IEZsb2F0UG9pbnQmLCBib29sIGNsb3Nl
ZCwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvKGNvbnN0IEZs
b2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRv
Q3ViaWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0UG9pbnQmLCBjb25zdCBGbG9hdFBv
aW50JiwgUGF0aENvb3JkaW5hdGVNb2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgY2xvc2VQYXRoKCk7
CisKK3ByaXZhdGU6CisgICAgLy8gT25seSB1c2VkIGluIFVuYWx0ZXJlZFBhcnNpbmcgbW9kZS4K
KyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvSG9yaXpvbnRhbChmbG9hdCwgUGF0aENvb3JkaW5hdGVN
b2RlKTsKKyAgICB2aXJ0dWFsIHZvaWQgbGluZVRvVmVydGljYWwoZmxvYXQsIFBhdGhDb29yZGlu
YXRlTW9kZSk7CisgICAgdmlydHVhbCB2b2lkIGN1cnZlVG9DdWJpY1Ntb290aChjb25zdCBGbG9h
dFBvaW50JiwgY29uc3QgRmxvYXRQb2ludCYsIFBhdGhDb29yZGluYXRlTW9kZSk7CisgICAgdmly
dHVhbCB2b2lkIGN1cnZlVG9RdWFkcmF0aWMoY29uc3QgRmxvYXRQb2ludCYsIGNvbnN0IEZsb2F0
UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAgIHZpcnR1YWwgdm9pZCBjdXJ2ZVRvUXVh
ZHJhdGljU21vb3RoKGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUpOworICAg
IHZpcnR1YWwgdm9pZCBhcmNUbyhmbG9hdCwgZmxvYXQsIGZsb2F0LCBib29sIGxhcmdlQXJjRmxh
ZywgYm9vbCBzd2VlcEZsYWcsIGNvbnN0IEZsb2F0UG9pbnQmLCBQYXRoQ29vcmRpbmF0ZU1vZGUp
OworCisgICAgU3RyaW5nQnVpbGRlciBtX3N0cmluZ0J1aWxkZXI7Cit9OworCit9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUoU1ZHKQorI2VuZGlmIC8vIFNWR1BhdGhT
dHJpbmdCdWlsZGVyX2gK
</data>
<flag name="review"
          id="52255"
          type_id="1"
          status="+"
          setter="zimmermann"
    />
          </attachment>
      

    </bug>

</bugzilla>