<?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>6039</bug_id>
          
          <creation_ts>2005-12-11 00:50:50 -0800</creation_ts>
          <short_desc>Update KCanvasFiltersQuartz.mm to match style guidelines</short_desc>
          <delta_ts>2005-12-12 09:25:01 -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>SVG</component>
          <version>420+</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.4</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P4</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Eric Seidel (no email)">eric</reporter>
          <assigned_to name="Eric Seidel (no email)">eric</assigned_to>
          <cc>oliver</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>25793</commentid>
    <comment_count>0</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-11 00:50:50 -0800</bug_when>
    <thetext>Update KCanvasFiltersQuartz.mm to match style guidelines

This is a simple patch (99% spacing changes) to make the kcanvas filter code closer match our style 
guidelines.

I also made one small fix of a leak of CIContexts under error conditions (we were exiting early from a 
method which later performed cleanup).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25794</commentid>
    <comment_count>1</comment_count>
      <attachid>5025</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-11 00:52:36 -0800</bug_when>
    <thetext>Created attachment 5025
Code cleanup to match style guidelines (mostly spacing changes)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25795</commentid>
    <comment_count>2</comment_count>
      <attachid>5026</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-11 00:53:43 -0800</bug_when>
    <thetext>Created attachment 5026
A version of the patch ignoring whitespace</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25838</commentid>
    <comment_count>3</comment_count>
      <attachid>5025</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-12-11 17:09:30 -0800</bug_when>
    <thetext>Comment on attachment 5025
Code cleanup to match style guidelines (mostly spacing changes)

+static QString KCPreviousFilterOutputName = QString(&quot;__previousOutput__&quot;);

The above should just be:

static QString KCPreviousFilterOutputName = &quot;__previousOutput__&quot;;

r=me on this change

Reading this code I see lots to comment on that has nothing to do with what the
patch changes -- maybe as part of code review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>25856</commentid>
    <comment_count>4</comment_count>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2005-12-12 09:25:01 -0800</bug_when>
    <thetext>Oliver might hate me... hopefully this won&apos;t cause to many conflicts w/ his patches in progress.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5025</attachid>
            <date>2005-12-11 00:52:36 -0800</date>
            <delta_ts>2005-12-11 17:09:30 -0800</delta_ts>
            <desc>Code cleanup to match style guidelines (mostly spacing changes)</desc>
            <filename>filter_fixes.patch</filename>
            <type>text/plain</type>
            <size>42462</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">SW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9j
dnMvcm9vdC9XZWJDb3JlL2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwLHYKcmV0cmlldmluZyBy
ZXZpc2lvbiAxLjEwCmRpZmYgLXAgLXUgLXIxLjEwIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3Bw
Ci0tLSBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkyOCBOb3YgMjAwNSAyMzozMzo1OCAtMDAw
MAkxLjEwCisrKyBrY2FudmFzL0tDYW52YXNGaWx0ZXJzLmNwcAkxMSBEZWMgMjAwNSAwODo1MDoz
NiAtMDAwMApAQCAtMTAwLDE0ICsxMDAsMTIgQEAgdm9pZCBLQ2FudmFzRmlsdGVyRWZmZWN0Ojpz
ZXRSZXN1bHQoY29ucwogICAgIG1fcmVzdWx0ID0gcmVzdWx0OwogfQogCi0KIHN0YXRpYyBRVGV4
dFN0cmVhbSAmb3BlcmF0b3I8PChRVGV4dFN0cmVhbSAmdHMsIGNvbnN0IEtDYW52YXNQb2ludDNG
IHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKSA8PCAiIHo9
IiA8PCBwLnooKTsKICAgICByZXR1cm4gdHM7ICAKIH0KIAotCiBRVGV4dFN0cmVhbSAmS0NhbnZh
c0ZpbHRlckVmZmVjdDo6ZXh0ZXJuYWxSZXByZXNlbnRhdGlvbihRVGV4dFN0cmVhbSAmdHMpIGNv
bnN0CiB7CiAgICAgaWYgKCFpbigpLmlzRW1wdHkoKSkKQEAgLTE0NCw4ICsxNDIsNiBAQCBRVGV4
dFN0cmVhbSAmS0NEaXN0YW50TGlnaHRTb3VyY2U6OmV4dGVyCiAgICAgcmV0dXJuIHRzOyAgCiB9
CiAKLQotCiBzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9yPDwoUVRleHRTdHJlYW0gJnRzLCBR
UG9pbnRGIHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngoKSA8PCAiIHk9IiA8PCBwLnkoKTsK
SW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ClJDUyBmaWxlOiAvY3Zz
L3Jvb3QvV2ViQ29yZS9rY2FudmFzL0tDYW52YXNGaWx0ZXJzLmgsdgpyZXRyaWV2aW5nIHJldmlz
aW9uIDEuMTQKZGlmZiAtcCAtdSAtcjEuMTQga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCi0tLSBr
Y2FudmFzL0tDYW52YXNGaWx0ZXJzLmgJMTEgRGVjIDIwMDUgMDA6MDc6MjUgLTAwMDAJMS4xNAor
Kysga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCTExIERlYyAyMDA1IDA4OjUwOjM3IC0wMDAwCkBA
IC0yNDMsMzEgKzI0Myw4IEBAIHR5cGVkZWYgZW51bSB7CiAgICAgQ1RfR0FNTUEgPSA0CiB9IEtD
Q29tcG9uZW50VHJhbnNmZXJUeXBlOwogCi0vKgotIC8vIEtlZXAgdGhpcyBhcm91bmQgaW4gY2Fz
ZSB3ZSB3YW50IHRvIG1ha2UgdGhpcyBhIGNsYXNzOgotICAgICBLQ0NvbXBvbmVudFRyYW5zZmVy
VHlwZSB0eXBlKCkgY29uc3Q7Ci0gICAgdm9pZCBzZXRUeXBlKEtDQ29tcG9uZW50VHJhbnNmZXJU
eXBlIHR5cGUpIHsgbV90eXBlID0gdHlwZTsgfQotICAgIAotICAgIFEzVmFsdWVMaXN0PGZsb2F0
PiB0YWJsZVZhbHVlcygpIGNvbnN0OwotICAgIHZvaWQgc2V0VGFibGVWYWx1ZXMoUTNWYWx1ZUxp
c3Q8ZmxvYXQ+IHRhYmxlVmFsdWVzKTsKLSAgICAKLSAgICBmbG9hdCBzbG9wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fc2xvcGU7IH0KLSAgICB2b2lkIHNldFNsb3BlKGZsb2F0IHNsb3BlKSB7IG1fc2xv
cGUgPSBzbG9wZTsgfQotICAgIAotICAgIGZsb2F0IGludGVyY2VwdCgpIGNvbnN0IHsgcmV0dXJu
IG1faW50ZXJjZXB0OyB9Ci0gICAgdm9pZCBzZXRJbnRlcmNlcHQoZmxvYXQgaW50ZXJjZXB0KSB7
IG1faW50ZXJjZXB0ID0gaW50ZXJjZXB0OyB9Ci0gICAgCi0gICAgZmxvYXQgYW1wbGl0dWRlKCkg
Y29uc3QgeyByZXR1cm4gbV9hbXBsaXR1ZGU7IH0KLSAgICB2b2lkIHNldEFtcGxpdHVkZShmbG9h
dCBhbXBsaXR1ZGUpIHsgbV9hbXBsaXR1ZGUgPSBhbXBsaXR1ZGU7IH0KLSAgICAKLSAgICBmbG9h
dCBleHBvbmVudCgpIGNvbnN0IHsgcmV0dXJuIG1fZXhwb25lbnQ7IH0KLSAgICB2b2lkIHNldEV4
cG9uZW50KGZsb2F0IGV4cG9uZW50KSB7IG1fZXhwb25lbnQgPSBleHBvbmVudDsgfQotICAgIAot
ICAgIGZsb2F0IG9mZnNldCgpIGNvbnN0IHsgcmV0dXJuIG1fb2Zmc2V0OyB9Ci0gICAgdm9pZCBz
ZXRPZmZzZXQoZmxvYXQgb2Zmc2V0KSB7IG1fb2Zmc2V0ID0gb2Zmc2V0OyB9Ci0qLwotCi10eXBl
ZGVmIHN0cnVjdCB7CitzdHJ1Y3QgS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uCit7CiAgICAg
S0NDb21wb25lbnRUcmFuc2ZlclR5cGUgdHlwZTsKICAgICBRM1ZhbHVlTGlzdDxmbG9hdD4gdGFi
bGVWYWx1ZXM7CiAgICAgZmxvYXQgc2xvcGU7CkBAIC0yNzUsMjQgKzI1MiwyNCBAQCB0eXBlZGVm
IHN0cnVjdCB7CiAgICAgZmxvYXQgYW1wbGl0dWRlOwogICAgIGZsb2F0IGV4cG9uZW50OwogICAg
IGZsb2F0IG9mZnNldDsKLX0gS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uOworfTsKIAogY2xh
c3MgS0NhbnZhc0ZFQ29tcG9uZW50VHJhbnNmZXIgOiBwdWJsaWMgS0NhbnZhc0ZpbHRlckVmZmVj
dAogewotcHVibGljOgorcHVibGljOiAgICAKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24gcmVkRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX3JlZEZ1bmM7IH0KLSAgICB2b2lkIHNl
dFJlZEZ1bmN0aW9uKGNvbnN0IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiAmZnVuYykgeyBt
X3JlZEZ1bmMgPSBmdW5jOyB9CisgICAgdm9pZCBzZXRSZWRGdW5jdGlvbihjb25zdCBLQ0NvbXBv
bmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmMpIHsgbV9yZWRGdW5jID0gZnVuYzsgfQogICAgIAog
ICAgIEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBncmVlbkZ1bmN0aW9uKCkgY29uc3QgeyBy
ZXR1cm4gbV9ncmVlbkZ1bmM7IH0KLSAgICB2b2lkIHNldEdyZWVuRnVuY3Rpb24oY29uc3QgS0ND
b21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uICZmdW5jKSB7IG1fZ3JlZW5GdW5jID0gZnVuYzsgfQor
ICAgIHZvaWQgc2V0R3JlZW5GdW5jdGlvbihjb25zdCBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rp
b24mIGZ1bmMpIHsgbV9ncmVlbkZ1bmMgPSBmdW5jOyB9CiAgICAgCiAgICAgS0NDb21wb25lbnRU
cmFuc2ZlckZ1bmN0aW9uIGJsdWVGdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYmx1ZUZ1bmM7
IH0KLSAgICB2b2lkIHNldEJsdWVGdW5jdGlvbihjb25zdCBLQ0NvbXBvbmVudFRyYW5zZmVyRnVu
Y3Rpb24gJmZ1bmMpIHsgbV9ibHVlRnVuYyA9IGZ1bmM7IH0KKyAgICB2b2lkIHNldEJsdWVGdW5j
dGlvbihjb25zdCBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24mIGZ1bmMpIHsgbV9ibHVlRnVu
YyA9IGZ1bmM7IH0KICAgICAKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gYWxwaGFG
dW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fYWxwaGFGdW5jOyB9Ci0gICAgdm9pZCBzZXRBbHBo
YUZ1bmN0aW9uKGNvbnN0IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiAmZnVuYykgeyBtX2Fs
cGhhRnVuYyA9IGZ1bmM7IH0KKyAgICB2b2lkIHNldEFscGhhRnVuY3Rpb24oY29uc3QgS0NDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jKSB7IG1fYWxwaGFGdW5jID0gZnVuYzsgfQogCi0g
ICAgUVRleHRTdHJlYW0gJmV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0gJikgY29u
c3Q7CisgICAgUVRleHRTdHJlYW0mIGV4dGVybmFsUmVwcmVzZW50YXRpb24oUVRleHRTdHJlYW0m
KSBjb25zdDsKIAogcHJpdmF0ZToKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gbV9y
ZWRGdW5jOwpJbmRleDoga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHou
bW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNvcmUva2NhbnZhcy9kZXZpY2Uv
cXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFydHoubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTgK
ZGlmZiAtcCAtdSAtcjEuMTgga2NhbnZhcy9kZXZpY2UvcXVhcnR6L0tDYW52YXNGaWx0ZXJRdWFy
dHoubW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTEx
IERlYyAyMDA1IDAwOjA3OjI1IC0wMDAwCTEuMTgKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9L
Q2FudmFzRmlsdGVyUXVhcnR6Lm1tCTExIERlYyAyMDA1IDA4OjUwOjM4IC0wMDAwCkBAIC00NSw3
ICs0NSw3IEBACiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAotc3RhdGljIFFT
dHJpbmcgS0NQcmV2aW91c0ZpbHRlck91dHB1dE5hbWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4xKCJf
X3ByZXZpb3VzT3V0cHV0X18iKTsKK3N0YXRpYyBRU3RyaW5nIEtDUHJldmlvdXNGaWx0ZXJPdXRw
dXROYW1lID0gUVN0cmluZygiX19wcmV2aW91c091dHB1dF9fIik7CiAKIHN0YXRpYyBpbmxpbmUg
Q0lDb2xvciAqY2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCiB7CkBAIC01NSwxNSArNTUsMTYgQEAg
c3RhdGljIGlubGluZSBDSUNvbG9yICpjaUNvbG9yKGNvbnN0IFFDbwogICAgIHJldHVybiBjb2xv
ckNJOwogfQogCi1zdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3RvcihLQ2FudmFzUG9pbnQz
RiBwb2ludCkgeworc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3IoS0NhbnZhc1BvaW50
M0YgcG9pbnQpCit7CiAgICAgcmV0dXJuIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwb2ludC54KCkg
WTpwb2ludC55KCkgWjpwb2ludC56KCldOwogfQogCi1zdGF0aWMgaW5saW5lIENJVmVjdG9yICpj
aVZlY3RvcihRUG9pbnRGIHBvaW50KSB7CitzdGF0aWMgaW5saW5lIENJVmVjdG9yICpjaVZlY3Rv
cihRUG9pbnRGIHBvaW50KQorewogICAgIHJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6cG9p
bnQueCgpIFk6cG9pbnQueSgpXTsKIH0KIAotCiBLQ2FudmFzRmlsdGVyUXVhcnR6OjpLQ2FudmFz
RmlsdGVyUXVhcnR6KCkgOiBtX2ZpbHRlckNJQ29udGV4dCgwKSwgbV9maWx0ZXJDR0xheWVyKDAp
LCBtX2ltYWdlc0J5TmFtZSgwKQogewogICAgIG1faW1hZ2VzQnlOYW1lID0gW1tOU011dGFibGVE
aWN0aW9uYXJ5IGFsbG9jXSBpbml0XTsKQEAgLTk1LDcgKzk2LDYgQEAgdm9pZCBLQ2FudmFzRmls
dGVyUXVhcnR6OjpwcmVwYXJlRmlsdGVyKAogICAgICAgICBjb250ZXh0T3B0aW9ucyA9IFtOU0Rp
Y3Rpb25hcnkgZGljdGlvbmFyeVdpdGhPYmplY3RzQW5kS2V5czpbTlNOdW1iZXIgbnVtYmVyV2l0
aEJvb2w6WUVTXSwga0NJQ29udGV4dFVzZVNvZnR3YXJlUmVuZGVyZXIsIG5pbF07CiAgICAgCiAg
ICAgbV9maWx0ZXJDSUNvbnRleHQgPSBbW0NJQ29udGV4dCBjb250ZXh0V2l0aENHQ29udGV4dDpj
Z0NvbnRleHQgb3B0aW9uczpjb250ZXh0T3B0aW9uc10gcmV0YWluXTsKLSAgICAKICAgICBtX2Zp
bHRlckNHTGF5ZXIgPSBbbV9maWx0ZXJDSUNvbnRleHQgY3JlYXRlQ0dMYXllcldpdGhTaXplOkNH
UmVjdChiYm94KS5zaXplIGluZm86TlVMTF07CiAgICAgCiAgICAgQ0dDb250ZXh0ICpmaWx0ZXJD
R0NvbnRleHQgPSBDR0xheWVyR2V0Q29udGV4dChtX2ZpbHRlckNHTGF5ZXIpOwpAQCAtMTA4LDcg
KzEwOCw3IEBAIHZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6YXBwbHlGaWx0ZXIoS1IKIHsKICAg
ICBpZiAoIWJib3guaXNWYWxpZCgpIHx8ICFLUmVuZGVyaW5nRGV2aWNlUXVhcnR6OjpmaWx0ZXJz
RW5hYmxlZCgpIHx8IG1fZWZmZWN0cy5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKLSAgICAK
KwogICAgIC8vIHJlc3RvcmUgdGhlIHByZXZpb3VzIGNvbnRleHQsIGRlbGV0ZSB0aGUgZmlsdGVy
IGNvbnRleHQuCiAgICAgZGVsZXRlIChkZXZpY2UtPnBvcENvbnRleHQoKSk7CiAKQEAgLTExNywy
MyArMTE3LDE5IEBAIHZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6YXBwbHlGaWx0ZXIoS1IKICAg
ICBOU0FycmF5ICpmaWx0ZXJTdGFjayA9IGdldENJRmlsdGVyU3RhY2soaW5wdXRJbWFnZSk7CiAg
ICAgaWYgKFtmaWx0ZXJTdGFjayBjb3VudF0pIHsKICAgICAgICAgQ0lJbWFnZSAqb3V0cHV0SW1h
Z2UgPSBbW2ZpbHRlclN0YWNrIGxhc3RPYmplY3RdIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2Ui
XTsKLSAgICAgICAgaWYgKCFvdXRwdXRJbWFnZSkgeworICAgICAgICBpZiAob3V0cHV0SW1hZ2Up
IHsKKyAgICAgICAgICAgIENHUmVjdCBmaWx0ZXJSZWN0ID0gZmlsdGVyQkJveEZvckl0ZW1CQm94
KENHUmVjdChiYm94KSk7CisgICAgICAgICAgICBDR1JlY3QgdHJhbnNsYXRlZCA9IGZpbHRlclJl
Y3Q7CisgICAgICAgICAgICBDR1BvaW50IGJib3hPcmlnaW4gPSBDR1JlY3QoYmJveCkub3JpZ2lu
OworICAgICAgICAgICAgQ0dSZWN0IHNvdXJjZVJlY3QgPSBDR1JlY3RJbnRlcnNlY3Rpb24odHJh
bnNsYXRlZCxbb3V0cHV0SW1hZ2UgZXh0ZW50XSk7CisgICAgICAgICAgICAKKyAgICAgICAgICAg
IENHUG9pbnQgZGVzdE9yaWdpbiA9IHNvdXJjZVJlY3Qub3JpZ2luOworICAgICAgICAgICAgZGVz
dE9yaWdpbi54ICs9IGJib3hPcmlnaW4ueDsKKyAgICAgICAgICAgIGRlc3RPcmlnaW4ueSArPSBi
Ym94T3JpZ2luLnk7CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFttX2ZpbHRlckNJQ29udGV4
dCBkcmF3SW1hZ2U6b3V0cHV0SW1hZ2UgYXRQb2ludDpkZXN0T3JpZ2luIGZyb21SZWN0OnNvdXJj
ZVJlY3RdOworICAgICAgICB9IGVsc2UKICAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIGdl
dCBvdXB1dEltYWdlIGZyb20gZmlsdGVyIHN0YWNrLCBjYW4ndCBkcmF3LiIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBhY3R1YWxseSBkcmF3
IHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQKLSAgICAgICAgCi0gICAgICAgIENH
UmVjdCBmaWx0ZXJSZWN0ID0gZmlsdGVyQkJveEZvckl0ZW1CQm94KENHUmVjdChiYm94KSk7Ci0g
ICAgICAgIENHUmVjdCB0cmFuc2xhdGVkID0gZmlsdGVyUmVjdDsKLSAgICAgICAgQ0dQb2ludCBi
Ym94T3JpZ2luID0gQ0dSZWN0KGJib3gpLm9yaWdpbjsKLSAgICAgICAgQ0dSZWN0IHNvdXJjZVJl
Y3QgPSBDR1JlY3RJbnRlcnNlY3Rpb24odHJhbnNsYXRlZCxbb3V0cHV0SW1hZ2UgZXh0ZW50XSk7
Ci0gICAgICAgIAotICAgICAgICBDR1BvaW50IGRlc3RPcmlnaW4gPSBzb3VyY2VSZWN0Lm9yaWdp
bjsKLSAgICAgICAgZGVzdE9yaWdpbi54ICs9IGJib3hPcmlnaW4ueDsKLSAgICAgICAgZGVzdE9y
aWdpbi55ICs9IGJib3hPcmlnaW4ueTsKLSAgICAgICAgCi0gICAgICAgIFttX2ZpbHRlckNJQ29u
dGV4dCBkcmF3SW1hZ2U6b3V0cHV0SW1hZ2UgYXRQb2ludDpkZXN0T3JpZ2luIGZyb21SZWN0OnNv
dXJjZVJlY3RdOwogICAgIH0gZWxzZQogICAgICAgICBOU0xvZyhAIk5vIGZpbHRlciBzdGFjaywg
Y2FuJ3QgZHJhdyBmaWx0ZXIuIik7CiAgICAgCkBAIC0xNDMsOTggKzEzOSw5MCBAQCB2b2lkIEtD
YW52YXNGaWx0ZXJRdWFydHo6OmFwcGx5RmlsdGVyKEtSCiAKIENHUmVjdCBLQ2FudmFzRmlsdGVy
UXVhcnR6OjpmaWx0ZXJCQm94Rm9ySXRlbUJCb3goQ0dSZWN0IGl0ZW1CQm94KSBjb25zdAogewot
CS8vIEZJWE1FOiBoYWNrIGZvciBub3cKLQlDR1JlY3QgZmlsdGVyQkJveCA9IENHUmVjdChmaWx0
ZXJSZWN0KCkpOwotCWlmKGZpbHRlckJvdW5kaW5nQm94TW9kZSgpKQotICAgICAgICAgICAgZmls
dGVyQkJveCA9IENHUmVjdE1ha2UoKGZpbHRlckJCb3gub3JpZ2luLngvMTAwLmYgKiBpdGVtQkJv
eC5zaXplLndpZHRoKSwgCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmls
dGVyQkJveC5vcmlnaW4ueS8xMDAuZiAqIGl0ZW1CQm94LnNpemUuaGVpZ2h0KSwgCi0gICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmlsdGVyQkJveC5zaXplLndpZHRoLzEwMC5m
ICogaXRlbUJCb3guc2l6ZS53aWR0aCksIAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgKGZpbHRlckJCb3guc2l6ZS5oZWlnaHQvMTAwLmYgKiBpdGVtQkJveC5zaXplLmhlaWdo
dCkpOwotCXJldHVybiBmaWx0ZXJCQm94OwotfQotCi1OU0FycmF5ICpLQ2FudmFzRmlsdGVyUXVh
cnR6OjpnZXRDSUZpbHRlclN0YWNrKENJSW1hZ2UgKmlucHV0SW1hZ2UpIHsKLQkvLyBpdGVyYXRl
IG92ZXIgZWFjaCBvZiB0aGUgZmlsdGVyIGVsZW1lbnRzCi0JLy8gcGFzc2luZyBlYWNoIHRoZSBu
ZWNlc3NhcnkgaW5wdXRzLi4uCi0JCi0JTlNNdXRhYmxlQXJyYXkgKmZpbHRlckVmZmVjdHMgPSBb
TlNNdXRhYmxlQXJyYXkgYXJyYXldOwotCQotCVFWYWx1ZUxpc3RJdGVyYXRvcjxLQ2FudmFzRmls
dGVyRWZmZWN0ICo+IGl0ID0gbV9lZmZlY3RzLmJlZ2luKCk7Ci0JUVZhbHVlTGlzdEl0ZXJhdG9y
PEtDYW52YXNGaWx0ZXJFZmZlY3QgKj4gZW5kID0gbV9lZmZlY3RzLmVuZCgpOwotCQotCS8vIGNv
bnZlcnQgdG8gYW4gTlNBcnJheSBvZiBDSUZpbHRlcnMKLQlzZXRJbWFnZUZvck5hbWUoaW5wdXRJ
bWFnZSxRU3RyaW5nOjpmcm9tTGF0aW4xKCJTb3VyY2VHcmFwaGljIikpOyAvLyBpbnB1dAotCWZv
ciAoO2l0ICE9IGVuZDsgaXQrKykgewotCQlDSUZpbHRlciAqZmlsdGVyID0gKCppdCktPmdldENJ
RmlsdGVyKHRoaXMpOwotCQlpZiAoZmlsdGVyKSBbZmlsdGVyRWZmZWN0cyBhZGRPYmplY3Q6Zmls
dGVyXTsKLQkJZWxzZSBOU0xvZyhAIkZhaWxlZCB0byBidWlsZCBmaWx0ZXIgZm9yIGVsZW1lbnQ6
ICVwLiIsICgqaXQpKTsKLQl9Ci0JaWYgKFtmaWx0ZXJFZmZlY3RzIGNvdW50XSAhPSBtX2VmZmVj
dHMuY291bnQoKSkKLQkJTlNMb2coQCJXQVJOSU5HOiBCdWlsdCBzdGFjayBvZiBvbmx5ICVpIGZp
bHRlcnMgZnJvbSAlaSBmaWx0ZXIgZWxlbWVudHMiLCBbZmlsdGVyRWZmZWN0cyBjb3VudF0sIG1f
ZWZmZWN0cy5jb3VudCgpKTsKLQlbbV9pbWFnZXNCeU5hbWUgcmVtb3ZlQWxsT2JqZWN0c107IC8v
IGNsZWFuIHVwIGJlZm9yZSBuZXh0IHRpbWUuCi0JCi0JcmV0dXJuIGZpbHRlckVmZmVjdHM7Cisg
ICAgLy8gRklYTUU6IGhhY2sgZm9yIG5vdworICAgIENHUmVjdCBmaWx0ZXJCQm94ID0gQ0dSZWN0
KGZpbHRlclJlY3QoKSk7CisgICAgaWYoZmlsdGVyQm91bmRpbmdCb3hNb2RlKCkpCisgICAgICAg
IGZpbHRlckJCb3ggPSBDR1JlY3RNYWtlKChmaWx0ZXJCQm94Lm9yaWdpbi54LzEwMC5mICogaXRl
bUJCb3guc2l6ZS53aWR0aCksIAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAoZmls
dGVyQkJveC5vcmlnaW4ueS8xMDAuZiAqIGl0ZW1CQm94LnNpemUuaGVpZ2h0KSwgCisgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgIChmaWx0ZXJCQm94LnNpemUud2lkdGgvMTAwLmYgKiBp
dGVtQkJveC5zaXplLndpZHRoKSwgCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIChm
aWx0ZXJCQm94LnNpemUuaGVpZ2h0LzEwMC5mICogaXRlbUJCb3guc2l6ZS5oZWlnaHQpKTsKKyAg
ICByZXR1cm4gZmlsdGVyQkJveDsKK30KKworTlNBcnJheSAqS0NhbnZhc0ZpbHRlclF1YXJ0ejo6
Z2V0Q0lGaWx0ZXJTdGFjayhDSUltYWdlICppbnB1dEltYWdlKQoreworICAgIE5TTXV0YWJsZUFy
cmF5ICpmaWx0ZXJFZmZlY3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKKworICAgIFFWYWx1
ZUxpc3RJdGVyYXRvcjxLQ2FudmFzRmlsdGVyRWZmZWN0ICo+IGl0ID0gbV9lZmZlY3RzLmJlZ2lu
KCk7CisgICAgUVZhbHVlTGlzdEl0ZXJhdG9yPEtDYW52YXNGaWx0ZXJFZmZlY3QgKj4gZW5kID0g
bV9lZmZlY3RzLmVuZCgpOworCisgICAgc2V0SW1hZ2VGb3JOYW1lKGlucHV0SW1hZ2UsICJTb3Vy
Y2VHcmFwaGljIik7IC8vIGlucHV0CisgICAgZm9yICg7aXQgIT0gZW5kOyBpdCsrKSB7CisgICAg
ICAgIENJRmlsdGVyICpmaWx0ZXIgPSAoKml0KS0+Z2V0Q0lGaWx0ZXIodGhpcyk7CisgICAgICAg
IGlmIChmaWx0ZXIpCisgICAgICAgICAgICBbZmlsdGVyRWZmZWN0cyBhZGRPYmplY3Q6ZmlsdGVy
XTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYnVpbGQgZmls
dGVyIGZvciBlbGVtZW50OiAlcC4iLCAoKml0KSk7CisgICAgfQorICAgIGlmIChbZmlsdGVyRWZm
ZWN0cyBjb3VudF0gIT0gbV9lZmZlY3RzLmNvdW50KCkpCisgICAgTlNMb2coQCJXQVJOSU5HOiBC
dWlsdCBzdGFjayBvZiBvbmx5ICVpIGZpbHRlcnMgZnJvbSAlaSBmaWx0ZXIgZWxlbWVudHMiLCBb
ZmlsdGVyRWZmZWN0cyBjb3VudF0sIG1fZWZmZWN0cy5jb3VudCgpKTsKKyAgICBbbV9pbWFnZXNC
eU5hbWUgcmVtb3ZlQWxsT2JqZWN0c107IC8vIGNsZWFuIHVwIGJlZm9yZSBuZXh0IHRpbWUuCisK
KyAgICByZXR1cm4gZmlsdGVyRWZmZWN0czsKIH0KIAogQ0lJbWFnZSAqS0NhbnZhc0ZpbHRlclF1
YXJ0ejo6aW1hZ2VGb3JOYW1lKGNvbnN0IFFTdHJpbmcgJm5hbWUpIGNvbnN0CiB7Ci0JTlNTdHJp
bmcgKmltYWdlTmFtZSA9IG5hbWUuZ2V0TlNTdHJpbmcoKTsKLQlDSUltYWdlICpmb3VuZEltYWdl
ID0gW21faW1hZ2VzQnlOYW1lIHZhbHVlRm9yS2V5OmltYWdlTmFtZV07Ci0JaWYgKCFmb3VuZElt
YWdlICYmICFbaW1hZ2VOYW1lIGlzRXF1YWxUb1N0cmluZzpAIlNvdXJjZUFscGhhIl0pCi0JCU5T
TG9nKEAiRmFpbGVkIHRvIGZpbmQgaW1hZ2UgZm9yIG5hbWU6ICVAIiwgaW1hZ2VOYW1lKTsKLQly
ZXR1cm4gZm91bmRJbWFnZTsKKyAgICBOU1N0cmluZyAqaW1hZ2VOYW1lID0gbmFtZS5nZXROU1N0
cmluZygpOworICAgIENJSW1hZ2UgKmZvdW5kSW1hZ2UgPSBbbV9pbWFnZXNCeU5hbWUgdmFsdWVG
b3JLZXk6aW1hZ2VOYW1lXTsKKyAgICBpZiAoIWZvdW5kSW1hZ2UgJiYgIVtpbWFnZU5hbWUgaXNF
cXVhbFRvU3RyaW5nOkAiU291cmNlQWxwaGEiXSkKKyAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8g
ZmluZCBpbWFnZSBmb3IgbmFtZTogJUAiLCBpbWFnZU5hbWUpOworICAgIHJldHVybiBmb3VuZElt
YWdlOwogfQogCiB2b2lkIEtDYW52YXNGaWx0ZXJRdWFydHo6OnNldEltYWdlRm9yTmFtZShDSUlt
YWdlICppbWFnZSwgY29uc3QgUVN0cmluZyAmbmFtZSkKIHsKLQkvL05TTG9nKEAiU2V0dGluZyBp
bWFnZSBmb3IgbmFtZTogJUAiLCBuYW1lLmdldE5TU3RyaW5nKCkpOwotCVttX2ltYWdlc0J5TmFt
ZSBzZXRWYWx1ZTppbWFnZSBmb3JLZXk6bmFtZS5nZXROU1N0cmluZygpXTsKKyAgICBbbV9pbWFn
ZXNCeU5hbWUgc2V0VmFsdWU6aW1hZ2UgZm9yS2V5Om5hbWUuZ2V0TlNTdHJpbmcoKV07CiB9CiAK
LXZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6c2V0T3V0cHV0SW1hZ2UoY29uc3QgS0NhbnZhc0Zp
bHRlckVmZmVjdCAqZmlsdGVyRWZmZWN0LCBDSUltYWdlICpvdXRwdXQpIHsKLQlpZiAoIWZpbHRl
ckVmZmVjdC0+cmVzdWx0KCkuaXNFbXB0eSgpKSB7Ci0JCXNldEltYWdlRm9yTmFtZShvdXRwdXQs
IGZpbHRlckVmZmVjdC0+cmVzdWx0KCkpOwotCX0KLQlzZXRJbWFnZUZvck5hbWUob3V0cHV0LCBL
Q1ByZXZpb3VzRmlsdGVyT3V0cHV0TmFtZSk7Cit2b2lkIEtDYW52YXNGaWx0ZXJRdWFydHo6OnNl
dE91dHB1dEltYWdlKGNvbnN0IEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCwgQ0lJ
bWFnZSAqb3V0cHV0KQoreworICAgIGlmICghZmlsdGVyRWZmZWN0LT5yZXN1bHQoKS5pc0VtcHR5
KCkpCisgICAgICAgIHNldEltYWdlRm9yTmFtZShvdXRwdXQsIGZpbHRlckVmZmVjdC0+cmVzdWx0
KCkpOworICAgIHNldEltYWdlRm9yTmFtZShvdXRwdXQsIEtDUHJldmlvdXNGaWx0ZXJPdXRwdXRO
YW1lKTsKK30KKworc3RhdGljIGlubGluZSBDSUltYWdlICphbHBoYUltYWdlRm9ySW1hZ2UoQ0lJ
bWFnZSAqaW1hZ2UpCit7CisgICAgQ0lGaWx0ZXIgKm9ubHlBbHBoYSA9IFtDSUZpbHRlciBmaWx0
ZXJXaXRoTmFtZTpAIkNJQ29sb3JNYXRyaXgiXTsKKyAgICBmbG9hdCB6ZXJvWzRdID0gezAuZiwg
MC5mLCAwLmYsIDAuZn07CisgICAgW29ubHlBbHBoYSBzZXREZWZhdWx0c107CisgICAgW29ubHlB
bHBoYSBzZXRWYWx1ZTppbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CisgICAgW29ubHlBbHBo
YSBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFZhbHVlczp6ZXJvIGNvdW50OjRdIGZvcktl
eTpAImlucHV0UlZlY3RvciJdOworICAgIFtvbmx5QWxwaGEgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhWYWx1ZXM6emVybyBjb3VudDo0XSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAg
ICBbb25seUFscGhhIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOnplcm8gY291
bnQ6NF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07CisgICAgcmV0dXJuIFtvbmx5QWxwaGEgdmFs
dWVGb3JLZXk6QCJvdXRwdXRJbWFnZSJdOwogfQogCiBDSUltYWdlICpLQ2FudmFzRmlsdGVyUXVh
cnR6OjppbnB1dEltYWdlKGNvbnN0IEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCkK
LXsJCi0JLy8gbm90IHNwZWNpZmllZAotCWlmIChmaWx0ZXJFZmZlY3QtPmluKCkuaXNFbXB0eSgp
KSB7Ci0JCUNJSW1hZ2UgKmluSW1hZ2UgPSBpbWFnZUZvck5hbWUoS0NQcmV2aW91c0ZpbHRlck91
dHB1dE5hbWUpOwotCQlpZiAoIWluSW1hZ2UpIGluSW1hZ2UgPSBpbWFnZUZvck5hbWUoUVN0cmlu
Zzo6ZnJvbUxhdGluMSgiU291cmNlR3JhcGhpYyIpKTsKLQkJcmV0dXJuIGluSW1hZ2U7Ci0JfSBl
bHNlIGlmIChmaWx0ZXJFZmZlY3QtPmluKCkgPT0gUVN0cmluZzo6ZnJvbUxhdGluMSgiU291cmNl
QWxwaGEiKSkgewotCQlDSUltYWdlICpzb3VyY2VBbHBoYSA9IGltYWdlRm9yTmFtZShmaWx0ZXJF
ZmZlY3QtPmluKCkpOwotCQlpZiAoIXNvdXJjZUFscGhhKSB7Ci0JCQlDSUZpbHRlciAqb25seUFs
cGhhID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJdOwotCQkJZmxv
YXQgemVyb1s0XSA9IHswLmYsIDAuZiwgMC5mLCAwLmZ9OwotCQkJW29ubHlBbHBoYSBzZXREZWZh
dWx0c107Ci0JCQlbb25seUFscGhhIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVz
Onplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0JCQlbb25seUFscGhhIHNl
dFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5OkAi
aW5wdXRHVmVjdG9yIl07Ci0JCQlbb25seUFscGhhIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoVmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0JCQlDSUlt
YWdlICpzb3VyY2VHcmFwaGljID0gaW1hZ2VGb3JOYW1lKFFTdHJpbmc6OmZyb21MYXRpbjEoIlNv
dXJjZUdyYXBoaWMiKSk7Ci0gICAgICAgICAgICBpZiAoc291cmNlR3JhcGhpYykgewotICAgICAg
ICAgICAgICAgIFtvbmx5QWxwaGEgc2V0VmFsdWU6c291cmNlR3JhcGhpYyBmb3JLZXk6QCJpbnB1
dEltYWdlIl07Ci0gICAgICAgICAgICAgICAgc291cmNlQWxwaGEgPSBbb25seUFscGhhIHZhbHVl
Rm9yS2V5OkAib3V0cHV0SW1hZ2UiXTsKLSAgICAgICAgICAgICAgICBzZXRJbWFnZUZvck5hbWUo
c291cmNlQWxwaGEsUVN0cmluZzo6ZnJvbUxhdGluMSgiU291cmNlQWxwaGEiKSk7Ci0gICAgICAg
ICAgICB9Ci0JCX0KLQkJcmV0dXJuIHNvdXJjZUFscGhhOwotCX0KLQkKLQkvLyBmb3Igbm93IHdl
IGp1c3QgcmV0dXJuIHdoYXQncyBpbiB0aGUgZGljdAotCS8vIGV2ZW50dWFsbHkgd2Ugc2hvdWxk
IGJlIHNtYXJ0ZXIuCi0JLy8gYW5kIHJlYWxseSBidWlsZCB0aGUgYWxwaGEsIGV0Yy4KLQlyZXR1
cm4gaW1hZ2VGb3JOYW1lKGZpbHRlckVmZmVjdC0+aW4oKSk7Ci0JCi0JLy8gU291cmNlR3JhcGhp
YwotCS8vIFNvdXJjZUFscGhhCi0JLy8gQmFja2dyb3VuZEltYWdlCi0JLy8gQmFja2dyb3VuZEFs
cGhhCi0JLy8gRmlsbFBhaW50Ci0JLy8gU3Ryb2tlUGFpbnQKK3sKKyAgICBpZiAoZmlsdGVyRWZm
ZWN0LT5pbigpLmlzRW1wdHkoKSkgeworICAgICAgICBDSUltYWdlICppbkltYWdlID0gaW1hZ2VG
b3JOYW1lKEtDUHJldmlvdXNGaWx0ZXJPdXRwdXROYW1lKTsKKyAgICAgICAgaWYgKCFpbkltYWdl
KQorICAgICAgICAgICAgaW5JbWFnZSA9IGltYWdlRm9yTmFtZSgiU291cmNlR3JhcGhpYyIpOwor
ICAgICAgICByZXR1cm4gaW5JbWFnZTsKKyAgICB9IGVsc2UgaWYgKGZpbHRlckVmZmVjdC0+aW4o
KSA9PSAiU291cmNlQWxwaGEiKSB7CisgICAgICAgIENJSW1hZ2UgKnNvdXJjZUFscGhhID0gaW1h
Z2VGb3JOYW1lKGZpbHRlckVmZmVjdC0+aW4oKSk7CisgICAgICAgIGlmICghc291cmNlQWxwaGEp
IHsKKyAgICAgICAgICAgIENJSW1hZ2UgKnNvdXJjZUdyYXBoaWMgPSBpbWFnZUZvck5hbWUoIlNv
dXJjZUdyYXBoaWMiKTsKKyAgICAgICAgICAgIGlmICghc291cmNlR3JhcGhpYykKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgc2V0SW1hZ2VGb3JOYW1lKGFscGhhSW1h
Z2VGb3JJbWFnZShzb3VyY2VHcmFwaGljKSwgIlNvdXJjZUFscGhhIik7CisgICAgICAgIH0KKyAg
ICAgICAgcmV0dXJuIHNvdXJjZUFscGhhOworICAgIH0KKworICAgIHJldHVybiBpbWFnZUZvck5h
bWUoZmlsdGVyRWZmZWN0LT5pbigpKTsKIH0KIAogI3ByYWdtYSBtYXJrIC0KQEAgLTI0MywyNDIg
KzIzMSwxOTIgQEAgQ0lJbWFnZSAqS0NhbnZhc0ZpbHRlclF1YXJ0ejo6aW5wdXRJbWFnZQogI2Rl
ZmluZSBGRV9RVUFSVFpfU0VUVVBfSU5QVVQobmFtZSkgXAogICAgIENJSW1hZ2UgKmlucHV0SW1h
Z2UgPSBxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7IFwKICAgICBGRV9RVUFSVFpfQ0hF
Q0tfSU5QVVQoaW5wdXRJbWFnZSkgXAotCUtXUV9CTE9DS19FWENFUFRJT05TIFwKLQlDSUZpbHRl
ciAqZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOm5hbWVdOyBcCi0JW2ZpbHRlciBz
ZXREZWZhdWx0c107IFwKLQlbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5w
dXRJbWFnZSJdOworICAgIEtXUV9CTE9DS19FWENFUFRJT05TIFwKKyAgICBDSUZpbHRlciAqZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOm5hbWVdOyBcCisgICAgW2ZpbHRlciBzZXRE
ZWZhdWx0c107IFwKKyAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5w
dXRJbWFnZSJdOwogCiAjZGVmaW5lIEZFX1FVQVJUWl9DSEVDS19JTlBVVChpbnB1dCkgXAotCWlm
ICghaW5wdXQpIHsgXAotCQlOU0xvZyhAIkVSUk9SOiBDYW4ndCBhcHBseSBmaWx0ZXIgKCVwKSB3
L28gaW5wdXQgaW1hZ2UuIiwgdGhpcyk7IFwKLQkJcmV0dXJuIG5pbDsgXAotCX0KKyAgICBpZiAo
IWlucHV0KSB7IFwKKyAgICAgICAgTlNMb2coQCJFUlJPUjogQ2FuJ3QgYXBwbHkgZmlsdGVyICgl
cCkgdy9vIGlucHV0IGltYWdlLiIsIHRoaXMpOyBcCisgICAgICAgIHJldHVybiBuaWw7IFwKKyAg
ICB9CiAKICNkZWZpbmUgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk4gXAotCXF1YXJ0ekZpbHRlci0+
c2V0T3V0cHV0SW1hZ2UodGhpcywgW2ZpbHRlciB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl0p
OyBcCi0JcmV0dXJuIGZpbHRlcjsgXAotCUtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgXAotCXJldHVy
biBuaWw7CisgICAgcXVhcnR6RmlsdGVyLT5zZXRPdXRwdXRJbWFnZSh0aGlzLCBbZmlsdGVyIHZh
bHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXSk7IFwKKyAgICByZXR1cm4gZmlsdGVyOyBcCisgICAg
S1dRX1VOQkxPQ0tfRVhDRVBUSU9OUyBcCisgICAgcmV0dXJuIG5pbDsKIAogI2RlZmluZSBGRV9R
VUFSVFpfQ1JPUF9UT19SRUNUKHJlY3QpIFwKLXsgXAotCUNJRmlsdGVyICpjcm9wID0gW0NJRmls
dGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDcm9wIl07IFwKLQlbY3JvcCBzZXREZWZhdWx0c107IFwK
LQlbY3JvcCBzZXRWYWx1ZTpbZmlsdGVyIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXSBmb3JL
ZXk6QCJpbnB1dEltYWdlIl07IFwKLQlbY3JvcCBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6cmVjdC5vcmlnaW4ueCBZOnJlY3Qub3JpZ2luLnkgWjpyZWN0LnNpemUud2lkdGggVzpyZWN0
LnNpemUuaGVpZ2h0XSBmb3JLZXk6QCJpbnB1dFJlY3RhbmdsZSJdOyBcCi0JZmlsdGVyID0gY3Jv
cDsgXAotfQotCi0vL3N0YXRpYyBDR1JlY3QgZ2V0RmlsdGVyRWZmZWN0U3ViUmVnaW9uKEtDYW52
YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlciwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqZWZmZWN0
KQotLy97Ci0vLwkvLyBGSVhNRSEKLS8vCQotLy8JLyoKLS8vCXNwZWM6Ci0vLwl4LCB5LCB3aWR0
aCBhbmQgaGVpZ2h0IGRlZmF1bHQgdG8gdGhlIHVuaW9uIChpLmUuLCB0aWdodGVzdCBmaXR0aW5n
IGJvdW5kaW5nIGJveCkgb2YgdGhlIHN1YnJlZ2lvbnMgZGVmaW5lZCBmb3IgYWxsIHJlZmVyZW5j
ZWQgbm9kZXMuIElmIHRoZXJlIGFyZSBubyByZWZlcmVuY2VkIG5vZGVzIChlLmcuLCBmb3IgJ2Zl
SW1hZ2UnIG9yICdmZVR1cmJ1bGVuY2UnKSwgb3Igb25lIG9yIG1vcmUgb2YgdGhlIHJlZmVyZW5j
ZWQgbm9kZXMgaXMgYSBzdGFuZGFyZCBpbnB1dCAob25lIG9mIFNvdXJjZUdyYXBoaWMsIFNvdXJj
ZUFscGhhLCBCYWNrZ3JvdW5kSW1hZ2UsIEJhY2tncm91bmRBbHBoYSwgRmlsbFBhaW50IG9yIFN0
cm9rZVBhaW50KSwgb3IgZm9yICdmZVRpbGUnICh3aGljaCBpcyBzcGVjaWFsIGJlY2F1c2UgaXRz
IHByaW5jaXBhbCBmdW5jdGlvbiBpcyB0byByZXBsaWNhdGUgdGhlIHJlZmVyZW5jZWQgbm9kZSBp
biBYIGFuZCBZIGFuZCB0aGVyZWJ5IHByb2R1Y2UgYSB1c3VhbGx5IGxhcmdlciByZXN1bHQpLCB0
aGUgZGVmYXVsdCBzdWJyZWdpb24gaXMgMCUsMCUsMTAwJSwxMDAlLCB3aGVyZSBwZXJjZW50YWdl
cyBhcmUgcmVsYXRpdmUgdG8gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGZpbHRlciByZWdpb24uCi0v
LwkqLwotLy8JcmV0dXJuIENHUmVjdFplcm87Ci0vL30KKyAgICB7IFwKKyAgICAgICAgQ0lGaWx0
ZXIgKmNyb3AgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNyb3AiXTsgXAorICAgICAg
ICBbY3JvcCBzZXREZWZhdWx0c107IFwKKyAgICAgICAgW2Nyb3Agc2V0VmFsdWU6W2ZpbHRlciB2
YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXRJbWFnZSJdOyBcCisgICAg
ICAgIFtjcm9wIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDpyZWN0Lm9yaWdpbi54IFk6
cmVjdC5vcmlnaW4ueSBaOnJlY3Quc2l6ZS53aWR0aCBXOnJlY3Quc2l6ZS5oZWlnaHRdIGZvcktl
eTpAImlucHV0UmVjdGFuZ2xlIl07IFwKKyAgICAgICAgZmlsdGVyID0gY3JvcDsgXAorICAgIH0K
IAogQ0lGaWx0ZXIgKktDYW52YXNGRUJsZW5kUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmls
dGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0JS1dRX0JMT0NLX0VYQ0VQVElPTlMK
LQlDSUZpbHRlciAqZmlsdGVyID0gbmlsOwotCQotCXN3aXRjaChibGVuZE1vZGUoKSkgewotCWNh
c2UgQk1fTk9STUFMOgotCQkvLyBGSVhNRTogSSB0aGluayB0aGlzIGlzIGNvcnJlY3QuLi4uCi0J
CWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0
aW5nIl07Ci0JCWJyZWFrOwotCWNhc2UgQk1fTVVMVElQTFk6Ci0JCWZpbHRlciA9IFtDSUZpbHRl
ciBmaWx0ZXJXaXRoTmFtZTpAIkNJTXVsdGlwbHlCbGVuZE1vZGUiXTsKLQkJYnJlYWs7Ci0JY2Fz
ZSBCTV9TQ1JFRU46Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU2Ny
ZWVuQmxlbmRNb2RlIl07Ci0JCWJyZWFrOwotCWNhc2UgQk1fREFSS0VOOgotCQlmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSURhcmtlbkJsZW5kTW9kZSJdOwotCQlicmVhazsK
LQljYXNlIEJNX0xJR0hURU46Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpA
IkNJTGlnaHRlbkJsZW5kTW9kZSJdOwotCQlicmVhazsKLQlkZWZhdWx0OgotCQlOU0xvZyhAIkVS
Uk9SOiBVbmhhbmRsZWQgYmxlbmQgbW9kZTogJWkiLCBibGVuZE1vZGUoKSk7Ci0JCXJldHVybiBu
aWw7Ci0JfQotCQotCVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCUNJSW1hZ2UgKmlucHV0SW1hZ2Ug
PSBxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7CisgICAgS1dRX0JMT0NLX0VYQ0VQVElP
TlMKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworCisgICAgc3dpdGNoIChibGVuZE1vZGUo
KSkgeworICAgIGNhc2UgQk1fTk9STUFMOgorICAgICAgICAvLyBGSVhNRTogSSB0aGluayB0aGlz
IGlzIGNvcnJlY3QuLi4uCisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5nIl07CisgICAgICAgIGJyZWFrOworICAgIGNhc2Ug
Qk1fTVVMVElQTFk6CisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpA
IkNJTXVsdGlwbHlCbGVuZE1vZGUiXTsKKyAgICAgICAgYnJlYWs7CisgICAgY2FzZSBCTV9TQ1JF
RU46CisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU2NyZWVu
QmxlbmRNb2RlIl07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQk1fREFSS0VOOgorICAgICAg
ICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSURhcmtlbkJsZW5kTW9kZSJd
OworICAgICAgICBicmVhazsKKyAgICBjYXNlIEJNX0xJR0hURU46CisgICAgICAgIGZpbHRlciA9
IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJTGlnaHRlbkJsZW5kTW9kZSJdOworICAgICAg
ICBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgICBOU0xvZyhAIkVSUk9SOiBVbmhhbmRsZWQg
YmxlbmQgbW9kZTogJWkiLCBibGVuZE1vZGUoKSk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAg
fQorCisgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9
IHF1YXJ0ekZpbHRlci0+aW5wdXRJbWFnZSh0aGlzKTsKICAgICBGRV9RVUFSVFpfQ0hFQ0tfSU5Q
VVQoaW5wdXRJbWFnZSk7Ci0JW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktleTpAImlu
cHV0SW1hZ2UiXTsKLQlDSUltYWdlICpiYWNrZ3JvdW5kSW1hZ2UgPSBxdWFydHpGaWx0ZXItPmlt
YWdlRm9yTmFtZShpbjIoKSk7CisgICAgW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktl
eTpAImlucHV0SW1hZ2UiXTsKKyAgICBDSUltYWdlICpiYWNrZ3JvdW5kSW1hZ2UgPSBxdWFydHpG
aWx0ZXItPmltYWdlRm9yTmFtZShpbjIoKSk7CiAgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKGJh
Y2tncm91bmRJbWFnZSk7Ci0JW2ZpbHRlciBzZXRWYWx1ZTpiYWNrZ3JvdW5kSW1hZ2UgZm9yS2V5
OkAiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiXTsKLQkKLQlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsK
KyAgICBbZmlsdGVyIHNldFZhbHVlOmJhY2tncm91bmRJbWFnZSBmb3JLZXk6QCJpbnB1dEJhY2tn
cm91bmRJbWFnZSJdOworCisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9CiAKICNkZWZp
bmUgZGVnMnJhZChkKSAoKGQgKiAoMi4wICogTV9QSSkpLzM2MC4wKQogCiAjZGVmaW5lIENNVmFs
dWVzQ2hlY2soZXhwZWN0ZWQsIHR5cGUpIFwKLQkJaWYgKHZhbHVlcygpLmNvdW50KCkgIT0gZXhw
ZWN0ZWQpIHsgXAotCQkJTlNMb2coQCJFcnJvciwgaW5jb3JyZWN0IG51bWJlciBvZiB2YWx1ZXMg
aW4gQ29sb3JNYXRyaXggZm9yIHR5cGUgXCIlc1wiLCBleHBlY3RlZDogJWkgYWN0dWFsOiAlaSwg
aWdub3JpbmcgZmlsdGVyLiAgVmFsdWVzOiIsIHR5cGUsIGV4cGVjdGVkLCB2YWx1ZXMoKS5jb3Vu
dCgpKTsgXAotCQkJZm9yICh1bnNpZ25lZCBpbnQgeD0wOyB4IDwgdmFsdWVzKCkuY291bnQoKTsg
eCsrKSBmcHJpbnRmKHN0ZGVyciwgIiAlZiIsIHZhbHVlcygpW3hdKTsgXAotCQkJZnByaW50Zihz
dGRlcnIsICJcbiIpOyBcCi0JCQlyZXR1cm4gbmlsOyBcCi0JCX0KKyAgICBpZiAodmFsdWVzKCku
Y291bnQoKSAhPSBleHBlY3RlZCkgeyBcCisgICAgICAgIE5TTG9nKEAiRXJyb3IsIGluY29ycmVj
dCBudW1iZXIgb2YgdmFsdWVzIGluIENvbG9yTWF0cml4IGZvciB0eXBlIFwiJXNcIiwgZXhwZWN0
ZWQ6ICVpIGFjdHVhbDogJWksIGlnbm9yaW5nIGZpbHRlci4gIFZhbHVlczoiLCB0eXBlLCBleHBl
Y3RlZCwgdmFsdWVzKCkuY291bnQoKSk7IFwKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpbnQgeD0w
OyB4IDwgdmFsdWVzKCkuY291bnQoKTsgeCsrKSBmcHJpbnRmKHN0ZGVyciwgIiAlZiIsIHZhbHVl
cygpW3hdKTsgXAorICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIlxuIik7IFwKKyAgICAgICAgcmV0
dXJuIG5pbDsgXAorICAgIH0KIAogQ0lGaWx0ZXIgKktDYW52YXNGRUNvbG9yTWF0cml4UXVhcnR6
OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7
Ci0JQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKLQlLV1FfQkxPQ0tfRVhDRVBUSU9OUwotCXN3aXRj
aCh0eXBlKCkpIHsKLQljYXNlIENNVF9NQVRSSVg6Ci0JewotCQlDTVZhbHVlc0NoZWNrKDIwLCAi
bWF0cml4Iik7Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJQ29sb3JN
YXRyaXgiXTsKLQkJW2ZpbHRlciBzZXREZWZhdWx0c107Ci0JCVFWYWx1ZUxpc3Q8ZmxvYXQ+IHYg
PSB2YWx1ZXMoKTsKLQkJW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dlsw
XSBZOnZbMV0gWjp2WzJdIFc6dlszXV0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0JCVtmaWx0
ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZbNV0gWTp2WzZdIFo6dls3XSBXOnZb
OF1dIGZvcktleTpAImlucHV0R1ZlY3RvciJdOwotCQlbZmlsdGVyIHNldFZhbHVlOltDSVZlY3Rv
ciB2ZWN0b3JXaXRoWDp2WzEwXSBZOnZbMTFdIFo6dlsxMl0gVzp2WzEzXV0gZm9yS2V5OkAiaW5w
dXRCVmVjdG9yIl07Ci0JCVtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZb
MTVdIFk6dlsxNl0gWjp2WzE3XSBXOnZbMThdXSBmb3JLZXk6QCJpbnB1dEFWZWN0b3IiXTsKLQkJ
W2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dls0XSBZOnZbOV0gWjp2WzE0
XSBXOnZbMTldXSBmb3JLZXk6QCJpbnB1dEJpYXNWZWN0b3IiXTsKLQkJYnJlYWs7Ci0JfQotCWNh
c2UgQ01UX1NBVFVSQVRFOgotCXsKLQkJQ01WYWx1ZXNDaGVjaygxLCAic2F0dXJhdGUiKTsKLQkJ
ZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvckNvbnRyb2xzIl07Ci0J
CVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCQlmbG9hdCBzYXR1cmF0aW9uID0gdmFsdWVzKClbMF07
Ci0JCWlmICgoc2F0dXJhdGlvbiA8IDAuMCkgfHwgKHNhdHVyYXRpb24gPiAzLjApKQotCQkJTlNM
b2coQCJXQVJOSU5HOiBTYXR1cmF0aW9uIGFkanVzdG1lbnQ6ICVmIG91dHNpZGUgc3VwcG9ydGVk
IHJhbmdlLiIpOwotCQlbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6
c2F0dXJhdGlvbl0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07Ci0JCWJyZWFrOwotCX0KLQlj
YXNlIENNVF9IVUVfUk9UQVRFOgotCXsKLQkJQ01WYWx1ZXNDaGVjaygxLCAiaHVlUm90YXRlIik7
Ci0JCWZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJSHVlQWRqdXN0Il07Ci0J
CVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCQlmbG9hdCByYWRpYW5zID0gZGVnMnJhZCh2YWx1ZXMo
KVswXSk7Ci0JCVtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyYWRp
YW5zXSBmb3JLZXk6QCJpbnB1dEFuZ2xlIl07Ci0JCWJyZWFrOwotCX0KLQljYXNlIENNVF9MVU1J
TkFOQ0VfVE9fQUxQSEE6Ci0JewotCQlDTVZhbHVlc0NoZWNrKDAsICJsdW1pbmFuY2VUb0FscGhh
Iik7Ci0JCS8vIEZJWE1FOiBJIGJldCB0aGVyZSBpcyBhbiBlYXN5IGZpbHRlciB0byBkbyB0aGlz
LgotCQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9yTWF0cml4Il07
Ci0JCVtmaWx0ZXIgc2V0RGVmYXVsdHNdOwotCQlmbG9hdCB6ZXJvWzRdID0gezAuZiwgMC5mLCAw
LmYsIDAuZn07Ci0JCWZsb2F0IGFscGhhWzRdID0geyAwLjIxMjVmLCAwLjcxNTRmLCAwLjA3MjFm
LCAwLmZ9OwotCQlbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOnpl
cm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07Ci0JCVtmaWx0ZXIgc2V0VmFsdWU6
W0NJVmVjdG9yIHZlY3RvcldpdGhWYWx1ZXM6emVybyBjb3VudDo0XSBmb3JLZXk6QCJpbnB1dEdW
ZWN0b3IiXTsKLQkJW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFZhbHVlczp6
ZXJvIGNvdW50OjRdIGZvcktleTpAImlucHV0QlZlY3RvciJdOwotCQlbZmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOmFscGhhIGNvdW50OjRdIGZvcktleTpAImlucHV0
QVZlY3RvciJdOwotCQlbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVz
Onplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07Ci0JCWJyZWFrOwotCX0K
LQlkZWZhdWx0OgotCQlOU0xvZyhAIkVSUk9SOiBVbmhhbmRsZWQgQ29sb3JNYXRyaXggdHlwZTog
JWkiLCB0eXBlKCkpOwotCQlyZXR1cm4gbmlsOwotCX0KLQlDSUltYWdlICppbnB1dEltYWdlID0g
cXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpOworICAgIEtXUV9CTE9DS19FWENFUFRJT05T
CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKKyAgICBzd2l0Y2ggKHR5cGUoKSkgeworICAg
IGNhc2UgQ01UX01BVFJJWDoKKyAgICB7CisgICAgICAgIENNVmFsdWVzQ2hlY2soMjAsICJtYXRy
aXgiKTsKKyAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xv
ck1hdHJpeCJdOworICAgICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICAgICAgUVZhbHVl
TGlzdDxmbG9hdD4gdiA9IHZhbHVlcygpOworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZl
Y3RvciB2ZWN0b3JXaXRoWDp2WzBdIFk6dlsxXSBaOnZbMl0gVzp2WzNdXSBmb3JLZXk6QCJpbnB1
dFJWZWN0b3IiXTsKKyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0
aFg6dls1XSBZOnZbNl0gWjp2WzddIFc6dls4XV0gZm9yS2V5OkAiaW5wdXRHVmVjdG9yIl07Cisg
ICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOnZbMTBdIFk6dlsx
MV0gWjp2WzEyXSBXOnZbMTNdXSBmb3JLZXk6QCJpbnB1dEJWZWN0b3IiXTsKKyAgICAgICAgW2Zp
bHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6dlsxNV0gWTp2WzE2XSBaOnZbMTdd
IFc6dlsxOF1dIGZvcktleTpAImlucHV0QVZlY3RvciJdOworICAgICAgICBbZmlsdGVyIHNldFZh
bHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoWDp2WzRdIFk6dls5XSBaOnZbMTRdIFc6dlsxOV1dIGZv
cktleTpAImlucHV0Qmlhc1ZlY3RvciJdOworICAgICAgICBicmVhazsKKyAgICB9CisgICAgY2Fz
ZSBDTVRfU0FUVVJBVEU6CisgICAgeworICAgICAgICBDTVZhbHVlc0NoZWNrKDEsICJzYXR1cmF0
ZSIpOworICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbG9y
Q29udHJvbHMiXTsKKyAgICAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CisgICAgICAgIGZsb2F0
IHNhdHVyYXRpb24gPSB2YWx1ZXMoKVswXTsKKyAgICAgICAgaWYgKChzYXR1cmF0aW9uIDwgMC4w
KSB8fCAoc2F0dXJhdGlvbiA+IDMuMCkpCisgICAgICAgICAgICAgICAgTlNMb2coQCJXQVJOSU5H
OiBTYXR1cmF0aW9uIGFkanVzdG1lbnQ6ICVmIG91dHNpZGUgc3VwcG9ydGVkIHJhbmdlLiIpOwor
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6c2F0dXJh
dGlvbl0gZm9yS2V5OkAiaW5wdXRTYXR1cmF0aW9uIl07CisgICAgICAgIGJyZWFrOworICAgIH0K
KyAgICBjYXNlIENNVF9IVUVfUk9UQVRFOgorICAgIHsKKyAgICAgICAgQ01WYWx1ZXNDaGVjaygx
LCAiaHVlUm90YXRlIik7CisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIkNJSHVlQWRqdXN0Il07CisgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAg
ICBmbG9hdCByYWRpYW5zID0gZGVnMnJhZCh2YWx1ZXMoKVswXSk7CisgICAgICAgIFtmaWx0ZXIg
c2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDpyYWRpYW5zXSBmb3JLZXk6QCJpbnB1
dEFuZ2xlIl07CisgICAgICAgIGJyZWFrOworICAgIH0KKyAgICBjYXNlIENNVF9MVU1JTkFOQ0Vf
VE9fQUxQSEE6CisgICAgeworICAgICAgICBDTVZhbHVlc0NoZWNrKDAsICJsdW1pbmFuY2VUb0Fs
cGhhIik7CisgICAgICAgIC8vIEZJWE1FOiBJIGJldCB0aGVyZSBpcyBhbiBlYXN5IGZpbHRlciB0
byBkbyB0aGlzLgorICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJD
SUNvbG9yTWF0cml4Il07CisgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgICAgICBm
bG9hdCB6ZXJvWzRdID0gezAuZiwgMC5mLCAwLmYsIDAuZn07CisgICAgICAgIGZsb2F0IGFscGhh
WzRdID0geyAwLjIxMjVmLCAwLjcxNTRmLCAwLjA3MjFmLCAwLmZ9OworICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5
OkAiaW5wdXRSVmVjdG9yIl07CisgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZl
Y3RvcldpdGhWYWx1ZXM6emVybyBjb3VudDo0XSBmb3JLZXk6QCJpbnB1dEdWZWN0b3IiXTsKKyAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFZhbHVlczp6ZXJvIGNv
dW50OjRdIGZvcktleTpAImlucHV0QlZlY3RvciJdOworICAgICAgICBbZmlsdGVyIHNldFZhbHVl
OltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOmFscGhhIGNvdW50OjRdIGZvcktleTpAImlucHV0
QVZlY3RvciJdOworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
VmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRCaWFzVmVjdG9yIl07CisgICAgICAg
IGJyZWFrOworICAgIH0KKyAgICBkZWZhdWx0OgorICAgICAgICBOU0xvZyhAIkVSUk9SOiBVbmhh
bmRsZWQgQ29sb3JNYXRyaXggdHlwZTogJWkiLCB0eXBlKCkpOworICAgICAgICByZXR1cm4gbmls
OworICAgIH0KKyAgICBDSUltYWdlICppbnB1dEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbnB1dElt
YWdlKHRoaXMpOwogICAgIEZFX1FVQVJUWl9DSEVDS19JTlBVVChpbnB1dEltYWdlKTsKLQlbZmls
dGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5wdXRJbWFnZSJdOworICAgIFtmaWx0
ZXIgc2V0VmFsdWU6aW5wdXRJbWFnZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07CiAKLQlGRV9RVUFS
VFpfT1VUUFVUX1JFVFVSTjsKLX0KLQotLyoKLWZpbGxDSVZlY3RvckFuZEJpYXNGcm9tRnVuYyhj
b25zdCBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24gJmZ1bmMsIEtDQ2hhbm5lbFNlbGVjdG9y
VHlwZSBjb2xvciwgQ0lWZWN0b3IgKmJpYXMpIHsJCi0JZmxvYXRbNF0gdmVjdG9yID0gezAuZiwg
MC5mLCAwLmYsIDAuZn07Ci0JCi0Jc3dpdGNoKGZ1bmMudHlwZSgpKSB7Ci0JY2FzZSBDVF9JREVO
VElUWToKLQkJdmVjdG9yW2NvbG9yXSA9IDEuZjsKLQkJYnJlYWs7Ci0JY2FzZSBDVF9UQUJMRToK
LQkJTlNMb2coQCJXYXJuaW5nOiBDb21wb25lbnQgVHJhbnNmZXIgXCJ0YWJsZVwiIGZ1bmN0aW9u
IG5vdCB5ZXQgc3VwcG9ydGVkLiIpOwotCQl2ZWN0b3JbY29sb3JdID0gMS5mOwotCQlicmVhazsK
LQljYXNlIENUX0RJU0NSRVRFOgotCQlOU0xvZyhAIldhcm5pbmc6IENvbXBvbmVudCBUcmFuc2Zl
ciBcImRpc2NyZXRlXCIgZnVuY3Rpb24gbm90IHlldCBzdXBwb3J0ZWQuIik7Ci0JCXZlY3Rvcltj
b2xvcl0gPSAxLmY7Ci0JCWJyZWFrOwotCWNhc2UgQ1RfTElORUFSOgotCQl2ZWN0b3JbY29sb3Jd
ID0gZnVuYy5zbG9wZTsKLQkJLy8gRklYTUU6IGFkZCBpbnRlcmNlcHQgdG8gYmlhcy4KLQkJYnJl
YWs7Ci0JY2FzZSBDVF9HQU1NQToKLQkJdmVjdG9yW2NvbG9yXSA9IGZ1bmMuc2xvcGU7Ci0JfQot
CQotCXJldHVybiBbQ0lWZWN0b3IgdmVjdG9yV2l0aFZhbHVlczp2ZWN0b3IgY291bnQ6NF07Ci19
Ci0KLUNJRmlsdGVyICpLQ2FudmFzRkVDb21wb25lbnRUcmFuc2ZlclF1YXJ0ejo6Z2V0Q0lGaWx0
ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAotewotCUZFX1FVQVJU
Wl9TRVRVUF9JTlBVVChAIkNJQ29sb3JNYXRyaXgiKTsKLQkKLQkKLQlGRV9RVUFSVFpfT1VUUFVU
X1JFVFVSTjsKLQlyZXR1cm4gbmlsOworICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwogfQot
Ki8KLQogCiBDSUZpbHRlciAqS0NhbnZhc0ZFQ29tcG9zaXRlUXVhcnR6OjpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0JS1dRX0JMT0NLX0VY
Q0VQVElPTlMKLQlDSUZpbHRlciAqZmlsdGVyID0gbmlsOwotCXN3aXRjaChvcGVyYXRpb24oKSkg
ewotCWNhc2UgQ09fT1ZFUjoKLSAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJX
aXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5nIl07Ci0gICAgICAgICAgICBicmVhazsK
LQljYXNlIENPX0lOOgotICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhO
YW1lOkAiQ0lTb3VyY2VJbkNvbXBvc2l0aW5nIl07Ci0gICAgICAgICAgICBicmVhazsKLQljYXNl
IENPX09VVDoKLSAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpA
IkNJU291cmNlT3V0Q29tcG9zaXRpbmciXTsKLSAgICAgICAgICAgIGJyZWFrOwotCWNhc2UgQ09f
QVRPUDoKLSAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
U291cmNlQXRvcENvbXBvc2l0aW5nIl07Ci0gICAgICAgICAgICBicmVhazsKLQljYXNlIENPX1hP
UjoKLSAgICAgICAgICAgIC8vRklYTUU6IEknbSBub3Qgc3VyZSB0aGlzIGlzIHJpZ2h0Li4uCi0g
ICAgICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUV4Y2x1c2lv
bkJsZW5kTW9kZSJdOwotICAgICAgICAgICAgYnJlYWs7Ci0JY2FzZSBDT19BUklUSE1FVElDOgot
ICAgICAgICAgICAgW1dLQXJpdGhtZXRpY0ZpbHRlciBjbGFzc107Ci0gICAgICAgICAgICBmaWx0
ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiXTsKLSAg
ICAgICAgICAgIGJyZWFrOwotCX0KLQkKLQlbZmlsdGVyIHNldERlZmF1bHRzXTsKLQlDSUltYWdl
ICppbnB1dEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpOwotCUNJSW1hZ2Ug
KmJhY2tncm91bmRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW1hZ2VGb3JOYW1lKGluMigpKTsKLQlG
RV9RVUFSVFpfQ0hFQ0tfSU5QVVQoaW5wdXRJbWFnZSk7Ci0JRkVfUVVBUlRaX0NIRUNLX0lOUFVU
KGJhY2tncm91bmRJbWFnZSk7Ci0JW2ZpbHRlciBzZXRWYWx1ZTppbnB1dEltYWdlIGZvcktleTpA
ImlucHV0SW1hZ2UiXTsKLQlbZmlsdGVyIHNldFZhbHVlOmJhY2tncm91bmRJbWFnZSBmb3JLZXk6
QCJpbnB1dEJhY2tncm91bmRJbWFnZSJdOwotCS8vRklYTUU6IHRoaXMgc2VlbXMgdWdseQotCWlm
IChvcGVyYXRpb24oKSA9PSBDT19BUklUSE1FVElDKSB7Ci0gICAgICAgICAgICBbZmlsdGVyIHNl
dFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6azEoKV0gZm9yS2V5OkAiaW5wdXRLMSJd
OwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0
OmsyKCldIGZvcktleTpAImlucHV0SzIiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6
W05TTnVtYmVyIG51bWJlcldpdGhGbG9hdDprMygpXSBmb3JLZXk6QCJpbnB1dEszIl07Ci0gICAg
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6azQoKV0g
Zm9yS2V5OkAiaW5wdXRLNCJdOwotICAgICAgICB9Ci0JRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47
CisgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOwor
ICAgIHN3aXRjaCAob3BlcmF0aW9uKCkpIHsKKyAgICBjYXNlIENPX09WRVI6CisgICAgICAgIGZp
bHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlT3ZlckNvbXBvc2l0aW5n
Il07CisgICAgICAgIGJyZWFrOworICAgIGNhc2UgQ09fSU46CisgICAgICAgIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNlSW5Db21wb3NpdGluZyJdOworICAgICAg
ICBicmVhazsKKyAgICBjYXNlIENPX09VVDoKKyAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZp
bHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VPdXRDb21wb3NpdGluZyJdOworICAgICAgICBicmVhazsK
KyAgICBjYXNlIENPX0FUT1A6CisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRo
TmFtZTpAIkNJU291cmNlQXRvcENvbXBvc2l0aW5nIl07CisgICAgICAgIGJyZWFrOworICAgIGNh
c2UgQ09fWE9SOgorICAgICAgICAvL0ZJWE1FOiBJJ20gbm90IHN1cmUgdGhpcyBpcyByaWdodC4u
LgorICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUV4Y2x1c2lv
bkJsZW5kTW9kZSJdOworICAgICAgICBicmVhazsKKyAgICBjYXNlIENPX0FSSVRITUVUSUM6Cisg
ICAgICAgIFtXS0FyaXRobWV0aWNGaWx0ZXIgY2xhc3NdOworICAgICAgICBmaWx0ZXIgPSBbQ0lG
aWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0FyaXRobWV0aWNGaWx0ZXIiXTsKKyAgICAgICAgYnJl
YWs7CisgICAgfQorICAgIAorICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOworICAgIENJSW1hZ2Ug
KmlucHV0SW1hZ2UgPSBxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7CisgICAgQ0lJbWFn
ZSAqYmFja2dyb3VuZEltYWdlID0gcXVhcnR6RmlsdGVyLT5pbWFnZUZvck5hbWUoaW4yKCkpOwor
ICAgIEZFX1FVQVJUWl9DSEVDS19JTlBVVChpbnB1dEltYWdlKTsKKyAgICBGRV9RVUFSVFpfQ0hF
Q0tfSU5QVVQoYmFja2dyb3VuZEltYWdlKTsKKyAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1h
Z2UgZm9yS2V5OkAiaW5wdXRJbWFnZSJdOworICAgIFtmaWx0ZXIgc2V0VmFsdWU6YmFja2dyb3Vu
ZEltYWdlIGZvcktleTpAImlucHV0QmFja2dyb3VuZEltYWdlIl07CisgICAgLy9GSVhNRTogdGhp
cyBzZWVtcyB1Z2x5CisgICAgaWYgKG9wZXJhdGlvbigpID09IENPX0FSSVRITUVUSUMpIHsKKyAg
ICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmsxKCldIGZv
cktleTpAImlucHV0SzEiXTsKKyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmsyKCldIGZvcktleTpAImlucHV0SzIiXTsKKyAgICAgICAgW2ZpbHRlciBz
ZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmszKCldIGZvcktleTpAImlucHV0SzMi
XTsKKyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0Oms0
KCldIGZvcktleTpAImlucHV0SzQiXTsKKyAgICB9CisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRV
Uk47CiB9CiAKIHN0YXRpYyBpbmxpbmUgQ0lGaWx0ZXIgKmdldFBvaW50TGlnaHRWZWN0b3JzKENJ
RmlsdGVyICogbm9ybWFscywgQ0lWZWN0b3IgKiBsaWdodFBvc2l0aW9uLCBmbG9hdCBzdXJmYWNl
U2NhbGUpCiB7Ci0gICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKICAgICBLV1FfQkxPQ0tfRVhD
RVBUSU9OUwotICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLUG9pbnRM
aWdodCJdOworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJXS1BvaW50TGlnaHQiXTsKICAgICBpZiAoIWZpbHRlcikKICAgICAgICAgcmV0dXJuIG5pbDsK
ICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKQEAgLTQ4OSw3NiArNDI3LDc0IEBAIHN0YXRpYyBp
bmxpbmUgQ0lGaWx0ZXIgKmdldFBvaW50TGlnaHRWZWMKICAgICBLV1FfVU5CTE9DS19FWENFUFRJ
T05TIAogICAgIHJldHVybiBuaWw7CiB9CisKIHN0YXRpYyBDSUZpbHRlciAqZ2V0TGlnaHRWZWN0
b3JzKENJRmlsdGVyICogbm9ybWFscywgY29uc3QgS0NMaWdodFNvdXJjZSAqIGxpZ2h0LCBmbG9h
dCBzdXJmYWNlU2NhbGUpCiB7Ci0gICAgLy9GSVhNRTogdGhlcmUgaGFzIHRvIGJlIGEgYmV0dGVy
IHdheSBvZiBtYWtpbmcgc3VyZSB0aGVzZSBnZXQgaW5pdGlhbGlzZWQKICAgICBbV0tEaXN0YW50
TGlnaHRGaWx0ZXIgY2xhc3NdOwogICAgIFtXS1BvaW50TGlnaHRGaWx0ZXIgY2xhc3NdOwogICAg
IFtXS1Nwb3RMaWdodEZpbHRlciBjbGFzc107CiAgICAgCi0gICAgQ0lGaWx0ZXIgKmZpbHRlciA9
IG5pbDsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBu
aWw7CiAgICAgCiAgICAgc3dpdGNoIChsaWdodC0+dHlwZSgpKSB7Ci0gICAgICAgIGNhc2UgTFNf
RElTVEFOVDoKLSAgICAgICAgewotICAgICAgICAgICAgY29uc3QgS0NEaXN0YW50TGlnaHRTb3Vy
Y2UgKmRsaWdodCA9IHN0YXRpY19jYXN0PGNvbnN0IEtDRGlzdGFudExpZ2h0U291cmNlICo+KGxp
Z2h0KTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRl
cldpdGhOYW1lOkAiV0tEaXN0YW50TGlnaHQiXTsKLSAgICAgICAgICAgIGlmICghZmlsdGVyKQot
ICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgZmxvYXQgYXppbXV0aCA9IGRsaWdodC0+
YXppbXV0aCgpOwotICAgICAgICAgICAgZmxvYXQgZWxldmF0aW9uID0gZGxpZ2h0LT5lbGV2YXRp
b24oKTsKLSAgICAgICAgICAgIGF6aW11dGg9ZGVnMnJhZChhemltdXRoKTsKLSAgICAgICAgICAg
IGVsZXZhdGlvbj1kZWcycmFkKGVsZXZhdGlvbik7Ci0gICAgICAgICAgICBmbG9hdCBMeCA9IGNv
cyhhemltdXRoKSpjb3MoZWxldmF0aW9uKTsKLSAgICAgICAgICAgIGZsb2F0IEx5ID0gc2luKGF6
aW11dGgpKmNvcyhlbGV2YXRpb24pOwotICAgICAgICAgICAgZmxvYXQgTHogPSBzaW4oZWxldmF0
aW9uKTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbbm9ybWFs
cyB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl0gZm9yS2V5OkAiaW5wdXROb3JtYWxNYXAiXTsK
LSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJVmVjdG9yIHZlY3RvcldpdGhYOkx4IFk6
THkgWjpMel0gZm9yS2V5OkAiaW5wdXRMaWdodERpcmVjdGlvbiJdOwotICAgICAgICAgICAgcmV0
dXJuIGZpbHRlcjsKLSAgICAgICAgfQotICAgICAgICBjYXNlIExTX1BPSU5UOgotICAgICAgICB7
Ci0gICAgICAgICAgICBjb25zdCBLQ1BvaW50TGlnaHRTb3VyY2UgKnBsaWdodCA9IHN0YXRpY19j
YXN0PGNvbnN0IEtDUG9pbnRMaWdodFNvdXJjZSAqPihsaWdodCk7Ci0gICAgICAgICAgICByZXR1
cm4gZ2V0UG9pbnRMaWdodFZlY3RvcnMobm9ybWFscywgW0NJVmVjdG9yIHZlY3RvcldpdGhYOnBs
aWdodC0+cG9zaXRpb24oKS54KCkgWTpwbGlnaHQtPnBvc2l0aW9uKCkueSgpIFo6cGxpZ2h0LT5w
b3NpdGlvbigpLnooKV0sIHN1cmZhY2VTY2FsZSk7Ci0gICAgICAgIH0KLSAgICAgICAgY2FzZSBM
U19TUE9UOgotICAgICAgICB7Ci0gICAgICAgICAgICBjb25zdCBLQ1Nwb3RMaWdodFNvdXJjZSAq
c2xpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NTcG90TGlnaHRTb3VyY2UgKj4obGlnaHQpOwot
ICAgICAgICAgICAgZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tTcG90TGln
aHQiXTsKLSAgICAgICAgICAgIGlmICghZmlsdGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBu
aWw7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIENJRmlsdGVyICogcG9pbnRMaWdodEZpbHRl
ciA9IGdldFBvaW50TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpz
bGlnaHQtPnBvc2l0aW9uKCkueCgpIFk6c2xpZ2h0LT5wb3NpdGlvbigpLnkoKSBaOnNsaWdodC0+
cG9zaXRpb24oKS56KCldLCBzdXJmYWNlU2NhbGUpOwotICAgICAgICAgICAgaWYgKCFwb2ludExp
Z2h0RmlsdGVyKQotICAgICAgICAgICAgICAgIHJldHVybiBuaWw7Ci0gICAgICAgICAgICBbZmls
dGVyIHNldERlZmF1bHRzXTsKLSAgICAgICAgICAgIAotICAgICAgICAgICAgW2ZpbHRlciBzZXRW
YWx1ZTpbcG9pbnRMaWdodEZpbHRlciB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl0gZm9yS2V5
OkAiaW5wdXRMaWdodFZlY3RvcnMiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W0NJ
VmVjdG9yIHZlY3RvcldpdGhYOnNsaWdodC0+ZGlyZWN0aW9uKCkueCgpIFk6c2xpZ2h0LT5kaXJl
Y3Rpb24oKS55KCkgWjpzbGlnaHQtPmRpcmVjdGlvbigpLnooKV0gZm9yS2V5OkAiaW5wdXRMaWdo
dERpcmVjdGlvbiJdOwotICAgICAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OnNsaWdodC0+c3BlY3VsYXJFeHBvbmVudCgpXSBmb3JLZXk6QCJpbnB1dFNw
ZWN1bGFyRXhwb25lbnQiXTsKLSAgICAgICAgICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVy
IG51bWJlcldpdGhGbG9hdDpkZWcycmFkKHNsaWdodC0+bGltaXRpbmdDb25lQW5nbGUoKSldIGZv
cktleTpAImlucHV0TGltaXRpbmdDb25lQW5nbGUiXTsKLSAgICAgICAgICAgIHJldHVybiBmaWx0
ZXI7Ci0gICAgICAgIH0KKyAgICBjYXNlIExTX0RJU1RBTlQ6CisgICAgeworICAgICAgICBjb25z
dCBLQ0Rpc3RhbnRMaWdodFNvdXJjZSAqZGxpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29uc3QgS0NEaXN0
YW50TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICAKKyAgICAgICAgZmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tEaXN0YW50TGlnaHQiXTsKKyAgICAgICAgaWYgKCFm
aWx0ZXIpCisgICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICBbZmlsdGVyIHNldERlZmF1
bHRzXTsKKyAgICAgICAgCisgICAgICAgIGZsb2F0IGF6aW11dGggPSBkbGlnaHQtPmF6aW11dGgo
KTsKKyAgICAgICAgZmxvYXQgZWxldmF0aW9uID0gZGxpZ2h0LT5lbGV2YXRpb24oKTsKKyAgICAg
ICAgYXppbXV0aD1kZWcycmFkKGF6aW11dGgpOworICAgICAgICBlbGV2YXRpb249ZGVnMnJhZChl
bGV2YXRpb24pOworICAgICAgICBmbG9hdCBMeCA9IGNvcyhhemltdXRoKSpjb3MoZWxldmF0aW9u
KTsKKyAgICAgICAgZmxvYXQgTHkgPSBzaW4oYXppbXV0aCkqY29zKGVsZXZhdGlvbik7CisgICAg
ICAgIGZsb2F0IEx6ID0gc2luKGVsZXZhdGlvbik7CisgICAgICAgIAorICAgICAgICBbZmlsdGVy
IHNldFZhbHVlOltub3JtYWxzIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJp
bnB1dE5vcm1hbE1hcCJdOworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0
b3JXaXRoWDpMeCBZOkx5IFo6THpdIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsKKyAg
ICAgICAgcmV0dXJuIGZpbHRlcjsKKyAgICB9CisgICAgY2FzZSBMU19QT0lOVDoKKyAgICB7Cisg
ICAgICAgIGNvbnN0IEtDUG9pbnRMaWdodFNvdXJjZSAqcGxpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29u
c3QgS0NQb2ludExpZ2h0U291cmNlICo+KGxpZ2h0KTsKKyAgICAgICAgcmV0dXJuIGdldFBvaW50
TGlnaHRWZWN0b3JzKG5vcm1hbHMsIFtDSVZlY3RvciB2ZWN0b3JXaXRoWDpwbGlnaHQtPnBvc2l0
aW9uKCkueCgpIFk6cGxpZ2h0LT5wb3NpdGlvbigpLnkoKSBaOnBsaWdodC0+cG9zaXRpb24oKS56
KCldLCBzdXJmYWNlU2NhbGUpOworICAgIH0KKyAgICBjYXNlIExTX1NQT1Q6CisgICAgeworICAg
ICAgICBjb25zdCBLQ1Nwb3RMaWdodFNvdXJjZSAqc2xpZ2h0ID0gc3RhdGljX2Nhc3Q8Y29uc3Qg
S0NTcG90TGlnaHRTb3VyY2UgKj4obGlnaHQpOworICAgICAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIg
ZmlsdGVyV2l0aE5hbWU6QCJXS1Nwb3RMaWdodCJdOworICAgICAgICBpZiAoIWZpbHRlcikKKyAg
ICAgICAgICAgIHJldHVybiBuaWw7CisgICAgICAgIAorICAgICAgICBDSUZpbHRlciAqIHBvaW50
TGlnaHRGaWx0ZXIgPSBnZXRQb2ludExpZ2h0VmVjdG9ycyhub3JtYWxzLCBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6c2xpZ2h0LT5wb3NpdGlvbigpLngoKSBZOnNsaWdodC0+cG9zaXRpb24oKS55KCkg
WjpzbGlnaHQtPnBvc2l0aW9uKCkueigpXSwgc3VyZmFjZVNjYWxlKTsKKyAgICAgICAgaWYgKCFw
b2ludExpZ2h0RmlsdGVyKQorICAgICAgICAgICAgcmV0dXJuIG5pbDsKKyAgICAgICAgW2ZpbHRl
ciBzZXREZWZhdWx0c107CisgICAgICAgIAorICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltwb2lu
dExpZ2h0RmlsdGVyIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dExp
Z2h0VmVjdG9ycyJdOworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JX
aXRoWDpzbGlnaHQtPmRpcmVjdGlvbigpLngoKSBZOnNsaWdodC0+ZGlyZWN0aW9uKCkueSgpIFo6
c2xpZ2h0LT5kaXJlY3Rpb24oKS56KCldIGZvcktleTpAImlucHV0TGlnaHREaXJlY3Rpb24iXTsK
KyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OnNsaWdo
dC0+c3BlY3VsYXJFeHBvbmVudCgpXSBmb3JLZXk6QCJpbnB1dFNwZWN1bGFyRXhwb25lbnQiXTsK
KyAgICAgICAgW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmRlZzJy
YWQoc2xpZ2h0LT5saW1pdGluZ0NvbmVBbmdsZSgpKV0gZm9yS2V5OkAiaW5wdXRMaW1pdGluZ0Nv
bmVBbmdsZSJdOworICAgICAgICByZXR1cm4gZmlsdGVyOworICAgIH0KICAgICB9CiAgICAgS1dR
X1VOQkxPQ0tfRVhDRVBUSU9OUyAKICAgICByZXR1cm4gbmlsOwogfQogCi0KIHN0YXRpYyBDSUZp
bHRlciAqZ2V0Tm9ybWFsTWFwKENJSW1hZ2UgKmJ1bXBNYXAsIGZsb2F0IHNjYWxlKQogewogICAg
IFtXS05vcm1hbE1hcEZpbHRlciBjbGFzc107Ci0gICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsK
ICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwotICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJX
aXRoTmFtZTpAIldLTm9ybWFsTWFwIl07ICAgCisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IFtDSUZp
bHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLTm9ybWFsTWFwIl07ICAgCiAgICAgW2ZpbHRlciBzZXRE
ZWZhdWx0c107CiAgICAgCi0gICAgW2ZpbHRlciBzZXRWYWx1ZTpidW1wTWFwIGZvcktleTpAImlu
cHV0SW1hZ2UiXTsgICAgCisgICAgW2ZpbHRlciBzZXRWYWx1ZTpidW1wTWFwIGZvcktleTpAImlu
cHV0SW1hZ2UiXTsgIAogICAgIFtmaWx0ZXIgc2V0VmFsdWU6W05TTnVtYmVyIG51bWJlcldpdGhG
bG9hdDpzY2FsZV0gZm9yS2V5OkAiaW5wdXRTdXJmYWNlU2NhbGUiXTsKICAgICByZXR1cm4gZmls
dGVyOwogICAgIEtXUV9VTkJMT0NLX0VYQ0VQVElPTlMgCkBAIC01NjgsMTQgKzUwNCwxMyBAQCBz
dGF0aWMgQ0lGaWx0ZXIgKmdldE5vcm1hbE1hcChDSUltYWdlICpiCiBDSUZpbHRlciAqS0NhbnZh
c0ZFRGlmZnVzZUxpZ2h0aW5nUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6
ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7CiAgICAgY29uc3QgS0NMaWdodFNvdXJjZSAqbGlnaHQg
PSBsaWdodFNvdXJjZSgpOwotICAgIGlmKCFsaWdodCkKKyAgICBpZiAoIWxpZ2h0KQogICAgICAg
ICByZXR1cm4gbmlsOwogICAgIAogICAgIFtXS0RpZmZ1c2VMaWdodGluZ0ZpbHRlciBjbGFzc107
CiAgICAgCi0gICAgQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKICAgICBLV1FfQkxPQ0tfRVhDRVBU
SU9OUwotICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLRGlmZnVzZUxp
Z2h0aW5nIl07CisgICAgQ0lGaWx0ZXIgKmZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFt
ZTpAIldLRGlmZnVzZUxpZ2h0aW5nIl07CiAgICAgaWYgKCFmaWx0ZXIpCiAgICAgICAgIHJldHVy
biBuaWw7CiAgICAgCkBAIC02MDEsMjMgKzUzNiwyMiBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFRGlm
ZnVzZUxpZ2h0aW5nUXVhcnR6CiAKIENJRmlsdGVyICpLQ2FudmFzRkVGbG9vZFF1YXJ0ejo6Z2V0
Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAogewotCUNJ
RmlsdGVyICpmaWx0ZXIgPSBuaWw7Ci0JS1dRX0JMT0NLX0VYQ0VQVElPTlMKLQlmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNvbnN0YW50Q29sb3JHZW5lcmF0b3IiXTsKLQlb
ZmlsdGVyIHNldERlZmF1bHRzXTsKLQlDR0NvbG9yUmVmIGNvbG9yID0gY2dDb2xvcihmbG9vZENv
bG9yKCkpOwotCUNHQ29sb3JSZWYgd2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxw
aGEoY29sb3IsQ0dDb2xvckdldEFscGhhKGNvbG9yKSAqIGZsb29kT3BhY2l0eSgpKTsKLQlDSUNv
bG9yICppbnB1dENvbG9yID0gW0NJQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjp3aXRoQWxwaGFdOwot
CUNHQ29sb3JSZWxlYXNlKGNvbG9yKTsKLQlDR0NvbG9yUmVsZWFzZSh3aXRoQWxwaGEpOwotCVtm
aWx0ZXIgc2V0VmFsdWU6aW5wdXRDb2xvciBmb3JLZXk6QCJpbnB1dENvbG9yIl07Ci0JCi0gICAg
ICAgIENHUmVjdCBjcm9wUmVjdCA9IENHUmVjdE1ha2UoMCwwLDEwMDAsMTAwMCk7IC8vIEhBQ0sK
LSAgICAgICAgaWYgKHN1YlJlZ2lvbigpLmlzVmFsaWQoKSkKLSAgICAgICAgICAgIGNyb3BSZWN0
ID0gQ0dSZWN0KHN1YlJlZ2lvbigpKTsKLQlGRV9RVUFSVFpfQ1JPUF9UT19SRUNUKGNyb3BSZWN0
KTsKLQkKLQlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKKyAgICBLV1FfQkxPQ0tfRVhDRVBUSU9O
UworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJDSUNv
bnN0YW50Q29sb3JHZW5lcmF0b3IiXTsKKyAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKKyAgICBD
R0NvbG9yUmVmIGNvbG9yID0gY2dDb2xvcihmbG9vZENvbG9yKCkpOworICAgIENHQ29sb3JSZWYg
d2l0aEFscGhhID0gQ0dDb2xvckNyZWF0ZUNvcHlXaXRoQWxwaGEoY29sb3IsQ0dDb2xvckdldEFs
cGhhKGNvbG9yKSAqIGZsb29kT3BhY2l0eSgpKTsKKyAgICBDSUNvbG9yICppbnB1dENvbG9yID0g
W0NJQ29sb3IgY29sb3JXaXRoQ0dDb2xvcjp3aXRoQWxwaGFdOworICAgIENHQ29sb3JSZWxlYXNl
KGNvbG9yKTsKKyAgICBDR0NvbG9yUmVsZWFzZSh3aXRoQWxwaGEpOworICAgIFtmaWx0ZXIgc2V0
VmFsdWU6aW5wdXRDb2xvciBmb3JLZXk6QCJpbnB1dENvbG9yIl07CisgICAgCisgICAgQ0dSZWN0
IGNyb3BSZWN0ID0gQ0dSZWN0TWFrZSgwLDAsMTAwMCwxMDAwKTsgLy8gSEFDSworICAgIGlmIChz
dWJSZWdpb24oKS5pc1ZhbGlkKCkpCisgICAgICAgIGNyb3BSZWN0ID0gQ0dSZWN0KHN1YlJlZ2lv
bigpKTsKKyAgICBGRV9RVUFSVFpfQ1JPUF9UT19SRUNUKGNyb3BSZWN0KTsKKyAgICAKKyAgICBG
RV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0KIAogQ0lGaWx0ZXIgKktDYW52YXNGRUltYWdlUXVh
cnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0
CkBAIC02NTIsNTAgKzU4Niw0NiBAQCBDSUZpbHRlciAqS0NhbnZhc0ZFSW1hZ2VRdWFydHo6Omdl
dENJRmlsCiAKIENJRmlsdGVyICpLQ2FudmFzRkVHYXVzc2lhbkJsdXJRdWFydHo6OmdldENJRmls
dGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKLQlGRV9RVUFS
VFpfU0VUVVBfSU5QVVQoQCJDSUdhdXNzaWFuQmx1ciIpOwotCQotCWZsb2F0IGlucHV0UmFkaXVz
ID0gc3RkRGV2aWF0aW9uWCgpOwotCWlmIChpbnB1dFJhZGl1cyAhPSBzdGREZXZpYXRpb25ZKCkp
IHsKLQkJZmxvYXQgaW5wdXRBc3BlY3RSYXRpbyA9IHN0ZERldmlhdGlvblgoKS9zdGREZXZpYXRp
b25ZKCk7Ci0JCWlmICggKGlucHV0QXNwZWN0UmF0aW8gPCAuNSkgfHwgKGlucHV0QXNwZWN0UmF0
aW8gPiAyLjApICkKLQkJCU5TTG9nKEAiV0FSTklORzogaW5wdXRBc3BlY3RSYXRpbyBvdXRzaWRl
IHJhbmdlIHN1cHBvcnRlZCBieSBxdWFydHogZm9yIGFzeW1tZXRyaWMgR2F1c3NpYW4gYmx1cnMh
ICh4OiAlZiAgeTogJWYgcmF0aW86ICVmKSIsIHN0ZERldmlhdGlvblgoKSwgc3RkRGV2aWF0aW9u
WSgpLCBpbnB1dEFzcGVjdFJhdGlvKTsKLQkJW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVt
YmVyV2l0aEZsb2F0OmlucHV0QXNwZWN0UmF0aW9dIGZvcktleTpAImlucHV0QXNwZWN0UmF0aW8i
XTsKLQl9Ci0JW2ZpbHRlciBzZXRWYWx1ZTpbTlNOdW1iZXIgbnVtYmVyV2l0aEZsb2F0OmlucHV0
UmFkaXVzXSBmb3JLZXk6QCJpbnB1dFJhZGl1cyJdOwotCQotCUZFX1FVQVJUWl9PVVRQVVRfUkVU
VVJOOworICAgIEZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIkNJR2F1c3NpYW5QeXJhbWlkIik7CisK
KyAgICBmbG9hdCBpbnB1dFJhZGl1cyA9IHN0ZERldmlhdGlvblgoKTsKKyAgICBpZiAoaW5wdXRS
YWRpdXMgIT0gc3RkRGV2aWF0aW9uWSgpKSB7CisgICAgICAgIGZsb2F0IGlucHV0QXNwZWN0UmF0
aW8gPSBzdGREZXZpYXRpb25YKCkvc3RkRGV2aWF0aW9uWSgpOworICAgICAgICBpZiAoKGlucHV0
QXNwZWN0UmF0aW8gPCAuNSkgfHwgKGlucHV0QXNwZWN0UmF0aW8gPiAyLjApKQorICAgICAgICAg
ICAgTlNMb2coQCJXQVJOSU5HOiBpbnB1dEFzcGVjdFJhdGlvIG91dHNpZGUgcmFuZ2Ugc3VwcG9y
dGVkIGJ5IHF1YXJ0eiBmb3IgYXN5bW1ldHJpYyBHYXVzc2lhbiBibHVycyEgKHg6ICVmICB5OiAl
ZiByYXRpbzogJWYpIiwgc3RkRGV2aWF0aW9uWCgpLCBzdGREZXZpYXRpb25ZKCksIGlucHV0QXNw
ZWN0UmF0aW8pOworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRo
RmxvYXQ6aW5wdXRBc3BlY3RSYXRpb10gZm9yS2V5OkAiaW5wdXRBc3BlY3RSYXRpbyJdOworICAg
IH0KKyAgICBbZmlsdGVyIHNldFZhbHVlOltOU051bWJlciBudW1iZXJXaXRoRmxvYXQ6aW5wdXRS
YWRpdXNdIGZvcktleTpAImlucHV0UmFkaXVzIl07CisKKyAgICBGRV9RVUFSVFpfT1VUUFVUX1JF
VFVSTjsKIH0KIAogQ0lGaWx0ZXIgKktDYW52YXNGRU1lcmdlUXVhcnR6OjpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0JLy8gSnVzdCBzdGFj
ayBhIGJ1bmNoIG9mIGNvbXBvc2l0ZSBzb3VyY2Ugb3ZlciBmaWx0ZXJzIHRvZ2V0aGVyLi4uCi0J
S1dRX0JMT0NLX0VYQ0VQVElPTlMKLQlDSUZpbHRlciAqZmlsdGVyID0gbmlsOwotCVFTdHJpbmdM
aXN0IGlucHV0cyA9IG1lcmdlSW5wdXRzKCk7Ci0JUVZhbHVlTGlzdEl0ZXJhdG9yPFFTdHJpbmc+
IGl0ID0gaW5wdXRzLmJlZ2luKCk7Ci0JUVZhbHVlTGlzdEl0ZXJhdG9yPFFTdHJpbmc+IGVuZCA9
IGlucHV0cy5lbmQoKTsKLQkKLQlDSUltYWdlICpwcmV2aW91c091dHB1dCA9IHF1YXJ0ekZpbHRl
ci0+aW5wdXRJbWFnZSh0aGlzKTsKLQlmb3IgKDtpdCAhPSBlbmQ7IGl0KyspIHsKLQkJQ0lJbWFn
ZSAqaW5wdXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW1hZ2VGb3JOYW1lKCppdCk7CisgICAgS1dR
X0JMT0NLX0VYQ0VQVElPTlMKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gbmlsOworICAgIFFTdHJp
bmdMaXN0IGlucHV0cyA9IG1lcmdlSW5wdXRzKCk7CisgICAgQ0lJbWFnZSAqcHJldmlvdXNPdXRw
dXQgPSBxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyk7CisgICAgZm9yIChRVmFsdWVMaXN0
SXRlcmF0b3I8UVN0cmluZz4gaXQgPSBpbnB1dHMuYmVnaW4oKTtpdCAhPSBpbnB1dHMuZW5kKCk7
IGl0KyspIHsKKyAgICAgICAgQ0lJbWFnZSAqaW5wdXRJbWFnZSA9IHF1YXJ0ekZpbHRlci0+aW1h
Z2VGb3JOYW1lKCppdCk7CiAgICAgICAgIEZFX1FVQVJUWl9DSEVDS19JTlBVVChpbnB1dEltYWdl
KTsKICAgICAgICAgRkVfUVVBUlRaX0NIRUNLX0lOUFVUKHByZXZpb3VzT3V0cHV0KTsKLQkJZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VPdmVyQ29tcG9zaXRpbmci
XTsKLQkJW2ZpbHRlciBzZXREZWZhdWx0c107Ci0JCVtmaWx0ZXIgc2V0VmFsdWU6aW5wdXRJbWFn
ZSBmb3JLZXk6QCJpbnB1dEltYWdlIl07Ci0JCVtmaWx0ZXIgc2V0VmFsdWU6cHJldmlvdXNPdXRw
dXQgZm9yS2V5OkAiaW5wdXRCYWNrZ3JvdW5kSW1hZ2UiXTsKLQkJcHJldmlvdXNPdXRwdXQgPSBb
ZmlsdGVyIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXTsKLQl9Ci0JRkVfUVVBUlRaX09VVFBV
VF9SRVRVUk47CisgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJ
U291cmNlT3ZlckNvbXBvc2l0aW5nIl07CisgICAgICAgIFtmaWx0ZXIgc2V0RGVmYXVsdHNdOwor
ICAgICAgICBbZmlsdGVyIHNldFZhbHVlOmlucHV0SW1hZ2UgZm9yS2V5OkAiaW5wdXRJbWFnZSJd
OworICAgICAgICBbZmlsdGVyIHNldFZhbHVlOnByZXZpb3VzT3V0cHV0IGZvcktleTpAImlucHV0
QmFja2dyb3VuZEltYWdlIl07CisgICAgICAgIHByZXZpb3VzT3V0cHV0ID0gW2ZpbHRlciB2YWx1
ZUZvcktleTpAIm91dHB1dEltYWdlIl07CisgICAgfQorICAgIEZFX1FVQVJUWl9PVVRQVVRfUkVU
VVJOOwogfQogCiBDSUZpbHRlciAqS0NhbnZhc0ZFT2Zmc2V0UXVhcnR6OjpnZXRDSUZpbHRlcihL
Q2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0JRkVfUVVBUlRaX1NF
VFVQX0lOUFVUKEAiQ0lBZmZpbmVUcmFuc2Zvcm0iKTsKLQlOU0FmZmluZVRyYW5zZm9ybSAqb2Zm
c2V0VHJhbnNmb3JtID0gW05TQWZmaW5lVHJhbnNmb3JtIHRyYW5zZm9ybV07Ci0JW29mZnNldFRy
YW5zZm9ybSB0cmFuc2xhdGVYQnk6ZHgoKSB5Qnk6ZHkoKV07Ci0JW2ZpbHRlciBzZXRWYWx1ZTpv
ZmZzZXRUcmFuc2Zvcm0gIGZvcktleTpAImlucHV0VHJhbnNmb3JtIl07Ci0JRkVfUVVBUlRaX09V
VFBVVF9SRVRVUk47CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiQ0lBZmZpbmVUcmFuc2Zv
cm0iKTsKKyAgICBOU0FmZmluZVRyYW5zZm9ybSAqb2Zmc2V0VHJhbnNmb3JtID0gW05TQWZmaW5l
VHJhbnNmb3JtIHRyYW5zZm9ybV07CisgICAgW29mZnNldFRyYW5zZm9ybSB0cmFuc2xhdGVYQnk6
ZHgoKSB5Qnk6ZHkoKV07CisgICAgW2ZpbHRlciBzZXRWYWx1ZTpvZmZzZXRUcmFuc2Zvcm0gIGZv
cktleTpAImlucHV0VHJhbnNmb3JtIl07CisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9
CiAKIENJRmlsdGVyICpLQ2FudmFzRkVTcGVjdWxhckxpZ2h0aW5nUXVhcnR6OjpnZXRDSUZpbHRl
cihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CkBAIC03MDYsOSArNjM2
LDggQEAgQ0lGaWx0ZXIgKktDYW52YXNGRVNwZWN1bGFyTGlnaHRpbmdRdWFydAogICAgIAogICAg
IFtXS1NwZWN1bGFyTGlnaHRpbmdGaWx0ZXIgY2xhc3NdOyAgCiAgICAgCi0gICAgQ0lGaWx0ZXIg
KmZpbHRlciA9IG5pbDsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwotICAgIGZpbHRlciA9IFtD
SUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLU3BlY3VsYXJMaWdodGluZyJdOworICAgIENJRmls
dGVyICpmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS1NwZWN1bGFyTGlnaHRp
bmciXTsKICAgICBbZmlsdGVyIHNldERlZmF1bHRzXTsKICAgICBDSUZpbHRlciAqbm9ybWFscyA9
IGdldE5vcm1hbE1hcChxdWFydHpGaWx0ZXItPmlucHV0SW1hZ2UodGhpcyksIHN1cmZhY2VTY2Fs
ZSgpKTsKICAgICBpZiAoIW5vcm1hbHMpIApAQCAtNzI4LDExICs2NTcsOCBAQCBDSUZpbHRlciAq
S0NhbnZhc0ZFU3BlY3VsYXJMaWdodGluZ1F1YXJ0CiAgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRV
Uk47CiB9CiAKLQogQ0lGaWx0ZXIgKktDYW52YXNGRVRpbGVRdWFydHo6OmdldENJRmlsdGVyKEtD
YW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKLQlGRV9RVUFSVFpfU0VU
VVBfSU5QVVQoQCJDSUFmZmluZVRpbGUiKTsKLQkvLyBubyBpbnRlcmVzdGluZyBwYXJhbWV0ZXJz
Li4uCi0JRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CisgICAgRkVfUVVBUlRaX1NFVFVQX0lOUFVU
KEAiQ0lBZmZpbmVUaWxlIik7CisgICAgRkVfUVVBUlRaX09VVFBVVF9SRVRVUk47CiB9Ci0K
</data>
<flag name="review"
          id="982"
          type_id="1"
          status="+"
          setter="darin"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>5026</attachid>
            <date>2005-12-11 00:53:43 -0800</date>
            <delta_ts>2005-12-11 00:53:43 -0800</delta_ts>
            <desc>A version of the patch ignoring whitespace</desc>
            <filename>filter_space.patch</filename>
            <type>text/plain</type>
            <size>18236</size>
            <attacher name="Eric Seidel (no email)">eric</attacher>
            
              <data encoding="base64">PyBjb21iaW5lZC5wYXRjaAo/IGVycm9yX3JlcG9ydC5wYXRjaAo/IG15X2xvY2FsLnBhdGNoCj8g
dGVzdC5zaAo/IGtjYW52YXMvZGV2aWNlLy5EU19TdG9yZQo/IGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei8uRFNfU3RvcmUKPyBrY2FudmFzL2RldmljZS9xdWFydHovZmlsdGVycy8uRFNfU3RvcmUKSW5k
ZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMv
cm9vdC9XZWJDb3JlL2tjYW52YXMvS0NhbnZhc0ZpbHRlcnMuY3BwLHYKcmV0cmlldmluZyByZXZp
c2lvbiAxLjEwCmRpZmYgLXUgLWIgLXIxLjEwIEtDYW52YXNGaWx0ZXJzLmNwcAotLS0ga2NhbnZh
cy9LQ2FudmFzRmlsdGVycy5jcHAJMjggTm92IDIwMDUgMjM6MzM6NTggLTAwMDAJMS4xMAorKysg
a2NhbnZhcy9LQ2FudmFzRmlsdGVycy5jcHAJMTEgRGVjIDIwMDUgMDg6NTM6MzUgLTAwMDAKQEAg
LTEwMCwxNCArMTAwLDEyIEBACiAgICAgbV9yZXN1bHQgPSByZXN1bHQ7CiB9CiAKLQogc3RhdGlj
IFFUZXh0U3RyZWFtICZvcGVyYXRvcjw8KFFUZXh0U3RyZWFtICZ0cywgY29uc3QgS0NhbnZhc1Bv
aW50M0YgcCkKIHsKICAgICB0cyA8PCAieD0iIDw8IHAueCgpIDw8ICIgeT0iIDw8IHAueSgpIDw8
ICIgej0iIDw8IHAueigpOwogICAgIHJldHVybiB0czsgIAogfQogCi0KIFFUZXh0U3RyZWFtICZL
Q2FudmFzRmlsdGVyRWZmZWN0OjpleHRlcm5hbFJlcHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtICZ0
cykgY29uc3QKIHsKICAgICBpZiAoIWluKCkuaXNFbXB0eSgpKQpAQCAtMTQ0LDggKzE0Miw2IEBA
CiAgICAgcmV0dXJuIHRzOyAgCiB9CiAKLQotCiBzdGF0aWMgUVRleHRTdHJlYW0gJm9wZXJhdG9y
PDwoUVRleHRTdHJlYW0gJnRzLCBRUG9pbnRGIHApCiB7CiAgICAgdHMgPDwgIng9IiA8PCBwLngo
KSA8PCAiIHk9IiA8PCBwLnkoKTsKSW5kZXg6IGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rY2FudmFzL0tDYW52YXNGaWx0ZXJz
LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTQKZGlmZiAtdSAtYiAtcjEuMTQgS0NhbnZhc0Zp
bHRlcnMuaAotLS0ga2NhbnZhcy9LQ2FudmFzRmlsdGVycy5oCTExIERlYyAyMDA1IDAwOjA3OjI1
IC0wMDAwCTEuMTQKKysrIGtjYW52YXMvS0NhbnZhc0ZpbHRlcnMuaAkxMSBEZWMgMjAwNSAwODo1
MzozNSAtMDAwMApAQCAtMjQzLDMxICsyNDMsOCBAQAogICAgIENUX0dBTU1BID0gNAogfSBLQ0Nv
bXBvbmVudFRyYW5zZmVyVHlwZTsKIAotLyoKLSAvLyBLZWVwIHRoaXMgYXJvdW5kIGluIGNhc2Ug
d2Ugd2FudCB0byBtYWtlIHRoaXMgYSBjbGFzczoKLSAgICAgS0NDb21wb25lbnRUcmFuc2ZlclR5
cGUgdHlwZSgpIGNvbnN0OwotICAgIHZvaWQgc2V0VHlwZShLQ0NvbXBvbmVudFRyYW5zZmVyVHlw
ZSB0eXBlKSB7IG1fdHlwZSA9IHR5cGU7IH0KLSAgICAKLSAgICBRM1ZhbHVlTGlzdDxmbG9hdD4g
dGFibGVWYWx1ZXMoKSBjb25zdDsKLSAgICB2b2lkIHNldFRhYmxlVmFsdWVzKFEzVmFsdWVMaXN0
PGZsb2F0PiB0YWJsZVZhbHVlcyk7Ci0gICAgCi0gICAgZmxvYXQgc2xvcGUoKSBjb25zdCB7IHJl
dHVybiBtX3Nsb3BlOyB9Ci0gICAgdm9pZCBzZXRTbG9wZShmbG9hdCBzbG9wZSkgeyBtX3Nsb3Bl
ID0gc2xvcGU7IH0KLSAgICAKLSAgICBmbG9hdCBpbnRlcmNlcHQoKSBjb25zdCB7IHJldHVybiBt
X2ludGVyY2VwdDsgfQotICAgIHZvaWQgc2V0SW50ZXJjZXB0KGZsb2F0IGludGVyY2VwdCkgeyBt
X2ludGVyY2VwdCA9IGludGVyY2VwdDsgfQotICAgIAotICAgIGZsb2F0IGFtcGxpdHVkZSgpIGNv
bnN0IHsgcmV0dXJuIG1fYW1wbGl0dWRlOyB9Ci0gICAgdm9pZCBzZXRBbXBsaXR1ZGUoZmxvYXQg
YW1wbGl0dWRlKSB7IG1fYW1wbGl0dWRlID0gYW1wbGl0dWRlOyB9Ci0gICAgCi0gICAgZmxvYXQg
ZXhwb25lbnQoKSBjb25zdCB7IHJldHVybiBtX2V4cG9uZW50OyB9Ci0gICAgdm9pZCBzZXRFeHBv
bmVudChmbG9hdCBleHBvbmVudCkgeyBtX2V4cG9uZW50ID0gZXhwb25lbnQ7IH0KLSAgICAKLSAg
ICBmbG9hdCBvZmZzZXQoKSBjb25zdCB7IHJldHVybiBtX29mZnNldDsgfQotICAgIHZvaWQgc2V0
T2Zmc2V0KGZsb2F0IG9mZnNldCkgeyBtX29mZnNldCA9IG9mZnNldDsgfQotKi8KLQotdHlwZWRl
ZiBzdHJ1Y3Qgeworc3RydWN0IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbgorewogICAgIEtD
Q29tcG9uZW50VHJhbnNmZXJUeXBlIHR5cGU7CiAgICAgUTNWYWx1ZUxpc3Q8ZmxvYXQ+IHRhYmxl
VmFsdWVzOwogICAgIGZsb2F0IHNsb3BlOwpAQCAtMjc1LDI0ICsyNTIsMjQgQEAKICAgICBmbG9h
dCBhbXBsaXR1ZGU7CiAgICAgZmxvYXQgZXhwb25lbnQ7CiAgICAgZmxvYXQgb2Zmc2V0OwotfSBL
Q0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb247Cit9OwogCiBjbGFzcyBLQ2FudmFzRkVDb21wb25l
bnRUcmFuc2ZlciA6IHB1YmxpYyBLQ2FudmFzRmlsdGVyRWZmZWN0CiB7CiBwdWJsaWM6CiAgICAg
S0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uIHJlZEZ1bmN0aW9uKCkgY29uc3QgeyByZXR1cm4g
bV9yZWRGdW5jOyB9Ci0gICAgdm9pZCBzZXRSZWRGdW5jdGlvbihjb25zdCBLQ0NvbXBvbmVudFRy
YW5zZmVyRnVuY3Rpb24gJmZ1bmMpIHsgbV9yZWRGdW5jID0gZnVuYzsgfQorICAgIHZvaWQgc2V0
UmVkRnVuY3Rpb24oY29uc3QgS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jKSB7IG1f
cmVkRnVuYyA9IGZ1bmM7IH0KICAgICAKICAgICBLQ0NvbXBvbmVudFRyYW5zZmVyRnVuY3Rpb24g
Z3JlZW5GdW5jdGlvbigpIGNvbnN0IHsgcmV0dXJuIG1fZ3JlZW5GdW5jOyB9Ci0gICAgdm9pZCBz
ZXRHcmVlbkZ1bmN0aW9uKGNvbnN0IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiAmZnVuYykg
eyBtX2dyZWVuRnVuYyA9IGZ1bmM7IH0KKyAgICB2b2lkIHNldEdyZWVuRnVuY3Rpb24oY29uc3Qg
S0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uJiBmdW5jKSB7IG1fZ3JlZW5GdW5jID0gZnVuYzsg
fQogICAgIAogICAgIEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiBibHVlRnVuY3Rpb24oKSBj
b25zdCB7IHJldHVybiBtX2JsdWVGdW5jOyB9Ci0gICAgdm9pZCBzZXRCbHVlRnVuY3Rpb24oY29u
c3QgS0NDb21wb25lbnRUcmFuc2ZlckZ1bmN0aW9uICZmdW5jKSB7IG1fYmx1ZUZ1bmMgPSBmdW5j
OyB9CisgICAgdm9pZCBzZXRCbHVlRnVuY3Rpb24oY29uc3QgS0NDb21wb25lbnRUcmFuc2ZlckZ1
bmN0aW9uJiBmdW5jKSB7IG1fYmx1ZUZ1bmMgPSBmdW5jOyB9CiAgICAgCiAgICAgS0NDb21wb25l
bnRUcmFuc2ZlckZ1bmN0aW9uIGFscGhhRnVuY3Rpb24oKSBjb25zdCB7IHJldHVybiBtX2FscGhh
RnVuYzsgfQotICAgIHZvaWQgc2V0QWxwaGFGdW5jdGlvbihjb25zdCBLQ0NvbXBvbmVudFRyYW5z
ZmVyRnVuY3Rpb24gJmZ1bmMpIHsgbV9hbHBoYUZ1bmMgPSBmdW5jOyB9CisgICAgdm9pZCBzZXRB
bHBoYUZ1bmN0aW9uKGNvbnN0IEtDQ29tcG9uZW50VHJhbnNmZXJGdW5jdGlvbiYgZnVuYykgeyBt
X2FscGhhRnVuYyA9IGZ1bmM7IH0KIAotICAgIFFUZXh0U3RyZWFtICZleHRlcm5hbFJlcHJlc2Vu
dGF0aW9uKFFUZXh0U3RyZWFtICYpIGNvbnN0OworICAgIFFUZXh0U3RyZWFtJiBleHRlcm5hbFJl
cHJlc2VudGF0aW9uKFFUZXh0U3RyZWFtJikgY29uc3Q7CiAKIHByaXZhdGU6CiAgICAgS0NDb21w
b25lbnRUcmFuc2ZlckZ1bmN0aW9uIG1fcmVkRnVuYzsKSW5kZXg6IGtjYW52YXMvZGV2aWNlL3F1
YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KUkNTIGZpbGU6IC9jdnMvcm9v
dC9XZWJDb3JlL2tjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tLHYK
cmV0cmlldmluZyByZXZpc2lvbiAxLjE4CmRpZmYgLXUgLWIgLXIxLjE4IEtDYW52YXNGaWx0ZXJR
dWFydHoubW0KLS0tIGtjYW52YXMvZGV2aWNlL3F1YXJ0ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1t
CTExIERlYyAyMDA1IDAwOjA3OjI1IC0wMDAwCTEuMTgKKysrIGtjYW52YXMvZGV2aWNlL3F1YXJ0
ei9LQ2FudmFzRmlsdGVyUXVhcnR6Lm1tCTExIERlYyAyMDA1IDA4OjUzOjM2IC0wMDAwCkBAIC00
NSw3ICs0NSw3IEBACiAKICNpbXBvcnQgPGt4bWxjb3JlL0Fzc2VydGlvbnMuaD4KIAotc3RhdGlj
IFFTdHJpbmcgS0NQcmV2aW91c0ZpbHRlck91dHB1dE5hbWUgPSBRU3RyaW5nOjpmcm9tTGF0aW4x
KCJfX3ByZXZpb3VzT3V0cHV0X18iKTsKK3N0YXRpYyBRU3RyaW5nIEtDUHJldmlvdXNGaWx0ZXJP
dXRwdXROYW1lID0gUVN0cmluZygiX19wcmV2aW91c091dHB1dF9fIik7CiAKIHN0YXRpYyBpbmxp
bmUgQ0lDb2xvciAqY2lDb2xvcihjb25zdCBRQ29sb3IgJmMpCiB7CkBAIC01NSwxNSArNTUsMTYg
QEAKICAgICByZXR1cm4gY29sb3JDSTsKIH0KIAotc3RhdGljIGlubGluZSBDSVZlY3RvciAqY2lW
ZWN0b3IoS0NhbnZhc1BvaW50M0YgcG9pbnQpIHsKK3N0YXRpYyBpbmxpbmUgQ0lWZWN0b3IgKmNp
VmVjdG9yKEtDYW52YXNQb2ludDNGIHBvaW50KQorewogICAgIHJldHVybiBbQ0lWZWN0b3IgdmVj
dG9yV2l0aFg6cG9pbnQueCgpIFk6cG9pbnQueSgpIFo6cG9pbnQueigpXTsKIH0KIAotc3RhdGlj
IGlubGluZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkgeworc3RhdGljIGlubGlu
ZSBDSVZlY3RvciAqY2lWZWN0b3IoUVBvaW50RiBwb2ludCkKK3sKICAgICByZXR1cm4gW0NJVmVj
dG9yIHZlY3RvcldpdGhYOnBvaW50LngoKSBZOnBvaW50LnkoKV07CiB9CiAKLQogS0NhbnZhc0Zp
bHRlclF1YXJ0ejo6S0NhbnZhc0ZpbHRlclF1YXJ0eigpIDogbV9maWx0ZXJDSUNvbnRleHQoMCks
IG1fZmlsdGVyQ0dMYXllcigwKSwgbV9pbWFnZXNCeU5hbWUoMCkKIHsKICAgICBtX2ltYWdlc0J5
TmFtZSA9IFtbTlNNdXRhYmxlRGljdGlvbmFyeSBhbGxvY10gaW5pdF07CkBAIC05NSw3ICs5Niw2
IEBACiAgICAgICAgIGNvbnRleHRPcHRpb25zID0gW05TRGljdGlvbmFyeSBkaWN0aW9uYXJ5V2l0
aE9iamVjdHNBbmRLZXlzOltOU051bWJlciBudW1iZXJXaXRoQm9vbDpZRVNdLCBrQ0lDb250ZXh0
VXNlU29mdHdhcmVSZW5kZXJlciwgbmlsXTsKICAgICAKICAgICBtX2ZpbHRlckNJQ29udGV4dCA9
IFtbQ0lDb250ZXh0IGNvbnRleHRXaXRoQ0dDb250ZXh0OmNnQ29udGV4dCBvcHRpb25zOmNvbnRl
eHRPcHRpb25zXSByZXRhaW5dOwotICAgIAogICAgIG1fZmlsdGVyQ0dMYXllciA9IFttX2ZpbHRl
ckNJQ29udGV4dCBjcmVhdGVDR0xheWVyV2l0aFNpemU6Q0dSZWN0KGJib3gpLnNpemUgaW5mbzpO
VUxMXTsKICAgICAKICAgICBDR0NvbnRleHQgKmZpbHRlckNHQ29udGV4dCA9IENHTGF5ZXJHZXRD
b250ZXh0KG1fZmlsdGVyQ0dMYXllcik7CkBAIC0xMTcsMTMgKzExNyw3IEBACiAgICAgTlNBcnJh
eSAqZmlsdGVyU3RhY2sgPSBnZXRDSUZpbHRlclN0YWNrKGlucHV0SW1hZ2UpOwogICAgIGlmIChb
ZmlsdGVyU3RhY2sgY291bnRdKSB7CiAgICAgICAgIENJSW1hZ2UgKm91dHB1dEltYWdlID0gW1tm
aWx0ZXJTdGFjayBsYXN0T2JqZWN0XSB2YWx1ZUZvcktleTpAIm91dHB1dEltYWdlIl07Ci0gICAg
ICAgIGlmICghb3V0cHV0SW1hZ2UpIHsKLSAgICAgICAgICAgIE5TTG9nKEAiRmFpbGVkIHRvIGdl
dCBvdXB1dEltYWdlIGZyb20gZmlsdGVyIHN0YWNrLCBjYW4ndCBkcmF3LiIpOwotICAgICAgICAg
ICAgcmV0dXJuOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICAvLyBhY3R1YWxseSBkcmF3
IHRoZSByZXN1bHQgdG8gdGhlIG9yaWdpbmFsIGNvbnRleHQKLSAgICAgICAgCisgICAgICAgIGlm
IChvdXRwdXRJbWFnZSkgewogICAgICAgICBDR1JlY3QgZmlsdGVyUmVjdCA9IGZpbHRlckJCb3hG
b3JJdGVtQkJveChDR1JlY3QoYmJveCkpOwogICAgICAgICBDR1JlY3QgdHJhbnNsYXRlZCA9IGZp
bHRlclJlY3Q7CiAgICAgICAgIENHUG9pbnQgYmJveE9yaWdpbiA9IENHUmVjdChiYm94KS5vcmln
aW47CkBAIC0xMzUsNiArMTI5LDggQEAKICAgICAgICAgCiAgICAgICAgIFttX2ZpbHRlckNJQ29u
dGV4dCBkcmF3SW1hZ2U6b3V0cHV0SW1hZ2UgYXRQb2ludDpkZXN0T3JpZ2luIGZyb21SZWN0OnNv
dXJjZVJlY3RdOwogICAgIH0gZWxzZQorICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gZ2V0
IG91cHV0SW1hZ2UgZnJvbSBmaWx0ZXIgc3RhY2ssIGNhbid0IGRyYXcuIik7CisgICAgfSBlbHNl
CiAgICAgICAgIE5TTG9nKEAiTm8gZmlsdGVyIHN0YWNrLCBjYW4ndCBkcmF3IGZpbHRlci4iKTsK
ICAgICAKICAgICBDR0xheWVyUmVsZWFzZShtX2ZpbHRlckNHTGF5ZXIpOwpAQCAtMTUzLDIxICsx
NDksMjAgQEAKIAlyZXR1cm4gZmlsdGVyQkJveDsKIH0KIAotTlNBcnJheSAqS0NhbnZhc0ZpbHRl
clF1YXJ0ejo6Z2V0Q0lGaWx0ZXJTdGFjayhDSUltYWdlICppbnB1dEltYWdlKSB7Ci0JLy8gaXRl
cmF0ZSBvdmVyIGVhY2ggb2YgdGhlIGZpbHRlciBlbGVtZW50cwotCS8vIHBhc3NpbmcgZWFjaCB0
aGUgbmVjZXNzYXJ5IGlucHV0cy4uLgotCQorTlNBcnJheSAqS0NhbnZhc0ZpbHRlclF1YXJ0ejo6
Z2V0Q0lGaWx0ZXJTdGFjayhDSUltYWdlICppbnB1dEltYWdlKQorewogCU5TTXV0YWJsZUFycmF5
ICpmaWx0ZXJFZmZlY3RzID0gW05TTXV0YWJsZUFycmF5IGFycmF5XTsKIAkKIAlRVmFsdWVMaXN0
SXRlcmF0b3I8S0NhbnZhc0ZpbHRlckVmZmVjdCAqPiBpdCA9IG1fZWZmZWN0cy5iZWdpbigpOwog
CVFWYWx1ZUxpc3RJdGVyYXRvcjxLQ2FudmFzRmlsdGVyRWZmZWN0ICo+IGVuZCA9IG1fZWZmZWN0
cy5lbmQoKTsKIAkKLQkvLyBjb252ZXJ0IHRvIGFuIE5TQXJyYXkgb2YgQ0lGaWx0ZXJzCi0Jc2V0
SW1hZ2VGb3JOYW1lKGlucHV0SW1hZ2UsUVN0cmluZzo6ZnJvbUxhdGluMSgiU291cmNlR3JhcGhp
YyIpKTsgLy8gaW5wdXQKKyAgICBzZXRJbWFnZUZvck5hbWUoaW5wdXRJbWFnZSwgIlNvdXJjZUdy
YXBoaWMiKTsgLy8gaW5wdXQKIAlmb3IgKDtpdCAhPSBlbmQ7IGl0KyspIHsKIAkJQ0lGaWx0ZXIg
KmZpbHRlciA9ICgqaXQpLT5nZXRDSUZpbHRlcih0aGlzKTsKLQkJaWYgKGZpbHRlcikgW2ZpbHRl
ckVmZmVjdHMgYWRkT2JqZWN0OmZpbHRlcl07Ci0JCWVsc2UgTlNMb2coQCJGYWlsZWQgdG8gYnVp
bGQgZmlsdGVyIGZvciBlbGVtZW50OiAlcC4iLCAoKml0KSk7CisgICAgICAgIGlmIChmaWx0ZXIp
CisgICAgICAgICAgICBbZmlsdGVyRWZmZWN0cyBhZGRPYmplY3Q6ZmlsdGVyXTsKKyAgICAgICAg
ZWxzZQorICAgICAgICAgICAgTlNMb2coQCJGYWlsZWQgdG8gYnVpbGQgZmlsdGVyIGZvciBlbGVt
ZW50OiAlcC4iLCAoKml0KSk7CiAJfQogCWlmIChbZmlsdGVyRWZmZWN0cyBjb3VudF0gIT0gbV9l
ZmZlY3RzLmNvdW50KCkpCiAJCU5TTG9nKEAiV0FSTklORzogQnVpbHQgc3RhY2sgb2Ygb25seSAl
aSBmaWx0ZXJzIGZyb20gJWkgZmlsdGVyIGVsZW1lbnRzIiwgW2ZpbHRlckVmZmVjdHMgY291bnRd
LCBtX2VmZmVjdHMuY291bnQoKSk7CkBAIC0xODcsNTQgKzE4Miw0NyBAQAogCiB2b2lkIEtDYW52
YXNGaWx0ZXJRdWFydHo6OnNldEltYWdlRm9yTmFtZShDSUltYWdlICppbWFnZSwgY29uc3QgUVN0
cmluZyAmbmFtZSkKIHsKLQkvL05TTG9nKEAiU2V0dGluZyBpbWFnZSBmb3IgbmFtZTogJUAiLCBu
YW1lLmdldE5TU3RyaW5nKCkpOwogCVttX2ltYWdlc0J5TmFtZSBzZXRWYWx1ZTppbWFnZSBmb3JL
ZXk6bmFtZS5nZXROU1N0cmluZygpXTsKIH0KIAotdm9pZCBLQ2FudmFzRmlsdGVyUXVhcnR6Ojpz
ZXRPdXRwdXRJbWFnZShjb25zdCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpmaWx0ZXJFZmZlY3QsIENJ
SW1hZ2UgKm91dHB1dCkgewotCWlmICghZmlsdGVyRWZmZWN0LT5yZXN1bHQoKS5pc0VtcHR5KCkp
IHsKK3ZvaWQgS0NhbnZhc0ZpbHRlclF1YXJ0ejo6c2V0T3V0cHV0SW1hZ2UoY29uc3QgS0NhbnZh
c0ZpbHRlckVmZmVjdCAqZmlsdGVyRWZmZWN0LCBDSUltYWdlICpvdXRwdXQpCit7CisgICAgaWYg
KCFmaWx0ZXJFZmZlY3QtPnJlc3VsdCgpLmlzRW1wdHkoKSkKIAkJc2V0SW1hZ2VGb3JOYW1lKG91
dHB1dCwgZmlsdGVyRWZmZWN0LT5yZXN1bHQoKSk7Ci0JfQogCXNldEltYWdlRm9yTmFtZShvdXRw
dXQsIEtDUHJldmlvdXNGaWx0ZXJPdXRwdXROYW1lKTsKIH0KIAotQ0lJbWFnZSAqS0NhbnZhc0Zp
bHRlclF1YXJ0ejo6aW5wdXRJbWFnZShjb25zdCBLQ2FudmFzRmlsdGVyRWZmZWN0ICpmaWx0ZXJF
ZmZlY3QpCitzdGF0aWMgaW5saW5lIENJSW1hZ2UgKmFscGhhSW1hZ2VGb3JJbWFnZShDSUltYWdl
ICppbWFnZSkKIHsJCi0JLy8gbm90IHNwZWNpZmllZAotCWlmIChmaWx0ZXJFZmZlY3QtPmluKCku
aXNFbXB0eSgpKSB7Ci0JCUNJSW1hZ2UgKmluSW1hZ2UgPSBpbWFnZUZvck5hbWUoS0NQcmV2aW91
c0ZpbHRlck91dHB1dE5hbWUpOwotCQlpZiAoIWluSW1hZ2UpIGluSW1hZ2UgPSBpbWFnZUZvck5h
bWUoUVN0cmluZzo6ZnJvbUxhdGluMSgiU291cmNlR3JhcGhpYyIpKTsKLQkJcmV0dXJuIGluSW1h
Z2U7Ci0JfSBlbHNlIGlmIChmaWx0ZXJFZmZlY3QtPmluKCkgPT0gUVN0cmluZzo6ZnJvbUxhdGlu
MSgiU291cmNlQWxwaGEiKSkgewotCQlDSUltYWdlICpzb3VyY2VBbHBoYSA9IGltYWdlRm9yTmFt
ZShmaWx0ZXJFZmZlY3QtPmluKCkpOwotCQlpZiAoIXNvdXJjZUFscGhhKSB7CiAJCQlDSUZpbHRl
ciAqb25seUFscGhhID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb2xvck1hdHJpeCJd
OwogCQkJZmxvYXQgemVyb1s0XSA9IHswLmYsIDAuZiwgMC5mLCAwLmZ9OwogCQkJW29ubHlBbHBo
YSBzZXREZWZhdWx0c107CisgICAgW29ubHlBbHBoYSBzZXRWYWx1ZTppbWFnZSBmb3JLZXk6QCJp
bnB1dEltYWdlIl07CiAJCQlbb25seUFscGhhIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRo
VmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRSVmVjdG9yIl07CiAJCQlbb25seUFs
cGhhIHNldFZhbHVlOltDSVZlY3RvciB2ZWN0b3JXaXRoVmFsdWVzOnplcm8gY291bnQ6NF0gZm9y
S2V5OkAiaW5wdXRHVmVjdG9yIl07CiAJCQlbb25seUFscGhhIHNldFZhbHVlOltDSVZlY3RvciB2
ZWN0b3JXaXRoVmFsdWVzOnplcm8gY291bnQ6NF0gZm9yS2V5OkAiaW5wdXRCVmVjdG9yIl07Ci0J
CQlDSUltYWdlICpzb3VyY2VHcmFwaGljID0gaW1hZ2VGb3JOYW1lKFFTdHJpbmc6OmZyb21MYXRp
bjEoIlNvdXJjZUdyYXBoaWMiKSk7Ci0gICAgICAgICAgICBpZiAoc291cmNlR3JhcGhpYykgewot
ICAgICAgICAgICAgICAgIFtvbmx5QWxwaGEgc2V0VmFsdWU6c291cmNlR3JhcGhpYyBmb3JLZXk6
QCJpbnB1dEltYWdlIl07Ci0gICAgICAgICAgICAgICAgc291cmNlQWxwaGEgPSBbb25seUFscGhh
IHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXTsKLSAgICAgICAgICAgICAgICBzZXRJbWFnZUZv
ck5hbWUoc291cmNlQWxwaGEsUVN0cmluZzo6ZnJvbUxhdGluMSgiU291cmNlQWxwaGEiKSk7Ci0g
ICAgICAgICAgICB9CisgICAgcmV0dXJuIFtvbmx5QWxwaGEgdmFsdWVGb3JLZXk6QCJvdXRwdXRJ
bWFnZSJdOworfQorCitDSUltYWdlICpLQ2FudmFzRmlsdGVyUXVhcnR6OjppbnB1dEltYWdlKGNv
bnN0IEtDYW52YXNGaWx0ZXJFZmZlY3QgKmZpbHRlckVmZmVjdCkKK3sKKyAgICBpZiAoZmlsdGVy
RWZmZWN0LT5pbigpLmlzRW1wdHkoKSkgeworICAgICAgICBDSUltYWdlICppbkltYWdlID0gaW1h
Z2VGb3JOYW1lKEtDUHJldmlvdXNGaWx0ZXJPdXRwdXROYW1lKTsKKyAgICAgICAgaWYgKCFpbklt
YWdlKQorICAgICAgICAgICAgaW5JbWFnZSA9IGltYWdlRm9yTmFtZSgiU291cmNlR3JhcGhpYyIp
OworICAgICAgICByZXR1cm4gaW5JbWFnZTsKKyAgICB9IGVsc2UgaWYgKGZpbHRlckVmZmVjdC0+
aW4oKSA9PSAiU291cmNlQWxwaGEiKSB7CisgICAgICAgIENJSW1hZ2UgKnNvdXJjZUFscGhhID0g
aW1hZ2VGb3JOYW1lKGZpbHRlckVmZmVjdC0+aW4oKSk7CisgICAgICAgIGlmICghc291cmNlQWxw
aGEpIHsKKyAgICAgICAgICAgIENJSW1hZ2UgKnNvdXJjZUdyYXBoaWMgPSBpbWFnZUZvck5hbWUo
IlNvdXJjZUdyYXBoaWMiKTsKKyAgICAgICAgICAgIGlmICghc291cmNlR3JhcGhpYykKKyAgICAg
ICAgICAgICAgICByZXR1cm4gbmlsOworICAgICAgICAgICAgc2V0SW1hZ2VGb3JOYW1lKGFscGhh
SW1hZ2VGb3JJbWFnZShzb3VyY2VHcmFwaGljKSwgIlNvdXJjZUFscGhhIik7CiAJCX0KIAkJcmV0
dXJuIHNvdXJjZUFscGhhOwogCX0KIAkKLQkvLyBmb3Igbm93IHdlIGp1c3QgcmV0dXJuIHdoYXQn
cyBpbiB0aGUgZGljdAotCS8vIGV2ZW50dWFsbHkgd2Ugc2hvdWxkIGJlIHNtYXJ0ZXIuCi0JLy8g
YW5kIHJlYWxseSBidWlsZCB0aGUgYWxwaGEsIGV0Yy4KIAlyZXR1cm4gaW1hZ2VGb3JOYW1lKGZp
bHRlckVmZmVjdC0+aW4oKSk7Ci0JCi0JLy8gU291cmNlR3JhcGhpYwotCS8vIFNvdXJjZUFscGhh
Ci0JLy8gQmFja2dyb3VuZEltYWdlCi0JLy8gQmFja2dyb3VuZEFscGhhCi0JLy8gRmlsbFBhaW50
Ci0JLy8gU3Ryb2tlUGFpbnQKIH0KIAogI3ByYWdtYSBtYXJrIC0KQEAgLTI2MSwzMSArMjQ5LDIw
IEBACiAJcmV0dXJuIG5pbDsKIAogI2RlZmluZSBGRV9RVUFSVFpfQ1JPUF9UT19SRUNUKHJlY3Qp
IFwKLXsgXAorICAgIHsgXAogCUNJRmlsdGVyICpjcm9wID0gW0NJRmlsdGVyIGZpbHRlcldpdGhO
YW1lOkAiQ0lDcm9wIl07IFwKIAlbY3JvcCBzZXREZWZhdWx0c107IFwKIAlbY3JvcCBzZXRWYWx1
ZTpbZmlsdGVyIHZhbHVlRm9yS2V5OkAib3V0cHV0SW1hZ2UiXSBmb3JLZXk6QCJpbnB1dEltYWdl
Il07IFwKIAlbY3JvcCBzZXRWYWx1ZTpbQ0lWZWN0b3IgdmVjdG9yV2l0aFg6cmVjdC5vcmlnaW4u
eCBZOnJlY3Qub3JpZ2luLnkgWjpyZWN0LnNpemUud2lkdGggVzpyZWN0LnNpemUuaGVpZ2h0XSBm
b3JLZXk6QCJpbnB1dFJlY3RhbmdsZSJdOyBcCiAJZmlsdGVyID0gY3JvcDsgXAotfQotCi0vL3N0
YXRpYyBDR1JlY3QgZ2V0RmlsdGVyRWZmZWN0U3ViUmVnaW9uKEtDYW52YXNGaWx0ZXJRdWFydHog
KnF1YXJ0ekZpbHRlciwgS0NhbnZhc0ZpbHRlckVmZmVjdCAqZWZmZWN0KQotLy97Ci0vLwkvLyBG
SVhNRSEKLS8vCQotLy8JLyoKLS8vCXNwZWM6Ci0vLwl4LCB5LCB3aWR0aCBhbmQgaGVpZ2h0IGRl
ZmF1bHQgdG8gdGhlIHVuaW9uIChpLmUuLCB0aWdodGVzdCBmaXR0aW5nIGJvdW5kaW5nIGJveCkg
b2YgdGhlIHN1YnJlZ2lvbnMgZGVmaW5lZCBmb3IgYWxsIHJlZmVyZW5jZWQgbm9kZXMuIElmIHRo
ZXJlIGFyZSBubyByZWZlcmVuY2VkIG5vZGVzIChlLmcuLCBmb3IgJ2ZlSW1hZ2UnIG9yICdmZVR1
cmJ1bGVuY2UnKSwgb3Igb25lIG9yIG1vcmUgb2YgdGhlIHJlZmVyZW5jZWQgbm9kZXMgaXMgYSBz
dGFuZGFyZCBpbnB1dCAob25lIG9mIFNvdXJjZUdyYXBoaWMsIFNvdXJjZUFscGhhLCBCYWNrZ3Jv
dW5kSW1hZ2UsIEJhY2tncm91bmRBbHBoYSwgRmlsbFBhaW50IG9yIFN0cm9rZVBhaW50KSwgb3Ig
Zm9yICdmZVRpbGUnICh3aGljaCBpcyBzcGVjaWFsIGJlY2F1c2UgaXRzIHByaW5jaXBhbCBmdW5j
dGlvbiBpcyB0byByZXBsaWNhdGUgdGhlIHJlZmVyZW5jZWQgbm9kZSBpbiBYIGFuZCBZIGFuZCB0
aGVyZWJ5IHByb2R1Y2UgYSB1c3VhbGx5IGxhcmdlciByZXN1bHQpLCB0aGUgZGVmYXVsdCBzdWJy
ZWdpb24gaXMgMCUsMCUsMTAwJSwxMDAlLCB3aGVyZSBwZXJjZW50YWdlcyBhcmUgcmVsYXRpdmUg
dG8gdGhlIGRpbWVuc2lvbnMgb2YgdGhlIGZpbHRlciByZWdpb24uCi0vLwkqLwotLy8JcmV0dXJu
IENHUmVjdFplcm87Ci0vL30KKyAgICB9CiAKIENJRmlsdGVyICpLQ2FudmFzRkVCbGVuZFF1YXJ0
ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAog
ewogCUtXUV9CTE9DS19FWENFUFRJT05TCiAJQ0lGaWx0ZXIgKmZpbHRlciA9IG5pbDsKIAkKLQlz
d2l0Y2goYmxlbmRNb2RlKCkpIHsKKyAgICBzd2l0Y2ggKGJsZW5kTW9kZSgpKSB7CiAJY2FzZSBC
TV9OT1JNQUw6CiAJCS8vIEZJWE1FOiBJIHRoaW5rIHRoaXMgaXMgY29ycmVjdC4uLi4KIAkJZmls
dGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lTb3VyY2VPdmVyQ29tcG9zaXRpbmci
XTsKQEAgLTMzMCw5ICszMDcsOSBAQAogCiBDSUZpbHRlciAqS0NhbnZhc0ZFQ29sb3JNYXRyaXhR
dWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29u
c3QKIHsKLQlDSUZpbHRlciAqZmlsdGVyID0gbmlsOwogCUtXUV9CTE9DS19FWENFUFRJT05TCi0J
c3dpdGNoKHR5cGUoKSkgeworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CisgICAgc3dpdGNo
ICh0eXBlKCkpIHsKIAljYXNlIENNVF9NQVRSSVg6CiAJewogCQlDTVZhbHVlc0NoZWNrKDIwLCAi
bWF0cml4Iik7CkBAIC0zOTIsNDkgKzM2OSwxMSBAQAogCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJO
OwogfQogCi0vKgotZmlsbENJVmVjdG9yQW5kQmlhc0Zyb21GdW5jKGNvbnN0IEtDQ29tcG9uZW50
VHJhbnNmZXJGdW5jdGlvbiAmZnVuYywgS0NDaGFubmVsU2VsZWN0b3JUeXBlIGNvbG9yLCBDSVZl
Y3RvciAqYmlhcykgewkKLQlmbG9hdFs0XSB2ZWN0b3IgPSB7MC5mLCAwLmYsIDAuZiwgMC5mfTsK
LQkKLQlzd2l0Y2goZnVuYy50eXBlKCkpIHsKLQljYXNlIENUX0lERU5USVRZOgotCQl2ZWN0b3Jb
Y29sb3JdID0gMS5mOwotCQlicmVhazsKLQljYXNlIENUX1RBQkxFOgotCQlOU0xvZyhAIldhcm5p
bmc6IENvbXBvbmVudCBUcmFuc2ZlciBcInRhYmxlXCIgZnVuY3Rpb24gbm90IHlldCBzdXBwb3J0
ZWQuIik7Ci0JCXZlY3Rvcltjb2xvcl0gPSAxLmY7Ci0JCWJyZWFrOwotCWNhc2UgQ1RfRElTQ1JF
VEU6Ci0JCU5TTG9nKEAiV2FybmluZzogQ29tcG9uZW50IFRyYW5zZmVyIFwiZGlzY3JldGVcIiBm
dW5jdGlvbiBub3QgeWV0IHN1cHBvcnRlZC4iKTsKLQkJdmVjdG9yW2NvbG9yXSA9IDEuZjsKLQkJ
YnJlYWs7Ci0JY2FzZSBDVF9MSU5FQVI6Ci0JCXZlY3Rvcltjb2xvcl0gPSBmdW5jLnNsb3BlOwot
CQkvLyBGSVhNRTogYWRkIGludGVyY2VwdCB0byBiaWFzLgotCQlicmVhazsKLQljYXNlIENUX0dB
TU1BOgotCQl2ZWN0b3JbY29sb3JdID0gZnVuYy5zbG9wZTsKLQl9Ci0JCi0JcmV0dXJuIFtDSVZl
Y3RvciB2ZWN0b3JXaXRoVmFsdWVzOnZlY3RvciBjb3VudDo0XTsKLX0KLQotQ0lGaWx0ZXIgKktD
YW52YXNGRUNvbXBvbmVudFRyYW5zZmVyUXVhcnR6OjpnZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVy
UXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0Ci17Ci0JRkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAi
Q0lDb2xvck1hdHJpeCIpOwotCQotCQotCUZFX1FVQVJUWl9PVVRQVVRfUkVUVVJOOwotCXJldHVy
biBuaWw7Ci19Ci0qLwotCi0KIENJRmlsdGVyICpLQ2FudmFzRkVDb21wb3NpdGVRdWFydHo6Omdl
dENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZpbHRlcikgY29uc3QKIHsKIAlL
V1FfQkxPQ0tfRVhDRVBUSU9OUwogCUNJRmlsdGVyICpmaWx0ZXIgPSBuaWw7Ci0Jc3dpdGNoKG9w
ZXJhdGlvbigpKSB7CisgICAgc3dpdGNoIChvcGVyYXRpb24oKSkgewogCWNhc2UgQ09fT1ZFUjoK
ICAgICAgICAgICAgIGZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIkNJU291cmNl
T3ZlckNvbXBvc2l0aW5nIl07CiAgICAgICAgICAgICBicmVhazsKQEAgLTQ3Niw5ICs0MTUsOCBA
QAogCiBzdGF0aWMgaW5saW5lIENJRmlsdGVyICpnZXRQb2ludExpZ2h0VmVjdG9ycyhDSUZpbHRl
ciAqIG5vcm1hbHMsIENJVmVjdG9yICogbGlnaHRQb3NpdGlvbiwgZmxvYXQgc3VyZmFjZVNjYWxl
KQogewotICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElP
TlMKLSAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS1BvaW50TGlnaHQi
XTsKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tQ
b2ludExpZ2h0Il07CiAgICAgaWYgKCFmaWx0ZXIpCiAgICAgICAgIHJldHVybiBuaWw7CiAgICAg
W2ZpbHRlciBzZXREZWZhdWx0c107CkBAIC00ODksMTUgKzQyNywxNSBAQAogICAgIEtXUV9VTkJM
T0NLX0VYQ0VQVElPTlMgCiAgICAgcmV0dXJuIG5pbDsKIH0KKwogc3RhdGljIENJRmlsdGVyICpn
ZXRMaWdodFZlY3RvcnMoQ0lGaWx0ZXIgKiBub3JtYWxzLCBjb25zdCBLQ0xpZ2h0U291cmNlICog
bGlnaHQsIGZsb2F0IHN1cmZhY2VTY2FsZSkKIHsKLSAgICAvL0ZJWE1FOiB0aGVyZSBoYXMgdG8g
YmUgYSBiZXR0ZXIgd2F5IG9mIG1ha2luZyBzdXJlIHRoZXNlIGdldCBpbml0aWFsaXNlZAogICAg
IFtXS0Rpc3RhbnRMaWdodEZpbHRlciBjbGFzc107CiAgICAgW1dLUG9pbnRMaWdodEZpbHRlciBj
bGFzc107CiAgICAgW1dLU3BvdExpZ2h0RmlsdGVyIGNsYXNzXTsKICAgICAKLSAgICBDSUZpbHRl
ciAqZmlsdGVyID0gbmlsOwogICAgIEtXUV9CTE9DS19FWENFUFRJT05TCisgICAgQ0lGaWx0ZXIg
KmZpbHRlciA9IG5pbDsKICAgICAKICAgICBzd2l0Y2ggKGxpZ2h0LT50eXBlKCkpIHsKICAgICAg
ICAgY2FzZSBMU19ESVNUQU5UOgpAQCAtNTQ5LDEzICs0ODcsMTEgQEAKICAgICByZXR1cm4gbmls
OwogfQogCi0KIHN0YXRpYyBDSUZpbHRlciAqZ2V0Tm9ybWFsTWFwKENJSW1hZ2UgKmJ1bXBNYXAs
IGZsb2F0IHNjYWxlKQogewogICAgIFtXS05vcm1hbE1hcEZpbHRlciBjbGFzc107Ci0gICAgQ0lG
aWx0ZXIgKmZpbHRlciA9IG5pbDsKICAgICBLV1FfQkxPQ0tfRVhDRVBUSU9OUwotICAgIGZpbHRl
ciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLTm9ybWFsTWFwIl07ICAgCisgICAgQ0lG
aWx0ZXIgKmZpbHRlciA9IFtDSUZpbHRlciBmaWx0ZXJXaXRoTmFtZTpAIldLTm9ybWFsTWFwIl07
ICAgCiAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAgICAgCiAgICAgW2ZpbHRlciBzZXRWYWx1
ZTpidW1wTWFwIGZvcktleTpAImlucHV0SW1hZ2UiXTsgICAgCkBAIC01NjgsMTQgKzUwNCwxMyBA
QAogQ0lGaWx0ZXIgKktDYW52YXNGRURpZmZ1c2VMaWdodGluZ1F1YXJ0ejo6Z2V0Q0lGaWx0ZXIo
S0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAogewogICAgIGNvbnN0IEtD
TGlnaHRTb3VyY2UgKmxpZ2h0ID0gbGlnaHRTb3VyY2UoKTsKLSAgICBpZighbGlnaHQpCisgICAg
aWYgKCFsaWdodCkKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICAKICAgICBbV0tEaWZmdXNlTGln
aHRpbmdGaWx0ZXIgY2xhc3NdOwogICAgIAotICAgIENJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CiAg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKLSAgICBmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0
aE5hbWU6QCJXS0RpZmZ1c2VMaWdodGluZyJdOworICAgIENJRmlsdGVyICpmaWx0ZXIgPSBbQ0lG
aWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS0RpZmZ1c2VMaWdodGluZyJdOwogICAgIGlmICghZmls
dGVyKQogICAgICAgICByZXR1cm4gbmlsOwogICAgIApAQCAtNjAxLDkgKzUzNiw4IEBACiAKIENJ
RmlsdGVyICpLQ2FudmFzRkVGbG9vZFF1YXJ0ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1
YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAogewotCUNJRmlsdGVyICpmaWx0ZXIgPSBuaWw7CiAJ
S1dRX0JMT0NLX0VYQ0VQVElPTlMKLQlmaWx0ZXIgPSBbQ0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6
QCJDSUNvbnN0YW50Q29sb3JHZW5lcmF0b3IiXTsKKyAgICBDSUZpbHRlciAqZmlsdGVyID0gW0NJ
RmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiQ0lDb25zdGFudENvbG9yR2VuZXJhdG9yIl07CiAJW2Zp
bHRlciBzZXREZWZhdWx0c107CiAJQ0dDb2xvclJlZiBjb2xvciA9IGNnQ29sb3IoZmxvb2RDb2xv
cigpKTsKIAlDR0NvbG9yUmVmIHdpdGhBbHBoYSA9IENHQ29sb3JDcmVhdGVDb3B5V2l0aEFscGhh
KGNvbG9yLENHQ29sb3JHZXRBbHBoYShjb2xvcikgKiBmbG9vZE9wYWNpdHkoKSk7CkBAIC02NTIs
MTIgKzU4NiwxMiBAQAogCiBDSUZpbHRlciAqS0NhbnZhc0ZFR2F1c3NpYW5CbHVyUXVhcnR6Ojpn
ZXRDSUZpbHRlcihLQ2FudmFzRmlsdGVyUXVhcnR6ICpxdWFydHpGaWx0ZXIpIGNvbnN0CiB7Ci0J
RkVfUVVBUlRaX1NFVFVQX0lOUFVUKEAiQ0lHYXVzc2lhbkJsdXIiKTsKKyAgICBGRV9RVUFSVFpf
U0VUVVBfSU5QVVQoQCJDSUdhdXNzaWFuUHlyYW1pZCIpOwogCQogCWZsb2F0IGlucHV0UmFkaXVz
ID0gc3RkRGV2aWF0aW9uWCgpOwogCWlmIChpbnB1dFJhZGl1cyAhPSBzdGREZXZpYXRpb25ZKCkp
IHsKIAkJZmxvYXQgaW5wdXRBc3BlY3RSYXRpbyA9IHN0ZERldmlhdGlvblgoKS9zdGREZXZpYXRp
b25ZKCk7Ci0JCWlmICggKGlucHV0QXNwZWN0UmF0aW8gPCAuNSkgfHwgKGlucHV0QXNwZWN0UmF0
aW8gPiAyLjApICkKKyAgICAgICAgaWYgKChpbnB1dEFzcGVjdFJhdGlvIDwgLjUpIHx8IChpbnB1
dEFzcGVjdFJhdGlvID4gMi4wKSkKIAkJCU5TTG9nKEAiV0FSTklORzogaW5wdXRBc3BlY3RSYXRp
byBvdXRzaWRlIHJhbmdlIHN1cHBvcnRlZCBieSBxdWFydHogZm9yIGFzeW1tZXRyaWMgR2F1c3Np
YW4gYmx1cnMhICh4OiAlZiAgeTogJWYgcmF0aW86ICVmKSIsIHN0ZERldmlhdGlvblgoKSwgc3Rk
RGV2aWF0aW9uWSgpLCBpbnB1dEFzcGVjdFJhdGlvKTsKIAkJW2ZpbHRlciBzZXRWYWx1ZTpbTlNO
dW1iZXIgbnVtYmVyV2l0aEZsb2F0OmlucHV0QXNwZWN0UmF0aW9dIGZvcktleTpAImlucHV0QXNw
ZWN0UmF0aW8iXTsKIAl9CkBAIC02NjgsMTUgKzYwMiwxMSBAQAogCiBDSUZpbHRlciAqS0NhbnZh
c0ZFTWVyZ2VRdWFydHo6OmdldENJRmlsdGVyKEtDYW52YXNGaWx0ZXJRdWFydHogKnF1YXJ0ekZp
bHRlcikgY29uc3QKIHsKLQkvLyBKdXN0IHN0YWNrIGEgYnVuY2ggb2YgY29tcG9zaXRlIHNvdXJj
ZSBvdmVyIGZpbHRlcnMgdG9nZXRoZXIuLi4KIAlLV1FfQkxPQ0tfRVhDRVBUSU9OUwogCUNJRmls
dGVyICpmaWx0ZXIgPSBuaWw7CiAJUVN0cmluZ0xpc3QgaW5wdXRzID0gbWVyZ2VJbnB1dHMoKTsK
LQlRVmFsdWVMaXN0SXRlcmF0b3I8UVN0cmluZz4gaXQgPSBpbnB1dHMuYmVnaW4oKTsKLQlRVmFs
dWVMaXN0SXRlcmF0b3I8UVN0cmluZz4gZW5kID0gaW5wdXRzLmVuZCgpOwotCQogCUNJSW1hZ2Ug
KnByZXZpb3VzT3V0cHV0ID0gcXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpOwotCWZvciAo
O2l0ICE9IGVuZDsgaXQrKykgeworICAgIGZvciAoUVZhbHVlTGlzdEl0ZXJhdG9yPFFTdHJpbmc+
IGl0ID0gaW5wdXRzLmJlZ2luKCk7aXQgIT0gaW5wdXRzLmVuZCgpOyBpdCsrKSB7CiAJCUNJSW1h
Z2UgKmlucHV0SW1hZ2UgPSBxdWFydHpGaWx0ZXItPmltYWdlRm9yTmFtZSgqaXQpOwogICAgICAg
ICBGRV9RVUFSVFpfQ0hFQ0tfSU5QVVQoaW5wdXRJbWFnZSk7CiAgICAgICAgIEZFX1FVQVJUWl9D
SEVDS19JTlBVVChwcmV2aW91c091dHB1dCk7CkBAIC03MDYsOSArNjM2LDggQEAKICAgICAKICAg
ICBbV0tTcGVjdWxhckxpZ2h0aW5nRmlsdGVyIGNsYXNzXTsgIAogICAgIAotICAgIENJRmlsdGVy
ICpmaWx0ZXIgPSBuaWw7CiAgICAgS1dRX0JMT0NLX0VYQ0VQVElPTlMKLSAgICBmaWx0ZXIgPSBb
Q0lGaWx0ZXIgZmlsdGVyV2l0aE5hbWU6QCJXS1NwZWN1bGFyTGlnaHRpbmciXTsKKyAgICBDSUZp
bHRlciAqZmlsdGVyID0gW0NJRmlsdGVyIGZpbHRlcldpdGhOYW1lOkAiV0tTcGVjdWxhckxpZ2h0
aW5nIl07CiAgICAgW2ZpbHRlciBzZXREZWZhdWx0c107CiAgICAgQ0lGaWx0ZXIgKm5vcm1hbHMg
PSBnZXROb3JtYWxNYXAocXVhcnR6RmlsdGVyLT5pbnB1dEltYWdlKHRoaXMpLCBzdXJmYWNlU2Nh
bGUoKSk7CiAgICAgaWYgKCFub3JtYWxzKSAKQEAgLTcyOCwxMSArNjU3LDggQEAKICAgICBGRV9R
VUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0KIAotCiBDSUZpbHRlciAqS0NhbnZhc0ZFVGlsZVF1YXJ0
ejo6Z2V0Q0lGaWx0ZXIoS0NhbnZhc0ZpbHRlclF1YXJ0eiAqcXVhcnR6RmlsdGVyKSBjb25zdAog
ewogCUZFX1FVQVJUWl9TRVRVUF9JTlBVVChAIkNJQWZmaW5lVGlsZSIpOwotCS8vIG5vIGludGVy
ZXN0aW5nIHBhcmFtZXRlcnMuLi4KIAlGRV9RVUFSVFpfT1VUUFVUX1JFVFVSTjsKIH0KLQo=
</data>

          </attachment>
      

    </bug>

</bugzilla>