<?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>21683</bug_id>
          
          <creation_ts>2008-10-16 15:41:28 -0700</creation_ts>
          <short_desc>Don&apos;t create intermediate StructureIDs for builtin objects</short_desc>
          <delta_ts>2010-11-04 03:30:40 -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>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>21513</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Sam Weinig">sam</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>95631</commentid>
    <comment_count>0</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 15:41:28 -0700</bug_when>
    <thetext>We currently create a lot of intermediate StructureIDs when creating the JSGlobalObject due to a plethora of calls to putDirect, which transition the StructureIDs even though no other objects can ever share it.  Getting rid of these should reduce memory and speed things up as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95633</commentid>
    <comment_count>1</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 15:42:32 -0700</bug_when>
    <thetext>As a starting point, we currently allocate 142 StrucutureIDs for about:blank.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95641</commentid>
    <comment_count>2</comment_count>
      <attachid>24436</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 16:03:18 -0700</bug_when>
    <thetext>Created attachment 24436
Patch 1 - Just ObjectPrototype

This patch implements the technique to just reduce the number of StructureIDs for the ObjectPrototype class.  It brings down the number of live StructureIDs on about:blank from 142 to 132.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95648</commentid>
    <comment_count>3</comment_count>
      <attachid>24436</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-16 16:22:12 -0700</bug_when>
    <thetext>Comment on attachment 24436
Patch 1 - Just ObjectPrototype

Clearing review flag because Sam is working on another approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95649</commentid>
    <comment_count>4</comment_count>
      <attachid>24436</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2008-10-16 16:22:13 -0700</bug_when>
    <thetext>Comment on attachment 24436
Patch 1 - Just ObjectPrototype

Clearing review flag because Sam is working on another approach.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95683</commentid>
    <comment_count>5</comment_count>
      <attachid>24450</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 18:59:49 -0700</bug_when>
    <thetext>Created attachment 24450
Patch 2 - A different approach</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95684</commentid>
    <comment_count>6</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 19:00:34 -0700</bug_when>
    <thetext>I obviously would not land this with #define DUMP_STRUCTURE_ID_STATISTICS 1
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95689</commentid>
    <comment_count>7</comment_count>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-16 19:12:40 -0700</bug_when>
    <thetext>Probably don&apos;t want to check this in:

-#define DUMP_STRUCTURE_ID_STATISTICS 0
+#define DUMP_STRUCTURE_ID_STATISTICS 1

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95690</commentid>
    <comment_count>8</comment_count>
      <attachid>24450</attachid>
    <who name="Maciej Stachowiak">mjs</who>
    <bug_when>2008-10-16 19:20:45 -0700</bug_when>
    <thetext>Comment on attachment 24450
Patch 2 - A different approach

I like this approach. Please perf test and disable the logging.

r=me, with changes noted above.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95694</commentid>
    <comment_count>9</comment_count>
      <attachid>24450</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-16 19:59:26 -0700</bug_when>
    <thetext>Comment on attachment 24450
Patch 2 - A different approach

Clearing the review flag.  This was landed in r37645.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95805</commentid>
    <comment_count>10</comment_count>
      <attachid>24469</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-17 17:09:08 -0700</bug_when>
    <thetext>Created attachment 24469
Patch 3 - The remaining singletons</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>95812</commentid>
    <comment_count>11</comment_count>
      <attachid>24469</attachid>
    <who name="Cameron Zwarich (cpst)">zwarich</who>
    <bug_when>2008-10-17 18:09:45 -0700</bug_when>
    <thetext>Comment on attachment 24469
Patch 3 - The remaining singletons

r=me</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>96039</commentid>
    <comment_count>12</comment_count>
      <attachid>24469</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2008-10-20 14:28:22 -0700</bug_when>
    <thetext>Comment on attachment 24469
Patch 3 - The remaining singletons

Clearing the review flag.  This was landed in r37747.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>302974</commentid>
    <comment_count>13</comment_count>
    <who name="Xan Lopez">xan.lopez</who>
    <bug_when>2010-11-01 15:06:45 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; Created an attachment (id=24469) [details]
&gt; Patch 3 - The remaining singletons

It seems the stuff in this patch was eventually landed, so should we close this bug?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>304565</commentid>
    <comment_count>14</comment_count>
    <who name="Sam Weinig">sam</who>
    <bug_when>2010-11-04 03:30:40 -0700</bug_when>
    <thetext>Heh, yeah.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24436</attachid>
            <date>2008-10-16 16:03:18 -0700</date>
            <delta_ts>2008-10-16 18:59:49 -0700</delta_ts>
            <desc>Patch 1 - Just ObjectPrototype</desc>
            <filename>firstDraftPatch.diff</filename>
            <type>text/plain</type>
            <size>13338</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjM2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzIgQEAKKzIwMDgtMTAt
MTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY4MworICAgICAgICBEb24ndCBjcmVhdGUgaW50ZXJtZWRpYXRl
IFN0cnVjdHVyZUlEcyBmb3IgYnVpbHRpbiBvYmplY3RzCisKKyAgICAgICAgRmlyc3Qgc3RlcCBp
biByZWR1Y2UgbnVtYmVyIG9mIFN0cnVjdHVyZUlEcyBjcmVhdGVkIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZQorICAgICAgICBKU0dsb2JhbE9iamVjdC4KKworICAgICAgICAtIEluIG9yZGVyIHRvIGF2
b2lkIGNyZWF0aW5nIHRoZSBpbnRlcm1lZGlhdGUgU3RydWN0dXJlSURzLCB3ZSBmaXJzdCBidWls
ZCB1cAorICAgICAgICAgIHRoZSBTdHJ1Y3R1cmVJRCB1c2luZyB0aGUgbmV3IFN0cnVjdHVyZUlE
OjphZGRQcm9wZXJ0eSBtZXRob2QgdG8gYWRkIHByb3BlcnRpZXMKKyAgICAgICAgICB0byB0aGUg
U3RydWN0dXJlSUQgd2l0aG91dCB0cmFuc2l0aW9uaW5nLCBhbmQgdGhlbiBwYXNzIHRoZSBTdHJ1
Y3R1cmVJRCB0bworICAgICAgICAgIHRoZSBKU09iamVjdCBjb25zdHJ1Y3RvciB3aGljaCBhbGxv
Y2F0ZXMgYW4gYXBwcm9wcmlhdGVseSBzaXplZCBzdG9yYWdlIGFycmF5LgorCisgICAgICAgICog
a2pzL0pTR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxPYmplY3Q6OnJl
c2V0KToKKyAgICAgICAgKiBranMvSlNPYmplY3QuaDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6
Oik6CisgICAgICAgIChKU0M6OkpTT2JqZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAgICAg
IChKU0M6OkpTT2JqZWN0OjpKU09iamVjdCk6CisgICAgICAgICoga2pzL09iamVjdFByb3RvdHlw
ZS5jcHA6CisgICAgICAgIChKU0M6Ok9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKToK
KyAgICAgICAgKEpTQzo6T2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRCk6CisgICAg
ICAgICoga2pzL09iamVjdFByb3RvdHlwZS5oOgorICAgICAgICAqIGtqcy9TdHJ1Y3R1cmVJRC5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUlEOjphZGRQcm9wZXJ0eSk6CisgICAgICAgICog
a2pzL1N0cnVjdHVyZUlELmg6CisKIDIwMDgtMTAtMTYgIE1hY2llaiBTdGFjaG93aWFrICA8bWpz
QGFwcGxlLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBDYW1lcm9uIFp3YXJpY2guCkluZGV4
OiBranMvSlNHbG9iYWxPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU0dsb2JhbE9iamVj
dC5jcHAJKHJldmlzaW9uIDM3NjM2KQorKysga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTk3LDYgKzE5Nyw3IEBAIHN0YXRpYyBpbmxpbmUgSlNPYmplY3QqIGxhc3RJ
blByb3RvdHlwZUMKIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3RvdHlw
ZSkKIHsKICAgICBFeGVjU3RhdGUqIGV4ZWMgPSBKU0dsb2JhbE9iamVjdDo6Z2xvYmFsRXhlYygp
OworICAgIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSA9IEpTR2xvYmFsT2JqZWN0OjpnbG9iYWxE
YXRhKCk7CiAKICAgICAvLyBQcm90b3R5cGVzCiAKQEAgLTIwNSw3ICsyMDYsMTAgQEAgdm9pZCBK
U0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSogcHJvdAogICAgIGQoKS0+Y2FsbGJhY2tGdW5j
dGlvblN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgp
LT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSA9IFByb3RvdHlwZUZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJv
dG90eXBlKTsKICAgICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRp
ZXMoZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZCgp
LT5vYmplY3RQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCBkKCkt
PnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKKworICAgIFJlZlB0cjxTdHJ1Y3R1
cmVJRD4gb2JqZWN0UHJvdG90eXBlU3RydWN0dXJlID0gT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVT
dHJ1Y3R1cmVJRChnbG9iYWxEYXRhLCBqc051bGwoKSk7CisgICAgZCgpLT5vYmplY3RQcm90b3R5
cGUgPSBuZXcgKGV4ZWMpIE9iamVjdFByb3RvdHlwZShleGVjLCBvYmplY3RQcm90b3R5cGVTdHJ1
Y3R1cmUsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOworCiAgICAgZCgp
LT5lbXB0eU9iamVjdFN0cnVjdHVyZSA9IGQoKS0+b2JqZWN0UHJvdG90eXBlLT5pbmhlcml0b3JJ
RCgpOwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUtPnNldFByb3RvdHlwZShkKCktPm9iamVj
dFByb3RvdHlwZSk7CiAgICAgZCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUgPSBBcmd1bWVudHM6OmNy
ZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKQEAgLTI2MSw3ICsyNjUsOCBA
QCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAgICAgCiAgICAgZCgp
LT5mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25z
dHJ1Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwogCi0gICAgZCgpLT5vYmpl
Y3RQcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3Is
IG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgpLT5vYmplY3RQcm90b3R5cGUt
PnB1dERpcmVjdE9mZnNldChvYmplY3RQcm90b3R5cGVTdHJ1Y3R1cmUtPnByb3BlcnR5TWFwKCku
Z2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciksIG9iamVjdENvbnN0cnVjdG9y
KTsKKwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKICAg
ICBkKCktPmFycmF5UHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNv
bnN0cnVjdG9yLCBhcnJheUNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgZCgpLT5ib29sZWFu
UHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBi
b29sZWFuQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKSW5kZXg6IGtqcy9KU09iamVjdC5oCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIGtqcy9KU09iamVjdC5oCShyZXZpc2lvbiAzNzYzNikKKysrIGtqcy9KU09iamVj
dC5oCSh3b3JraW5nIGNvcHkpCkBAIC01OCw2ICs1OCw4IEBAIG5hbWVzcGFjZSBKU0MgewogCiAg
ICAgcHVibGljOgogICAgICAgICBleHBsaWNpdCBKU09iamVjdChQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPik7CisgICAgICAgIGVudW0gUHJlQnVpbHRTdHJ1Y3R1cmVJRFRhZyB7IFByZUJ1aWx0U3Ry
dWN0dXJlSUQgfTsKKyAgICAgICAgZXhwbGljaXQgSlNPYmplY3QoUHJlQnVpbHRTdHJ1Y3R1cmVJ
RFRhZywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4pOwogCiAgICAgICAgIHZpcnR1YWwgdm9pZCBt
YXJrKCk7CiAKQEAgLTE4MSw2ICsxODMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3Rh
dGljIGNvbnN0IHNpemVfdCBub25JbmxpbmVCYXNlU3RvcmFnZUNhcGFjaXR5ID0gMTY7CiAKICAg
ICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IGNyZWF0ZVN0cnVjdHVyZUlEKEpT
VmFsdWUqIHByb3RvKSB7IHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5m
byhPYmplY3RUeXBlKSk7IH0KKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
IGNyZWF0ZVN0cnVjdHVyZUlEKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUqIHByb3RvKSB7IHJldHVy
biBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmplY3RUeXBlKSk7IH0KIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBnZXRPd25Qcm9wZXJ0eVNsb3RGb3JXcml0ZShF
eGVjU3RhdGUqLCBjb25zdCBJZGVudGlmaWVyJiwgUHJvcGVydHlTbG90JiwgYm9vbCYgc2xvdElz
V3JpdGVhYmxlKTsKQEAgLTIwNyw2ICsyMTAsMjUgQEAgaW5saW5lIEpTT2JqZWN0OjpKU09iamVj
dChQYXNzUmVmUHRyPFN0cgogICAgIEFTU0VSVChwcm90b3R5cGUoKS0+aXNOdWxsKCkgfHwgSGVh
cDo6aGVhcCh0aGlzKSA9PSBIZWFwOjpoZWFwKHByb3RvdHlwZSgpKSk7CiB9CiAKK2lubGluZSBK
U09iamVjdDo6SlNPYmplY3QoUHJlQnVpbHRTdHJ1Y3R1cmVJRFRhZywgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gc3RydWN0dXJlSUQpCisgICAgOiBKU0NlbGwoc3RydWN0dXJlSUQucmVsZWFzZVJl
ZigpKQoreworICAgIEFTU0VSVChtX3N0cnVjdHVyZUlEKTsKKyAgICBBU1NFUlQocHJvdG90eXBl
KCktPmlzTnVsbCgpIHx8IEhlYXA6OmhlYXAodGhpcykgPT0gSGVhcDo6aGVhcChwcm90b3R5cGUo
KSkpOworCisgICAgc2l6ZV90IGNhcGFjaXR5ID0gbV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlTdG9y
YWdlQ2FwYWNpdHkoKTsKKyAgICBpZiAoY2FwYWNpdHkgPD0gaW5saW5lU3RvcmFnZUNhcGFjaXR5
KQorICAgICAgICBtX3Byb3BlcnR5U3RvcmFnZSA9IG1faW5saW5lU3RvcmFnZTsKKyAgICBlbHNl
CisgICAgICAgIG1fcHJvcGVydHlTdG9yYWdlID0gbmV3IEpTVmFsdWUqW2NhcGFjaXR5XTsKKwor
ICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHRvIGZpbGwgaW4gdGhlIHByb3BlcnR5U3RvcmFnZSBzbyB0
aGF0IGFueSBnYyB0aGF0IGhhcHBlbnMKKyAgICAvLyB3aGlsZSBjcmVhdGluZyB0aGUgb2JqZWN0
IHdvcmtzIGNvcnJlY3RseS4KKyAgICBzaXplX3QgcHJvcGVydGllc0luU3RydWN0dXJlSUQgPSBt
X3N0cnVjdHVyZUlELT5wcm9wZXJ0eU1hcCgpLnN0b3JhZ2VTaXplKCk7CisgICAgZm9yIChzaXpl
X3QgaSA9IDA7IGkgPCBwcm9wZXJ0aWVzSW5TdHJ1Y3R1cmVJRDsgKytpKQorICAgICAgICBtX3By
b3BlcnR5U3RvcmFnZVtpXSA9IGpzVW5kZWZpbmVkKCk7Cit9CisKIGlubGluZSBKU09iamVjdDo6
fkpTT2JqZWN0KCkKIHsKICAgICBBU1NFUlQobV9zdHJ1Y3R1cmVJRCk7CkluZGV4OiBranMvT2Jq
ZWN0UHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvT2JqZWN0UHJvdG90eXBlLmNwcAko
cmV2aXNpb24gMzc2MzYpCisrKyBranMvT2JqZWN0UHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzksMjEgKzM5LDQzIEBAIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNMb29r
dXBTZXQKIHN0YXRpYyBKU1ZhbHVlKiBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJs
ZShFeGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiBzdGF0
aWMgSlNWYWx1ZSogb2JqZWN0UHJvdG9GdW5jVG9Mb2NhbGVTdHJpbmcoRXhlY1N0YXRlKiwgSlNP
YmplY3QqLCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCi1PYmplY3RQcm90b3R5cGU6Ok9i
amVjdFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSkKLSAgICA6IEpTT2JqZWN0KGV4ZWMtPmdsb2JhbERhdGEoKS5udWxsUHJv
dG9TdHJ1Y3R1cmVJRCkKK09iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJvdG90eXBlKEV4ZWNTdGF0
ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlLCBTdHJ1Y3R1cmVJRCog
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUpCisgICAgOiBKU09iamVjdChQcmVCdWlsdFN0cnVj
dHVyZUlELCBzdHJ1Y3R1cmUpCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChl
eGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmlu
ZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxl
U3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mLCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKSwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5oYXNPd25Qcm9wZXJ0eSwgb2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVy
dHkpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBvYmplY3RQcm90b0Z1bmNQ
cm9wZXJ0eUlzRW51bWVyYWJsZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihl
eGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuaXNQcm90b3R5cGVPZiwgb2JqZWN0
UHJvdG9GdW5jSXNQcm90b3R5cGVPZiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RPZmZzZXQo
c3RydWN0dXJlSUQoKS0+cHJvcGVydHlNYXAoKS5nZXQoZXhlYy0+cHJvcGVydHlOYW1lcygpLnRv
U3RyaW5nKSwgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBvYmplY3RQ
cm90b0Z1bmNUb1N0cmluZykpOworICAgIHB1dERpcmVjdE9mZnNldChzdHJ1Y3R1cmVJRCgpLT5w
cm9wZXJ0eU1hcCgpLmdldChleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcpLCBu
ZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0
dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcsIG9iamVjdFByb3Rv
RnVuY1RvTG9jYWxlU3RyaW5nKSk7CisgICAgcHV0RGlyZWN0T2Zmc2V0KHN0cnVjdHVyZUlEKCkt
PnByb3BlcnR5TWFwKCkuZ2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9mKSwgbmV3IChl
eGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwg
MCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2Yp
KTsKKyAgICBwdXREaXJlY3RPZmZzZXQoc3RydWN0dXJlSUQoKS0+cHJvcGVydHlNYXAoKS5nZXQo
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmhhc093blByb3BlcnR5KSwgbmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLmhhc093blByb3BlcnR5LCBvYmplY3RQcm90b0Z1bmNIYXNPd25Qcm9wZXJ0
eSkpOworICAgIHB1dERpcmVjdE9mZnNldChzdHJ1Y3R1cmVJRCgpLT5wcm9wZXJ0eU1hcCgpLmdl
dChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvcGVydHlJc0VudW1lcmFibGUpLCBuZXcgKGV4ZWMp
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvcGVydHlJc0VudW1lcmFibGUsIG9iamVjdFByb3RvRnVu
Y1Byb3BlcnR5SXNFbnVtZXJhYmxlKSk7CisgICAgcHV0RGlyZWN0T2Zmc2V0KHN0cnVjdHVyZUlE
KCktPnByb3BlcnR5TWFwKCkuZ2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5pc1Byb3RvdHlwZU9m
KSwgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmlzUHJvdG90eXBlT2YsIG9iamVjdFBy
b3RvRnVuY0lzUHJvdG90eXBlT2YpKTsKIAogICAgIC8vIE1vemlsbGEgZXh0ZW5zaW9ucwotICAg
IHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5f
X2RlZmluZUdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNEZWZpbmVHZXR0ZXIpLCBEb250RW51bSk7
Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlv
bihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1l
cygpLl9fZGVmaW5lU2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0RlZmluZVNldHRlciksIERvbnRF
bnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuX19sb29rdXBHZXR0ZXJfXywgb2JqZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKSwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5fX2xvb2t1cFNldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNMb29rdXBTZXR0
ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0T2Zmc2V0KHN0cnVjdHVyZUlEKCktPnByb3Bl
cnR5TWFwKCkuZ2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2RlZmluZUdldHRlcl9fKSwgbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fZGVmaW5lR2V0dGVyX18sIG9iamVjdFByb3Rv
RnVuY0RlZmluZUdldHRlcikpOworICAgIHB1dERpcmVjdE9mZnNldChzdHJ1Y3R1cmVJRCgpLT5w
cm9wZXJ0eU1hcCgpLmdldChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0ZXJfXyks
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUsIDIsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2RlZmluZVNldHRlcl9fLCBvYmplY3RQ
cm90b0Z1bmNEZWZpbmVTZXR0ZXIpKTsKKyAgICBwdXREaXJlY3RPZmZzZXQoc3RydWN0dXJlSUQo
KS0+cHJvcGVydHlNYXAoKS5nZXQoZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fbG9va3VwR2V0dGVy
X18pLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19sb29rdXBHZXR0ZXJfXywgb2Jq
ZWN0UHJvdG9GdW5jTG9va3VwR2V0dGVyKSk7CisgICAgcHV0RGlyZWN0T2Zmc2V0KHN0cnVjdHVy
ZUlEKCktPnByb3BlcnR5TWFwKCkuZ2V0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1cFNl
dHRlcl9fKSwgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fbG9va3VwU2V0dGVyX18s
IG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlcikpOworfQorCitQYXNzUmVmUHRyPFN0cnVjdHVy
ZUlEPiBPYmplY3RQcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKEpTR2xvYmFsRGF0YSogZ2xv
YmFsRGF0YSwgSlNWYWx1ZSogcHJvdG90eXBlKQoreworICAgIFJlZlB0cjxTdHJ1Y3R1cmVJRD4g
c3RydWN0dXJlSUQgPSBKU09iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoZ2xvYmFsRGF0YSwgcHJv
dG90eXBlKTsKKworICAgIHN0cnVjdHVyZUlELT5hZGRQcm9wZXJ0eShnbG9iYWxEYXRhLT5wcm9w
ZXJ0eU5hbWVzLT50b1N0cmluZywgRG9udEVudW0pOworICAgIHN0cnVjdHVyZUlELT5hZGRQcm9w
ZXJ0eShnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT50b0xvY2FsZVN0cmluZywgRG9udEVudW0p
OworICAgIHN0cnVjdHVyZUlELT5hZGRQcm9wZXJ0eShnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVz
LT52YWx1ZU9mLCBEb250RW51bSk7CisgICAgc3RydWN0dXJlSUQtPmFkZFByb3BlcnR5KGdsb2Jh
bERhdGEtPnByb3BlcnR5TmFtZXMtPmhhc093blByb3BlcnR5LCBEb250RW51bSk7CisgICAgc3Ry
dWN0dXJlSUQtPmFkZFByb3BlcnR5KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPnByb3BlcnR5
SXNFbnVtZXJhYmxlLCBEb250RW51bSk7CisgICAgc3RydWN0dXJlSUQtPmFkZFByb3BlcnR5KGds
b2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPmlzUHJvdG90eXBlT2YsIERvbnRFbnVtKTsKKworICAg
IC8vIE1vemlsbGEgZXh0ZW5zaW9ucworICAgIHN0cnVjdHVyZUlELT5hZGRQcm9wZXJ0eShnbG9i
YWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5fX2RlZmluZUdldHRlcl9fLCBEb250RW51bSk7CisgICAg
c3RydWN0dXJlSUQtPmFkZFByb3BlcnR5KGdsb2JhbERhdGEtPnByb3BlcnR5TmFtZXMtPl9fZGVm
aW5lU2V0dGVyX18sIERvbnRFbnVtKTsKKyAgICBzdHJ1Y3R1cmVJRC0+YWRkUHJvcGVydHkoZ2xv
YmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+X19sb29rdXBHZXR0ZXJfXywgRG9udEVudW0pOworICAg
IHN0cnVjdHVyZUlELT5hZGRQcm9wZXJ0eShnbG9iYWxEYXRhLT5wcm9wZXJ0eU5hbWVzLT5fX2xv
b2t1cFNldHRlcl9fLCBEb250RW51bSk7CisKKyAgICBzdHJ1Y3R1cmVJRC0+YWRkUHJvcGVydHko
Z2xvYmFsRGF0YS0+cHJvcGVydHlOYW1lcy0+Y29uc3RydWN0b3IsIERvbnRFbnVtKTsKKworICAg
IHJldHVybiBzdHJ1Y3R1cmVJRC5yZWxlYXNlKCk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
SW5kZXg6IGtqcy9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvT2JqZWN0UHJv
dG90eXBlLmgJKHJldmlzaW9uIDM3NjM2KQorKysga2pzL09iamVjdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw5IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
T2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVJRCogcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUpOworICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlSUQsIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSk7CisKKyAgICAgICAgc3RhdGljIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
IGNyZWF0ZVN0cnVjdHVyZUlEKEpTR2xvYmFsRGF0YSosIEpTVmFsdWUqIHByb3RvdHlwZSk7CiAg
ICAgfTsKIAogICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNTdGF0ZSos
IEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKSW5kZXg6IGtqcy9TdHJ1Y3R1
cmVJRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmNwcAkocmV2aXNpb24gMzc2
MzYpCisrKyBranMvU3RydWN0dXJlSUQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcsNiArMzE3
LDEzIEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjpnZXQKICAgICByZXR1
cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CiB9CiAKK3ZvaWQgU3RydWN0dXJlSUQ6OmFkZFByb3Bl
cnR5KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcykK
K3sKKyAgICBtX3Byb3BlcnR5TWFwLnB1dChwcm9wZXJ0eU5hbWUsIGF0dHJpYnV0ZXMpOworICAg
IGlmIChtX3Byb3BlcnR5TWFwLnN0b3JhZ2VTaXplKCkgPiBwcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0
eSgpKQorICAgICAgICBncm93UHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKTsKK30KKwogU3RydWN0
dXJlSURDaGFpbiogU3RydWN0dXJlSUQ6OmNyZWF0ZUNhY2hlZFByb3RvdHlwZUNoYWluKCkKIHsK
ICAgICBBU1NFUlQodHlwZUluZm8oKS50eXBlKCkgPT0gT2JqZWN0VHlwZSk7CkluZGV4OiBranMv
U3RydWN0dXJlSUQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvU3RydWN0dXJlSUQuaAkocmV2aXNpb24g
Mzc2MzYpCisrKyBranMvU3RydWN0dXJlSUQuaAkod29ya2luZyBjb3B5KQpAQCAtMTA1LDYgKzEw
NSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIG1fcHJvdG90eXBlLT5tYXJr
KCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGFkZFByb3BlcnR5KGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgdW5zaWduZWQgYXR0cmlidXRlcyk7CisKICAgICAgICAgYm9vbCBp
c0RpY3Rpb25hcnkoKSBjb25zdCB7IHJldHVybiBtX2lzRGljdGlvbmFyeTsgfQogCiAgICAgICAg
IGNvbnN0IFR5cGVJbmZvJiB0eXBlSW5mbygpIGNvbnN0IHsgcmV0dXJuIG1fdHlwZUluZm87IH0K
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24450</attachid>
            <date>2008-10-16 18:59:49 -0700</date>
            <delta_ts>2008-10-17 17:09:08 -0700</delta_ts>
            <desc>Patch 2 - A different approach</desc>
            <filename>take2.diff</filename>
            <type>text/plain</type>
            <size>12343</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjQ0
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMzEgQEAKKzIwMDgtMTAt
MTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY4MworICAgICAgICBEb24ndCBjcmVhdGUgaW50ZXJtZWRpYXRl
IFN0cnVjdHVyZUlEcyBmb3IgYnVpbHRpbiBvYmplY3RzCisKKyAgICAgICAgRmlyc3Qgc3RlcCBp
biByZWR1Y2UgbnVtYmVyIG9mIFN0cnVjdHVyZUlEcyBjcmVhdGVkIHdoZW4gaW5pdGlhbGl6aW5n
IHRoZQorICAgICAgICBKU0dsb2JhbE9iamVjdC4KKworICAgICAgICAtIEluIG9yZGVyIHRvIGF2
b2lkIGNyZWF0aW5nIHRoZSBpbnRlcm1lZGlhdGUgU3RydWN0dXJlSURzIHVzZSB0aGUgbmV3IHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uCisgICAgICAgICAgYW5kIHB1dERpcmVjdEZ1bmN0aW9u
V2l0aG91dFRyYW5zaXRpb24gdG8gYWRkIHByb3BlcnRpZXMgdG8gSlNPYmplY3RzIHdpdGhvdXQg
dHJhbnNpdGlvbmluZworICAgICAgICAgIHRoZSBTdHJ1Y3R1cmVJRC4gIFRoaXMgcGF0Y2gganVz
dCBpbXBsZW1lbnRzIHRoaXMgc3RyYXRlZ3kgZm9yIE9iamVjdFByb3RvdHlwZSBidXQgYWxvbmUK
KyAgICAgICAgICByZWR1Y2VzIHRoZSBudW1iZXIgb2YgU3RydWN0dXJlSURzIGNyZWF0ZSBmb3Ig
YWJvdXQ6YmxhbmsgYnkgMTAsIGZyb20gMTQyIHRvIDEzMi4KKworICAgICAgICAqIGtqcy9KU0ds
b2JhbE9iamVjdC5jcHA6CisgICAgICAgIChKU0M6OkpTR2xvYmFsT2JqZWN0OjpyZXNldCk6Cisg
ICAgICAgICoga2pzL0pTT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6SlNPYmplY3Q6OnB1dERp
cmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24pOgorICAgICAgICAqIGtqcy9KU09iamVjdC5o
OgorICAgICAgICAoSlNDOjpKU09iamVjdDo6cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24pOgor
ICAgICAgICAqIGtqcy9PYmplY3RQcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpPYmplY3RQ
cm90b3R5cGU6Ok9iamVjdFByb3RvdHlwZSk6CisgICAgICAgICoga2pzL09iamVjdFByb3RvdHlw
ZS5oOgorICAgICAgICAqIGtqcy9TdHJ1Y3R1cmVJRC5jcHA6CisgICAgICAgIChKU0M6OlN0cnVj
dHVyZUlEOjphZGRQcm9wZXJ0eVdpdGhvdXRUcmFuc2l0aW9uKToKKyAgICAgICAgKiBranMvU3Ry
dWN0dXJlSUQuaDoKKwogMjAwOC0xMC0xNiAgTWFjaWVqIFN0YWNob3dpYWsgIDxtanNAYXBwbGUu
Y29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IENhbWVyb24gWndhcmljaC4KSW5kZXg6IGtqcy9K
U0dsb2JhbE9iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAko
cmV2aXNpb24gMzc2MzYpCisrKyBranMvSlNHbG9iYWxPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0yMDUsNyArMjA1LDggQEAgdm9pZCBKU0dsb2JhbE9iamVjdDo6cmVzZXQoSlNWYWx1ZSog
cHJvdAogICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSA9IEpTQ2FsbGJhY2tGdW5j
dGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7CiAgICAgZCgp
LT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSA9IFByb3RvdHlwZUZ1bmN0aW9uOjpjcmVhdGVT
dHJ1Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKICAgICBkKCktPmZ1bmN0aW9uUHJv
dG90eXBlLT5hZGRGdW5jdGlvblByb3BlcnRpZXMoZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSk7Ci0gICAgZCgpLT5vYmplY3RQcm90b3R5cGUgPSBuZXcgKGV4ZWMp
IE9iamVjdFByb3RvdHlwZShleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdl
dCgpKTsKKworICAgIGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IChleGVjKSBPYmplY3RQcm90
b3R5cGUoZXhlYywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSks
IGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOwogICAgIGQoKS0+ZW1wdHlP
YmplY3RTdHJ1Y3R1cmUgPSBkKCktPm9iamVjdFByb3RvdHlwZS0+aW5oZXJpdG9ySUQoKTsKICAg
ICBkKCktPmZ1bmN0aW9uUHJvdG90eXBlLT5zZXRQcm90b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5
cGUpOwogICAgIGQoKS0+YXJndW1lbnRzU3RydWN0dXJlID0gQXJndW1lbnRzOjpjcmVhdGVTdHJ1
Y3R1cmVJRChkKCktPm9iamVjdFByb3RvdHlwZSk7CkBAIC0yNTgsMTAgKzI1OSwxMSBAQCB2b2lk
IEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAgICAgZCgpLT5zeW50YXhFcnJv
ckNvbnN0cnVjdG9yID0gbmV3IChleGVjKSBOYXRpdmVFcnJvckNvbnN0cnVjdG9yKGV4ZWMsIG5h
dGl2ZUVycm9yU3RydWN0dXJlLCBzeW50YXhFcnJvclByb3RvdHlwZSk7CiAgICAgZCgpLT50eXBl
RXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25zdHJ1Y3RvcihleGVj
LCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgdHlwZUVycm9yUHJvdG90eXBlKTsKICAgICBkKCktPlVS
SUVycm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29uc3RydWN0b3IoZXhl
YywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIFVSSUVycm9yUHJvdG90eXBlKTsKLSAgICAKKwogICAg
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCku
Y29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKIAotICAgIGQoKS0+
b2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVj
dG9yLCBvYmplY3RDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIGQoKS0+b2JqZWN0UHJvdG90
eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CisKICAgICBkKCktPmZ1bmN0
aW9uUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9y
LCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBEb250RW51bSk7CiAgICAgZCgpLT5hcnJheVByb3RvdHlw
ZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYXJyYXlDb25z
dHJ1Y3RvciwgRG9udEVudW0pOwogICAgIGQoKS0+Ym9vbGVhblByb3RvdHlwZS0+cHV0RGlyZWN0
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgYm9vbGVhbkNvbnN0cnVjdG9yLCBE
b250RW51bSk7CkluZGV4OiBranMvSlNPYmplY3QuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9KU09i
amVjdC5jcHAJKHJldmlzaW9uIDM3NjM2KQorKysga2pzL0pTT2JqZWN0LmNwcAkod29ya2luZyBj
b3B5KQpAQCAtNDkwLDYgKzQ5MCwxMSBAQCB2b2lkIEpTT2JqZWN0OjpwdXREaXJlY3RGdW5jdGlv
bihFeGVjU3RhCiAgICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb24tPm5hbWUo
JmV4ZWMtPmdsb2JhbERhdGEoKSkpLCBmdW5jdGlvbiwgYXR0cik7CiB9CiAKK3ZvaWQgSlNPYmpl
Y3Q6OnB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oRXhlY1N0YXRlKiBleGVjLCBJ
bnRlcm5hbEZ1bmN0aW9uKiBmdW5jdGlvbiwgdW5zaWduZWQgYXR0cikKK3sKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsIGZ1bmN0aW9uLT5uYW1lKCZleGVj
LT5nbG9iYWxEYXRhKCkpKSwgZnVuY3Rpb24sIGF0dHIpOworfQorCiBORVZFUl9JTkxJTkUgdm9p
ZCBKU09iamVjdDo6ZmlsbEdldHRlclByb3BlcnR5U2xvdChQcm9wZXJ0eVNsb3QmIHNsb3QsIEpT
VmFsdWUqKiBsb2NhdGlvbikKIHsKICAgICBpZiAoSlNPYmplY3QqIGdldHRlckZ1bmN0aW9uID0g
c3RhdGljX2Nhc3Q8R2V0dGVyU2V0dGVyKj4oKmxvY2F0aW9uKS0+Z2V0dGVyKCkpCkluZGV4OiBr
anMvSlNPYmplY3QuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvSlNPYmplY3QuaAkocmV2aXNpb24gMzc2
MzYpCisrKyBranMvSlNPYmplY3QuaAkod29ya2luZyBjb3B5KQpAQCAtMTU3LDYgKzE1Nyw4IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIHB1dERpcmVjdChjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNpZ25lZCBhdHRyID0gMCk7CiAgICAg
ICAgIHZvaWQgcHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1
ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHIsIGJvb2wgY2hlY2tSZWFkT25seSwgUHV0UHJvcGVydHlT
bG90JiBzbG90KTsKICAgICAgICAgdm9pZCBwdXREaXJlY3RGdW5jdGlvbihFeGVjU3RhdGUqIGV4
ZWMsIEludGVybmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCB1bnNpZ25lZCBhdHRyID0gMCk7CisgICAg
ICAgIHZvaWQgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oY29uc3QgSWRlbnRpZmllciYgcHJv
cGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0cik7CisgICAgICAgIHZvaWQg
cHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihFeGVjU3RhdGUqIGV4ZWMsIEludGVy
bmFsRnVuY3Rpb24qIGZ1bmN0aW9uLCB1bnNpZ25lZCBhdHRyKTsKIAogICAgICAgICAvLyBGYXN0
IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0eSBvZmZzZXRzLgogICAgICAgICBKU1ZhbHVlKiBnZXRE
aXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNldCkgeyByZXR1cm4gbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zm
c2V0XTsgfQpAQCAtNDEzLDYgKzQxNSwxNSBAQCBpbmxpbmUgdm9pZCBKU09iamVjdDo6cHV0RGly
ZWN0KGNvbnN0IElkCiAgICAgc2V0U3RydWN0dXJlSUQoc3RydWN0dXJlSUQucmVsZWFzZSgpKTsK
IH0KIAoraW5saW5lIHZvaWQgSlNPYmplY3Q6OnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGNv
bnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0
dHJpYnV0ZXMpCit7CisgICAgc2l6ZV90IGN1cnJlbnRDYXBhY2l0eSA9IG1fc3RydWN0dXJlSUQt
PnByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCk7CisgICAgc2l6ZV90IG9mZnNldCA9IG1fc3RydWN0
dXJlSUQtPmFkZFByb3BlcnR5V2l0aG91dFRyYW5zaXRpb24ocHJvcGVydHlOYW1lLCBhdHRyaWJ1
dGVzKTsKKyAgICBpZiAoY3VycmVudENhcGFjaXR5ICE9IG1fc3RydWN0dXJlSUQtPnByb3BlcnR5
U3RvcmFnZUNhcGFjaXR5KCkpCisgICAgICAgIGFsbG9jYXRlUHJvcGVydHlTdG9yYWdlKGN1cnJl
bnRDYXBhY2l0eSwgbV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSk7Cisg
ICAgbV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XSA9IHZhbHVlOworfQorCiBpbmxpbmUgdm9pZCBK
U09iamVjdDo6dHJhbnNpdGlvblRvKFN0cnVjdHVyZUlEKiBuZXdTdHJ1Y3R1cmVJRCkKIHsKICAg
ICBpZiAobV9zdHJ1Y3R1cmVJRC0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSAhPSBuZXdTdHJ1
Y3R1cmVJRC0+cHJvcGVydHlTdG9yYWdlQ2FwYWNpdHkoKSkKSW5kZXg6IGtqcy9PYmplY3RQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9PYmplY3RQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAzNzYzNikKKysrIGtqcy9PYmplY3RQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0z
OSwyMSArMzksMjEgQEAgc3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldAog
c3RhdGljIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1Byb3BlcnR5SXNFbnVtZXJhYmxlKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIHN0YXRpYyBKU1Zh
bHVlKiBvYmplY3RQcm90b0Z1bmNUb0xvY2FsZVN0cmluZyhFeGVjU3RhdGUqLCBKU09iamVjdCos
IEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0Jik7CiAKLU9iamVjdFByb3RvdHlwZTo6T2JqZWN0UHJv
dG90eXBlKEV4ZWNTdGF0ZSogZXhlYywgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3Ry
dWN0dXJlKQotICAgIDogSlNPYmplY3QoZXhlYy0+Z2xvYmFsRGF0YSgpLm51bGxQcm90b1N0cnVj
dHVyZUlEKQorT2JqZWN0UHJvdG90eXBlOjpPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiBleGVj
LCBQYXNzUmVmUHRyPFN0cnVjdHVyZUlEPiBzdHVjdHVyZSwgU3RydWN0dXJlSUQqIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlKQorICAgIDogSlNPYmplY3Qoc3R1Y3R1cmUpCiB7Ci0gICAgcHV0
RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBw
cm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3Ry
aW5nLCBvYmplY3RQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJp
bmcsIG9iamVjdFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS52YWx1ZU9m
LCBvYmplY3RQcm90b0Z1bmNWYWx1ZU9mKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0
aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5oYXNPd25Qcm9wZXJ0eSwg
b2JqZWN0UHJvdG9GdW5jSGFzT3duUHJvcGVydHkpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0
RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5
cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3BlcnR5SXNF
bnVtZXJhYmxlLCBvYmplY3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSksIERvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuaXNQcm90b3R5cGVPZiwgb2JqZWN0UHJvdG9GdW5jSXNQcm90b3R5cGVPZiksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUs
IDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgb2JqZWN0UHJvdG9GdW5jVG9TdHJp
bmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihl
eGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVTdHJpbmcsIG9iamVj
dFByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0
aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihl
eGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygp
LnZhbHVlT2YsIG9iamVjdFByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1
bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0
eU5hbWVzKCkuaGFzT3duUHJvcGVydHksIG9iamVjdFByb3RvRnVuY0hhc093blByb3BlcnR5KSwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywg
bmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVj
dHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3BlcnR5SXNFbnVtZXJhYmxlLCBvYmpl
Y3RQcm90b0Z1bmNQcm9wZXJ0eUlzRW51bWVyYWJsZSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJl
Y3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS5pc1Byb3RvdHlwZU9mLCBvYmplY3RQcm90b0Z1bmNJc1Byb3RvdHlwZU9mKSwgRG9u
dEVudW0pOwogCiAgICAgLy8gTW96aWxsYSBleHRlbnNpb25zCi0gICAgcHV0RGlyZWN0RnVuY3Rp
b24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5j
dGlvblN0cnVjdHVyZSwgMiwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9fZGVmaW5lR2V0dGVyX18s
IG9iamVjdFByb3RvRnVuY0RlZmluZUdldHRlciksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RG
dW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0
ZXJfXywgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOwotICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1
cEdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNMb29rdXBHZXR0ZXIpLCBEb250RW51bSk7Ci0gICAg
cHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVj
LCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLl9f
bG9va3VwU2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1cFNldHRlciksIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykg
UHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2RlZmluZUdldHRlcl9fLCBvYmplY3RQcm90b0Z1bmNEZWZp
bmVHZXR0ZXIpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNp
dGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1
bmN0aW9uU3RydWN0dXJlLCAyLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuX19kZWZpbmVTZXR0ZXJf
Xywgb2JqZWN0UHJvdG9GdW5jRGVmaW5lU2V0dGVyKSwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLl9fbG9va3VwR2V0dGVyX18sIG9iamVjdFByb3RvRnVuY0xvb2t1cEdldHRlciksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5fX2xvb2t1cFNldHRlcl9fLCBvYmplY3RQcm90
b0Z1bmNMb29rdXBTZXR0ZXIpLCBEb250RW51bSk7CiB9CiAKIC8vIC0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLSBGdW5jdGlvbnMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0K
SW5kZXg6IGtqcy9PYmplY3RQcm90b3R5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvT2JqZWN0UHJv
dG90eXBlLmgJKHJldmlzaW9uIDM3NjM2KQorKysga2pzL09iamVjdFByb3RvdHlwZS5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNyw3ICsyNyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgY2xhc3Mg
T2JqZWN0UHJvdG90eXBlIDogcHVibGljIEpTT2JqZWN0IHsKICAgICBwdWJsaWM6Ci0gICAgICAg
IE9iamVjdFByb3RvdHlwZShFeGVjU3RhdGUqLCBTdHJ1Y3R1cmVJRCogcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUpOworICAgICAgICBPYmplY3RQcm90b3R5cGUoRXhlY1N0YXRlKiwgUGFzc1Jl
ZlB0cjxTdHJ1Y3R1cmVJRD4sIFN0cnVjdHVyZUlEKiBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSk7CiAgICAgfTsKIAogICAgIEpTVmFsdWUqIG9iamVjdFByb3RvRnVuY1RvU3RyaW5nKEV4ZWNT
dGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKSW5kZXg6IGtqcy9T
dHJ1Y3R1cmVJRC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmNwcAkocmV2aXNp
b24gMzc2MzYpCisrKyBranMvU3RydWN0dXJlSUQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTcs
NiArMzE3LDE0IEBAIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IFN0cnVjdHVyZUlEOjpnZXQKICAg
ICByZXR1cm4gdHJhbnNpdGlvbi5yZWxlYXNlKCk7CiB9CiAKK3NpemVfdCBTdHJ1Y3R1cmVJRDo6
YWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5h
bWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpCit7CisgICAgc2l6ZV90IG9mZnNldCA9IG1fcHJvcGVy
dHlNYXAucHV0KHByb3BlcnR5TmFtZSwgYXR0cmlidXRlcyk7CisgICAgaWYgKG1fcHJvcGVydHlN
YXAuc3RvcmFnZVNpemUoKSA+IHByb3BlcnR5U3RvcmFnZUNhcGFjaXR5KCkpCisgICAgICAgIGdy
b3dQcm9wZXJ0eVN0b3JhZ2VDYXBhY2l0eSgpOworICAgIHJldHVybiBvZmZzZXQ7Cit9CisKIFN0
cnVjdHVyZUlEQ2hhaW4qIFN0cnVjdHVyZUlEOjpjcmVhdGVDYWNoZWRQcm90b3R5cGVDaGFpbigp
CiB7CiAgICAgQVNTRVJUKHR5cGVJbmZvKCkudHlwZSgpID09IE9iamVjdFR5cGUpOwpJbmRleDog
a2pzL1N0cnVjdHVyZUlELmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1N0cnVjdHVyZUlELmgJKHJldmlz
aW9uIDM3NjM2KQorKysga2pzL1N0cnVjdHVyZUlELmgJKHdvcmtpbmcgY29weSkKQEAgLTM4LDcg
KzM4LDcgQEAKICNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZD
b3VudGVkLmg+CiAKLSNkZWZpbmUgRFVNUF9TVFJVQ1RVUkVfSURfU1RBVElTVElDUyAwCisjZGVm
aW5lIERVTVBfU1RSVUNUVVJFX0lEX1NUQVRJU1RJQ1MgMQogCiBuYW1lc3BhY2UgSlNDIHsKIApA
QCAtMTA1LDYgKzEwNSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIG1fcHJv
dG90eXBlLT5tYXJrKCk7CiAgICAgICAgIH0KIAorICAgICAgICBzaXplX3QgYWRkUHJvcGVydHlX
aXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVk
IGF0dHJpYnV0ZXMpOworCiAgICAgICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3QgeyByZXR1
cm4gbV9pc0RpY3Rpb25hcnk7IH0KIAogICAgICAgICBjb25zdCBUeXBlSW5mbyYgdHlwZUluZm8o
KSBjb25zdCB7IHJldHVybiBtX3R5cGVJbmZvOyB9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>24469</attachid>
            <date>2008-10-17 17:09:08 -0700</date>
            <delta_ts>2010-06-10 16:10:50 -0700</delta_ts>
            <desc>Patch 3 - The remaining singletons</desc>
            <filename>stage2.diff</filename>
            <type>text/plain</type>
            <size>42266</size>
            <attacher name="Sam Weinig">sam</attacher>
            
              <data encoding="base64">SW5kZXg6IENoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBDaGFuZ2VMb2cJKHJldmlzaW9uIDM3NjY2
KQorKysgQ2hhbmdlTG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsNjIgQEAKKzIwMDgtMTAt
MTYgIFNhbSBXZWluaWcgIDxzYW1Ad2Via2l0Lm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBO
T0JPRFkgKE9PUFMhKS4KKworICAgICAgICBGaXggZm9yIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0yMTY4MworICAgICAgICBEb24ndCBjcmVhdGUgaW50ZXJtZWRpYXRl
IFN0cnVjdHVyZUlEcyBmb3IgYnVpbHRpbiBvYmplY3RzCisKKyAgICAgICAgU2Vjb25kIHN0YWdl
IGluIHJlZHVjZSBudW1iZXIgb2YgU3RydWN0dXJlSURzIGNyZWF0ZWQgd2hlbiBpbml0aWFsaXpp
bmcgdGhlCisgICAgICAgIEpTR2xvYmFsT2JqZWN0LgorCisgICAgICAgIC0gVXNlIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uIGZvciB0aGUgcmVtYWluaW5nIHNpbmdsZXRvbiBvYmplY3RzIHRv
IHJlZHVjZQorICAgICAgICAgIHRoZSBudW1iZXIgb2YgU3RydWN0dXJlSURzIGNyZWF0ZSBmb3Ig
YWJvdXQ6YmxhbmsgZnJvbSAxMzIgdG8gNzMuCisKKyAgICAgICAgKiBranMvQXJyYXlDb25zdHJ1
Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkFycmF5Q29uc3RydWN0b3I6OkFycmF5Q29uc3RydWN0
b3IpOgorICAgICAgICAqIGtqcy9Cb29sZWFuQ29uc3RydWN0b3IuY3BwOgorICAgICAgICAoSlND
OjpCb29sZWFuQ29uc3RydWN0b3I6OkJvb2xlYW5Db25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pz
L0Jvb2xlYW5Qcm90b3R5cGUuY3BwOgorICAgICAgICAoSlNDOjpCb29sZWFuUHJvdG90eXBlOjpC
b29sZWFuUHJvdG90eXBlKToKKyAgICAgICAgKiBranMvRGF0ZUNvbnN0cnVjdG9yLmNwcDoKKyAg
ICAgICAgKEpTQzo6RGF0ZUNvbnN0cnVjdG9yOjpEYXRlQ29uc3RydWN0b3IpOgorICAgICAgICAq
IGtqcy9FcnJvckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6RXJyb3JDb25zdHJ1Y3Rv
cjo6RXJyb3JDb25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL0Vycm9yUHJvdG90eXBlLmNwcDoK
KyAgICAgICAgKEpTQzo6RXJyb3JQcm90b3R5cGU6OkVycm9yUHJvdG90eXBlKToKKyAgICAgICAg
KiBranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uQ29u
c3RydWN0b3I6OkZ1bmN0aW9uQ29uc3RydWN0b3IpOgorICAgICAgICAqIGtqcy9GdW5jdGlvblBy
b3RvdHlwZS5jcHA6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjpGdW5jdGlvblBy
b3RvdHlwZSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5jdGlvblBy
b3BlcnRpZXMpOgorICAgICAgICAqIGtqcy9GdW5jdGlvblByb3RvdHlwZS5oOgorICAgICAgICAo
SlNDOjpGdW5jdGlvblByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQpOgorICAgICAgICAqIGtq
cy9JbnRlcm5hbEZ1bmN0aW9uLmNwcDoKKyAgICAgICAgKiBranMvSW50ZXJuYWxGdW5jdGlvbi5o
OgorICAgICAgICAoSlNDOjpJbnRlcm5hbEZ1bmN0aW9uOjpJbnRlcm5hbEZ1bmN0aW9uKToKKyAg
ICAgICAgKiBranMvSlNHbG9iYWxPYmplY3QuY3BwOgorICAgICAgICAoSlNDOjpKU0dsb2JhbE9i
amVjdDo6cmVzZXQpOgorICAgICAgICAqIGtqcy9KU09iamVjdC5oOgorICAgICAgICAqIGtqcy9N
YXRoT2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6TWF0aE9iamVjdDo6TWF0aE9iamVjdCk6Cisg
ICAgICAgICoga2pzL051bWJlckNvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6TnVtYmVy
Q29uc3RydWN0b3I6Ok51bWJlckNvbnN0cnVjdG9yKToKKyAgICAgICAgKiBranMvTnVtYmVyUHJv
dG90eXBlLmNwcDoKKyAgICAgICAgKEpTQzo6TnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5
cGUpOgorICAgICAgICAqIGtqcy9PYmplY3RDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6
Ok9iamVjdENvbnN0cnVjdG9yOjpPYmplY3RDb25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6UmVnRXhwQ29uc3RydWN0b3I6OlJl
Z0V4cENvbnN0cnVjdG9yKToKKyAgICAgICAgKiBranMvUmVnRXhwUHJvdG90eXBlLmNwcDoKKyAg
ICAgICAgKEpTQzo6UmVnRXhwUHJvdG90eXBlOjpSZWdFeHBQcm90b3R5cGUpOgorICAgICAgICAq
IGtqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OlN0cmluZ0NvbnN0cnVj
dG9yOjpTdHJpbmdDb25zdHJ1Y3Rvcik6CisgICAgICAgICoga2pzL1N0cmluZ1Byb3RvdHlwZS5j
cHA6CisgICAgICAgIChKU0M6OlN0cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKToKKyAg
ICAgICAgKiBranMvU3RydWN0dXJlSUQuY3BwOgorICAgICAgICAoSlNDOjpTdHJ1Y3R1cmVJRDo6
ZHVtcFN0YXRpc3RpY3MpOgorICAgICAgICAqIGtqcy9TdHJ1Y3R1cmVJRC5oOgorICAgICAgICAo
SlNDOjpTdHJ1Y3R1cmVJRDo6c2V0UHJvdG90eXBlV2l0aG91dFRyYW5zaXRpb24pOgorCiAyMDA4
LTEwLTE3ICBNYWNpZWogU3RhY2hvd2lhayAgPG1qc0BhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQ2FtZXJvbiBad2FyaWNoCkluZGV4OiBranMvQXJyYXlDb25zdHJ1Y3Rvci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0ga2pzL0FycmF5Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzY2NikK
KysrIGtqcy9BcnJheUNvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTAgKzM2
LDEwIEBAIEFycmF5Q29uc3RydWN0b3I6OkFycmF5Q29uc3RydWN0b3IoRXhlY1MKICAgICA6IElu
dGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3RydWN0dXJlLCBJZGVudGlmaWVy
KGV4ZWMsIGFycmF5UHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xhc3NOYW1lKSkKIHsKICAgICAv
LyBFQ01BIDE1LjQuMy4xIEFycmF5LnByb3RvdHlwZQotICAgIHB1dERpcmVjdChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBhcnJheVByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVs
ZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGFycmF5UHJvdG90eXBlLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1
Y3RvcgotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIHN0
YXRpYyBKU09iamVjdCogY29uc3RydWN0QXJyYXlXaXRoU2l6ZVF1aXJrKEV4ZWNTdGF0ZSogZXhl
YywgY29uc3QgQXJnTGlzdCYgYXJncykKSW5kZXg6IGtqcy9Cb29sZWFuQ29uc3RydWN0b3IuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIGtqcy9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzY2
NikKKysrIGtqcy9Cb29sZWFuQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMSwx
MCArMzEsMTAgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChCb29sZWFuQ29uc3RydQogQm9v
bGVhbkNvbnN0cnVjdG9yOjpCb29sZWFuQ29uc3RydWN0b3IoRXhlY1N0YXRlKiBleGVjLCBQYXNz
UmVmUHRyPFN0cnVjdHVyZUlEPiBzdHJ1Y3R1cmUsIEJvb2xlYW5Qcm90b3R5cGUqIGJvb2xlYW5Q
cm90b3R5cGUpCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBib29sZWFuUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+
Y2xhc3NOYW1lKSkKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3Rv
dHlwZSwgYm9vbGVhblByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5w
cm90b3R5cGUsIGJvb2xlYW5Qcm90b3R5cGUsIERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRP
bmx5KTsKIAogICAgIC8vIG5vLiBvZiBhcmd1bWVudHMgZm9yIGNvbnN0cnVjdG9yCi0gICAgcHV0
RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBS
ZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSks
IFJlYWRPbmx5IHwgRG9udERlbGV0ZSB8IERvbnRFbnVtKTsKIH0KIAogLy8gRUNNQSAxNS42LjIK
SW5kZXg6IGtqcy9Cb29sZWFuUHJvdG90eXBlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvQm9vbGVh
blByb3RvdHlwZS5jcHAJKHJldmlzaW9uIDM3NjY2KQorKysga2pzL0Jvb2xlYW5Qcm90b3R5cGUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC00MSw4ICs0MSw4IEBAIEJvb2xlYW5Qcm90b3R5cGU6OkJv
b2xlYW5Qcm90b3R5cGUoRXhlY1MKIHsKICAgICBzZXRJbnRlcm5hbFZhbHVlKGpzQm9vbGVhbihm
YWxzZSkpOwogCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnRvU3RyaW5nLCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlO
YW1lcygpLnZhbHVlT2YsIGJvb2xlYW5Qcm90b0Z1bmNWYWx1ZU9mKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+
cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBib29sZWFuUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250
RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudmFsdWVPZiwgYm9vbGVhblByb3RvRnVuY1ZhbHVl
T2YpLCBEb250RW51bSk7CiB9CiAKIApJbmRleDoga2pzL0RhdGVDb25zdHJ1Y3Rvci5jcHAKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0ga2pzL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3NjY2KQorKysg
a2pzL0RhdGVDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU0LDEzICs1NCwxMyBA
QCBzdGF0aWMgSlNWYWx1ZSogZGF0ZVVUQyhFeGVjU3RhdGUqLCBKU09iCiBEYXRlQ29uc3RydWN0
b3I6OkRhdGVDb25zdHJ1Y3RvcihFeGVjU3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJl
SUQ+IHN0cnVjdHVyZSwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCBE
YXRlUHJvdG90eXBlKiBkYXRlUHJvdG90eXBlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZGF0ZVByb3RvdHlw
ZS0+Y2xhc3NJbmZvKCktPmNsYXNzTmFtZSkpCiB7Ci0gICAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgZGF0ZVByb3RvdHlwZSwgRG9udEVudW18RG9udERlbGV0
ZXxSZWFkT25seSk7CisgICAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBkYXRlUHJvdG90eXBlLCBEb250RW51bXxEb250RGVsZXRl
fFJlYWRPbmx5KTsKIAotICAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnBhcnNlLCBkYXRlUGFyc2UpLCBEb250RW51bSk7Ci0gICAgICBw
dXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMs
IHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCA3LCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuVVRD
LCBkYXRlVVRDKSwgRG9udEVudW0pOwotICAgICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLm5vdywgZGF0ZU5vdyksIERvbnRFbnVtKTsKKyAg
ICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnBhcnNlLCBkYXRlUGFyc2UpLCBEb250RW51bSk7CisgICAgICBw
dXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90
eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDcsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5VVEMsIGRhdGVVVEMpLCBEb250RW51bSk7CisgICAgICBwdXREaXJlY3RG
dW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rp
b24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5ub3csIGRhdGVOb3cpLCBEb250RW51bSk7CiAKLSAgICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCA3KSwgUmVhZE9ubHkgfCBEb250
RW51bSB8IERvbnREZWxldGUpOworICAgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhl
Yy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgNyksIFJlYWRPbmx5IHwg
RG9udEVudW0gfCBEb250RGVsZXRlKTsKIH0KIAogLy8gRUNNQSAxNS45LjMKSW5kZXg6IGtqcy9F
cnJvckNvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvRXJyb3JDb25zdHJ1Y3Rvci5j
cHAJKHJldmlzaW9uIDM3NjY2KQorKysga2pzL0Vycm9yQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zMyw4ICszMyw4IEBAIEVycm9yQ29uc3RydWN0b3I6OkVycm9yQ29uc3RydWN0
b3IoRXhlY1MKICAgICA6IEludGVybmFsRnVuY3Rpb24oJmV4ZWMtPmdsb2JhbERhdGEoKSwgc3Ry
dWN0dXJlLCBJZGVudGlmaWVyKGV4ZWMsIGVycm9yUHJvdG90eXBlLT5jbGFzc0luZm8oKS0+Y2xh
c3NOYW1lKSkKIHsKICAgICAvLyBFQ01BIDE1LjExLjMuMSBFcnJvci5wcm90b3R5cGUKLSAgICBw
dXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwgZXJyb3JQcm90b3R5cGUs
IERvbnRFbnVtIHwgRG9udERlbGV0ZSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIERvbnREZWxldGUgfCBS
ZWFkT25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVj
LT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBlcnJvclByb3RvdHlwZSwgRG9udEVudW0gfCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBEb250RGVsZXRl
IHwgUmVhZE9ubHkgfCBEb250RW51bSk7CiB9CiAKIC8vIEVDTUEgMTUuOS4zCkluZGV4OiBranMv
RXJyb3JQcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9FcnJvclByb3RvdHlwZS5jcHAJ
KHJldmlzaW9uIDM3NjY2KQorKysga2pzL0Vycm9yUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMzgsMTAgKzM4LDEwIEBAIEVycm9yUHJvdG90eXBlOjpFcnJvclByb3RvdHlwZShFeGVj
U3RhdGUKIHsKICAgICAvLyBUaGUgY29uc3RydWN0b3Igd2lsbCBiZSBhZGRlZCBsYXRlciBpbiBF
cnJvckNvbnN0cnVjdG9yJ3MgY29uc3RydWN0b3IKIAotICAgIHB1dERpcmVjdChleGVjLT5wcm9w
ZXJ0eU5hbWVzKCkubmFtZSwganNOb250cml2aWFsU3RyaW5nKGV4ZWMsICJFcnJvciIpLCBEb250
RW51bSk7Ci0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5tZXNzYWdlLCBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgIlVua25vd24gZXJyb3IiKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5uYW1lLCBqc05v
bnRyaXZpYWxTdHJpbmcoZXhlYywgIkVycm9yIiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkubWVzc2FnZSwganNOb250cml2
aWFsU3RyaW5nKGV4ZWMsICJVbmtub3duIGVycm9yIiksIERvbnRFbnVtKTsKIAotICAgIHB1dERp
cmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJv
dG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmlu
ZywgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMo
KS50b1N0cmluZywgZXJyb3JQcm90b0Z1bmNUb1N0cmluZyksIERvbnRFbnVtKTsKIH0KIAogSlNW
YWx1ZSogZXJyb3JQcm90b0Z1bmNUb1N0cmluZyhFeGVjU3RhdGUqIGV4ZWMsIEpTT2JqZWN0Kiwg
SlNWYWx1ZSogdGhpc1ZhbHVlLCBjb25zdCBBcmdMaXN0JikKSW5kZXg6IGtqcy9GdW5jdGlvbkNv
bnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvRnVuY3Rpb25Db25zdHJ1Y3Rvci5jcHAJ
KHJldmlzaW9uIDM3NjY2KQorKysga2pzL0Z1bmN0aW9uQ29uc3RydWN0b3IuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNywxMCArMzcsMTAgQEAgQVNTRVJUX0NMQVNTX0ZJVFNfSU5fQ0VMTChGdW5j
dGlvbkNvbnN0cgogRnVuY3Rpb25Db25zdHJ1Y3Rvcjo6RnVuY3Rpb25Db25zdHJ1Y3RvcihFeGVj
U3RhdGUqIGV4ZWMsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgRnVuY3Rpb25Q
cm90b3R5cGUqIGZ1bmN0aW9uUHJvdG90eXBlKQogICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhl
Yy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgZnVuY3Rpb25Qcm90
b3R5cGUtPmNsYXNzSW5mbygpLT5jbGFzc05hbWUpKQogewotICAgIHB1dERpcmVjdChleGVjLT5w
cm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBmdW5jdGlvblByb3RvdHlwZSwgRG9udEVudW0gfCBE
b250RGVsZXRlIHwgUmVhZE9ubHkpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5cGUsIGZ1bmN0aW9uUHJvdG90eXBlLCBEb250RW51
bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBOdW1iZXIgb2YgYXJndW1lbnRz
IGZvciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVu
Z3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RGVsZXRlIHwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5s
ZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnREZWxldGUgfCBEb250RW51
bSk7CiB9CiAKIHN0YXRpYyBKU09iamVjdCogY29uc3RydWN0V2l0aEZ1bmN0aW9uQ29uc3RydWN0
b3IoRXhlY1N0YXRlKiBleGVjLCBKU09iamVjdCosIGNvbnN0IEFyZ0xpc3QmIGFyZ3MpCkluZGV4
OiBranMvRnVuY3Rpb25Qcm90b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9GdW5jdGlvblBy
b3RvdHlwZS5jcHAJKHJldmlzaW9uIDM3NjY2KQorKysga2pzL0Z1bmN0aW9uUHJvdG90eXBlLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMzYsMTcgKzM2LDE3IEBAIHN0YXRpYyBKU1ZhbHVlKiBmdW5j
dGlvblByb3RvRnVuY1RvU3RyaW4KIHN0YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0Fw
cGx5KEV4ZWNTdGF0ZSosIEpTT2JqZWN0KiwgSlNWYWx1ZSosIGNvbnN0IEFyZ0xpc3QmKTsKIHN0
YXRpYyBKU1ZhbHVlKiBmdW5jdGlvblByb3RvRnVuY0NhbGwoRXhlY1N0YXRlKiwgSlNPYmplY3Qq
LCBKU1ZhbHVlKiwgY29uc3QgQXJnTGlzdCYpOwogCi1GdW5jdGlvblByb3RvdHlwZTo6RnVuY3Rp
b25Qcm90b3R5cGUoRXhlY1N0YXRlKiBleGVjKQotICAgIDogSW50ZXJuYWxGdW5jdGlvbigmZXhl
Yy0+Z2xvYmFsRGF0YSgpKQorRnVuY3Rpb25Qcm90b3R5cGU6OkZ1bmN0aW9uUHJvdG90eXBlKEV4
ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlKQorICAgIDog
SW50ZXJuYWxGdW5jdGlvbigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIGV4ZWMtPnBy
b3BlcnR5TmFtZXMoKS5udWxsSWRlbnRpZmllcikKIHsKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJv
cGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMCksIERvbnREZWxldGUgfCBSZWFk
T25seSB8IERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5w
cm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAwKSwgRG9udERlbGV0ZSB8IFJl
YWRPbmx5IHwgRG9udEVudW0pOwogfQogCiB2b2lkIEZ1bmN0aW9uUHJvdG90eXBlOjphZGRGdW5j
dGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiBleGVjLCBTdHJ1Y3R1cmVJRCogcHJvdG90eXBlRnVu
Y3Rpb25TdHJ1Y3R1cmUpCiB7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5n
KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJv
dG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDIsIGV4ZWMt
PnByb3BlcnR5TmFtZXMoKS5hcHBseSwgZnVuY3Rpb25Qcm90b0Z1bmNBcHBseSksIERvbnRFbnVt
KTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0
aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY2FsbCwgZnVuY3Rpb25Qcm90b0Z1bmNDYWxsKSwgRG9udEVudW0pOworICAgIHB1dERp
cmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVG
dW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnRvU3RyaW5nLCBmdW5jdGlvblByb3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0p
OworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMiwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmFwcGx5LCBmdW5jdGlvblByb3RvRnVuY0FwcGx5KSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmNhbGwsIGZ1bmN0aW9uUHJvdG9GdW5jQ2FsbCks
IERvbnRFbnVtKTsKIH0KIAogc3RhdGljIEpTVmFsdWUqIGNhbGxGdW5jdGlvblByb3RvdHlwZShF
eGVjU3RhdGUqLCBKU09iamVjdCosIEpTVmFsdWUqLCBjb25zdCBBcmdMaXN0JikKSW5kZXg6IGtq
cy9GdW5jdGlvblByb3RvdHlwZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9GdW5jdGlvblByb3RvdHlw
ZS5oCShyZXZpc2lvbiAzNzY2NikKKysrIGtqcy9GdW5jdGlvblByb3RvdHlwZS5oCSh3b3JraW5n
IGNvcHkpCkBAIC0yNyw5ICsyNywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIGNsYXNzIEZ1
bmN0aW9uUHJvdG90eXBlIDogcHVibGljIEludGVybmFsRnVuY3Rpb24gewogICAgIHB1YmxpYzoK
LSAgICAgICAgRnVuY3Rpb25Qcm90b3R5cGUoRXhlY1N0YXRlKik7CisgICAgICAgIEZ1bmN0aW9u
UHJvdG90eXBlKEV4ZWNTdGF0ZSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+KTsKICAgICAgICAg
dm9pZCBhZGRGdW5jdGlvblByb3BlcnRpZXMoRXhlY1N0YXRlKiwgU3RydWN0dXJlSUQqIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlKTsKIAorICAgICAgICBzdGF0aWMgUGFzc1JlZlB0cjxTdHJ1
Y3R1cmVJRD4gY3JlYXRlU3RydWN0dXJlSUQoSlNWYWx1ZSogcHJvdG8pCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBTdHJ1Y3R1cmVJRDo6Y3JlYXRlKHByb3RvLCBUeXBlSW5mbyhPYmpl
Y3RUeXBlKSk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAgICAgICAgIHZpcnR1YWwgQ2Fs
bFR5cGUgZ2V0Q2FsbERhdGEoQ2FsbERhdGEmKTsKICAgICB9OwpJbmRleDoga2pzL0ludGVybmFs
RnVuY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9JbnRlcm5hbEZ1bmN0aW9uLmNwcAkocmV2
aXNpb24gMzc2NjYpCisrKyBranMvSW50ZXJuYWxGdW5jdGlvbi5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM3LDEyICszNyw2IEBAIGNvbnN0IENsYXNzSW5mbyogSW50ZXJuYWxGdW5jdGlvbjo6Y2xh
c3MKICAgICByZXR1cm4gJmluZm87CiB9CiAKLUludGVybmFsRnVuY3Rpb246OkludGVybmFsRnVu
Y3Rpb24oSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhKQotICAgIDogSlNPYmplY3QoZ2xvYmFsRGF0
YS0+bnVsbFByb3RvU3RydWN0dXJlSUQpCi17Ci0gICAgcHV0RGlyZWN0KGdsb2JhbERhdGEtPnBy
b3BlcnR5TmFtZXMtPm5hbWUsIGpzU3RyaW5nKGdsb2JhbERhdGEsIGdsb2JhbERhdGEtPnByb3Bl
cnR5TmFtZXMtPm51bGxJZGVudGlmaWVyLnVzdHJpbmcoKSksIERvbnREZWxldGUgfCBSZWFkT25s
eSB8IERvbnRFbnVtKTsKLX0KLQogSW50ZXJuYWxGdW5jdGlvbjo6SW50ZXJuYWxGdW5jdGlvbihK
U0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVy
ZSwgY29uc3QgSWRlbnRpZmllciYgbmFtZSkKICAgICA6IEpTT2JqZWN0KHN0cnVjdHVyZSkKIHsK
SW5kZXg6IGtqcy9JbnRlcm5hbEZ1bmN0aW9uLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL0ludGVybmFs
RnVuY3Rpb24uaAkocmV2aXNpb24gMzc2NjYpCisrKyBranMvSW50ZXJuYWxGdW5jdGlvbi5oCSh3
b3JraW5nIGNvcHkpCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+
IHN0cnVjdHVyZSkgOiBKU09iamVjdChzdHJ1Y3R1cmUpIHsgfQotICAgICAgICBJbnRlcm5hbEZ1
bmN0aW9uKEpTR2xvYmFsRGF0YSopOwogICAgICAgICBJbnRlcm5hbEZ1bmN0aW9uKEpTR2xvYmFs
RGF0YSosIFBhc3NSZWZQdHI8U3RydWN0dXJlSUQ+LCBjb25zdCBJZGVudGlmaWVyJik7CiAKICAg
ICBwcml2YXRlOgpJbmRleDoga2pzL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBr
anMvSlNHbG9iYWxPYmplY3QuY3BwCShyZXZpc2lvbiAzNzY2NikKKysrIGtqcy9KU0dsb2JhbE9i
amVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwMCwzMSArMjAwLDM5IEBAIHZvaWQgSlNHbG9i
YWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKIAogICAgIC8vIFByb3RvdHlwZXMKIAotICAg
IGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEZ1bmN0aW9uUHJvdG90eXBlKGV4
ZWMpOwotICAgIGQoKS0+ZnVuY3Rpb25TdHJ1Y3R1cmUgPSBKU0Z1bmN0aW9uOjpjcmVhdGVTdHJ1
Y3R1cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKTsKLSAgICBkKCktPmNhbGxiYWNrRnVuY3Rp
b25TdHJ1Y3R1cmUgPSBKU0NhbGxiYWNrRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+
ZnVuY3Rpb25Qcm90b3R5cGUpOworICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUgPSBuZXcgKGV4
ZWMpIEZ1bmN0aW9uUHJvdG90eXBlKGV4ZWMsIEZ1bmN0aW9uUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmVJRChqc051bGwoKSkpOyAvLyBUaGUgcmVhbCBwcm90b3R5cGUgd2lsbCBiZSBzZXQgb25j
ZSBPYmplY3RQcm90b3R5cGUgaXMgY3JlYXRlZC4KICAgICBkKCktPnByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlID0gUHJvdG90eXBlRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVu
Y3Rpb25Qcm90b3R5cGUpOwogICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUtPmFkZEZ1bmN0aW9u
UHJvcGVydGllcyhleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsK
LQogICAgIGQoKS0+b2JqZWN0UHJvdG90eXBlID0gbmV3IChleGVjKSBPYmplY3RQcm90b3R5cGUo
ZXhlYywgT2JqZWN0UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChqc051bGwoKSksIGQoKS0+
cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCkpOworICAgIGQoKS0+ZnVuY3Rpb25Qcm90
b3R5cGUtPnN0cnVjdHVyZUlEKCktPnNldFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKGQoKS0+
b2JqZWN0UHJvdG90eXBlKTsKKwogICAgIGQoKS0+ZW1wdHlPYmplY3RTdHJ1Y3R1cmUgPSBkKCkt
Pm9iamVjdFByb3RvdHlwZS0+aW5oZXJpdG9ySUQoKTsKLSAgICBkKCktPmZ1bmN0aW9uUHJvdG90
eXBlLT5zZXRQcm90b3R5cGUoZCgpLT5vYmplY3RQcm90b3R5cGUpOworCisgICAgZCgpLT5mdW5j
dGlvblN0cnVjdHVyZSA9IEpTRnVuY3Rpb246OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZnVuY3Rp
b25Qcm90b3R5cGUpOworICAgIGQoKS0+Y2FsbGJhY2tGdW5jdGlvblN0cnVjdHVyZSA9IEpTQ2Fs
bGJhY2tGdW5jdGlvbjo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5mdW5jdGlvblByb3RvdHlwZSk7
CiAgICAgZCgpLT5hcmd1bWVudHNTdHJ1Y3R1cmUgPSBBcmd1bWVudHM6OmNyZWF0ZVN0cnVjdHVy
ZUlEKGQoKS0+b2JqZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrQ29uc3RydWN0b3JT
dHJ1Y3R1cmUgPSBKU0NhbGxiYWNrQ29uc3RydWN0b3I6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+
b2JqZWN0UHJvdG90eXBlKTsKICAgICBkKCktPmNhbGxiYWNrT2JqZWN0U3RydWN0dXJlID0gSlND
YWxsYmFja09iamVjdDxKU09iamVjdD46OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJv
dG90eXBlKTsKKwogICAgIGQoKS0+YXJyYXlQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIEFycmF5UHJv
dG90eXBlKEFycmF5UHJvdG90eXBlOjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm9iamVjdFByb3Rv
dHlwZSkpOwogICAgIGQoKS0+YXJyYXlTdHJ1Y3R1cmUgPSBKU0FycmF5OjpjcmVhdGVTdHJ1Y3R1
cmVJRChkKCktPmFycmF5UHJvdG90eXBlKTsKICAgICBkKCktPnJlZ0V4cE1hdGNoZXNBcnJheVN0
cnVjdHVyZSA9IFJlZ0V4cE1hdGNoZXNBcnJheTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5hcnJh
eVByb3RvdHlwZSk7CisKICAgICBkKCktPnN0cmluZ1Byb3RvdHlwZSA9IG5ldyAoZXhlYykgU3Ry
aW5nUHJvdG90eXBlKGV4ZWMsIFN0cmluZ1Byb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgp
LT5vYmplY3RQcm90b3R5cGUpKTsKICAgICBkKCktPnN0cmluZ09iamVjdFN0cnVjdHVyZSA9IFN0
cmluZ09iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5zdHJpbmdQcm90b3R5cGUpOworCiAg
ICAgZCgpLT5ib29sZWFuUHJvdG90eXBlID0gbmV3IChleGVjKSBCb29sZWFuUHJvdG90eXBlKGV4
ZWMsIEJvb2xlYW5Qcm90b3R5cGU6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+b2JqZWN0UHJvdG90
eXBlKSwgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSk7CiAgICAgZCgpLT5i
b29sZWFuT2JqZWN0U3RydWN0dXJlID0gQm9vbGVhbk9iamVjdDo6Y3JlYXRlU3RydWN0dXJlSUQo
ZCgpLT5ib29sZWFuUHJvdG90eXBlKTsKKwogICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlID0gbmV3
IChleGVjKSBOdW1iZXJQcm90b3R5cGUoZXhlYywgTnVtYmVyUHJvdG90eXBlOjpjcmVhdGVTdHJ1
Y3R1cmVJRChkKCktPm9iamVjdFByb3RvdHlwZSksIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUuZ2V0KCkpOwogICAgIGQoKS0+bnVtYmVyT2JqZWN0U3RydWN0dXJlID0gTnVtYmVyT2Jq
ZWN0OjpjcmVhdGVTdHJ1Y3R1cmVJRChkKCktPm51bWJlclByb3RvdHlwZSk7CisKICAgICBkKCkt
PmRhdGVQcm90b3R5cGUgPSBuZXcgKGV4ZWMpIERhdGVQcm90b3R5cGUoZXhlYywgRGF0ZVByb3Rv
dHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpKTsKICAgICBkKCkt
PmRhdGVTdHJ1Y3R1cmUgPSBEYXRlSW5zdGFuY2U6OmNyZWF0ZVN0cnVjdHVyZUlEKGQoKS0+ZGF0
ZVByb3RvdHlwZSk7CisKICAgICBkKCktPnJlZ0V4cFByb3RvdHlwZSA9IG5ldyAoZXhlYykgUmVn
RXhwUHJvdG90eXBlKGV4ZWMsIFJlZ0V4cFByb3RvdHlwZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgp
LT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
KTsKICAgICBkKCktPnJlZ0V4cFN0cnVjdHVyZSA9IFJlZ0V4cE9iamVjdDo6Y3JlYXRlU3RydWN0
dXJlSUQoZCgpLT5yZWdFeHBQcm90b3R5cGUpOworCiAgICAgRXJyb3JQcm90b3R5cGUqIGVycm9y
UHJvdG90eXBlID0gbmV3IChleGVjKSBFcnJvclByb3RvdHlwZShleGVjLCBFcnJvclByb3RvdHlw
ZTo6Y3JlYXRlU3RydWN0dXJlSUQoZCgpLT5vYmplY3RQcm90b3R5cGUpLCBkKCktPnByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpKTsKICAgICBkKCktPmVycm9yU3RydWN0dXJlID0gRXJy
b3JJbnN0YW5jZTo6Y3JlYXRlU3RydWN0dXJlSUQoZXJyb3JQcm90b3R5cGUpOwogCkBAIC0yNjAs
MTggKzI2OCwxNiBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1ZhbHVlKiBwcm90CiAg
ICAgZCgpLT50eXBlRXJyb3JDb25zdHJ1Y3RvciA9IG5ldyAoZXhlYykgTmF0aXZlRXJyb3JDb25z
dHJ1Y3RvcihleGVjLCBuYXRpdmVFcnJvclN0cnVjdHVyZSwgdHlwZUVycm9yUHJvdG90eXBlKTsK
ICAgICBkKCktPlVSSUVycm9yQ29uc3RydWN0b3IgPSBuZXcgKGV4ZWMpIE5hdGl2ZUVycm9yQ29u
c3RydWN0b3IoZXhlYywgbmF0aXZlRXJyb3JTdHJ1Y3R1cmUsIFVSSUVycm9yUHJvdG90eXBlKTsK
IAotICAgIGQoKS0+ZnVuY3Rpb25Qcm90b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5h
bWVzKCkuY29uc3RydWN0b3IsIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKLQogICAg
IGQoKS0+b2JqZWN0UHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5w
cm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7
CisgICAgZCgpLT5mdW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24o
ZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBmdW5jdGlvbkNvbnN0cnVjdG9yLCBE
b250RW51bSk7CisgICAgZCgpLT5hcnJheVByb3RvdHlwZS0+cHV0RGlyZWN0V2l0aG91dFRyYW5z
aXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBhcnJheUNvbnN0cnVjdG9y
LCBEb250RW51bSk7CisgICAgZCgpLT5ib29sZWFuUHJvdG90eXBlLT5wdXREaXJlY3RXaXRob3V0
VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25z
dHJ1Y3RvciwgRG9udEVudW0pOworICAgIGQoKS0+c3RyaW5nUHJvdG90eXBlLT5wdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIHN0cmlu
Z0NvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgpLT5udW1iZXJQcm90b3R5cGUtPnB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rvciwg
bnVtYmVyQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBkKCktPmRhdGVQcm90b3R5cGUtPnB1
dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgZCgpLT5yZWdFeHBQcm90b3R5cGUt
PnB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgZCgpLT5yZWdFeHBDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIGVycm9yUHJvdG90
eXBlLT5wdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29u
c3RydWN0b3IsIGQoKS0+ZXJyb3JDb25zdHJ1Y3RvciwgRG9udEVudW0pOwogCi0gICAgZCgpLT5m
dW5jdGlvblByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1
Y3RvciwgZnVuY3Rpb25Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIGQoKS0+YXJyYXlQcm90
b3R5cGUtPnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGFycmF5
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBkKCktPmJvb2xlYW5Qcm90b3R5cGUtPnB1dERp
cmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGJvb2xlYW5Db25zdHJ1Y3Rv
ciwgRG9udEVudW0pOwotICAgIGQoKS0+c3RyaW5nUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+
cHJvcGVydHlOYW1lcygpLmNvbnN0cnVjdG9yLCBzdHJpbmdDb25zdHJ1Y3RvciwgRG9udEVudW0p
OwotICAgIGQoKS0+bnVtYmVyUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1l
cygpLmNvbnN0cnVjdG9yLCBudW1iZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIGQoKS0+
ZGF0ZVByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3Rv
ciwgZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgZCgpLT5yZWdFeHBQcm90b3R5cGUt
PnB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkuY29uc3RydWN0b3IsIGQoKS0+cmVnRXhw
Q29uc3RydWN0b3IsIERvbnRFbnVtKTsKLSAgICBlcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4
ZWMtPnByb3BlcnR5TmFtZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5lcnJvckNvbnN0cnVjdG9yLCBE
b250RW51bSk7CiAgICAgZXZhbEVycm9yUHJvdG90eXBlLT5wdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLmNvbnN0cnVjdG9yLCBkKCktPmV2YWxFcnJvckNvbnN0cnVjdG9yLCBEb250RW51
bSk7CiAgICAgcmFuZ2VFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5yYW5nZUVycm9yQ29uc3RydWN0b3IsIERvbnRFbnVtKTsK
ICAgICByZWZlcmVuY2VFcnJvclByb3RvdHlwZS0+cHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFt
ZXMoKS5jb25zdHJ1Y3RvciwgZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yLCBEb250RW51
bSk7CkBAIC0yODMsMjEgKzI4OSwyMSBAQCB2b2lkIEpTR2xvYmFsT2JqZWN0OjpyZXNldChKU1Zh
bHVlKiBwcm90CiAKICAgICAvLyBGSVhNRTogVGhlc2UgcHJvcGVydGllcyBjb3VsZCBiZSBoYW5k
bGVkIGJ5IGEgc3RhdGljIGhhc2ggdGFibGUuCiAKLSAgICBwdXREaXJlY3QoSWRlbnRpZmllcihl
eGVjLCAiT2JqZWN0IiksIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGly
ZWN0KElkZW50aWZpZXIoZXhlYywgIkZ1bmN0aW9uIiksIGZ1bmN0aW9uQ29uc3RydWN0b3IsIERv
bnRFbnVtKTsKLSAgICBwdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiQXJyYXkiKSwgYXJyYXlD
b25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJC
b29sZWFuIiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdChJ
ZGVudGlmaWVyKGV4ZWMsICJTdHJpbmciKSwgc3RyaW5nQ29uc3RydWN0b3IsIERvbnRFbnVtKTsK
LSAgICBwdXREaXJlY3QoSWRlbnRpZmllcihleGVjLCAiTnVtYmVyIiksIG51bWJlckNvbnN0cnVj
dG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkRhdGUiKSwg
ZGF0ZUNvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhl
YywgIlJlZ0V4cCIpLCBkKCktPnJlZ0V4cENvbnN0cnVjdG9yLCBEb250RW51bSk7Ci0gICAgcHV0
RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkVycm9yIiksIGQoKS0+ZXJyb3JDb25zdHJ1Y3Rvciwg
RG9udEVudW0pOwotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJyb3IiKSwg
ZCgpLT5ldmFsRXJyb3JDb25zdHJ1Y3Rvcik7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhl
YywgIlJhbmdlRXJyb3IiKSwgZCgpLT5yYW5nZUVycm9yQ29uc3RydWN0b3IpOwotICAgIHB1dERp
cmVjdChJZGVudGlmaWVyKGV4ZWMsICJSZWZlcmVuY2VFcnJvciIpLCBkKCktPnJlZmVyZW5jZUVy
cm9yQ29uc3RydWN0b3IpOwotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJTeW50YXhF
cnJvciIpLCBkKCktPnN5bnRheEVycm9yQ29uc3RydWN0b3IpOwotICAgIHB1dERpcmVjdChJZGVu
dGlmaWVyKGV4ZWMsICJUeXBlRXJyb3IiKSwgZCgpLT50eXBlRXJyb3JDb25zdHJ1Y3Rvcik7Ci0g
ICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlVSSUVycm9yIiksIGQoKS0+VVJJRXJyb3JD
b25zdHJ1Y3Rvcik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihl
eGVjLCAiT2JqZWN0IiksIG9iamVjdENvbnN0cnVjdG9yLCBEb250RW51bSk7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVjLCAiRnVuY3Rpb24iKSwgZnVuY3Rp
b25Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KElkZW50aWZpZXIoZXhlYywgIkFycmF5IiksIGFycmF5Q29uc3RydWN0b3IsIERvbnRFbnVtKTsK
KyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJCb29sZWFu
IiksIGJvb2xlYW5Db25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRU
cmFuc2l0aW9uKElkZW50aWZpZXIoZXhlYywgIlN0cmluZyIpLCBzdHJpbmdDb25zdHJ1Y3Rvciwg
RG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKElkZW50aWZpZXIoZXhl
YywgIk51bWJlciIpLCBudW1iZXJDb25zdHJ1Y3RvciwgRG9udEVudW0pOworICAgIHB1dERpcmVj
dFdpdGhvdXRUcmFuc2l0aW9uKElkZW50aWZpZXIoZXhlYywgIkRhdGUiKSwgZGF0ZUNvbnN0cnVj
dG9yLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmll
cihleGVjLCAiUmVnRXhwIiksIGQoKS0+cmVnRXhwQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJFcnJvciIpLCBk
KCktPmVycm9yQ29uc3RydWN0b3IsIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJFdmFsRXJyb3IiKSwgZCgpLT5ldmFsRXJyb3JDb25z
dHJ1Y3Rvcik7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVj
LCAiUmFuZ2VFcnJvciIpLCBkKCktPnJhbmdlRXJyb3JDb25zdHJ1Y3Rvcik7CisgICAgcHV0RGly
ZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVjLCAiUmVmZXJlbmNlRXJyb3IiKSwg
ZCgpLT5yZWZlcmVuY2VFcnJvckNvbnN0cnVjdG9yKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJh
bnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJTeW50YXhFcnJvciIpLCBkKCktPnN5bnRheEVycm9y
Q29uc3RydWN0b3IpOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKElkZW50aWZpZXIo
ZXhlYywgIlR5cGVFcnJvciIpLCBkKCktPnR5cGVFcnJvckNvbnN0cnVjdG9yKTsKKyAgICBwdXRE
aXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJVUklFcnJvciIpLCBkKCkt
PlVSSUVycm9yQ29uc3RydWN0b3IpOwogCiAgICAgLy8gU2V0IGdsb2JhbCB2YWx1ZXMuCiAgICAg
R2xvYmFsUHJvcGVydHlJbmZvIHN0YXRpY0dsb2JhbHNbXSA9IHsKQEAgLTMxMiwxOSArMzE4LDE5
IEBAIHZvaWQgSlNHbG9iYWxPYmplY3Q6OnJlc2V0KEpTVmFsdWUqIHByb3QKICAgICAvLyBTZXQg
Z2xvYmFsIGZ1bmN0aW9ucy4KIAogICAgIGQoKS0+ZXZhbEZ1bmN0aW9uID0gbmV3IChleGVjKSBH
bG9iYWxFdmFsRnVuY3Rpb24oZXhlYywgR2xvYmFsRXZhbEZ1bmN0aW9uOjpjcmVhdGVTdHJ1Y3R1
cmVJRChkKCktPmZ1bmN0aW9uUHJvdG90eXBlKSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLmV2
YWwsIGdsb2JhbEZ1bmNFdmFsLCB0aGlzKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBk
KCktPmV2YWxGdW5jdGlvbiwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMs
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZS5nZXQoKSwgMiwgSWRlbnRpZmllcihleGVjLCAicGFyc2VJbnQiKSwgZ2xvYmFs
RnVuY1BhcnNlSW50KSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0
cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVjLCAicGFyc2VGbG9hdCIpLCBnbG9iYWxG
dW5jUGFyc2VGbG9hdCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBu
ZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25T
dHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImlzTmFOIiksIGdsb2JhbEZ1bmNJ
c05hTiksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMp
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUu
Z2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImlzRmluaXRlIiksIGdsb2JhbEZ1bmNJc0Zpbml0
ZSksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4ZWMpIFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0
KCksIDEsIElkZW50aWZpZXIoZXhlYywgImVzY2FwZSIpLCBnbG9iYWxGdW5jRXNjYXBlKSwgRG9u
dEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBl
RnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwg
SWRlbnRpZmllcihleGVjLCAidW5lc2NhcGUiKSwgZ2xvYmFsRnVuY1VuZXNjYXBlKSwgRG9udEVu
dW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRl
bnRpZmllcihleGVjLCAiZGVjb2RlVVJJIiksIGdsb2JhbEZ1bmNEZWNvZGVVUkkpLCBEb250RW51
bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5j
dGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBJZGVu
dGlmaWVyKGV4ZWMsICJkZWNvZGVVUklDb21wb25lbnQiKSwgZ2xvYmFsRnVuY0RlY29kZVVSSUNv
bXBvbmVudCksIERvbnRFbnVtKTsKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcgKGV4
ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImVuY29kZVVSSSIpLCBnbG9iYWxGdW5jRW5j
b2RlVVJJKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVjLCAiZW5jb2RlVVJJQ29tcG9uZW50IiksIGdsb2Jh
bEZ1bmNFbmNvZGVVUklDb21wb25lbnQpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rp
b25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBkKCktPmV2YWxGdW5jdGlvbiwgRG9udEVudW0pOwor
ICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdl
dCgpLCAyLCBJZGVudGlmaWVyKGV4ZWMsICJwYXJzZUludCIpLCBnbG9iYWxGdW5jUGFyc2VJbnQp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgInBhcnNlRmxvYXQiKSwgZ2xv
YmFsRnVuY1BhcnNlRmxvYXQpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRo
b3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQo
KS0+cHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywg
ImlzTmFOIiksIGdsb2JhbEZ1bmNJc05hTiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5j
dGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24o
ZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmll
cihleGVjLCAiaXNGaW5pdGUiKSwgZ2xvYmFsRnVuY0lzRmluaXRlKSwgRG9udEVudW0pOworICAg
IHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90
b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgp
LCAxLCBJZGVudGlmaWVyKGV4ZWMsICJlc2NhcGUiKSwgZ2xvYmFsRnVuY0VzY2FwZSksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVj
dHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihleGVjLCAidW5lc2NhcGUiKSwgZ2xvYmFsRnVuY1Vu
ZXNjYXBlKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRp
b24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlw
ZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJkZWNvZGVVUkki
KSwgZ2xvYmFsRnVuY0RlY29kZVVSSSksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlv
bldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhl
YywgZCgpLT5wcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZS5nZXQoKSwgMSwgSWRlbnRpZmllcihl
eGVjLCAiZGVjb2RlVVJJQ29tcG9uZW50IiksIGdsb2JhbEZ1bmNEZWNvZGVVUklDb21wb25lbnQp
LCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVj
LCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImVuY29kZVVSSSIpLCBnbG9i
YWxGdW5jRW5jb2RlVVJJKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91
dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCkt
PnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLmdldCgpLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJl
bmNvZGVVUklDb21wb25lbnQiKSwgZ2xvYmFsRnVuY0VuY29kZVVSSUNvbXBvbmVudCksIERvbnRF
bnVtKTsKICNpZm5kZWYgTkRFQlVHCi0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChl
eGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBkKCktPnByb3RvdHlwZUZ1bmN0aW9uU3RydWN0
dXJlLmdldCgpLCAxLCBJZGVudGlmaWVyKGV4ZWMsICJranNwcmludCIpLCBnbG9iYWxGdW5jS0pT
UHJpbnQpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlv
bihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIGQoKS0+cHJvdG90eXBl
RnVuY3Rpb25TdHJ1Y3R1cmUuZ2V0KCksIDEsIElkZW50aWZpZXIoZXhlYywgImtqc3ByaW50Iiks
IGdsb2JhbEZ1bmNLSlNQcmludCksIERvbnRFbnVtKTsKICNlbmRpZgogCiAgICAgcmVzZXRQcm90
b3R5cGUocHJvdG90eXBlKTsKSW5kZXg6IGtqcy9KU09iamVjdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIGtq
cy9KU09iamVjdC5oCShyZXZpc2lvbiAzNzY2NikKKysrIGtqcy9KU09iamVjdC5oCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTcsOCArMTU3LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHZvaWQg
cHV0RGlyZWN0KGNvbnN0IElkZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUs
IHVuc2lnbmVkIGF0dHIgPSAwKTsKICAgICAgICAgdm9pZCBwdXREaXJlY3QoY29uc3QgSWRlbnRp
ZmllciYgcHJvcGVydHlOYW1lLCBKU1ZhbHVlKiB2YWx1ZSwgdW5zaWduZWQgYXR0ciwgYm9vbCBj
aGVja1JlYWRPbmx5LCBQdXRQcm9wZXJ0eVNsb3QmIHNsb3QpOwogICAgICAgICB2b2lkIHB1dERp
cmVjdEZ1bmN0aW9uKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24s
IHVuc2lnbmVkIGF0dHIgPSAwKTsKLSAgICAgICAgdm9pZCBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihjb25zdCBJZGVudGlmaWVyJiBwcm9wZXJ0eU5hbWUsIEpTVmFsdWUqIHZhbHVlLCB1bnNp
Z25lZCBhdHRyKTsKLSAgICAgICAgdm9pZCBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0
aW9uKEV4ZWNTdGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIHVuc2lnbmVk
IGF0dHIpOworICAgICAgICB2b2lkIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGNvbnN0IElk
ZW50aWZpZXImIHByb3BlcnR5TmFtZSwgSlNWYWx1ZSogdmFsdWUsIHVuc2lnbmVkIGF0dHIgPSAw
KTsKKyAgICAgICAgdm9pZCBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKEV4ZWNT
dGF0ZSogZXhlYywgSW50ZXJuYWxGdW5jdGlvbiogZnVuY3Rpb24sIHVuc2lnbmVkIGF0dHIgPSAw
KTsKIAogICAgICAgICAvLyBGYXN0IGFjY2VzcyB0byBrbm93biBwcm9wZXJ0eSBvZmZzZXRzLgog
ICAgICAgICBKU1ZhbHVlKiBnZXREaXJlY3RPZmZzZXQoc2l6ZV90IG9mZnNldCkgeyByZXR1cm4g
bV9wcm9wZXJ0eVN0b3JhZ2Vbb2Zmc2V0XTsgfQpJbmRleDoga2pzL01hdGhPYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIGtqcy9NYXRoT2JqZWN0LmNwcAkocmV2aXNpb24gMzc2NjYpCisrKyBranMv
TWF0aE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTg2LDE0ICs4NiwxNCBAQCBjb25zdCBD
bGFzc0luZm8gTWF0aE9iamVjdDo6aW5mbyA9IHsgIk1hCiBNYXRoT2JqZWN0OjpNYXRoT2JqZWN0
KEV4ZWNTdGF0ZSogZXhlYywgUGFzc1JlZlB0cjxTdHJ1Y3R1cmVJRD4gc3RydWN0dXJlKQogICAg
IDogSlNPYmplY3Qoc3RydWN0dXJlKQogewotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMs
ICJFIiksIGpzTnVtYmVyKGV4ZWMsIGV4cCgxLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwg
UmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJMTjIiKSwganNOdW1i
ZXIoZXhlYywgbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7Ci0g
ICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIkxOMTAiKSwganNOdW1iZXIoZXhlYywgbG9n
KDEwLjApKSwgRG9udERlbGV0ZSB8IERvbnRFbnVtIHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVj
dChJZGVudGlmaWVyKGV4ZWMsICJMT0cyRSIpLCBqc051bWJlcihleGVjLCAxLjAgLyBsb2coMi4w
KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoSWRl
bnRpZmllcihleGVjLCAiTE9HMTBFIiksIGpzTnVtYmVyKGV4ZWMsIDEuMCAvIGxvZygxMC4wKSks
IERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKLSAgICBwdXREaXJlY3QoSWRlbnRp
ZmllcihleGVjLCAiUEkiKSwganNOdW1iZXIoZXhlYywgcGlEb3VibGUpLCBEb250RGVsZXRlIHwg
RG9udEVudW0gfCBSZWFkT25seSk7Ci0gICAgcHV0RGlyZWN0KElkZW50aWZpZXIoZXhlYywgIlNR
UlQxXzIiKSwganNOdW1iZXIoZXhlYywgc3FydCgwLjUpKSwgRG9udERlbGV0ZSB8IERvbnRFbnVt
IHwgUmVhZE9ubHkpOwotICAgIHB1dERpcmVjdChJZGVudGlmaWVyKGV4ZWMsICJTUVJUMiIpLCBq
c051bWJlcihleGVjLCBzcXJ0KDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVjLCAiRSIp
LCBqc051bWJlcihleGVjLCBleHAoMS4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRP
bmx5KTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJM
TjIiKSwganNOdW1iZXIoZXhlYywgbG9nKDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBS
ZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmllcihleGVj
LCAiTE4xMCIpLCBqc051bWJlcihleGVjLCBsb2coMTAuMCkpLCBEb250RGVsZXRlIHwgRG9udEVu
dW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oSWRlbnRpZmll
cihleGVjLCAiTE9HMkUiKSwganNOdW1iZXIoZXhlYywgMS4wIC8gbG9nKDIuMCkpLCBEb250RGVs
ZXRlIHwgRG9udEVudW0gfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRp
b24oSWRlbnRpZmllcihleGVjLCAiTE9HMTBFIiksIGpzTnVtYmVyKGV4ZWMsIDEuMCAvIGxvZygx
MC4wKSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJlY3RX
aXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJQSSIpLCBqc051bWJlcihleGVjLCBw
aURvdWJsZSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAgICBwdXREaXJl
Y3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJTUVJUMV8yIiksIGpzTnVtYmVy
KGV4ZWMsIHNxcnQoMC41KSksIERvbnREZWxldGUgfCBEb250RW51bSB8IFJlYWRPbmx5KTsKKyAg
ICBwdXREaXJlY3RXaXRob3V0VHJhbnNpdGlvbihJZGVudGlmaWVyKGV4ZWMsICJTUVJUMiIpLCBq
c051bWJlcihleGVjLCBzcXJ0KDIuMCkpLCBEb250RGVsZXRlIHwgRG9udEVudW0gfCBSZWFkT25s
eSk7CiB9CiAKIC8vIEVDTUEgMTUuOApJbmRleDoga2pzL051bWJlckNvbnN0cnVjdG9yLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBranMvTnVtYmVyQ29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAzNzY2NikK
KysrIGtqcy9OdW1iZXJDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDEwICs1
NywxMCBAQCBOdW1iZXJDb25zdHJ1Y3Rvcjo6TnVtYmVyQ29uc3RydWN0b3IoRXhlCiAgICAgOiBJ
bnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0cnVjdHVyZSwgSWRlbnRpZmll
cihleGVjLCBudW1iZXJQcm90b3R5cGUtPmluZm8uY2xhc3NOYW1lKSkKIHsKICAgICAvLyBOdW1i
ZXIuUHJvdG90eXBlCi0gICAgcHV0RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90b3R5
cGUsIG51bWJlclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkpOwor
ICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5wcm90
b3R5cGUsIG51bWJlclByb3RvdHlwZSwgRG9udEVudW0gfCBEb250RGVsZXRlIHwgUmVhZE9ubHkp
OwogCiAgICAgLy8gbm8uIG9mIGFyZ3VtZW50cyBmb3IgY29uc3RydWN0b3IKLSAgICBwdXREaXJl
Y3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMSksIFJlYWRP
bmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBwdXREaXJlY3RXaXRob3V0VHJhbnNp
dGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAxKSwgUmVh
ZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOwogfQogCiBib29sIE51bWJlckNvbnN0cnVj
dG9yOjpnZXRPd25Qcm9wZXJ0eVNsb3QoRXhlY1N0YXRlKiBleGVjLCBjb25zdCBJZGVudGlmaWVy
JiBwcm9wZXJ0eU5hbWUsIFByb3BlcnR5U2xvdCYgc2xvdCkKSW5kZXg6IGtqcy9OdW1iZXJQcm90
b3R5cGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIGtqcy9OdW1iZXJQcm90b3R5cGUuY3BwCShyZXZpc2lv
biAzNzY2NikKKysrIGtqcy9OdW1iZXJQcm90b3R5cGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01
MSwxMiArNTEsMTIgQEAgTnVtYmVyUHJvdG90eXBlOjpOdW1iZXJQcm90b3R5cGUoRXhlY1N0YQog
CiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRkZWQgbGF0ZXIsIGFmdGVyIE51bWJl
ckNvbnN0cnVjdG9yIGhhcyBiZWVuIGNvbnN0cnVjdGVkCiAKLSAgICBwdXREaXJlY3RGdW5jdGlv
bihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIG51bWJlclBy
b3RvRnVuY1RvU3RyaW5nKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMs
IG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1
Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0xvY2FsZVN0cmluZywgbnVtYmVyUHJv
dG9GdW5jVG9Mb2NhbGVTdHJpbmcpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24o
ZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlv
blN0cnVjdHVyZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnZhbHVlT2YsIG51bWJlclByb3Rv
RnVuY1ZhbHVlT2YpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvRml4ZWQsIG51bWJlclByb3RvRnVuY1RvRml4
ZWQpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVjKSBQ
cm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhl
Yy0+cHJvcGVydHlOYW1lcygpLnRvRXhwb25lbnRpYWwsIG51bWJlclByb3RvRnVuY1RvRXhwb25l
bnRpYWwpLCBEb250RW51bSk7Ci0gICAgcHV0RGlyZWN0RnVuY3Rpb24oZXhlYywgbmV3IChleGVj
KSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwg
ZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lzaW9uLCBudW1iZXJQcm90b0Z1bmNUb1ByZWNp
c2lvbiksIERvbnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b1N0cmluZywgbnVtYmVyUHJv
dG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0
VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3Rv
dHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9Mb2NhbGVT
dHJpbmcsIG51bWJlclByb3RvRnVuY1RvTG9jYWxlU3RyaW5nKSwgRG9udEVudW0pOworICAgIHB1
dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5
cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMCwgZXhlYy0+cHJv
cGVydHlOYW1lcygpLnZhbHVlT2YsIG51bWJlclByb3RvRnVuY1ZhbHVlT2YpLCBEb250RW51bSk7
CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMp
IFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAxLCBl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9GaXhlZCwgbnVtYmVyUHJvdG9GdW5jVG9GaXhlZCksIERv
bnRFbnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5l
dyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1
cmUsIDEsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50b0V4cG9uZW50aWFsLCBudW1iZXJQcm90b0Z1
bmNUb0V4cG9uZW50aWFsKSwgRG9udEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91
dFRyYW5zaXRpb24oZXhlYywgbmV3IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90
b3R5cGVGdW5jdGlvblN0cnVjdHVyZSwgMSwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRvUHJlY2lz
aW9uLCBudW1iZXJQcm90b0Z1bmNUb1ByZWNpc2lvbiksIERvbnRFbnVtKTsKIH0KIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEZ1bmN0aW9ucyAtLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0KSW5kZXg6IGtqcy9PYmplY3RDb25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
a2pzL09iamVjdENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMzc2NjYpCisrKyBranMvT2JqZWN0
Q29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zMiwxMCArMzIsMTAgQEAgT2JqZWN0
Q29uc3RydWN0b3I6Ok9iamVjdENvbnN0cnVjdG9yKEV4ZQogICAgIDogSW50ZXJuYWxGdW5jdGlv
bigmZXhlYy0+Z2xvYmFsRGF0YSgpLCBzdHJ1Y3R1cmUsIElkZW50aWZpZXIoZXhlYywgIk9iamVj
dCIpKQogewogICAgIC8vIEVDTUEgMTUuMi4zLjEKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVy
dHlOYW1lcygpLnByb3RvdHlwZSwgb2JqZWN0UHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxl
dGUgfCBSZWFkT25seSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+cHJv
cGVydHlOYW1lcygpLnByb3RvdHlwZSwgb2JqZWN0UHJvdG90eXBlLCBEb250RW51bSB8IERvbnRE
ZWxldGUgfCBSZWFkT25seSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1
Y3RvcgotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJl
cihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAgIHB1dERp
cmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVt
YmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9CiAKIC8v
IEVDTUEgMTUuMi4yCkluZGV4OiBranMvUmVnRXhwQ29uc3RydWN0b3IuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIGtqcy9SZWdFeHBDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9uIDM3NjY2KQorKysga2pzL1Jl
Z0V4cENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTA4LDEwICsxMDgsMTAgQEAg
UmVnRXhwQ29uc3RydWN0b3I6OlJlZ0V4cENvbnN0cnVjdG9yKEV4ZQogICAgICwgZChuZXcgUmVn
RXhwQ29uc3RydWN0b3JQcml2YXRlKQogewogICAgIC8vIEVDTUEgMTUuMTAuNS4xIFJlZ0V4cC5w
cm90b3R5cGUKLSAgICBwdXREaXJlY3QoZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlwZSwg
cmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CisgICAg
cHV0RGlyZWN0V2l0aG91dFRyYW5zaXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLnByb3RvdHlw
ZSwgcmVnRXhwUHJvdG90eXBlLCBEb250RW51bSB8IERvbnREZWxldGUgfCBSZWFkT25seSk7CiAK
ICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBjb25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdChl
eGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBqc051bWJlcihleGVjLCAyKSwgUmVhZE9ubHkg
fCBEb250RGVsZXRlIHwgRG9udEVudW0pOworICAgIHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9u
KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDIpLCBSZWFkT25s
eSB8IERvbnREZWxldGUgfCBEb250RW51bSk7CiB9CiAKIC8qIApJbmRleDoga2pzL1JlZ0V4cFBy
b3RvdHlwZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0ga2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHJldmlz
aW9uIDM3NjY2KQorKysga2pzL1JlZ0V4cFByb3RvdHlwZS5jcHAJKHdvcmtpbmcgY29weSkKQEAg
LTQ3LDEwICs0NywxMCBAQCBjb25zdCBDbGFzc0luZm8gUmVnRXhwUHJvdG90eXBlOjppbmZvID0g
CiBSZWdFeHBQcm90b3R5cGU6OlJlZ0V4cFByb3RvdHlwZShFeGVjU3RhdGUqIGV4ZWMsIFBhc3NS
ZWZQdHI8U3RydWN0dXJlSUQ+IHN0cnVjdHVyZSwgU3RydWN0dXJlSUQqIHByb3RvdHlwZUZ1bmN0
aW9uU3RydWN0dXJlKQogICAgIDogSlNPYmplY3Qoc3RydWN0dXJlKQogewotICAgIHB1dERpcmVj
dEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90
eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5jb21waWxlLCBy
ZWdFeHBQcm90b0Z1bmNDb21waWxlKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9u
KGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rp
b25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjLCByZWdFeHBQcm90b0Z1
bmNFeGVjKSwgRG9udEVudW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhl
YykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAs
IGV4ZWMtPnByb3BlcnR5TmFtZXMoKS50ZXN0LCByZWdFeHBQcm90b0Z1bmNUZXN0KSwgRG9udEVu
dW0pOwotICAgIHB1dERpcmVjdEZ1bmN0aW9uKGV4ZWMsIG5ldyAoZXhlYykgUHJvdG90eXBlRnVu
Y3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUsIDAsIGV4ZWMtPnByb3BlcnR5
TmFtZXMoKS50b1N0cmluZywgcmVnRXhwUHJvdG9GdW5jVG9TdHJpbmcpLCBEb250RW51bSk7Cisg
ICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBuZXcgKGV4ZWMpIFBy
b3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJlLCAwLCBleGVj
LT5wcm9wZXJ0eU5hbWVzKCkuY29tcGlsZSwgcmVnRXhwUHJvdG9GdW5jQ29tcGlsZSksIERvbnRF
bnVtKTsKKyAgICBwdXREaXJlY3RGdW5jdGlvbldpdGhvdXRUcmFuc2l0aW9uKGV4ZWMsIG5ldyAo
ZXhlYykgUHJvdG90eXBlRnVuY3Rpb24oZXhlYywgcHJvdG90eXBlRnVuY3Rpb25TdHJ1Y3R1cmUs
IDAsIGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5leGVjLCByZWdFeHBQcm90b0Z1bmNFeGVjKSwgRG9u
dEVudW0pOworICAgIHB1dERpcmVjdEZ1bmN0aW9uV2l0aG91dFRyYW5zaXRpb24oZXhlYywgbmV3
IChleGVjKSBQcm90b3R5cGVGdW5jdGlvbihleGVjLCBwcm90b3R5cGVGdW5jdGlvblN0cnVjdHVy
ZSwgMCwgZXhlYy0+cHJvcGVydHlOYW1lcygpLnRlc3QsIHJlZ0V4cFByb3RvRnVuY1Rlc3QpLCBE
b250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihleGVjLCBu
ZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0
dXJlLCAwLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkudG9TdHJpbmcsIHJlZ0V4cFByb3RvRnVuY1Rv
U3RyaW5nKSwgRG9udEVudW0pOwogfQogCiAvLyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0gRnVuY3Rpb25zIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQpJbmRleDoga2pzL1N0cmlu
Z0NvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBranMvU3RyaW5nQ29uc3RydWN0b3IuY3Bw
CShyZXZpc2lvbiAzNzY2NikKKysrIGtqcy9TdHJpbmdDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTUwLDEzICs1MCwxMyBAQCBTdHJpbmdDb25zdHJ1Y3Rvcjo6U3RyaW5nQ29uc3Ry
dWN0b3IoRXhlCiAgICAgOiBJbnRlcm5hbEZ1bmN0aW9uKCZleGVjLT5nbG9iYWxEYXRhKCksIHN0
cnVjdHVyZSwgSWRlbnRpZmllcihleGVjLCBzdHJpbmdQcm90b3R5cGUtPmNsYXNzSW5mbygpLT5j
bGFzc05hbWUpKQogewogICAgIC8vIEVDTUEgMTUuNS4zLjEgU3RyaW5nLnByb3RvdHlwZQotICAg
IHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBzdHJpbmdQcm90b3R5
cGUsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKKyAgICBwdXREaXJlY3RXaXRo
b3V0VHJhbnNpdGlvbihleGVjLT5wcm9wZXJ0eU5hbWVzKCkucHJvdG90eXBlLCBzdHJpbmdQcm90
b3R5cGUsIFJlYWRPbmx5IHwgRG9udEVudW0gfCBEb250RGVsZXRlKTsKIAogICAgIC8vIEVDTUEg
MTUuNS4zLjIgZnJvbUNoYXJDb2RlKCkKLSAgICBwdXREaXJlY3RGdW5jdGlvbihleGVjLCBuZXcg
KGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9uU3RydWN0dXJl
LCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZnJvbUNoYXJDb2RlLCBzdHJpbmdGcm9tQ2hhckNv
ZGUpLCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0RnVuY3Rpb25XaXRob3V0VHJhbnNpdGlvbihl
eGVjLCBuZXcgKGV4ZWMpIFByb3RvdHlwZUZ1bmN0aW9uKGV4ZWMsIHByb3RvdHlwZUZ1bmN0aW9u
U3RydWN0dXJlLCAxLCBleGVjLT5wcm9wZXJ0eU5hbWVzKCkuZnJvbUNoYXJDb2RlLCBzdHJpbmdG
cm9tQ2hhckNvZGUpLCBEb250RW51bSk7CiAKICAgICAvLyBuby4gb2YgYXJndW1lbnRzIGZvciBj
b25zdHJ1Y3RvcgotICAgIHB1dERpcmVjdChleGVjLT5wcm9wZXJ0eU5hbWVzKCkubGVuZ3RoLCBq
c051bWJlcihleGVjLCAxKSwgUmVhZE9ubHkgfCBEb250RW51bSB8IERvbnREZWxldGUpOworICAg
IHB1dERpcmVjdFdpdGhvdXRUcmFuc2l0aW9uKGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgs
IGpzTnVtYmVyKGV4ZWMsIDEpLCBSZWFkT25seSB8IERvbnRFbnVtIHwgRG9udERlbGV0ZSk7CiB9
CiAKIC8vIEVDTUEgMTUuNS4yCkluZGV4OiBranMvU3RyaW5nUHJvdG90eXBlLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBranMvU3RyaW5nUHJvdG90eXBlLmNwcAkocmV2aXNpb24gMzc2NjYpCisrKyBranMv
U3RyaW5nUHJvdG90eXBlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTIxLDcgKzEyMSw3IEBAIFN0
cmluZ1Byb3RvdHlwZTo6U3RyaW5nUHJvdG90eXBlKEV4ZWNTdGEKICAgICA6IFN0cmluZ09iamVj
dChleGVjLCBzdHJ1Y3R1cmUpCiB7CiAgICAgLy8gVGhlIGNvbnN0cnVjdG9yIHdpbGwgYmUgYWRk
ZWQgbGF0ZXIsIGFmdGVyIFN0cmluZ0NvbnN0cnVjdG9yIGhhcyBiZWVuIGJ1aWx0Ci0gICAgcHV0
RGlyZWN0KGV4ZWMtPnByb3BlcnR5TmFtZXMoKS5sZW5ndGgsIGpzTnVtYmVyKGV4ZWMsIDApLCBE
b250RGVsZXRlIHwgUmVhZE9ubHkgfCBEb250RW51bSk7CisgICAgcHV0RGlyZWN0V2l0aG91dFRy
YW5zaXRpb24oZXhlYy0+cHJvcGVydHlOYW1lcygpLmxlbmd0aCwganNOdW1iZXIoZXhlYywgMCks
IERvbnREZWxldGUgfCBSZWFkT25seSB8IERvbnRFbnVtKTsKIH0KIAogYm9vbCBTdHJpbmdQcm90
b3R5cGU6OmdldE93blByb3BlcnR5U2xvdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IElkZW50aWZp
ZXImIHByb3BlcnR5TmFtZSwgUHJvcGVydHlTbG90ICZzbG90KQpJbmRleDoga2pzL1N0cnVjdHVy
ZUlELmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBranMvU3RydWN0dXJlSUQuY3BwCShyZXZpc2lvbiAzNzY2
NikKKysrIGtqcy9TdHJ1Y3R1cmVJRC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTU3LDE3ICs1Nywy
OCBAQCBzdGF0aWMgSGFzaFNldDxTdHJ1Y3R1cmVJRCo+IGxpdmVTdHJ1Y3R1CiAKIHZvaWQgU3Ry
dWN0dXJlSUQ6OmR1bXBTdGF0aXN0aWNzKCkKIHsKKyAgICB1bnNpZ25lZCBudW1iZXJMZWFmID0g
MDsKICAgICB1bnNpZ25lZCBudW1iZXJVc2luZ1NpbmdsZVNsb3QgPSAwOworICAgIHVuc2lnbmVk
IG51bWJlclNpbmdsZXRvbnMgPSAwOwogCiAgICAgSGFzaFNldDxTdHJ1Y3R1cmVJRCo+Ojpjb25z
dF9pdGVyYXRvciBlbmQgPSBsaXZlU3RydWN0dXJlSURTZXQuZW5kKCk7CiAgICAgZm9yIChIYXNo
U2V0PFN0cnVjdHVyZUlEKj46OmNvbnN0X2l0ZXJhdG9yIGl0ID0gbGl2ZVN0cnVjdHVyZUlEU2V0
LmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTdHJ1Y3R1cmVJRCogc3RydWN0
dXJlSUQgPSAqaXQ7Ci0gICAgICAgIGlmIChzdHJ1Y3R1cmVJRC0+bV91c2luZ1NpbmdsZVRyYW5z
aXRpb25TbG90KQotICAgICAgICAgICAgKytudW1iZXJVc2luZ1NpbmdsZVNsb3Q7CisgICAgICAg
IGlmIChzdHJ1Y3R1cmVJRC0+bV91c2luZ1NpbmdsZVRyYW5zaXRpb25TbG90KSB7CisgICAgICAg
ICAgICBpZiAoIXN0cnVjdHVyZUlELT5tX3RyYW5zaXRpb25zLnNpbmdsZVRyYW5zaXRpb24pCisg
ICAgICAgICAgICAgICAgKytudW1iZXJMZWFmOworICAgICAgICAgICAgZWxzZQorICAgICAgICAg
ICAgICAgICsrbnVtYmVyVXNpbmdTaW5nbGVTbG90OworCisgICAgICAgICAgIGlmICghc3RydWN0
dXJlSUQtPm1fcHJldmlvdXMgJiYgIXN0cnVjdHVyZUlELT5tX3RyYW5zaXRpb25zLnNpbmdsZVRy
YW5zaXRpb24pCisgICAgICAgICAgICAgICAgKytudW1iZXJTaW5nbGV0b25zOworICAgICAgICB9
CiAgICAgfQogCiAgICAgcHJpbnRmKCJOdW1iZXIgb2YgbGl2ZSBTdHJ1Y3R1cmVJRHM6ICVkXG4i
LCBsaXZlU3RydWN0dXJlSURTZXQuc2l6ZSgpKTsKICAgICBwcmludGYoIk51bWJlciBvZiBTdHJ1
Y3R1cmVJRHMgdXNpbmcgdGhlIHNpbmdsZSBpdGVtIG9wdGltaXphdGlvbiBmb3IgdHJhbnNpdGlv
biBtYXA6ICVkXG4iLCBudW1iZXJVc2luZ1NpbmdsZVNsb3QpOworICAgIHByaW50ZigiTnVtYmVy
IG9mIFN0cnVjdHVyZUlEcyB0aGF0IGFyZSBsZWFmIG5vZGVzOiAlZFxuIiwgbnVtYmVyTGVhZik7
CisgICAgcHJpbnRmKCJOdW1iZXIgb2YgU3RydWN0dXJlSURzIHRoYXQgc2luZ2xldG9uczogJWRc
biIsIG51bWJlclNpbmdsZXRvbnMpOwogfQogI2VuZGlmCiAKSW5kZXg6IGtqcy9TdHJ1Y3R1cmVJ
RC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIGtqcy9TdHJ1Y3R1cmVJRC5oCShyZXZpc2lvbiAzNzY2NikKKysr
IGtqcy9TdHJ1Y3R1cmVJRC5oCSh3b3JraW5nIGNvcHkpCkBAIC0xMDUsNyArMTA1LDkgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICAgICAgbV9wcm90b3R5cGUtPm1hcmsoKTsKICAgICAg
ICAgfQogCisgICAgICAgIC8vIFRoZXNlIHNob3VsZCBiZSB1c2VkIHdpdGggY2F1dGlvbi4gIAog
ICAgICAgICBzaXplX3QgYWRkUHJvcGVydHlXaXRob3V0VHJhbnNpdGlvbihjb25zdCBJZGVudGlm
aWVyJiBwcm9wZXJ0eU5hbWUsIHVuc2lnbmVkIGF0dHJpYnV0ZXMpOworICAgICAgICB2b2lkIHNl
dFByb3RvdHlwZVdpdGhvdXRUcmFuc2l0aW9uKEpTVmFsdWUqIHByb3RvdHlwZSkgeyBtX3Byb3Rv
dHlwZSA9IHByb3RvdHlwZTsgfQogCiAgICAgICAgIGJvb2wgaXNEaWN0aW9uYXJ5KCkgY29uc3Qg
eyByZXR1cm4gbV9pc0RpY3Rpb25hcnk7IH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>