<?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>4924</bug_id>
          
          <creation_ts>2005-09-10 14:53:22 -0700</creation_ts>
          <short_desc>GraphicsContextMac should use CGContext as much as possible rather than NSGraphicsContext</short_desc>
          <delta_ts>2006-05-03 14:48:21 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Layout and Rendering</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>P3</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>eric</cc>
    
    <cc>mitz</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>19308</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 14:53:22 -0700</bug_when>
    <thetext>Using CGContext directly will be simpler, and probably faster.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19309</commentid>
    <comment_count>1</comment_count>
      <attachid>3851</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2005-09-10 14:54:14 -0700</bug_when>
    <thetext>Created attachment 3851
patch to move to CGContext, some other small improvements</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19562</commentid>
    <comment_count>2</comment_count>
      <attachid>3851</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2005-09-13 03:43:32 -0700</bug_when>
    <thetext>Comment on attachment 3851
patch to move to CGContext, some other small improvements

r=me

_fillRectXX finally meets its maker!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>19777</commentid>
    <comment_count>3</comment_count>
    <who name="Adele Peterson">adele</who>
    <bug_when>2005-09-16 11:09:09 -0700</bug_when>
    <thetext>Chris measured a performance regression that he tracked down to this bug.  I&apos;m reopening so we can 
address the performance issue.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>41191</commentid>
    <comment_count>4</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2006-05-03 14:48:21 -0700</bug_when>
    <thetext>We&apos;re doing this again as of my recent check-in -- I don&apos;t think we&apos;ll see the performance regression this time.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>3851</attachid>
            <date>2005-09-10 14:54:14 -0700</date>
            <delta_ts>2005-09-16 11:09:33 -0700</delta_ts>
            <desc>patch to move to CGContext, some other small improvements</desc>
            <filename>PainterPatch.txt</filename>
            <type>text/plain</type>
            <size>42272</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cu
Y3BwLHYKcmV0cmlldmluZyByZXZpc2lvbiAxLjE2MwpkaWZmIC1wIC11IC1yMS4xNjMgV2ViQ29y
ZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX2Zsb3cuY3BwCi0tLSBXZWJDb3JlL2todG1sL3JlbmRl
cmluZy9yZW5kZXJfZmxvdy5jcHAJMzAgSnVsIDIwMDUgMDI6MzM6MjIgLTAwMDAJMS4xNjMKKysr
IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9mbG93LmNwcAkxIFNlcCAyMDA1IDA0OjQ2
OjI4IC0wMDAwCkBAIC02ODcsNyArNjg3LDYgQEAgdm9pZCBSZW5kZXJGbG93OjpwYWludEZvY3Vz
UmluZyhRUGFpbnRlcgogICAgIHAtPmluaXRGb2N1c1Jpbmcob3csICBzdHlsZSgpLT5vdXRsaW5l
T2Zmc2V0KCksIG9jKTsKICAgICBhZGRGb2N1c1JpbmdSZWN0cyhwLCB0eCwgdHkpOwogICAgIHAt
PmRyYXdGb2N1c1JpbmcoKTsKLSAgICBwLT5jbGVhckZvY3VzUmluZygpOwogfQogI2VuZGlmCiAK
SW5kZXg6IFdlYkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KUkNTIGZpbGU6IC9jdnMvcm9vdC9XZWJDb3JlL2todG1sL3JlbmRlcmluZy9yZW5kZXJfb2Jq
ZWN0LmNwcCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS4yMTIKZGlmZiAtcCAtdSAtcjEuMjEyIFdl
YkNvcmUva2h0bWwvcmVuZGVyaW5nL3JlbmRlcl9vYmplY3QuY3BwCi0tLSBXZWJDb3JlL2todG1s
L3JlbmRlcmluZy9yZW5kZXJfb2JqZWN0LmNwcAkzMSBBdWcgMjAwNSAxMjo0OTozOCAtMDAwMAkx
LjIxMgorKysgV2ViQ29yZS9raHRtbC9yZW5kZXJpbmcvcmVuZGVyX29iamVjdC5jcHAJMSBTZXAg
MjAwNSAwNDo0NjozMCAtMDAwMApAQCAtMTM1MCw3ICsxMzUwLDYgQEAgdm9pZCBSZW5kZXJPYmpl
Y3Q6OnBhaW50T3V0bGluZShRUGFpbnRlcgogICAgICAgICAgICAgcC0+aW5pdEZvY3VzUmluZyhv
dywgb2Zmc2V0LCBvYyk7CiAgICAgICAgICAgICBhZGRGb2N1c1JpbmdSZWN0cyhwLCBfdHgsIF90
eSk7CiAgICAgICAgICAgICBwLT5kcmF3Rm9jdXNSaW5nKCk7Ci0gICAgICAgICAgICBwLT5jbGVh
ckZvY3VzUmluZygpOwogICAgICAgICB9CiAgICAgICAgIHJldHVybjsKICAgICB9CkluZGV4OiBX
ZWJDb3JlL2t3cS9LV1FQYWludGVyLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dl
YkNvcmUva3dxL0tXUVBhaW50ZXIuaCx2CnJldHJpZXZpbmcgcmV2aXNpb24gMS43OQpkaWZmIC1w
IC11IC1yMS43OSBXZWJDb3JlL2t3cS9LV1FQYWludGVyLmgKLS0tIFdlYkNvcmUva3dxL0tXUVBh
aW50ZXIuaAkzMCBBdWcgMjAwNSAwOTozMDoyNCAtMDAwMAkxLjc5CisrKyBXZWJDb3JlL2t3cS9L
V1FQYWludGVyLmgJMSBTZXAgMjAwNSAwNDo0NjozMCAtMDAwMApAQCAtMjgsNyArMjgsNiBAQAog
CiAjaW5jbHVkZSAiS1dRRm9udE1ldHJpY3MuaCIKICNpbmNsdWRlICJLV1FOYW1lc3BhY2UuaCIK
LSNpbmNsdWRlICJLV1FSZWN0LmgiCiAKICNpbmNsdWRlIDxBcHBsaWNhdGlvblNlcnZpY2VzL0Fw
cGxpY2F0aW9uU2VydmljZXMuaD4KIApAQCAtNjcsNyArNjYsNyBAQCBwdWJsaWM6CiAgICAgdm9p
ZCBzZXRCcnVzaChCcnVzaFN0eWxlKTsKICAgICB2b2lkIHNldEJydXNoKFFSZ2IpOwogCi0gICAg
UVJlY3QgeEZvcm0oY29uc3QgUVJlY3QgJikgY29uc3Q7CisgICAgUVJlY3QgeEZvcm0oY29uc3Qg
UVJlY3QgJnIpIGNvbnN0IHsgcmV0dXJuIHI7IH0KIAogICAgIHZvaWQgc2F2ZSgpOwogICAgIHZv
aWQgcmVzdG9yZSgpOwpAQCAtODQsMTkgKzgzLDIwIEBAIHB1YmxpYzoKICAgICB2b2lkIGRyYXdQ
aXhtYXAoY29uc3QgUVBvaW50ICYsIGNvbnN0IFFQaXhtYXAgJik7CiAgICAgdm9pZCBkcmF3UGl4
bWFwKGNvbnN0IFFQb2ludCAmLCBjb25zdCBRUGl4bWFwICYsIGNvbnN0IFFSZWN0ICYpOwogICAg
IHZvaWQgZHJhd1BpeG1hcChjb25zdCBRUG9pbnQgJiwgY29uc3QgUVBpeG1hcCAmLCBjb25zdCBR
UmVjdCAmLCBjb25zdCBRU3RyaW5nICYpOwotICAgIHZvaWQgZHJhd1BpeG1hcCggaW50IHgsIGlu
dCB5LCBjb25zdCBRUGl4bWFwICYsCi0JCQkgICAgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9
LTEsIGludCBzaD0tMSwgaW50IGNvbXBvc2l0ZU9wZXJhdG9yPS0xLCBDR0NvbnRleHRSZWYgY29u
dGV4dD0wKTsKLSAgICB2b2lkIGRyYXdQaXhtYXAoIGludCB4LCBpbnQgeSwgaW50IHcsIGludCBo
LCBjb25zdCBRUGl4bWFwICYsCi0JCQkgICAgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEs
IGludCBzaD0tMSwgaW50IGNvbXBvc2l0ZU9wZXJhdG9yPS0xLCBDR0NvbnRleHRSZWYgY29udGV4
dD0wKTsKLSAgICB2b2lkIGRyYXdGbG9hdFBpeG1hcCggZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQg
dywgZmxvYXQgaCwgY29uc3QgUVBpeG1hcCAmLAotCQkJICAgIGZsb2F0IHN4PTAsIGZsb2F0IHN5
PTAsIGZsb2F0IHN3PS0xLCBmbG9hdCBzaD0tMSwgaW50IGNvbXBvc2l0ZU9wZXJhdG9yPS0xLCBD
R0NvbnRleHRSZWYgY29udGV4dD0wKTsKLSAgICB2b2lkIGRyYXdUaWxlZFBpeG1hcChpbnQsIGlu
dCwgaW50LCBpbnQsIGNvbnN0IFFQaXhtYXAgJiwgaW50IHN4PTAsIGludCBzeT0wLCBDR0NvbnRl
eHRSZWYgY29udGV4dD0wKTsKLSAgICB2b2lkIGRyYXdTY2FsZWRBbmRUaWxlZFBpeG1hcChpbnQs
IGludCwgaW50LCBpbnQsIGNvbnN0IFFQaXhtYXAgJiwgaW50LCBpbnQsIGludCwgaW50LCBUaWxl
UnVsZSBoUnVsZSA9IFNUUkVUQ0gsIFRpbGVSdWxlIHZSdWxlID0gU1RSRVRDSCwKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBDR0NvbnRleHRSZWYgY29udGV4dD0wKTsKKyAgICB2
b2lkIGRyYXdQaXhtYXAoaW50IHgsIGludCB5LCBjb25zdCBRUGl4bWFwICYsCisgICAgICAgICAg
ICAgICAgICAgIGludCBzeD0wLCBpbnQgc3k9MCwgaW50IHN3PS0xLCBpbnQgc2g9LTEsIGludCBj
b21wb3NpdGVPcGVyYXRvcj0tMSwgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBOVUxMKTsKKyAgICB2
b2lkIGRyYXdQaXhtYXAoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgsIGNvbnN0IFFQaXhtYXAg
JiwKKyAgICAgICAgICAgICAgICAgICAgaW50IHN4PTAsIGludCBzeT0wLCBpbnQgc3c9LTEsIGlu
dCBzaD0tMSwgaW50IGNvbXBvc2l0ZU9wZXJhdG9yPS0xLCBDR0NvbnRleHRSZWYgY29udGV4dCA9
IE5VTEwpOworICAgIHZvaWQgZHJhd0Zsb2F0UGl4bWFwKGZsb2F0IHgsIGZsb2F0IHksIGZsb2F0
IHcsIGZsb2F0IGgsIGNvbnN0IFFQaXhtYXAgJiwKKyAgICAgICAgICAgICAgICAgICAgICAgICBm
bG9hdCBzeD0wLCBmbG9hdCBzeT0wLCBmbG9hdCBzdz0tMSwgZmxvYXQgc2g9LTEsIGludCBjb21w
b3NpdGVPcGVyYXRvcj0tMSwgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBOVUxMKTsKKyAgICB2b2lk
IGRyYXdUaWxlZFBpeG1hcChpbnQsIGludCwgaW50LCBpbnQsIGNvbnN0IFFQaXhtYXAgJiwgaW50
IHN4PTAsIGludCBzeT0wLCBDR0NvbnRleHRSZWYgY29udGV4dCA9IE5VTEwpOworICAgIHZvaWQg
ZHJhd1NjYWxlZEFuZFRpbGVkUGl4bWFwKGludCwgaW50LCBpbnQsIGludCwgY29uc3QgUVBpeG1h
cCAmLCBpbnQsIGludCwgaW50LCBpbnQsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgVGlsZVJ1bGUgaFJ1bGUgPSBTVFJFVENILCBUaWxlUnVsZSB2UnVsZSA9IFNUUkVUQ0gsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBO
VUxMKTsKIAogICAgIHZvaWQgYWRkQ2xpcChjb25zdCBRUmVjdCAmKTsKLSAgICB2b2lkIGFkZFJv
dW5kZWRSZWN0Q2xpcChjb25zdCBRUmVjdCYgcmVjdCwgY29uc3QgUVNpemUmIHRvcExlZnQsIGNv
bnN0IFFTaXplJiB0b3BSaWdodCwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBR
U2l6ZSYgYm90dG9tTGVmdCwgY29uc3QgUVNpemUmIGJvdHRvbVJpZ2h0KTsKKyAgICB2b2lkIGFk
ZFJvdW5kZWRSZWN0Q2xpcChjb25zdCBRUmVjdCAmcmVjdCwgY29uc3QgUVNpemUgJnRvcExlZnQs
IGNvbnN0IFFTaXplICZ0b3BSaWdodCwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb25z
dCBRU2l6ZSAmYm90dG9tTGVmdCwgY29uc3QgUVNpemUgJmJvdHRvbVJpZ2h0KTsKIAogICAgIFJh
c3Rlck9wIHJhc3Rlck9wKCkgY29uc3Q7CiAgICAgdm9pZCBzZXRSYXN0ZXJPcChSYXN0ZXJPcCk7
CkBAIC0xMjIsMzYgKzEyMiwzNSBAQCBwdWJsaWM6CiAgICAgYm9vbCB1cGRhdGluZ0NvbnRyb2xU
aW50cygpIGNvbnN0IHsgcmV0dXJuIF91cGRhdGluZ0NvbnRyb2xUaW50czsgfQogICAgIHZvaWQg
c2V0VXBkYXRpbmdDb250cm9sVGludHMoYm9vbCBiKSB7IHNldFBhaW50aW5nRGlzYWJsZWQoYik7
IF91cGRhdGluZ0NvbnRyb2xUaW50cyA9IGI7IH0KIAotICAgIHZvaWQgYmVnaW5UcmFuc3BhcmVu
Y3lMYXllcihmbG9hdCBvcGFjaXR5KTsKLSAgICB2b2lkIGVuZFRyYW5zcGFyZW5jeUxheWVyKCk7
CisgICAgc3RhdGljIHZvaWQgYmVnaW5UcmFuc3BhcmVuY3lMYXllcihmbG9hdCBvcGFjaXR5KTsK
KyAgICBzdGF0aWMgdm9pZCBlbmRUcmFuc3BhcmVuY3lMYXllcigpOwogCi0gICAgdm9pZCBzZXRT
aGFkb3coaW50IHgsIGludCB5LCBpbnQgYmx1ciwgY29uc3QgUUNvbG9yJiBjb2xvcik7CisgICAg
c3RhdGljIHZvaWQgc2V0U2hhZG93KGludCB4LCBpbnQgeSwgaW50IGJsdXIsIGNvbnN0IFFDb2xv
ciYgY29sb3IpOwogICAgIHZvaWQgY2xlYXJTaGFkb3coKTsKIAogICAgIHZvaWQgaW5pdEZvY3Vz
UmluZyhpbnQgd2lkdGgsIGludCBvZmZzZXQpOwogICAgIHZvaWQgaW5pdEZvY3VzUmluZyhpbnQg
d2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IFFDb2xvciYgY29sb3IpOwogICAgIHZvaWQgYWRkRm9j
dXNSaW5nUmVjdChpbnQgeCwgaW50IHksIGludCB3aWR0aCwgaW50IGhlaWdodCk7CiAgICAgdm9p
ZCBkcmF3Rm9jdXNSaW5nKCk7Ci0gICAgdm9pZCBjbGVhckZvY3VzUmluZygpOwogICAgIAotICAg
IENHQ29udGV4dFJlZiBjdXJyZW50Q29udGV4dCgpOworICAgIHN0YXRpYyBDR0NvbnRleHRSZWYg
Y3VycmVudENvbnRleHQoKTsKICAgICAKLSAgICBzdGF0aWMgaW50IGNvbXBvc2l0ZU9wZXJhdG9y
RnJvbVN0cmluZyAoY29uc3QgUVN0cmluZyAmYVN0cmluZyk7CisgICAgc3RhdGljIGludCBjb21w
b3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29uc3QgUVN0cmluZyAmYVN0cmluZyk7CiAgICAgc3Rh
dGljIGludCBnZXRDb21wb3NpdGVPcGVyYXRpb24oQ0dDb250ZXh0UmVmIGNvbnRleHQpOwotICAg
IHN0YXRpYyB2b2lkIHNldENvbXBvc2l0ZU9wZXJhdGlvbiAoQ0dDb250ZXh0UmVmIGNvbnRleHQs
IGNvbnN0IFFTdHJpbmcgJm9wZXJhdGlvbik7Ci0gICAgc3RhdGljIHZvaWQgc2V0Q29tcG9zaXRl
T3BlcmF0aW9uIChDR0NvbnRleHRSZWYgY29udGV4dCwgaW50IG9wZXJhdGlvbik7CisgICAgc3Rh
dGljIHZvaWQgc2V0Q29tcG9zaXRlT3BlcmF0aW9uKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25z
dCBRU3RyaW5nICZvcGVyYXRpb24pOworICAgIHN0YXRpYyB2b2lkIHNldENvbXBvc2l0ZU9wZXJh
dGlvbihDR0NvbnRleHRSZWYgY29udGV4dCwgaW50IG9wZXJhdGlvbik7CiAKIHByaXZhdGU6CiAg
ICAgLy8gbm8gY29weWluZyBvciBhc3NpZ25tZW50CiAgICAgUVBhaW50ZXIoY29uc3QgUVBhaW50
ZXIgJik7CiAgICAgUVBhaW50ZXIgJm9wZXJhdG9yPShjb25zdCBRUGFpbnRlciAmKTsKIAotICAg
IHZvaWQgX3NldENvbG9yRnJvbUJydXNoKCk7Ci0gICAgdm9pZCBfc2V0Q29sb3JGcm9tUGVuKCk7
CisgICAgc3RhdGljIHZvaWQgc2V0RmlsbENvbG9yKGNvbnN0IFFCcnVzaCAmKTsKKyAgICB2b2lk
IHNldEZpbGxDb2xvckZyb21DdXJyZW50QnJ1c2goKTsKKyAgICB2b2lkIHNldFN0cm9rZUNvbG9y
QW5kTGluZVdpZHRoRnJvbUN1cnJlbnRQZW4oKTsKKyAgICB2b2lkIHNldEZpbGxDb2xvckZyb21D
dXJyZW50UGVuKCk7CiAKLSAgICB2b2lkIF9maWxsUmVjdChmbG9hdCB4LCBmbG9hdCB5LCBmbG9h
dCB3LCBmbG9hdCBoLCBjb25zdCBRQ29sb3ImIGNvbG9yKTsKLSAgICAKLSAgICB2b2lkIF91cGRh
dGVSZW5kZXJlcigpOworICAgIHZvaWQgdXBkYXRlVGV4dFJlbmRlcmVyKCk7CiAKICAgICBRUGFp
bnRlclByaXZhdGUgKmRhdGE7CiAgICAgYm9vbCBfaXNGb3JQcmludGluZzsKSW5kZXg6IFdlYkNv
cmUva3dxL0tXUVBhaW50ZXIubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpSQ1MgZmlsZTogL2N2cy9yb290L1dlYkNv
cmUva3dxL0tXUVBhaW50ZXIubW0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTM1CmRpZmYgLXAg
LXUgLXIxLjEzNSBXZWJDb3JlL2t3cS9LV1FQYWludGVyLm1tCi0tLSBXZWJDb3JlL2t3cS9LV1FQ
YWludGVyLm1tCTEgU2VwIDIwMDUgMDM6MzA6MTcgLTAwMDAJMS4xMzUKKysrIFdlYkNvcmUva3dx
L0tXUVBhaW50ZXIubW0JMSBTZXAgMjAwNSAwNDo0NjozMSAtMDAwMApAQCAtNDEsNyArNDEsNyBA
QAogI2ltcG9ydCAiV2ViQ29yZVRleHRSZW5kZXJlci5oIgogI2ltcG9ydCAiV2ViQ29yZVRleHRS
ZW5kZXJlckZhY3RvcnkuaCIKIAotLy8gTlNDb2xvciwgTlNCZXppZXJQYXRoLCBOU0dyYXBoaWNz
Q29udGV4dCBhbmQgV2ViQ29yZVRleHRSZW5kZXJlcgorLy8gTlNDb2xvciwgTlNHcmFwaGljc0Nv
bnRleHQgYW5kIFdlYkNvcmVUZXh0UmVuZGVyZXIKIC8vIGNhbGxzIGluIHRoaXMgZmlsZSBhcmUg
YWxsIGV4Y2VwdGlvbi1zYWZlLCBzbyB3ZSBkb24ndCBibG9jawogLy8gZXhjZXB0aW9ucyBmb3Ig
dGhvc2UuCiAKQEAgLTU1LDIxICs1NSw0MyBAQCBzdHJ1Y3QgUVBTdGF0ZSB7CiB9OwogCiBzdHJ1
Y3QgUVBhaW50ZXJQcml2YXRlIHsKLSAgICBRUGFpbnRlclByaXZhdGUoKSA6IHRleHRSZW5kZXJl
cigwKSwgZm9jdXNSaW5nUGF0aCgwKSwgZm9jdXNSaW5nV2lkdGgoMCksIGZvY3VzUmluZ09mZnNl
dCgwKSwKLSAgICAgICAgICAgICAgICAgICAgICAgIGhhc0ZvY3VzUmluZ0NvbG9yKGZhbHNlKSB7
IH0KLSAgICB+UVBhaW50ZXJQcml2YXRlKCkgeyBLV1FSZWxlYXNlKHRleHRSZW5kZXJlcik7IEtX
UVJlbGVhc2UoZm9jdXNSaW5nUGF0aCk7IH0KKyAgICBRUGFpbnRlclByaXZhdGUoKSA6IHRleHRS
ZW5kZXJlcihuaWwpLCBmb2N1c1JpbmdXaWR0aCgwKSwgZm9jdXNSaW5nT2Zmc2V0KDApLCBoYXNG
b2N1c1JpbmdDb2xvcihmYWxzZSkgeyB9CisgICAgflFQYWludGVyUHJpdmF0ZSgpIHsgS1dRUmVs
ZWFzZSh0ZXh0UmVuZGVyZXIpOyB9CiAgICAgUVBTdGF0ZSBzdGF0ZTsKICAgICBRUHRyU3RhY2s8
UVBTdGF0ZT4gc3RhY2s7CiAgICAgaWQgPFdlYkNvcmVUZXh0UmVuZGVyZXI+IHRleHRSZW5kZXJl
cjsKICAgICBRRm9udCB0ZXh0UmVuZGVyZXJGb250OwotICAgIE5TQmV6aWVyUGF0aCAqZm9jdXNS
aW5nUGF0aDsKICAgICBpbnQgZm9jdXNSaW5nV2lkdGg7CiAgICAgaW50IGZvY3VzUmluZ09mZnNl
dDsKICAgICBib29sIGhhc0ZvY3VzUmluZ0NvbG9yOwogICAgIFFDb2xvciBmb2N1c1JpbmdDb2xv
cjsKIH07CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBfZmlsbFJlY3RYWChmbG9hdCB4LCBmbG9hdCB5
LCBmbG9hdCB3LCBmbG9hdCBoLCBjb25zdCBRQ29sb3ImIGNvbCk7CitzdHJ1Y3QgQ29tcG9zaXRl
T3BlcmF0b3IKK3sKKyAgICBjb25zdCBjaGFyICpuYW1lOworICAgIE5TQ29tcG9zaXRpbmdPcGVy
YXRpb24gdmFsdWU7Cit9OworCitjb25zdCBpbnQgTlVNX0NPTVBPU0lURV9PUEVSQVRPUlMgPSAx
NDsKKworc3RydWN0IENvbXBvc2l0ZU9wZXJhdG9yIGNvbXBvc2l0ZU9wZXJhdG9yc1tOVU1fQ09N
UE9TSVRFX09QRVJBVE9SU10gPSB7CisgICAgeyAiY2xlYXIiLCBOU0NvbXBvc2l0ZUNsZWFyIH0s
CisgICAgeyAiY29weSIsIE5TQ29tcG9zaXRlQ29weSB9LAorICAgIHsgInNvdXJjZS1vdmVyIiwg
TlNDb21wb3NpdGVTb3VyY2VPdmVyIH0sCisgICAgeyAic291cmNlLWluIiwgTlNDb21wb3NpdGVT
b3VyY2VJbiB9LAorICAgIHsgInNvdXJjZS1vdXQiLCBOU0NvbXBvc2l0ZVNvdXJjZU91dCB9LAor
ICAgIHsgInNvdXJjZS1hdG9wIiwgTlNDb21wb3NpdGVTb3VyY2VBdG9wIH0sCisgICAgeyAiZGVz
dGluYXRpb24tb3ZlciIsIE5TQ29tcG9zaXRlRGVzdGluYXRpb25PdmVyIH0sCisgICAgeyAiZGVz
dGluYXRpb24taW4iLCBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uSW4gfSwKKyAgICB7ICJkZXN0aW5h
dGlvbi1vdXQiLCBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uT3V0IH0sCisgICAgeyAiZGVzdGluYXRp
b24tYXRvcCIsIE5TQ29tcG9zaXRlRGVzdGluYXRpb25BdG9wIH0sCisgICAgeyAieG9yIiwgTlND
b21wb3NpdGVYT1IgfSwKKyAgICB7ICJkYXJrZXIiLCBOU0NvbXBvc2l0ZVBsdXNEYXJrZXIgfSwK
KyAgICB7ICJoaWdobGlnaHQiLCBOU0NvbXBvc2l0ZUhpZ2hsaWdodCB9LAorICAgIHsgImxpZ2h0
ZXIiLCBOU0NvbXBvc2l0ZVBsdXNMaWdodGVyIH0KK307CisKIFFQYWludGVyOjpRUGFpbnRlcigp
IDogZGF0YShuZXcgUVBhaW50ZXJQcml2YXRlKSwgX2lzRm9yUHJpbnRpbmcoZmFsc2UpLCBfdXNl
c0luYWN0aXZlVGV4dEJhY2tncm91bmRDb2xvcihmYWxzZSksIF91cGRhdGluZ0NvbnRyb2xUaW50
cyhmYWxzZSkKIHsKIH0KQEAgLTE1MiwxNyArMTc0LDExIEBAIGNvbnN0IFFCcnVzaCAmUVBhaW50
ZXI6OmJydXNoKCkgY29uc3QKICAgICByZXR1cm4gZGF0YS0+c3RhdGUuYnJ1c2g7CiB9CiAKLVFS
ZWN0IFFQYWludGVyOjp4Rm9ybShjb25zdCBRUmVjdCAmYVJlY3QpIGNvbnN0Ci17Ci0gICAgLy8g
Tm8gZGlmZmVyZW5jZSBiZXR3ZWVuIGRldmljZSBhbmQgbW9kZWwgY29vcmRzLCBzbyB0aGUgaWRl
bnRpdHkgdHJhbnNmb3JtIGlzIG9rLgotICAgIHJldHVybiBhUmVjdDsKLX0KLQogdm9pZCBRUGFp
bnRlcjo6c2F2ZSgpCiB7CiAgICAgZGF0YS0+c3RhY2sucHVzaChuZXcgUVBTdGF0ZShkYXRhLT5z
dGF0ZSkpOwogCi0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsgCisg
ICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjdXJyZW50Q29udGV4dCgpKTsKIH0KIAogdm9pZCBRUGFp
bnRlcjo6cmVzdG9yZSgpCkBAIC0xNzEsNDAgKzE4Nyw2NyBAQCB2b2lkIFFQYWludGVyOjpyZXN0
b3JlKCkKICAgICAgICAgRVJST1IoIkVSUk9SIHZvaWQgUVBhaW50ZXI6OnJlc3RvcmUoKSBzdGFj
ayBpcyBlbXB0eSIpOwogCXJldHVybjsKICAgICB9CisKKyAgICBDR0NvbnRleHRSZXN0b3JlR1N0
YXRlKGN1cnJlbnRDb250ZXh0KCkpOworCiAgICAgUVBTdGF0ZSAqcHMgPSBkYXRhLT5zdGFjay5w
b3AoKTsKICAgICBkYXRhLT5zdGF0ZSA9ICpwczsKICAgICBkZWxldGUgcHM7Ci0KLSAgICBbTlNH
cmFwaGljc0NvbnRleHQgcmVzdG9yZUdyYXBoaWNzU3RhdGVdOwogfQogCi0vLyBEcmF3cyBhIGZp
bGxlZCByZWN0YW5nbGUgd2l0aCBhIHN0cm9rZWQgYm9yZGVyLgogdm9pZCBRUGFpbnRlcjo6ZHJh
d1JlY3QoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7CiAgICAgaWYgKGRhdGEtPnN0YXRl
LnBhaW50aW5nRGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgaWYgKGRh
dGEtPnN0YXRlLmJydXNoLnN0eWxlKCkgIT0gTm9CcnVzaCkKLSAgICAgICAgX2ZpbGxSZWN0WFgo
eCwgeSwgdywgaCwgZGF0YS0+c3RhdGUuYnJ1c2guY29sb3IoKSk7CisKKyAgICBDR0NvbnRleHRS
ZWYgY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisKKyAgICBpZiAoZGF0YS0+c3RhdGUuYnJ1
c2guc3R5bGUoKSAhPSBOb0JydXNoKSB7CisgICAgICAgIHNldEZpbGxDb2xvckZyb21DdXJyZW50
QnJ1c2goKTsKKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3QoY29udGV4dCwgQ0dSZWN0TWFrZSh4
LCB5LCB3LCBoKSk7CisgICAgfQogCiAgICAgaWYgKGRhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9
IE5vUGVuKSB7Ci0gICAgICAgIF9zZXRDb2xvckZyb21QZW4oKTsKLSAgICAgICAgTlNGcmFtZVJl
Y3QoTlNNYWtlUmVjdCh4LCB5LCB3LCBoKSk7CisgICAgICAgIHNldFN0cm9rZUNvbG9yQW5kTGlu
ZVdpZHRoRnJvbUN1cnJlbnRQZW4oKTsKKyAgICAgICAgQ0dDb250ZXh0U3Ryb2tlUmVjdChjb250
ZXh0LCBDR1JlY3RNYWtlKHgsIHksIHcsIGgpKTsKICAgICB9CiB9CiAKLXZvaWQgUVBhaW50ZXI6
Ol9zZXRDb2xvckZyb21CcnVzaCgpCit2b2lkIFFQYWludGVyOjpzZXRGaWxsQ29sb3IoY29uc3Qg
UUJydXNoICZicnVzaCkKK3sKKyAgICBDR0NvbG9yUmVmIGNvbG9yID0gY2dDb2xvcihicnVzaC5j
b2xvcigpKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY3VycmVudENvbnRl
eHQoKSwgY29sb3IpOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yKTsKK30KKwordm9pZCBRUGFp
bnRlcjo6c2V0RmlsbENvbG9yRnJvbUN1cnJlbnRCcnVzaCgpCit7CisgICAgQ0dDb2xvclJlZiBj
b2xvciA9IGNnQ29sb3IoZGF0YS0+c3RhdGUuYnJ1c2guY29sb3IoKSk7CisgICAgQ0dDb250ZXh0
U2V0RmlsbENvbG9yV2l0aENvbG9yKGN1cnJlbnRDb250ZXh0KCksIGNvbG9yKTsKKyAgICBDR0Nv
bG9yUmVsZWFzZShjb2xvcik7Cit9CisKK3ZvaWQgUVBhaW50ZXI6OnNldEZpbGxDb2xvckZyb21D
dXJyZW50UGVuKCkKIHsKLSAgICBbbnNDb2xvcihkYXRhLT5zdGF0ZS5icnVzaC5jb2xvcigpKSBz
ZXRdOworICAgIENHQ29sb3JSZWYgY29sb3IgPSBjZ0NvbG9yKGRhdGEtPnN0YXRlLnBlbi5jb2xv
cigpKTsKKyAgICBDR0NvbnRleHRTZXRGaWxsQ29sb3JXaXRoQ29sb3IoY3VycmVudENvbnRleHQo
KSwgY29sb3IpOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yKTsKIH0KIAotdm9pZCBRUGFpbnRl
cjo6X3NldENvbG9yRnJvbVBlbigpCit2b2lkIFFQYWludGVyOjpzZXRTdHJva2VDb2xvckFuZExp
bmVXaWR0aEZyb21DdXJyZW50UGVuKCkKIHsKLSAgICBbbnNDb2xvcihkYXRhLT5zdGF0ZS5wZW4u
Y29sb3IoKSkgc2V0XTsKKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDb250ZXh0
KCk7CisKKyAgICBDR0NvbG9yUmVmIGNvbG9yID0gY2dDb2xvcihkYXRhLT5zdGF0ZS5wZW4uY29s
b3IoKSk7CisgICAgQ0dDb250ZXh0U2V0U3Ryb2tlQ29sb3JXaXRoQ29sb3IoY29udGV4dCwgY29s
b3IpOworICAgIENHQ29sb3JSZWxlYXNlKGNvbG9yKTsKKworICAgIHVuc2lnbmVkIHdpZHRoID0g
ZGF0YS0+c3RhdGUucGVuLndpZHRoKCk7CisgICAgQ0dDb250ZXh0U2V0TGluZVdpZHRoKGNvbnRl
eHQsIHdpZHRoID4gMCA/IHdpZHRoIDogMSk7CiB9CiAKIC8vIFRoaXMgaXMgb25seSB1c2VkIHRv
IGRyYXcgYm9yZGVycy4KLXZvaWQgUVBhaW50ZXI6OmRyYXdMaW5lKGludCB4MSwgaW50IHkxLCBp
bnQgeDIsIGludCB5MikKK3ZvaWQgUVBhaW50ZXI6OmRyYXdMaW5lKGludCB4MCwgaW50IHkwLCBp
bnQgeDEsIGludCB5MSkKIHsKICAgICBpZiAoZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkK
ICAgICAgICAgcmV0dXJuOwpAQCAtMjEyLDQzICsyNTUsMzggQEAgdm9pZCBRUGFpbnRlcjo6ZHJh
d0xpbmUoaW50IHgxLCBpbnQgeTEsIAogICAgIFBlblN0eWxlIHBlblN0eWxlID0gZGF0YS0+c3Rh
dGUucGVuLnN0eWxlKCk7CiAgICAgaWYgKHBlblN0eWxlID09IE5vUGVuKQogICAgICAgICByZXR1
cm47Ci0gICAgZmxvYXQgd2lkdGggPSBkYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKTsKKyAgICBpbnQg
d2lkdGggPSBkYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKTsKICAgICBpZiAod2lkdGggPCAxKQogICAg
ICAgICB3aWR0aCA9IDE7CiAKLSAgICBOU1BvaW50IHAxID0gTlNNYWtlUG9pbnQoeDEsIHkxKTsK
LSAgICBOU1BvaW50IHAyID0gTlNNYWtlUG9pbnQoeDIsIHkyKTsKKyAgICBDR1BvaW50IHBvaW50
c1syXSA9IHsgeyB4MCwgeTAgfSwgeyB4MSwgeTEgfSB9OwogICAgIAogICAgIC8vIEZvciBvZGQg
d2lkdGhzLCB3ZSBhZGQgaW4gMC41IHRvIHRoZSBhcHByb3ByaWF0ZSB4L3kgc28gdGhhdCB0aGUg
ZmxvYXQgYXJpdGhtZXRpYwotICAgIC8vIHdvcmtzIG91dC4gIEZvciBleGFtcGxlLCB3aXRoIGEg
Ym9yZGVyIHdpZHRoIG9mIDMsIEtIVE1MIHdpbGwgcGFzcyB1cyAoeTEreTIpLzIsIGUuZy4sCisg
ICAgLy8gd29ya3Mgb3V0LiAgRm9yIGV4YW1wbGUsIHdpdGggYSBib3JkZXIgd2lkdGggb2YgMywg
S0hUTUwgd2lsbCBwYXNzIHVzICh5MCt5MSkvMiwgZS5nLiwKICAgICAvLyAoNTArNTMpLzIgPSAx
MDMvMiA9IDUxIHdoZW4gd2Ugd2FudCA1MS41LiAgSXQgaXMgYWx3YXlzIHRydWUgdGhhdCBhbiBl
dmVuIHdpZHRoIGdhdmUKICAgICAvLyB1cyBhIHBlcmZlY3QgcG9zaXRpb24sIGJ1dCBhbiBvZGQg
d2lkdGggZ2F2ZSB1cyBhIHBvc2l0aW9uIHRoYXQgaXMgb2ZmIGJ5IGV4YWN0bHkgMC41LgorCiAg
ICAgaWYgKHBlblN0eWxlID09IERvdExpbmUgfHwgcGVuU3R5bGUgPT0gRGFzaExpbmUpIHsKLSAg
ICAgICAgaWYgKHgxID09IHgyKSB7Ci0gICAgICAgICAgICBwMS55ICs9IHdpZHRoOwotICAgICAg
ICAgICAgcDIueSAtPSB3aWR0aDsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKLSAgICAgICAg
ICAgIHAxLnggKz0gd2lkdGg7Ci0gICAgICAgICAgICBwMi54IC09IHdpZHRoOworICAgICAgICBp
ZiAoeDAgPT0geDEpIHsKKyAgICAgICAgICAgIHBvaW50c1swXS55ICs9IHdpZHRoOworICAgICAg
ICAgICAgcG9pbnRzWzFdLnkgLT0gd2lkdGg7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
ICBwb2ludHNbMF0ueCArPSB3aWR0aDsKKyAgICAgICAgICAgIHBvaW50c1sxXS54IC09IHdpZHRo
OwogICAgICAgICB9CiAgICAgfQogICAgIAotICAgIGlmICgoKGludCl3aWR0aCklMikgewotICAg
ICAgICBpZiAoeDEgPT0geDIpIHsKKyAgICBpZiAod2lkdGggJSAyKSB7CisgICAgICAgIGlmICh4
MCA9PSB4MSkgewogICAgICAgICAgICAgLy8gV2UncmUgYSB2ZXJ0aWNhbCBsaW5lLiAgQWRqdXN0
IG91ciB4LgotICAgICAgICAgICAgcDEueCArPSAwLjU7Ci0gICAgICAgICAgICBwMi54ICs9IDAu
NTsKLSAgICAgICAgfQotICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIHBvaW50c1swXS54ICs9
IDAuNTsKKyAgICAgICAgICAgIHBvaW50c1sxXS54ICs9IDAuNTsKKyAgICAgICAgfSBlbHNlIHsK
ICAgICAgICAgICAgIC8vIFdlJ3JlIGEgaG9yaXpvbnRhbCBsaW5lLiBBZGp1c3Qgb3VyIHkuCi0g
ICAgICAgICAgICBwMS55ICs9IDAuNTsKLSAgICAgICAgICAgIHAyLnkgKz0gMC41OworICAgICAg
ICAgICAgcG9pbnRzWzBdLnkgKz0gMC41OworICAgICAgICAgICAgcG9pbnRzWzFdLnkgKz0gMC41
OwogICAgICAgICB9CiAgICAgfQotICAgIAotICAgIE5TQmV6aWVyUGF0aCAqcGF0aCA9IFtbTlNC
ZXppZXJQYXRoIGFsbG9jXSBpbml0XTsKLSAgICBbcGF0aCBzZXRMaW5lV2lkdGg6d2lkdGhdOwog
CiAgICAgaW50IHBhdFdpZHRoID0gMDsKICAgICBzd2l0Y2ggKHBlblN0eWxlKSB7CkBAIC0yNTYs
NTQgKzI5NCw1OSBAQCB2b2lkIFFQYWludGVyOjpkcmF3TGluZShpbnQgeDEsIGludCB5MSwgCiAg
ICAgY2FzZSBTb2xpZExpbmU6CiAgICAgICAgIGJyZWFrOwogICAgIGNhc2UgRG90TGluZToKLSAg
ICAgICAgcGF0V2lkdGggPSAoaW50KXdpZHRoOworICAgICAgICBwYXRXaWR0aCA9IHdpZHRoOwog
ICAgICAgICBicmVhazsKICAgICBjYXNlIERhc2hMaW5lOgotICAgICAgICBwYXRXaWR0aCA9IDMq
KGludCl3aWR0aDsKKyAgICAgICAgcGF0V2lkdGggPSAzICogd2lkdGg7CiAgICAgICAgIGJyZWFr
OwogICAgIH0KIAotICAgIF9zZXRDb2xvckZyb21QZW4oKTsKLSAgICAKLSAgICBOU0dyYXBoaWNz
Q29udGV4dCAqZ3JhcGhpY3NDb250ZXh0ID0gW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250
ZXh0XTsKLSAgICBCT09MIGZsYWcgPSBbZ3JhcGhpY3NDb250ZXh0IHNob3VsZEFudGlhbGlhc107
Ci0gICAgW2dyYXBoaWNzQ29udGV4dCBzZXRTaG91bGRBbnRpYWxpYXM6IE5PXTsKKyAgICBDR0Nv
bnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CisKKyAgICBDR0NvbnRleHRTYXZl
R1N0YXRlKGNvbnRleHQpOworCisgICAgQ0dDb250ZXh0U2V0U2hvdWxkQW50aWFsaWFzKGNvbnRl
eHQsIEZBTFNFKTsKICAgICAKKyAgICBzZXRTdHJva2VDb2xvckFuZExpbmVXaWR0aEZyb21DdXJy
ZW50UGVuKCk7CisgICAgICAgIAogICAgIGlmIChwYXRXaWR0aCkgewotICAgICAgICAvLyBEbyBh
IHJlY3QgZmlsbCBvZiBvdXIgZW5kcG9pbnRzLiAgVGhpcyBlbnN1cmVzIHdlIGFsd2F5cyBoYXZl
IHRoZQotICAgICAgICAvLyBhcHBlYXJhbmNlIG9mIGJlaW5nIGEgYm9yZGVyLiAgV2UgdGhlbiBk
cmF3IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgotICAgICAgICBpZiAoeDEgPT0geDIp
IHsKLSAgICAgICAgICAgIF9maWxsUmVjdFhYKHAxLngtd2lkdGgvMiwgcDEueS13aWR0aCwgd2lk
dGgsIHdpZHRoLCBkYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7Ci0gICAgICAgICAgICBfZmlsbFJl
Y3RYWChwMi54LXdpZHRoLzIsIHAyLnksIHdpZHRoLCB3aWR0aCwgZGF0YS0+c3RhdGUucGVuLmNv
bG9yKCkpOwotICAgICAgICB9Ci0gICAgICAgIGVsc2UgewotICAgICAgICAgICAgX2ZpbGxSZWN0
WFgocDEueC13aWR0aCwgcDEueS13aWR0aC8yLCB3aWR0aCwgd2lkdGgsIGRhdGEtPnN0YXRlLnBl
bi5jb2xvcigpKTsKLSAgICAgICAgICAgIF9maWxsUmVjdFhYKHAyLngsIHAyLnktd2lkdGgvMiwg
d2lkdGgsIHdpZHRoLCBkYXRhLT5zdGF0ZS5wZW4uY29sb3IoKSk7CisgICAgICAgIC8vIERvIGEg
cmVjdCBmaWxsIG9mIG91ciBlbmRwb2ludHMuIFRoaXMgZW5zdXJlcyB3ZSBhbHdheXMgaGF2ZSB0
aGUKKyAgICAgICAgLy8gYXBwZWFyYW5jZSBvZiBiZWluZyBhIGJvcmRlci4gV2UgdGhlbiBkcmF3
IHRoZSBhY3R1YWwgZG90dGVkL2Rhc2hlZCBsaW5lLgorICAgICAgICAvLyBGSVhNRTogQ2FuIHdl
IHVzZSBDR0NvbnRleHRTZXRMaW5lQ2FwIGluc3RlYWQ/CisgICAgICAgIHNldEZpbGxDb2xvckZy
b21DdXJyZW50UGVuKCk7CisgICAgICAgIENHUmVjdCByZWN0c1syXTsKKyAgICAgICAgaWYgKHgw
ID09IHgxKSB7CisgICAgICAgICAgICByZWN0c1swXSA9IENHUmVjdE1ha2UocG9pbnRzWzBdLngg
LSB3aWR0aCAvIDIsIHBvaW50c1swXS55IC0gd2lkdGgsIHdpZHRoLCB3aWR0aCk7CisgICAgICAg
ICAgICByZWN0c1sxXSA9IENHUmVjdE1ha2UocG9pbnRzWzFdLnggLSB3aWR0aCAvIDIsIHBvaW50
c1sxXS55LCB3aWR0aCwgd2lkdGgpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgcmVj
dHNbMF0gPSBDR1JlY3RNYWtlKHBvaW50c1swXS54IC0gd2lkdGgsIHBvaW50c1swXS55LXdpZHRo
IC8gMiwgd2lkdGgsIHdpZHRoKTsKKyAgICAgICAgICAgIHJlY3RzWzFdID0gQ0dSZWN0TWFrZShw
b2ludHNbMV0ueCwgcG9pbnRzWzFdLnkgLSB3aWR0aCAvIDIsIHdpZHRoLCB3aWR0aCk7CiAgICAg
ICAgIH0KKyAgICAgICAgQ0dDb250ZXh0RmlsbFJlY3RzKGNvbnRleHQsIHJlY3RzLCAyKTsKICAg
ICAgICAgCiAgICAgICAgIC8vIEV4YW1wbGU6IDgwIHBpeGVscyB3aXRoIGEgd2lkdGggb2YgMzAg
cGl4ZWxzLgogICAgICAgICAvLyBSZW1haW5kZXIgaXMgMjAuICBUaGUgbWF4aW11bSBwaXhlbHMg
b2YgbGluZSB3ZSBjb3VsZCBwYWludAogICAgICAgICAvLyB3aWxsIGJlIDUwIHBpeGVscy4KLSAg
ICAgICAgaW50IGRpc3RhbmNlID0gKCh4MSA9PSB4MikgPyAoeTIgLSB5MSkgOiAoeDIgLSB4MSkp
IC0gMiooaW50KXdpZHRoOwotICAgICAgICBpbnQgcmVtYWluZGVyID0gZGlzdGFuY2UlcGF0V2lk
dGg7Ci0gICAgICAgIGludCBjb3ZlcmFnZSA9IGRpc3RhbmNlLXJlbWFpbmRlcjsKLSAgICAgICAg
aW50IG51bVNlZ21lbnRzID0gY292ZXJhZ2UvcGF0V2lkdGg7CisgICAgICAgIGludCBkaXN0YW5j
ZSA9ICgoeDAgPT0geDEpID8gKHkxIC0geTApIDogKHgxIC0geDApKSAtIDIgKiB3aWR0aDsKKyAg
ICAgICAgaW50IHJlbWFpbmRlciA9IGRpc3RhbmNlICUgcGF0V2lkdGg7CisgICAgICAgIGludCBj
b3ZlcmFnZSA9IGRpc3RhbmNlIC0gcmVtYWluZGVyOworICAgICAgICBpbnQgbnVtU2VnbWVudHMg
PSBjb3ZlcmFnZSAvIHBhdFdpZHRoOwogCiAgICAgICAgIGZsb2F0IHBhdHRlcm5PZmZzZXQgPSAw
OwogICAgICAgICAvLyBTcGVjaWFsIGNhc2UgMXB4IGRvdHRlZCBib3JkZXJzIGZvciBzcGVlZC4K
ICAgICAgICAgaWYgKHBhdFdpZHRoID09IDEpCi0gICAgICAgICAgICBwYXR0ZXJuT2Zmc2V0ID0g
MS4wOworICAgICAgICAgICAgcGF0dGVybk9mZnNldCA9IDE7CiAgICAgICAgIGVsc2UgewotICAg
ICAgICAgICAgYm9vbCBldmVuTnVtYmVyT2ZTZWdtZW50cyA9IG51bVNlZ21lbnRzJTIgPT0gMDsK
KyAgICAgICAgICAgIGJvb2wgZXZlbk51bWJlck9mU2VnbWVudHMgPSBudW1TZWdtZW50cyAlIDIg
PT0gMDsKICAgICAgICAgICAgIGlmIChyZW1haW5kZXIpCiAgICAgICAgICAgICAgICAgZXZlbk51
bWJlck9mU2VnbWVudHMgPSAhZXZlbk51bWJlck9mU2VnbWVudHM7CiAgICAgICAgICAgICBpZiAo
ZXZlbk51bWJlck9mU2VnbWVudHMpIHsKICAgICAgICAgICAgICAgICBpZiAocmVtYWluZGVyKSB7
CiAgICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcGF0V2lkdGggLSByZW1haW5k
ZXI7Ci0gICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyLzI7Cisg
ICAgICAgICAgICAgICAgICAgIHBhdHRlcm5PZmZzZXQgKz0gcmVtYWluZGVyIC8gMjsKICAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZWxzZQotICAgICAgICAgICAgICAgICAgICBw
YXR0ZXJuT2Zmc2V0ID0gcGF0V2lkdGgvMjsKKyAgICAgICAgICAgICAgICAgICAgcGF0dGVybk9m
ZnNldCA9IHBhdFdpZHRoIC8gMjsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGVsc2UgaWYg
KCFldmVuTnVtYmVyT2ZTZWdtZW50cykgewogICAgICAgICAgICAgICAgIGlmIChyZW1haW5kZXIp
CkBAIC0zMTIsODEgKzM1NSw1MiBAQCB2b2lkIFFQYWludGVyOjpkcmF3TGluZShpbnQgeDEsIGlu
dCB5MSwgCiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAgIGNvbnN0IGZsb2F0IGRvdHRlZExp
bmVbMl0gPSB7IHBhdFdpZHRoLCBwYXRXaWR0aCB9OwotICAgICAgICBbcGF0aCBzZXRMaW5lRGFz
aDpkb3R0ZWRMaW5lIGNvdW50OjIgcGhhc2U6cGF0dGVybk9mZnNldF07CisgICAgICAgIENHQ29u
dGV4dFNldExpbmVEYXNoKGNvbnRleHQsIHBhdHRlcm5PZmZzZXQsIGRvdHRlZExpbmUsIDIpOwog
ICAgIH0KICAgICAKLSAgICBbcGF0aCBtb3ZlVG9Qb2ludDpwMV07Ci0gICAgW3BhdGggbGluZVRv
UG9pbnQ6cDJdOwotCi0gICAgW3BhdGggc3Ryb2tlXTsKLSAgICAKLSAgICBbcGF0aCByZWxlYXNl
XTsKKyAgICBDR0NvbnRleHRTdHJva2VMaW5lU2VnbWVudHMoY29udGV4dCwgcG9pbnRzLCAyKTsK
IAotICAgIFtncmFwaGljc0NvbnRleHQgc2V0U2hvdWxkQW50aWFsaWFzOiBmbGFnXTsKKyAgICBD
R0NvbnRleHRSZXN0b3JlR1N0YXRlKGNvbnRleHQpOwogfQogCiAKIC8vIFRoaXMgbWV0aG9kIGlz
IG9ubHkgdXNlZCB0byBkcmF3IHRoZSBsaXR0bGUgY2lyY2xlcyB1c2VkIGluIGxpc3RzLgogdm9p
ZCBRUGFpbnRlcjo6ZHJhd0VsbGlwc2UoaW50IHgsIGludCB5LCBpbnQgdywgaW50IGgpCiB7Ci0g
ICAgLy8gRklYTUU6IENHIGFkZGVkIENHQ29udGV4dEFkZEVsbGlwc2VpblJlY3QgaW4gVGlnZXIs
IHNvIHdlIHNob3VsZCBiZSBhYmxlIHRvIHF1aXRlIGVhc2lseSBkcmF3IGFuIGVsbGlwc2UuCi0g
ICAgLy8gVGhpcyBjb2RlIGNhbiBvbmx5IGhhbmRsZSBjaXJjbGVzLCBub3QgZWxsaXBzZXMuIEJ1
dCBraHRtbCBvbmx5Ci0gICAgLy8gdXNlcyBpdCBmb3IgY2lyY2xlcy4KLSAgICBBU1NFUlQodyA9
PSBoKTsKLQogICAgIGlmIChkYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQogICAgICAgICBy
ZXR1cm47CiAgICAgICAgIAotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJl
ZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwotICAg
IENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsKLSAgICBmbG9hdCByID0gKGZsb2F0KXcgLyAy
OwotICAgIENHQ29udGV4dEFkZEFyYyhjb250ZXh0LCB4ICsgciwgeSArIHIsIHIsIDAsIDIqTV9Q
SSwgdHJ1ZSk7Ci0gICAgQ0dDb250ZXh0Q2xvc2VQYXRoKGNvbnRleHQpOworICAgIENHQ29udGV4
dFJlZiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKIAogICAgIGlmIChkYXRhLT5zdGF0ZS5i
cnVzaC5zdHlsZSgpICE9IE5vQnJ1c2gpIHsKLSAgICAgICAgX3NldENvbG9yRnJvbUJydXNoKCk7
Ci0JaWYgKGRhdGEtPnN0YXRlLnBlbi5zdHlsZSgpICE9IE5vUGVuKSB7Ci0JICAgIC8vIHN0cm9r
ZSBhbmQgZmlsbAotCSAgICBfc2V0Q29sb3JGcm9tUGVuKCk7Ci0JICAgIHVpbnQgcGVuV2lkdGgg
PSBkYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKTsKLQkgICAgaWYgKHBlbldpZHRoID09IDApIAotCQlw
ZW5XaWR0aCsrOwotCSAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgcGVuV2lkdGgp
OwotCSAgICBDR0NvbnRleHREcmF3UGF0aChjb250ZXh0LCBrQ0dQYXRoRmlsbFN0cm9rZSk7Ci0J
fSBlbHNlIHsKLQkgICAgQ0dDb250ZXh0RmlsbFBhdGgoY29udGV4dCk7Ci0JfQorICAgICAgICBz
ZXRGaWxsQ29sb3JGcm9tQ3VycmVudEJydXNoKCk7CisgICAgICAgIENHQ29udGV4dEZpbGxFbGxp
cHNlSW5SZWN0KGNvbnRleHQsIENHUmVjdE1ha2UoeCwgeSwgdywgaCkpOwogICAgIH0KKwogICAg
IGlmIChkYXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBOb1BlbikgewotICAgICAgICBfc2V0Q29s
b3JGcm9tUGVuKCk7Ci0JdWludCBwZW5XaWR0aCA9IGRhdGEtPnN0YXRlLnBlbi53aWR0aCgpOwot
CWlmIChwZW5XaWR0aCA9PSAwKSAKLQkgICAgcGVuV2lkdGgrKzsKLSAgICAgICAgQ0dDb250ZXh0
U2V0TGluZVdpZHRoKGNvbnRleHQsIHBlbldpZHRoKTsKLSAgICAgICAgQ0dDb250ZXh0U3Ryb2tl
UGF0aChjb250ZXh0KTsKKyAgICAgICAgc2V0U3Ryb2tlQ29sb3JBbmRMaW5lV2lkdGhGcm9tQ3Vy
cmVudFBlbigpOworICAgICAgICBDR0NvbnRleHRTdHJva2VFbGxpcHNlSW5SZWN0KGNvbnRleHQs
IENHUmVjdE1ha2UoeCwgeSwgdywgaCkpOwogICAgIH0KIH0KIAotCi12b2lkIFFQYWludGVyOjpk
cmF3QXJjIChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGEsIGludCBhbGVuKQordm9p
ZCBRUGFpbnRlcjo6ZHJhd0FyYyhpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgaW50IGEsIGlu
dCBhbGVuKQogeyAKLSAgICAvLyBPbmx5IHN1cHBvcnRzIGFyYyBvbiBjaXJjbGVzLiAgVGhhdCdz
IGFsbCBraHRtbCBuZWVkcy4KKyAgICAvLyBPbmx5IHN1cHBvcnRzIGFyYyBvbiBjaXJjbGVzLiBU
aGF0J3MgYWxsIEtIVE1MIG5lZWRzLgogICAgIEFTU0VSVCh3ID09IGgpOwogCiAgICAgaWYgKGRh
dGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCiAgICAgICAgIHJldHVybjsKLSAgICAKKwogICAg
IGlmIChkYXRhLT5zdGF0ZS5wZW4uc3R5bGUoKSAhPSBOb1BlbikgewotICAgICAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50
Q29udGV4dF0gZ3JhcGhpY3NQb3J0XTsKKyAgICAgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBj
dXJyZW50Q29udGV4dCgpOworCiAgICAgICAgIENHQ29udGV4dEJlZ2luUGF0aChjb250ZXh0KTsK
LQkKLQlmbG9hdCByID0gKGZsb2F0KXcgLyAyOwotICAgICAgICBmbG9hdCBmYSA9IChmbG9hdClh
IC8gMTY7Ci0gICAgICAgIGZsb2F0IGZhbGVuID0gIGZhICsgKGZsb2F0KWFsZW4gLyAxNjsKKwlm
bG9hdCByID0gdyAvIDIuZjsKKyAgICAgICAgZmxvYXQgZmEgPSBhIC8gMTYuZjsKKyAgICAgICAg
ZmxvYXQgZmFsZW4gPSBmYSArIGFsZW4gLyAxNi5mOwogICAgICAgICBDR0NvbnRleHRBZGRBcmMo
Y29udGV4dCwgeCArIHIsIHkgKyByLCByLCAtZmEgKiBNX1BJLzE4MCwgLWZhbGVuICogTV9QSS8x
ODAsIHRydWUpOwotCQotICAgICAgICBfc2V0Q29sb3JGcm9tUGVuKCk7Ci0gICAgICAgIENHQ29u
dGV4dFNldExpbmVXaWR0aChjb250ZXh0LCBkYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKSk7CisKKyAg
ICAgICAgc2V0U3Ryb2tlQ29sb3JBbmRMaW5lV2lkdGhGcm9tQ3VycmVudFBlbigpOwogICAgICAg
ICBDR0NvbnRleHRTdHJva2VQYXRoKGNvbnRleHQpOwogICAgIH0KIH0KQEAgLTQwMCw3ICs0MTQs
NyBAQCB2b2lkIFFQYWludGVyOjpkcmF3Q29udmV4UG9seWdvbihjb25zdCBRCiAgICAgaWYgKG5w
b2ludHMgPD0gMSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgQ0dDb250ZXh0UmVmIGNvbnRleHQg
PSAoQ0dDb250ZXh0UmVmKVtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBo
aWNzUG9ydF07CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgpOwog
CiAgICAgQ0dDb250ZXh0U2F2ZUdTdGF0ZShjb250ZXh0KTsKIApAQCAtNDEyLDE2ICs0MjYsMjAg
QEAgdm9pZCBRUGFpbnRlcjo6ZHJhd0NvbnZleFBvbHlnb24oY29uc3QgUQogICAgICAgICBDR0Nv
bnRleHRBZGRMaW5lVG9Qb2ludChjb250ZXh0LCBwb2ludHNbaV0ueCgpLCBwb2ludHNbaV0ueSgp
KTsKICAgICBDR0NvbnRleHRDbG9zZVBhdGgoY29udGV4dCk7CiAKLSAgICBpZiAoZGF0YS0+c3Rh
dGUuYnJ1c2guc3R5bGUoKSAhPSBOb0JydXNoKSB7Ci0gICAgICAgIF9zZXRDb2xvckZyb21CcnVz
aCgpOwotICAgICAgICBDR0NvbnRleHRFT0ZpbGxQYXRoKGNvbnRleHQpOwotICAgIH0KKyAgICBi
b29sIGdvdEJydXNoID0gZGF0YS0+c3RhdGUuYnJ1c2guc3R5bGUoKSAhPSBOb0JydXNoOworICAg
IGJvb2wgZ290UGVuID0gZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gTm9QZW47CiAKLSAgICBp
ZiAoZGF0YS0+c3RhdGUucGVuLnN0eWxlKCkgIT0gTm9QZW4pIHsKLSAgICAgICAgX3NldENvbG9y
RnJvbVBlbigpOwotICAgICAgICBDR0NvbnRleHRTZXRMaW5lV2lkdGgoY29udGV4dCwgZGF0YS0+
c3RhdGUucGVuLndpZHRoKCkpOworICAgIGlmIChnb3RCcnVzaCkKKyAgICAgICAgc2V0RmlsbENv
bG9yRnJvbUN1cnJlbnRCcnVzaCgpOworICAgIGlmIChnb3RQZW4pCisgICAgICAgIHNldFN0cm9r
ZUNvbG9yQW5kTGluZVdpZHRoRnJvbUN1cnJlbnRQZW4oKTsKKworICAgIGlmIChnb3RCcnVzaCAm
JiBnb3RQZW4pCisgICAgICAgIENHQ29udGV4dERyYXdQYXRoKGNvbnRleHQsIGtDR1BhdGhFT0Zp
bGxTdHJva2UpOworICAgIGVsc2UgaWYgKGdvdEJydXNoKQorICAgICAgICBDR0NvbnRleHRFT0Zp
bGxQYXRoKGNvbnRleHQpOworICAgIGVsc2UgaWYgKGdvdFBlbikKICAgICAgICAgQ0dDb250ZXh0
U3Ryb2tlUGF0aChjb250ZXh0KTsKLSAgICB9CiAKICAgICBDR0NvbnRleHRSZXN0b3JlR1N0YXRl
KGNvbnRleHQpOwogfQpAQCAtNDM2LDU5ICs0NTQsMzAgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd1Bp
eG1hcChjb25zdCBRUG9pbnQgJgogICAgIGRyYXdQaXhtYXAocC54KCksIHAueSgpLCBwaXgsIHIu
eCgpLCByLnkoKSwgci53aWR0aCgpLCByLmhlaWdodCgpKTsKIH0KIAotc3RydWN0IENvbXBvc2l0
ZU9wZXJhdG9yCi17Ci0gICAgY29uc3QgY2hhciAqbmFtZTsKLSAgICBOU0NvbXBvc2l0aW5nT3Bl
cmF0aW9uIHZhbHVlOwotfTsKLQotY29uc3QgaW50IE5VTV9DT01QT1NJVEVfT1BFUkFUT1JTID0g
MTQ7Ci0KLXN0cnVjdCBDb21wb3NpdGVPcGVyYXRvciBjb21wb3NpdGVPcGVyYXRvcnNbTlVNX0NP
TVBPU0lURV9PUEVSQVRPUlNdID0gewotICAgIHsgImNsZWFyIiwgTlNDb21wb3NpdGVDbGVhciB9
LAotICAgIHsgImNvcHkiLCBOU0NvbXBvc2l0ZUNvcHkgfSwKLSAgICB7ICJzb3VyY2Utb3ZlciIs
IE5TQ29tcG9zaXRlU291cmNlT3ZlciB9LAotICAgIHsgInNvdXJjZS1pbiIsIE5TQ29tcG9zaXRl
U291cmNlSW4gfSwKLSAgICB7ICJzb3VyY2Utb3V0IiwgTlNDb21wb3NpdGVTb3VyY2VPdXQgfSwK
LSAgICB7ICJzb3VyY2UtYXRvcCIsIE5TQ29tcG9zaXRlU291cmNlQXRvcCB9LAotICAgIHsgImRl
c3RpbmF0aW9uLW92ZXIiLCBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uT3ZlciB9LAotICAgIHsgImRl
c3RpbmF0aW9uLWluIiwgTlNDb21wb3NpdGVEZXN0aW5hdGlvbkluIH0sCi0gICAgeyAiZGVzdGlu
YXRpb24tb3V0IiwgTlNDb21wb3NpdGVEZXN0aW5hdGlvbk91dCB9LAotICAgIHsgImRlc3RpbmF0
aW9uLWF0b3AiLCBOU0NvbXBvc2l0ZURlc3RpbmF0aW9uQXRvcCB9LAotICAgIHsgInhvciIsIE5T
Q29tcG9zaXRlWE9SIH0sCi0gICAgeyAiZGFya2VyIiwgTlNDb21wb3NpdGVQbHVzRGFya2VyIH0s
Ci0gICAgeyAiaGlnaGxpZ2h0IiwgTlNDb21wb3NpdGVIaWdobGlnaHQgfSwKLSAgICB7ICJsaWdo
dGVyIiwgTlNDb21wb3NpdGVQbHVzTGlnaHRlciB9Ci19OwotCiBpbnQgUVBhaW50ZXI6OmdldENv
bXBvc2l0ZU9wZXJhdGlvbihDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICByZXR1cm4gKGlu
dClbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5XSBDR0NvbXBvc2l0
ZU9wZXJhdGlvbkluQ29udGV4dDpjb250ZXh0XTsKKyAgICByZXR1cm4gW1tXZWJDb3JlSW1hZ2VS
ZW5kZXJlckZhY3Rvcnkgc2hhcmVkRmFjdG9yeV0gQ0dDb21wb3NpdGVPcGVyYXRpb25JbkNvbnRl
eHQ6Y29udGV4dF07CiB9CiAKLXZvaWQgUVBhaW50ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlvbiAo
Q0dDb250ZXh0UmVmIGNvbnRleHQsIGNvbnN0IFFTdHJpbmcgJm9wKQordm9pZCBRUGFpbnRlcjo6
c2V0Q29tcG9zaXRlT3BlcmF0aW9uKENHQ29udGV4dFJlZiBjb250ZXh0LCBjb25zdCBRU3RyaW5n
ICZvcCkKIHsKLSAgICBbW1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSBzaGFyZWRGYWN0b3J5
XSBzZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbkZyb21TdHJpbmc6b3AuZ2V0TlNTdHJpbmcoKSBpbkNv
bnRleHQ6Y29udGV4dF07CisgICAgW1tXZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3Rvcnkgc2hhcmVk
RmFjdG9yeV0gc2V0Q0dDb21wb3NpdGVPcGVyYXRpb246Y29tcG9zaXRlT3BlcmF0b3JGcm9tU3Ry
aW5nKG9wKSBpbkNvbnRleHQ6Y29udGV4dF07CiB9CiAKLXZvaWQgUVBhaW50ZXI6OnNldENvbXBv
c2l0ZU9wZXJhdGlvbiAoQ0dDb250ZXh0UmVmIGNvbnRleHQsIGludCBvcCkKK3ZvaWQgUVBhaW50
ZXI6OnNldENvbXBvc2l0ZU9wZXJhdGlvbihDR0NvbnRleHRSZWYgY29udGV4dCwgaW50IG9wKQog
ewogICAgIFtbV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5IHNoYXJlZEZhY3RvcnldIHNldENH
Q29tcG9zaXRlT3BlcmF0aW9uOm9wIGluQ29udGV4dDpjb250ZXh0XTsKIH0KIAotaW50IFFQYWlu
dGVyOjpjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcgKGNvbnN0IFFTdHJpbmcgJmFTdHJpbmcp
CitpbnQgUVBhaW50ZXI6OmNvbXBvc2l0ZU9wZXJhdG9yRnJvbVN0cmluZyhjb25zdCBRU3RyaW5n
ICZhU3RyaW5nKQogewotICAgIE5TQ29tcG9zaXRpbmdPcGVyYXRpb24gb3AgPSBOU0NvbXBvc2l0
ZVNvdXJjZU92ZXI7Ci0gICAgCi0gICAgaWYgKGFTdHJpbmcubGVuZ3RoKCkpIHsKKyAgICBpZiAo
IWFTdHJpbmcuaXNFbXB0eSgpKSB7CiAgICAgICAgIGNvbnN0IGNoYXIgKm9wZXJhdG9yU3RyaW5n
ID0gYVN0cmluZy5hc2NpaSgpOwotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IE5VTV9DT01Q
T1NJVEVfT1BFUkFUT1JTOyBpKyspIHsKLSAgICAgICAgICAgIGlmIChzdHJjYXNlY21wIChvcGVy
YXRvclN0cmluZywgY29tcG9zaXRlT3BlcmF0b3JzW2ldLm5hbWUpID09IDApIHsKKyAgICAgICAg
Zm9yIChpbnQgaSA9IDA7IGkgPCBOVU1fQ09NUE9TSVRFX09QRVJBVE9SUzsgKytpKQorICAgICAg
ICAgICAgaWYgKHN0cmNhc2VjbXAob3BlcmF0b3JTdHJpbmcsIGNvbXBvc2l0ZU9wZXJhdG9yc1tp
XS5uYW1lKSA9PSAwKQogICAgICAgICAgICAgICAgIHJldHVybiBjb21wb3NpdGVPcGVyYXRvcnNb
aV0udmFsdWU7Ci0gICAgICAgICAgICB9Ci0gICAgICAgIH0KICAgICB9Ci0gICAgcmV0dXJuIChp
bnQpb3A7CisgICAgcmV0dXJuIE5TQ29tcG9zaXRlU291cmNlT3ZlcjsKIH0KIAogdm9pZCBRUGFp
bnRlcjo6ZHJhd1BpeG1hcChjb25zdCBRUG9pbnQgJnAsIGNvbnN0IFFQaXhtYXAgJnBpeCwgY29u
c3QgUVJlY3QgJnIsIGNvbnN0IFFTdHJpbmcgJmNvbXBvc2l0ZU9wZXJhdG9yKQpAQCAtNDk2LDIw
ICs0ODUsMjAgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd1BpeG1hcChjb25zdCBRUG9pbnQgJgogICAg
IGRyYXdQaXhtYXAocC54KCksIHAueSgpLCBwaXgsIHIueCgpLCByLnkoKSwgci53aWR0aCgpLCBy
LmhlaWdodCgpLCBjb21wb3NpdGVPcGVyYXRvckZyb21TdHJpbmcoY29tcG9zaXRlT3BlcmF0b3Ip
KTsKIH0KIAotdm9pZCBRUGFpbnRlcjo6ZHJhd1BpeG1hcCggaW50IHgsIGludCB5LCBjb25zdCBR
UGl4bWFwICZwaXhtYXAsCi0gICAgICAgICAgICAgICAgICAgICAgICAgICBpbnQgc3gsIGludCBz
eSwgaW50IHN3LCBpbnQgc2gsIGludCBjb21wb3NpdGVPcGVyYXRvciwgQ0dDb250ZXh0UmVmIGNv
bnRleHQpCit2b2lkIFFQYWludGVyOjpkcmF3UGl4bWFwKGludCB4LCBpbnQgeSwgY29uc3QgUVBp
eG1hcCAmcGl4bWFwLAorICAgIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwgaW50IGNv
bXBvc2l0ZU9wZXJhdG9yLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBkcmF3UGl4bWFw
ICh4LCB5LCBzdywgc2gsIHBpeG1hcCwgc3gsIHN5LCBzdywgc2gsIGNvbXBvc2l0ZU9wZXJhdG9y
LCBjb250ZXh0KTsKKyAgICBkcmF3UGl4bWFwKHgsIHksIHN3LCBzaCwgcGl4bWFwLCBzeCwgc3ks
IHN3LCBzaCwgY29tcG9zaXRlT3BlcmF0b3IsIGNvbnRleHQpOwogfQogCi12b2lkIFFQYWludGVy
OjpkcmF3UGl4bWFwKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUVBpeG1hcCAm
cGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHN4LCBpbnQgc3ksIGludCBz
dywgaW50IHNoLCBpbnQgY29tcG9zaXRlT3BlcmF0b3IsIENHQ29udGV4dFJlZiBjb250ZXh0KQor
dm9pZCBRUGFpbnRlcjo6ZHJhd1BpeG1hcChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29u
c3QgUVBpeG1hcCAmcGl4bWFwLAorICAgIGludCBzeCwgaW50IHN5LCBpbnQgc3csIGludCBzaCwg
aW50IGNvbXBvc2l0ZU9wZXJhdG9yLCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKLSAgICBkcmF3
RmxvYXRQaXhtYXAgKChmbG9hdCl4LCAoZmxvYXQpeSwgKGZsb2F0KXcsIChmbG9hdCloLCBwaXht
YXAsIChmbG9hdClzeCwgKGZsb2F0KXN5LCAoZmxvYXQpc3csIChmbG9hdClzaCwgY29tcG9zaXRl
T3BlcmF0b3IsIGNvbnRleHQpOworICAgIGRyYXdGbG9hdFBpeG1hcCh4LCB5LCB3LCBoLCBwaXht
YXAsIHN4LCBzeSwgc3csIHNoLCBjb21wb3NpdGVPcGVyYXRvciwgY29udGV4dCk7CiB9CiAKLXZv
aWQgUVBhaW50ZXI6OmRyYXdGbG9hdFBpeG1hcCggZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywg
ZmxvYXQgaCwgY29uc3QgUVBpeG1hcCAmcGl4bWFwLAotICAgICAgICAgICAgICAgICAgICAgICAg
ICAgZmxvYXQgc3gsIGZsb2F0IHN5LCBmbG9hdCBzdywgZmxvYXQgc2gsIGludCBjb21wb3NpdGVP
cGVyYXRvciwgQ0dDb250ZXh0UmVmIGNvbnRleHQpCit2b2lkIFFQYWludGVyOjpkcmF3RmxvYXRQ
aXhtYXAoZmxvYXQgeCwgZmxvYXQgeSwgZmxvYXQgdywgZmxvYXQgaCwgY29uc3QgUVBpeG1hcCAm
cGl4bWFwLAorICAgIGZsb2F0IHN4LCBmbG9hdCBzeSwgZmxvYXQgc3csIGZsb2F0IHNoLCBpbnQg
Y29tcG9zaXRlT3BlcmF0b3IsIENHQ29udGV4dFJlZiBjb250ZXh0KQogewogICAgIGlmIChkYXRh
LT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQogICAgICAgICByZXR1cm47CkBAIC01MjksMjAgKzUx
OCwyMiBAQCB2b2lkIFFQYWludGVyOjpkcmF3RmxvYXRQaXhtYXAoIGZsb2F0IHgsCiAgICAgCiAg
ICAgS1dRX0JMT0NLX0VYQ0VQVElPTlM7CiAgICAgW3BpeG1hcC5pbWFnZVJlbmRlcmVyIGRyYXdJ
bWFnZUluUmVjdDppblJlY3QKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ZnJvbVJlY3Q6ZnJvbVJlY3QgY29tcG9zaXRlT3BlcmF0b3I6KE5TQ29tcG9zaXRpbmdPcGVyYXRp
b24pY29tcG9zaXRlT3BlcmF0b3IgY29udGV4dDpjb250ZXh0XTsKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIGZyb21SZWN0OmZyb21SZWN0CisgICAgICAgICAgICAgICAgICAgICAg
ICBjb21wb3NpdGVPcGVyYXRvcjooTlNDb21wb3NpdGluZ09wZXJhdGlvbiljb21wb3NpdGVPcGVy
YXRvcgorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGNvbnRleHQ6Y29udGV4dF07
CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9OUzsKIH0KIAotdm9pZCBRUGFpbnRlcjo6ZHJhd1Rp
bGVkUGl4bWFwKCBpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKLQkJCQljb25zdCBRUGl4bWFw
ICZwaXhtYXAsIGludCBzeCwgaW50IHN5LCBDR0NvbnRleHRSZWYgY29udGV4dCkKK3ZvaWQgUVBh
aW50ZXI6OmRyYXdUaWxlZFBpeG1hcChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwKKyAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBjb25zdCBRUGl4bWFwICZwaXhtYXAsIGludCBzeCwg
aW50IHN5LCBDR0NvbnRleHRSZWYgY29udGV4dCkKIHsKICAgICBpZiAoZGF0YS0+c3RhdGUucGFp
bnRpbmdEaXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwogICAgIAogICAgIEtXUV9CTE9DS19FWENF
UFRJT05TOwotICAgIE5TUmVjdCB0ZW1wUmVjdCA9IHsge3gsIHl9LCB7dywgaH0gfTsgLy8gd29y
a2Fyb3VuZCBmb3IgNDIxMzMxNAotICAgIE5TUG9pbnQgdGVtcFBvaW50ID0geyBzeCwgc3kgfTsK
LSAgICBbcGl4bWFwLmltYWdlUmVuZGVyZXIgdGlsZUluUmVjdDp0ZW1wUmVjdCBmcm9tUG9pbnQ6
dGVtcFBvaW50IGNvbnRleHQ6Y29udGV4dF07CisgICAgTlNSZWN0IGluUmVjdCA9IHsgeyB4LCB5
IH0sIHsgdywgaCB9IH07IC8vIHdvcmthcm91bmQgZm9yIDQyMTMzMTQKKyAgICBOU1BvaW50IGZy
b21Qb2ludCA9IHsgc3gsIHN5IH07CisgICAgW3BpeG1hcC5pbWFnZVJlbmRlcmVyIHRpbGVJblJl
Y3Q6aW5SZWN0IGZyb21Qb2ludDpmcm9tUG9pbnQgY29udGV4dDpjb250ZXh0XTsKICAgICBLV1Ff
VU5CTE9DS19FWENFUFRJT05TOwogfQogCkBAIC01NTcsMTIgKzU0OCwxNSBAQCB2b2lkIFFQYWlu
dGVyOjpkcmF3U2NhbGVkQW5kVGlsZWRQaXhtYXAoCiAgICAgICAgIHJldHVybiBkcmF3UGl4bWFw
KHgsIHksIHcsIGgsIHBpeG1hcCwgc3gsIHN5LCBzdywgc2gsIC0xLCBjb250ZXh0KTsKIAogICAg
IEtXUV9CTE9DS19FWENFUFRJT05TOwotICAgIFtwaXhtYXAuaW1hZ2VSZW5kZXJlciBzY2FsZUFu
ZFRpbGVJblJlY3Q6TlNNYWtlUmVjdCh4LCB5LCB3LCBoKSBmcm9tUmVjdDpOU01ha2VSZWN0KHN4
LCBzeSwgc3csIHNoKSAKLSAgICAgICAgICAgICAgICAgICAgICB3aXRoSG9yaXpvbnRhbFRpbGVS
dWxlOihXZWJJbWFnZVRpbGVSdWxlKWhSdWxlIHdpdGhWZXJ0aWNhbFRpbGVSdWxlOihXZWJJbWFn
ZVRpbGVSdWxlKXZSdWxlIGNvbnRleHQ6Y29udGV4dF07CisgICAgW3BpeG1hcC5pbWFnZVJlbmRl
cmVyIHNjYWxlQW5kVGlsZUluUmVjdDpOU01ha2VSZWN0KHgsIHksIHcsIGgpCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICBmcm9tUmVjdDpOU01ha2VSZWN0KHN4LCBzeSwgc3cs
IHNoKSAKKyAgICAgICAgICAgICAgICAgICAgICB3aXRoSG9yaXpvbnRhbFRpbGVSdWxlOihXZWJJ
bWFnZVRpbGVSdWxlKWhSdWxlCisgICAgICAgICAgICAgICAgICAgICAgICB3aXRoVmVydGljYWxU
aWxlUnVsZTooV2ViSW1hZ2VUaWxlUnVsZSl2UnVsZQorICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIGNvbnRleHQ6Y29udGV4dF07CiAgICAgS1dRX1VOQkxPQ0tfRVhDRVBUSU9O
UzsKIH0KIAotdm9pZCBRUGFpbnRlcjo6X3VwZGF0ZVJlbmRlcmVyKCkKK3ZvaWQgUVBhaW50ZXI6
OnVwZGF0ZVRleHRSZW5kZXJlcigpCiB7CiAgICAgaWYgKGRhdGEtPnRleHRSZW5kZXJlciA9PSAw
IHx8IGRhdGEtPnN0YXRlLmZvbnQgIT0gZGF0YS0+dGV4dFJlbmRlcmVyRm9udCkgewogICAgICAg
ICBkYXRhLT50ZXh0UmVuZGVyZXJGb250ID0gZGF0YS0+c3RhdGUuZm9udDsKQEAgLTU4MiwxMiAr
NTc2LDEyIEBAIHZvaWQgUVBhaW50ZXI6OmRyYXdUZXh0KGludCB4LCBpbnQgeSwgaW4KICAgICAg
ICAgcmV0dXJuOwogCiAgICAgLy8gQXZvaWQgYWxsb2NhdGlvbnMsIHVzZSBzdGFjayBhcnJheSB0
byBwYXNzIGZvbnQgZmFtaWxpZXMuICBOb3JtYWxseSB0aGVzZQotICAgIC8vIGNzcyBmYWxsYmFj
ayBsaXN0cyBhcmUgc21hbGwgPD0gMy4KKyAgICAvLyBDU1MgZmFsbGJhY2sgbGlzdHMgYXJlIHNt
YWxsIDw9IDMuCiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShkYXRhLT5zdGF0ZS5mb250LCBmYW1p
bGllcyk7ICAgIAogCi0gICAgX3VwZGF0ZVJlbmRlcmVyKCk7CisgICAgdXBkYXRlVGV4dFJlbmRl
cmVyKCk7CiAKLSAgICBjb25zdCBVbmlDaGFyKiBzdHIgPSAoY29uc3QgVW5pQ2hhciopcXN0cmlu
Zy51bmljb2RlKCk7CisgICAgY29uc3QgVW5pQ2hhciAqc3RyID0gKGNvbnN0IFVuaUNoYXIgKilx
c3RyaW5nLnVuaWNvZGUoKTsKIAogICAgIFdlYkNvcmVUZXh0UnVuIHJ1bjsKICAgICBXZWJDb3Jl
SW5pdGlhbGl6ZVRleHRSdW4oJnJ1biwgc3RyLCBxc3RyaW5nLmxlbmd0aCgpLCAwLCBxc3RyaW5n
Lmxlbmd0aCgpKTsKQEAgLTYwMCw3ICs1OTQsNyBAQCB2b2lkIFFQYWludGVyOjpkcmF3VGV4dChp
bnQgeCwgaW50IHksIGluCiAgICAgc3R5bGUueHBvcyA9IHhwb3M7CiAgICAgCiAgICAgaWYgKGFs
aWdubWVudEZsYWdzICYgUXQ6OkFsaWduUmlnaHQpCi0gICAgICAgIHggLT0gUk9VTkRfVE9fSU5U
KFtkYXRhLT50ZXh0UmVuZGVyZXIgZmxvYXRXaWR0aEZvclJ1bjomcnVuIHN0eWxlOiZzdHlsZSB3
aWR0aHM6MF0pOworICAgICAgICB4IC09IFJPVU5EX1RPX0lOVChbZGF0YS0+dGV4dFJlbmRlcmVy
IGZsb2F0V2lkdGhGb3JSdW46JnJ1biBzdHlsZTomc3R5bGUgd2lkdGhzOk5VTExdKTsKIAogICAg
IFdlYkNvcmVUZXh0R2VvbWV0cnkgZ2VvbWV0cnk7CiAgICAgV2ViQ29yZUluaXRpYWxpemVFbXB0
eVRleHRHZW9tZXRyeSgmZ2VvbWV0cnkpOwpAQCAtNjE3LDcgKzYxMSw3IEBAIHZvaWQgUVBhaW50
ZXI6OmRyYXdUZXh0KGludCB4LCBpbnQgeSwgaW4KICAgICAvLyBjc3MgZmFsbGJhY2sgbGlzdHMg
YXJlIHNtYWxsIDw9IDMuCiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShkYXRhLT5zdGF0ZS5mb250
LCBmYW1pbGllcyk7CiAKLSAgICBfdXBkYXRlUmVuZGVyZXIoKTsKKyAgICB1cGRhdGVUZXh0UmVu
ZGVyZXIoKTsKIAogICAgIGlmIChmcm9tIDwgMCkKICAgICAgICAgZnJvbSA9IDA7CkBAIC02MzAs
NyArNjI0LDcgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd1RleHQoaW50IHgsIGludCB5LCBpbgogICAg
IFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsKICAgICBzdHlsZS50ZXh0
Q29sb3IgPSBuc0NvbG9yKGRhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsKICAgICBzdHlsZS5iYWNr
Z3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpID8gbnNDb2xvcihiYWNrZ3Jv
dW5kQ29sb3IpIDogbmlsOwotICAgIHN0eWxlLnJ0bCA9IGQgPT0gUlRMID8gdHJ1ZSA6IGZhbHNl
OworICAgIHN0eWxlLnJ0bCA9IGQgPT0gUlRMOwogICAgIHN0eWxlLnZpc3VhbGx5T3JkZXJlZCA9
IHZpc3VhbGx5T3JkZXJlZDsKICAgICBzdHlsZS5sZXR0ZXJTcGFjaW5nID0gbGV0dGVyU3BhY2lu
ZzsKICAgICBzdHlsZS53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nOwpAQCAtNjU2LDcgKzY1MCw3
IEBAIHZvaWQgUVBhaW50ZXI6OmRyYXdIaWdobGlnaHRGb3JUZXh0KGludCAKICAgICAvLyBjc3Mg
ZmFsbGJhY2sgbGlzdHMgYXJlIHNtYWxsIDw9IDMuCiAgICAgQ1JFQVRFX0ZBTUlMWV9BUlJBWShk
YXRhLT5zdGF0ZS5mb250LCBmYW1pbGllcyk7CiAKLSAgICBfdXBkYXRlUmVuZGVyZXIoKTsKKyAg
ICB1cGRhdGVUZXh0UmVuZGVyZXIoKTsKIAogICAgIGlmIChmcm9tIDwgMCkKICAgICAgICAgZnJv
bSA9IDA7CkBAIC02NjksNyArNjYzLDcgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd0hpZ2hsaWdodEZv
clRleHQoaW50IAogICAgIFdlYkNvcmVJbml0aWFsaXplRW1wdHlUZXh0U3R5bGUoJnN0eWxlKTsK
ICAgICBzdHlsZS50ZXh0Q29sb3IgPSBuc0NvbG9yKGRhdGEtPnN0YXRlLnBlbi5jb2xvcigpKTsK
ICAgICBzdHlsZS5iYWNrZ3JvdW5kQ29sb3IgPSBiYWNrZ3JvdW5kQ29sb3IuaXNWYWxpZCgpID8g
bnNDb2xvcihiYWNrZ3JvdW5kQ29sb3IpIDogbmlsOwotICAgIHN0eWxlLnJ0bCA9IGQgPT0gUlRM
ID8gdHJ1ZSA6IGZhbHNlOworICAgIHN0eWxlLnJ0bCA9IGQgPT0gUlRMOwogICAgIHN0eWxlLnZp
c3VhbGx5T3JkZXJlZCA9IHZpc3VhbGx5T3JkZXJlZDsKICAgICBzdHlsZS5sZXR0ZXJTcGFjaW5n
ID0gbGV0dGVyU3BhY2luZzsKICAgICBzdHlsZS53b3JkU3BhY2luZyA9IHdvcmRTcGFjaW5nOwpA
QCAtNjkxLDIwICs2ODUsMTkgQEAgdm9pZCBRUGFpbnRlcjo6ZHJhd0xpbmVGb3JUZXh0KGludCB4
LCBpbgogewogICAgIGlmIChkYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQogICAgICAgICBy
ZXR1cm47Ci0gICAgX3VwZGF0ZVJlbmRlcmVyKCk7Ci0gICAgW2RhdGEtPnRleHRSZW5kZXJlcgot
ICAgICAgICBkcmF3TGluZUZvckNoYXJhY3RlcnM6IE5TTWFrZVBvaW50KHgsIHkpCi0gICAgICAg
ICAgICAgICB5T2Zmc2V0OihmbG9hdCl5T2Zmc2V0Ci0gICAgICAgICAgICAgICAgIHdpZHRoOiB3
aWR0aAotICAgICAgICAgICAgICAgICBjb2xvcjpuc0NvbG9yKGRhdGEtPnN0YXRlLnBlbi5jb2xv
cigpKQotICAgICAgICAgICAgIHRoaWNrbmVzczpkYXRhLT5zdGF0ZS5wZW4ud2lkdGgoKV07Cisg
ICAgdXBkYXRlVGV4dFJlbmRlcmVyKCk7CisgICAgW2RhdGEtPnRleHRSZW5kZXJlciBkcmF3TGlu
ZUZvckNoYXJhY3RlcnM6TlNNYWtlUG9pbnQoeCwgeSkKKyAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgeU9mZnNldDp5T2Zmc2V0CisgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgd2lkdGg6d2lkdGgKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICBjb2xvcjpuc0NvbG9yKGRhdGEtPnN0YXRlLnBlbi5jb2xvcigpKQorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdGhpY2tuZXNzOmRhdGEtPnN0YXRlLnBlbi53
aWR0aCgpXTsKIH0KIAogdm9pZCBRUGFpbnRlcjo6ZHJhd0xpbmVGb3JNaXNzcGVsbGluZyhpbnQg
eCwgaW50IHksIGludCB3aWR0aCkKIHsKICAgICBpZiAoZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNh
YmxlZCkKICAgICAgICAgcmV0dXJuOwotICAgIF91cGRhdGVSZW5kZXJlcigpOworICAgIHVwZGF0
ZVRleHRSZW5kZXJlcigpOwogICAgIFtkYXRhLT50ZXh0UmVuZGVyZXIgZHJhd0xpbmVGb3JNaXNz
cGVsbGluZzpOU01ha2VQb2ludCh4LCB5KSB3aXRoV2lkdGg6d2lkdGhdOwogfQogCkBAIC03MTUs
MTEgKzcwOCw3IEBAIGludCBRUGFpbnRlcjo6bWlzc3BlbGxpbmdMaW5lVGhpY2tuZXNzKCkKIAog
c3RhdGljIGludCBnZXRCbGVuZGVkQ29sb3JDb21wb25lbnQoaW50IGMsIGludCBhKQogewotICAg
IC8vIFdlIHVzZSB3aGl0ZS4KLSAgICBmbG9hdCBhbHBoYSA9IChmbG9hdCkoYSkgLyAyNTU7Ci0g
ICAgaW50IHdoaXRlQmxlbmQgPSAyNTUgLSBhOwotICAgIGMgLT0gd2hpdGVCbGVuZDsKLSAgICBy
ZXR1cm4gKGludCkoYy9hbHBoYSk7CisgICAgcmV0dXJuIChjICsgYSAtIDI1NSkgKiAyNTUgLyBh
OwogfQogCiBRQ29sb3IgUVBhaW50ZXI6OnNlbGVjdGVkVGV4dEJhY2tncm91bmRDb2xvcigpIGNv
bnN0CkBAIC03NDIsMzAgKzczMSwzMSBAQCBRQ29sb3IgUVBhaW50ZXI6OnNlbGVjdGVkVGV4dEJh
Y2tncm91bmRDCiAgICAgcmV0dXJuIGNvbDsKIH0KIAotLy8gQSBmaWxsUmVjdCBoZWxwZXIgdG8g
d29yayBhcm91bmQgdGhlIGZhY3QgdGhhdCBOU1JlY3RGaWxsIHVzZXMgY29weSBtb2RlLCBub3Qg
c291cmNlIG92ZXIuCi1zdGF0aWMgaW5saW5lIHZvaWQgX2ZpbGxSZWN0WFgoZmxvYXQgeCwgZmxv
YXQgeSwgZmxvYXQgdywgZmxvYXQgaCwgY29uc3QgUUNvbG9yJiBjb2wpCi17Ci0gICAgW25zQ29s
b3IoY29sKSBzZXRdOwotICAgIE5TUmVjdEZpbGxVc2luZ09wZXJhdGlvbihOU01ha2VSZWN0KHgs
eSx3LGgpLCBOU0NvbXBvc2l0ZVNvdXJjZU92ZXIpOwotfQotCiB2b2lkIFFQYWludGVyOjpmaWxs
UmVjdChpbnQgeCwgaW50IHksIGludCB3LCBpbnQgaCwgY29uc3QgUUJydXNoICZicnVzaCkKIHsK
ICAgICBpZiAoZGF0YS0+c3RhdGUucGFpbnRpbmdEaXNhYmxlZCkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgaWYgKGJydXNoLnN0eWxlKCkgPT0gU29saWRQYXR0ZXJuKQotICAgICAgICBfZmlsbFJl
Y3RYWCh4LCB5LCB3LCBoLCBicnVzaC5jb2xvcigpKTsKKyAgICBpZiAoYnJ1c2guc3R5bGUoKSA9
PSBTb2xpZFBhdHRlcm4pIHsKKyAgICAgICAgc2V0RmlsbENvbG9yKGJydXNoKTsKKyAgICAgICAg
Q0dDb250ZXh0RmlsbFJlY3QoY3VycmVudENvbnRleHQoKSwgQ0dSZWN0TWFrZSh4LCB5LCB3LCBo
KSk7CisgICAgfQogfQogCiB2b2lkIFFQYWludGVyOjpmaWxsUmVjdChjb25zdCBRUmVjdCAmcmVj
dCwgY29uc3QgUUJydXNoICZicnVzaCkKIHsKLSAgICBmaWxsUmVjdChyZWN0LmxlZnQoKSwgcmVj
dC50b3AoKSwgcmVjdC53aWR0aCgpLCByZWN0LmhlaWdodCgpLCBicnVzaCk7CisgICAgaWYgKGRh
dGEtPnN0YXRlLnBhaW50aW5nRGlzYWJsZWQpCisgICAgICAgIHJldHVybjsKKworICAgIGlmIChi
cnVzaC5zdHlsZSgpID09IFNvbGlkUGF0dGVybikgeworICAgICAgICBzZXRGaWxsQ29sb3IoYnJ1
c2gpOworICAgICAgICBDR0NvbnRleHRGaWxsUmVjdChjdXJyZW50Q29udGV4dCgpLCByZWN0KTsK
KyAgICB9CiB9CiAKIHZvaWQgUVBhaW50ZXI6OmFkZENsaXAoY29uc3QgUVJlY3QgJnJlY3QpCiB7
Ci0gICAgW05TQmV6aWVyUGF0aCBjbGlwUmVjdDpyZWN0XTsKKyAgICBDR0NvbnRleHRDbGlwVG9S
ZWN0KGN1cnJlbnRDb250ZXh0KCksIHJlY3QpOwogfQogCiB2b2lkIFFQYWludGVyOjphZGRSb3Vu
ZGVkUmVjdENsaXAoY29uc3QgUVJlY3QmIHJlY3QsIGNvbnN0IFFTaXplJiB0b3BMZWZ0LCBjb25z
dCBRU2l6ZSYgdG9wUmlnaHQsCkBAIC03ODMsOSArNzczLDExIEBAIHZvaWQgUVBhaW50ZXI6OmFk
ZFJvdW5kZWRSZWN0Q2xpcChjb25zdCAKICAgICAvLyBDbGlwIHRvIG91ciByZWN0LgogICAgIGFk
ZENsaXAocmVjdCk7CiAKLSAgICAvLyBPaywgdGhlIGN1cnZlcyBjYW4gZml0LgotICAgIENHQ29u
dGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZikoW1tOU0dyYXBoaWNzQ29udGV4dCBjdXJy
ZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7CisgICAgLy8gT0ssIHRoZSBjdXJ2ZXMgY2FuIGZp
dC4KKyAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IGN1cnJlbnRDb250ZXh0KCk7CiAgICAgCisg
ICAgQ0dDb250ZXh0QmVnaW5QYXRoKGNvbnRleHQpOworCiAgICAgLy8gQWRkIHRoZSBmb3VyIGVs
bGlwc2VzIHRvIHRoZSBwYXRoLiAgVGVjaG5pY2FsbHkgdGhpcyByZWFsbHkgaXNuJ3QgZ29vZCBl
bm91Z2gsIHNpbmNlIHdlIGNvdWxkIGVuZCB1cAogICAgIC8vIG5vdCBjbGlwcGluZyB0aGUgb3Ro
ZXIgMy80IG9mIHRoZSBlbGxpcHNlIHdlIGRvbid0IGNhcmUgYWJvdXQuICBXZSdyZSByZWx5aW5n
IG9uIHRoZSBmYWN0IHRoYXQgZm9yCiAgICAgLy8gbm9ybWFsIHVzZSBjYXNlcyB0aGVzZSBlbGxp
cHNlcyB3b24ndCBvdmVybGFwIG9uZSBhbm90aGVyIChvciB3aGVuIHRoZXkgZG8gdGhlIGN1cnZh
dHVyZSBvZiBvbmUgd2lsbApAQCAtODQwLDI5ICs4MzIsMjkgQEAgYm9vbCBRUGFpbnRlcjo6cGFp
bnRpbmdEaXNhYmxlZCgpIGNvbnN0CiAKIENHQ29udGV4dFJlZiBRUGFpbnRlcjo6Y3VycmVudENv
bnRleHQoKQogewotICAgIHJldHVybiAoQ0dDb250ZXh0UmVmKShbW05TR3JhcGhpY3NDb250ZXh0
IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdKTsKKyAgICByZXR1cm4gKENHQ29udGV4dFJl
ZilbW05TR3JhcGhpY3NDb250ZXh0IGN1cnJlbnRDb250ZXh0XSBncmFwaGljc1BvcnRdOwogfQog
CiB2b2lkIFFQYWludGVyOjpiZWdpblRyYW5zcGFyZW5jeUxheWVyKGZsb2F0IG9wYWNpdHkpCiB7
Ci0gICAgW05TR3JhcGhpY3NDb250ZXh0IHNhdmVHcmFwaGljc1N0YXRlXTsKLSAgICBDR0NvbnRl
eHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRSZWYpKFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVu
dENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3Vy
cmVudENvbnRleHQoKTsKKyAgICBDR0NvbnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOwogICAgIENH
Q29udGV4dFNldEFscGhhKGNvbnRleHQsIG9wYWNpdHkpOwogICAgIENHQ29udGV4dEJlZ2luVHJh
bnNwYXJlbmN5TGF5ZXIoY29udGV4dCwgMCk7CiB9CiAKIHZvaWQgUVBhaW50ZXI6OmVuZFRyYW5z
cGFyZW5jeUxheWVyKCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4dCA9IChDR0NvbnRleHRS
ZWYpKFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdyYXBoaWNzUG9ydF0pOwor
ICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3VycmVudENvbnRleHQoKTsKICAgICBDR0NvbnRl
eHRFbmRUcmFuc3BhcmVuY3lMYXllcihjb250ZXh0KTsKLSAgICBbTlNHcmFwaGljc0NvbnRleHQg
cmVzdG9yZUdyYXBoaWNzU3RhdGVdOworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4
dCk7CiB9CiAKIHZvaWQgUVBhaW50ZXI6OnNldFNoYWRvdyhpbnQgeCwgaW50IHksIGludCBibHVy
LCBjb25zdCBRQ29sb3ImIGNvbG9yKQogewogICAgIC8vIENoZWNrIGZvciBhbiBpbnZhbGlkIGNv
bG9yLCBhcyB0aGlzIG1lYW5zIHRoYXQgdGhlIGNvbG9yIHdhcyBub3Qgc2V0IGZvciB0aGUgc2hh
ZG93CiAgICAgLy8gYW5kIHdlIHNob3VsZCB0aGVyZWZvcmUganVzdCB1c2UgdGhlIGRlZmF1bHQg
c2hhZG93IGNvbG9yLgotICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gKENHQ29udGV4dFJlZiko
W1tOU0dyYXBoaWNzQ29udGV4dCBjdXJyZW50Q29udGV4dF0gZ3JhcGhpY3NQb3J0XSk7CisgICAg
Q0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgpOwogICAgIGlmICghY29sb3Iu
aXNWYWxpZCgpKSB7CiAgICAgICAgIENHQ29udGV4dFNldFNoYWRvdyhjb250ZXh0LCBDR1NpemVN
YWtlKHgsLXkpLCBibHVyKTsgLy8geSBpcyBmbGlwcGVkLgogICAgIH0gZWxzZSB7CkBAIC04Nzcs
MTggKzg2OSwxNiBAQCB2b2lkIFFQYWludGVyOjpzZXRTaGFkb3coaW50IHgsIGludCB5LCBpCiAK
IHZvaWQgUVBhaW50ZXI6OmNsZWFyU2hhZG93KCkKIHsKLSAgICBDR0NvbnRleHRSZWYgY29udGV4
dCA9IChDR0NvbnRleHRSZWYpKFtbTlNHcmFwaGljc0NvbnRleHQgY3VycmVudENvbnRleHRdIGdy
YXBoaWNzUG9ydF0pOworICAgIENHQ29udGV4dFJlZiBjb250ZXh0ID0gY3VycmVudENvbnRleHQo
KTsKICAgICBDR0NvbnRleHRTZXRTaGFkb3dXaXRoQ29sb3IoY29udGV4dCwgQ0dTaXplWmVybywg
MCwgTlVMTCk7CiB9CiAKIHZvaWQgUVBhaW50ZXI6OmluaXRGb2N1c1JpbmcoaW50IHdpZHRoLCBp
bnQgb2Zmc2V0KQogewotICAgIGNsZWFyRm9jdXNSaW5nKCk7CiAgICAgZGF0YS0+Zm9jdXNSaW5n
V2lkdGggPSB3aWR0aDsKICAgICBkYXRhLT5oYXNGb2N1c1JpbmdDb2xvciA9IGZhbHNlOwogICAg
IGRhdGEtPmZvY3VzUmluZ09mZnNldCA9IG9mZnNldDsKLSAgICBkYXRhLT5mb2N1c1JpbmdQYXRo
ID0gS1dRUmV0YWluTlNSZWxlYXNlKFtbTlNCZXppZXJQYXRoIGFsbG9jXSBpbml0XSk7Ci0gICAg
W2RhdGEtPmZvY3VzUmluZ1BhdGggc2V0V2luZGluZ1J1bGU6TlNOb25aZXJvV2luZGluZ1J1bGVd
OworICAgIENHQ29udGV4dEJlZ2luUGF0aChjdXJyZW50Q29udGV4dCgpKTsKIH0KIAogdm9pZCBR
UGFpbnRlcjo6aW5pdEZvY3VzUmluZyhpbnQgd2lkdGgsIGludCBvZmZzZXQsIGNvbnN0IFFDb2xv
ciAmY29sb3IpCkBAIC05MDAsMzkgKzg5MCwyNyBAQCB2b2lkIFFQYWludGVyOjppbml0Rm9jdXNS
aW5nKGludCB3aWR0aCwgCiAKIHZvaWQgUVBhaW50ZXI6OmFkZEZvY3VzUmluZ1JlY3QoaW50IHgs
IGludCB5LCBpbnQgd2lkdGgsIGludCBoZWlnaHQpCiB7Ci0gICAgQVNTRVJUKGRhdGEtPmZvY3Vz
UmluZ1BhdGgpOwotICAgIE5TUmVjdCByZWN0ID0gTlNNYWtlUmVjdCh4LCB5LCB3aWR0aCwgaGVp
Z2h0KTsKLSAgICBpbnQgb2Zmc2V0ID0gKGRhdGEtPmZvY3VzUmluZ1dpZHRoLTEpLzIgKyBkYXRh
LT5mb2N1c1JpbmdPZmZzZXQ7Ci0gICAgcmVjdCA9IE5TSW5zZXRSZWN0KHJlY3QsIC1vZmZzZXQs
IC1vZmZzZXQpOwotICAgIFtkYXRhLT5mb2N1c1JpbmdQYXRoIGFwcGVuZEJlemllclBhdGhXaXRo
UmVjdDpyZWN0XTsKKyAgICBDR1JlY3QgcmVjdCA9IENHUmVjdE1ha2UoeCwgeSwgd2lkdGgsIGhl
aWdodCk7CisgICAgaW50IG9mZnNldCA9IChkYXRhLT5mb2N1c1JpbmdXaWR0aCAtIDEpIC8gMiAr
IGRhdGEtPmZvY3VzUmluZ09mZnNldDsKKyAgICBDR0NvbnRleHRBZGRSZWN0KGN1cnJlbnRDb250
ZXh0KCksIENHUmVjdEluc2V0KHJlY3QsIC1vZmZzZXQsIC1vZmZzZXQpKTsKIH0KIAogdm9pZCBR
UGFpbnRlcjo6ZHJhd0ZvY3VzUmluZygpCiB7Ci0gICAgQVNTRVJUKGRhdGEtPmZvY3VzUmluZ1Bh
dGgpOwogICAgIGlmIChkYXRhLT5zdGF0ZS5wYWludGluZ0Rpc2FibGVkKQogICAgICAgICByZXR1
cm47CiAKLSAgICBpZiAoW2RhdGEtPmZvY3VzUmluZ1BhdGggZWxlbWVudENvdW50XSA9PSAwKSB7
Ci0gICAgICAgIEVSUk9SKCJSZXF1ZXN0IHRvIGRyYXcgZm9jdXMgcmluZyB3aXRoIG5vIGNvbnRy
b2wgcG9pbnRzIik7CisgICAgQ0dDb250ZXh0UmVmIGNvbnRleHQgPSBjdXJyZW50Q29udGV4dCgp
OworICAgIGlmIChDR1JlY3RJc0VtcHR5KENHQ29udGV4dEdldFBhdGhCb3VuZGluZ0JveChjb250
ZXh0KSkpCiAgICAgICAgIHJldHVybjsKLSAgICB9Ci0gICAgCi0gICAgTlNSZWN0IGJvdW5kcyA9
IFtkYXRhLT5mb2N1c1JpbmdQYXRoIGJvdW5kc107Ci0gICAgaWYgKCFOU0lzRW1wdHlSZWN0KGJv
dW5kcykpIHsKLSAgICAgICAgaW50IHJhZGl1cyA9IChkYXRhLT5mb2N1c1JpbmdXaWR0aC0xKS8y
OwotICAgICAgICBOU0NvbG9yICpjb2xvciA9IGRhdGEtPmhhc0ZvY3VzUmluZ0NvbG9yID8gbnND
b2xvcihkYXRhLT5mb2N1c1JpbmdDb2xvcikgOiBuaWw7Ci0gICAgICAgIFtOU0dyYXBoaWNzQ29u
dGV4dCBzYXZlR3JhcGhpY3NTdGF0ZV07Ci0gICAgICAgIFtbV2ViQ29yZUdyYXBoaWNzQnJpZGdl
IHNoYXJlZEJyaWRnZV0gc2V0Rm9jdXNSaW5nU3R5bGU6TlNGb2N1c1JpbmdPbmx5IHJhZGl1czpy
YWRpdXMgY29sb3I6Y29sb3JdOwotICAgICAgICBbZGF0YS0+Zm9jdXNSaW5nUGF0aCBmaWxsXTsK
LSAgICAgICAgW05TR3JhcGhpY3NDb250ZXh0IHJlc3RvcmVHcmFwaGljc1N0YXRlXTsgICAKLSAg
ICB9Ci19CiAKLXZvaWQgUVBhaW50ZXI6OmNsZWFyRm9jdXNSaW5nKCkKLXsKLSAgICBpZiAoZGF0
YS0+Zm9jdXNSaW5nUGF0aCkgewotICAgICAgICBLV1FSZWxlYXNlKGRhdGEtPmZvY3VzUmluZ1Bh
dGgpOwotICAgICAgICBkYXRhLT5mb2N1c1JpbmdQYXRoID0gbmlsOwotICAgIH0KKyAgICBDR0Nv
bnRleHRTYXZlR1N0YXRlKGNvbnRleHQpOworCisgICAgaW50IHJhZGl1cyA9IChkYXRhLT5mb2N1
c1JpbmdXaWR0aCAtIDEpIC8gMjsKKyAgICBOU0NvbG9yICpjb2xvciA9IGRhdGEtPmhhc0ZvY3Vz
UmluZ0NvbG9yID8gbnNDb2xvcihkYXRhLT5mb2N1c1JpbmdDb2xvcikgOiBuaWw7CisgICAgW1tX
ZWJDb3JlR3JhcGhpY3NCcmlkZ2Ugc2hhcmVkQnJpZGdlXSBzZXRGb2N1c1JpbmdTdHlsZTpOU0Zv
Y3VzUmluZ09ubHkgcmFkaXVzOnJhZGl1cyBjb2xvcjpjb2xvcl07CisKKyAgICBDR0NvbnRleHRG
aWxsUGF0aChjb250ZXh0KTsKKworICAgIENHQ29udGV4dFJlc3RvcmVHU3RhdGUoY29udGV4dCk7
CiB9CkluZGV4OiBXZWJDb3JlL2t3cS9XZWJDb3JlSW1hZ2VSZW5kZXJlckZhY3RvcnkuaAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09ClJDUyBmaWxlOiAvY3ZzL3Jvb3QvV2ViQ29yZS9rd3EvV2ViQ29yZUltYWdlUmVuZGVy
ZXJGYWN0b3J5LmgsdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMTAKZGlmZiAtcCAtdSAtcjEuMTAg
V2ViQ29yZS9rd3EvV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5LmgKLS0tIFdlYkNvcmUva3dx
L1dlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeS5oCTcgRGVjIDIwMDQgMjM6MDY6MjQgLTAwMDAJ
MS4xMAorKysgV2ViQ29yZS9rd3EvV2ViQ29yZUltYWdlUmVuZGVyZXJGYWN0b3J5LmgJMSBTZXAg
MjAwNSAwNDo0NjozMSAtMDAwMApAQCAtMzgsMTcgKzM4LDE1IEBACiAtIChOU0FycmF5ICopc3Vw
cG9ydGVkTUlNRVR5cGVzOwogLSAoaW50KUNHQ29tcG9zaXRlT3BlcmF0aW9uSW5Db250ZXh0OihD
R0NvbnRleHRSZWYpY29udGV4dDsKIC0gKHZvaWQpc2V0Q0dDb21wb3NpdGVPcGVyYXRpb246KGlu
dClvcCBpbkNvbnRleHQ6KENHQ29udGV4dFJlZiljb250ZXh0OwotLSAodm9pZClzZXRDR0NvbXBv
c2l0ZU9wZXJhdGlvbkZyb21TdHJpbmc6KE5TU3RyaW5nICopb3AgaW5Db250ZXh0OihDR0NvbnRl
eHRSZWYpY29udGV4dDsKIAogQGVuZAogCiBAaW50ZXJmYWNlIFdlYkNvcmVJbWFnZVJlbmRlcmVy
RmFjdG9yeSA6IE5TT2JqZWN0Ci17Ci19CiAKICsgKFdlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9y
eSAqKXNoYXJlZEZhY3Rvcnk7CiArIChCT09MKXNob3VsZFVzZVRocmVhZGVkRGVjb2Rpbmc7CiAr
ICh2b2lkKXNldFNob3VsZFVzZVRocmVhZGVkRGVjb2Rpbmc6KEJPT0wpZmxhZzsKKwogQGVuZAog
CiBAaW50ZXJmYWNlIFdlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeSAoU3ViY2xhc3NSZXNwb25z
aWJpbGl0eSkgPFdlYkNvcmVJbWFnZVJlbmRlcmVyRmFjdG9yeT4KSW5kZXg6IFdlYktpdC9XZWJD
b3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdlUmVuZGVyZXJGYWN0b3J5Lm0KPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpS
Q1MgZmlsZTogL2N2cy9yb290L1dlYktpdC9XZWJDb3JlU3VwcG9ydC5zdWJwcm9qL1dlYkltYWdl
UmVuZGVyZXJGYWN0b3J5Lm0sdgpyZXRyaWV2aW5nIHJldmlzaW9uIDEuMzEKZGlmZiAtcCAtdSAt
cjEuMzEgV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViSW1hZ2VSZW5kZXJlckZhY3Rv
cnkubQotLS0gV2ViS2l0L1dlYkNvcmVTdXBwb3J0LnN1YnByb2ovV2ViSW1hZ2VSZW5kZXJlckZh
Y3RvcnkubQkxNiBBdWcgMjAwNSAxNzozNjozNyAtMDAwMAkxLjMxCisrKyBXZWJLaXQvV2ViQ29y
ZVN1cHBvcnQuc3VicHJvai9XZWJJbWFnZVJlbmRlcmVyRmFjdG9yeS5tCTEgU2VwIDIwMDUgMDQ6
NDg6MDkgLTAwMDAKQEAgLTg1LDU5ICs4NSwxNiBAQAogICAgIHJldHVybiBbW1tXZWJJbWFnZVJl
bmRlcmVyIGFsbG9jXSBpbml0V2l0aENvbnRlbnRzT2ZGaWxlOm5hbWVdIGF1dG9yZWxlYXNlXTsK
IH0KIAotc3RydWN0IENvbXBvc2l0ZU9wZXJhdG9yCi17Ci0gICAgTlNTdHJpbmcgKm5hbWU7Ci0g
ICAgTlNDb21wb3NpdGluZ09wZXJhdGlvbiB2YWx1ZTsKLX07Ci0KLSNkZWZpbmUgTlVNX0NPTVBP
U0lURV9PUEVSQVRPUlMgMTQKLXN0cnVjdCBDb21wb3NpdGVPcGVyYXRvciBOU0NvbXBvc2l0aW5n
T3BlcmF0aW9uc1tOVU1fQ09NUE9TSVRFX09QRVJBVE9SU10gPSB7Ci0gICAgeyBAImNsZWFyIiwg
TlNDb21wb3NpdGVDbGVhciB9LAotICAgIHsgQCJjb3B5IiwgTlNDb21wb3NpdGVDb3B5IH0sCi0g
ICAgeyBAInNvdXJjZS1vdmVyIiwgTlNDb21wb3NpdGVTb3VyY2VPdmVyIH0sCi0gICAgeyBAInNv
dXJjZS1pbiIsIE5TQ29tcG9zaXRlU291cmNlSW4gfSwKLSAgICB7IEAic291cmNlLW91dCIsIE5T
Q29tcG9zaXRlU291cmNlT3V0IH0sCi0gICAgeyBAInNvdXJjZS1hdG9wIiwgTlNDb21wb3NpdGVT
b3VyY2VBdG9wIH0sCi0gICAgeyBAImRlc3RpbmF0aW9uLW92ZXIiLCBOU0NvbXBvc2l0ZURlc3Rp
bmF0aW9uT3ZlciB9LAotICAgIHsgQCJkZXN0aW5hdGlvbi1pbiIsIE5TQ29tcG9zaXRlRGVzdGlu
YXRpb25JbiB9LAotICAgIHsgQCJkZXN0aW5hdGlvbi1vdXQiLCBOU0NvbXBvc2l0ZURlc3RpbmF0
aW9uT3V0IH0sCi0gICAgeyBAImRlc3RpbmF0aW9uLWF0b3AiLCBOU0NvbXBvc2l0ZURlc3RpbmF0
aW9uQXRvcCB9LAotICAgIHsgQCJ4b3IiLCBOU0NvbXBvc2l0ZVhPUiB9LAotICAgIHsgQCJkYXJr
ZXIiLCBOU0NvbXBvc2l0ZVBsdXNEYXJrZXIgfSwKLSAgICB7IEAiaGlnaGxpZ2h0IiwgTlNDb21w
b3NpdGVIaWdobGlnaHQgfSwKLSAgICB7IEAibGlnaHRlciIsIE5TQ29tcG9zaXRlSGlnaGxpZ2h0
IH0gICAgLy8gUGVyIEFwcEtpdAotfTsKLQogLSAoaW50KUNHQ29tcG9zaXRlT3BlcmF0aW9uSW5D
b250ZXh0OihDR0NvbnRleHRSZWYpY29udGV4dAogewotCXJldHVybiBbW05TR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29udGV4dCBmbGlwcGVkOk5PXSBj
b21wb3NpdGluZ09wZXJhdGlvbl07CisgICAgcmV0dXJuIFtbTlNHcmFwaGljc0NvbnRleHQgZ3Jh
cGhpY3NDb250ZXh0V2l0aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBwZWQ6Tk9dIGNvbXBvc2l0
aW5nT3BlcmF0aW9uXTsKIH0KIAogLSAodm9pZClzZXRDR0NvbXBvc2l0ZU9wZXJhdGlvbjooaW50
KW9wIGluQ29udGV4dDooQ0dDb250ZXh0UmVmKWNvbnRleHQKIHsKLQlbW05TR3JhcGhpY3NDb250
ZXh0IGdyYXBoaWNzQ29udGV4dFdpdGhHcmFwaGljc1BvcnQ6Y29udGV4dCBmbGlwcGVkOk5PXSBz
ZXRDb21wb3NpdGluZ09wZXJhdGlvbjpvcF07Ci19Ci0KLS0gKHZvaWQpc2V0Q0dDb21wb3NpdGVP
cGVyYXRpb25Gcm9tU3RyaW5nOihOU1N0cmluZyAqKW9wZXJhdG9yU3RyaW5nIGluQ29udGV4dDoo
Q0dDb250ZXh0UmVmKWNvbnRleHQKLXsKLSAgICBOU0NvbXBvc2l0aW5nT3BlcmF0aW9uIG9wID0g
TlNDb21wb3NpdGVTb3VyY2VPdmVyOwotICAgIAotICAgIGlmIChvcGVyYXRvclN0cmluZykgewot
ICAgICAgICBpbnQgaTsKLSAgICAgICAgCi0gICAgICAgIGZvciAoaSA9IDA7IGkgPCBOVU1fQ09N
UE9TSVRFX09QRVJBVE9SUzsgaSsrKSB7Ci0gICAgICAgICAgICBpZiAoW29wZXJhdG9yU3RyaW5n
IGNhc2VJbnNlbnNpdGl2ZUNvbXBhcmU6TlNDb21wb3NpdGluZ09wZXJhdGlvbnNbaV0ubmFtZV0g
PT0gTlNPcmRlcmVkU2FtZSkgewotICAgICAgICAgICAgICAgIG9wID0gTlNDb21wb3NpdGluZ09w
ZXJhdGlvbnNbaV0udmFsdWU7Ci0gICAgICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICB9
Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgCi0JW1tOU0dyYXBoaWNzQ29udGV4dCBncmFwaGljc0Nv
bnRleHRXaXRoR3JhcGhpY3NQb3J0OmNvbnRleHQgZmxpcHBlZDpOT10gc2V0Q29tcG9zaXRpbmdP
cGVyYXRpb246b3BdOworICAgIFtbTlNHcmFwaGljc0NvbnRleHQgZ3JhcGhpY3NDb250ZXh0V2l0
aEdyYXBoaWNzUG9ydDpjb250ZXh0IGZsaXBwZWQ6Tk9dIHNldENvbXBvc2l0aW5nT3BlcmF0aW9u
Om9wXTsKIH0KIAotCiAtIChOU0FycmF5ICopc3VwcG9ydGVkTUlNRVR5cGVzCiB7CiAgICAgc3Rh
dGljIE5TQXJyYXkgKmltYWdlTUlNRVR5cGVzID0gbmlsOwo=
</data>
<flag name="review"
          id="554"
          type_id="1"
          status="-"
          setter="adele"
    />
          </attachment>
      

    </bug>

</bugzilla>