<?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>33914</bug_id>
          
          <creation_ts>2010-01-20 11:14:23 -0800</creation_ts>
          <short_desc>Style in WebCore/bridge/jni/JNIBridge needs fixing</short_desc>
          <delta_ts>2010-01-21 02:26:58 -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>WebCore Misc.</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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>33899</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Steve Block">steveblock</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>android-webkit-unforking</cc>
    
    <cc>steveblock</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>182867</commentid>
    <comment_count>0</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 11:14:23 -0800</bug_when>
    <thetext>Style in WebCore/bridge/jni/JNIBridge needs fixing.

See Bug 33899, which this bug blocks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182870</commentid>
    <comment_count>1</comment_count>
      <attachid>47049</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 11:22:08 -0800</bug_when>
    <thetext>Created attachment 47049
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182875</commentid>
    <comment_count>2</comment_count>
      <attachid>47050</attachid>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-20 11:31:17 -0800</bug_when>
    <thetext>Created attachment 47050
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>182939</commentid>
    <comment_count>3</comment_count>
      <attachid>47050</attachid>
    <who name="David Levin">levin</who>
    <bug_when>2010-01-20 15:20:10 -0800</bug_when>
    <thetext>Comment on attachment 47050
Patch

Looks fine overall. I&apos;ve noted a few nits below that would be nice to fix on landing.


Consider adding the copyright for Google to files you are changing since you are changing more than 10 lines.


&gt; Index: WebCore/bridge/jni/JNIBridge.cpp

&gt; +JavaMethod::JavaMethod(JNIEnv* env, jobject aMethod)
&gt; +    jstring returnTypeName = static_cast&lt;jstring&gt;(callJNIMethod&lt;jobject&gt;(returnType, &quot;getName&quot;, &quot;()Ljava/lang/String;&quot;));
&gt; +    m_returnType =JavaString(env, returnTypeName);

Please add a space after the =.


&gt; +    m_JNIReturnType = JNITypeFromClassName(m_returnType.UTF8String());
&gt; +    env-&gt;DeleteLocalRef(returnType);
&gt; +    env-&gt;DeleteLocalRef(returnTypeName);
&gt;  
&gt;      // Get method name
&gt; -    jstring methodName = (jstring)callJNIMethod&lt;jobject&gt;(aMethod, &quot;getName&quot;, &quot;()Ljava/lang/String;&quot;);
&gt; -    _name = JavaString (env, methodName);
&gt; -    env-&gt;DeleteLocalRef (methodName);
&gt; +    jstring methodName = static_cast&lt;jstring&gt;(callJNIMethod&lt;jobject&gt;(aMethod, &quot;getName&quot;, &quot;()Ljava/lang/String;&quot;));
&gt; +    m_name = JavaString(env, methodName);
&gt; +    env-&gt;DeleteLocalRef(methodName);
&gt;  
&gt;      // Get parameters
&gt; -    jarray jparameters = (jarray)callJNIMethod&lt;jobject&gt;(aMethod, &quot;getParameterTypes&quot;, &quot;()[Ljava/lang/Class;&quot;);
&gt; -    _numParameters = env-&gt;GetArrayLength (jparameters);
&gt; -    _parameters = new JavaParameter[_numParameters];
&gt; -    
&gt; +    jarray jparameters = static_cast&lt;jarray&gt;(callJNIMethod&lt;jobject&gt;(aMethod, &quot;getParameterTypes&quot;, &quot;()[Ljava/lang/Class;&quot;));
&gt; +    m_numParameters = env-&gt;GetArrayLength(jparameters);
&gt; +    m_parameters = new JavaParameter[m_numParameters];
&gt; +
&gt;      int i;

It would be nice to move this in the loop (e.g. &quot;for (int i = 0;....&quot;)


&gt; +    for (i = 0; i &lt; m_numParameters; i++) {
&gt; +        jobject aParameter = env-&gt;GetObjectArrayElement((jobjectArray)jparameters, i);

It looks like you missed converting a cast here to the *_cast style.


&gt; +JavaMethod::~JavaMethod()
&gt;  {
&gt; -    if (_signature)
&gt; -        free(_signature);
&gt; -    delete [] _parameters;
&gt; +    if (m_signature)
&gt; +        free(m_signature);
&gt; +    delete [] m_parameters;

remove the space before []

&gt;  };
&gt;  
&gt;  // JNI method signatures use &apos;/&apos; between components of a class name, but
&gt; @@ -302,244 +310,260 @@ JavaMethod::~JavaMethod() 
&gt;  static void appendClassName(StringBuilder&amp; builder, const char* className)
&gt;  {
&gt;      ASSERT(JSLock::lockCount() &gt; 0);
&gt; -    
&gt; -    char *result, *cp = strdup(className);
&gt; -    
&gt; +
&gt; +    char* result;

Would be nice to move result to where it is initialized.

&gt; +    char* cp = strdup(className);

cp is a rather bad variable name but I guess we don&apos;t need one for this code. Maybe just use &quot;c&quot;?

&gt; +
&gt;      result = cp;
&gt;      while (*cp) {
&gt;          if (*cp == &apos;.&apos;)
&gt;              *cp = &apos;/&apos;;
&gt;          cp++;
&gt;      }
&gt; -        
&gt; +
&gt;      builder.append(result);
&gt;  
&gt;      free(result);
&gt;  }

&gt;  JSValue JavaArray::valueAt(ExecState* exec, unsigned index) const
&gt;  {
&gt; +            if (m_type[1] == &apos;[&apos;)
&gt; +                return JavaArray::convertJObjectToArray(exec, anObject, m_type+1, rootObject());

Add spaces around +

&gt; Index: WebCore/bridge/jni/JNIBridge.h
&gt; +class JavaParameter {
&gt; +    JavaParameter() : m_JNIType(invalid_type) { };

No ; needed after the }

&gt; +    JavaParameter(JNIEnv* env, jstring type);

No need to put &quot;env&quot; here.


&gt; +class JavaField : public Field {
&gt; +    JavaField(JNIEnv* env, jobject aField);

remove &quot;env&quot;

&gt; +    virtual JSValue valueFromInstance(ExecState* exec, const Instance* instance) const;

&quot;exec&quot; and &quot;instance&quot; may be removed here.

&gt; +    virtual void setValueToInstance(ExecState* exec, const Instance* instance, JSValue aValue) const;

&quot;exec&quot;, &quot;instance&quot;, and &quot;aValue&quot; may be removed here.

&gt; +    void dispatchSetValueToInstance(ExecState* exec, const JavaInstance* instance, jvalue javaValue, const char* name, const char* sig) const;

&quot;exec&quot; and &quot;instance&quot; may be removed here. (&quot;javaValue&quot; also seems redundant to me.)


&gt; +    jvalue dispatchValueFromInstance(ExecState* exec, const JavaInstance* instance, const char* name, const char* sig, JNIType returnType) const;

&quot;exec&quot; and &quot;instance&quot; may be removed here.


&gt; +class JavaMethod : public Method {
&gt;  public:
&gt;      JavaMethod(JNIEnv* env, jobject aMethod);

remove &quot;env&quot;


&gt; +    jmethodID methodID(jobject obj) const;

remove &quot;obj&quot;


&gt; +    virtual void setValueAt(ExecState* exec, unsigned int index, JSValue aValue) const;

remove &quot;exec&quot;

&gt; +    virtual JSValue valueAt(ExecState* exec, unsigned int index) const;

remove &quot;exec&quot;

&gt;      virtual unsigned int getLength() const;
&gt; -    
&gt; -    jobject javaArray() const { return _array-&gt;m_instance; }
&gt;  
&gt; -    static JSValue convertJObjectToArray (ExecState* exec, jobject anObject, const char* type, PassRefPtr&lt;RootObject&gt;);
&gt; +    jobject javaArray() const { return m_array-&gt;m_instance; }
&gt; +
&gt; +    static JSValue convertJObjectToArray(ExecState* exec, jobject anObject, const char* type, PassRefPtr&lt;RootObject&gt;);

remove &quot;exec&quot;, &quot;anOjbect&quot;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>183142</commentid>
    <comment_count>4</comment_count>
    <who name="Steve Block">steveblock</who>
    <bug_when>2010-01-21 02:26:58 -0800</bug_when>
    <thetext>Addressed all comments

Landed manually as http://trac.webkit.org/changeset/53619

Closing bug as resolved</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47049</attachid>
            <date>2010-01-20 11:22:08 -0800</date>
            <delta_ts>2010-01-20 11:31:10 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33914-20100120192205.patch</filename>
            <type>text/plain</type>
            <size>35119</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeGVzIHN0eWxlIGluIFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzOTE0CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBzdHlsZSBmaXhlcyBvbmx5LgorCisgICAgICAgICogYnJpZGdlL2puaS9KTklC
cmlkZ2UuY3BwOgorICAgICAgICAqIGJyaWRnZS9qbmkvSk5JQnJpZGdlLmg6CisKIDIwMTAtMDEt
MjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHJldmlz
aW9uIDUzNTU3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC00Miw3ICs0Miw3IEBACiAj
ZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNlbHNlCiAjZGVmaW5l
IEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKLSAgICBmcHJpbnRmIChzdGRlcnIsICIlczol
ZCAtLSAlczogICIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAorICAgIGZw
cmludGYoc3RkZXJyLCAiJXM6JWQgLS0gJXM6ICAiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVO
Q1RJT05fXyk7IFwKICAgICBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0QW5kQXJncyk7IFwKIH0KICNl
bmRpZgpAQCAtNTIsMjUgKzUyLDI1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIAotSmF2YVBhcmFtZXRlcjo6SmF2YVBhcmFtZXRl
ciAoSk5JRW52ICplbnYsIGpzdHJpbmcgdHlwZSkKK0phdmFQYXJhbWV0ZXI6OkphdmFQYXJhbWV0
ZXIoSk5JRW52KiBlbnYsIGpzdHJpbmcgdHlwZSkKIHsKLSAgICBfdHlwZSA9IEphdmFTdHJpbmcg
KGVudiwgdHlwZSk7Ci0gICAgX0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZSAoX3R5cGUu
VVRGOFN0cmluZygpKTsKKyAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgdHlwZSk7CisgICAg
bV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBlLlVURjhTdHJpbmcoKSk7CiB9
CiAKLUphdmFGaWVsZDo6SmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9iamVjdCBhRmllbGQpCitK
YXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYqIGVudiwgam9iamVjdCBhRmllbGQpCiB7CiAgICAg
Ly8gR2V0IGZpZWxkIHR5cGUKICAgICBqb2JqZWN0IGZpZWxkVHlwZSA9IGNhbGxKTklNZXRob2Q8
am9iamVjdD4oYUZpZWxkLCAiZ2V0VHlwZSIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7Ci0gICAg
anN0cmluZyBmaWVsZFR5cGVOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pihm
aWVsZFR5cGUsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAgX3R5cGUg
PSBKYXZhU3RyaW5nKGVudiwgZmllbGRUeXBlTmFtZSk7Ci0gICAgX0pOSVR5cGUgPSBKTklUeXBl
RnJvbUNsYXNzTmFtZSAoX3R5cGUuVVRGOFN0cmluZygpKTsKKyAgICBqc3RyaW5nIGZpZWxkVHlw
ZU5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGZpZWxk
VHlwZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgbV90eXBlID0g
SmF2YVN0cmluZyhlbnYsIGZpZWxkVHlwZU5hbWUpOworICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVG
cm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4U3RyaW5nKCkpOwogCiAgICAgLy8gR2V0IGZpZWxkIG5h
bWUKLSAgICBqc3RyaW5nIGZpZWxkTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oYUZpZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9uYW1l
ID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7CisgICAganN0cmluZyBmaWVsZE5hbWUgPSBz
dGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldE5h
bWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgbV9uYW1lID0gSmF2YVN0cmluZyhl
bnYsIGZpZWxkTmFtZSk7CiAKLSAgICBfZmllbGQgPSBuZXcgSk9iamVjdFdyYXBwZXIoYUZpZWxk
KTsKKyAgICBtX2ZpZWxkID0gbmV3IEpPYmplY3RXcmFwcGVyKGFGaWVsZCk7CiB9CiAKIEpTVmFs
dWUgSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2Jq
ZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QpCkBAIC03OCwyNyArNzgsMjYgQEAgSlNWYWx1ZSBKYXZhQXJyYXk6OmNvbnZlcnRK
T2JqZWN0VG9BcnJheQogICAgIGlmICh0eXBlWzBdICE9ICdbJykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXkoZXhlYywg
bmV3IEphdmFBcnJheSgoam9iamVjdClhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOworICAg
IHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcgSmF2YUFycmF5KGFuT2Jq
ZWN0LCB0eXBlLCByb290T2JqZWN0KSk7CiB9CiAKLWp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNo
VmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmlu
c3RhbmNlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIEpOSVR5cGUgcmV0dXJu
VHlwZSkgY29uc3QKK2p2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiBzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKIHsKICAg
ICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICBqb2Jq
ZWN0IGZpZWxkSkluc3RhbmNlID0gX2ZpZWxkLT5tX2luc3RhbmNlOwotICAgIEpOSUVudiAqZW52
ID0gZ2V0Sk5JRW52KCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1f
aW5zdGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICBqdmFsdWUgcmVz
dWx0OwogCi0gICAgYnplcm8gKCZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsKKyAgICBiemVybygm
cmVzdWx0LCBzaXplb2YoanZhbHVlKSk7CiAgICAgamNsYXNzIGNscyA9IGVudi0+R2V0T2JqZWN0
Q2xhc3MoZmllbGRKSW5zdGFuY2UpOwotICAgIGlmICggY2xzICE9IE5VTEwgKSB7CisgICAgaWYg
KGNscykgewogICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRNZXRob2RJRChjbHMsIG5h
bWUsIHNpZyk7Ci0gICAgICAgIGlmICggbWlkICE9IE5VTEwgKQotICAgICAgICB7CisgICAgICAg
IGlmIChtaWQpIHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5j
ZS0+cm9vdE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVj
dC0+bmF0aXZlSGFuZGxlKCkpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzFdOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwogICAgICAgICAg
ICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwg
ZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwg
ZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNj
cmlwdGlvbikKQEAgLTEwOSw3OSArMTA4LDc5IEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNo
VmFsdWVGcm9tSW5zdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEphdmFGaWVs
ZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSkg
Y29uc3QgCitKU1ZhbHVlIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QKIHsKLSAgICBjb25zdCBKYXZhSW5zdGFuY2Ug
Kmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOworICAgIGNv
bnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFu
Y2UqPihpKTsKIAogICAgIEpTVmFsdWUganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIAot
ICAgIHN3aXRjaCAoX0pOSVR5cGUpIHsKLSAgICAgICAgY2FzZSBhcnJheV90eXBlOgotICAgICAg
ICBjYXNlIG9iamVjdF90eXBlOiB7Ci0gICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0
Y2hWYWx1ZUZyb21JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcv
T2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLCBvYmplY3RfdHlwZSk7CisKKyAgICBzd2l0Y2gg
KG1fSk5JVHlwZSkgeworICAgIGNhc2UgYXJyYXlfdHlwZToKKyAgICBjYXNlIG9iamVjdF90eXBl
OgorICAgICAgICB7CisgICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZy
b21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxq
YXZhL2xhbmcvT2JqZWN0OyIsIG9iamVjdF90eXBlKTsKICAgICAgICAgICAgIGpvYmplY3QgYW5P
YmplY3QgPSByZXN1bHQubDsKIAotICAgICAgICAgICAgY29uc3QgY2hhciAqYXJyYXlUeXBlID0g
dHlwZSgpOwotICAgICAgICAgICAgaWYgKGFycmF5VHlwZVswXSA9PSAnWycpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVR5cGVbMF0gPT0gJ1snKQogICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2YUFycmF5Ojpj
b252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwgaW5zdGFuY2Ut
PnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChhbk9i
amVjdCAhPSAwKXsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFuT2JqZWN0KQogICAgICAgICAgICAg
ICAgIGpzcmVzdWx0ID0gSmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIGluc3RhbmNlLT5y
b290T2JqZWN0KCkpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgYm9v
bGVhbl90eXBlOgotICAgICAgICAgICAganNyZXN1bHQgPSBqc0Jvb2xlYW4oZGlzcGF0Y2hWYWx1
ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcv
T2JqZWN0OylaIiwgYm9vbGVhbl90eXBlKS56KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgYnl0ZV90eXBlOgotICAgICAgICBjYXNlIGNoYXJfdHlwZToK
LSAgICAgICAgY2FzZSBzaG9ydF90eXBlOgotICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlw
ZTogeworCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIGpzcmVzdWx0ID0ganNCb29s
ZWFuKGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsICJnZXRCb29sZWFu
IiwgIihMamF2YS9sYW5nL09iamVjdDspWiIsIGJvb2xlYW5fdHlwZSkueik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgY2FzZSBjaGFyX3R5cGU6CisgICAgY2Fz
ZSBzaG9ydF90eXBlOgorCisgICAgY2FzZSBpbnRfdHlwZToKKyAgICAgICAgewogICAgICAgICAg
ICAgamludCB2YWx1ZTsKLSAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVl
RnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hW
YWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9P
YmplY3Q7KUkiLCBpbnRfdHlwZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAg
ICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCAoaW50KXZhbHVlKTsKKyAgICAgICAg
ICAgIGpzcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOgotICAg
ICAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKKyAgICBj
YXNlIGxvbmdfdHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlw
ZToKKyAgICAgICAgewogICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGp2
YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwg
ImdldERvdWJsZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUQiLCBkb3VibGVfdHlwZSk7CisgICAg
ICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgImdldERvdWJsZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUQiLCBkb3VibGVfdHlw
ZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQg
PSBqc051bWJlcihleGVjLCAoZG91YmxlKXZhbHVlKTsKKyAgICAgICAgICAgIGpzcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIEpTX0xPRyAoImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhu
YW1lKCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2Np
aSgpKTsKLSAgICAKKyAgICBKU19MT0coImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1l
KCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgp
KTsKKwogICAgIHJldHVybiBqc3Jlc3VsdDsKIH0KIAotdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNo
U2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICpp
bnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnKSBjb25zdAordm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwganZhbHVlIGphdmFW
YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdAogewogICAgIGpv
YmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAgIGpvYmplY3Qg
ZmllbGRKSW5zdGFuY2UgPSBfZmllbGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52ICplbnYgPSBn
ZXRKTklFbnYoKTsKKyAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gbV9maWVsZC0+bV9pbnN0
YW5jZTsKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwogCiAgICAgamNsYXNzIGNscyA9
IGVudi0+R2V0T2JqZWN0Q2xhc3MoZmllbGRKSW5zdGFuY2UpOwotICAgIGlmICggY2xzICE9IE5V
TEwgKSB7CisgICAgaWYgKGNscykgewogICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRN
ZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7Ci0gICAgICAgIGlmICggbWlkICE9IE5VTEwgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChtaWQpIHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmpl
Y3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkpIHsKICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJd
OwogICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgYXJn
c1sxXSA9IGphdmFWYWx1ZTsKICAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywg
cm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgdm9pZF90
eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwpAQCAtMTk0
LDEwNyArMTkzLDExNiBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFu
CiAKIHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0CiB7Ci0gICAgY29uc3QgSmF2
YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihp
KTsKLSAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFW
YWx1ZSwgX0pOSVR5cGUsIHR5cGUoKSk7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworICAgIGp2YWx1ZSBqYXZh
VmFsdWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBhVmFsdWUsIG1fSk5JVHlwZSwgdHlw
ZSgpKTsKIAotICAgIEpTX0xPRyAoInNldHRpbmcgdmFsdWUgJXMgdG8gJXNcbiIsIFVTdHJpbmco
bmFtZSgpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lp
KCkpOworICAgIEpTX0xPRygic2V0dGluZyB2YWx1ZSAlcyB0byAlc1xuIiwgVVN0cmluZyhuYW1l
KCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBhVmFsdWUudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7
CiAKLSAgICBzd2l0Y2ggKF9KTklUeXBlKSB7Ci0gICAgICAgIGNhc2UgYXJyYXlfdHlwZToKLSAg
ICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRv
SW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgc3dpdGNoIChtX0pOSVR5cGUpIHsK
KyAgICBjYXNlIGFycmF5X3R5cGU6CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGph
dmFWYWx1ZSwgInNldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYi
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Ug
KGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCb29sZWFuIiwgIihMamF2YS9sYW5nL09i
amVjdDtaKVYiKTsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVl
LCAic2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7WilWIik7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAg
ICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgamF2
YVZhbHVlLCAic2V0Qnl0ZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7QilWIik7CisKKyAgICBjYXNl
IGJ5dGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5z
dGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJ5dGUiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0IpViIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2Ug
Y2hhcl90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhl
YywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldENoYXIiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0Mp
ViIpOworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRj
aFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldFNob3J0IiwgIihMamF2
YS9sYW5nL09iamVjdDtTKVYiKTsKKyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZh
VmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJz
ZXRJbnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0kpViIpOworICAgIGNhc2UgaW50X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCBqYXZhVmFsdWUsICJzZXRJbnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0kpViIpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0g
ICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsIGph
dmFWYWx1ZSwgInNldExvbmciLCAiKExqYXZhL2xhbmcvT2JqZWN0O0opViIpOworICAgIGNhc2Ug
bG9uZ190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9P
YmplY3Q7SilWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBm
bG9hdF90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhl
YywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEZsb2F0IiwgIihMamF2YS9sYW5nL09iamVjdDtG
KVYiKTsKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9h
dCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRW
YWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXREb3VibGUiLCAi
KExqYXZhL2xhbmcvT2JqZWN0O0QpViIpOworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNl
LCBqYXZhVmFsdWUsICJzZXREb3VibGUiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0QpViIpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotSmF2YU1ldGhvZDo6SmF2YU1ldGhvZCAoSk5JRW52
ICplbnYsIGpvYmplY3QgYU1ldGhvZCkKK0phdmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52KiBl
bnYsIGpvYmplY3QgYU1ldGhvZCkKIHsKICAgICAvLyBHZXQgcmV0dXJuIHR5cGUKICAgICBqb2Jq
ZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1
cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICBqc3RyaW5nIHJldHVyblR5cGVO
YW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFt
ZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9yZXR1cm5UeXBlID1KYXZhU3RyaW5n
IChlbnYsIHJldHVyblR5cGVOYW1lKTsKLSAgICBfSk5JUmV0dXJuVHlwZSA9IEpOSVR5cGVGcm9t
Q2xhc3NOYW1lIChfcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwotICAgIGVudi0+RGVsZXRlTG9j
YWxSZWYgKHJldHVyblR5cGUpOwotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKHJldHVyblR5cGVO
YW1lKTsKKyAgICBqc3RyaW5nIHJldHVyblR5cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKKyAgICBtX3JldHVyblR5cGUgPUphdmFTdHJpbmcoZW52LCByZXR1cm5U
eXBlTmFtZSk7CisgICAgbV9KTklSZXR1cm5UeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV9y
ZXR1cm5UeXBlLlVURjhTdHJpbmcoKSk7CisgICAgZW52LT5EZWxldGVMb2NhbFJlZihyZXR1cm5U
eXBlKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHJldHVyblR5cGVOYW1lKTsKIAogICAgIC8v
IEdldCBtZXRob2QgbmFtZQotICAgIGpzdHJpbmcgbWV0aG9kTmFtZSA9IChqc3RyaW5nKWNhbGxK
TklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmlu
ZzsiKTsKLSAgICBfbmFtZSA9IEphdmFTdHJpbmcgKGVudiwgbWV0aG9kTmFtZSk7Ci0gICAgZW52
LT5EZWxldGVMb2NhbFJlZiAobWV0aG9kTmFtZSk7CisgICAganN0cmluZyBtZXRob2ROYW1lID0g
c3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAiZ2V0
TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICBtX25hbWUgPSBKYXZhU3RyaW5n
KGVudiwgbWV0aG9kTmFtZSk7CisgICAgZW52LT5EZWxldGVMb2NhbFJlZihtZXRob2ROYW1lKTsK
IAogICAgIC8vIEdldCBwYXJhbWV0ZXJzCi0gICAgamFycmF5IGpwYXJhbWV0ZXJzID0gKGphcnJh
eSljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRQYXJhbWV0ZXJUeXBlcyIsICIo
KVtMamF2YS9sYW5nL0NsYXNzOyIpOwotICAgIF9udW1QYXJhbWV0ZXJzID0gZW52LT5HZXRBcnJh
eUxlbmd0aCAoanBhcmFtZXRlcnMpOwotICAgIF9wYXJhbWV0ZXJzID0gbmV3IEphdmFQYXJhbWV0
ZXJbX251bVBhcmFtZXRlcnNdOwotICAgIAorICAgIGphcnJheSBqcGFyYW1ldGVycyA9IHN0YXRp
Y19jYXN0PGphcnJheT4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAiZ2V0UGFyYW1l
dGVyVHlwZXMiLCAiKClbTGphdmEvbGFuZy9DbGFzczsiKSk7CisgICAgbV9udW1QYXJhbWV0ZXJz
ID0gZW52LT5HZXRBcnJheUxlbmd0aChqcGFyYW1ldGVycyk7CisgICAgbV9wYXJhbWV0ZXJzID0g
bmV3IEphdmFQYXJhbWV0ZXJbbV9udW1QYXJhbWV0ZXJzXTsKKwogICAgIGludCBpOwotICAgIGZv
ciAoaSA9IDA7IGkgPCBfbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgIGpvYmplY3QgYVBh
cmFtZXRlciA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KWpwYXJh
bWV0ZXJzLCBpKTsKLSAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gKGpzdHJpbmcpY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcv
U3RyaW5nOyIpOwotICAgICAgICBfcGFyYW1ldGVyc1tpXSA9IEphdmFQYXJhbWV0ZXIoZW52LCBw
YXJhbWV0ZXJOYW1lKTsKLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZiAoYVBhcmFtZXRlcik7
Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKHBhcmFtZXRlck5hbWUpOworICAgIGZvciAo
aSA9IDA7IGkgPCBtX251bVBhcmFtZXRlcnM7IGkrKykgeworICAgICAgICBqb2JqZWN0IGFQYXJh
bWV0ZXIgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFycmF5KWpwYXJhbWV0
ZXJzLCBpKTsKKyAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0
cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxq
YXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICAgICAgbV9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFt
ZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOworICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQ
YXJhbWV0ZXIpOworICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBhcmFtZXRlck5hbWUpOwog
ICAgIH0KLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChqcGFyYW1ldGVycyk7CisgICAgZW52LT5E
ZWxldGVMb2NhbFJlZihqcGFyYW1ldGVycyk7CiAKICAgICAvLyBDcmVhdGVkIGxhemlseS4KLSAg
ICBfc2lnbmF0dXJlID0gMDsKLSAgICBfbWV0aG9kSUQgPSAwOwotICAgIAorICAgIG1fc2lnbmF0
dXJlID0gMDsKKyAgICBtX21ldGhvZElEID0gMDsKKwogICAgIGpjbGFzcyBtb2RpZmllckNsYXNz
ID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyIik7CiAgICAgaW50
IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1ldGhvZCwgImdldE1vZGlmaWVycyIs
ICIoKUkiKTsKLSAgICBfaXNTdGF0aWMgPSAoYm9vbCljYWxsSk5JU3RhdGljTWV0aG9kPGpib29s
ZWFuPihtb2RpZmllckNsYXNzLCAiaXNTdGF0aWMiLCAiKEkpWiIsIG1vZGlmaWVycyk7CisgICAg
bV9pc1N0YXRpYyA9IHN0YXRpY19jYXN0PGJvb2w+KGNhbGxKTklTdGF0aWNNZXRob2Q8amJvb2xl
YW4+KG1vZGlmaWVyQ2xhc3MsICJpc1N0YXRpYyIsICIoSSlaIiwgbW9kaWZpZXJzKSk7CiAgICAg
ZW52LT5EZWxldGVMb2NhbFJlZihtb2RpZmllckNsYXNzKTsKIH0KIAotSmF2YU1ldGhvZDo6fkph
dmFNZXRob2QoKSAKK0phdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkKIHsKLSAgICBpZiAoX3NpZ25h
dHVyZSkKLSAgICAgICAgZnJlZShfc2lnbmF0dXJlKTsKLSAgICBkZWxldGUgW10gX3BhcmFtZXRl
cnM7CisgICAgaWYgKG1fc2lnbmF0dXJlKQorICAgICAgICBmcmVlKG1fc2lnbmF0dXJlKTsKKyAg
ICBkZWxldGUgW10gbV9wYXJhbWV0ZXJzOwogfTsKIAogLy8gSk5JIG1ldGhvZCBzaWduYXR1cmVz
IHVzZSAnLycgYmV0d2VlbiBjb21wb25lbnRzIG9mIGEgY2xhc3MgbmFtZSwgYnV0CkBAIC0zMDIs
MjQ0ICszMTAsMjYwIEBAIEphdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkgCiBzdGF0aWMgdm9pZCBh
cHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgY2hhciogY2xhc3NO
YW1lKQogewogICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgCi0gICAg
Y2hhciAqcmVzdWx0LCAqY3AgPSBzdHJkdXAoY2xhc3NOYW1lKTsKLSAgICAKKworICAgIGNoYXIq
IHJlc3VsdDsKKyAgICBjaGFyKiBjcCA9IHN0cmR1cChjbGFzc05hbWUpOworCiAgICAgcmVzdWx0
ID0gY3A7CiAgICAgd2hpbGUgKCpjcCkgewogICAgICAgICBpZiAoKmNwID09ICcuJykKICAgICAg
ICAgICAgICpjcCA9ICcvJzsKICAgICAgICAgY3ArKzsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
YnVpbGRlci5hcHBlbmQocmVzdWx0KTsKIAogICAgIGZyZWUocmVzdWx0KTsKIH0KIAotY29uc3Qg
Y2hhciAqSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QgCitjb25zdCBjaGFyKiBKYXZhTWV0
aG9kOjpzaWduYXR1cmUoKSBjb25zdAogewotICAgIGlmICghX3NpZ25hdHVyZSkgeworICAgIGlm
ICghbV9zaWduYXR1cmUpIHsKICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7CiAgICAgICAg
IHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCIoIik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgX251bVBhcmFtZXRlcnM7IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bnVtUGFyYW1ldGVyczsgaSsrKSB7CiAgICAgICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1l
dGVyID0gcGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgICAgICBKTklUeXBlIF9KTklUeXBlID0gYVBh
cmFtZXRlci0+Z2V0Sk5JVHlwZSgpOwotICAgICAgICAgICAgaWYgKF9KTklUeXBlID09IGFycmF5
X3R5cGUpCisgICAgICAgICAgICBKTklUeXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRKTklUeXBl
KCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBhcnJheV90eXBlKQogICAgICAgICAgICAgICAg
IGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOwog
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBl
bmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUoX0pOSVR5cGUpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoX0pOSVR5cGUgPT0gb2JqZWN0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBzaWduYXR1
cmVCdWlsZGVyLmFwcGVuZChzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZSh0eXBlKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gb2JqZWN0X3R5cGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIGFQYXJhbWV0ZXItPnR5cGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHNpZ25hdHVy
ZUJ1aWxkZXIuYXBwZW5kKCIpIik7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBjaGFyICpyZXR1
cm5UeXBlID0gX3JldHVyblR5cGUuVVRGOFN0cmluZygpOwotICAgICAgICBpZiAoX0pOSVJldHVy
blR5cGUgPT0gYXJyYXlfdHlwZSkgeworCisgICAgICAgIGNvbnN0IGNoYXIqIHJldHVyblR5cGUg
PSBtX3JldHVyblR5cGUuVVRGOFN0cmluZygpOworICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBl
ID09IGFycmF5X3R5cGUpCiAgICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0dXJlQnVp
bGRlciwgcmV0dXJuVHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaWduYXR1
cmVCdWlsZGVyLmFwcGVuZChzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShfSk5JUmV0dXJuVHlw
ZSkpOwotICAgICAgICAgICAgaWYgKF9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0
dXJlRnJvbVByaW1pdGl2ZVR5cGUobV9KTklSZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBpZiAo
bV9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7CiAgICAgICAgICAgICAgICAgYXBwZW5k
Q2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAg
IHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZUJ1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgX3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1cmVT
dHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fc2lnbmF0dXJlID0gc3RyZHVwKHNpZ25h
dHVyZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9zaWdu
YXR1cmU7CisKKyAgICByZXR1cm4gbV9zaWduYXR1cmU7CiB9CiAKIEpOSVR5cGUgSmF2YU1ldGhv
ZDo6Sk5JUmV0dXJuVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIF9KTklSZXR1cm5UeXBlOwor
ICAgIHJldHVybiBtX0pOSVJldHVyblR5cGU7CiB9CiAKLWptZXRob2RJRCBKYXZhTWV0aG9kOjpt
ZXRob2RJRCAoam9iamVjdCBvYmopIGNvbnN0CitqbWV0aG9kSUQgSmF2YU1ldGhvZDo6bWV0aG9k
SUQoam9iamVjdCBvYmopIGNvbnN0CiB7Ci0gICAgaWYgKF9tZXRob2RJRCA9PSAwKSB7Ci0gICAg
ICAgIF9tZXRob2RJRCA9IGdldE1ldGhvZElEIChvYmosIF9uYW1lLlVURjhTdHJpbmcoKSwgc2ln
bmF0dXJlKCkpOwotICAgIH0KLSAgICByZXR1cm4gX21ldGhvZElEOworICAgIGlmICghbV9tZXRo
b2RJRCkKKyAgICAgICAgbV9tZXRob2RJRCA9IGdldE1ldGhvZElEKG9iaiwgbV9uYW1lLlVURjhT
dHJpbmcoKSwgc2lnbmF0dXJlKCkpOworICAgIHJldHVybiBtX21ldGhvZElEOwogfQogCiAKIEph
dmFBcnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NS
ZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKICAgICA6IEFycmF5KHJvb3RPYmplY3QpCiB7
Ci0gICAgX2FycmF5ID0gbmV3IEpPYmplY3RXcmFwcGVyKGFycmF5KTsKKyAgICBtX2FycmF5ID0g
bmV3IEpPYmplY3RXcmFwcGVyKGFycmF5KTsKICAgICAvLyBKYXZhIGFycmF5IGFyZSBmaXhlZCBs
ZW5ndGgsIHNvIHdlIGNhbiBjYWNoZSBsZW5ndGguCi0gICAgSk5JRW52ICplbnYgPSBnZXRKTklF
bnYoKTsKLSAgICBfbGVuZ3RoID0gZW52LT5HZXRBcnJheUxlbmd0aCgoamFycmF5KV9hcnJheS0+
bV9pbnN0YW5jZSk7Ci0gICAgX3R5cGUgPSBzdHJkdXAodHlwZSk7CisgICAgSk5JRW52KiBlbnYg
PSBnZXRKTklFbnYoKTsKKyAgICBtX2xlbmd0aCA9IGVudi0+R2V0QXJyYXlMZW5ndGgoc3RhdGlj
X2Nhc3Q8amFycmF5PihtX2FycmF5LT5tX2luc3RhbmNlKSk7CisgICAgbV90eXBlID0gc3RyZHVw
KHR5cGUpOwogICAgIG1fcm9vdE9iamVjdCA9IHJvb3RPYmplY3Q7CiB9CiAKLUphdmFBcnJheTo6
fkphdmFBcnJheSAoKSAKK0phdmFBcnJheTo6fkphdmFBcnJheSgpCiB7Ci0gICAgZnJlZSAoKHZv
aWQgKilfdHlwZSk7CisgICAgZnJlZSgodm9pZCopbV90eXBlKTsKIH0KIAotUm9vdE9iamVjdCog
SmF2YUFycmF5Ojpyb290T2JqZWN0KCkgY29uc3QgCi17IAorUm9vdE9iamVjdCogSmF2YUFycmF5
Ojpyb290T2JqZWN0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbV9yb290T2JqZWN0ICYmIG1fcm9v
dE9iamVjdC0+aXNWYWxpZCgpID8gbV9yb290T2JqZWN0LmdldCgpIDogMDsKIH0KIAogdm9pZCBK
YXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbmRleCwgSlNW
YWx1ZSBhVmFsdWUpIGNvbnN0CiB7Ci0gICAgSk5JRW52ICplbnYgPSBnZXRKTklFbnYoKTsKLSAg
ICBjaGFyICpqYXZhQ2xhc3NOYW1lID0gMDsKLSAgICAKLSAgICBKTklUeXBlIGFycmF5VHlwZSA9
IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShfdHlwZVsxXSk7Ci0gICAgaWYgKF90eXBlWzFdID09
ICdMJyl7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAgICBjaGFyKiBqYXZhQ2xh
c3NOYW1lID0gMDsKKworICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlwZUZyb21QcmltaXRp
dmVUeXBlKG1fdHlwZVsxXSk7CisgICAgaWYgKG1fdHlwZVsxXSA9PSAnTCcpIHsKICAgICAgICAg
Ly8gVGhlIHR5cGUgb2YgdGhlIGFycmF5IHdpbGwgYmUgc29tZXRoaW5nIGxpa2U6CiAgICAgICAg
IC8vICJbTGphdmEubGFuZy5zdHJpbmc7Ii4gIFRoaXMgaXMgZ3VhcmFudGVlZCwgc28gbm8gbmVl
ZAogICAgICAgICAvLyBmb3IgZXh0cmEgc2FuaXR5IGNoZWNrcy4KLSAgICAgICAgamF2YUNsYXNz
TmFtZSA9IHN0cmR1cCgmX3R5cGVbMl0pOworICAgICAgICBqYXZhQ2xhc3NOYW1lID0gc3RyZHVw
KCZtX3R5cGVbMl0pOwogICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihqYXZhQ2xhc3NOYW1l
LCAnOycpLWphdmFDbGFzc05hbWVdID0gMDsKICAgICB9Ci0gICAganZhbHVlIGFKVmFsdWUgPSBj
b252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywgYVZhbHVlLCBhcnJheVR5cGUsIGphdmFDbGFzc05h
bWUpOwotICAgIAorICAgIGp2YWx1ZSBhSlZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUoZXhl
YywgYVZhbHVlLCBhcnJheVR5cGUsIGphdmFDbGFzc05hbWUpOworCiAgICAgc3dpdGNoIChhcnJh
eVR5cGUpIHsKLSAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAgICAgICAgZW52LT5T
ZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIGFK
VmFsdWUubCk7CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAg
ZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVjdEFycmF5PihqYXZh
QXJyYXkoKSksIGluZGV4LCBhSlZhbHVlLmwpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAg
IH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTogewotICAgICAgICAg
ICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oKGpib29sZWFuQXJyYXkpamF2YUFycmF5KCks
IGluZGV4LCAxLCAmYUpWYWx1ZS56KTsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAg
ICB7CisgICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbihzdGF0aWNfY2FzdDxq
Ym9vbGVhbkFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1ZS56KTsKICAgICAg
ICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBieXRl
X3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVnaW9uKChqYnl0ZUFycmF5
KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7CisKKyAgICBjYXNlIGJ5dGVfdHlw
ZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlSZWdpb24oc3RhdGlj
X2Nhc3Q8amJ5dGVBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
Y2hhcl90eXBlOiB7Ci0gICAgICAgICAgICBlbnYtPlNldENoYXJBcnJheVJlZ2lvbigoamNoYXJB
cnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOworCisgICAgY2FzZSBjaGFy
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0Q2hhckFycmF5UmVnaW9uKHN0
YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEsICZhSlZhbHVlLmMp
OwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBj
YXNlIHNob3J0X3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0U2hvcnRBcnJheVJlZ2lvbigo
anNob3J0QXJyYXkpamF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5zKTsKKworICAgIGNh
c2Ugc2hvcnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRTaG9ydEFycmF5
UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAm
YUpWYWx1ZS5zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAK
LSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAgZW52LT5TZXRJbnRBcnJheVJl
Z2lvbigoamludEFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUuaSk7CisKKyAg
ICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldEludEFycmF5
UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFK
VmFsdWUuaSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAgICBlbnYtPlNldExvbmdBcnJheVJl
Z2lvbigoamxvbmdBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVlLmopOwotICAg
ICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBmbG9hdF90eXBlOiB7Ci0gICAgICAg
ICAgICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oKGpmbG9hdEFycmF5KWphdmFBcnJheSgpLCBp
bmRleCwgMSwgJmFKVmFsdWUuZik7CisKKyAgICBjYXNlIGxvbmdfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24oc3RhdGljX2Nhc3Q8amxvbmdBcnJh
eT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaik7CisgICAgICAgIH0KKworICAg
IGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRGbG9hdEFy
cmF5UmVnaW9uKHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAx
LCAmYUpWYWx1ZS5mKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAg
ICAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAgZW52LT5TZXREb3Vi
bGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFs
dWUuZCk7CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBl
bnYtPlNldERvdWJsZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFy
cmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAg
IH0KLSAgICAKKwogICAgIGlmIChqYXZhQ2xhc3NOYW1lKQotICAgICAgICBmcmVlICgodm9pZCAq
KWphdmFDbGFzc05hbWUpOworICAgICAgICBmcmVlKCh2b2lkKilqYXZhQ2xhc3NOYW1lKTsKIH0K
IAogCiBKU1ZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVk
IGluZGV4KSBjb25zdAogewotICAgIEpOSUVudiAqZW52ID0gZ2V0Sk5JRW52KCk7Ci0gICAgSk5J
VHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUoX3R5cGVbMV0pOworICAg
IEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CisgICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklU
eXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsKICAgICBzd2l0Y2ggKGFycmF5VHlwZSkg
ewotICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7Ci0gICAgICAgICAgICBqb2JqZWN0QXJyYXkg
b2JqZWN0QXJyYXkgPSAoam9iamVjdEFycmF5KWphdmFBcnJheSgpOworICAgIGNhc2Ugb2JqZWN0
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpvYmplY3RBcnJheSBvYmplY3RBcnJheSA9
IHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAgam9i
amVjdCBhbk9iamVjdDsKICAgICAgICAgICAgIGFuT2JqZWN0ID0gZW52LT5HZXRPYmplY3RBcnJh
eUVsZW1lbnQob2JqZWN0QXJyYXksIGluZGV4KTsKIAogICAgICAgICAgICAgLy8gTm8gb2JqZWN0
PwotICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkgeworICAgICAgICAgICAgaWYgKCFhbk9iamVj
dCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxsKCk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICAKKwogICAgICAgICAgICAgLy8gTmVzdGVkIGFycmF5PwotICAgICAgICAgICAgaWYg
KF90eXBlWzFdID09ICdbJykgewotICAgICAgICAgICAgICAgIHJldHVybiBKYXZhQXJyYXk6OmNv
bnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCBhbk9iamVjdCwgX3R5cGUrMSwgcm9vdE9iamVjdCgp
KTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX3R5cGVbMV0gPT0gJ1snKQorICAg
ICAgICAgICAgICAgIHJldHVybiBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShleGVj
LCBhbk9iamVjdCwgbV90eXBlKzEsIHJvb3RPYmplY3QoKSk7CiAgICAgICAgICAgICAvLyBvciBh
cnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KICAgICAgICAgICAgIHJldHVybiBKYXZhSW5zdGFu
Y2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgpKS0+Y3JlYXRlUnVudGltZU9iamVjdChl
eGVjKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgYm9vbGVhbl90eXBl
OiB7Ci0gICAgICAgICAgICBqYm9vbGVhbkFycmF5IGJvb2xlYW5BcnJheSA9IChqYm9vbGVhbkFy
cmF5KWphdmFBcnJheSgpOworCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFycmF5ID0gc3RhdGljX2Nhc3Q8amJvb2xl
YW5BcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAgamJvb2xlYW4gYUJvb2xlYW47CiAg
ICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJlZ2lvbihib29sZWFuQXJyYXksIGluZGV4
LCAxLCAmYUJvb2xlYW4pOwogICAgICAgICAgICAgcmV0dXJuIGpzQm9vbGVhbihhQm9vbGVhbik7
CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGJ5dGVfdHlwZTogewotICAg
ICAgICAgICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSAoamJ5dGVBcnJheSlqYXZhQXJyYXkoKTsK
KworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqYnl0ZUFycmF5
IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJyYXk+KGphdmFBcnJheSgpKTsKICAgICAg
ICAgICAgIGpieXRlIGFCeXRlOwogICAgICAgICAgICAgZW52LT5HZXRCeXRlQXJyYXlSZWdpb24o
Ynl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKICAgICAgICAgICAgIHJldHVybiBqc051bWJl
cihleGVjLCBhQnl0ZSk7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGNo
YXJfdHlwZTogewotICAgICAgICAgICAgamNoYXJBcnJheSBjaGFyQXJyYXkgPSAoamNoYXJBcnJh
eSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICBqY2hhckFycmF5IGNoYXJBcnJheSA9IHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFB
cnJheSgpKTsKICAgICAgICAgICAgIGpjaGFyIGFDaGFyOwogICAgICAgICAgICAgZW52LT5HZXRD
aGFyQXJyYXlSZWdpb24oY2hhckFycmF5LCBpbmRleCwgMSwgJmFDaGFyKTsKICAgICAgICAgICAg
IHJldHVybiBqc051bWJlcihleGVjLCBhQ2hhcik7CiAgICAgICAgICAgICBicmVhazsKICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ugc2hvcnRfdHlwZTogewotICAgICAgICAg
ICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IChqc2hvcnRBcnJheSlqYXZhQXJyYXkoKTsKKwor
ICAgIGNhc2Ugc2hvcnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAganNob3J0QXJyYXkg
c2hvcnRBcnJheSA9IHN0YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSk7CiAgICAg
ICAgICAgICBqc2hvcnQgYVNob3J0OwogICAgICAgICAgICAgZW52LT5HZXRTaG9ydEFycmF5UmVn
aW9uKHNob3J0QXJyYXksIGluZGV4LCAxLCAmYVNob3J0KTsKICAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihleGVjLCBhU2hvcnQpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAg
Y2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAgamludEFycmF5IGludEFycmF5ID0gKGppbnRB
cnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgaW50X3R5cGU6CisgICAgICAgIHsKKyAgICAg
ICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFy
cmF5KCkpOwogICAgICAgICAgICAgamludCBhbkludDsKICAgICAgICAgICAgIGVudi0+R2V0SW50
QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAmYW5JbnQpOwogICAgICAgICAgICAgcmV0
dXJuIGpzTnVtYmVyKGV4ZWMsIGFuSW50KTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAg
ICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAgICBqbG9uZ0FycmF5IGxvbmdBcnJheSA9
IChqbG9uZ0FycmF5KWphdmFBcnJheSgpOworCisgICAgY2FzZSBsb25nX3R5cGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0FycmF5ID0gc3RhdGljX2Nhc3Q8amxvbmdB
cnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAgamxvbmcgYUxvbmc7CiAgICAgICAgICAg
ICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJyYXksIGluZGV4LCAxLCAmYUxvbmcpOwog
ICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFMb25nKTsKICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgZmxvYXRfdHlwZTogewotICAgICAgICAgICAgamZsb2F0
QXJyYXkgZmxvYXRBcnJheSA9IChqZmxvYXRBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2Ug
ZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgamZsb2F0QXJyYXkgZmxvYXRBcnJh
eSA9IHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJyYXkoKSk7CiAgICAgICAgICAgICBq
ZmxvYXQgYUZsb2F0OwogICAgICAgICAgICAgZW52LT5HZXRGbG9hdEFycmF5UmVnaW9uKGZsb2F0
QXJyYXksIGluZGV4LCAxLCAmYUZsb2F0KTsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihl
eGVjLCBhRmxvYXQpOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBkb3Vi
bGVfdHlwZTogewotICAgICAgICAgICAgamRvdWJsZUFycmF5IGRvdWJsZUFycmF5ID0gKGpkb3Vi
bGVBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAgIHsK
KyAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3VibGVBcnJheSA9IHN0YXRpY19jYXN0PGpkb3Vi
bGVBcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAgamRvdWJsZSBhRG91YmxlOwogICAg
ICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJlZ2lvbihkb3VibGVBcnJheSwgaW5kZXgsIDEs
ICZhRG91YmxlKTsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhRG91YmxlKTsK
ICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIGJyZWFr
OwogICAgIH0KICAgICByZXR1cm4ganNVbmRlZmluZWQoKTsKQEAgLTU0Nyw3ICs1NzEsNyBAQCBK
U1ZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3RhdGUqIGV4CiAKIHVuc2lnbmVkIGludCBK
YXZhQXJyYXk6OmdldExlbmd0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIF9sZW5ndGg7CisgICAg
cmV0dXJuIG1fbGVuZ3RoOwogfQogCiAjZW5kaWYgLy8gRU5BQkxFKE1BQ19KQVZBX0JSSURHRSkK
SW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBXZWJD
b3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmgJKHJldmlzaW9uIDUzNTU3KQorKysgV2ViQ29yZS9i
cmlkZ2Uvam5pL0pOSUJyaWRnZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0xLDUgKzEsNSBAQAogLyoK
LSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21wdXRlciwgSW5jLiAgQWxsIHJpZ2h0cyBy
ZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywgMjAwNCwgMjAwNSwgMjAwNywgMjAwOSwg
MjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCiAgKgogICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CiAg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIwLDcgQEAKICAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElO
VEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKICAqIE9GIExJQUJJ
TElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAogICog
KElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9V
VCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhF
IFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4g
SUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAogI2lm
bmRlZiBKTklCcmlkZ2VfaApAQCAtMzUsMTYgKzM1LDEzIEBACiAjaW5jbHVkZSAiSmF2YVN0cmlu
Z0pTQy5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0MKLXsKK25hbWVzcGFjZSBKU0MgewogCi1u
YW1lc3BhY2UgQmluZGluZ3MKLXsKK25hbWVzcGFjZSBCaW5kaW5ncyB7CiAKIHR5cGVkZWYgY29u
c3QgY2hhciogUnVudGltZVR5cGU7CiAKLWNsYXNzIEphdmFTdHJpbmcKLXsKK2NsYXNzIEphdmFT
dHJpbmcgewogcHVibGljOgogICAgIEphdmFTdHJpbmcoKQogICAgIHsKQEAgLTcyLDk1ICs2OSw5
MSBAQCBwcml2YXRlOgogICAgIEphdmFTdHJpbmdJbXBsIG1faW1wbDsKIH07CiAKLWNsYXNzIEph
dmFQYXJhbWV0ZXIKLXsKK2NsYXNzIEphdmFQYXJhbWV0ZXIgewogcHVibGljOgotICAgIEphdmFQ
YXJhbWV0ZXIgKCkgOiBfSk5JVHlwZShpbnZhbGlkX3R5cGUpIHt9OwotICAgIEphdmFQYXJhbWV0
ZXIgKEpOSUVudiAqZW52LCBqc3RyaW5nIHR5cGUpOworICAgIEphdmFQYXJhbWV0ZXIoKSA6IG1f
Sk5JVHlwZShpbnZhbGlkX3R5cGUpIHsgfTsKKyAgICBKYXZhUGFyYW1ldGVyKEpOSUVudiogZW52
LCBqc3RyaW5nIHR5cGUpOwogICAgIHZpcnR1YWwgfkphdmFQYXJhbWV0ZXIoKSB7IH0KIAotICAg
IFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBfdHlwZS5VVEY4U3RyaW5nKCk7IH0K
LSAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBfSk5JVHlwZTsgfQotICAg
IAorICAgIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVybiBtX3R5cGUuVVRGOFN0cmlu
ZygpOyB9CisgICAgSk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBl
OyB9CisKIHByaXZhdGU6Ci0gICAgSmF2YVN0cmluZyBfdHlwZTsKLSAgICBKTklUeXBlIF9KTklU
eXBlOworICAgIEphdmFTdHJpbmcgbV90eXBlOworICAgIEpOSVR5cGUgbV9KTklUeXBlOwogfTsK
IAogCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmllbGQKLXsKK2NsYXNzIEphdmFGaWVsZCA6
IHB1YmxpYyBGaWVsZCB7CiBwdWJsaWM6Ci0gICAgSmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9i
amVjdCBhRmllbGQpOworICAgIEphdmFGaWVsZChKTklFbnYqIGVudiwgam9iamVjdCBhRmllbGQp
OworCisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25zdDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0
VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNl
LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7CisKKyAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkg
Y29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkg
Y29uc3QgeyByZXR1cm4gbV90eXBlLlVURjhTdHJpbmcoKTsgfQogCi0gICAgdmlydHVhbCBKU1Zh
bHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmlu
c3RhbmNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNT
dGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlLCBKU1ZhbHVlIGFWYWx1ZSkgY29u
c3Q7Ci0gICAgCi0gICAgY29uc3QgSmF2YVN0cmluZyYgbmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9u
YW1lOyB9Ci0gICAgdmlydHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gX3R5
cGUuVVRGOFN0cmluZygpOyB9CisgICAgSk5JVHlwZSBnZXRKTklUeXBlKCkgY29uc3QgeyByZXR1
cm4gbV9KTklUeXBlOyB9CiAKLSAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7IHJldHVy
biBfSk5JVHlwZTsgfQotICAgIAogcHJpdmF0ZToKLSAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVU
b0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICppbnN0YW5jZSwg
anZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAqc2lnKSBjb25z
dDsKLSAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMs
IGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNvbnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNo
YXIgKnNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25zdDsKKyAgICB2b2lkIGRpc3BhdGNoU2V0
VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0
YW5jZSwganZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2ln
KSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUq
IGV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UsIGNvbnN0IGNoYXIqIG5hbWUsIGNv
bnN0IGNoYXIqIHNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25zdDsKIAotICAgIEphdmFTdHJp
bmcgX25hbWU7Ci0gICAgSmF2YVN0cmluZyBfdHlwZTsKLSAgICBKTklUeXBlIF9KTklUeXBlOwot
ICAgIFJlZlB0cjxKT2JqZWN0V3JhcHBlcj4gX2ZpZWxkOworICAgIEphdmFTdHJpbmcgbV9uYW1l
OworICAgIEphdmFTdHJpbmcgbV90eXBlOworICAgIEpOSVR5cGUgbV9KTklUeXBlOworICAgIFJl
ZlB0cjxKT2JqZWN0V3JhcHBlcj4gbV9maWVsZDsKIH07CiAKIAotY2xhc3MgSmF2YU1ldGhvZCA6
IHB1YmxpYyBNZXRob2QKLXsKK2NsYXNzIEphdmFNZXRob2QgOiBwdWJsaWMgTWV0aG9kIHsKIHB1
YmxpYzoKICAgICBKYXZhTWV0aG9kKEpOSUVudiogZW52LCBqb2JqZWN0IGFNZXRob2QpOwogICAg
IH5KYXZhTWV0aG9kKCk7CiAKLSAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyBy
ZXR1cm4gX25hbWU7IH0KLSAgICBSdW50aW1lVHlwZSByZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1
cm4gX3JldHVyblR5cGUuVVRGOFN0cmluZygpOyB9OwotICAgIEphdmFQYXJhbWV0ZXIqIHBhcmFt
ZXRlckF0KGludCBpKSBjb25zdCB7IHJldHVybiAmX3BhcmFtZXRlcnNbaV07IH07Ci0gICAgaW50
IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBfbnVtUGFyYW1ldGVyczsgfTsKLSAgICAK
LSAgICBjb25zdCBjaGFyICpzaWduYXR1cmUoKSBjb25zdDsKKyAgICBjb25zdCBKYXZhU3RyaW5n
JiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgUnVudGltZVR5cGUgcmV0dXJu
VHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCk7IH0KKyAgICBK
YXZhUGFyYW1ldGVyKiBwYXJhbWV0ZXJBdChpbnQgaSkgY29uc3QgeyByZXR1cm4gJm1fcGFyYW1l
dGVyc1tpXTsgfQorICAgIGludCBudW1QYXJhbWV0ZXJzKCkgY29uc3QgeyByZXR1cm4gbV9udW1Q
YXJhbWV0ZXJzOyB9CisKKyAgICBjb25zdCBjaGFyKiBzaWduYXR1cmUoKSBjb25zdDsKICAgICBK
TklUeXBlIEpOSVJldHVyblR5cGUoKSBjb25zdDsKIAotICAgIGptZXRob2RJRCBtZXRob2RJRCAo
am9iamVjdCBvYmopIGNvbnN0OwotICAgIAotICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCB7IHJl
dHVybiBfaXNTdGF0aWM7IH0KKyAgICBqbWV0aG9kSUQgbWV0aG9kSUQoam9iamVjdCBvYmopIGNv
bnN0OworCisgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIG1faXNTdGF0aWM7IH0K
IAogcHJpdmF0ZToKLSAgICBKYXZhUGFyYW1ldGVyKiBfcGFyYW1ldGVyczsKLSAgICBpbnQgX251
bVBhcmFtZXRlcnM7Ci0gICAgSmF2YVN0cmluZyBfbmFtZTsKLSAgICBtdXRhYmxlIGNoYXIqIF9z
aWduYXR1cmU7Ci0gICAgSmF2YVN0cmluZyBfcmV0dXJuVHlwZTsKLSAgICBKTklUeXBlIF9KTklS
ZXR1cm5UeXBlOwotICAgIG11dGFibGUgam1ldGhvZElEIF9tZXRob2RJRDsKLSAgICBib29sIF9p
c1N0YXRpYzsKKyAgICBKYXZhUGFyYW1ldGVyKiBtX3BhcmFtZXRlcnM7CisgICAgaW50IG1fbnVt
UGFyYW1ldGVyczsKKyAgICBKYXZhU3RyaW5nIG1fbmFtZTsKKyAgICBtdXRhYmxlIGNoYXIqIG1f
c2lnbmF0dXJlOworICAgIEphdmFTdHJpbmcgbV9yZXR1cm5UeXBlOworICAgIEpOSVR5cGUgbV9K
TklSZXR1cm5UeXBlOworICAgIG11dGFibGUgam1ldGhvZElEIG1fbWV0aG9kSUQ7CisgICAgYm9v
bCBtX2lzU3RhdGljOwogfTsKIAotY2xhc3MgSmF2YUFycmF5IDogcHVibGljIEFycmF5Ci17Citj
bGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgewogcHVibGljOgogICAgIEphdmFBcnJheShq
b2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsK
ICAgICB2aXJ0dWFsIH5KYXZhQXJyYXkoKTsKIAogICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3Qo
KSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywg
dW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBK
U1ZhbHVlIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0
OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQg
aW50IGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7CisgICAgdmlydHVhbCBKU1ZhbHVlIHZh
bHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OwogICAgIHZp
cnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNvbnN0OwotICAgIAotICAgIGpvYmplY3Qg
amF2YUFycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5LT5tX2luc3RhbmNlOyB9CiAKLSAgICBz
dGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJyYXkgKEV4ZWNTdGF0ZSogZXhlYywgam9i
amVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwgUGFzc1JlZlB0cjxSb290T2JqZWN0Pik7
CisgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7IHJldHVybiBtX2FycmF5LT5tX2luc3Rh
bmNlOyB9CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0
YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRy
PFJvb3RPYmplY3Q+KTsKIAogcHJpdmF0ZToKLSAgICBSZWZQdHI8Sk9iamVjdFdyYXBwZXI+IF9h
cnJheTsKLSAgICB1bnNpZ25lZCBpbnQgX2xlbmd0aDsKLSAgICBjb25zdCBjaGFyICpfdHlwZTsK
KyAgICBSZWZQdHI8Sk9iamVjdFdyYXBwZXI+IG1fYXJyYXk7CisgICAgdW5zaWduZWQgaW50IG1f
bGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIG1fdHlwZTsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIEJp
bmRpbmdzCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>47050</attachid>
            <date>2010-01-20 11:31:17 -0800</date>
            <delta_ts>2010-01-20 15:20:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-33914-20100120193114.patch</filename>
            <type>text/plain</type>
            <size>35143</size>
            <attacher name="Steve Block">steveblock</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFdlYkNvcmUvQ2hhbmdlTG9n
CShyZXZpc2lvbiA1MzU1NykKKysrIFdlYkNvcmUvQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBA
IC0xLDMgKzEsMTUgQEAKKzIwMTAtMDEtMjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29n
bGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IEZpeGVzIHN0eWxlIGluIFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlkZ2UKKyAgICAgICAgaHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTMzOTE0CisKKyAgICAgICAgTm8g
bmV3IHRlc3RzLCBzdHlsZSBmaXhlcyBvbmx5LgorCisgICAgICAgICogYnJpZGdlL2puaS9KTklC
cmlkZ2UuY3BwOgorICAgICAgICAqIGJyaWRnZS9qbmkvSk5JQnJpZGdlLmg6CisKIDIwMTAtMDEt
MjAgIFN0ZXZlIEJsb2NrICA8c3RldmVibG9ja0Bnb29nbGUuY29tPgogCiAgICAgICAgIFJldmll
d2VkIGJ5IERhdmlkIExldmluLgpJbmRleDogV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHJldmlz
aW9uIDUzNTU3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTEsNSArMSw1IEBACiAvKgotICogQ29weXJpZ2h0IChDKSAyMDAzIEFwcGxlIENv
bXB1dGVyLCBJbmMuICBBbGwgcmlnaHRzIHJlc2VydmVkLgorICogQ29weXJpZ2h0IChDKSAyMDAz
LCAyMDA0LCAyMDA1LCAyMDA3LCAyMDA5IEFwcGxlIEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4K
ICAqCiAgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKICAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucwpAQCAtMjAsNyArMjAsNyBAQAogICogUFJP
RklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5Z
IFRIRU9SWQogICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElB
QklMSVRZLCBPUiBUT1JUCiAgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBB
UklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKLSAqIE9GIFRISVMgU09GVFdBUkUsIEVW
RU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuIAorICogT0Yg
VEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCiAjaW5jbHVkZSAiY29uZmlnLmgiCkBAIC00Miw3ICs0Miw3IEBACiAj
ZGVmaW5lIEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSAoKHZvaWQpMCkKICNlbHNlCiAjZGVmaW5l
IEpTX0xPRyhmb3JtYXRBbmRBcmdzLi4uKSB7IFwKLSAgICBmcHJpbnRmIChzdGRlcnIsICIlczol
ZCAtLSAlczogICIsIF9fRklMRV9fLCBfX0xJTkVfXywgX19GVU5DVElPTl9fKTsgXAorICAgIGZw
cmludGYoc3RkZXJyLCAiJXM6JWQgLS0gJXM6ICAiLCBfX0ZJTEVfXywgX19MSU5FX18sIF9fRlVO
Q1RJT05fXyk7IFwKICAgICBmcHJpbnRmKHN0ZGVyciwgZm9ybWF0QW5kQXJncyk7IFwKIH0KICNl
bmRpZgpAQCAtNTIsMjUgKzUyLDI1IEBAIHVzaW5nIG5hbWVzcGFjZSBKU0M6OkJpbmRpbmdzOwog
dXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIAotSmF2YVBhcmFtZXRlcjo6SmF2YVBhcmFtZXRl
ciAoSk5JRW52ICplbnYsIGpzdHJpbmcgdHlwZSkKK0phdmFQYXJhbWV0ZXI6OkphdmFQYXJhbWV0
ZXIoSk5JRW52KiBlbnYsIGpzdHJpbmcgdHlwZSkKIHsKLSAgICBfdHlwZSA9IEphdmFTdHJpbmcg
KGVudiwgdHlwZSk7Ci0gICAgX0pOSVR5cGUgPSBKTklUeXBlRnJvbUNsYXNzTmFtZSAoX3R5cGUu
VVRGOFN0cmluZygpKTsKKyAgICBtX3R5cGUgPSBKYXZhU3RyaW5nKGVudiwgdHlwZSk7CisgICAg
bV9KTklUeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV90eXBlLlVURjhTdHJpbmcoKSk7CiB9
CiAKLUphdmFGaWVsZDo6SmF2YUZpZWxkIChKTklFbnYgKmVudiwgam9iamVjdCBhRmllbGQpCitK
YXZhRmllbGQ6OkphdmFGaWVsZChKTklFbnYqIGVudiwgam9iamVjdCBhRmllbGQpCiB7CiAgICAg
Ly8gR2V0IGZpZWxkIHR5cGUKICAgICBqb2JqZWN0IGZpZWxkVHlwZSA9IGNhbGxKTklNZXRob2Q8
am9iamVjdD4oYUZpZWxkLCAiZ2V0VHlwZSIsICIoKUxqYXZhL2xhbmcvQ2xhc3M7Iik7Ci0gICAg
anN0cmluZyBmaWVsZFR5cGVOYW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0Pihm
aWVsZFR5cGUsICJnZXROYW1lIiwgIigpTGphdmEvbGFuZy9TdHJpbmc7Iik7Ci0gICAgX3R5cGUg
PSBKYXZhU3RyaW5nKGVudiwgZmllbGRUeXBlTmFtZSk7Ci0gICAgX0pOSVR5cGUgPSBKTklUeXBl
RnJvbUNsYXNzTmFtZSAoX3R5cGUuVVRGOFN0cmluZygpKTsKKyAgICBqc3RyaW5nIGZpZWxkVHlw
ZU5hbWUgPSBzdGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGZpZWxk
VHlwZSwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgbV90eXBlID0g
SmF2YVN0cmluZyhlbnYsIGZpZWxkVHlwZU5hbWUpOworICAgIG1fSk5JVHlwZSA9IEpOSVR5cGVG
cm9tQ2xhc3NOYW1lKG1fdHlwZS5VVEY4U3RyaW5nKCkpOwogCiAgICAgLy8gR2V0IGZpZWxkIG5h
bWUKLSAgICBqc3RyaW5nIGZpZWxkTmFtZSA9IChqc3RyaW5nKWNhbGxKTklNZXRob2Q8am9iamVj
dD4oYUZpZWxkLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9uYW1l
ID0gSmF2YVN0cmluZyhlbnYsIGZpZWxkTmFtZSk7CisgICAganN0cmluZyBmaWVsZE5hbWUgPSBz
dGF0aWNfY2FzdDxqc3RyaW5nPihjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFGaWVsZCwgImdldE5h
bWUiLCAiKClMamF2YS9sYW5nL1N0cmluZzsiKSk7CisgICAgbV9uYW1lID0gSmF2YVN0cmluZyhl
bnYsIGZpZWxkTmFtZSk7CiAKLSAgICBfZmllbGQgPSBuZXcgSk9iamVjdFdyYXBwZXIoYUZpZWxk
KTsKKyAgICBtX2ZpZWxkID0gbmV3IEpPYmplY3RXcmFwcGVyKGFGaWVsZCk7CiB9CiAKIEpTVmFs
dWUgSmF2YUFycmF5Ojpjb252ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2Jq
ZWN0IGFuT2JqZWN0LCBjb25zdCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+IHJv
b3RPYmplY3QpCkBAIC03OCwyNyArNzgsMjYgQEAgSlNWYWx1ZSBKYXZhQXJyYXk6OmNvbnZlcnRK
T2JqZWN0VG9BcnJheQogICAgIGlmICh0eXBlWzBdICE9ICdbJykKICAgICAgICAgcmV0dXJuIGpz
VW5kZWZpbmVkKCk7CiAKLSAgICByZXR1cm4gbmV3IChleGVjKSBSdW50aW1lQXJyYXkoZXhlYywg
bmV3IEphdmFBcnJheSgoam9iamVjdClhbk9iamVjdCwgdHlwZSwgcm9vdE9iamVjdCkpOworICAg
IHJldHVybiBuZXcgKGV4ZWMpIFJ1bnRpbWVBcnJheShleGVjLCBuZXcgSmF2YUFycmF5KGFuT2Jq
ZWN0LCB0eXBlLCByb290T2JqZWN0KSk7CiB9CiAKLWp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNo
VmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlICpleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UgKmlu
c3RhbmNlLCBjb25zdCBjaGFyICpuYW1lLCBjb25zdCBjaGFyICpzaWcsIEpOSVR5cGUgcmV0dXJu
VHlwZSkgY29uc3QKK2p2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2Uo
RXhlY1N0YXRlKiBleGVjLCBjb25zdCBKYXZhSW5zdGFuY2UqIGluc3RhbmNlLCBjb25zdCBjaGFy
KiBuYW1lLCBjb25zdCBjaGFyKiBzaWcsIEpOSVR5cGUgcmV0dXJuVHlwZSkgY29uc3QKIHsKICAg
ICBqb2JqZWN0IGppbnN0YW5jZSA9IGluc3RhbmNlLT5qYXZhSW5zdGFuY2UoKTsKLSAgICBqb2Jq
ZWN0IGZpZWxkSkluc3RhbmNlID0gX2ZpZWxkLT5tX2luc3RhbmNlOwotICAgIEpOSUVudiAqZW52
ID0gZ2V0Sk5JRW52KCk7CisgICAgam9iamVjdCBmaWVsZEpJbnN0YW5jZSA9IG1fZmllbGQtPm1f
aW5zdGFuY2U7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKICAgICBqdmFsdWUgcmVz
dWx0OwogCi0gICAgYnplcm8gKCZyZXN1bHQsIHNpemVvZihqdmFsdWUpKTsKKyAgICBiemVybygm
cmVzdWx0LCBzaXplb2YoanZhbHVlKSk7CiAgICAgamNsYXNzIGNscyA9IGVudi0+R2V0T2JqZWN0
Q2xhc3MoZmllbGRKSW5zdGFuY2UpOwotICAgIGlmICggY2xzICE9IE5VTEwgKSB7CisgICAgaWYg
KGNscykgewogICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRNZXRob2RJRChjbHMsIG5h
bWUsIHNpZyk7Ci0gICAgICAgIGlmICggbWlkICE9IE5VTEwgKQotICAgICAgICB7CisgICAgICAg
IGlmIChtaWQpIHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RPYmplY3QgPSBpbnN0YW5j
ZS0+cm9vdE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmplY3QgJiYgcm9vdE9iamVj
dC0+bmF0aXZlSGFuZGxlKCkpIHsKICAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4Y2VwdGlvbkRl
c2NyaXB0aW9uOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzFdOwotICAgICAgICAgICAg
ICAgIAorCiAgICAgICAgICAgICAgICAgYXJnc1swXS5sID0gamluc3RhbmNlOwogICAgICAgICAg
ICAgICAgIGRpc3BhdGNoSk5JQ2FsbChleGVjLCByb290T2JqZWN0LT5uYXRpdmVIYW5kbGUoKSwg
ZmllbGRKSW5zdGFuY2UsIGZhbHNlLCByZXR1cm5UeXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwg
ZXhjZXB0aW9uRGVzY3JpcHRpb24pOwogICAgICAgICAgICAgICAgIGlmIChleGNlcHRpb25EZXNj
cmlwdGlvbikKQEAgLTEwOSw3OSArMTA4LDc5IEBAIGp2YWx1ZSBKYXZhRmllbGQ6OmRpc3BhdGNo
VmFsdWVGcm9tSW5zdGEKICAgICByZXR1cm4gcmVzdWx0OwogfQogCi1KU1ZhbHVlIEphdmFGaWVs
ZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJbnN0YW5jZSogaSkg
Y29uc3QgCitKU1ZhbHVlIEphdmFGaWVsZDo6dmFsdWVGcm9tSW5zdGFuY2UoRXhlY1N0YXRlKiBl
eGVjLCBjb25zdCBJbnN0YW5jZSogaSkgY29uc3QKIHsKLSAgICBjb25zdCBKYXZhSW5zdGFuY2Ug
Kmluc3RhbmNlID0gc3RhdGljX2Nhc3Q8Y29uc3QgSmF2YUluc3RhbmNlICo+KGkpOworICAgIGNv
bnN0IEphdmFJbnN0YW5jZSogaW5zdGFuY2UgPSBzdGF0aWNfY2FzdDxjb25zdCBKYXZhSW5zdGFu
Y2UqPihpKTsKIAogICAgIEpTVmFsdWUganNyZXN1bHQgPSBqc1VuZGVmaW5lZCgpOwotICAgIAot
ICAgIHN3aXRjaCAoX0pOSVR5cGUpIHsKLSAgICAgICAgY2FzZSBhcnJheV90eXBlOgotICAgICAg
ICBjYXNlIG9iamVjdF90eXBlOiB7Ci0gICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0
Y2hWYWx1ZUZyb21JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsICJnZXQiLCAiKExqYXZhL2xhbmcv
T2JqZWN0OylMamF2YS9sYW5nL09iamVjdDsiLCBvYmplY3RfdHlwZSk7CisKKyAgICBzd2l0Y2gg
KG1fSk5JVHlwZSkgeworICAgIGNhc2UgYXJyYXlfdHlwZToKKyAgICBjYXNlIG9iamVjdF90eXBl
OgorICAgICAgICB7CisgICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZy
b21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUxq
YXZhL2xhbmcvT2JqZWN0OyIsIG9iamVjdF90eXBlKTsKICAgICAgICAgICAgIGpvYmplY3QgYW5P
YmplY3QgPSByZXN1bHQubDsKIAotICAgICAgICAgICAgY29uc3QgY2hhciAqYXJyYXlUeXBlID0g
dHlwZSgpOwotICAgICAgICAgICAgaWYgKGFycmF5VHlwZVswXSA9PSAnWycpIHsKKyAgICAgICAg
ICAgIGNvbnN0IGNoYXIqIGFycmF5VHlwZSA9IHR5cGUoKTsKKyAgICAgICAgICAgIGlmIChhcnJh
eVR5cGVbMF0gPT0gJ1snKQogICAgICAgICAgICAgICAgIGpzcmVzdWx0ID0gSmF2YUFycmF5Ojpj
b252ZXJ0Sk9iamVjdFRvQXJyYXkoZXhlYywgYW5PYmplY3QsIGFycmF5VHlwZSwgaW5zdGFuY2Ut
PnJvb3RPYmplY3QoKSk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBlbHNlIGlmIChhbk9i
amVjdCAhPSAwKXsKKyAgICAgICAgICAgIGVsc2UgaWYgKGFuT2JqZWN0KQogICAgICAgICAgICAg
ICAgIGpzcmVzdWx0ID0gSmF2YUluc3RhbmNlOjpjcmVhdGUoYW5PYmplY3QsIGluc3RhbmNlLT5y
b290T2JqZWN0KCkpLT5jcmVhdGVSdW50aW1lT2JqZWN0KGV4ZWMpOwotICAgICAgICAgICAgfQog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgYm9v
bGVhbl90eXBlOgotICAgICAgICAgICAganNyZXN1bHQgPSBqc0Jvb2xlYW4oZGlzcGF0Y2hWYWx1
ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEJvb2xlYW4iLCAiKExqYXZhL2xhbmcv
T2JqZWN0OylaIiwgYm9vbGVhbl90eXBlKS56KTsKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAg
ICAgICAgCi0gICAgICAgIGNhc2UgYnl0ZV90eXBlOgotICAgICAgICBjYXNlIGNoYXJfdHlwZToK
LSAgICAgICAgY2FzZSBzaG9ydF90eXBlOgotICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlw
ZTogeworCisgICAgY2FzZSBib29sZWFuX3R5cGU6CisgICAgICAgIGpzcmVzdWx0ID0ganNCb29s
ZWFuKGRpc3BhdGNoVmFsdWVGcm9tSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsICJnZXRCb29sZWFu
IiwgIihMamF2YS9sYW5nL09iamVjdDspWiIsIGJvb2xlYW5fdHlwZSkueik7CisgICAgICAgIGJy
ZWFrOworCisgICAgY2FzZSBieXRlX3R5cGU6CisgICAgY2FzZSBjaGFyX3R5cGU6CisgICAgY2Fz
ZSBzaG9ydF90eXBlOgorCisgICAgY2FzZSBpbnRfdHlwZToKKyAgICAgICAgewogICAgICAgICAg
ICAgamludCB2YWx1ZTsKLSAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVl
RnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9PYmpl
Y3Q7KUkiLCBpbnRfdHlwZSk7CisgICAgICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hW
YWx1ZUZyb21JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgImdldEludCIsICIoTGphdmEvbGFuZy9P
YmplY3Q7KUkiLCBpbnRfdHlwZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAg
ICAgICAgICAganNyZXN1bHQgPSBqc051bWJlcihleGVjLCAoaW50KXZhbHVlKTsKKyAgICAgICAg
ICAgIGpzcmVzdWx0ID0ganNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8aW50Pih2YWx1ZSkpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOgotICAg
ICAgICBjYXNlIGZsb2F0X3R5cGU6Ci0gICAgICAgIGNhc2UgZG91YmxlX3R5cGU6IHsKKyAgICBj
YXNlIGxvbmdfdHlwZToKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgY2FzZSBkb3VibGVfdHlw
ZToKKyAgICAgICAgewogICAgICAgICAgICAgamRvdWJsZSB2YWx1ZTsKLSAgICAgICAgICAgIGp2
YWx1ZSByZXN1bHQgPSBkaXNwYXRjaFZhbHVlRnJvbUluc3RhbmNlIChleGVjLCBpbnN0YW5jZSwg
ImdldERvdWJsZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUQiLCBkb3VibGVfdHlwZSk7CisgICAg
ICAgICAgICBqdmFsdWUgcmVzdWx0ID0gZGlzcGF0Y2hWYWx1ZUZyb21JbnN0YW5jZShleGVjLCBp
bnN0YW5jZSwgImdldERvdWJsZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7KUQiLCBkb3VibGVfdHlw
ZSk7CiAgICAgICAgICAgICB2YWx1ZSA9IHJlc3VsdC5pOwotICAgICAgICAgICAganNyZXN1bHQg
PSBqc051bWJlcihleGVjLCAoZG91YmxlKXZhbHVlKTsKKyAgICAgICAgICAgIGpzcmVzdWx0ID0g
anNOdW1iZXIoZXhlYywgc3RhdGljX2Nhc3Q8ZG91YmxlPih2YWx1ZSkpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAgIGJy
ZWFrOwogICAgIH0KIAotICAgIEpTX0xPRyAoImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhu
YW1lKCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2Np
aSgpKTsKLSAgICAKKyAgICBKU19MT0coImdldHRpbmcgJXMgPSAlc1xuIiwgVVN0cmluZyhuYW1l
KCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBqc3Jlc3VsdC50b1N0cmluZyhleGVjKS5hc2NpaSgp
KTsKKwogICAgIHJldHVybiBqc3Jlc3VsdDsKIH0KIAotdm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNo
U2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSmF2YUluc3RhbmNlICpp
bnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciAqbmFtZSwgY29uc3QgY2hhciAq
c2lnKSBjb25zdAordm9pZCBKYXZhRmllbGQ6OmRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4
ZWNTdGF0ZSogZXhlYywgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwganZhbHVlIGphdmFW
YWx1ZSwgY29uc3QgY2hhciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdAogewogICAgIGpv
YmplY3Qgamluc3RhbmNlID0gaW5zdGFuY2UtPmphdmFJbnN0YW5jZSgpOwotICAgIGpvYmplY3Qg
ZmllbGRKSW5zdGFuY2UgPSBfZmllbGQtPm1faW5zdGFuY2U7Ci0gICAgSk5JRW52ICplbnYgPSBn
ZXRKTklFbnYoKTsKKyAgICBqb2JqZWN0IGZpZWxkSkluc3RhbmNlID0gbV9maWVsZC0+bV9pbnN0
YW5jZTsKKyAgICBKTklFbnYqIGVudiA9IGdldEpOSUVudigpOwogCiAgICAgamNsYXNzIGNscyA9
IGVudi0+R2V0T2JqZWN0Q2xhc3MoZmllbGRKSW5zdGFuY2UpOwotICAgIGlmICggY2xzICE9IE5V
TEwgKSB7CisgICAgaWYgKGNscykgewogICAgICAgICBqbWV0aG9kSUQgbWlkID0gZW52LT5HZXRN
ZXRob2RJRChjbHMsIG5hbWUsIHNpZyk7Ci0gICAgICAgIGlmICggbWlkICE9IE5VTEwgKQotICAg
ICAgICB7CisgICAgICAgIGlmIChtaWQpIHsKICAgICAgICAgICAgIFJvb3RPYmplY3QqIHJvb3RP
YmplY3QgPSBpbnN0YW5jZS0+cm9vdE9iamVjdCgpOwogICAgICAgICAgICAgaWYgKHJvb3RPYmpl
Y3QgJiYgcm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCkpIHsKICAgICAgICAgICAgICAgICBKU1Zh
bHVlIGV4Y2VwdGlvbkRlc2NyaXB0aW9uOwogICAgICAgICAgICAgICAgIGp2YWx1ZSBhcmdzWzJd
OwogICAgICAgICAgICAgICAgIGp2YWx1ZSByZXN1bHQ7Ci0gICAgICAgICAgICAgICAgCisKICAg
ICAgICAgICAgICAgICBhcmdzWzBdLmwgPSBqaW5zdGFuY2U7CiAgICAgICAgICAgICAgICAgYXJn
c1sxXSA9IGphdmFWYWx1ZTsKICAgICAgICAgICAgICAgICBkaXNwYXRjaEpOSUNhbGwoZXhlYywg
cm9vdE9iamVjdC0+bmF0aXZlSGFuZGxlKCksIGZpZWxkSkluc3RhbmNlLCBmYWxzZSwgdm9pZF90
eXBlLCBtaWQsIGFyZ3MsIHJlc3VsdCwgMCwgZXhjZXB0aW9uRGVzY3JpcHRpb24pOwpAQCAtMTk0
LDEwNyArMTkzLDExNiBAQCB2b2lkIEphdmFGaWVsZDo6ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFu
CiAKIHZvaWQgSmF2YUZpZWxkOjpzZXRWYWx1ZVRvSW5zdGFuY2UoRXhlY1N0YXRlKiBleGVjLCBj
b25zdCBJbnN0YW5jZSogaSwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0CiB7Ci0gICAgY29uc3QgSmF2
YUluc3RhbmNlICppbnN0YW5jZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSAqPihp
KTsKLSAgICBqdmFsdWUgamF2YVZhbHVlID0gY29udmVydFZhbHVlVG9KVmFsdWUgKGV4ZWMsIGFW
YWx1ZSwgX0pOSVR5cGUsIHR5cGUoKSk7CisgICAgY29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5j
ZSA9IHN0YXRpY19jYXN0PGNvbnN0IEphdmFJbnN0YW5jZSo+KGkpOworICAgIGp2YWx1ZSBqYXZh
VmFsdWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZShleGVjLCBhVmFsdWUsIG1fSk5JVHlwZSwgdHlw
ZSgpKTsKIAotICAgIEpTX0xPRyAoInNldHRpbmcgdmFsdWUgJXMgdG8gJXNcbiIsIFVTdHJpbmco
bmFtZSgpKS5VVEY4U3RyaW5nKCkuY19zdHIoKSwgYVZhbHVlLnRvU3RyaW5nKGV4ZWMpLmFzY2lp
KCkpOworICAgIEpTX0xPRygic2V0dGluZyB2YWx1ZSAlcyB0byAlc1xuIiwgVVN0cmluZyhuYW1l
KCkpLlVURjhTdHJpbmcoKS5jX3N0cigpLCBhVmFsdWUudG9TdHJpbmcoZXhlYykuYXNjaWkoKSk7
CiAKLSAgICBzd2l0Y2ggKF9KTklUeXBlKSB7Ci0gICAgICAgIGNhc2UgYXJyYXlfdHlwZToKLSAg
ICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRv
SW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXQiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0xqYXZhL2xhbmcvT2JqZWN0OylWIik7CisgICAgc3dpdGNoIChtX0pOSVR5cGUpIHsK
KyAgICBjYXNlIGFycmF5X3R5cGU6CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UoZXhlYywgaW5zdGFuY2UsIGph
dmFWYWx1ZSwgInNldCIsICIoTGphdmEvbGFuZy9PYmplY3Q7TGphdmEvbGFuZy9PYmplY3Q7KVYi
KTsKICAgICAgICAgfQogICAgICAgICBicmVhazsKLSAgICAgICAgICAgIAotICAgICAgICBjYXNl
IGJvb2xlYW5fdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2Ug
KGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRCb29sZWFuIiwgIihMamF2YS9sYW5nL09i
amVjdDtaKVYiKTsKKworICAgIGNhc2UgYm9vbGVhbl90eXBlOgorICAgICAgICB7CisgICAgICAg
ICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVl
LCAic2V0Qm9vbGVhbiIsICIoTGphdmEvbGFuZy9PYmplY3Q7WilWIik7CiAgICAgICAgIH0KICAg
ICAgICAgYnJlYWs7Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBieXRlX3R5cGU6IHsKLSAg
ICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlIChleGVjLCBpbnN0YW5jZSwgamF2
YVZhbHVlLCAic2V0Qnl0ZSIsICIoTGphdmEvbGFuZy9PYmplY3Q7QilWIik7CisKKyAgICBjYXNl
IGJ5dGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZGlzcGF0Y2hTZXRWYWx1ZVRvSW5z
dGFuY2UoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEJ5dGUiLCAiKExqYXZhL2xhbmcv
T2JqZWN0O0IpViIpOwogICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2Ug
Y2hhcl90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhl
YywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldENoYXIiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0Mp
ViIpOworICAgIGNhc2UgY2hhcl90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRj
aFNldFZhbHVlVG9JbnN0YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0Q2hhciIs
ICIoTGphdmEvbGFuZy9PYmplY3Q7QylWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAK
LSAgICAgICAgY2FzZSBzaG9ydF90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVl
VG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldFNob3J0IiwgIihMamF2
YS9sYW5nL09iamVjdDtTKVYiKTsKKyAgICBjYXNlIHNob3J0X3R5cGU6CisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZh
VmFsdWUsICJzZXRTaG9ydCIsICIoTGphdmEvbGFuZy9PYmplY3Q7UylWIik7CiAgICAgICAgIH0K
ICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAg
ZGlzcGF0Y2hTZXRWYWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJz
ZXRJbnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0kpViIpOworICAgIGNhc2UgaW50X3R5cGU6Cisg
ICAgICAgIHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGlu
c3RhbmNlLCBqYXZhVmFsdWUsICJzZXRJbnQiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0kpViIpOwog
ICAgICAgICB9CiAgICAgICAgIGJyZWFrOwogCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0g
ICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhlYywgaW5zdGFuY2UsIGph
dmFWYWx1ZSwgInNldExvbmciLCAiKExqYXZhL2xhbmcvT2JqZWN0O0opViIpOworICAgIGNhc2Ug
bG9uZ190eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0
YW5jZShleGVjLCBpbnN0YW5jZSwgamF2YVZhbHVlLCAic2V0TG9uZyIsICIoTGphdmEvbGFuZy9P
YmplY3Q7SilWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7CiAKLSAgICAgICAgY2FzZSBm
bG9hdF90eXBlOiB7Ci0gICAgICAgICAgICBkaXNwYXRjaFNldFZhbHVlVG9JbnN0YW5jZSAoZXhl
YywgaW5zdGFuY2UsIGphdmFWYWx1ZSwgInNldEZsb2F0IiwgIihMamF2YS9sYW5nL09iamVjdDtG
KVYiKTsKKyAgICBjYXNlIGZsb2F0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGRpc3Bh
dGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXRGbG9h
dCIsICIoTGphdmEvbGFuZy9PYmplY3Q7RilWIik7CiAgICAgICAgIH0KICAgICAgICAgYnJlYWs7
CiAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAgZGlzcGF0Y2hTZXRW
YWx1ZVRvSW5zdGFuY2UgKGV4ZWMsIGluc3RhbmNlLCBqYXZhVmFsdWUsICJzZXREb3VibGUiLCAi
KExqYXZhL2xhbmcvT2JqZWN0O0QpViIpOworICAgIGNhc2UgZG91YmxlX3R5cGU6CisgICAgICAg
IHsKKyAgICAgICAgICAgIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKGV4ZWMsIGluc3RhbmNl
LCBqYXZhVmFsdWUsICJzZXREb3VibGUiLCAiKExqYXZhL2xhbmcvT2JqZWN0O0QpViIpOwogICAg
ICAgICB9CiAgICAgICAgIGJyZWFrOwotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KIH0KIAotSmF2YU1ldGhvZDo6SmF2YU1ldGhvZCAoSk5JRW52
ICplbnYsIGpvYmplY3QgYU1ldGhvZCkKK0phdmFNZXRob2Q6OkphdmFNZXRob2QoSk5JRW52KiBl
bnYsIGpvYmplY3QgYU1ldGhvZCkKIHsKICAgICAvLyBHZXQgcmV0dXJuIHR5cGUKICAgICBqb2Jq
ZWN0IHJldHVyblR5cGUgPSBjYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRSZXR1
cm5UeXBlIiwgIigpTGphdmEvbGFuZy9DbGFzczsiKTsKLSAgICBqc3RyaW5nIHJldHVyblR5cGVO
YW1lID0gKGpzdHJpbmcpY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFt
ZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpOwotICAgIF9yZXR1cm5UeXBlID1KYXZhU3RyaW5n
IChlbnYsIHJldHVyblR5cGVOYW1lKTsKLSAgICBfSk5JUmV0dXJuVHlwZSA9IEpOSVR5cGVGcm9t
Q2xhc3NOYW1lIChfcmV0dXJuVHlwZS5VVEY4U3RyaW5nKCkpOwotICAgIGVudi0+RGVsZXRlTG9j
YWxSZWYgKHJldHVyblR5cGUpOwotICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKHJldHVyblR5cGVO
YW1lKTsKKyAgICBqc3RyaW5nIHJldHVyblR5cGVOYW1lID0gc3RhdGljX2Nhc3Q8anN0cmluZz4o
Y2FsbEpOSU1ldGhvZDxqb2JqZWN0PihyZXR1cm5UeXBlLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xh
bmcvU3RyaW5nOyIpKTsKKyAgICBtX3JldHVyblR5cGUgPUphdmFTdHJpbmcoZW52LCByZXR1cm5U
eXBlTmFtZSk7CisgICAgbV9KTklSZXR1cm5UeXBlID0gSk5JVHlwZUZyb21DbGFzc05hbWUobV9y
ZXR1cm5UeXBlLlVURjhTdHJpbmcoKSk7CisgICAgZW52LT5EZWxldGVMb2NhbFJlZihyZXR1cm5U
eXBlKTsKKyAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHJldHVyblR5cGVOYW1lKTsKIAogICAgIC8v
IEdldCBtZXRob2QgbmFtZQotICAgIGpzdHJpbmcgbWV0aG9kTmFtZSA9IChqc3RyaW5nKWNhbGxK
TklNZXRob2Q8am9iamVjdD4oYU1ldGhvZCwgImdldE5hbWUiLCAiKClMamF2YS9sYW5nL1N0cmlu
ZzsiKTsKLSAgICBfbmFtZSA9IEphdmFTdHJpbmcgKGVudiwgbWV0aG9kTmFtZSk7Ci0gICAgZW52
LT5EZWxldGVMb2NhbFJlZiAobWV0aG9kTmFtZSk7CisgICAganN0cmluZyBtZXRob2ROYW1lID0g
c3RhdGljX2Nhc3Q8anN0cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAiZ2V0
TmFtZSIsICIoKUxqYXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICBtX25hbWUgPSBKYXZhU3RyaW5n
KGVudiwgbWV0aG9kTmFtZSk7CisgICAgZW52LT5EZWxldGVMb2NhbFJlZihtZXRob2ROYW1lKTsK
IAogICAgIC8vIEdldCBwYXJhbWV0ZXJzCi0gICAgamFycmF5IGpwYXJhbWV0ZXJzID0gKGphcnJh
eSljYWxsSk5JTWV0aG9kPGpvYmplY3Q+KGFNZXRob2QsICJnZXRQYXJhbWV0ZXJUeXBlcyIsICIo
KVtMamF2YS9sYW5nL0NsYXNzOyIpOwotICAgIF9udW1QYXJhbWV0ZXJzID0gZW52LT5HZXRBcnJh
eUxlbmd0aCAoanBhcmFtZXRlcnMpOwotICAgIF9wYXJhbWV0ZXJzID0gbmV3IEphdmFQYXJhbWV0
ZXJbX251bVBhcmFtZXRlcnNdOwotICAgIAorICAgIGphcnJheSBqcGFyYW1ldGVycyA9IHN0YXRp
Y19jYXN0PGphcnJheT4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhTWV0aG9kLCAiZ2V0UGFyYW1l
dGVyVHlwZXMiLCAiKClbTGphdmEvbGFuZy9DbGFzczsiKSk7CisgICAgbV9udW1QYXJhbWV0ZXJz
ID0gZW52LT5HZXRBcnJheUxlbmd0aChqcGFyYW1ldGVycyk7CisgICAgbV9wYXJhbWV0ZXJzID0g
bmV3IEphdmFQYXJhbWV0ZXJbbV9udW1QYXJhbWV0ZXJzXTsKKwogICAgIGludCBpOwotICAgIGZv
ciAoaSA9IDA7IGkgPCBfbnVtUGFyYW1ldGVyczsgaSsrKSB7Ci0gICAgICAgIGpvYmplY3QgYVBh
cmFtZXRlciA9IGVudi0+R2V0T2JqZWN0QXJyYXlFbGVtZW50ICgoam9iamVjdEFycmF5KWpwYXJh
bWV0ZXJzLCBpKTsKLSAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gKGpzdHJpbmcpY2Fs
bEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxqYXZhL2xhbmcv
U3RyaW5nOyIpOwotICAgICAgICBfcGFyYW1ldGVyc1tpXSA9IEphdmFQYXJhbWV0ZXIoZW52LCBw
YXJhbWV0ZXJOYW1lKTsKLSAgICAgICAgZW52LT5EZWxldGVMb2NhbFJlZiAoYVBhcmFtZXRlcik7
Ci0gICAgICAgIGVudi0+RGVsZXRlTG9jYWxSZWYgKHBhcmFtZXRlck5hbWUpOworICAgIGZvciAo
aSA9IDA7IGkgPCBtX251bVBhcmFtZXRlcnM7IGkrKykgeworICAgICAgICBqb2JqZWN0IGFQYXJh
bWV0ZXIgPSBlbnYtPkdldE9iamVjdEFycmF5RWxlbWVudCgoam9iamVjdEFycmF5KWpwYXJhbWV0
ZXJzLCBpKTsKKyAgICAgICAganN0cmluZyBwYXJhbWV0ZXJOYW1lID0gc3RhdGljX2Nhc3Q8anN0
cmluZz4oY2FsbEpOSU1ldGhvZDxqb2JqZWN0PihhUGFyYW1ldGVyLCAiZ2V0TmFtZSIsICIoKUxq
YXZhL2xhbmcvU3RyaW5nOyIpKTsKKyAgICAgICAgbV9wYXJhbWV0ZXJzW2ldID0gSmF2YVBhcmFt
ZXRlcihlbnYsIHBhcmFtZXRlck5hbWUpOworICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKGFQ
YXJhbWV0ZXIpOworICAgICAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmKHBhcmFtZXRlck5hbWUpOwog
ICAgIH0KLSAgICBlbnYtPkRlbGV0ZUxvY2FsUmVmIChqcGFyYW1ldGVycyk7CisgICAgZW52LT5E
ZWxldGVMb2NhbFJlZihqcGFyYW1ldGVycyk7CiAKICAgICAvLyBDcmVhdGVkIGxhemlseS4KLSAg
ICBfc2lnbmF0dXJlID0gMDsKLSAgICBfbWV0aG9kSUQgPSAwOwotICAgIAorICAgIG1fc2lnbmF0
dXJlID0gMDsKKyAgICBtX21ldGhvZElEID0gMDsKKwogICAgIGpjbGFzcyBtb2RpZmllckNsYXNz
ID0gZW52LT5GaW5kQ2xhc3MoImphdmEvbGFuZy9yZWZsZWN0L01vZGlmaWVyIik7CiAgICAgaW50
IG1vZGlmaWVycyA9IGNhbGxKTklNZXRob2Q8amludD4oYU1ldGhvZCwgImdldE1vZGlmaWVycyIs
ICIoKUkiKTsKLSAgICBfaXNTdGF0aWMgPSAoYm9vbCljYWxsSk5JU3RhdGljTWV0aG9kPGpib29s
ZWFuPihtb2RpZmllckNsYXNzLCAiaXNTdGF0aWMiLCAiKEkpWiIsIG1vZGlmaWVycyk7CisgICAg
bV9pc1N0YXRpYyA9IHN0YXRpY19jYXN0PGJvb2w+KGNhbGxKTklTdGF0aWNNZXRob2Q8amJvb2xl
YW4+KG1vZGlmaWVyQ2xhc3MsICJpc1N0YXRpYyIsICIoSSlaIiwgbW9kaWZpZXJzKSk7CiAgICAg
ZW52LT5EZWxldGVMb2NhbFJlZihtb2RpZmllckNsYXNzKTsKIH0KIAotSmF2YU1ldGhvZDo6fkph
dmFNZXRob2QoKSAKK0phdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkKIHsKLSAgICBpZiAoX3NpZ25h
dHVyZSkKLSAgICAgICAgZnJlZShfc2lnbmF0dXJlKTsKLSAgICBkZWxldGUgW10gX3BhcmFtZXRl
cnM7CisgICAgaWYgKG1fc2lnbmF0dXJlKQorICAgICAgICBmcmVlKG1fc2lnbmF0dXJlKTsKKyAg
ICBkZWxldGUgW10gbV9wYXJhbWV0ZXJzOwogfTsKIAogLy8gSk5JIG1ldGhvZCBzaWduYXR1cmVz
IHVzZSAnLycgYmV0d2VlbiBjb21wb25lbnRzIG9mIGEgY2xhc3MgbmFtZSwgYnV0CkBAIC0zMDIs
MjQ0ICszMTAsMjYwIEBAIEphdmFNZXRob2Q6On5KYXZhTWV0aG9kKCkgCiBzdGF0aWMgdm9pZCBh
cHBlbmRDbGFzc05hbWUoU3RyaW5nQnVpbGRlciYgYnVpbGRlciwgY29uc3QgY2hhciogY2xhc3NO
YW1lKQogewogICAgIEFTU0VSVChKU0xvY2s6OmxvY2tDb3VudCgpID4gMCk7Ci0gICAgCi0gICAg
Y2hhciAqcmVzdWx0LCAqY3AgPSBzdHJkdXAoY2xhc3NOYW1lKTsKLSAgICAKKworICAgIGNoYXIq
IHJlc3VsdDsKKyAgICBjaGFyKiBjcCA9IHN0cmR1cChjbGFzc05hbWUpOworCiAgICAgcmVzdWx0
ID0gY3A7CiAgICAgd2hpbGUgKCpjcCkgewogICAgICAgICBpZiAoKmNwID09ICcuJykKICAgICAg
ICAgICAgICpjcCA9ICcvJzsKICAgICAgICAgY3ArKzsKICAgICB9Ci0gICAgICAgIAorCiAgICAg
YnVpbGRlci5hcHBlbmQocmVzdWx0KTsKIAogICAgIGZyZWUocmVzdWx0KTsKIH0KIAotY29uc3Qg
Y2hhciAqSmF2YU1ldGhvZDo6c2lnbmF0dXJlKCkgY29uc3QgCitjb25zdCBjaGFyKiBKYXZhTWV0
aG9kOjpzaWduYXR1cmUoKSBjb25zdAogewotICAgIGlmICghX3NpZ25hdHVyZSkgeworICAgIGlm
ICghbV9zaWduYXR1cmUpIHsKICAgICAgICAgSlNMb2NrIGxvY2soU2lsZW5jZUFzc2VydGlvbnNP
bmx5KTsKIAogICAgICAgICBTdHJpbmdCdWlsZGVyIHNpZ25hdHVyZUJ1aWxkZXI7CiAgICAgICAg
IHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCIoIik7Ci0gICAgICAgIGZvciAoaW50IGkgPSAwOyBp
IDwgX251bVBhcmFtZXRlcnM7IGkrKykgeworICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
bnVtUGFyYW1ldGVyczsgaSsrKSB7CiAgICAgICAgICAgICBKYXZhUGFyYW1ldGVyKiBhUGFyYW1l
dGVyID0gcGFyYW1ldGVyQXQoaSk7Ci0gICAgICAgICAgICBKTklUeXBlIF9KTklUeXBlID0gYVBh
cmFtZXRlci0+Z2V0Sk5JVHlwZSgpOwotICAgICAgICAgICAgaWYgKF9KTklUeXBlID09IGFycmF5
X3R5cGUpCisgICAgICAgICAgICBKTklUeXBlIHR5cGUgPSBhUGFyYW1ldGVyLT5nZXRKTklUeXBl
KCk7CisgICAgICAgICAgICBpZiAodHlwZSA9PSBhcnJheV90eXBlKQogICAgICAgICAgICAgICAg
IGFwcGVuZENsYXNzTmFtZShzaWduYXR1cmVCdWlsZGVyLCBhUGFyYW1ldGVyLT50eXBlKCkpOwog
ICAgICAgICAgICAgZWxzZSB7Ci0gICAgICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBl
bmQoc2lnbmF0dXJlRnJvbVByaW1pdGl2ZVR5cGUoX0pOSVR5cGUpKTsKLSAgICAgICAgICAgICAg
ICBpZiAoX0pOSVR5cGUgPT0gb2JqZWN0X3R5cGUpIHsKKyAgICAgICAgICAgICAgICBzaWduYXR1
cmVCdWlsZGVyLmFwcGVuZChzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZSh0eXBlKSk7CisgICAg
ICAgICAgICAgICAgaWYgKHR5cGUgPT0gb2JqZWN0X3R5cGUpIHsKICAgICAgICAgICAgICAgICAg
ICAgYXBwZW5kQ2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIGFQYXJhbWV0ZXItPnR5cGUoKSk7
CiAgICAgICAgICAgICAgICAgICAgIHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHNpZ25hdHVy
ZUJ1aWxkZXIuYXBwZW5kKCIpIik7Ci0gICAgICAgIAotICAgICAgICBjb25zdCBjaGFyICpyZXR1
cm5UeXBlID0gX3JldHVyblR5cGUuVVRGOFN0cmluZygpOwotICAgICAgICBpZiAoX0pOSVJldHVy
blR5cGUgPT0gYXJyYXlfdHlwZSkgeworCisgICAgICAgIGNvbnN0IGNoYXIqIHJldHVyblR5cGUg
PSBtX3JldHVyblR5cGUuVVRGOFN0cmluZygpOworICAgICAgICBpZiAobV9KTklSZXR1cm5UeXBl
ID09IGFycmF5X3R5cGUpCiAgICAgICAgICAgICBhcHBlbmRDbGFzc05hbWUoc2lnbmF0dXJlQnVp
bGRlciwgcmV0dXJuVHlwZSk7Ci0gICAgICAgIH0gZWxzZSB7Ci0gICAgICAgICAgICBzaWduYXR1
cmVCdWlsZGVyLmFwcGVuZChzaWduYXR1cmVGcm9tUHJpbWl0aXZlVHlwZShfSk5JUmV0dXJuVHlw
ZSkpOwotICAgICAgICAgICAgaWYgKF9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7Cisg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgc2lnbmF0dXJlQnVpbGRlci5hcHBlbmQoc2lnbmF0
dXJlRnJvbVByaW1pdGl2ZVR5cGUobV9KTklSZXR1cm5UeXBlKSk7CisgICAgICAgICAgICBpZiAo
bV9KTklSZXR1cm5UeXBlID09IG9iamVjdF90eXBlKSB7CiAgICAgICAgICAgICAgICAgYXBwZW5k
Q2xhc3NOYW1lKHNpZ25hdHVyZUJ1aWxkZXIsIHJldHVyblR5cGUpOwogICAgICAgICAgICAgICAg
IHNpZ25hdHVyZUJ1aWxkZXIuYXBwZW5kKCI7Iik7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0K
LSAgICAgICAgCisKICAgICAgICAgU3RyaW5nIHNpZ25hdHVyZVN0cmluZyA9IHNpZ25hdHVyZUJ1
aWxkZXIudG9TdHJpbmcoKTsKLSAgICAgICAgX3NpZ25hdHVyZSA9IHN0cmR1cChzaWduYXR1cmVT
dHJpbmcudXRmOCgpLmRhdGEoKSk7CisgICAgICAgIG1fc2lnbmF0dXJlID0gc3RyZHVwKHNpZ25h
dHVyZVN0cmluZy51dGY4KCkuZGF0YSgpKTsKICAgICB9Ci0gICAgCi0gICAgcmV0dXJuIF9zaWdu
YXR1cmU7CisKKyAgICByZXR1cm4gbV9zaWduYXR1cmU7CiB9CiAKIEpOSVR5cGUgSmF2YU1ldGhv
ZDo6Sk5JUmV0dXJuVHlwZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIF9KTklSZXR1cm5UeXBlOwor
ICAgIHJldHVybiBtX0pOSVJldHVyblR5cGU7CiB9CiAKLWptZXRob2RJRCBKYXZhTWV0aG9kOjpt
ZXRob2RJRCAoam9iamVjdCBvYmopIGNvbnN0CitqbWV0aG9kSUQgSmF2YU1ldGhvZDo6bWV0aG9k
SUQoam9iamVjdCBvYmopIGNvbnN0CiB7Ci0gICAgaWYgKF9tZXRob2RJRCA9PSAwKSB7Ci0gICAg
ICAgIF9tZXRob2RJRCA9IGdldE1ldGhvZElEIChvYmosIF9uYW1lLlVURjhTdHJpbmcoKSwgc2ln
bmF0dXJlKCkpOwotICAgIH0KLSAgICByZXR1cm4gX21ldGhvZElEOworICAgIGlmICghbV9tZXRo
b2RJRCkKKyAgICAgICAgbV9tZXRob2RJRCA9IGdldE1ldGhvZElEKG9iaiwgbV9uYW1lLlVURjhT
dHJpbmcoKSwgc2lnbmF0dXJlKCkpOworICAgIHJldHVybiBtX21ldGhvZElEOwogfQogCiAKIEph
dmFBcnJheTo6SmF2YUFycmF5KGpvYmplY3QgYXJyYXksIGNvbnN0IGNoYXIqIHR5cGUsIFBhc3NS
ZWZQdHI8Um9vdE9iamVjdD4gcm9vdE9iamVjdCkKICAgICA6IEFycmF5KHJvb3RPYmplY3QpCiB7
Ci0gICAgX2FycmF5ID0gbmV3IEpPYmplY3RXcmFwcGVyKGFycmF5KTsKKyAgICBtX2FycmF5ID0g
bmV3IEpPYmplY3RXcmFwcGVyKGFycmF5KTsKICAgICAvLyBKYXZhIGFycmF5IGFyZSBmaXhlZCBs
ZW5ndGgsIHNvIHdlIGNhbiBjYWNoZSBsZW5ndGguCi0gICAgSk5JRW52ICplbnYgPSBnZXRKTklF
bnYoKTsKLSAgICBfbGVuZ3RoID0gZW52LT5HZXRBcnJheUxlbmd0aCgoamFycmF5KV9hcnJheS0+
bV9pbnN0YW5jZSk7Ci0gICAgX3R5cGUgPSBzdHJkdXAodHlwZSk7CisgICAgSk5JRW52KiBlbnYg
PSBnZXRKTklFbnYoKTsKKyAgICBtX2xlbmd0aCA9IGVudi0+R2V0QXJyYXlMZW5ndGgoc3RhdGlj
X2Nhc3Q8amFycmF5PihtX2FycmF5LT5tX2luc3RhbmNlKSk7CisgICAgbV90eXBlID0gc3RyZHVw
KHR5cGUpOwogICAgIG1fcm9vdE9iamVjdCA9IHJvb3RPYmplY3Q7CiB9CiAKLUphdmFBcnJheTo6
fkphdmFBcnJheSAoKSAKK0phdmFBcnJheTo6fkphdmFBcnJheSgpCiB7Ci0gICAgZnJlZSAoKHZv
aWQgKilfdHlwZSk7CisgICAgZnJlZShjb25zdF9jYXN0PGNoYXIqPihtX3R5cGUpKTsKIH0KIAot
Um9vdE9iamVjdCogSmF2YUFycmF5Ojpyb290T2JqZWN0KCkgY29uc3QgCi17IAorUm9vdE9iamVj
dCogSmF2YUFycmF5Ojpyb290T2JqZWN0KCkgY29uc3QKK3sKICAgICByZXR1cm4gbV9yb290T2Jq
ZWN0ICYmIG1fcm9vdE9iamVjdC0+aXNWYWxpZCgpID8gbV9yb290T2JqZWN0LmdldCgpIDogMDsK
IH0KIAogdm9pZCBKYXZhQXJyYXk6OnNldFZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25l
ZCBpbmRleCwgSlNWYWx1ZSBhVmFsdWUpIGNvbnN0CiB7Ci0gICAgSk5JRW52ICplbnYgPSBnZXRK
TklFbnYoKTsKLSAgICBjaGFyICpqYXZhQ2xhc3NOYW1lID0gMDsKLSAgICAKLSAgICBKTklUeXBl
IGFycmF5VHlwZSA9IEpOSVR5cGVGcm9tUHJpbWl0aXZlVHlwZShfdHlwZVsxXSk7Ci0gICAgaWYg
KF90eXBlWzFdID09ICdMJyl7CisgICAgSk5JRW52KiBlbnYgPSBnZXRKTklFbnYoKTsKKyAgICBj
aGFyKiBqYXZhQ2xhc3NOYW1lID0gMDsKKworICAgIEpOSVR5cGUgYXJyYXlUeXBlID0gSk5JVHlw
ZUZyb21QcmltaXRpdmVUeXBlKG1fdHlwZVsxXSk7CisgICAgaWYgKG1fdHlwZVsxXSA9PSAnTCcp
IHsKICAgICAgICAgLy8gVGhlIHR5cGUgb2YgdGhlIGFycmF5IHdpbGwgYmUgc29tZXRoaW5nIGxp
a2U6CiAgICAgICAgIC8vICJbTGphdmEubGFuZy5zdHJpbmc7Ii4gIFRoaXMgaXMgZ3VhcmFudGVl
ZCwgc28gbm8gbmVlZAogICAgICAgICAvLyBmb3IgZXh0cmEgc2FuaXR5IGNoZWNrcy4KLSAgICAg
ICAgamF2YUNsYXNzTmFtZSA9IHN0cmR1cCgmX3R5cGVbMl0pOworICAgICAgICBqYXZhQ2xhc3NO
YW1lID0gc3RyZHVwKCZtX3R5cGVbMl0pOwogICAgICAgICBqYXZhQ2xhc3NOYW1lW3N0cmNocihq
YXZhQ2xhc3NOYW1lLCAnOycpLWphdmFDbGFzc05hbWVdID0gMDsKICAgICB9Ci0gICAganZhbHVl
IGFKVmFsdWUgPSBjb252ZXJ0VmFsdWVUb0pWYWx1ZSAoZXhlYywgYVZhbHVlLCBhcnJheVR5cGUs
IGphdmFDbGFzc05hbWUpOwotICAgIAorICAgIGp2YWx1ZSBhSlZhbHVlID0gY29udmVydFZhbHVl
VG9KVmFsdWUoZXhlYywgYVZhbHVlLCBhcnJheVR5cGUsIGphdmFDbGFzc05hbWUpOworCiAgICAg
c3dpdGNoIChhcnJheVR5cGUpIHsKLSAgICAgICAgY2FzZSBvYmplY3RfdHlwZTogewotICAgICAg
ICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoKGpvYmplY3RBcnJheSlqYXZhQXJyYXko
KSwgaW5kZXgsIGFKVmFsdWUubCk7CisgICAgY2FzZSBvYmplY3RfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAgZW52LT5TZXRPYmplY3RBcnJheUVsZW1lbnQoc3RhdGljX2Nhc3Q8am9iamVj
dEFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCBhSlZhbHVlLmwpOwogICAgICAgICAgICAgYnJl
YWs7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAgICBjYXNlIGJvb2xlYW5fdHlwZTog
ewotICAgICAgICAgICAgZW52LT5TZXRCb29sZWFuQXJyYXlSZWdpb24oKGpib29sZWFuQXJyYXkp
amF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS56KTsKKworICAgIGNhc2UgYm9vbGVhbl90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYtPlNldEJvb2xlYW5BcnJheVJlZ2lvbihz
dGF0aWNfY2FzdDxqYm9vbGVhbkFycmF5PihqYXZhQXJyYXkoKSksIGluZGV4LCAxLCAmYUpWYWx1
ZS56KTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAg
ICAgY2FzZSBieXRlX3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0Qnl0ZUFycmF5UmVnaW9u
KChqYnl0ZUFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUuYik7CisKKyAgICBj
YXNlIGJ5dGVfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRCeXRlQXJyYXlS
ZWdpb24oc3RhdGljX2Nhc3Q8amJ5dGVBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFK
VmFsdWUuYik7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgY2hhcl90eXBlOiB7Ci0gICAgICAgICAgICBlbnYtPlNldENoYXJBcnJheVJl
Z2lvbigoamNoYXJBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZhbHVlLmMpOworCisg
ICAgY2FzZSBjaGFyX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGVudi0+U2V0Q2hhckFy
cmF5UmVnaW9uKHN0YXRpY19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKSwgaW5kZXgsIDEs
ICZhSlZhbHVlLmMpOwogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgICAg
IAotICAgICAgICBjYXNlIHNob3J0X3R5cGU6IHsKLSAgICAgICAgICAgIGVudi0+U2V0U2hvcnRB
cnJheVJlZ2lvbigoanNob3J0QXJyYXkpamF2YUFycmF5KCksIGluZGV4LCAxLCAmYUpWYWx1ZS5z
KTsKKworICAgIGNhc2Ugc2hvcnRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52LT5T
ZXRTaG9ydEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpzaG9ydEFycmF5PihqYXZhQXJyYXkoKSks
IGluZGV4LCAxLCAmYUpWYWx1ZS5zKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0g
ICAgICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAgZW52LT5T
ZXRJbnRBcnJheVJlZ2lvbigoamludEFycmF5KWphdmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFs
dWUuaSk7CisKKyAgICBjYXNlIGludF90eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBlbnYt
PlNldEludEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpLCBp
bmRleCwgMSwgJmFKVmFsdWUuaSk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAg
ICAgICAgICAgCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAgICBlbnYtPlNl
dExvbmdBcnJheVJlZ2lvbigoamxvbmdBcnJheSlqYXZhQXJyYXkoKSwgaW5kZXgsIDEsICZhSlZh
bHVlLmopOwotICAgICAgICB9Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBmbG9hdF90eXBl
OiB7Ci0gICAgICAgICAgICBlbnYtPlNldEZsb2F0QXJyYXlSZWdpb24oKGpmbG9hdEFycmF5KWph
dmFBcnJheSgpLCBpbmRleCwgMSwgJmFKVmFsdWUuZik7CisKKyAgICBjYXNlIGxvbmdfdHlwZToK
KyAgICAgICAgeworICAgICAgICAgICAgZW52LT5TZXRMb25nQXJyYXlSZWdpb24oc3RhdGljX2Nh
c3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuaik7CisgICAg
ICAgIH0KKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAgICAgZW52
LT5TZXRGbG9hdEFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZhQXJyYXko
KSksIGluZGV4LCAxLCAmYUpWYWx1ZS5mKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAg
ZW52LT5TZXREb3VibGVBcnJheVJlZ2lvbigoamRvdWJsZUFycmF5KWphdmFBcnJheSgpLCBpbmRl
eCwgMSwgJmFKVmFsdWUuZCk7CisKKyAgICBjYXNlIGRvdWJsZV90eXBlOgorICAgICAgICB7Cisg
ICAgICAgICAgICBlbnYtPlNldERvdWJsZUFycmF5UmVnaW9uKHN0YXRpY19jYXN0PGpkb3VibGVB
cnJheT4oamF2YUFycmF5KCkpLCBpbmRleCwgMSwgJmFKVmFsdWUuZCk7CiAgICAgICAgICAgICBi
cmVhazsKICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgorICAgIGRlZmF1bHQ6CiAgICAgICAg
IGJyZWFrOwogICAgIH0KLSAgICAKKwogICAgIGlmIChqYXZhQ2xhc3NOYW1lKQotICAgICAgICBm
cmVlICgodm9pZCAqKWphdmFDbGFzc05hbWUpOworICAgICAgICBmcmVlKGNvbnN0X2Nhc3Q8Y2hh
cio+KGphdmFDbGFzc05hbWUpKTsKIH0KIAogCiBKU1ZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChF
eGVjU3RhdGUqIGV4ZWMsIHVuc2lnbmVkIGluZGV4KSBjb25zdAogewotICAgIEpOSUVudiAqZW52
ID0gZ2V0Sk5JRW52KCk7Ci0gICAgSk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1p
dGl2ZVR5cGUoX3R5cGVbMV0pOworICAgIEpOSUVudiogZW52ID0gZ2V0Sk5JRW52KCk7CisgICAg
Sk5JVHlwZSBhcnJheVR5cGUgPSBKTklUeXBlRnJvbVByaW1pdGl2ZVR5cGUobV90eXBlWzFdKTsK
ICAgICBzd2l0Y2ggKGFycmF5VHlwZSkgewotICAgICAgICBjYXNlIG9iamVjdF90eXBlOiB7Ci0g
ICAgICAgICAgICBqb2JqZWN0QXJyYXkgb2JqZWN0QXJyYXkgPSAoam9iamVjdEFycmF5KWphdmFB
cnJheSgpOworICAgIGNhc2Ugb2JqZWN0X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpv
YmplY3RBcnJheSBvYmplY3RBcnJheSA9IHN0YXRpY19jYXN0PGpvYmplY3RBcnJheT4oamF2YUFy
cmF5KCkpOwogICAgICAgICAgICAgam9iamVjdCBhbk9iamVjdDsKICAgICAgICAgICAgIGFuT2Jq
ZWN0ID0gZW52LT5HZXRPYmplY3RBcnJheUVsZW1lbnQob2JqZWN0QXJyYXksIGluZGV4KTsKIAog
ICAgICAgICAgICAgLy8gTm8gb2JqZWN0PwotICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkgewor
ICAgICAgICAgICAgaWYgKCFhbk9iamVjdCkKICAgICAgICAgICAgICAgICByZXR1cm4ganNOdWxs
KCk7Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICAKKwogICAgICAgICAgICAgLy8gTmVzdGVk
IGFycmF5PwotICAgICAgICAgICAgaWYgKF90eXBlWzFdID09ICdbJykgewotICAgICAgICAgICAg
ICAgIHJldHVybiBKYXZhQXJyYXk6OmNvbnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCBhbk9iamVj
dCwgX3R5cGUrMSwgcm9vdE9iamVjdCgpKTsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChtX3R5cGVbMV0gPT0gJ1snKQorICAgICAgICAgICAgICAgIHJldHVybiBKYXZhQXJyYXk6OmNv
bnZlcnRKT2JqZWN0VG9BcnJheShleGVjLCBhbk9iamVjdCwgbV90eXBlKzEsIHJvb3RPYmplY3Qo
KSk7CiAgICAgICAgICAgICAvLyBvciBhcnJheSBvZiBvdGhlciBvYmplY3QgdHlwZT8KICAgICAg
ICAgICAgIHJldHVybiBKYXZhSW5zdGFuY2U6OmNyZWF0ZShhbk9iamVjdCwgcm9vdE9iamVjdCgp
KS0+Y3JlYXRlUnVudGltZU9iamVjdChleGVjKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0g
ICAgICAgIGNhc2UgYm9vbGVhbl90eXBlOiB7Ci0gICAgICAgICAgICBqYm9vbGVhbkFycmF5IGJv
b2xlYW5BcnJheSA9IChqYm9vbGVhbkFycmF5KWphdmFBcnJheSgpOworCisgICAgY2FzZSBib29s
ZWFuX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpib29sZWFuQXJyYXkgYm9vbGVhbkFy
cmF5ID0gc3RhdGljX2Nhc3Q8amJvb2xlYW5BcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAg
ICAgamJvb2xlYW4gYUJvb2xlYW47CiAgICAgICAgICAgICBlbnYtPkdldEJvb2xlYW5BcnJheVJl
Z2lvbihib29sZWFuQXJyYXksIGluZGV4LCAxLCAmYUJvb2xlYW4pOwogICAgICAgICAgICAgcmV0
dXJuIGpzQm9vbGVhbihhQm9vbGVhbik7CiAgICAgICAgIH0KLSAgICAgICAgICAgIAotICAgICAg
ICBjYXNlIGJ5dGVfdHlwZTogewotICAgICAgICAgICAgamJ5dGVBcnJheSBieXRlQXJyYXkgPSAo
amJ5dGVBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgYnl0ZV90eXBlOgorICAgICAgICB7
CisgICAgICAgICAgICBqYnl0ZUFycmF5IGJ5dGVBcnJheSA9IHN0YXRpY19jYXN0PGpieXRlQXJy
YXk+KGphdmFBcnJheSgpKTsKICAgICAgICAgICAgIGpieXRlIGFCeXRlOwogICAgICAgICAgICAg
ZW52LT5HZXRCeXRlQXJyYXlSZWdpb24oYnl0ZUFycmF5LCBpbmRleCwgMSwgJmFCeXRlKTsKICAg
ICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhQnl0ZSk7CiAgICAgICAgIH0KLSAgICAg
ICAgICAgIAotICAgICAgICBjYXNlIGNoYXJfdHlwZTogewotICAgICAgICAgICAgamNoYXJBcnJh
eSBjaGFyQXJyYXkgPSAoamNoYXJBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgY2hhcl90
eXBlOgorICAgICAgICB7CisgICAgICAgICAgICBqY2hhckFycmF5IGNoYXJBcnJheSA9IHN0YXRp
Y19jYXN0PGpjaGFyQXJyYXk+KGphdmFBcnJheSgpKTsKICAgICAgICAgICAgIGpjaGFyIGFDaGFy
OwogICAgICAgICAgICAgZW52LT5HZXRDaGFyQXJyYXlSZWdpb24oY2hhckFycmF5LCBpbmRleCwg
MSwgJmFDaGFyKTsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhQ2hhcik7CiAg
ICAgICAgICAgICBicmVhazsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2Ug
c2hvcnRfdHlwZTogewotICAgICAgICAgICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IChqc2hv
cnRBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2Ugc2hvcnRfdHlwZToKKyAgICAgICAgewor
ICAgICAgICAgICAganNob3J0QXJyYXkgc2hvcnRBcnJheSA9IHN0YXRpY19jYXN0PGpzaG9ydEFy
cmF5PihqYXZhQXJyYXkoKSk7CiAgICAgICAgICAgICBqc2hvcnQgYVNob3J0OwogICAgICAgICAg
ICAgZW52LT5HZXRTaG9ydEFycmF5UmVnaW9uKHNob3J0QXJyYXksIGluZGV4LCAxLCAmYVNob3J0
KTsKICAgICAgICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhU2hvcnQpOwogICAgICAgICB9
Ci0gICAgICAgICAgICAKLSAgICAgICAgY2FzZSBpbnRfdHlwZTogewotICAgICAgICAgICAgamlu
dEFycmF5IGludEFycmF5ID0gKGppbnRBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2UgaW50
X3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGppbnRBcnJheSBpbnRBcnJheSA9IHN0YXRp
Y19jYXN0PGppbnRBcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAgamludCBhbkludDsK
ICAgICAgICAgICAgIGVudi0+R2V0SW50QXJyYXlSZWdpb24oaW50QXJyYXksIGluZGV4LCAxLCAm
YW5JbnQpOwogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMsIGFuSW50KTsKICAgICAg
ICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgbG9uZ190eXBlOiB7Ci0gICAgICAgICAg
ICBqbG9uZ0FycmF5IGxvbmdBcnJheSA9IChqbG9uZ0FycmF5KWphdmFBcnJheSgpOworCisgICAg
Y2FzZSBsb25nX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpsb25nQXJyYXkgbG9uZ0Fy
cmF5ID0gc3RhdGljX2Nhc3Q8amxvbmdBcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAgICAg
amxvbmcgYUxvbmc7CiAgICAgICAgICAgICBlbnYtPkdldExvbmdBcnJheVJlZ2lvbihsb25nQXJy
YXksIGluZGV4LCAxLCAmYUxvbmcpOwogICAgICAgICAgICAgcmV0dXJuIGpzTnVtYmVyKGV4ZWMs
IGFMb25nKTsKICAgICAgICAgfQotICAgICAgICAgICAgCi0gICAgICAgIGNhc2UgZmxvYXRfdHlw
ZTogewotICAgICAgICAgICAgamZsb2F0QXJyYXkgZmxvYXRBcnJheSA9IChqZmxvYXRBcnJheSlq
YXZhQXJyYXkoKTsKKworICAgIGNhc2UgZmxvYXRfdHlwZToKKyAgICAgICAgeworICAgICAgICAg
ICAgamZsb2F0QXJyYXkgZmxvYXRBcnJheSA9IHN0YXRpY19jYXN0PGpmbG9hdEFycmF5PihqYXZh
QXJyYXkoKSk7CiAgICAgICAgICAgICBqZmxvYXQgYUZsb2F0OwogICAgICAgICAgICAgZW52LT5H
ZXRGbG9hdEFycmF5UmVnaW9uKGZsb2F0QXJyYXksIGluZGV4LCAxLCAmYUZsb2F0KTsKICAgICAg
ICAgICAgIHJldHVybiBqc051bWJlcihleGVjLCBhRmxvYXQpOwogICAgICAgICB9Ci0gICAgICAg
ICAgICAKLSAgICAgICAgY2FzZSBkb3VibGVfdHlwZTogewotICAgICAgICAgICAgamRvdWJsZUFy
cmF5IGRvdWJsZUFycmF5ID0gKGpkb3VibGVBcnJheSlqYXZhQXJyYXkoKTsKKworICAgIGNhc2Ug
ZG91YmxlX3R5cGU6CisgICAgICAgIHsKKyAgICAgICAgICAgIGpkb3VibGVBcnJheSBkb3VibGVB
cnJheSA9IHN0YXRpY19jYXN0PGpkb3VibGVBcnJheT4oamF2YUFycmF5KCkpOwogICAgICAgICAg
ICAgamRvdWJsZSBhRG91YmxlOwogICAgICAgICAgICAgZW52LT5HZXREb3VibGVBcnJheVJlZ2lv
bihkb3VibGVBcnJheSwgaW5kZXgsIDEsICZhRG91YmxlKTsKICAgICAgICAgICAgIHJldHVybiBq
c051bWJlcihleGVjLCBhRG91YmxlKTsKICAgICAgICAgfQotICAgICAgICBkZWZhdWx0OgorICAg
IGRlZmF1bHQ6CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICByZXR1cm4ganNVbmRlZmluZWQo
KTsKQEAgLTU0Nyw3ICs1NzEsNyBAQCBKU1ZhbHVlIEphdmFBcnJheTo6dmFsdWVBdChFeGVjU3Rh
dGUqIGV4CiAKIHVuc2lnbmVkIGludCBKYXZhQXJyYXk6OmdldExlbmd0aCgpIGNvbnN0CiB7Ci0g
ICAgcmV0dXJuIF9sZW5ndGg7CisgICAgcmV0dXJuIG1fbGVuZ3RoOwogfQogCiAjZW5kaWYgLy8g
RU5BQkxFKE1BQ19KQVZBX0JSSURHRSkKSW5kZXg6IFdlYkNvcmUvYnJpZGdlL2puaS9KTklCcmlk
Z2UuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBXZWJDb3JlL2JyaWRnZS9qbmkvSk5JQnJpZGdlLmgJKHJldmlz
aW9uIDUzNTU3KQorKysgV2ViQ29yZS9icmlkZ2Uvam5pL0pOSUJyaWRnZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0xLDUgKzEsNSBAQAogLyoKLSAqIENvcHlyaWdodCAoQykgMjAwMyBBcHBsZSBDb21w
dXRlciwgSW5jLiAgQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNywgMjAwOSwgMjAxMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCiAgKgogICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBm
b3Jtcywgd2l0aCBvciB3aXRob3V0CiAgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJv
dmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKQEAgLTIwLDcgKzIwLDcgQEAKICAq
IFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9O
IEFOWSBUSEVPUlkKICAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNU
IExJQUJJTElUWSwgT1IgVE9SVAogICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lT
RSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCi0gKiBPRiBUSElTIFNPRlRXQVJF
LCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLiAKKyAq
IE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0Yg
U1VDSCBEQU1BR0UuCiAgKi8KIAogI2lmbmRlZiBKTklCcmlkZ2VfaApAQCAtMzUsMTYgKzM1LDEz
IEBACiAjaW5jbHVkZSAiSmF2YVN0cmluZ0pTQy5oIgogI2VuZGlmCiAKLW5hbWVzcGFjZSBKU0MK
LXsKK25hbWVzcGFjZSBKU0MgewogCi1uYW1lc3BhY2UgQmluZGluZ3MKLXsKK25hbWVzcGFjZSBC
aW5kaW5ncyB7CiAKIHR5cGVkZWYgY29uc3QgY2hhciogUnVudGltZVR5cGU7CiAKLWNsYXNzIEph
dmFTdHJpbmcKLXsKK2NsYXNzIEphdmFTdHJpbmcgewogcHVibGljOgogICAgIEphdmFTdHJpbmco
KQogICAgIHsKQEAgLTcyLDk1ICs2OSw5MSBAQCBwcml2YXRlOgogICAgIEphdmFTdHJpbmdJbXBs
IG1faW1wbDsKIH07CiAKLWNsYXNzIEphdmFQYXJhbWV0ZXIKLXsKK2NsYXNzIEphdmFQYXJhbWV0
ZXIgewogcHVibGljOgotICAgIEphdmFQYXJhbWV0ZXIgKCkgOiBfSk5JVHlwZShpbnZhbGlkX3R5
cGUpIHt9OwotICAgIEphdmFQYXJhbWV0ZXIgKEpOSUVudiAqZW52LCBqc3RyaW5nIHR5cGUpOwor
ICAgIEphdmFQYXJhbWV0ZXIoKSA6IG1fSk5JVHlwZShpbnZhbGlkX3R5cGUpIHsgfTsKKyAgICBK
YXZhUGFyYW1ldGVyKEpOSUVudiogZW52LCBqc3RyaW5nIHR5cGUpOwogICAgIHZpcnR1YWwgfkph
dmFQYXJhbWV0ZXIoKSB7IH0KIAotICAgIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7IHJldHVy
biBfdHlwZS5VVEY4U3RyaW5nKCk7IH0KLSAgICBKTklUeXBlIGdldEpOSVR5cGUoKSBjb25zdCB7
IHJldHVybiBfSk5JVHlwZTsgfQotICAgIAorICAgIFJ1bnRpbWVUeXBlIHR5cGUoKSBjb25zdCB7
IHJldHVybiBtX3R5cGUuVVRGOFN0cmluZygpOyB9CisgICAgSk5JVHlwZSBnZXRKTklUeXBlKCkg
Y29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9CisKIHByaXZhdGU6Ci0gICAgSmF2YVN0cmluZyBf
dHlwZTsKLSAgICBKTklUeXBlIF9KTklUeXBlOworICAgIEphdmFTdHJpbmcgbV90eXBlOworICAg
IEpOSVR5cGUgbV9KTklUeXBlOwogfTsKIAogCi1jbGFzcyBKYXZhRmllbGQgOiBwdWJsaWMgRmll
bGQKLXsKK2NsYXNzIEphdmFGaWVsZCA6IHB1YmxpYyBGaWVsZCB7CiBwdWJsaWM6Ci0gICAgSmF2
YUZpZWxkIChKTklFbnYgKmVudiwgam9iamVjdCBhRmllbGQpOworICAgIEphdmFGaWVsZChKTklF
bnYqIGVudiwgam9iamVjdCBhRmllbGQpOworCisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJv
bUluc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywgY29uc3QgSW5zdGFuY2UqIGluc3RhbmNlKSBjb25z
dDsKKyAgICB2aXJ0dWFsIHZvaWQgc2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSW5zdGFuY2UqIGluc3RhbmNlLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7CisKKyAgICBj
b25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9CisgICAgdmly
dHVhbCBSdW50aW1lVHlwZSB0eXBlKCkgY29uc3QgeyByZXR1cm4gbV90eXBlLlVURjhTdHJpbmco
KTsgfQogCi0gICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlRnJvbUluc3RhbmNlKEV4ZWNTdGF0ZSAq
ZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3RhbmNlKSBjb25zdDsKLSAgICB2aXJ0dWFsIHZvaWQg
c2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3QgSW5zdGFuY2UgKmluc3Rh
bmNlLCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7Ci0gICAgCi0gICAgY29uc3QgSmF2YVN0cmluZyYg
bmFtZSgpIGNvbnN0IHsgcmV0dXJuIF9uYW1lOyB9Ci0gICAgdmlydHVhbCBSdW50aW1lVHlwZSB0
eXBlKCkgY29uc3QgeyByZXR1cm4gX3R5cGUuVVRGOFN0cmluZygpOyB9CisgICAgSk5JVHlwZSBn
ZXRKTklUeXBlKCkgY29uc3QgeyByZXR1cm4gbV9KTklUeXBlOyB9CiAKLSAgICBKTklUeXBlIGdl
dEpOSVR5cGUoKSBjb25zdCB7IHJldHVybiBfSk5JVHlwZTsgfQotICAgIAogcHJpdmF0ZToKLSAg
ICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSAqZXhlYywgY29uc3Qg
SmF2YUluc3RhbmNlICppbnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hhciAqbmFt
ZSwgY29uc3QgY2hhciAqc2lnKSBjb25zdDsKLSAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1ZUZyb21J
bnN0YW5jZShFeGVjU3RhdGUgKmV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSAqaW5zdGFuY2UsIGNv
bnN0IGNoYXIgKm5hbWUsIGNvbnN0IGNoYXIgKnNpZywgSk5JVHlwZSByZXR1cm5UeXBlKSBjb25z
dDsKKyAgICB2b2lkIGRpc3BhdGNoU2V0VmFsdWVUb0luc3RhbmNlKEV4ZWNTdGF0ZSogZXhlYywg
Y29uc3QgSmF2YUluc3RhbmNlKiBpbnN0YW5jZSwganZhbHVlIGphdmFWYWx1ZSwgY29uc3QgY2hh
ciogbmFtZSwgY29uc3QgY2hhciogc2lnKSBjb25zdDsKKyAgICBqdmFsdWUgZGlzcGF0Y2hWYWx1
ZUZyb21JbnN0YW5jZShFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IEphdmFJbnN0YW5jZSogaW5zdGFu
Y2UsIGNvbnN0IGNoYXIqIG5hbWUsIGNvbnN0IGNoYXIqIHNpZywgSk5JVHlwZSByZXR1cm5UeXBl
KSBjb25zdDsKIAotICAgIEphdmFTdHJpbmcgX25hbWU7Ci0gICAgSmF2YVN0cmluZyBfdHlwZTsK
LSAgICBKTklUeXBlIF9KTklUeXBlOwotICAgIFJlZlB0cjxKT2JqZWN0V3JhcHBlcj4gX2ZpZWxk
OworICAgIEphdmFTdHJpbmcgbV9uYW1lOworICAgIEphdmFTdHJpbmcgbV90eXBlOworICAgIEpO
SVR5cGUgbV9KTklUeXBlOworICAgIFJlZlB0cjxKT2JqZWN0V3JhcHBlcj4gbV9maWVsZDsKIH07
CiAKIAotY2xhc3MgSmF2YU1ldGhvZCA6IHB1YmxpYyBNZXRob2QKLXsKK2NsYXNzIEphdmFNZXRo
b2QgOiBwdWJsaWMgTWV0aG9kIHsKIHB1YmxpYzoKICAgICBKYXZhTWV0aG9kKEpOSUVudiogZW52
LCBqb2JqZWN0IGFNZXRob2QpOwogICAgIH5KYXZhTWV0aG9kKCk7CiAKLSAgICBjb25zdCBKYXZh
U3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gX25hbWU7IH0KLSAgICBSdW50aW1lVHlwZSBy
ZXR1cm5UeXBlKCkgY29uc3QgeyByZXR1cm4gX3JldHVyblR5cGUuVVRGOFN0cmluZygpOyB9Owot
ICAgIEphdmFQYXJhbWV0ZXIqIHBhcmFtZXRlckF0KGludCBpKSBjb25zdCB7IHJldHVybiAmX3Bh
cmFtZXRlcnNbaV07IH07Ci0gICAgaW50IG51bVBhcmFtZXRlcnMoKSBjb25zdCB7IHJldHVybiBf
bnVtUGFyYW1ldGVyczsgfTsKLSAgICAKLSAgICBjb25zdCBjaGFyICpzaWduYXR1cmUoKSBjb25z
dDsKKyAgICBjb25zdCBKYXZhU3RyaW5nJiBuYW1lKCkgY29uc3QgeyByZXR1cm4gbV9uYW1lOyB9
CisgICAgUnVudGltZVR5cGUgcmV0dXJuVHlwZSgpIGNvbnN0IHsgcmV0dXJuIG1fcmV0dXJuVHlw
ZS5VVEY4U3RyaW5nKCk7IH0KKyAgICBKYXZhUGFyYW1ldGVyKiBwYXJhbWV0ZXJBdChpbnQgaSkg
Y29uc3QgeyByZXR1cm4gJm1fcGFyYW1ldGVyc1tpXTsgfQorICAgIGludCBudW1QYXJhbWV0ZXJz
KCkgY29uc3QgeyByZXR1cm4gbV9udW1QYXJhbWV0ZXJzOyB9CisKKyAgICBjb25zdCBjaGFyKiBz
aWduYXR1cmUoKSBjb25zdDsKICAgICBKTklUeXBlIEpOSVJldHVyblR5cGUoKSBjb25zdDsKIAot
ICAgIGptZXRob2RJRCBtZXRob2RJRCAoam9iamVjdCBvYmopIGNvbnN0OwotICAgIAotICAgIGJv
b2wgaXNTdGF0aWMoKSBjb25zdCB7IHJldHVybiBfaXNTdGF0aWM7IH0KKyAgICBqbWV0aG9kSUQg
bWV0aG9kSUQoam9iamVjdCBvYmopIGNvbnN0OworCisgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0
IHsgcmV0dXJuIG1faXNTdGF0aWM7IH0KIAogcHJpdmF0ZToKLSAgICBKYXZhUGFyYW1ldGVyKiBf
cGFyYW1ldGVyczsKLSAgICBpbnQgX251bVBhcmFtZXRlcnM7Ci0gICAgSmF2YVN0cmluZyBfbmFt
ZTsKLSAgICBtdXRhYmxlIGNoYXIqIF9zaWduYXR1cmU7Ci0gICAgSmF2YVN0cmluZyBfcmV0dXJu
VHlwZTsKLSAgICBKTklUeXBlIF9KTklSZXR1cm5UeXBlOwotICAgIG11dGFibGUgam1ldGhvZElE
IF9tZXRob2RJRDsKLSAgICBib29sIF9pc1N0YXRpYzsKKyAgICBKYXZhUGFyYW1ldGVyKiBtX3Bh
cmFtZXRlcnM7CisgICAgaW50IG1fbnVtUGFyYW1ldGVyczsKKyAgICBKYXZhU3RyaW5nIG1fbmFt
ZTsKKyAgICBtdXRhYmxlIGNoYXIqIG1fc2lnbmF0dXJlOworICAgIEphdmFTdHJpbmcgbV9yZXR1
cm5UeXBlOworICAgIEpOSVR5cGUgbV9KTklSZXR1cm5UeXBlOworICAgIG11dGFibGUgam1ldGhv
ZElEIG1fbWV0aG9kSUQ7CisgICAgYm9vbCBtX2lzU3RhdGljOwogfTsKIAotY2xhc3MgSmF2YUFy
cmF5IDogcHVibGljIEFycmF5Ci17CitjbGFzcyBKYXZhQXJyYXkgOiBwdWJsaWMgQXJyYXkgewog
cHVibGljOgogICAgIEphdmFBcnJheShqb2JqZWN0IGFycmF5LCBjb25zdCBjaGFyKiB0eXBlLCBQ
YXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKICAgICB2aXJ0dWFsIH5KYXZhQXJyYXkoKTsKIAogICAg
IFJvb3RPYmplY3QqIHJvb3RPYmplY3QoKSBjb25zdDsKIAotICAgIHZpcnR1YWwgdm9pZCBzZXRW
YWx1ZUF0KEV4ZWNTdGF0ZSAqZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlIGFWYWx1
ZSkgY29uc3Q7Ci0gICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlQXQoRXhlY1N0YXRlICpleGVjLCB1
bnNpZ25lZCBpbnQgaW5kZXgpIGNvbnN0OworICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZUF0KEV4
ZWNTdGF0ZSogZXhlYywgdW5zaWduZWQgaW50IGluZGV4LCBKU1ZhbHVlIGFWYWx1ZSkgY29uc3Q7
CisgICAgdmlydHVhbCBKU1ZhbHVlIHZhbHVlQXQoRXhlY1N0YXRlKiBleGVjLCB1bnNpZ25lZCBp
bnQgaW5kZXgpIGNvbnN0OwogICAgIHZpcnR1YWwgdW5zaWduZWQgaW50IGdldExlbmd0aCgpIGNv
bnN0OwotICAgIAotICAgIGpvYmplY3QgamF2YUFycmF5KCkgY29uc3QgeyByZXR1cm4gX2FycmF5
LT5tX2luc3RhbmNlOyB9CiAKLSAgICBzdGF0aWMgSlNWYWx1ZSBjb252ZXJ0Sk9iamVjdFRvQXJy
YXkgKEV4ZWNTdGF0ZSogZXhlYywgam9iamVjdCBhbk9iamVjdCwgY29uc3QgY2hhciogdHlwZSwg
UGFzc1JlZlB0cjxSb290T2JqZWN0Pik7CisgICAgam9iamVjdCBqYXZhQXJyYXkoKSBjb25zdCB7
IHJldHVybiBtX2FycmF5LT5tX2luc3RhbmNlOyB9CisKKyAgICBzdGF0aWMgSlNWYWx1ZSBjb252
ZXJ0Sk9iamVjdFRvQXJyYXkoRXhlY1N0YXRlKiBleGVjLCBqb2JqZWN0IGFuT2JqZWN0LCBjb25z
dCBjaGFyKiB0eXBlLCBQYXNzUmVmUHRyPFJvb3RPYmplY3Q+KTsKIAogcHJpdmF0ZToKLSAgICBS
ZWZQdHI8Sk9iamVjdFdyYXBwZXI+IF9hcnJheTsKLSAgICB1bnNpZ25lZCBpbnQgX2xlbmd0aDsK
LSAgICBjb25zdCBjaGFyICpfdHlwZTsKKyAgICBSZWZQdHI8Sk9iamVjdFdyYXBwZXI+IG1fYXJy
YXk7CisgICAgdW5zaWduZWQgaW50IG1fbGVuZ3RoOworICAgIGNvbnN0IGNoYXIqIG1fdHlwZTsK
IH07CiAKIH0gLy8gbmFtZXNwYWNlIEJpbmRpbmdzCg==
</data>
<flag name="review"
          id="29407"
          type_id="1"
          status="+"
          setter="levin"
    />
    <flag name="commit-queue"
          id="29433"
          type_id="3"
          status="-"
          setter="levin"
    />
          </attachment>
      

    </bug>

</bugzilla>