<?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>86024</bug_id>
          
          <creation_ts>2012-05-09 15:28:49 -0700</creation_ts>
          <short_desc>Enh: Hash Const JSString in Backing Stores to Save Memory</short_desc>
          <delta_ts>2012-07-12 16:12:02 -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>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Michael Saboff">msaboff</reporter>
          <assigned_to name="Michael Saboff">msaboff</assigned_to>
          <cc>ggaren</cc>
    
    <cc>gustavo</cc>
    
    <cc>koivisto</cc>
    
    <cc>xan.lopez</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>619917</commentid>
    <comment_count>0</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-09 15:28:49 -0700</bug_when>
    <thetext>JavaScript code often creates multiple strings that contain the same actual text. Poorly written JavaScript is especially prone to this. This enhancement is to coalesce multiple JSStrings that contain the same text into one common string. Given that JSStrings are immutable, this is possible.

The easiest path to start doing this is to hash const strings that are in the backing store for arrays and objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619934</commentid>
    <comment_count>1</comment_count>
      <attachid>141035</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-09 15:45:14 -0700</bug_when>
    <thetext>Created attachment 141035
Patch for Review

Willing to consider other names for JSString::m_isHashConstSingleton.  This is some what descriptive of a string with the flag set.  Another name could be m_dontHashConstString which is descriptive of its purpose of the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619947</commentid>
    <comment_count>2</comment_count>
      <attachid>141035</attachid>
    <who name="Gustavo Noronha (kov)">gustavo</who>
    <bug_when>2012-05-09 15:55:03 -0700</bug_when>
    <thetext>Comment on attachment 141035
Patch for Review

Attachment 141035 did not pass gtk-ews (gtk):
Output: http://queues.webkit.org/results/12652843</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>619964</commentid>
    <comment_count>3</comment_count>
      <attachid>141035</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2012-05-09 16:07:18 -0700</bug_when>
    <thetext>Comment on attachment 141035
Patch for Review

Attachment 141035 did not pass win-ews (win):
Output: http://queues.webkit.org/results/12652841</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620063</commentid>
    <comment_count>4</comment_count>
      <attachid>141035</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-05-09 17:13:18 -0700</bug_when>
    <thetext>Comment on attachment 141035
Patch for Review

Attachment 141035 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/12652862</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620099</commentid>
    <comment_count>5</comment_count>
      <attachid>141063</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-09 17:33:40 -0700</bug_when>
    <thetext>Created attachment 141063
Speculative build fix

Enclosed call to MarkStackThreadSharedData::resetChildren() inside parallel GC #if.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>620697</commentid>
    <comment_count>6</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-10 10:32:03 -0700</bug_when>
    <thetext>Committed r116659: &lt;http://trac.webkit.org/changeset/116659&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>621537</commentid>
    <comment_count>7</comment_count>
    <who name="Antti Koivisto">koivisto</who>
    <bug_when>2012-05-11 05:53:30 -0700</bug_when>
    <thetext>This seem to be hitting asserts, bug 86203</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622106</commentid>
    <comment_count>8</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-11 16:33:09 -0700</bug_when>
    <thetext>Rolling out change.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>622231</commentid>
    <comment_count>9</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-05-11 21:52:21 -0700</bug_when>
    <thetext>Rolled out r116659: &lt;http://trac.webkit.org/changeset/116659&gt; in r116822 &lt;http://trac.webkit.org/changeset/116822&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>657849</commentid>
    <comment_count>10</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-26 12:27:16 -0700</bug_when>
    <thetext>&lt;rdar://problem/11752030&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>658143</commentid>
    <comment_count>11</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-26 17:22:23 -0700</bug_when>
    <thetext>(In reply to comment #10)
&gt; &lt;rdar://problem/11752030&gt;

Actually the original is &lt;rdar://problem/11410050&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660571</commentid>
    <comment_count>12</comment_count>
      <attachid>150197</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-29 09:40:38 -0700</bug_when>
    <thetext>Created attachment 150197
Patch with fix for string hash ASSERT failures

Updated the code for the case where two marking threads are in the process of hash const&apos;ing the same string.  Added a tryHashConstLock() to JSString.  When a thread fails to get the lock, it gives up hash con sting the string.  The winning thread will be able to hash const.  This eliminated several ASSERT failure modes when two threads try to hash a string at nearly the same time.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660674</commentid>
    <comment_count>13</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-29 11:37:20 -0700</bug_when>
    <thetext>What&apos;s the performance cost of doing this on every garbage collection? What&apos;s the cost when there are no strings in the heap, and what&apos;s the cost when the heap is 100% unique strings?

Is is possible to limit how often we do this string unique-ing?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660694</commentid>
    <comment_count>14</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-06-29 11:57:43 -0700</bug_when>
    <thetext>(In reply to comment #13)
&gt; What&apos;s the performance cost of doing this on every garbage collection? What&apos;s the cost when there are no strings in the heap, and what&apos;s the cost when the heap is 100% unique strings?
&gt; 
&gt; Is is possible to limit how often we do this string unique-ing?

The performance appears to be neutral overall.  v8-splay with DRT looks slower, but using JSC shows it&apos;s faster.  See below.  The no string case is an additional value.isString() check that will fail.  

The current patch has a hash const kill bit so that strings aren&apos;t continuously const&apos;ed.  This does mean that we can never get to 100% unique, but it reduces the ongoing const&apos;ing cost.  We may want to change this in the future to a const count instead of a single bit to further improve uniqueness.

We could limit how often by using a new string since last const threshold or by const&apos;ing in a separate thread that has its own timer.  

Benchmark report for SunSpider, V8, V8Real, Kraken, JSBench, JSRegress, and DSP on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Base&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r121160)
&quot;HashConst&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/DumpRenderTree (r121160)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                     Base                   HashConst                                     
SunSpider:
   3d-cube                                      8.6762+-0.6578     ?      8.6762+-0.6311        ?
   3d-morph                                     7.5697+-0.0574     ?      7.5991+-0.0497        ?
   3d-raytrace                                 14.1252+-0.5765           14.0391+-0.6123        
   access-binary-trees                          2.2856+-0.4548     ?      2.2994+-0.4653        ?
   access-fannkuch                              6.7956+-0.1100            6.7222+-0.0411          might be 1.0109x faster
   access-nbody                                 4.1792+-0.0387     ?      4.1858+-0.0307        ?
   access-nsieve                                3.2875+-0.0473            3.2794+-0.0554        
   bitops-3bit-bits-in-byte                     1.3716+-0.0110     ?      1.3736+-0.0088        ?
   bitops-bits-in-byte                          5.7174+-0.0531            5.7145+-0.0367        
   bitops-bitwise-and                           2.2786+-0.0278            2.2595+-0.0074        
   bitops-nsieve-bits                           3.2478+-0.0489            3.2254+-0.0389        
   controlflow-recursive                        2.5888+-0.0212     ?      2.6184+-0.0345        ? might be 1.0114x slower
   crypto-aes                                  10.0999+-0.7407           10.0631+-0.7233        
   crypto-md5                                   3.6877+-0.1098     ?      3.6952+-0.1158        ?
   crypto-sha1                                  3.1664+-0.0248     ?      3.1930+-0.0264        ?
   date-format-tofte                           13.9546+-1.3730           13.6739+-1.3103          might be 1.0205x faster
   date-format-xparb                           12.2760+-0.9493     ?     12.5290+-0.9808        ? might be 1.0206x slower
   math-cordic                                  4.1717+-0.0217     ?      4.1975+-0.0397        ?
   math-partial-sums                            9.0324+-0.0220     ?      9.0649+-0.0334        ?
   math-spectral-norm                           3.1152+-0.0256            3.0927+-0.0179        
   regexp-dna                                  10.5605+-0.3807           10.4890+-0.3909        
   string-base64                                5.7906+-0.6927     ?      5.8786+-0.6728        ? might be 1.0152x slower
   string-fasta                                 8.1582+-0.4101     ?      8.1639+-0.3869        ?
   string-tagcloud                             13.9253+-0.3059     ?     14.0120+-0.3686        ?
   string-unpack-code                          23.1382+-0.8883     ?     23.4292+-0.9274        ? might be 1.0126x slower
   string-validate-input                        8.2838+-0.6484     ?      8.4563+-0.7052        ? might be 1.0208x slower

   &lt;arithmetic&gt; *                               7.3648+-0.2383     ?      7.3820+-0.1900        ? might be 1.0023x slower
   &lt;geometric&gt;                                  5.8449+-0.1537     ?      5.8539+-0.1233        ? might be 1.0015x slower
   &lt;harmonic&gt;                                   4.5904+-0.0998     ?      4.5962+-0.0929        ? might be 1.0013x slower

                                                     Base                   HashConst                                     
V8:
   crypto                                      77.2960+-0.6339           77.2859+-0.7442        
   deltablue                                  138.4858+-2.4387          137.4746+-0.8139        
   earley-boyer                                88.4461+-1.3296     ?     88.9693+-1.4255        ?
   raytrace                                    61.7561+-2.8397     ?     62.7029+-2.9255        ? might be 1.0153x slower
   regexp                                      88.4419+-0.4629     ?     88.7320+-0.3942        ?
   richards                                   127.2255+-1.0954          126.9527+-0.6654        
   splay                                      105.2859+-10.6871    ?    109.6264+-10.3128       ? might be 1.0412x slower

   &lt;arithmetic&gt;                                98.1339+-1.3156     ?     98.8205+-1.2472        ? might be 1.0070x slower
   &lt;geometric&gt; *                               94.7000+-1.3117     ?     95.4741+-1.1706        ? might be 1.0082x slower
   &lt;harmonic&gt;                                  91.3628+-1.3391     ?     92.1949+-1.1579        ? might be 1.0091x slower

                                                     Base                   HashConst                                     
V8Real:
   encrypt                                     0.40804+-0.00034    ?     0.40864+-0.00038       ?
   decrypt                                     7.20393+-0.07552          7.15369+-0.01838       
   deltablue                          x2       0.68745+-0.00404    ?     0.68968+-0.00394       ?
   earley                                      2.15036+-0.01002          2.13805+-0.01112       
   boyer                                      13.95076+-0.09289    ?    14.11211+-0.14308       ? might be 1.0116x slower
   raytrace                           x2       5.13411+-0.04329          5.04956+-0.04231         might be 1.0167x faster
   regexp                             x2      26.85510+-0.21172         26.59170+-0.05988       
   richards                           x2       0.34534+-0.00371    ?     0.34651+-0.00489       ?
   splay                              x2       0.79769+-0.00748    !     0.85507+-0.00308       ! definitely 1.0719x slower

   &lt;arithmetic&gt;                                6.52518+-0.03322          6.49125+-0.01718         might be 1.0052x faster
   &lt;geometric&gt; *                               2.19447+-0.00635    !     2.21014+-0.00636       ! definitely 1.0071x slower
   &lt;harmonic&gt;                                  0.94595+-0.00452    !     0.95828+-0.00546       ! definitely 1.0130x slower

                                                     Base                   HashConst                                     
Kraken:
   ai-astar                                    803.357+-1.288            796.699+-10.284        
   audio-beat-detection                        207.808+-2.674      ?     208.747+-2.841         ?
   audio-dft                                   276.963+-1.532      ?     278.441+-1.212         ?
   audio-fft                                   127.160+-0.363            126.917+-0.222         
   audio-oscillator                            239.677+-0.294            239.299+-0.400         
   imaging-darkroom                            299.388+-1.299            296.911+-1.565         
   imaging-desaturate                          225.037+-0.617            224.603+-0.426         
   imaging-gaussian-blur                       438.760+-0.404      ?     439.820+-1.571         ?
   json-parse-financial                         67.232+-0.215      !      69.052+-0.945         ! definitely 1.0271x slower
   json-stringify-tinderbox                     84.603+-0.408      ?      84.641+-0.274         ?
   stanford-crypto-aes                          89.359+-0.954             88.687+-0.559         
   stanford-crypto-ccm                          99.134+-0.334      !      99.934+-0.428         ! definitely 1.0081x slower
   stanford-crypto-pbkdf2                      198.419+-1.137      ?     199.866+-1.133         ?
   stanford-crypto-sha256-iterative             96.168+-0.290             95.958+-0.320         

   &lt;arithmetic&gt; *                              232.362+-0.281            232.113+-0.852           might be 1.0011x faster
   &lt;geometric&gt;                                 180.849+-0.276      ?     181.141+-0.281         ? might be 1.0016x slower
   &lt;harmonic&gt;                                  147.084+-0.246      !     147.674+-0.215         ! definitely 1.0040x slower

                                                     Base                   HashConst                                     
JSBench:
   amazon                                      18.2500+-0.2874           18.2500+-0.2874        
   facebook                                    71.3333+-2.0692     ?     71.8333+-2.1304        ?
   google                                      95.4167+-1.3670     ?     96.4167+-1.6359        ? might be 1.0105x slower
   twitter                                     52.3333+-0.3128           52.2500+-0.2874        
   yahoo                                       22.0833+-0.1834     ?     22.3333+-0.3128        ? might be 1.0113x slower

   &lt;arithmetic&gt; *                              51.8833+-0.5266     ?     52.2167+-0.5153        ? might be 1.0064x slower
   &lt;geometric&gt;                                 42.7856+-0.3461     ?     43.0159+-0.3605        ? might be 1.0054x slower
   &lt;harmonic&gt;                                  34.7854+-0.2544     ?     34.9502+-0.3244        ? might be 1.0047x slower

                                                     Base                   HashConst                                     
JSRegress:
   adapt-to-double-divide                      72.6140+-0.0975     ?     72.6762+-0.1291        ?
   aliased-arguments-getbyval                   0.8366+-0.0105     ?      0.8426+-0.0183        ?
   arity-mismatch-inlining                      0.6412+-0.0075     ?      0.6433+-0.0152        ?
   big-int-mul                                  8.4775+-0.0666     ?      8.4849+-0.0677        ?
   boolean-test                                 3.5251+-0.0725            3.4780+-0.0278          might be 1.0135x faster
   cast-int-to-double                          12.1047+-0.0604           12.0942+-0.0462        
   cfg-simplify                                 3.0606+-0.0178     ?      3.1044+-0.0317        ? might be 1.0143x slower
   cmpeq-obj-to-obj-other                      13.6976+-1.2376     ?     13.8000+-1.1877        ?
   constant-test                                6.8605+-0.0168            6.8537+-0.0235        
   direct-arguments-getbyval                    0.7708+-0.0161     ?      0.7748+-0.0116        ?
   double-pollution-getbyval                    8.8611+-0.0588     ?      8.8782+-0.0548        ?
   double-pollution-putbyoffset                 5.1556+-0.8489            4.4103+-0.0805          might be 1.1690x faster
   external-arguments-getbyval                  2.0881+-0.2468     ?      2.1221+-0.2789        ? might be 1.0163x slower
   external-arguments-putbyval                  3.5392+-0.5579     ?      3.5740+-0.5779        ?
   Float32Array-matrix-mult                    12.0812+-0.9324           11.8524+-1.0004          might be 1.0193x faster
   fold-double-to-int                          38.0619+-1.2160           37.5368+-1.3019          might be 1.0140x faster
   function-dot-apply                           2.7338+-0.0318            2.7226+-0.0249        
   function-test                                4.3704+-0.0179     !      4.4758+-0.0476        ! definitely 1.0241x slower
   inline-arguments-access                      1.0929+-0.0210     ?      1.1041+-0.0194        ? might be 1.0103x slower
   inline-arguments-local-escape               28.8715+-3.9518     ?     29.1550+-4.0264        ?
   int-overflow-local                          85.6392+-0.1476     ?     85.8113+-0.2798        ?
   Int16Array-bubble-sort                      68.2007+-0.0937     !     69.0125+-0.1352        ! definitely 1.0119x slower
   Int16Array-load-int-mul                      1.7721+-0.0142     ?      1.7760+-0.0200        ?
   Int8Array-load                               4.4804+-0.0950     ?      4.6011+-0.1646        ? might be 1.0269x slower
   integer-divide                              13.2724+-0.0415     ?     13.3018+-0.0949        ?
   method-on-number                           184.2202+-1.1002     !    193.3059+-3.5646        ! definitely 1.0493x slower
   new-array-dead                              23.4163+-0.0934           23.3786+-0.0476        
   new-array-push                              18.0233+-2.4322           17.9705+-2.4527        
   number-test                                  3.4411+-0.0510            3.4260+-0.0237        
   object-test                                  3.7845+-0.0390     !      3.8687+-0.0326        ! definitely 1.0223x slower
   poly-stricteq                               79.6322+-0.1355     ?     80.1471+-0.8916        ?
   rare-osr-exit-on-local                     178.8125+-0.1769     ?    178.9686+-0.2493        ?
   simple-activation-demo                      40.5452+-0.6801           40.2360+-0.1038        
   slow-convergence                            79.2538+-0.1947     ?     79.2710+-0.2052        ?
   sparse-conditional                           1.0725+-0.0171     ?      1.0910+-0.0162        ? might be 1.0173x slower
   string-hash                                  4.2034+-0.0123     ?      4.2177+-0.0368        ?
   string-test                                  3.4052+-0.0247            3.4027+-0.0225        
   tear-off-arguments                           2.7744+-0.0228     ?      2.7791+-0.0202        ?
   to-int32-boolean                            23.1648+-0.0178     ?     23.3756+-0.2807        ?
   undefined-test                               3.7333+-0.0302     ?      3.7437+-0.0342        ?

   &lt;arithmetic&gt;                                26.3073+-0.1262     ?     26.5567+-0.1423        ? might be 1.0095x slower
   &lt;geometric&gt; *                                8.5237+-0.0578     ?      8.5365+-0.0699        ? might be 1.0015x slower
   &lt;harmonic&gt;                                   3.4470+-0.0209     ?      3.4603+-0.0207        ? might be 1.0039x slower

                                                     Base                   HashConst                                     
DSP:
   filtrr-posterize-tint                       44.7237+-0.5850           44.6182+-0.5461        
   filtrr-tint-contrast-sat-bright             70.5503+-1.0706           70.4246+-0.9774        
   filtrr-tint-sat-adj-contr-mult              91.5707+-0.5243     ?     92.2560+-0.5432        ?
   filtrr-blur-overlay-sat-contr              231.3993+-9.9191          225.1883+-2.5697          might be 1.0276x faster
   filtrr-sat-blur-mult-sharpen-contr         282.3200+-6.5660     ?    283.7610+-6.1809        ?
   filtrr-sepia-bias                           31.4936+-0.5809           31.4092+-0.6969        
   route9-vp8                         x5     1092.6734+-8.0539     ?   1103.7610+-11.1229       ? might be 1.0101x slower

   &lt;arithmetic&gt;                               565.0386+-4.4458     ?    569.6784+-5.0556        ? might be 1.0082x slower
   &lt;geometric&gt; *                              282.7366+-1.8769     ?    283.5124+-1.2426        ? might be 1.0027x slower
   &lt;harmonic&gt;                                 119.9613+-0.9288          119.7971+-1.1168          might be 1.0014x faster

                                                     Base                   HashConst                                     
All benchmarks:
   &lt;arithmetic&gt;                               100.4271+-0.4212     ?    100.9739+-0.4847        ? might be 1.0054x slower
   &lt;geometric&gt;                                 16.5144+-0.1072     ?     16.5628+-0.0990        ? might be 1.0029x slower
   &lt;harmonic&gt;                                   3.6021+-0.0206     ?      3.6293+-0.0144        ? might be 1.0075x slower

                                                     Base                   HashConst                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                             33.1934+-0.0806     ?     33.3246+-0.0780        ? might be 1.0040x slower

Benchmark report for V8 and V8Real on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Base&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/jsc (r121160)
&quot;HashConst&quot; at /Volumes/Data/src/webkit/WebKitBuild/Release/jsc (r121160)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc()
between sample measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the
jsc-specific preciseTime() function to get microsecond-level timing. Reporting benchmark execution
times with 95% confidence intervals in milliseconds.

                                 Base                   HashConst                                     
V8:
   splay                   83.1748+-1.5902     ^     75.0682+-0.7650        ^ definitely 1.1080x faster

   &lt;arithmetic&gt;            83.1748+-1.5902     ^     75.0682+-0.7650        ^ definitely 1.1080x faster
   &lt;geometric&gt; *           83.1748+-1.5902     ^     75.0682+-0.7650        ^ definitely 1.1080x faster
   &lt;harmonic&gt;              83.1748+-1.5902     ^     75.0682+-0.7650        ^ definitely 1.1080x faster

                                 Base                   HashConst                                     
V8Real:
   splay          x2       0.93576+-0.01412    ^     0.81143+-0.00869       ^ definitely 1.1532x faster

   &lt;arithmetic&gt;            0.93576+-0.01412    ^     0.81143+-0.00869       ^ definitely 1.1532x faster
   &lt;geometric&gt; *           0.93576+-0.01412    ^     0.81143+-0.00869       ^ definitely 1.1532x faster
   &lt;harmonic&gt;              0.93576+-0.01412    ^     0.81143+-0.00869       ^ definitely 1.1532x faster

                                 Base                   HashConst                                     
All benchmarks:
   &lt;arithmetic&gt;            28.3488+-0.5350     ^     25.5637+-0.2509        ^ definitely 1.1089x faster
   &lt;geometric&gt;              4.1758+-0.0602     ^      3.6696+-0.0192        ^ definitely 1.1380x faster
   &lt;harmonic&gt;               1.3958+-0.0210     ^      1.2106+-0.0128        ^ definitely 1.1530x faster

                                 Base                   HashConst                                     
Geomean of preferred means:
   &lt;scaled-result&gt;         27.8960+-0.4164     ^     24.6779+-0.0960        ^ definitely 1.1304x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660874</commentid>
    <comment_count>15</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-29 17:10:00 -0700</bug_when>
    <thetext>&gt;    splay                              x2       0.79769+-0.00748    !     0.85507+-0.00308       ! definitely 1.0719x slower

This result seems to say that we&apos;ve made GC slower. 

&gt;    splay          x2       0.93576+-0.01412    ^     0.81143+-0.00869       ^ definitely 1.1532x faster

This result seems to say that we&apos;ve made GC faster.

I&apos;d like more data on this. Please post results from the GC benchmark I sent you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660875</commentid>
    <comment_count>16</comment_count>
      <attachid>150197</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-29 17:10:56 -0700</bug_when>
    <thetext>Comment on attachment 150197
Patch with fix for string hash ASSERT failures

View in context: https://bugs.webkit.org/attachment.cgi?id=150197&amp;action=review

r- because of the changes suggested below, and because we need data to figure out if this patch slows down GC.

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:532
&gt; +    do {

Should be:

unsigned currentFlags = m_flags;
unsigned newFlags = currentFlags | s_hashConstLock;
if (!WTF::weakCompareAndSwap(&amp;m_flags, currentFlags, newFlags))
    return false;
WTF::memoryBarrierAfterLock();
return true;

(tryLock should only try once; weak memory ordering platforms like ARM require fences for locks.)

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:552
&gt; +ALWAYS_INLINE void MarkStack::internalAppend(JSValue* slot)

Let&apos;s put a comment here explaining that we&apos;re specifically excluding all visits except for visits to object and array backing stores. That way, if someone refactors this code, they&apos;ll maintain that requirement.

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:560
&gt; +    if (value.isString()) {

Let&apos;s cast to JSCell* before doing this test, to avoid testing isCell() twice. Maybe the compiler will optimize that out for us, but let&apos;s not rely on that.

&gt; Source/JavaScriptCore/heap/MarkStack.cpp:562
&gt; +        if ((string-&gt;length() &gt; 1) &amp;&amp; !string-&gt;isRope() &amp;&amp; string-&gt;tryHashConstLock()) {

Let&apos;s use a helper function named shouldTryHashConst, which does all our tests for us:
- length &gt; 1
- !isRope
- !isHashConstSingleton

&gt; Source/JavaScriptCore/runtime/JSString.h:179
&gt; +        void releaseHashConstLock() { m_flags &amp;= ~s_hashConstLock; }

This needs WTF::memoryBarrierBeforeUnlock().</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>660878</commentid>
    <comment_count>17</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-06-29 17:15:07 -0700</bug_when>
    <thetext>&gt; We could limit how often by using a new string since last const threshold

This sounds good to me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661791</commentid>
    <comment_count>18</comment_count>
      <attachid>150492</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-07-02 16:00:36 -0700</bug_when>
    <thetext>Created attachment 150492
Updated patch with changes suggested by reviewer

These changes eliminate any question of performance regression, especially on v8-splay.  The GC benchmark was of marginal use as the numbers seem to worsen over time.  I compared before and after numbers after 30 seconds from when the benchmark page loaded to show that the patch is very similar to the baseline.

Benchmark report for SunSpider, V8, V8Real, Kraken, JSBench, JSRegress, and DSP on msaboff-pro (MacPro5,1).

VMs tested:
&quot;Base&quot; at /Volumes/Data/src/webkit.baseline/WebKitBuild/Release/DumpRenderTree (r121689)
&quot;HashConst&quot; at /Volumes/Data/src/webkit.work/WebKitBuild/Release/DumpRenderTree (r121689)

Collected 12 samples per benchmark/VM, with 4 VM invocations per benchmark. Emitted a call to gc() between sample
measurements. Used 1 benchmark iteration per VM invocation for warm-up. Used the jsc-specific preciseTime() function to
get microsecond-level timing. Reporting benchmark execution times with 95% confidence intervals in milliseconds.

                                                     Base                   HashConst                                     
SunSpider:
   3d-cube                                      8.0544+-0.4843     ?      8.3723+-0.5080        ? might be 1.0395x slower
   3d-morph                                     7.7863+-0.1308     ?      7.7893+-0.1079        ?
   3d-raytrace                                 11.9975+-0.4714           11.9100+-0.5007        
   access-binary-trees                          2.3276+-0.4307            2.3102+-0.4476        
   access-fannkuch                              6.8067+-0.0173     ?      6.8502+-0.0684        ?
   access-nbody                                 4.2047+-0.0456            4.2043+-0.0487        
   access-nsieve                                3.3556+-0.0625            3.2679+-0.0484          might be 1.0268x faster
   bitops-3bit-bits-in-byte                     1.3841+-0.0150     ?      1.3927+-0.0187        ?
   bitops-bits-in-byte                          5.8172+-0.0789            5.7890+-0.0753        
   bitops-bitwise-and                           2.2743+-0.0150            2.2694+-0.0208        
   bitops-nsieve-bits                           3.4734+-0.0399            3.4345+-0.0146          might be 1.0113x faster
   controlflow-recursive                        2.5510+-0.0552            2.4986+-0.0183          might be 1.0210x faster
   crypto-aes                                   9.3500+-0.5134            9.3166+-0.5694        
   crypto-md5                                   3.5942+-0.1247            3.5358+-0.1064          might be 1.0165x faster
   crypto-sha1                                  3.0049+-0.0210     ?      3.0059+-0.0359        ?
   date-format-tofte                           13.4962+-0.9437     ?     13.7100+-1.0121        ? might be 1.0158x slower
   date-format-xparb                           11.8243+-0.6616     ?     12.1386+-0.7611        ? might be 1.0266x slower
   math-cordic                                  4.5366+-0.1117            4.5309+-0.0218        
   math-partial-sums                           10.0159+-0.0891     ?     10.0468+-0.0861        ?
   math-spectral-norm                           3.0866+-0.0181     ?      3.1119+-0.0697        ?
   regexp-dna                                  10.5978+-0.3863           10.5248+-0.3782        
   string-base64                                5.5663+-0.5029            5.4636+-0.4370          might be 1.0188x faster
   string-fasta                                 7.9419+-0.2639            7.9352+-0.2706        
   string-tagcloud                             13.7991+-0.2104     ?     13.8195+-0.2604        ?
   string-unpack-code                          23.5503+-0.5986           22.9889+-0.4340          might be 1.0244x faster
   string-validate-input                        8.7396+-0.5395            8.5304+-0.6068          might be 1.0245x faster

   &lt;arithmetic&gt; *                               7.2745+-0.1588            7.2595+-0.1732          might be 1.0021x faster
   &lt;geometric&gt;                                  5.8200+-0.1240            5.8038+-0.1309          might be 1.0028x faster
   &lt;harmonic&gt;                                   4.6040+-0.0944            4.5845+-0.0965          might be 1.0042x faster

                                                     Base                   HashConst                                     
V8:
   crypto                                      75.3963+-0.4597           75.1714+-0.6040        
   deltablue                                  138.4143+-0.5702     ?    139.5984+-1.4878        ?
   earley-boyer                                89.3543+-1.6485     ?     89.5104+-1.3849        ?
   raytrace                                    60.1360+-1.7843     ?     62.0452+-2.8892        ? might be 1.0317x slower
   regexp                                      88.1610+-0.4656           87.9296+-0.3581        
   richards                                   127.5962+-0.6307     ?    128.5957+-2.0536        ?
   splay                                      107.2903+-14.2292         104.4436+-13.9688         might be 1.0273x faster

   &lt;arithmetic&gt;                                98.0498+-1.9328     ?     98.1849+-1.5802        ? might be 1.0014x slower
   &lt;geometric&gt; *                               94.3256+-1.6731     ?     94.5058+-1.3205        ? might be 1.0019x slower
   &lt;harmonic&gt;                                  90.7006+-1.3669     ?     90.9741+-0.9908        ? might be 1.0030x slower

                                                     Base                   HashConst                                     
V8Real:
   encrypt                                     0.40839+-0.00114          0.40832+-0.00145       
   decrypt                                     7.04424+-0.01547          7.04140+-0.00548       
   deltablue                          x2       0.66529+-0.00875          0.66333+-0.00769       
   earley                                      2.14376+-0.01243    ?     2.15854+-0.01314       ?
   boyer                                      13.95471+-0.03918         13.95424+-0.05520       
   raytrace                           x2       5.17177+-0.04428          5.13838+-0.04901       
   regexp                             x2      26.59154+-0.08747    ?    26.72360+-0.14260       ?
   richards                           x2       0.34671+-0.00355          0.34661+-0.00257       
   splay                              x2       0.74072+-0.00383    ^     0.71081+-0.00533       ^ definitely 1.0421x faster

   &lt;arithmetic&gt;                                6.47023+-0.01220    ?     6.48057+-0.02214       ? might be 1.0016x slower
   &lt;geometric&gt; *                               2.15791+-0.00625    ^     2.14476+-0.00649       ^ definitely 1.0061x faster
   &lt;harmonic&gt;                                  0.92915+-0.00427          0.92163+-0.00407         might be 1.0082x faster

                                                     Base                   HashConst                                     
Kraken:
   ai-astar                                    794.943+-11.039           794.457+-11.576        
   audio-beat-detection                        197.114+-1.162      ?     206.202+-11.136        ? might be 1.0461x slower
   audio-dft                                   276.644+-0.650      ?     277.280+-2.925         ?
   audio-fft                                   119.476+-0.449            119.453+-0.265         
   audio-oscillator                            243.566+-0.434      ?     244.615+-0.621         ?
   imaging-darkroom                            286.999+-1.415      ?     287.954+-2.334         ?
   imaging-desaturate                          226.815+-0.484            226.659+-0.238         
   imaging-gaussian-blur                       437.352+-1.542      ?     437.453+-2.217         ?
   json-parse-financial                         66.794+-0.230             66.649+-0.262         
   json-stringify-tinderbox                     86.361+-0.918      ?      87.221+-2.289         ?
   stanford-crypto-aes                          87.739+-1.164             86.656+-0.328           might be 1.0125x faster
   stanford-crypto-ccm                          90.307+-0.296      ?      90.763+-0.321         ?
   stanford-crypto-pbkdf2                      196.523+-0.834      ?     196.833+-1.849         ?
   stanford-crypto-sha256-iterative             96.218+-0.810      ?      96.330+-0.289         ?

   &lt;arithmetic&gt; *                              229.061+-0.818      ?     229.895+-1.476         ? might be 1.0036x slower
   &lt;geometric&gt;                                 177.581+-0.290      ?     178.262+-0.859         ? might be 1.0038x slower
   &lt;harmonic&gt;                                  144.159+-0.259      ?     144.510+-0.554         ? might be 1.0024x slower

                                                     Base                   HashConst                                     
JSBench:
   amazon                                      18.0833+-0.3272     ?     18.4167+-0.3272        ? might be 1.0184x slower
   facebook                                    70.2500+-1.2154     ?     70.4167+-1.5435        ?
   google                                      96.1667+-0.7082           96.0000+-1.1494        
   twitter                                     53.0833+-0.4248     ^     52.2500+-0.2874        ^ definitely 1.0159x faster
   yahoo                                       22.5000+-0.3318           22.1667+-0.2473          might be 1.0150x faster

   &lt;arithmetic&gt; *                              52.0167+-0.3272           51.8500+-0.3759          might be 1.0032x faster
   &lt;geometric&gt;                                 42.9280+-0.2570           42.8264+-0.3306          might be 1.0024x faster
   &lt;harmonic&gt;                                  34.8989+-0.2832     ?     34.9147+-0.3509        ? might be 1.0005x slower

                                                     Base                   HashConst                                     
JSRegress:
   adapt-to-double-divide                      73.0448+-0.2528     ?     73.3176+-0.5147        ?
   aliased-arguments-getbyval                   0.8252+-0.0153            0.8226+-0.0089        
   arity-mismatch-inlining                      0.6705+-0.0089            0.6600+-0.0139          might be 1.0159x faster
   big-int-mul                                  8.4999+-0.0774            8.4502+-0.0511        
   boolean-test                                 3.5269+-0.0315            3.5131+-0.0294        
   cast-int-to-double                          12.0900+-0.0306     ?     12.1129+-0.0621        ?
   cfg-simplify                                 3.0696+-0.0116     ?      3.0845+-0.0310        ?
   cmpeq-obj-to-obj-other                       8.6143+-0.3413            8.4200+-0.0558          might be 1.0231x faster
   constant-test                                6.8671+-0.0285            6.8647+-0.0593        
   direct-arguments-getbyval                    0.7700+-0.0082            0.7698+-0.0149        
   double-pollution-getbyval                    9.2234+-0.0308            9.2041+-0.0153        
   double-pollution-putbyoffset                 4.7886+-0.6114     ?      5.1147+-0.8163        ? might be 1.0681x slower
   external-arguments-getbyval                  2.1439+-0.2492            2.1198+-0.2117          might be 1.0114x faster
   external-arguments-putbyval                  3.7456+-0.4770     ?      3.8689+-0.4926        ? might be 1.0329x slower
   Float32Array-matrix-mult                    11.3750+-0.5663     ?     11.7441+-0.6744        ? might be 1.0324x slower
   fold-double-to-int                          38.1196+-0.6664           37.6831+-0.3176          might be 1.0116x faster
   function-dot-apply                           2.6112+-0.0324     ^      2.5639+-0.0080        ^ definitely 1.0185x faster
   function-test                                4.0352+-0.0778     ?      4.0651+-0.0418        ?
   inline-arguments-access                      1.1399+-0.0121     ?      1.1551+-0.0184        ? might be 1.0134x slower
   inline-arguments-local-escape               22.8221+-0.3672     ?     23.1902+-0.3512        ? might be 1.0161x slower
   int-overflow-local                          85.7052+-0.2149           85.5160+-0.1651        
   Int16Array-bubble-sort                      66.9235+-1.3807           66.3555+-0.2462        
   Int16Array-load-int-mul                      1.7750+-0.0209            1.7710+-0.0257        
   Int8Array-load                               4.5036+-0.1126            4.4873+-0.0903        
   integer-divide                              12.8903+-0.0449     ?     12.9670+-0.1169        ?
   method-on-number                           189.3689+-1.0929     ?    191.4051+-2.0277        ? might be 1.0108x slower
   new-array-dead                              23.3886+-0.0952     ?     23.4266+-0.1534        ?
   new-array-push                              10.8416+-1.6158           10.8325+-1.6281        
   number-test                                  3.4584+-0.0255            3.4408+-0.0363        
   object-test                                  3.8524+-0.0439     ?      3.9079+-0.0321        ? might be 1.0144x slower
   poly-stricteq                               79.1842+-0.8449     ?     80.9045+-1.7510        ? might be 1.0217x slower
   rare-osr-exit-on-local                     175.2612+-1.1155          173.8743+-0.6069        
   simple-activation-demo                      40.1248+-0.4975           39.9025+-0.5046        
   slow-convergence                            78.5798+-0.2815     ?     78.8012+-0.2196        ?
   sparse-conditional                           1.0674+-0.0153            1.0600+-0.0132        
   string-hash                                  4.2261+-0.0215     ?      4.2363+-0.0447        ?
   string-test                                  3.4048+-0.0327            3.3857+-0.0127        
   tear-off-arguments                           2.9834+-0.0114     ?      2.9946+-0.0141        ?
   to-int32-boolean                            23.1747+-0.0693           23.1611+-0.0303        
   undefined-test                               3.7980+-0.0602            3.7848+-0.0540        

   &lt;arithmetic&gt;                                25.8124+-0.0986     ?     25.8735+-0.1072        ? might be 1.0024x slower
   &lt;geometric&gt; *                                8.2821+-0.0552     ?      8.2997+-0.0463        ? might be 1.0021x slower
   &lt;harmonic&gt;                                   3.4528+-0.0129            3.4489+-0.0130          might be 1.0011x faster

                                                     Base                   HashConst                                     
DSP:
   filtrr-posterize-tint                       44.1847+-0.7029           43.9408+-0.6471        
   filtrr-tint-contrast-sat-bright             70.3021+-0.5723     ?     71.8130+-2.5226        ? might be 1.0215x slower
   filtrr-tint-sat-adj-contr-mult              90.3652+-0.6997     ?     92.1827+-1.9895        ? might be 1.0201x slower
   filtrr-blur-overlay-sat-contr              223.4736+-4.6838     ?    224.0483+-4.6761        ?
   filtrr-sat-blur-mult-sharpen-contr         274.9528+-1.7327     ?    277.0566+-2.0776        ?
   filtrr-sepia-bias                           33.1090+-0.4371     ?     33.1363+-0.5593        ?
   route9-vp8                         x5     1081.0710+-10.5430        1077.9987+-6.9789        
   starfield                          x5     1172.4700+-9.5640     ?   1176.9836+-6.9101        ?

   &lt;arithmetic&gt;                               750.2558+-5.9386     ?    751.0681+-3.3128        ? might be 1.0011x slower
   &lt;geometric&gt; *                              438.4555+-2.5311     ?    439.8283+-1.7897        ? might be 1.0031x slower
   &lt;harmonic&gt;                                 168.1541+-1.2405     ?    168.9105+-1.9142        ? might be 1.0045x slower

                                                     Base                   HashConst                                     
All benchmarks:
   &lt;arithmetic&gt;                               143.1933+-0.8390     ?    143.4145+-0.4087        ? might be 1.0015x slower
   &lt;geometric&gt;                                 19.3711+-0.1199     ?     19.3760+-0.1130        ? might be 1.0003x slower
   &lt;harmonic&gt;                                   3.7289+-0.0144            3.7107+-0.0102          might be 1.0049x faster

                                                     Base                   HashConst                                     
Geomean of preferred means:
   &lt;scaled-result&gt;                             34.9745+-0.1795           34.9713+-0.1493          might be 1.0001x faster</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661798</commentid>
    <comment_count>19</comment_count>
      <attachid>150492</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-07-02 16:09:54 -0700</bug_when>
    <thetext>Comment on attachment 150492
Updated patch with changes suggested by reviewer

View in context: https://bugs.webkit.org/attachment.cgi?id=150492&amp;action=review

&gt; Source/JavaScriptCore/ChangeLog:68
&gt; - 
&gt; -        * runtime/JSArray.cpp:
&gt; + * runtime/JSArray.cpp:

?

&gt; Source/JavaScriptCore/runtime/JSString.h:169
&gt; +        static JS_EXPORTDATA unsigned s_newStringsSinceLastGC;

This isn&apos;t thread safe -- we have multiple heaps independtly being GC&apos;d so this needs to be a per-heap field.

&gt; Source/JavaScriptCore/runtime/JSString.h:195
&gt; +        static const unsigned s_hashConstLock = 1u &lt;&lt; 2;
&gt; +        static const unsigned s_isHashConstSingleton = 1u &lt;&lt; 1;
&gt; +        static const unsigned s_is8Bit = 1u;

Would be nicer (and less likely for the compiler to do anything stupid) as:
enum {
    hashConstLock = 1u &lt;&lt; 2,
    isHashConstSingleton = 1u &lt;&lt; 1,
    s_is8Bit = 1u
};</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661827</commentid>
    <comment_count>20</comment_count>
      <attachid>150503</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-07-02 17:15:38 -0700</bug_when>
    <thetext>Created attachment 150503
Patch with suggested fixes</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661829</commentid>
    <comment_count>21</comment_count>
      <attachid>150503</attachid>
    <who name="Gyuyoung Kim">gyuyoung.kim</who>
    <bug_when>2012-07-02 17:20:50 -0700</bug_when>
    <thetext>Comment on attachment 150503
Patch with suggested fixes

Attachment 150503 did not pass efl-ews (efl):
Output: http://queues.webkit.org/results/13124314</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>661835</commentid>
    <comment_count>22</comment_count>
      <attachid>150505</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-07-02 17:37:11 -0700</bug_when>
    <thetext>Created attachment 150505
FFixed build issues.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662416</commentid>
    <comment_count>23</comment_count>
      <attachid>150656</attachid>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-07-03 11:54:14 -0700</bug_when>
    <thetext>Created attachment 150656
Fixed a minor bug and improved new strings since last hash const logic

Fixed that the strings since last Hash Const threshold boolean is in MarkStackThreadSharedData and not MarkStack.

Change the clearing of the number of new strings since last GC is only done at the end of a GC where we actually hash const&apos;ed strings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>662537</commentid>
    <comment_count>24</comment_count>
    <who name="Michael Saboff">msaboff</who>
    <bug_when>2012-07-03 15:57:14 -0700</bug_when>
    <thetext>Committed r121806: &lt;http://trac.webkit.org/changeset/121806&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>668354</commentid>
    <comment_count>25</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-07-12 16:12:02 -0700</bug_when>
    <thetext>&gt; The GC benchmark was of marginal use as the numbers seem to worsen over time.  I compared before and after numbers after 30 seconds from when the benchmark page loaded to show that the patch is very similar to the baseline.

Can you give more detail here? What&apos;s the rate of worsening over time? What were the two numbers you measured, which were &quot;very similar&quot;?</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141035</attachid>
            <date>2012-05-09 15:45:14 -0700</date>
            <delta_ts>2012-05-09 17:33:40 -0700</delta_ts>
            <desc>Patch for Review</desc>
            <filename>86024.patch</filename>
            <type>text/plain</type>
            <size>11898</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2NTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTA1LTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuICBJZiBzbywgd2UgY2hhbmdlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQg
c3RyaW5nIHdlJ3JlCisgICAgICAgIHZpc2l0aW5nIHRvIHRoZSBwcmlvciBzdHJpbmcuCisKKyAg
ICAgICAgVG8gc29tZXdoYXQgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdGhpcyBj
aGFuZ2UsIGlmIGEgc3RyaW5nCisgICAgICAgIGlzIHVuaXF1ZSBhdCB0aGUgZW5kIG9mIGEgbWFy
a2luZyBpdCB3aWxsIG5vdCBiZSBjaGVja2VkIGR1cmluZyBmdXJ0aGVyCisgICAgICAgIEdDIHBo
YXNlcy4gIEluIHNvbWUgY2FzZXMgdGhpcyB3b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0
IHdlIGFyZQorICAgICAgICB0cnlpbmcgdG8gY2F0Y2ggdGhlIGdyb3d0aCBvZiBkdXBsaWNhdGUg
c3RyaW5ncy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlND
OjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldENoaWxkcmVuKTogTmV3IG1ldGhvZCBj
YWxsZWQgYnkgdGhlIAorICAgICAgICBtYWluIHRocmVhZCB0byByZXNldCB0aGUgc2xhdmUgdGhy
ZWFkcy4gIFRoaXMgaXMgcHJpbWFyaWx5IGRvbmUgdG8KKyAgICAgICAgY2xlYXIgdGhlIG1fdW5p
cXVlU3RyaW5ncyBIYXNoTWFwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya1N0
YWNrVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4pOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6TWFya1N0YWNrVGhyZWFkU2hhcmVk
RGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpyZXNldCk6IEFkZGVkIGNhbGwgdG8gY2xlYXIgbV91
bmlxdWVTdHJpbmdzLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKTog
TmV3IG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBoYXNoIGNvbnN0aW5nLgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCk6IENoYW5nZWQgdG8gY2FsbCB0aGUgbmV3IGhh
c2ggY29uc3RpbmcKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQoKQorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmg6CisgICAgICAgIChNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAg
KE1hcmtTdGFjayk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6c2hhcmVkRGF0YSk6CisgICAg
ICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNTdHJpbmcpOiBBZGRlZCBtX2lz
SGFzaENvbnN0U2luZ2xldG9uIGZsYWcsIGFjY2Vzc29ycyBmb3IgdGhlIGZsYWcgYW5kCisgICAg
ICAgIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgZmxhZy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzSGFzaENvbnN0U2lu
Z2xldG9uKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNsZWFySGFzaENvbnN0U2luZ2xldG9u
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNldEhhc2hDb25zdFNpbmdsZXRvbik6CisgICAg
ICAgIChKU0M6OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDEyLTA1LTA5ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVc2UgaW5kZXBlbmRlbnQgdmVyc2lvbiBudW1iZXJzIGZvciBwdWJsaWMgbGlicmFyaWVzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTE2MTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
Niw2ICs2NTYsNyBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICB2aXNp
dG9yLmRvbmVDb3B5aW5nKCk7CiAgICAgdmlzaXRvci5yZXNldCgpOwogICAgIG1fc2hhcmVkRGF0
YS5yZXNldCgpOworICAgIG1fc2hhcmVkRGF0YS5yZXNldENoaWxkcmVuKCk7CiAgICAgbV9zdG9y
YWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsKIAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5v
T3BlcmF0aW9uOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3Bw
CShyZXZpc2lvbiAxMTYxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3Rh
Y2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNPYmpl
Y3QuaCIKICNpbmNsdWRlICJTY29wZUNoYWluLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisj
aW5jbHVkZSAiVVN0cmluZy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUg
PHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTIxOCwxNyArMjE5LDI0IEBAIHZvaWQgTWFya1N0YWNr
QXJyYXk6OnN0ZWFsU29tZUNlbGxzRnJvbSgKIH0KIAogI2lmIEVOQUJMRShQQVJBTExFTF9HQykK
LXZvaWQgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oKQordm9p
ZCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldENoaWxkcmVuKCkKK3sKKyAgICBmb3Ig
KHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9zbGF2ZU1hcmtTdGFja3Muc2l6ZSgpOyArK2kpCisgICAg
ICAgbV9zbGF2ZU1hcmtTdGFja3NbaV0tPnJlc2V0KCk7Cit9CisKK3ZvaWQgTWFya1N0YWNrVGhy
ZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9y
KQogewogICAgIFdURjo6cmVnaXN0ZXJHQ1RocmVhZCgpOwotICAgIFNsb3RWaXNpdG9yIHNsb3RW
aXNpdG9yKCp0aGlzKTsKLSAgICBQYXJhbGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0
b3IpOwotICAgIHNsb3RWaXNpdG9yLmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVE
cmFpbik7CisgICAgUGFyYWxsZWxNb2RlRW5hYmxlciBlbmFibGVyKCpzbG90VmlzaXRvcik7Cisg
ICAgc2xvdFZpc2l0b3ItPmRyYWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7
CisgICAgZGVsZXRlIHNsb3RWaXNpdG9yOwogfQogCi12b2lkIE1hcmtTdGFja1RocmVhZFNoYXJl
ZERhdGE6Om1hcmtpbmdUaHJlYWRTdGFydEZ1bmModm9pZCogc2hhcmVkKQordm9pZCBNYXJrU3Rh
Y2tUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15VmlzaXRv
cikKIHsKLSAgICBzdGF0aWNfY2FzdDxNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhKj4oc2hhcmVk
KS0+bWFya2luZ1RocmVhZE1haW4oKTsKKyAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBz
dGF0aWNfY2FzdDxTbG90VmlzaXRvcio+KG15VmlzaXRvcik7CisgICAgc2xvdFZpc2l0b3ItPnNo
YXJlZERhdGEoKS5tYXJraW5nVGhyZWFkTWFpbihzbG90VmlzaXRvcik7CiB9CiAjZW5kaWYKIApA
QCAtMjQxLDcgKzI0OSw5IEBAIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6Ok1hcmtTdGFja1Ro
cmUKIHsKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsg
aSA8IE9wdGlvbnM6Om51bWJlck9mR0NNYXJrZXJzOyArK2kpIHsKLSAgICAgICAgbV9tYXJraW5n
VGhyZWFkcy5hcHBlbmQoY3JlYXRlVGhyZWFkKG1hcmtpbmdUaHJlYWRTdGFydEZ1bmMsIHRoaXMs
ICJKYXZhU2NyaXB0Q29yZTo6TWFya2luZyIpKTsKKyAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RW
aXNpdG9yID0gbmV3IFNsb3RWaXNpdG9yKCp0aGlzKTsKKyAgICAgICAgbV9zbGF2ZU1hcmtTdGFj
a3MuYXBwZW5kKHNsb3RWaXNpdG9yKTsKKyAgICAgICAgbV9tYXJraW5nVGhyZWFkcy5hcHBlbmQo
Y3JlYXRlVGhyZWFkKG1hcmtpbmdUaHJlYWRTdGFydEZ1bmMsIHNsb3RWaXNpdG9yLCAiSmF2YVNj
cmlwdENvcmU6Ok1hcmtpbmciKSk7CiAgICAgICAgIEFTU0VSVChtX21hcmtpbmdUaHJlYWRzLmxh
c3QoKSk7CiAgICAgfQogI2VuZGlmCkBAIC0yNzMsNyArMjgzLDYgQEAgdm9pZCBNYXJrU3RhY2tU
aHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCiAjZWxzZQogICAgIEFTU0VSVChtX29wYXF1ZVJvb3Rz
LmlzRW1wdHkoKSk7CiAjZW5kaWYKLSAgICAKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJz
LnJlbW92ZUFsbCgpOwogfQogCkBAIC0yODYsNiArMjk1LDcgQEAgdm9pZCBNYXJrU3RhY2s6OnJl
c2V0KCkKICNlbHNlCiAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogI2VuZGlmCisgICAgbV91
bmlxdWVTdHJpbmdzLmNsZWFyKCk7CiB9CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2Vy
dmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3RzKQpAQCAtNDg2LDYgKzQ5NiwzNCBAQCB2b2lk
KiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNw
YWNlOjphbGxvY2F0ZUZyb21CbG9jayhtX2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitpbmxpbmUg
dm9pZCBNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgQVNT
RVJUKHNsb3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsKKyAgICBBU1NFUlQodmFsdWUp
OworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2
YWx1ZS5pc1N0cmluZygpKSB7CisgICAgICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNT
dHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7CisgICAgICAgIGlmICghc3RyaW5nLT5pc0hhc2hDb25z
dFNpbmdsZXRvbigpICYmIHN0cmluZy0+bGVuZ3RoKCkgPiAxICYmICFzdHJpbmctPmlzUm9wZSgp
KSB7CisgICAgICAgICAgICBVbmlxdWVTdHJpbmdNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBt
X3VuaXF1ZVN0cmluZ3MuYWRkKHN0cmluZy0+c3RyaW5nKCkuaW1wbCgpLCB2YWx1ZSk7CisgICAg
ICAgICAgICBpZiAoYWRkUmVzdWx0LmlzTmV3RW50cnkpCisgICAgICAgICAgICAgICAgc3RyaW5n
LT5zZXRIYXNoQ29uc3RTaW5nbGV0b24oKTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAg
ICAgICAgIEpTVmFsdWUgZXhpc3RpbmdKU1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNv
bmQ7CisgICAgICAgICAgICAgICAgaWYgKHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkKKyAgICAg
ICAgICAgICAgICAgICAganNDYXN0PEpTU3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFzQ2VsbCgp
KS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKTsKKyAgICAgICAgICAgICAgICAqc2xvdCA9IGV4
aXN0aW5nSlNWYWx1ZTsKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cit9
CisKKwogdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcHRyLCBzaXplX3Qg
Ynl0ZXMsIEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewogICAgIHZvaWQqIG9s
ZFB0ciA9ICpwdHI7CkBAIC00OTksNyArNTM3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUFu
ZEFwcGVuZCh2b2lkKiogcAogICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7CiAgICAg
ICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAg
ICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOworICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQoJm5l
d1ZhbHVlc1tpXSk7CiAgICAgICAgIH0KIAogICAgICAgICBtZW1jcHkobmV3UHRyLCBvbGRQdHIs
IGpzVmFsdWVzT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFj
ay5oCShyZXZpc2lvbiAxMTYxMTkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJr
U3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMzQsMTIgKzM0LDE0IEBACiAjaW5jbHVkZSAiVW5j
b25kaXRpb25hbEZpbmFsaXplci5oIgogI2luY2x1ZGUgIlZUYWJsZVNwZWN0cnVtLmgiCiAjaW5j
bHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZlc3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+
CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAuaD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2lu
Y2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNs
dWRlIDx3dGYvT1NBbGxvY2F0b3IuaD4KICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5j
bHVkZSA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTcx
LDEzICsxNzMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH5NYXJrU3RhY2tUaHJlYWRT
aGFyZWREYXRhKCk7CiAgICAgICAgIAogICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgCisKKyNp
ZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgICAgIHZvaWQgcmVzZXRDaGlsZHJlbigpOworI2Vu
ZGlmCisKICAgICBwcml2YXRlOgogICAgICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwogICAg
ICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0Mp
Ci0gICAgICAgIHZvaWQgbWFya2luZ1RocmVhZE1haW4oKTsKKyAgICAgICAgdm9pZCBtYXJraW5n
VGhyZWFkTWFpbihTbG90VmlzaXRvciopOwogICAgICAgICBzdGF0aWMgdm9pZCBtYXJraW5nVGhy
ZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXApOwogI2VuZGlmCiAKQEAgLTE4Nyw2ICsxOTMsNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciBtX3NlZ21l
bnRBbGxvY2F0b3I7CiAgICAgICAgIAogICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4g
bV9tYXJraW5nVGhyZWFkczsKKyAgICAgICAgVmVjdG9yPE1hcmtTdGFjayo+IG1fc2xhdmVNYXJr
U3RhY2tzOwogICAgICAgICAKICAgICAgICAgTXV0ZXggbV9tYXJraW5nTG9jazsKICAgICAgICAg
VGhyZWFkQ29uZGl0aW9uIG1fbWFya2luZ0NvbmRpdGlvbjsKQEAgLTIyMSwxMyArMjI4LDE0IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAg
ICAgICBib29sIGNvbnRhaW5zT3BhcXVlUm9vdCh2b2lkKik7CiAgICAgICAgIGludCBvcGFxdWVS
b290Q291bnQoKTsKLSAgICAgICAgCisKKyAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0
YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0
eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9CiAKICAgICAgICAgdm9pZCByZXNldCgp
OwogCiAgICAgICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENv
dW50OyB9Ci0KKyAgICAgICAgCiAjaWYgRU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKICAg
ICAgICAgVlRhYmxlU3BlY3RydW0gbV92aXNpdGVkVHlwZUNvdW50czsKICNlbmRpZgpAQCAtMjUx
LDYgKzI1OSw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgaW50ZXJuYWxBcHBl
bmQoSlNDZWxsKik7CiAgICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7CisgICAg
ICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSopOwogICAgICAgICAKICAgICAgICAgSlNf
RVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgICAgIApAQCAtMjcw
LDYgKzI3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgTWFya1N0YWNr
QXJyYXkgbV9zdGFjazsKICAgICAgICAgSGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsgLy8g
SGFuZGxlLW93bmluZyBkYXRhIHN0cnVjdHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2Ug
Y29sbGVjdG9yLgorICAgICAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTVmFsdWU+
IFVuaXF1ZVN0cmluZ01hcDsKKyAgICAgICAgVW5pcXVlU3RyaW5nTWFwIG1fdW5pcXVlU3RyaW5n
czsKICAgICAgICAgCiAjaWYgIUFTU0VSVF9ESVNBQkxFRAogICAgIHB1YmxpYzoKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTE2MTE5KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5
KQpAQCAtNjcsNiArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNz
IEpTR2xvYmFsRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7
CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU1JvcGVTdHJpbmc7CisgICAgICAgIGZyaWVuZCBjbGFz
cyBNYXJrU3RhY2s7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwogCiAgICAg
ICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7CkBAIC05MSw2ICs5Miw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAg
ICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKICAgICAgICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5p
bXBsKCktPmlzOEJpdCgpOworICAgICAgICAgICAgbV9pc0hhc2hDb25zdFNpbmdsZXRvbiA9IGZh
bHNlOwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIHNpemVfdCBsZW5ndGgsIHNpemVfdCBjb3N0KQpAQCAtOTksNiArMTAx
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAg
bV9pczhCaXQgPSBtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAgICBtX2lzSGFz
aENvbnN0U2luZ2xldG9uID0gZmFsc2U7CiAgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5y
ZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29zdCk7CiAgICAgICAgIH0KIApAQCAtMTA4LDYgKzExMSw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xv
YmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IDA7CiAgICAgICAgICAgICBtX2lzOEJp
dCA9IHRydWU7CisgICAgICAgICAgICBtX2lzSGFzaENvbnN0U2luZ2xldG9uID0gZmFsc2U7CiAg
ICAgICAgIH0KICAgICAgICAgCiAgICAgcHVibGljOgpAQCAtMTYxLDkgKzE2NSwxMyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIGJvb2wgaXNSb3BlKCkgY29uc3Qg
eyByZXR1cm4gbV92YWx1ZS5pc051bGwoKTsgfQogICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0
IHsgcmV0dXJuIG1faXM4Qml0OyB9CisgICAgICAgIGJvb2wgaXNIYXNoQ29uc3RTaW5nbGV0b24o
KSBjb25zdCB7IHJldHVybiBtX2lzSGFzaENvbnN0U2luZ2xldG9uOyB9CisgICAgICAgIHZvaWQg
Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKSB7IG1faXNIYXNoQ29uc3RTaW5nbGV0b24gPSBmYWxz
ZTsgfQorICAgICAgICB2b2lkIHNldEhhc2hDb25zdFNpbmdsZXRvbigpIHsgbV9pc0hhc2hDb25z
dFNpbmdsZXRvbiA9IHRydWU7IH0KIAogICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRl
ZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBmaWJlcnMuCiAgICAgICAgIGJvb2wg
bV9pczhCaXQgOiAxOworICAgICAgICBib29sIG1faXNIYXNoQ29uc3RTaW5nbGV0b24gOiAxOwog
ICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFs
dWU7CiAKQEAgLTIzMyw2ICsyNDEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEJh
c2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBz
MS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7CiAgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+
aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNIYXNoQ29uc3RTaW5n
bGV0b24gPSBmYWxzZTsKICAgICAgICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0
aGlzLCBzMSk7CiAgICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywg
czIpOwogICAgICAgICB9CkBAIC0yNDIsNiArMjUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1f
bGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpICsgczMtPmxlbmd0aCgpOwogICAg
ICAgICAgICAgbV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMt
PmlzOEJpdCgpKTsKKyAgICAgICAgICAgIG1faXNIYXNoQ29uc3RTaW5nbGV0b24gPSBmYWxzZTsK
ICAgICAgICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7CiAgICAg
ICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAgICAgICAg
ICAgbV9maWJlcnNbMl0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsK
</data>
<flag name="commit-queue"
          id="147102"
          type_id="3"
          status="-"
          setter="gustavo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>141063</attachid>
            <date>2012-05-09 17:33:40 -0700</date>
            <delta_ts>2012-06-29 09:40:38 -0700</delta_ts>
            <desc>Speculative build fix</desc>
            <filename>86024-1.patch</filename>
            <type>text/plain</type>
            <size>11931</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE2NTYzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTA1LTA5ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuICBJZiBzbywgd2UgY2hhbmdlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQg
c3RyaW5nIHdlJ3JlCisgICAgICAgIHZpc2l0aW5nIHRvIHRoZSBwcmlvciBzdHJpbmcuCisKKyAg
ICAgICAgVG8gc29tZXdoYXQgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdGhpcyBj
aGFuZ2UsIGlmIGEgc3RyaW5nCisgICAgICAgIGlzIHVuaXF1ZSBhdCB0aGUgZW5kIG9mIGEgbWFy
a2luZyBpdCB3aWxsIG5vdCBiZSBjaGVja2VkIGR1cmluZyBmdXJ0aGVyCisgICAgICAgIEdDIHBo
YXNlcy4gIEluIHNvbWUgY2FzZXMgdGhpcyB3b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0
IHdlIGFyZQorICAgICAgICB0cnlpbmcgdG8gY2F0Y2ggdGhlIGdyb3d0aCBvZiBkdXBsaWNhdGUg
c3RyaW5ncy4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6
Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlND
OjpNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldENoaWxkcmVuKTogTmV3IG1ldGhvZCBj
YWxsZWQgYnkgdGhlIAorICAgICAgICBtYWluIHRocmVhZCB0byByZXNldCB0aGUgc2xhdmUgdGhy
ZWFkcy4gIFRoaXMgaXMgcHJpbWFyaWx5IGRvbmUgdG8KKyAgICAgICAgY2xlYXIgdGhlIG1fdW5p
cXVlU3RyaW5ncyBIYXNoTWFwLgorICAgICAgICAoSlNDKToKKyAgICAgICAgKEpTQzo6TWFya1N0
YWNrVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4pOgorICAgICAgICAoSlNDOjpN
YXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjptYXJraW5nVGhyZWFkU3RhcnRGdW5jKToKKyAgICAg
ICAgKEpTQzo6TWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6TWFya1N0YWNrVGhyZWFkU2hhcmVk
RGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToK
KyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpyZXNldCk6IEFkZGVkIGNhbGwgdG8gY2xlYXIgbV91
bmlxdWVTdHJpbmdzLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFsQXBwZW5kKTog
TmV3IG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBoYXNoIGNvbnN0aW5nLgorICAgICAgICAoSlND
OjpTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCk6IENoYW5nZWQgdG8gY2FsbCB0aGUgbmV3IGhh
c2ggY29uc3RpbmcKKyAgICAgICAgaW50ZXJuYWxBcHBlbmQoKQorICAgICAgICAqIGhlYXAvTWFy
a1N0YWNrLmg6CisgICAgICAgIChNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhKToKKyAgICAgICAg
KE1hcmtTdGFjayk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6c2hhcmVkRGF0YSk6CisgICAg
ICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAgICAoSlNTdHJpbmcpOiBBZGRlZCBtX2lz
SGFzaENvbnN0U2luZ2xldG9uIGZsYWcsIGFjY2Vzc29ycyBmb3IgdGhlIGZsYWcgYW5kCisgICAg
ICAgIGNvZGUgdG8gaW5pdGlhbGl6ZSB0aGUgZmxhZy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6
OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzSGFzaENvbnN0U2lu
Z2xldG9uKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmNsZWFySGFzaENvbnN0U2luZ2xldG9u
KToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNldEhhc2hDb25zdFNpbmdsZXRvbik6CisgICAg
ICAgIChKU0M6OkpTUm9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorCiAyMDEyLTA1LTA5ICBD
YXJsb3MgR2FyY2lhIENhbXBvcyAgPGNnYXJjaWFAaWdhbGlhLmNvbT4KIAogICAgICAgICBbR1RL
XSBVc2UgaW5kZXBlbmRlbnQgdmVyc2lvbiBudW1iZXJzIGZvciBwdWJsaWMgbGlicmFyaWVzCklu
ZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9IZWFwLmNwcAkocmV2aXNpb24gMTE2MTE5KQorKysg
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTY1
Niw2ICs2NTYsOSBAQCB2b2lkIEhlYXA6Om1hcmtSb290cyhib29sIGZ1bGxHQykKICAgICB2aXNp
dG9yLmRvbmVDb3B5aW5nKCk7CiAgICAgdmlzaXRvci5yZXNldCgpOwogICAgIG1fc2hhcmVkRGF0
YS5yZXNldCgpOworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBtX3NoYXJlZERhdGEucmVz
ZXRDaGlsZHJlbigpOworI2VuZGlmCiAgICAgbV9zdG9yYWdlU3BhY2UuZG9uZUNvcHlpbmcoKTsK
IAogICAgIG1fb3BlcmF0aW9uSW5Qcm9ncmVzcyA9IE5vT3BlcmF0aW9uOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAxMTYxMTkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC0zNiw2ICszNiw3IEBACiAjaW5jbHVkZSAiSlNPYmplY3QuaCIKICNpbmNsdWRlICJTY29wZUNo
YWluLmgiCiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCisjaW5jbHVkZSAiVVN0cmluZy5oIgogI2lu
Y2x1ZGUgIldyaXRlQmFycmllci5oIgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAg
LTIxOCwxNyArMjE5LDI0IEBAIHZvaWQgTWFya1N0YWNrQXJyYXk6OnN0ZWFsU29tZUNlbGxzRnJv
bSgKIH0KIAogI2lmIEVOQUJMRShQQVJBTExFTF9HQykKLXZvaWQgTWFya1N0YWNrVGhyZWFkU2hh
cmVkRGF0YTo6bWFya2luZ1RocmVhZE1haW4oKQordm9pZCBNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldENoaWxkcmVuKCkKK3sKKyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgbV9z
bGF2ZU1hcmtTdGFja3Muc2l6ZSgpOyArK2kpCisgICAgICAgbV9zbGF2ZU1hcmtTdGFja3NbaV0t
PnJlc2V0KCk7Cit9CisKK3ZvaWQgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YTo6bWFya2luZ1Ro
cmVhZE1haW4oU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yKQogewogICAgIFdURjo6cmVnaXN0ZXJH
Q1RocmVhZCgpOwotICAgIFNsb3RWaXNpdG9yIHNsb3RWaXNpdG9yKCp0aGlzKTsKLSAgICBQYXJh
bGxlbE1vZGVFbmFibGVyIGVuYWJsZXIoc2xvdFZpc2l0b3IpOwotICAgIHNsb3RWaXNpdG9yLmRy
YWluRnJvbVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgUGFyYWxsZWxNb2Rl
RW5hYmxlciBlbmFibGVyKCpzbG90VmlzaXRvcik7CisgICAgc2xvdFZpc2l0b3ItPmRyYWluRnJv
bVNoYXJlZChTbG90VmlzaXRvcjo6U2xhdmVEcmFpbik7CisgICAgZGVsZXRlIHNsb3RWaXNpdG9y
OwogfQogCi12b2lkIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6Om1hcmtpbmdUaHJlYWRTdGFy
dEZ1bmModm9pZCogc2hhcmVkKQordm9pZCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjptYXJr
aW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIG15VmlzaXRvcikKIHsKLSAgICBzdGF0aWNfY2FzdDxN
YXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhKj4oc2hhcmVkKS0+bWFya2luZ1RocmVhZE1haW4oKTsK
KyAgICBTbG90VmlzaXRvciogc2xvdFZpc2l0b3IgPSBzdGF0aWNfY2FzdDxTbG90VmlzaXRvcio+
KG15VmlzaXRvcik7CisgICAgc2xvdFZpc2l0b3ItPnNoYXJlZERhdGEoKS5tYXJraW5nVGhyZWFk
TWFpbihzbG90VmlzaXRvcik7CiB9CiAjZW5kaWYKIApAQCAtMjQxLDcgKzI0OSw5IEBAIE1hcmtT
dGFja1RocmVhZFNoYXJlZERhdGE6Ok1hcmtTdGFja1RocmUKIHsKICNpZiBFTkFCTEUoUEFSQUxM
RUxfR0MpCiAgICAgZm9yICh1bnNpZ25lZCBpID0gMTsgaSA8IE9wdGlvbnM6Om51bWJlck9mR0NN
YXJrZXJzOyArK2kpIHsKLSAgICAgICAgbV9tYXJraW5nVGhyZWFkcy5hcHBlbmQoY3JlYXRlVGhy
ZWFkKG1hcmtpbmdUaHJlYWRTdGFydEZ1bmMsIHRoaXMsICJKYXZhU2NyaXB0Q29yZTo6TWFya2lu
ZyIpKTsKKyAgICAgICAgU2xvdFZpc2l0b3IqIHNsb3RWaXNpdG9yID0gbmV3IFNsb3RWaXNpdG9y
KCp0aGlzKTsKKyAgICAgICAgbV9zbGF2ZU1hcmtTdGFja3MuYXBwZW5kKHNsb3RWaXNpdG9yKTsK
KyAgICAgICAgbV9tYXJraW5nVGhyZWFkcy5hcHBlbmQoY3JlYXRlVGhyZWFkKG1hcmtpbmdUaHJl
YWRTdGFydEZ1bmMsIHNsb3RWaXNpdG9yLCAiSmF2YVNjcmlwdENvcmU6Ok1hcmtpbmciKSk7CiAg
ICAgICAgIEFTU0VSVChtX21hcmtpbmdUaHJlYWRzLmxhc3QoKSk7CiAgICAgfQogI2VuZGlmCkBA
IC0yNzMsNyArMjgzLDYgQEAgdm9pZCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgp
CiAjZWxzZQogICAgIEFTU0VSVChtX29wYXF1ZVJvb3RzLmlzRW1wdHkoKSk7CiAjZW5kaWYKLSAg
ICAKICAgICBtX3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogfQogCkBAIC0y
ODYsNiArMjk1LDcgQEAgdm9pZCBNYXJrU3RhY2s6OnJlc2V0KCkKICNlbHNlCiAgICAgbV9vcGFx
dWVSb290cy5jbGVhcigpOwogI2VuZGlmCisgICAgbV91bmlxdWVTdHJpbmdzLmNsZWFyKCk7CiB9
CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQpAQCAtNDg2LDYgKzQ5NiwzNCBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayht
X2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitpbmxpbmUgdm9pZCBNYXJrU3RhY2s6OmludGVybmFs
QXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUg
dmFsdWUgPSAqc2xvdDsKKyAgICBBU1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxs
KCkpCisgICAgICAgIHJldHVybjsKKworICAgIGlmICh2YWx1ZS5pc1N0cmluZygpKSB7CisgICAg
ICAgIEpTU3RyaW5nKiBzdHJpbmcgPSBqc0Nhc3Q8SlNTdHJpbmcqPih2YWx1ZS5hc0NlbGwoKSk7
CisgICAgICAgIGlmICghc3RyaW5nLT5pc0hhc2hDb25zdFNpbmdsZXRvbigpICYmIHN0cmluZy0+
bGVuZ3RoKCkgPiAxICYmICFzdHJpbmctPmlzUm9wZSgpKSB7CisgICAgICAgICAgICBVbmlxdWVT
dHJpbmdNYXA6OkFkZFJlc3VsdCBhZGRSZXN1bHQgPSBtX3VuaXF1ZVN0cmluZ3MuYWRkKHN0cmlu
Zy0+c3RyaW5nKCkuaW1wbCgpLCB2YWx1ZSk7CisgICAgICAgICAgICBpZiAoYWRkUmVzdWx0Lmlz
TmV3RW50cnkpCisgICAgICAgICAgICAgICAgc3RyaW5nLT5zZXRIYXNoQ29uc3RTaW5nbGV0b24o
KTsKKyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIEpTVmFsdWUgZXhpc3RpbmdK
U1ZhbHVlID0gYWRkUmVzdWx0Lml0ZXJhdG9yLT5zZWNvbmQ7CisgICAgICAgICAgICAgICAgaWYg
KHZhbHVlICE9IGV4aXN0aW5nSlNWYWx1ZSkKKyAgICAgICAgICAgICAgICAgICAganNDYXN0PEpT
U3RyaW5nKj4oZXhpc3RpbmdKU1ZhbHVlLmFzQ2VsbCgpKS0+Y2xlYXJIYXNoQ29uc3RTaW5nbGV0
b24oKTsKKyAgICAgICAgICAgICAgICAqc2xvdCA9IGV4aXN0aW5nSlNWYWx1ZTsKKyAgICAgICAg
ICAgICAgICByZXR1cm47CisgICAgICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBp
bnRlcm5hbEFwcGVuZCh2YWx1ZS5hc0NlbGwoKSk7Cit9CisKKwogdm9pZCBTbG90VmlzaXRvcjo6
Y29weUFuZEFwcGVuZCh2b2lkKiogcHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZhbHVlcywg
dW5zaWduZWQgbGVuZ3RoKQogewogICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7CkBAIC00OTksNyAr
NTM3LDcgQEAgdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcAogICAgICAg
ICAgICAgbmV3VmFsdWVzW2ldID0gdmFsdWU7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAg
ICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUp
OworICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQoJm5ld1ZhbHVlc1tpXSk7CiAgICAgICAgIH0K
IAogICAgICAgICBtZW1jcHkobmV3UHRyLCBvbGRQdHIsIGpzVmFsdWVzT2Zmc2V0KTsKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMTYxMTkpCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpA
QCAtMzQsMTIgKzM0LDE0IEBACiAjaW5jbHVkZSAiVW5jb25kaXRpb25hbEZpbmFsaXplci5oIgog
I2luY2x1ZGUgIlZUYWJsZVNwZWN0cnVtLmgiCiAjaW5jbHVkZSAiV2Vha1JlZmVyZW5jZUhhcnZl
c3Rlci5oIgorI2luY2x1ZGUgPHd0Zi9Gb3J3YXJkLmg+CiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KICNpbmNsdWRlIDx3dGYvSGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNp
bmNsdWRlIDx3dGYvTm9uY29weWFibGUuaD4KICNpbmNsdWRlIDx3dGYvT1NBbGxvY2F0b3IuaD4K
ICNpbmNsdWRlIDx3dGYvUGFnZUJsb2NrLmg+CisjaW5jbHVkZSA8d3RmL3RleHQvU3RyaW5nSGFz
aC5oPgogCiBuYW1lc3BhY2UgSlNDIHsKIApAQCAtMTcxLDEzICsxNzMsMTcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH5NYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhKCk7CiAgICAgICAgIAog
ICAgICAgICB2b2lkIHJlc2V0KCk7Ci0gICAgCisKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisg
ICAgICAgIHZvaWQgcmVzZXRDaGlsZHJlbigpOworI2VuZGlmCisKICAgICBwcml2YXRlOgogICAg
ICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwogICAgICAgICBmcmllbmQgY2xhc3MgU2xvdFZp
c2l0b3I7CiAKICNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCi0gICAgICAgIHZvaWQgbWFya2luZ1Ro
cmVhZE1haW4oKTsKKyAgICAgICAgdm9pZCBtYXJraW5nVGhyZWFkTWFpbihTbG90VmlzaXRvciop
OwogICAgICAgICBzdGF0aWMgdm9pZCBtYXJraW5nVGhyZWFkU3RhcnRGdW5jKHZvaWQqIGhlYXAp
OwogI2VuZGlmCiAKQEAgLTE4Nyw2ICsxOTMsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
TWFya1N0YWNrU2VnbWVudEFsbG9jYXRvciBtX3NlZ21lbnRBbGxvY2F0b3I7CiAgICAgICAgIAog
ICAgICAgICBWZWN0b3I8VGhyZWFkSWRlbnRpZmllcj4gbV9tYXJraW5nVGhyZWFkczsKKyAgICAg
ICAgVmVjdG9yPE1hcmtTdGFjayo+IG1fc2xhdmVNYXJrU3RhY2tzOwogICAgICAgICAKICAgICAg
ICAgTXV0ZXggbV9tYXJraW5nTG9jazsKICAgICAgICAgVGhyZWFkQ29uZGl0aW9uIG1fbWFya2lu
Z0NvbmRpdGlvbjsKQEAgLTIyMSwxMyArMjI4LDE0IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICB2b2lkIGFkZE9wYXF1ZVJvb3Qodm9pZCopOwogICAgICAgICBib29sIGNvbnRhaW5zT3BhcXVl
Um9vdCh2b2lkKik7CiAgICAgICAgIGludCBvcGFxdWVSb290Q291bnQoKTsKLSAgICAgICAgCisK
KyAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJu
IG1fc2hhcmVkOyB9CiAgICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNF
bXB0eSgpOyB9CiAKICAgICAgICAgdm9pZCByZXNldCgpOwogCiAgICAgICAgIHNpemVfdCB2aXNp
dENvdW50KCkgY29uc3QgeyByZXR1cm4gbV92aXNpdENvdW50OyB9Ci0KKyAgICAgICAgCiAjaWYg
RU5BQkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKICAgICAgICAgVlRhYmxlU3BlY3RydW0gbV92
aXNpdGVkVHlwZUNvdW50czsKICNlbmRpZgpAQCAtMjUxLDYgKzI1OSw3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNDZWxsKik7CiAgICAgICAgIHZv
aWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7CisgICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQo
SlNWYWx1ZSopOwogICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUgdm9pZCBtZXJn
ZU9wYXF1ZVJvb3RzKCk7CiAgICAgICAgIApAQCAtMjcwLDYgKzI3OSw4IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICAKICAgICAgICAgTWFya1N0YWNrQXJyYXkgbV9zdGFjazsKICAgICAgICAg
SGFzaFNldDx2b2lkKj4gbV9vcGFxdWVSb290czsgLy8gSGFuZGxlLW93bmluZyBkYXRhIHN0cnVj
dHVyZXMgbm90IHZpc2libGUgdG8gdGhlIGdhcmJhZ2UgY29sbGVjdG9yLgorICAgICAgICB0eXBl
ZGVmIEhhc2hNYXA8U3RyaW5nSW1wbCosIEpTVmFsdWU+IFVuaXF1ZVN0cmluZ01hcDsKKyAgICAg
ICAgVW5pcXVlU3RyaW5nTWFwIG1fdW5pcXVlU3RyaW5nczsKICAgICAgICAgCiAjaWYgIUFTU0VS
VF9ESVNBQkxFRAogICAgIHB1YmxpYzoKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTE2MTE5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICAgICAg
ZnJpZW5kIGNsYXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBK
U1JvcGVTdHJpbmc7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7CiAgICAgICAgIGZy
aWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwogCiAgICAgICAgIHR5cGVkZWYgSlNDZWxsIEJhc2U7
CkBAIC05MSw2ICs5Miw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsK
ICAgICAgICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpOworICAgICAg
ICAgICAgbV9pc0hhc2hDb25zdFNpbmdsZXRvbiA9IGZhbHNlOwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCBjb3N0KQpAQCAtOTksNiArMTAxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAg
IG1fbGVuZ3RoID0gbGVuZ3RoOwogICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmltcGwo
KS0+aXM4Qml0KCk7CisgICAgICAgICAgICBtX2lzSGFzaENvbnN0U2luZ2xldG9uID0gZmFsc2U7
CiAgICAgICAgICAgICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29z
dCk7CiAgICAgICAgIH0KIApAQCAtMTA4LDYgKzExMSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBt
X2xlbmd0aCA9IDA7CiAgICAgICAgICAgICBtX2lzOEJpdCA9IHRydWU7CisgICAgICAgICAgICBt
X2lzSGFzaENvbnN0U2luZ2xldG9uID0gZmFsc2U7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAg
cHVibGljOgpAQCAtMTYxLDkgKzE2NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0
ZWQ6CiAgICAgICAgIGJvb2wgaXNSb3BlKCkgY29uc3QgeyByZXR1cm4gbV92YWx1ZS5pc051bGwo
KTsgfQogICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1faXM4Qml0OyB9Cisg
ICAgICAgIGJvb2wgaXNIYXNoQ29uc3RTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBtX2lzSGFz
aENvbnN0U2luZ2xldG9uOyB9CisgICAgICAgIHZvaWQgY2xlYXJIYXNoQ29uc3RTaW5nbGV0b24o
KSB7IG1faXNIYXNoQ29uc3RTaW5nbGV0b24gPSBmYWxzZTsgfQorICAgICAgICB2b2lkIHNldEhh
c2hDb25zdFNpbmdsZXRvbigpIHsgbV9pc0hhc2hDb25zdFNpbmdsZXRvbiA9IHRydWU7IH0KIAog
ICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIgYnkgYSBVU3RyaW5nIG9y
IGEgcm9wZSBvZiBmaWJlcnMuCiAgICAgICAgIGJvb2wgbV9pczhCaXQgOiAxOworICAgICAgICBi
b29sIG1faXNIYXNoQ29uc3RTaW5nbGV0b24gOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0
aDsKICAgICAgICAgbXV0YWJsZSBVU3RyaW5nIG1fdmFsdWU7CiAKQEAgLTIzMyw2ICsyNDEsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3Ro
KCk7CiAgICAgICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgp
KTsKKyAgICAgICAgICAgIG1faXNIYXNoQ29uc3RTaW5nbGV0b24gPSBmYWxzZTsKICAgICAgICAg
ICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7CiAgICAgICAgICAgICBt
X2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAgICAgICB9CkBAIC0yNDIs
NiArMjUxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVh
dGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsg
czItPmxlbmd0aCgpICsgczMtPmxlbmd0aCgpOwogICAgICAgICAgICAgbV9pczhCaXQgPSAoczEt
PmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKKyAgICAgICAgICAg
IG1faXNIYXNoQ29uc3RTaW5nbGV0b24gPSBmYWxzZTsKICAgICAgICAgICAgIG1fZmliZXJzWzBd
LnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7CiAgICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQo
Z2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2Jh
bERhdGEsIHRoaXMsIHMzKTsK
</data>
<flag name="review"
          id="147138"
          type_id="1"
          status="+"
          setter="fpizlo"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150197</attachid>
            <date>2012-06-29 09:40:38 -0700</date>
            <delta_ts>2012-07-02 16:00:36 -0700</delta_ts>
            <desc>Patch with fix for string hash ASSERT failures</desc>
            <filename>86024-4.patch</filename>
            <type>text/plain</type>
            <size>10083</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNTAzKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDQ5IEBA
CisyMDEyLTA2LTI4ICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPiAKKworICAg
ICAgICBFbmg6IEhhc2ggQ29uc3QgSlNTdHJpbmcgaW4gQmFja2luZyBTdG9yZXMgdG8gU2F2ZSBN
ZW1vcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTg2
MDI0CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRHVy
aW5nIGdhcmJhZ2UgY29sbGVjdGlvbiwgZWFjaCBtYXJraW5nIHRocmVhZCBrZWVwcyBhIEhhc2hN
YXAgb2YKKyAgICAgICAgc3RyaW5ncy4gIFdoaWxlIHZpc2l0aW5nIHZpYSBNYXJrU3RhY2s6OmNv
cHlBbmRBcHBlbmQoKSwgd2UgY2hlY2sgdG8KKyAgICAgICAgc2VlIGlmIHRoZSBzdHJpbmcgd2Ug
YXJlIHZpc2l0aW5nIGlzIGFscmVhZHkgaW4gdGhlIEhhc2hNYXAuICBJZiBub3QKKyAgICAgICAg
d2UgYWRkIGl0LiBJZiBzbywgd2UgY2hhbmdlIHRoZSByZWZlcmVuY2UgdG8gdGhlIGN1cnJlbnQg
c3RyaW5nIHdlJ3JlCisgICAgICAgIHZpc2l0aW5nIHRvIHRoZSBwcmlvciBzdHJpbmcuCisKKyAg
ICAgICAgVG8gc29tZXdoYXQgcmVkdWNlIHRoZSBwZXJmb3JtYW5jZSBpbXBhY3Qgb2YgdGhpcyBj
aGFuZ2UsIGlmIGEgc3RyaW5nCisgICAgICAgIGlzIHVuaXF1ZSBhdCB0aGUgZW5kIG9mIGEgbWFy
a2luZyBpdCB3aWxsIG5vdCBiZSBjaGVja2VkIGR1cmluZyBmdXJ0aGVyCisgICAgICAgIEdDIHBo
YXNlcy4gSW4gc29tZSBjYXNlcyB0aGlzIHdvbid0IGNhdGNoIGFsbCBkdXBsaWNhdGVzLCBidXQg
d2UgYXJlCisgICAgICAgIHRyeWluZyB0byBjYXRjaCB0aGUgZ3Jvd3RoIG9mIGR1cGxpY2F0ZSBz
dHJpbmdzLgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
ICogaGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnJlc2V0KTog
QWRkZWQgY2FsbCB0byBjbGVhciBtX3VuaXF1ZVN0cmluZ3MuCisgICAgICAgIChKU0M6OkpTU3Ry
aW5nOjp0cnlIYXNoQ29uc3RMb2NrKTogTmV3IG1ldGhvZCB0byBsb2NrIEpTU3RyaW5nIGZvcgor
ICAgICAgICBoYXNoIGNvbnN0aW5nLgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OmludGVybmFs
QXBwZW5kKTogTmV3IG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBoYXNoIGNvbnN0aW5nLgorICAg
ICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCk6IENoYW5nZWQgdG8gY2FsbCB0
aGUgbmV3IGhhc2gKKyAgICAgICAgY29uc3RpbmcgaW50ZXJuYWxBcHBlZCgpLgorICAgICAgICAq
IGhlYXAvTWFya1N0YWNrLmg6CisgICAgICAgIChNYXJrU3RhY2spOgorICAgICAgICAqIHJ1bnRp
bWUvSlNTdHJpbmcuaDoKKyAgICAgICAgKEpTU3RyaW5nKTogQ2hhbmdlZCBmcm9tIHVzaW5nIGJv
b2wgZmxhZ3MgdG8gdXNpbmcgYW4gdW5zaWduZWQKKyAgICAgICAgbV9mbGFncyBmaWVsZC4gIFRo
aXMgd29ya3MgYmV0dGVyIHdpdGggdGhlIHdlYWtDb21wYXJlQW5kU3dhcCBpbgorICAgICAgICBK
U1N0cmluZzo6dHJ5SGFzaENvbnN0TG9jaygpLiBDaGFuZ2VkIHRoZSA4Yml0bmVzcyBzZXR0aW5n
IGFuZAorICAgICAgICBjaGVja2luZyB0byB1c2UgbmV3IGFjY2Vzc29ycy4KKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OkpTU3RyaW5nKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmZpbmlzaENy
ZWF0aW9uKToKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzOEJpdCk6IFVwZGF0ZWQgZm9yIG5l
dyBtX2ZsYWdzLgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2V0SXM4Qml0KTogTmV3IHNldHRl
ci4KKyAgICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAg
IChKU0M6OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKyAgICAgICAgTmV3IGhhc2ggY29uc3QgZmxh
Z3MgYWNjZXNzb3JzOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aXNIYXNoQ29uc3RTaW5nbGV0
b24pOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Y2xlYXJIYXNoQ29uc3RTaW5nbGV0b24pOgor
ICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2V0SGFzaENvbnN0U2luZ2xldG9uKToKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6OnJlbGVhc2VIYXNoQ29uc3RMb2NrKToKKwogMjAxMi0wNi0yOCAgTWFy
ayBMYW0gIDxtYXJrLmxhbUBhcHBsZS5jb20+CiAKICAgICAgICAgQWRkaW5nIGEgY29tbWVudGlu
ZyB1dGlsaXR5IHRvIHJlY29yZCBCeXRlY29kZUdlbmVyYXRvciBjb21tZW50cwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCShyZXZpc2lvbiAxMjExNjApCisr
KyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiU3RydWN0dXJlLmgiCiAjaW5jbHVkZSAiVVN0
cmluZy5oIgogI2luY2x1ZGUgIldyaXRlQmFycmllci5oIgorI2luY2x1ZGUgPHd0Zi9BdG9taWNz
Lmg+CiAjaW5jbHVkZSA8d3RmL0RhdGFMb2cuaD4KICNpbmNsdWRlIDx3dGYvTWFpblRocmVhZC5o
PgogCkBAIC0zMDksNiArMzEwLDcgQEAgdm9pZCBNYXJrU3RhY2s6OnJlc2V0KCkKICNlbHNlCiAg
ICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogI2VuZGlmCisgICAgbV91bmlxdWVTdHJpbmdzLmNs
ZWFyKCk7CiB9CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNv
bnNlcnZhdGl2ZVJvb3RzKQpAQCAtNTIxLDYgKzUyMyw2MSBAQCB2b2lkKiBTbG90VmlzaXRvcjo6
YWxsb2NhdGVOZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZy
b21CbG9jayhtX2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNT
dHJpbmc6OnRyeUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAg
ICB1bnNpZ25lZCBjdXJyZW50RmxhZ3M7CisgICAgdW5zaWduZWQgbmV3RmxhZ3M7CisKKyAgICBk
byB7CisgICAgICAgIGN1cnJlbnRGbGFncyA9IG1fZmxhZ3M7CisKKyAgICAgICAgaWYgKChpc0hh
c2hDb25zdFNpbmdsZXRvbigpKSB8fCAoY3VycmVudEZsYWdzICYgc19oYXNoQ29uc3RMb2NrKSkK
KyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICBuZXdGbGFncyA9IGN1cnJlbnRG
bGFncyB8IHNfaGFzaENvbnN0TG9jazsKKyAgICB9IHdoaWxlICghV1RGOjp3ZWFrQ29tcGFyZUFu
ZFN3YXAoJm1fZmxhZ3MsIGN1cnJlbnRGbGFncywgbmV3RmxhZ3MpKTsKKworICAgIHJldHVybiB0
cnVlOworI2Vsc2UKKyAgICBpZiAoaXNIYXNoQ29uc3RTaW5nbGV0b24oKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbV9mbGFncyB8PSBzX2hhc2hDb25zdExvY2s7CisKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgTWFya1N0YWNrOjppbnRl
cm5hbEFwcGVuZChKU1ZhbHVlKiBzbG90KQoreworICAgIEFTU0VSVChzbG90KTsKKyAgICBKU1Zh
bHVlIHZhbHVlID0gKnNsb3Q7CisgICAgQVNTRVJUKHZhbHVlKTsKKyAgICBpZiAoIXZhbHVlLmlz
Q2VsbCgpKQorICAgICAgICByZXR1cm47CisKKyAgICBpZiAodmFsdWUuaXNTdHJpbmcoKSkgewor
ICAgICAgICBKU1N0cmluZyogc3RyaW5nID0ganNDYXN0PEpTU3RyaW5nKj4odmFsdWUuYXNDZWxs
KCkpOworICAgICAgICBpZiAoKHN0cmluZy0+bGVuZ3RoKCkgPiAxKSAmJiAhc3RyaW5nLT5pc1Jv
cGUoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgeworICAgICAgICAgICAgVW5pcXVl
U3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV91bmlxdWVTdHJpbmdzLmFkZChzdHJp
bmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGFkZFJlc3VsdC5p
c05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0U2luZ2xldG9u
KCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVlIGV4aXN0aW5n
SlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAgICAgICAgIGlm
ICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAgICAgICAgICAgICAgICAgIGpzQ2FzdDxK
U1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENvbnN0U2luZ2xl
dG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7CisgICAgICAg
ICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAgICAgICAgICAg
IHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZy0+cmVsZWFzZUhhc2hD
b25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsQXBwZW5kKHZhbHVl
LmFzQ2VsbCgpKTsKK30KKwogdm9pZCBTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiog
cHRyLCBzaXplX3QgYnl0ZXMsIEpTVmFsdWUqIHZhbHVlcywgdW5zaWduZWQgbGVuZ3RoKQogewog
ICAgIHZvaWQqIG9sZFB0ciA9ICpwdHI7CkBAIC01MzQsNyArNTkxLDcgQEAgdm9pZCBTbG90Vmlz
aXRvcjo6Y29weUFuZEFwcGVuZCh2b2lkKiogcAogICAgICAgICAgICAgbmV3VmFsdWVzW2ldID0g
dmFsdWU7CiAgICAgICAgICAgICBpZiAoIXZhbHVlKQogICAgICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICAgICAgaW50ZXJuYWxBcHBlbmQodmFsdWUpOworICAgICAgICAgICAgaW50ZXJu
YWxBcHBlbmQoJm5ld1ZhbHVlc1tpXSk7CiAgICAgICAgIH0KIAogICAgICAgICBtZW1jcHkobmV3
UHRyLCBvbGRQdHIsIGpzVmFsdWVzT2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL01hcmtTdGFjay5oCShyZXZpc2lvbiAxMjExNjApCisrKyBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvaGVhcC9NYXJrU3RhY2suaAkod29ya2luZyBjb3B5KQpAQCAtMjkyLDYgKzI5Miw3IEBAIG5h
bWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNDZWxsKik7CiAg
ICAgICAgIHZvaWQgaW50ZXJuYWxBcHBlbmQoSlNWYWx1ZSk7CisgICAgICAgIHZvaWQgaW50ZXJu
YWxBcHBlbmQoSlNWYWx1ZSopOwogICAgICAgICAKICAgICAgICAgSlNfRVhQT1JUX1BSSVZBVEUg
dm9pZCBtZXJnZU9wYXF1ZVJvb3RzKCk7CiAgICAgICAgIApAQCAtMzI1LDYgKzMyNiw5IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICAKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0
YSYgbV9zaGFyZWQ7CiAKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZ0ltcGwqLCBKU1Zh
bHVlPiBVbmlxdWVTdHJpbmdNYXA7CisgICAgICAgIFVuaXF1ZVN0cmluZ01hcCBtX3VuaXF1ZVN0
cmluZ3M7CisKICNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lORykKICAgICAgICAgdW5zaWdu
ZWQgbV9sb2dDaGlsZENvdW50OwogI2VuZGlmCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDEyMTE2MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAg
ICAgIGZyaWVuZCBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUOwogICAgICAgICBmcmllbmQgY2xh
c3MgSlNSb3BlU3RyaW5nOworICAgICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwogICAgICAg
ICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtI
ZWxwZXJzOwogCkBAIC03NywxMiArNzgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0
ZToKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRy
PFN0cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xv
YmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICAsIG1fZmxhZ3MoMCkK
ICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgOiBK
U0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAg
ICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTkxLDcgKzk0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxs
KCkpOwogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAg
ICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gbV92YWx1
ZS5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgp
LT5pczhCaXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpT
R2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCkBAIC05
OSw3ICsxMDIsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1
ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRh
KTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhCaXQg
PSBtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAgICBzZXRJczhCaXQobV92YWx1
ZS5pbXBsKCktPmlzOEJpdCgpKTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9y
dEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKICAgICAgICAgfQogCkBAIC0xMDgsNyArMTExLDcgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0
aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSAwOwotICAgICAgICAgICAg
bV9pczhCaXQgPSB0cnVlOworICAgICAgICAgICAgc2V0SXM4Qml0KHRydWUpOwogICAgICAgICB9
CiAgICAgICAgIAogICAgIHB1YmxpYzoKQEAgLTE2MSwxMCArMTY0LDI3IEBAIG5hbWVzcGFjZSBK
U0MgewogCiAgICAgcHJvdGVjdGVkOgogICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0
dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KLSAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJl
dHVybiBtX2lzOEJpdDsgfQorICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1f
ZmxhZ3MgJiBzX2lzOEJpdDsgfQorICAgICAgICB2b2lkIHNldElzOEJpdChib29sIGZsYWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmbGFnKQorICAgICAgICAgICAgICAgIG1fZmxhZ3Mg
fD0gc19pczhCaXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mbGFncyAm
PSB+c19pczhCaXQ7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBpc0hhc2hDb25zdFNpbmdsZXRv
bigpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBzX2lzSGFzaENvbnN0U2luZ2xldG9uOyB9Cisg
ICAgICAgIHZvaWQgY2xlYXJIYXNoQ29uc3RTaW5nbGV0b24oKSB7IG1fZmxhZ3MgJj0gfnNfaXNI
YXNoQ29uc3RTaW5nbGV0b247IH0KKyAgICAgICAgdm9pZCBzZXRIYXNoQ29uc3RTaW5nbGV0b24o
KSB7IG1fZmxhZ3MgfD0gc19pc0hhc2hDb25zdFNpbmdsZXRvbjsgfQorICAgICAgICBib29sIHRy
eUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgdm9pZCByZWxlYXNlSGFzaENvbnN0TG9jaygpIHsg
bV9mbGFncyAmPSB+c19oYXNoQ29uc3RMb2NrOyB9CisKKyAgICAgICAgdW5zaWduZWQgbV9mbGFn
czsKKyAgICAgICAgCisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2hhc2hDb25zdExv
Y2sgPSAxdSA8PCAyOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19pc0hhc2hDb25z
dFNpbmdsZXRvbiA9IDF1IDw8IDE7CisgICAgICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzX2lz
OEJpdCA9IDF1OwogCiAgICAgICAgIC8vIEEgc3RyaW5nIGlzIHJlcHJlc2VudGVkIGVpdGhlciBi
eSBhIFVTdHJpbmcgb3IgYSByb3BlIG9mIGZpYmVycy4KLSAgICAgICAgYm9vbCBtX2lzOEJpdCA6
IDE7CiAgICAgICAgIHVuc2lnbmVkIG1fbGVuZ3RoOwogICAgICAgICBtdXRhYmxlIFVTdHJpbmcg
bV92YWx1ZTsKIApAQCAtMjMxLDcgKzI1MSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7
CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAg
ICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgpICsgczItPmxlbmd0aCgpOwotICAgICAgICAgICAg
bV9pczhCaXQgPSAoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7CisgICAgICAgICAgICBz
ZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSk7CiAgICAgICAgICAgICBtX2Zp
YmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEpOwogICAgICAgICAgICAgbV9maWJlcnNb
MV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKICAgICAgICAgfQpAQCAtMjQwLDcgKzI2MCw3
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gczEtPmxlbmd0aCgp
ICsgczItPmxlbmd0aCgpICsgczMtPmxlbmd0aCgpOwotICAgICAgICAgICAgbV9pczhCaXQgPSAo
czEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJpdCgpKTsKKyAgICAgICAg
ICAgIHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0
KCkpOwogICAgICAgICAgICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsK
ICAgICAgICAgICAgIG1fZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7CiAgICAg
ICAgICAgICBtX2ZpYmVyc1syXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczMpOwpAQCAtMjU1LDcg
KzI3NSw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBtX2ZpYmVy
c1tpbmRleF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIGpzU3RyaW5nKTsKICAgICAgICAgICAgIG1f
bGVuZ3RoICs9IGpzU3RyaW5nLT5tX2xlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gbV9p
czhCaXQgJiYganNTdHJpbmctPm1faXM4Qml0OworICAgICAgICAgICAgc2V0SXM4Qml0KGlzOEJp
dCgpICYmIGpzU3RyaW5nLT5pczhCaXQoKSk7CiAgICAgICAgIH0KIAogICAgICAgICBzdGF0aWMg
SlNSb3BlU3RyaW5nKiBjcmVhdGVOdWxsKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkK
</data>
<flag name="review"
          id="158401"
          type_id="1"
          status="-"
          setter="ggaren"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150492</attachid>
            <date>2012-07-02 16:00:36 -0700</date>
            <delta_ts>2012-07-02 17:15:38 -0700</delta_ts>
            <desc>Updated patch with changes suggested by reviewer</desc>
            <filename>86024-5.patch</filename>
            <type>text/plain</type>
            <size>13681</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzA4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYyIEBA
CisyMDEyLTA3LTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuIElmIHNvLCB3ZSBjaGFuZ2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBz
dHJpbmcgd2UncmUKKyAgICAgICAgdmlzaXRpbmcgdG8gdGhlIHByaW9yIHN0cmluZy4KKworICAg
ICAgICBUbyByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgdHdv
IHRocm90dGxlcyBoYXZlCisgICAgICAgIGJlbiBhZGRlZC4gIDEpIFdlIG9ubHkgdHJ5IGhhc2gg
Y29uc3RpbmcgaWYgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgbmV3IAorICAgICAgICBzdHJpbmdz
IGhhdmUgYmVlbiBjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGZ1bGwgR0MuICBDdXJyZW50bHkgdGhp
cyBpcworICAgICAgICBzZXQgYXQgMTAwIHN0cmluZ3MuICAyKSBJZiBhIHN0cmluZyBpcyB1bmlx
dWUgYXQgdGhlIGVuZCBvZiBhIG1hcmtpbmcKKyAgICAgICAgaXQgd2lsbCBub3QgYmUgY2hlY2tl
ZCBkdXJpbmcgZnVydGhlciBHQyBwaGFzZXMuIEluIHNvbWUgY2FzZXMgdGhpcworICAgICAgICB3
b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0IHdlIGFyZSB0cnlpbmcgdG8gY2F0Y2ggdGhl
IGdyb3d0aCBvZgorICAgICAgICBkdXBsaWNhdGUgc3RyaW5ncy4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnNldHVwKTogQ2hlY2sgdG8gc2VlIGlmIGVub3VnaCBz
dHJpbmdzIGhhdmUgYmVlbiBjcmVhdGVkCisgICAgICAgIHRvIGhhc2ggY29uc3QuCisgICAgICAg
IChKU0M6Ok1hcmtTdGFjazo6cmVzZXQpOiBBZGRlZCBjYWxsIHRvIGNsZWFyIG1fdW5pcXVlU3Ry
aW5ncy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2spOiBOZXcgbWV0
aG9kIHRvIGxvY2sgSlNTdHJpbmcgZm9yCisgICAgICAgIGhhc2ggY29uc3RpbmcuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nOjpyZWxlYXNlSGFzaENvbnN0TG9jayk6IE5ldyB1bmxvY2sgbWV0aG9k
LgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENvbnN0KTogU2V0IG9mIGNo
ZWNrcyB0byBzZWUgaWYgd2Ugc2hvdWxkCisgICAgICAgIHRyeSB0byBoYXNoIGNvbnN0IHRoZSBz
dHJpbmcuCisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6aW50ZXJuYWxBcHBlbmQpOiBOZXcgbWV0
aG9kIHRoYXQgcGVyZm9ybXMgdGhlIGhhc2ggY29uc3RpbmcuCisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb3B5QW5kQXBwZW5kKTogQ2hhbmdlZCB0byBjYWxsIHRoZSBuZXcgaGFzaAorICAg
ICAgICBjb25zdGluZyBpbnRlcm5hbEFwcGVuZCgpLgorICAgICAgICAqIGhlYXAvTWFya1N0YWNr
Lmg6CisgICAgICAgIChNYXJrU3RhY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNTdHJpbmcuY3Bw
OgorICAgICAgICAoSlNDKToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAg
IChKU1N0cmluZyk6IENoYW5nZWQgZnJvbSB1c2luZyBib29sIGZsYWdzIHRvIHVzaW5nIGFuIHVu
c2lnbmVkCisgICAgICAgIG1fZmxhZ3MgZmllbGQuICBUaGlzIHdvcmtzIGJldHRlciB3aXRoIHRo
ZSB3ZWFrQ29tcGFyZUFuZFN3YXAgaW4KKyAgICAgICAgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExv
Y2soKS4gQ2hhbmdlZCB0aGUgOGJpdG5lc3Mgc2V0dGluZyBhbmQKKyAgICAgICAgY2hlY2tpbmcg
dG8gdXNlIG5ldyBhY2Nlc3NvcnMuCisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpKU1N0cmluZyk6
CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpoYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KToKKyAgICAgICAgKEpT
Qzo6SlNTdHJpbmc6OnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEdDKToKKyAgICAgICAgKEpTQzo6
SlNTdHJpbmc6OmlzOEJpdCk6IFVwZGF0ZWQgZm9yIG5ldyBtX2ZsYWdzLgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6c2V0SXM4Qml0KTogTmV3IHNldHRlci4KKyAgICAgICAgTmV3IGhhc2ggY29u
c3QgZmxhZ3MgYWNjZXNzb3JzOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6aXNIYXNoQ29uc3RT
aW5nbGV0b24pOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6Y2xlYXJIYXNoQ29uc3RTaW5nbGV0
b24pOgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2V0SGFzaENvbnN0U2luZ2xldG9uKToKKyAg
ICAgICAgKEpTQzo6SlNSb3BlU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6
OkpTUm9wZVN0cmluZzo6YXBwZW5kKToKKwogMjAxMi0wNy0wMiAgR2F2aW4gQmFycmFjbG91Z2gg
IDxiYXJyYWNsb3VnaEBhcHBsZS5jb20+CiAKICAgICAgICAgQXJyYXkucHJvdG90eXBlLnBvcCBz
aG91bGQgdGhyb3cgaWYgcHJvcGVydHkgaXMgbm90IGNvbmZpZ3VyYWJsZQpAQCAtNiw4ICs2NSw3
IEBACiAgICAgICAgIFJ1YmJlciBTdGFtcGVkIGJ5IE9saXZlciBIdW50LgogCiAgICAgICAgIE5v
IHJlYWwgYnVnIGhlcmUgYW55IG1vcmUsIGJ1dCB0aGUgZXJyb3Igd2UgdGhyb3cgc29tZXRpbWVz
IGhhcyBhIG1pc2xlYWRpbmcgbWVzc2FnZS4KLSAKLSAgICAgICAgKiBydW50aW1lL0pTQXJyYXku
Y3BwOgorICogcnVudGltZS9KU0FycmF5LmNwcDoKICAgICAgICAgKEpTQzo6SlNBcnJheTo6cG9w
KToKIAogMjAxMi0wNi0yOSAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00NTQsNiAr
NDU0LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBmdWxsR0MpCiAKICAgICBtX3N0b3Jh
Z2VTcGFjZS5zdGFydGVkQ29weWluZygpOwogICAgIFNsb3RWaXNpdG9yJiB2aXNpdG9yID0gbV9z
bG90VmlzaXRvcjsKKyAgICB2aXNpdG9yLnNldHVwKCk7CiAgICAgSGVhcFJvb3RWaXNpdG9yIGhl
YXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAogICAgIHsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9oZWFwL01hcmtTdGFjay5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2hlYXAvTWFya1N0YWNrLmNwcAkocmV2aXNpb24gMTIxNjg5KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzgsNiArMzgs
NyBAQAogI2luY2x1ZGUgIlN0cnVjdHVyZS5oIgogI2luY2x1ZGUgIlVTdHJpbmcuaCIKICNpbmNs
dWRlICJXcml0ZUJhcnJpZXIuaCIKKyNpbmNsdWRlIDx3dGYvQXRvbWljcy5oPgogI2luY2x1ZGUg
PHd0Zi9EYXRhTG9nLmg+CiAjaW5jbHVkZSA8d3RmL01haW5UaHJlYWQuaD4KIApAQCAtMzAwLDYg
KzMwMSwxMSBAQCB2b2lkIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICBt
X3dlYWtSZWZlcmVuY2VIYXJ2ZXN0ZXJzLnJlbW92ZUFsbCgpOwogfQogCit2b2lkIE1hcmtTdGFj
azo6c2V0dXAoKQoreworICAgIG1fc2hvdWxkSGFzaENvbnN0ID0gSlNTdHJpbmc6OmhhdmVFbm91
Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3QoKTsKK30KKwogdm9pZCBNYXJrU3RhY2s6OnJlc2V0KCkK
IHsKICAgICBtX3Zpc2l0Q291bnQgPSAwOwpAQCAtMzA5LDYgKzMxNSw5IEBAIHZvaWQgTWFya1N0
YWNrOjpyZXNldCgpCiAjZWxzZQogICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKICNlbmRpZgor
ICAgIG1fdW5pcXVlU3RyaW5ncy5jbGVhcigpOworICAgIEpTU3RyaW5nOjpyZXNldE5ld1N0cmlu
Z3NTaW5jZUxhc3RHQygpOworICAgIG1fc2hvdWxkSGFzaENvbnN0ID0gZmFsc2U7CiB9CiAKIHZv
aWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2ZVJvb3Rz
KQpAQCAtNTIxLDYgKzUzMCw3NSBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVOZXdTcGFj
ZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayhtX2NvcHlC
bG9jaywgYnl0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRyeUhhc2hD
b25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1bnNpZ25lZCBjdXJy
ZW50RmxhZ3MgPSBtX2ZsYWdzOworICAgIHVuc2lnbmVkIG5ld0ZsYWdzID0gY3VycmVudEZsYWdz
IHwgc19oYXNoQ29uc3RMb2NrOworCisgICAgaWYgKCFXVEY6OndlYWtDb21wYXJlQW5kU3dhcCgm
bV9mbGFncywgY3VycmVudEZsYWdzLCBuZXdGbGFncykpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KworICAgIFdURjo6bWVtb3J5QmFycmllckFmdGVyTG9jaygpOworICAgIHJldHVybiB0cnVlOwor
I2Vsc2UKKyAgICBpZiAoaXNIYXNoQ29uc3RTaW5nbGV0b24oKSkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgbV9mbGFncyB8PSBzX2hhc2hDb25zdExvY2s7CisKKyAgICByZXR1cm4gdHJ1
ZTsKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSlNTdHJpbmc6OnJlbGVhc2VIYXNo
Q29uc3RMb2NrKCkKK3sKKyNpZiBFTkFCTEUoUEFSQUxMRUxfR0MpCisgICAgV1RGOjptZW1vcnlC
YXJyaWVyQmVmb3JlVW5sb2NrKCk7CisjZW5kaWYKKyAgICBtX2ZsYWdzICY9IH5zX2hhc2hDb25z
dExvY2s7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENv
bnN0KCkKK3sKKyAgICByZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1JvcGUoKSAmJiAhaXNI
YXNoQ29uc3RTaW5nbGV0b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgLy8gVGhpcyBpbnRlcm5hbEFw
cGVuZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8gb2JqZWN0IGFuZCBhcnJheSBiYWNr
aW5nIHN0b3Jlcy4KKyAgICAvLyBhcyBpdCBjYW4gY2hhbmdlIHRoZSBKU1ZhbHVlIHBvaW50ZWQg
dG8gYmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFsIEpTVmFsdWUKKyAgICAvLyBpcyBh
IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGNvbnRlbnRzIGFzIGFub3RoZXIgc3RyaW5n
LgorCisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsKKyAgICBB
U1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworCisgICAgaWYgKG1fc2hvdWxk
SGFzaENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmlu
ZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOworICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRU
cnlIYXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgeworICAgICAgICAg
ICAgVW5pcXVlU3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV91bmlxdWVTdHJpbmdz
LmFkZChzdHJpbmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0
U2luZ2xldG9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENv
bnN0U2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7
CisgICAgICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZy0+cmVs
ZWFzZUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsQXBw
ZW5kKGNlbGwpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBw
dHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgdm9pZCogb2xkUHRyID0gKnB0cjsKQEAgLTUzNCw3ICs2MTIsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwCiAgICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2
YWx1ZTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBpbnRlcm5h
bEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKICAgICAgICAgfQogCiAgICAgICAgIG1lbWNweShuZXdQ
dHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX3N0YWNrLmlzRW1wdHkoKTsgfQogCisgICAgICAgIHZvaWQgc2V0dXAoKTsKICAgICAgICAg
dm9pZCByZXNldCgpOwogCiAgICAgICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXNpdENvdW50OyB9CkBAIC0yOTIsNiArMjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU0NlbGwqKTsKICAgICAgICAgdm9pZCBpbnRl
cm5hbEFwcGVuZChKU1ZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1ZhbHVl
Kik7CiAgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKICAgICAgICAgCkBAIC0zMjUsNiArMzI3LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CiAK
KyAgICAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zdDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZ0ltcGwqLCBKU1ZhbHVlPiBVbmlxdWVTdHJpbmdNYXA7CisgICAgICAgIFVuaXF1ZVN0
cmluZ01hcCBtX3VuaXF1ZVN0cmluZ3M7CisKICNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lO
RykKICAgICAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuY3BwCShyZXZpc2lvbiAxMjE2ODkp
CisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHdvcmtpbmcg
Y29weSkKQEAgLTM1LDYgKzM1LDggQEAgbmFtZXNwYWNlIEpTQyB7CiBzdGF0aWMgY29uc3QgdW5z
aWduZWQgc3Vic3RyaW5nRnJvbVJvcGVDdXRvZmYgPSA0OwogCiBjb25zdCBDbGFzc0luZm8gSlNT
dHJpbmc6OnNfaW5mbyA9IHsgInN0cmluZyIsIDAsIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUo
SlNTdHJpbmcpIH07Cit1bnNpZ25lZCBKU1N0cmluZzo6c19uZXdTdHJpbmdzU2luY2VMYXN0R0Mg
PSAwOworCiAKIHZvaWQgSlNSb3BlU3RyaW5nOjpSb3BlQnVpbGRlcjo6ZXhwYW5kKCkKIHsKSW5k
ZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkocmV2aXNpb24gMTIx
Njg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJpbmcuaAkod29ya2lu
ZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgZnJpZW5k
IGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICAgICAgZnJpZW5kIGNsYXNzIFNwZWNpYWxpemVkVGh1
bmtKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU1JvcGVTdHJpbmc7CisgICAgICAgIGZyaWVu
ZCBjbGFzcyBNYXJrU3RhY2s7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTbG90VmlzaXRvcjsKICAg
ICAgICAgZnJpZW5kIHN0cnVjdCBUaHVua0hlbHBlcnM7CiAKQEAgLTc3LDEyICs3OCwxNCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERh
dGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4gdmFsdWUpCiAgICAgICAgICAg
ICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkK
KyAgICAgICAgICAgICwgbV9mbGFncygwKQogICAgICAgICAgICAgLCBtX3ZhbHVlKHZhbHVlKQog
ICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBKU1N0cmluZyhKU0dsb2JhbERhdGEmIGds
b2JhbERhdGEpCiAgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0
cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgICwgbV9mbGFncygwKQogICAgICAgICB7
CiAgICAgICAgIH0KIApAQCAtOTEsNyArOTQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hD
cmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAg
ICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAg
ICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKKyAgICAgICAgICAgIHNfbmV3
U3RyaW5nc1NpbmNlTGFzdEdDKys7CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENy
ZWF0aW9uKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNv
c3QpCkBAIC05OSw4ICsxMDMsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VS
VCghbV92YWx1ZS5pc051bGwoKSk7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihn
bG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAg
bV9pczhCaXQgPSBtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAgICBzZXRJczhC
aXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhp
cyktPnJlcG9ydEV4dHJhTWVtb3J5Q29zdChjb3N0KTsKKyAgICAgICAgICAgIHNfbmV3U3RyaW5n
c1NpbmNlTGFzdEdDKys7CiAgICAgICAgIH0KIAogICAgIHByb3RlY3RlZDoKQEAgLTEwOCw3ICsx
MTMsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6Zmlu
aXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IDA7Ci0gICAg
ICAgICAgICBtX2lzOEJpdCA9IHRydWU7CisgICAgICAgICAgICBzZXRJczhCaXQodHJ1ZSk7Cisg
ICAgICAgICAgICBzX25ld1N0cmluZ3NTaW5jZUxhc3RHQysrOwogICAgICAgICB9CiAgICAgICAg
IAogICAgIHB1YmxpYzoKQEAgLTE2MCwxMSArMTY2LDM1IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICBzdGF0aWMgdm9pZCB2aXNpdENoaWxkcmVuKEpTQ2VsbCosIFNsb3RWaXNpdG9yJik7CiAK
ICAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHN0YXRpYyBKU19FWFBPUlREQVRBIHVuc2lnbmVkIHNf
bmV3U3RyaW5nc1NpbmNlTGFzdEdDOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19t
aW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zdCA9IDEwMDsKKworICAgICAgICBzdGF0aWMg
Ym9vbCBoYXZlRW5vdWdoTmV3U3RyaW5nc1RvSGFzaENvbnN0KCkgeyByZXR1cm4gc19uZXdTdHJp
bmdzU2luY2VMYXN0R0MgPiBzX21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnN0OyB9Cisg
ICAgICAgIHN0YXRpYyB2b2lkIHJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEdDKCkgeyBzX25ld1N0
cmluZ3NTaW5jZUxhc3RHQyA9IDA7IH0KKwogICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsg
cmV0dXJuIG1fdmFsdWUuaXNOdWxsKCk7IH0KLSAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7
IHJldHVybiBtX2lzOEJpdDsgfQorICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJu
IG1fZmxhZ3MgJiBzX2lzOEJpdDsgfQorICAgICAgICB2b2lkIHNldElzOEJpdChib29sIGZsYWcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChmbGFnKQorICAgICAgICAgICAgICAgIG1fZmxh
Z3MgfD0gc19pczhCaXQ7CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mbGFn
cyAmPSB+c19pczhCaXQ7CisgICAgICAgIH0KKyAgICAgICAgYm9vbCBzaG91bGRUcnlIYXNoQ29u
c3QoKTsKKyAgICAgICAgYm9vbCBpc0hhc2hDb25zdFNpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJu
IG1fZmxhZ3MgJiBzX2lzSGFzaENvbnN0U2luZ2xldG9uOyB9CisgICAgICAgIHZvaWQgY2xlYXJI
YXNoQ29uc3RTaW5nbGV0b24oKSB7IG1fZmxhZ3MgJj0gfnNfaXNIYXNoQ29uc3RTaW5nbGV0b247
IH0KKyAgICAgICAgdm9pZCBzZXRIYXNoQ29uc3RTaW5nbGV0b24oKSB7IG1fZmxhZ3MgfD0gc19p
c0hhc2hDb25zdFNpbmdsZXRvbjsgfQorICAgICAgICBib29sIHRyeUhhc2hDb25zdExvY2soKTsK
KyAgICAgICAgdm9pZCByZWxlYXNlSGFzaENvbnN0TG9jaygpOworCisgICAgICAgIHVuc2lnbmVk
IG1fZmxhZ3M7CisgICAgICAgIAorICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19oYXNo
Q29uc3RMb2NrID0gMXUgPDwgMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IHVuc2lnbmVkIHNfaXNI
YXNoQ29uc3RTaW5nbGV0b24gPSAxdSA8PCAxOworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWdu
ZWQgc19pczhCaXQgPSAxdTsKIAogICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBl
aXRoZXIgYnkgYSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBmaWJlcnMuCi0gICAgICAgIGJvb2wgbV9p
czhCaXQgOiAxOwogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICAgICAgbXV0YWJsZSBV
U3RyaW5nIG1fdmFsdWU7CiAKQEAgLTIzMSw3ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAg
ICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKTsKLSAgICAg
ICAgICAgIG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOworICAgICAg
ICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOwogICAgICAgICAg
ICAgbV9maWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKICAgICAgICAgICAgIG1f
ZmliZXJzWzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7CiAgICAgICAgIH0KQEAgLTI0MCw3
ICsyNzAsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5s
ZW5ndGgoKSArIHMyLT5sZW5ndGgoKSArIHMzLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIG1faXM4
Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMzLT5pczhCaXQoKSk7Cisg
ICAgICAgICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMt
PmlzOEJpdCgpKTsKICAgICAgICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlz
LCBzMSk7CiAgICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIp
OwogICAgICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsKQEAg
LTI1NSw3ICsyODUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAg
bV9maWJlcnNbaW5kZXhdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZyk7CiAgICAgICAg
ICAgICBtX2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5ndGg7Ci0gICAgICAgICAgICBtX2lzOEJp
dCA9IG1faXM4Qml0ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKKyAgICAgICAgICAgIHNldElzOEJp
dChpczhCaXQoKSAmJiBqc1N0cmluZy0+aXM4Qml0KCkpOwogICAgICAgICB9CiAKICAgICAgICAg
c3RhdGljIEpTUm9wZVN0cmluZyogY3JlYXRlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEp
Cg==
</data>
<flag name="review"
          id="158744"
          type_id="1"
          status="-"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150503</attachid>
            <date>2012-07-02 17:15:38 -0700</date>
            <delta_ts>2012-07-02 17:37:11 -0700</delta_ts>
            <desc>Patch with suggested fixes</desc>
            <filename>86024-6.patch</filename>
            <type>text/plain</type>
            <size>13960</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTA3LTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuIElmIHNvLCB3ZSBjaGFuZ2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBz
dHJpbmcgd2UncmUKKyAgICAgICAgdmlzaXRpbmcgdG8gdGhlIHByaW9yIHN0cmluZy4KKworICAg
ICAgICBUbyByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgdHdv
IHRocm90dGxlcyBoYXZlCisgICAgICAgIGJlbiBhZGRlZC4gIDEpIFdlIG9ubHkgdHJ5IGhhc2gg
Y29uc3RpbmcgaWYgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgbmV3IAorICAgICAgICBzdHJpbmdz
IGhhdmUgYmVlbiBjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGZ1bGwgR0MuICBDdXJyZW50bHkgdGhp
cyBpcworICAgICAgICBzZXQgYXQgMTAwIHN0cmluZ3MuICAyKSBJZiBhIHN0cmluZyBpcyB1bmlx
dWUgYXQgdGhlIGVuZCBvZiBhIG1hcmtpbmcKKyAgICAgICAgaXQgd2lsbCBub3QgYmUgY2hlY2tl
ZCBkdXJpbmcgZnVydGhlciBHQyBwaGFzZXMuIEluIHNvbWUgY2FzZXMgdGhpcworICAgICAgICB3
b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0IHdlIGFyZSB0cnlpbmcgdG8gY2F0Y2ggdGhl
IGdyb3d0aCBvZgorICAgICAgICBkdXBsaWNhdGUgc3RyaW5ncy4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnNldHVwKTogQ2hlY2sgdG8gc2VlIGlmIGVub3VnaCBz
dHJpbmdzIGhhdmUgYmVlbiBjcmVhdGVkCisgICAgICAgIHRvIGhhc2ggY29uc3QuCisgICAgICAg
IChKU0M6Ok1hcmtTdGFjazo6cmVzZXQpOiBBZGRlZCBjYWxsIHRvIGNsZWFyIG1fdW5pcXVlU3Ry
aW5ncy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2spOiBOZXcgbWV0
aG9kIHRvIGxvY2sgSlNTdHJpbmcgZm9yCisgICAgICAgIGhhc2ggY29uc3RpbmcuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nOjpyZWxlYXNlSGFzaENvbnN0TG9jayk6IE5ldyB1bmxvY2sgbWV0aG9k
LgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENvbnN0KTogU2V0IG9mIGNo
ZWNrcyB0byBzZWUgaWYgd2Ugc2hvdWxkCisgICAgICAgIHRyeSB0byBoYXNoIGNvbnN0IHRoZSBz
dHJpbmcuCisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6aW50ZXJuYWxBcHBlbmQpOiBOZXcgbWV0
aG9kIHRoYXQgcGVyZm9ybXMgdGhlIGhhc2ggY29uc3RpbmcuCisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb3B5QW5kQXBwZW5kKTogQ2hhbmdlZCB0byBjYWxsIHRoZSBuZXcgaGFzaAorICAg
ICAgICBjb25zdGluZyBpbnRlcm5hbEFwcGVuZCgpLgorICAgICAgICAqIGhlYXAvTWFya1N0YWNr
Lmg6CisgICAgICAgIChNYXJrU3RhY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3Qp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEdD
KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU1N0cmluZyk6IENo
YW5nZWQgZnJvbSB1c2luZyBib29sIGZsYWdzIHRvIHVzaW5nIGFuIHVuc2lnbmVkCisgICAgICAg
IG1fZmxhZ3MgZmllbGQuICBUaGlzIHdvcmtzIGJldHRlciB3aXRoIHRoZSB3ZWFrQ29tcGFyZUFu
ZFN3YXAgaW4KKyAgICAgICAgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKS4gQ2hhbmdlZCB0
aGUgOGJpdG5lc3Mgc2V0dGluZyBhbmQKKyAgICAgICAgY2hlY2tpbmcgdG8gdXNlIG5ldyBhY2Nl
c3NvcnMuCisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpKU1N0cmluZyk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppczhC
aXQpOiBVcGRhdGVkIGZvciBuZXcgbV9mbGFncy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNl
dElzOEJpdCk6IE5ldyBzZXR0ZXIuCisgICAgICAgIE5ldyBoYXNoIGNvbnN0IGZsYWdzIGFjY2Vz
c29yczoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzSGFzaENvbnN0U2luZ2xldG9uKToKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OmNsZWFySGFzaENvbnN0U2luZ2xldG9uKToKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6OnNldEhhc2hDb25zdFNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OmFwcGVuZCk6CisKIDIwMTItMDctMDIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wb3Agc2hvdWxkIHRocm93IGlm
IHByb3BlcnR5IGlzIG5vdCBjb25maWd1cmFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAxMjE2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDYgKzQ1NCw3IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogCiAgICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlp
bmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CisgICAgdmlz
aXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRv
cik7CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5j
cHAJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTMwMCw2ICszMDEsMTEgQEAgdm9pZCBNYXJr
U3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5yZW1vdmVBbGwoKTsKIH0KIAordm9pZCBNYXJrU3RhY2s6OnNldHVwKCkKK3sKKyAgICBt
X3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fZ2xvYmFsRGF0YS0+aGF2ZUVub3VnaE5ld1N0
cmluZ3NUb0hhc2hDb25zdCgpOworfQorCiB2b2lkIE1hcmtTdGFjazo6cmVzZXQoKQogewogICAg
IG1fdmlzaXRDb3VudCA9IDA7CkBAIC0zMDksNiArMzE1LDkgQEAgdm9pZCBNYXJrU3RhY2s6OnJl
c2V0KCkKICNlbHNlCiAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogI2VuZGlmCisgICAgbV91
bmlxdWVTdHJpbmdzLmNsZWFyKCk7CisgICAgbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5yZXNldE5l
d1N0cmluZ3NTaW5jZUxhc3RHQygpOworICAgIG1fc2hvdWxkSGFzaENvbnN0ID0gZmFsc2U7CiB9
CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQpAQCAtNTIxLDYgKzUzMCw3NSBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayht
X2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRy
eUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1bnNpZ25l
ZCBjdXJyZW50RmxhZ3MgPSBtX2ZsYWdzOworICAgIHVuc2lnbmVkIG5ld0ZsYWdzID0gY3VycmVu
dEZsYWdzIHwgSGFzaENvbnN0TG9jazsKKworICAgIGlmICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3
YXAoJm1fZmxhZ3MsIGN1cnJlbnRGbGFncywgbmV3RmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBXVEY6Om1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICByZXR1cm4gdHJ1
ZTsKKyNlbHNlCisgICAgaWYgKGlzSGFzaENvbnN0U2luZ2xldG9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fZmxhZ3MgfD0gSGFzaENvbnN0TG9jazsKKworICAgIHJldHVybiB0
cnVlOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmluZzo6cmVsZWFzZUhh
c2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBXVEY6Om1lbW9y
eUJhcnJpZXJCZWZvcmVVbmxvY2soKTsKKyNlbmRpZgorICAgIG1fZmxhZ3MgJj0gfkhhc2hDb25z
dExvY2s7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENv
bnN0KCkKK3sKKyAgICByZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1JvcGUoKSAmJiAhaXNI
YXNoQ29uc3RTaW5nbGV0b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgLy8gVGhpcyBpbnRlcm5hbEFw
cGVuZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8gb2JqZWN0IGFuZCBhcnJheSBiYWNr
aW5nIHN0b3Jlcy4KKyAgICAvLyBhcyBpdCBjYW4gY2hhbmdlIHRoZSBKU1ZhbHVlIHBvaW50ZWQg
dG8gYmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFsIEpTVmFsdWUKKyAgICAvLyBpcyBh
IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGNvbnRlbnRzIGFzIGFub3RoZXIgc3RyaW5n
LgorCisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsKKyAgICBB
U1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworCisgICAgaWYgKG1fc2hvdWxk
SGFzaENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmlu
ZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOworICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRU
cnlIYXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgeworICAgICAgICAg
ICAgVW5pcXVlU3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV91bmlxdWVTdHJpbmdz
LmFkZChzdHJpbmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0
U2luZ2xldG9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENv
bnN0U2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7
CisgICAgICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZy0+cmVs
ZWFzZUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsQXBw
ZW5kKGNlbGwpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBw
dHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgdm9pZCogb2xkUHRyID0gKnB0cjsKQEAgLTUzNCw3ICs2MTIsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwCiAgICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2
YWx1ZTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBpbnRlcm5h
bEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKICAgICAgICAgfQogCiAgICAgICAgIG1lbWNweShuZXdQ
dHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX3N0YWNrLmlzRW1wdHkoKTsgfQogCisgICAgICAgIHZvaWQgc2V0dXAoKTsKICAgICAgICAg
dm9pZCByZXNldCgpOwogCiAgICAgICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXNpdENvdW50OyB9CkBAIC0yOTIsNiArMjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU0NlbGwqKTsKICAgICAgICAgdm9pZCBpbnRl
cm5hbEFwcGVuZChKU1ZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1ZhbHVl
Kik7CiAgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKICAgICAgICAgCkBAIC0zMjUsNiArMzI3LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CiAK
KyAgICAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zdDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZ0ltcGwqLCBKU1ZhbHVlPiBVbmlxdWVTdHJpbmdNYXA7CisgICAgICAgIFVuaXF1ZVN0
cmluZ01hcCBtX3VuaXF1ZVN0cmluZ3M7CisKICNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lO
RykKICAgICAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwCiAjaWYgQ1BVKFg4NikgJiYgRU5BQkxFKEpJVCkKICAgICAs
IG1fdGltZW91dENvdW50KDUxMikKICNlbmRpZgorICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0
R0MoMCkKICNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVCkpCiAgICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3Nl
bWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjE2ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMzk1LDYgKzM5NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQg
bV90aW1lb3V0Q291bnQ7CiAjZW5kaWYKIAorICAgICAgICB1bnNpZ25lZCBtX25ld1N0cmluZ3NT
aW5jZUxhc3RHQzsKKworICAgICAgICBjb25zdCB1bnNpZ25lZCBzX21pbk51bWJlck9mTmV3U3Ry
aW5nc1RvSGFzaENvbnN0ID0gMTAwOworCisgICAgICAgIGJvb2wgaGF2ZUVub3VnaE5ld1N0cmlu
Z3NUb0hhc2hDb25zdCgpIHsgcmV0dXJuIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEdDID4gc19taW5O
dW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zdDsgfQorICAgICAgICB2b2lkIHJlc2V0TmV3U3Ry
aW5nc1NpbmNlTGFzdEdDKCkgeyBtX25ld1N0cmluZ3NTaW5jZUxhc3RHQyA9IDA7IH0KKwogI2Rl
ZmluZSByZWdpc3RlclR5cGVkQXJyYXlGdW5jdGlvbih0eXBlLCBjYXBpdGFsaXplZFR5cGUpIFwK
ICAgICAgICAgdm9pZCByZWdpc3RlclR5cGVkQXJyYXlEZXNjcmlwdG9yKGNvbnN0IGNhcGl0YWxp
emVkVHlwZSMjQXJyYXkqLCBjb25zdCBUeXBlZEFycmF5RGVzY3JpcHRvciYgZGVzY3JpcHRvcikg
XAogICAgICAgICB7IFwKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3Ry
aW5nLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdHJp
bmcuaAkocmV2aXNpb24gMTIxNjg5KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUv
SlNTdHJpbmcuaAkod29ya2luZyBjb3B5KQpAQCAtNjcsNiArNjcsNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgZnJpZW5kIGNsYXNzIEpTR2xvYmFsRGF0YTsKICAgICAgICAgZnJpZW5kIGNs
YXNzIFNwZWNpYWxpemVkVGh1bmtKSVQ7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU1JvcGVTdHJp
bmc7CisgICAgICAgIGZyaWVuZCBjbGFzcyBNYXJrU3RhY2s7CiAgICAgICAgIGZyaWVuZCBjbGFz
cyBTbG90VmlzaXRvcjsKICAgICAgICAgZnJpZW5kIHN0cnVjdCBUaHVua0hlbHBlcnM7CiAKQEAg
LTc3LDEyICs3OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBwcml2YXRlOgogICAgICAgICBK
U1N0cmluZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIFBhc3NSZWZQdHI8U3RyaW5nSW1wbD4g
dmFsdWUpCiAgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxEYXRhLCBnbG9iYWxEYXRhLnN0cmlu
Z1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgICwgbV9mbGFncygwKQogICAgICAgICAgICAg
LCBtX3ZhbHVlKHZhbHVlKQogICAgICAgICB7CiAgICAgICAgIH0KIAogICAgICAgICBKU1N0cmlu
ZyhKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCiAgICAgICAgICAgICA6IEpTQ2VsbChnbG9iYWxE
YXRhLCBnbG9iYWxEYXRhLnN0cmluZ1N0cnVjdHVyZS5nZXQoKSkKKyAgICAgICAgICAgICwgbV9m
bGFncygwKQogICAgICAgICB7CiAgICAgICAgIH0KIApAQCAtOTEsNyArOTQsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7CiAgICAgICAg
ICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVu
Z3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmltcGwoKS0+aXM4
Qml0KCk7CisgICAgICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpKTsK
KyAgICAgICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0R0MrKzsKICAgICAg
ICAgfQogCiAgICAgICAgIHZvaWQgZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxE
YXRhLCBzaXplX3QgbGVuZ3RoLCBzaXplX3QgY29zdCkKQEAgLTk5LDggKzEwMyw5IEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAgICAgQVNTRVJUKCFtX3ZhbHVlLmlzTnVsbCgpKTsKICAgICAg
ICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9s
ZW5ndGggPSBsZW5ndGg7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IG1fdmFsdWUuaW1wbCgpLT5p
czhCaXQoKTsKKyAgICAgICAgICAgIHNldElzOEJpdChtX3ZhbHVlLmltcGwoKS0+aXM4Qml0KCkp
OwogICAgICAgICAgICAgSGVhcDo6aGVhcCh0aGlzKS0+cmVwb3J0RXh0cmFNZW1vcnlDb3N0KGNv
c3QpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5tX25ld1N0cmluZ3NTaW5jZUxhc3RHQysrOwog
ICAgICAgICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMDgsNyArMTEzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2Jh
bERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSAwOwotICAgICAgICAgICAgbV9pczhCaXQg
PSB0cnVlOworICAgICAgICAgICAgc2V0SXM4Qml0KHRydWUpOworICAgICAgICAgICAgZ2xvYmFs
RGF0YS5tX25ld1N0cmluZ3NTaW5jZUxhc3RHQysrOwogICAgICAgICB9CiAgICAgICAgIAogICAg
IHB1YmxpYzoKQEAgLTE2MSwxMCArMTY3LDMwIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgcHJv
dGVjdGVkOgogICAgICAgICBib29sIGlzUm9wZSgpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWUuaXNO
dWxsKCk7IH0KLSAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2lzOEJpdDsg
fQorICAgICAgICBib29sIGlzOEJpdCgpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBJczhCaXQ7
IH0KKyAgICAgICAgdm9pZCBzZXRJczhCaXQoYm9vbCBmbGFnKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAoZmxhZykKKyAgICAgICAgICAgICAgICBtX2ZsYWdzIHw9IElzOEJpdDsKKyAgICAg
ICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBtX2ZsYWdzICY9IH5JczhCaXQ7CisgICAgICAg
IH0KKyAgICAgICAgYm9vbCBzaG91bGRUcnlIYXNoQ29uc3QoKTsKKyAgICAgICAgYm9vbCBpc0hh
c2hDb25zdFNpbmdsZXRvbigpIGNvbnN0IHsgcmV0dXJuIG1fZmxhZ3MgJiBJc0hhc2hDb25zdFNp
bmdsZXRvbjsgfQorICAgICAgICB2b2lkIGNsZWFySGFzaENvbnN0U2luZ2xldG9uKCkgeyBtX2Zs
YWdzICY9IH5Jc0hhc2hDb25zdFNpbmdsZXRvbjsgfQorICAgICAgICB2b2lkIHNldEhhc2hDb25z
dFNpbmdsZXRvbigpIHsgbV9mbGFncyB8PSBJc0hhc2hDb25zdFNpbmdsZXRvbjsgfQorICAgICAg
ICBib29sIHRyeUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgdm9pZCByZWxlYXNlSGFzaENvbnN0
TG9jaygpOworCisgICAgICAgIHVuc2lnbmVkIG1fZmxhZ3M7CisgICAgICAgIAorICAgICAgICBl
bnVtIHsKKyAgICAgICAgICAgIEhhc2hDb25zdExvY2sgPSAxdSA8PCAyLAorICAgICAgICAgICAg
SXNIYXNoQ29uc3RTaW5nbGV0b24gPSAxdSA8PCAxLAorICAgICAgICAgICAgSXM4Qml0ID0gMXUK
KyAgICAgICAgfTsKIAogICAgICAgICAvLyBBIHN0cmluZyBpcyByZXByZXNlbnRlZCBlaXRoZXIg
YnkgYSBVU3RyaW5nIG9yIGEgcm9wZSBvZiBmaWJlcnMuCi0gICAgICAgIGJvb2wgbV9pczhCaXQg
OiAxOwogICAgICAgICB1bnNpZ25lZCBtX2xlbmd0aDsKICAgICAgICAgbXV0YWJsZSBVU3RyaW5n
IG1fdmFsdWU7CiAKQEAgLTIzMSw3ICsyNTcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
ewogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAg
ICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgoKSArIHMyLT5sZW5ndGgoKTsKLSAgICAgICAgICAg
IG1faXM4Qml0ID0gKHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOworICAgICAgICAgICAg
c2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkpOwogICAgICAgICAgICAgbV9m
aWJlcnNbMF0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMxKTsKICAgICAgICAgICAgIG1fZmliZXJz
WzFdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMik7CiAgICAgICAgIH0KQEAgLTI0MCw3ICsyNjYs
NyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgQmFzZTo6ZmluaXNo
Q3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IHMxLT5sZW5ndGgo
KSArIHMyLT5sZW5ndGgoKSArIHMzLT5sZW5ndGgoKTsKLSAgICAgICAgICAgIG1faXM4Qml0ID0g
KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMzLT5pczhCaXQoKSk7CisgICAgICAg
ICAgICBzZXRJczhCaXQoczEtPmlzOEJpdCgpICYmIHMyLT5pczhCaXQoKSAmJiAgczMtPmlzOEJp
dCgpKTsKICAgICAgICAgICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7
CiAgICAgICAgICAgICBtX2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAg
ICAgICAgICAgbV9maWJlcnNbMl0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMzKTsKQEAgLTI1NSw3
ICsyODEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICAgICAgbV9maWJl
cnNbaW5kZXhdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBqc1N0cmluZyk7CiAgICAgICAgICAgICBt
X2xlbmd0aCArPSBqc1N0cmluZy0+bV9sZW5ndGg7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9IG1f
aXM4Qml0ICYmIGpzU3RyaW5nLT5tX2lzOEJpdDsKKyAgICAgICAgICAgIHNldElzOEJpdChpczhC
aXQoKSAmJiBqc1N0cmluZy0+aXM4Qml0KCkpOwogICAgICAgICB9CiAKICAgICAgICAgc3RhdGlj
IEpTUm9wZVN0cmluZyogY3JlYXRlTnVsbChKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEpCg==
</data>
<flag name="commit-queue"
          id="158754"
          type_id="3"
          status="-"
          setter="gyuyoung.kim"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150505</attachid>
            <date>2012-07-02 17:37:11 -0700</date>
            <delta_ts>2012-07-03 11:54:14 -0700</delta_ts>
            <desc>FFixed build issues.</desc>
            <filename>86024-7.patch</filename>
            <type>text/plain</type>
            <size>13967</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzExKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY0IEBA
CisyMDEyLTA3LTAyICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuIElmIHNvLCB3ZSBjaGFuZ2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBz
dHJpbmcgd2UncmUKKyAgICAgICAgdmlzaXRpbmcgdG8gdGhlIHByaW9yIHN0cmluZy4KKworICAg
ICAgICBUbyByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgdHdv
IHRocm90dGxlcyBoYXZlCisgICAgICAgIGJlbiBhZGRlZC4gIDEpIFdlIG9ubHkgdHJ5IGhhc2gg
Y29uc3RpbmcgaWYgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgbmV3IAorICAgICAgICBzdHJpbmdz
IGhhdmUgYmVlbiBjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGZ1bGwgR0MuICBDdXJyZW50bHkgdGhp
cyBpcworICAgICAgICBzZXQgYXQgMTAwIHN0cmluZ3MuICAyKSBJZiBhIHN0cmluZyBpcyB1bmlx
dWUgYXQgdGhlIGVuZCBvZiBhIG1hcmtpbmcKKyAgICAgICAgaXQgd2lsbCBub3QgYmUgY2hlY2tl
ZCBkdXJpbmcgZnVydGhlciBHQyBwaGFzZXMuIEluIHNvbWUgY2FzZXMgdGhpcworICAgICAgICB3
b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0IHdlIGFyZSB0cnlpbmcgdG8gY2F0Y2ggdGhl
IGdyb3d0aCBvZgorICAgICAgICBkdXBsaWNhdGUgc3RyaW5ncy4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGhlYXAvSGVhcC5jcHA6CisgICAgICAg
IChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICogaGVhcC9NYXJrU3RhY2suY3BwOgor
ICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnNldHVwKTogQ2hlY2sgdG8gc2VlIGlmIGVub3VnaCBz
dHJpbmdzIGhhdmUgYmVlbiBjcmVhdGVkCisgICAgICAgIHRvIGhhc2ggY29uc3QuCisgICAgICAg
IChKU0M6Ok1hcmtTdGFjazo6cmVzZXQpOiBBZGRlZCBjYWxsIHRvIGNsZWFyIG1fdW5pcXVlU3Ry
aW5ncy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2spOiBOZXcgbWV0
aG9kIHRvIGxvY2sgSlNTdHJpbmcgZm9yCisgICAgICAgIGhhc2ggY29uc3RpbmcuCisgICAgICAg
IChKU0M6OkpTU3RyaW5nOjpyZWxlYXNlSGFzaENvbnN0TG9jayk6IE5ldyB1bmxvY2sgbWV0aG9k
LgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENvbnN0KTogU2V0IG9mIGNo
ZWNrcyB0byBzZWUgaWYgd2Ugc2hvdWxkCisgICAgICAgIHRyeSB0byBoYXNoIGNvbnN0IHRoZSBz
dHJpbmcuCisgICAgICAgIChKU0M6Ok1hcmtTdGFjazo6aW50ZXJuYWxBcHBlbmQpOiBOZXcgbWV0
aG9kIHRoYXQgcGVyZm9ybXMgdGhlIGhhc2ggY29uc3RpbmcuCisgICAgICAgIChKU0M6OlNsb3RW
aXNpdG9yOjpjb3B5QW5kQXBwZW5kKTogQ2hhbmdlZCB0byBjYWxsIHRoZSBuZXcgaGFzaAorICAg
ICAgICBjb25zdGluZyBpbnRlcm5hbEFwcGVuZCgpLgorICAgICAgICAqIGhlYXAvTWFya1N0YWNr
Lmg6CisgICAgICAgIChNYXJrU3RhY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRh
LmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEpOgorICAgICAg
ICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERhdGEpOgorICAg
ICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3Qp
OgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEdD
KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RyaW5nLmg6CisgICAgICAgIChKU1N0cmluZyk6IENo
YW5nZWQgZnJvbSB1c2luZyBib29sIGZsYWdzIHRvIHVzaW5nIGFuIHVuc2lnbmVkCisgICAgICAg
IG1fZmxhZ3MgZmllbGQuICBUaGlzIHdvcmtzIGJldHRlciB3aXRoIHRoZSB3ZWFrQ29tcGFyZUFu
ZFN3YXAgaW4KKyAgICAgICAgSlNTdHJpbmc6OnRyeUhhc2hDb25zdExvY2soKS4gQ2hhbmdlZCB0
aGUgOGJpdG5lc3Mgc2V0dGluZyBhbmQKKyAgICAgICAgY2hlY2tpbmcgdG8gdXNlIG5ldyBhY2Nl
c3NvcnMuCisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpKU1N0cmluZyk6CisgICAgICAgIChKU0M6
OkpTU3RyaW5nOjpmaW5pc2hDcmVhdGlvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppczhC
aXQpOiBVcGRhdGVkIGZvciBuZXcgbV9mbGFncy4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNl
dElzOEJpdCk6IE5ldyBzZXR0ZXIuCisgICAgICAgIE5ldyBoYXNoIGNvbnN0IGZsYWdzIGFjY2Vz
c29yczoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmlzSGFzaENvbnN0U2luZ2xldG9uKToKKyAg
ICAgICAgKEpTQzo6SlNTdHJpbmc6OmNsZWFySGFzaENvbnN0U2luZ2xldG9uKToKKyAgICAgICAg
KEpTQzo6SlNTdHJpbmc6OnNldEhhc2hDb25zdFNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkpT
Um9wZVN0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6
OmFwcGVuZCk6CisKIDIwMTItMDctMDIgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hA
YXBwbGUuY29tPgogCiAgICAgICAgIEFycmF5LnByb3RvdHlwZS5wb3Agc2hvdWxkIHRocm93IGlm
IHByb3BlcnR5IGlzIG5vdCBjb25maWd1cmFibGUKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL0hlYXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L0hlYXAuY3BwCShyZXZpc2lvbiAxMjE2ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVh
cC9IZWFwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDU0LDYgKzQ1NCw3IEBAIHZvaWQgSGVhcDo6
bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogCiAgICAgbV9zdG9yYWdlU3BhY2Uuc3RhcnRlZENvcHlp
bmcoKTsKICAgICBTbG90VmlzaXRvciYgdmlzaXRvciA9IG1fc2xvdFZpc2l0b3I7CisgICAgdmlz
aXRvci5zZXR1cCgpOwogICAgIEhlYXBSb290VmlzaXRvciBoZWFwUm9vdFZpc2l0b3IodmlzaXRv
cik7CiAKICAgICB7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2su
Y3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5j
cHAJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtT
dGFjay5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJTdHJ1
Y3R1cmUuaCIKICNpbmNsdWRlICJVU3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgi
CisjaW5jbHVkZSA8d3RmL0F0b21pY3MuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2lu
Y2x1ZGUgPHd0Zi9NYWluVGhyZWFkLmg+CiAKQEAgLTMwMCw2ICszMDEsMTEgQEAgdm9pZCBNYXJr
U3RhY2tUaHJlYWRTaGFyZWREYXRhOjpyZXNldCgpCiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVz
dGVycy5yZW1vdmVBbGwoKTsKIH0KIAordm9pZCBNYXJrU3RhY2s6OnNldHVwKCkKK3sKKyAgICBt
X3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fZ2xvYmFsRGF0YS0+aGF2ZUVub3VnaE5ld1N0
cmluZ3NUb0hhc2hDb25zdCgpOworfQorCiB2b2lkIE1hcmtTdGFjazo6cmVzZXQoKQogewogICAg
IG1fdmlzaXRDb3VudCA9IDA7CkBAIC0zMDksNiArMzE1LDkgQEAgdm9pZCBNYXJrU3RhY2s6OnJl
c2V0KCkKICNlbHNlCiAgICAgbV9vcGFxdWVSb290cy5jbGVhcigpOwogI2VuZGlmCisgICAgbV91
bmlxdWVTdHJpbmdzLmNsZWFyKCk7CisgICAgbV9zaGFyZWQubV9nbG9iYWxEYXRhLT5yZXNldE5l
d1N0cmluZ3NTaW5jZUxhc3RHQygpOworICAgIG1fc2hvdWxkSGFzaENvbnN0ID0gZmFsc2U7CiB9
CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNlcnZhdGl2
ZVJvb3RzKQpAQCAtNTIxLDYgKzUzMCw3NSBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxsb2NhdGVO
ZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21CbG9jayht
X2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJpbmc6OnRy
eUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1bnNpZ25l
ZCBjdXJyZW50RmxhZ3MgPSBtX2ZsYWdzOworICAgIHVuc2lnbmVkIG5ld0ZsYWdzID0gY3VycmVu
dEZsYWdzIHwgSGFzaENvbnN0TG9jazsKKworICAgIGlmICghV1RGOjp3ZWFrQ29tcGFyZUFuZFN3
YXAoJm1fZmxhZ3MsIGN1cnJlbnRGbGFncywgbmV3RmxhZ3MpKQorICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICBXVEY6Om1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICByZXR1cm4gdHJ1
ZTsKKyNlbHNlCisgICAgaWYgKGlzSGFzaENvbnN0U2luZ2xldG9uKCkpCisgICAgICAgIHJldHVy
biBmYWxzZTsKKworICAgIG1fZmxhZ3MgfD0gSGFzaENvbnN0TG9jazsKKworICAgIHJldHVybiB0
cnVlOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmluZzo6cmVsZWFzZUhh
c2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBXVEY6Om1lbW9y
eUJhcnJpZXJCZWZvcmVVbmxvY2soKTsKKyNlbmRpZgorICAgIG1fZmxhZ3MgJj0gfkhhc2hDb25z
dExvY2s7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hvdWxkVHJ5SGFzaENv
bnN0KCkKK3sKKyAgICByZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1JvcGUoKSAmJiAhaXNI
YXNoQ29uc3RTaW5nbGV0b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJrU3RhY2s6
OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgLy8gVGhpcyBpbnRlcm5hbEFw
cGVuZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8gb2JqZWN0IGFuZCBhcnJheSBiYWNr
aW5nIHN0b3Jlcy4KKyAgICAvLyBhcyBpdCBjYW4gY2hhbmdlIHRoZSBKU1ZhbHVlIHBvaW50ZWQg
dG8gYmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFsIEpTVmFsdWUKKyAgICAvLyBpcyBh
IHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGNvbnRlbnRzIGFzIGFub3RoZXIgc3RyaW5n
LgorCisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsKKyAgICBB
U1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJldHVybjsK
KworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworCisgICAgaWYgKG1fc2hvdWxk
SGFzaENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAgSlNTdHJpbmcqIHN0cmlu
ZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOworICAgICAgICBpZiAoc3RyaW5nLT5zaG91bGRU
cnlIYXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2soKSkgeworICAgICAgICAg
ICAgVW5pcXVlU3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0gbV91bmlxdWVTdHJpbmdz
LmFkZChzdHJpbmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAgICAgICAgICAgaWYgKGFk
ZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmluZy0+c2V0SGFzaENvbnN0
U2luZ2xldG9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBKU1ZhbHVl
IGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vjb25kOworICAgICAgICAg
ICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAgICAgICAgICAgICAgICAg
IGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwoKSktPmNsZWFySGFzaENv
bnN0U2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBleGlzdGluZ0pTVmFsdWU7
CisgICAgICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0TG9jaygpOworICAgICAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHN0cmluZy0+cmVs
ZWFzZUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKworICAgIGludGVybmFsQXBw
ZW5kKGNlbGwpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBw
dHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25lZCBsZW5ndGgpCiB7CiAg
ICAgdm9pZCogb2xkUHRyID0gKnB0cjsKQEAgLTUzNCw3ICs2MTIsNyBAQCB2b2lkIFNsb3RWaXNp
dG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwCiAgICAgICAgICAgICBuZXdWYWx1ZXNbaV0gPSB2
YWx1ZTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAgICAgICAgICBpbnRlcm5h
bEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKICAgICAgICAgfQogCiAgICAgICAgIG1lbWNweShuZXdQ
dHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hl
YXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yNTksNiArMjU5LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGEmIHNoYXJlZERh
dGEoKSB7IHJldHVybiBtX3NoYXJlZDsgfQogICAgICAgICBib29sIGlzRW1wdHkoKSB7IHJldHVy
biBtX3N0YWNrLmlzRW1wdHkoKTsgfQogCisgICAgICAgIHZvaWQgc2V0dXAoKTsKICAgICAgICAg
dm9pZCByZXNldCgpOwogCiAgICAgICAgIHNpemVfdCB2aXNpdENvdW50KCkgY29uc3QgeyByZXR1
cm4gbV92aXNpdENvdW50OyB9CkBAIC0yOTIsNiArMjkzLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU0NlbGwqKTsKICAgICAgICAgdm9pZCBpbnRl
cm5hbEFwcGVuZChKU1ZhbHVlKTsKKyAgICAgICAgdm9pZCBpbnRlcm5hbEFwcGVuZChKU1ZhbHVl
Kik7CiAgICAgICAgIAogICAgICAgICBKU19FWFBPUlRfUFJJVkFURSB2b2lkIG1lcmdlT3BhcXVl
Um9vdHMoKTsKICAgICAgICAgCkBAIC0zMjUsNiArMzI3LDEwIEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgTWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSYgbV9zaGFyZWQ7CiAK
KyAgICAgICAgYm9vbCBtX3Nob3VsZEhhc2hDb25zdDsKKyAgICAgICAgdHlwZWRlZiBIYXNoTWFw
PFN0cmluZ0ltcGwqLCBKU1ZhbHVlPiBVbmlxdWVTdHJpbmdNYXA7CisgICAgICAgIFVuaXF1ZVN0
cmluZ01hcCBtX3VuaXF1ZVN0cmluZ3M7CisKICNpZiBFTkFCTEUoT0JKRUNUX01BUktfTE9HR0lO
RykKICAgICAgICAgdW5zaWduZWQgbV9sb2dDaGlsZENvdW50OwogI2VuZGlmCkluZGV4OiBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5jcHAJKHJldmlzaW9u
IDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTE3MCw2ICsxNzAsNyBAQCBKU0dsb2JhbERhdGE6OkpTR2xv
YmFsRGF0YShHbG9iYWxEYXRhVHlwCiAjaWYgQ1BVKFg4NikgJiYgRU5BQkxFKEpJVCkKICAgICAs
IG1fdGltZW91dENvdW50KDUxMikKICNlbmRpZgorICAgICwgbV9uZXdTdHJpbmdzU2luY2VMYXN0
R0MoMCkKICNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiAoRU5BQkxFKENMQVNTSUNfSU5URVJQUkVU
RVIpIHx8IEVOQUJMRShMTElOVCkpCiAgICAgLCBtX2NhblVzZUFzc2VtYmxlcihlbmFibGVBc3Nl
bWJsZXIoZXhlY3V0YWJsZUFsbG9jYXRvcikpCiAjZW5kaWYKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCShyZXZpc2lvbiAxMjE2ODkpCisrKyBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuaAkod29ya2luZyBjb3B5
KQpAQCAtMzk1LDYgKzM5NSwxMyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQg
bV90aW1lb3V0Q291bnQ7CiAjZW5kaWYKIAorICAgICAgICB1bnNpZ25lZCBtX25ld1N0cmluZ3NT
aW5jZUxhc3RHQzsKKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19taW5OdW1iZXJP
Zk5ld1N0cmluZ3NUb0hhc2hDb25zdCA9IDEwMDsKKworICAgICAgICBib29sIGhhdmVFbm91Z2hO
ZXdTdHJpbmdzVG9IYXNoQ29uc3QoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5jZUxhc3RHQyA+
IHNfbWluTnVtYmVyT2ZOZXdTdHJpbmdzVG9IYXNoQ29uc3Q7IH0KKyAgICAgICAgdm9pZCByZXNl
dE5ld1N0cmluZ3NTaW5jZUxhc3RHQygpIHsgbV9uZXdTdHJpbmdzU2luY2VMYXN0R0MgPSAwOyB9
CisKICNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFycmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6ZWRU
eXBlKSBcCiAgICAgICAgIHZvaWQgcmVnaXN0ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBj
YXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29uc3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2Ny
aXB0b3IpIFwKICAgICAgICAgeyBcCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGlt
ZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1l
L0pTU3RyaW5nLmgJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9y
dW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcgY29weSkKQEAgLTY3LDYgKzY3LDcgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZy
aWVuZCBjbGFzcyBTcGVjaWFsaXplZFRodW5rSklUOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNS
b3BlU3RyaW5nOworICAgICAgICBmcmllbmQgY2xhc3MgTWFya1N0YWNrOwogICAgICAgICBmcmll
bmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAgICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJz
OwogCkBAIC03NywxMiArNzgsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAg
ICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmlu
Z0ltcGw+IHZhbHVlKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0
YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAg
ICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAg
SlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQogICAgICAgICAgICAgOiBKU0NlbGwo
Z2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAg
ICAsIG1fZmxhZ3MoMCkKICAgICAgICAgewogICAgICAgICB9CiAKQEAgLTkxLDcgKzk0LDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwog
ICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAg
ICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5pbXBs
KCktPmlzOEJpdCgpOworICAgICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhC
aXQoKSk7CisgICAgICAgICAgICBnbG9iYWxEYXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEdDKys7
CiAgICAgICAgIH0KIAogICAgICAgICB2b2lkIGZpbmlzaENyZWF0aW9uKEpTR2xvYmFsRGF0YSYg
Z2xvYmFsRGF0YSwgc2l6ZV90IGxlbmd0aCwgc2l6ZV90IGNvc3QpCkBAIC05OSw4ICsxMDMsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVCghbV92YWx1ZS5pc051bGwoKSk7
CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlvbihnbG9iYWxEYXRhKTsKICAgICAgICAg
ICAgIG1fbGVuZ3RoID0gbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhCaXQgPSBtX3ZhbHVlLmlt
cGwoKS0+aXM4Qml0KCk7CisgICAgICAgICAgICBzZXRJczhCaXQobV92YWx1ZS5pbXBsKCktPmlz
OEJpdCgpKTsKICAgICAgICAgICAgIEhlYXA6OmhlYXAodGhpcyktPnJlcG9ydEV4dHJhTWVtb3J5
Q29zdChjb3N0KTsKKyAgICAgICAgICAgIGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0
R0MrKzsKICAgICAgICAgfQogCiAgICAgcHJvdGVjdGVkOgpAQCAtMTA4LDcgKzExMyw4IEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICB7CiAgICAgICAgICAgICBCYXNlOjpmaW5pc2hDcmVhdGlv
bihnbG9iYWxEYXRhKTsKICAgICAgICAgICAgIG1fbGVuZ3RoID0gMDsKLSAgICAgICAgICAgIG1f
aXM4Qml0ID0gdHJ1ZTsKKyAgICAgICAgICAgIHNldElzOEJpdCh0cnVlKTsKKyAgICAgICAgICAg
IGdsb2JhbERhdGEubV9uZXdTdHJpbmdzU2luY2VMYXN0R0MrKzsKICAgICAgICAgfQogICAgICAg
ICAKICAgICBwdWJsaWM6CkBAIC0xNjEsMTAgKzE2NywzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAog
ICAgIHByb3RlY3RlZDoKICAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3Zh
bHVlLmlzTnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9p
czhCaXQ7IH0KKyAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYg
SXM4Qml0OyB9CisgICAgICAgIHZvaWQgc2V0SXM4Qml0KGJvb2wgZmxhZykKKyAgICAgICAgewor
ICAgICAgICAgICAgaWYgKGZsYWcpCisgICAgICAgICAgICAgICAgbV9mbGFncyB8PSBJczhCaXQ7
CisgICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mbGFncyAmPSB+SXM4Qml0Owor
ICAgICAgICB9CisgICAgICAgIGJvb2wgc2hvdWxkVHJ5SGFzaENvbnN0KCk7CisgICAgICAgIGJv
b2wgaXNIYXNoQ29uc3RTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSXNIYXNo
Q29uc3RTaW5nbGV0b247IH0KKyAgICAgICAgdm9pZCBjbGVhckhhc2hDb25zdFNpbmdsZXRvbigp
IHsgbV9mbGFncyAmPSB+SXNIYXNoQ29uc3RTaW5nbGV0b247IH0KKyAgICAgICAgdm9pZCBzZXRI
YXNoQ29uc3RTaW5nbGV0b24oKSB7IG1fZmxhZ3MgfD0gSXNIYXNoQ29uc3RTaW5nbGV0b247IH0K
KyAgICAgICAgYm9vbCB0cnlIYXNoQ29uc3RMb2NrKCk7CisgICAgICAgIHZvaWQgcmVsZWFzZUhh
c2hDb25zdExvY2soKTsKKworICAgICAgICB1bnNpZ25lZCBtX2ZsYWdzOworICAgICAgICAKKyAg
ICAgICAgZW51bSB7CisgICAgICAgICAgICBIYXNoQ29uc3RMb2NrID0gMXUgPDwgMiwKKyAgICAg
ICAgICAgIElzSGFzaENvbnN0U2luZ2xldG9uID0gMXUgPDwgMSwKKyAgICAgICAgICAgIElzOEJp
dCA9IDF1CisgICAgICAgIH07CiAKICAgICAgICAgLy8gQSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQg
ZWl0aGVyIGJ5IGEgVVN0cmluZyBvciBhIHJvcGUgb2YgZmliZXJzLgotICAgICAgICBib29sIG1f
aXM4Qml0IDogMTsKICAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgICAgIG11dGFibGUg
VVN0cmluZyBtX3ZhbHVlOwogCkBAIC0yMzEsNyArMjU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwog
ICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7Ci0gICAg
ICAgICAgICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKKyAgICAg
ICAgICAgIHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKICAgICAgICAg
ICAgIG1fZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7CiAgICAgICAgICAgICBt
X2ZpYmVyc1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAgICAgICB9CkBAIC0yNDAs
NyArMjY2LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6
OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+
bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX2lz
OEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOwor
ICAgICAgICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMz
LT5pczhCaXQoKSk7CiAgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhp
cywgczEpOwogICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMy
KTsKICAgICAgICAgICAgIG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7CkBA
IC0yNTUsNyArMjgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAg
IG1fZmliZXJzW2luZGV4XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNTdHJpbmcpOwogICAgICAg
ICAgICAgbV9sZW5ndGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhC
aXQgPSBtX2lzOEJpdCAmJiBqc1N0cmluZy0+bV9pczhCaXQ7CisgICAgICAgICAgICBzZXRJczhC
aXQoaXM4Qml0KCkgJiYganNTdHJpbmctPmlzOEJpdCgpKTsKICAgICAgICAgfQogCiAgICAgICAg
IHN0YXRpYyBKU1JvcGVTdHJpbmcqIGNyZWF0ZU51bGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRh
KQo=
</data>
<flag name="review"
          id="158755"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>150656</attachid>
            <date>2012-07-03 11:54:14 -0700</date>
            <delta_ts>2012-07-03 13:19:31 -0700</delta_ts>
            <desc>Fixed a minor bug and improved new strings since last hash const logic</desc>
            <filename>86024-8.patch</filename>
            <type>text/plain</type>
            <size>15500</size>
            <attacher name="Michael Saboff">msaboff</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTIxNzkyKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDY2IEBA
CisyMDEyLTA3LTAzICBNaWNoYWVsIFNhYm9mZiAgPG1zYWJvZmZAYXBwbGUuY29tPgorCisgICAg
ICAgIEVuaDogSGFzaCBDb25zdCBKU1N0cmluZyBpbiBCYWNraW5nIFN0b3JlcyB0byBTYXZlIE1l
bW9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODYw
MjQKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEdXJp
bmcgZ2FyYmFnZSBjb2xsZWN0aW9uLCBlYWNoIG1hcmtpbmcgdGhyZWFkIGtlZXBzIGEgSGFzaE1h
cCBvZgorICAgICAgICBzdHJpbmdzLiAgV2hpbGUgdmlzaXRpbmcgdmlhIE1hcmtTdGFjazo6Y29w
eUFuZEFwcGVuZCgpLCB3ZSBjaGVjayB0bworICAgICAgICBzZWUgaWYgdGhlIHN0cmluZyB3ZSBh
cmUgdmlzaXRpbmcgaXMgYWxyZWFkeSBpbiB0aGUgSGFzaE1hcC4gIElmIG5vdAorICAgICAgICB3
ZSBhZGQgaXQuIElmIHNvLCB3ZSBjaGFuZ2UgdGhlIHJlZmVyZW5jZSB0byB0aGUgY3VycmVudCBz
dHJpbmcgd2UncmUKKyAgICAgICAgdmlzaXRpbmcgdG8gdGhlIHByaW9yIHN0cmluZy4KKworICAg
ICAgICBUbyByZWR1Y2UgdGhlIHBlcmZvcm1hbmNlIGltcGFjdCBvZiB0aGlzIGNoYW5nZSwgdHdv
IHRocm90dGxlcyBoYXZlCisgICAgICAgIGJlbiBhZGRlZC4gIDEpIFdlIG9ubHkgdHJ5IGhhc2gg
Y29uc3RpbmcgaWYgYSBzaWduaWZpY2FudCBudW1iZXIgb2YgbmV3IAorICAgICAgICBzdHJpbmdz
IGhhdmUgYmVlbiBjcmVhdGVkIHNpbmNlIHRoZSBsYXN0IGhhc2ggY29uc3QuICBDdXJyZW50bHkg
dGhpcyBpcworICAgICAgICBzZXQgYXQgMTAwIHN0cmluZ3MuICAyKSBJZiBhIHN0cmluZyBpcyB1
bmlxdWUgYXQgdGhlIGVuZCBvZiBhIG1hcmtpbmcKKyAgICAgICAgaXQgd2lsbCBub3QgYmUgY2hl
Y2tlZCBkdXJpbmcgZnVydGhlciBHQyBwaGFzZXMuIEluIHNvbWUgY2FzZXMgdGhpcworICAgICAg
ICB3b24ndCBjYXRjaCBhbGwgZHVwbGljYXRlcywgYnV0IHdlIGFyZSB0cnlpbmcgdG8gY2F0Y2gg
dGhlIGdyb3d0aCBvZgorICAgICAgICBkdXBsaWNhdGUgc3RyaW5ncy4KKworICAgICAgICAqIGhl
YXAvSGVhcC5jcHA6CisgICAgICAgIChKU0M6OkhlYXA6Om1hcmtSb290cyk6CisgICAgICAgICog
aGVhcC9NYXJrU3RhY2suY3BwOgorICAgICAgICAoSlNDOjpNYXJrU3RhY2tUaHJlYWRTaGFyZWRE
YXRhOjpyZXNldENoaWxkcmVuKToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrVGhyZWFkU2hhcmVk
RGF0YTo6TWFya1N0YWNrVGhyZWFkU2hhcmVkRGF0YSk6CisgICAgICAgIChKU0M6Ok1hcmtTdGFj
a1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KToKKyAgICAgICAgKEpTQzo6TWFya1N0YWNrOjpzZXR1
cCk6IENoZWNrIHRvIHNlZSBpZiBlbm91Z2ggc3RyaW5ncyBoYXZlIGJlZW4gY3JlYXRlZAorICAg
ICAgICB0byBoYXNoIGNvbnN0LgorICAgICAgICAoSlNDOjpNYXJrU3RhY2s6OnJlc2V0KTogQWRk
ZWQgY2FsbCB0byBjbGVhciBtX3VuaXF1ZVN0cmluZ3MuCisgICAgICAgIChKU0M6OkpTU3RyaW5n
Ojp0cnlIYXNoQ29uc3RMb2NrKTogTmV3IG1ldGhvZCB0byBsb2NrIEpTU3RyaW5nIGZvcgorICAg
ICAgICBoYXNoIGNvbnN0aW5nLgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6cmVsZWFzZUhhc2hD
b25zdExvY2spOiBOZXcgdW5sb2NrIG1ldGhvZC4KKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OnNo
b3VsZFRyeUhhc2hDb25zdCk6IFNldCBvZiBjaGVja3MgdG8gc2VlIGlmIHdlIHNob3VsZAorICAg
ICAgICB0cnkgdG8gaGFzaCBjb25zdCB0aGUgc3RyaW5nLgorICAgICAgICAoSlNDOjpNYXJrU3Rh
Y2s6OmludGVybmFsQXBwZW5kKTogTmV3IG1ldGhvZCB0aGF0IHBlcmZvcm1zIHRoZSBoYXNoIGNv
bnN0aW5nLgorICAgICAgICAoSlNDOjpTbG90VmlzaXRvcjo6Y29weUFuZEFwcGVuZCk6IENoYW5n
ZWQgdG8gY2FsbCB0aGUgbmV3IGhhc2gKKyAgICAgICAgY29uc3RpbmcgaW50ZXJuYWxBcHBlbmQo
KS4KKyAgICAgICAgKiBoZWFwL01hcmtTdGFjay5oOgorICAgICAgICAoTWFya1N0YWNrVGhyZWFk
U2hhcmVkRGF0YSk6CisgICAgICAgIChNYXJrU3RhY2spOgorICAgICAgICAqIHJ1bnRpbWUvSlNH
bG9iYWxEYXRhLmNwcDoKKyAgICAgICAgKEpTQzo6SlNHbG9iYWxEYXRhOjpKU0dsb2JhbERhdGEp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNHbG9iYWxEYXRhLmg6CisgICAgICAgIChKU0dsb2JhbERh
dGEpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OmhhdmVFbm91Z2hOZXdTdHJpbmdzVG9I
YXNoQ29uc3QpOgorICAgICAgICAoSlNDOjpKU0dsb2JhbERhdGE6OnJlc2V0TmV3U3RyaW5nc1Np
bmNlTGFzdEhhc2hDb25zdCk6CisgICAgICAgICogcnVudGltZS9KU1N0cmluZy5oOgorICAgICAg
ICAoSlNTdHJpbmcpOiBDaGFuZ2VkIGZyb20gdXNpbmcgYm9vbCBmbGFncyB0byB1c2luZyBhbiB1
bnNpZ25lZAorICAgICAgICBtX2ZsYWdzIGZpZWxkLiAgVGhpcyB3b3JrcyBiZXR0ZXIgd2l0aCB0
aGUgd2Vha0NvbXBhcmVBbmRTd2FwIGluCisgICAgICAgIEpTU3RyaW5nOjp0cnlIYXNoQ29uc3RM
b2NrKCkuIENoYW5nZWQgdGhlIDhiaXRuZXNzIHNldHRpbmcgYW5kCisgICAgICAgIGNoZWNraW5n
IHRvIHVzZSBuZXcgYWNjZXNzb3JzLgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6SlNTdHJpbmcp
OgorICAgICAgICAoSlNDOjpKU1N0cmluZzo6ZmluaXNoQ3JlYXRpb24pOgorICAgICAgICAoSlND
OjpKU1N0cmluZzo6aXM4Qml0KTogVXBkYXRlZCBmb3IgbmV3IG1fZmxhZ3MuCisgICAgICAgIChK
U0M6OkpTU3RyaW5nOjpzZXRJczhCaXQpOiBOZXcgc2V0dGVyLgorICAgICAgICBOZXcgaGFzaCBj
b25zdCBmbGFncyBhY2Nlc3NvcnM6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjppc0hhc2hDb25z
dFNpbmdsZXRvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpjbGVhckhhc2hDb25zdFNpbmds
ZXRvbik6CisgICAgICAgIChKU0M6OkpTU3RyaW5nOjpzZXRIYXNoQ29uc3RTaW5nbGV0b24pOgor
ICAgICAgICAoSlNDOjpKU1JvcGVTdHJpbmc6OmZpbmlzaENyZWF0aW9uKToKKyAgICAgICAgKEpT
Qzo6SlNSb3BlU3RyaW5nOjphcHBlbmQpOgorCiAyMDEyLTA3LTAzICBKb2NlbHluIFR1cmNvdHRl
ICA8am9jZWx5bi50dXJjb3R0ZUBub2tpYS5jb20+ICBKb2VsIERpbGxvbiA8am9lbC5kaWxsb25A
Y29kZXRoaW5rLmNvLnVrPgogCiAgICAgICAgIFtRdF1bV2luXSBGaXggYnJva2VuIFF0V2ViS2l0
NS5saWIgbGlua2luZwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvSGVhcC5jcHAJKHJldmlz
aW9uIDEyMTY4OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL0hlYXAuY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC00NTQsNiArNDU0LDcgQEAgdm9pZCBIZWFwOjptYXJrUm9vdHMoYm9vbCBm
dWxsR0MpCiAKICAgICBtX3N0b3JhZ2VTcGFjZS5zdGFydGVkQ29weWluZygpOwogICAgIFNsb3RW
aXNpdG9yJiB2aXNpdG9yID0gbV9zbG90VmlzaXRvcjsKKyAgICB2aXNpdG9yLnNldHVwKCk7CiAg
ICAgSGVhcFJvb3RWaXNpdG9yIGhlYXBSb290VmlzaXRvcih2aXNpdG9yKTsKIAogICAgIHsKQEAg
LTU4NSwxMiArNTg2LDExIEBAIHZvaWQgSGVhcDo6bWFya1Jvb3RzKGJvb2wgZnVsbEdDKQogI2Vu
ZGlmCiAKICAgICB2aXNpdG9yLnJlc2V0KCk7Ci0gICAgbV9zaGFyZWREYXRhLnJlc2V0KCk7CiAj
aWYgRU5BQkxFKFBBUkFMTEVMX0dDKQogICAgIG1fc2hhcmVkRGF0YS5yZXNldENoaWxkcmVuKCk7
CiAjZW5kaWYKKyAgICBtX3NoYXJlZERhdGEucmVzZXQoKTsKICAgICBtX3N0b3JhZ2VTcGFjZS5k
b25lQ29weWluZygpOwotCiB9CiAKIHNpemVfdCBIZWFwOjpvYmplY3RDb3VudCgpCkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9NYXJrU3RhY2suY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHJldmlzaW9uIDEyMTY4OSkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTM4LDYgKzM4LDcgQEAKICNpbmNsdWRlICJTdHJ1Y3R1cmUuaCIKICNpbmNsdWRlICJV
U3RyaW5nLmgiCiAjaW5jbHVkZSAiV3JpdGVCYXJyaWVyLmgiCisjaW5jbHVkZSA8d3RmL0F0b21p
Y3MuaD4KICNpbmNsdWRlIDx3dGYvRGF0YUxvZy5oPgogI2luY2x1ZGUgPHd0Zi9NYWluVGhyZWFk
Lmg+CiAKQEAgLTIyNSw3ICsyMjYsNyBAQCB2b2lkIE1hcmtTdGFja0FycmF5OjpzdGVhbFNvbWVD
ZWxsc0Zyb20oCiB2b2lkIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6OnJlc2V0Q2hpbGRyZW4o
KQogewogICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBtX21hcmtpbmdUaHJlYWRzTWFya1N0
YWNrLnNpemUoKTsgKytpKQotICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnJl
c2V0KCk7CisgICAgICAgIG1fbWFya2luZ1RocmVhZHNNYXJrU3RhY2tbaV0tPnJlc2V0KCk7CiB9
ICAgCiAKIHNpemVfdCBNYXJrU3RhY2tUaHJlYWRTaGFyZWREYXRhOjpjaGlsZFZpc2l0Q291bnQo
KQpAQCAtMjYwLDYgKzI2MSw3IEBAIE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6Ok1hcmtTdGFj
a1RocmUKICAgICAsIG1fc2hhcmVkTWFya1N0YWNrKG1fc2VnbWVudEFsbG9jYXRvcikKICAgICAs
IG1fbnVtYmVyT2ZBY3RpdmVQYXJhbGxlbE1hcmtlcnMoMCkKICAgICAsIG1fcGFyYWxsZWxNYXJr
ZXJzU2hvdWxkRXhpdChmYWxzZSkKKyAgICAsIG1fc2hvdWxkSGFzaENvbnN0KGZhbHNlKQogewog
I2lmIEVOQUJMRShQQVJBTExFTF9HQykKICAgICBmb3IgKHVuc2lnbmVkIGkgPSAxOyBpIDwgT3B0
aW9uczo6bnVtYmVyT2ZHQ01hcmtlcnM7ICsraSkgewpAQCAtMjk4LDYgKzMwMCwxNiBAQCB2b2lk
IE1hcmtTdGFja1RocmVhZFNoYXJlZERhdGE6OnJlc2V0KCkKICAgICBBU1NFUlQobV9vcGFxdWVS
b290cy5pc0VtcHR5KCkpOwogI2VuZGlmCiAgICAgbV93ZWFrUmVmZXJlbmNlSGFydmVzdGVycy5y
ZW1vdmVBbGwoKTsKKworICAgIGlmIChtX3Nob3VsZEhhc2hDb25zdCkgeworICAgICAgICBtX2ds
b2JhbERhdGEtPnJlc2V0TmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zdCgpOworICAgICAgICBt
X3Nob3VsZEhhc2hDb25zdCA9IGZhbHNlOworICAgIH0KK30KKwordm9pZCBNYXJrU3RhY2s6OnNl
dHVwKCkKK3sKKyAgICBtX3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdCA9IG1fc2hhcmVkLm1fZ2xv
YmFsRGF0YS0+aGF2ZUVub3VnaE5ld1N0cmluZ3NUb0hhc2hDb25zdCgpOwogfQogCiB2b2lkIE1h
cmtTdGFjazo6cmVzZXQoKQpAQCAtMzA5LDYgKzMyMSw4IEBAIHZvaWQgTWFya1N0YWNrOjpyZXNl
dCgpCiAjZWxzZQogICAgIG1fb3BhcXVlUm9vdHMuY2xlYXIoKTsKICNlbmRpZgorICAgIGlmICht
X3NoYXJlZC5tX3Nob3VsZEhhc2hDb25zdCkKKyAgICAgICAgbV91bmlxdWVTdHJpbmdzLmNsZWFy
KCk7CiB9CiAKIHZvaWQgTWFya1N0YWNrOjphcHBlbmQoQ29uc2VydmF0aXZlUm9vdHMmIGNvbnNl
cnZhdGl2ZVJvb3RzKQpAQCAtNTIxLDYgKzUzNSw3NSBAQCB2b2lkKiBTbG90VmlzaXRvcjo6YWxs
b2NhdGVOZXdTcGFjZSh2b2lkCiAgICAgcmV0dXJuIENvcGllZFNwYWNlOjphbGxvY2F0ZUZyb21C
bG9jayhtX2NvcHlCbG9jaywgYnl0ZXMpOwogfQogCitBTFdBWVNfSU5MSU5FIGJvb2wgSlNTdHJp
bmc6OnRyeUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICB1
bnNpZ25lZCBjdXJyZW50RmxhZ3MgPSBtX2ZsYWdzOworICAgIHVuc2lnbmVkIG5ld0ZsYWdzID0g
Y3VycmVudEZsYWdzIHwgSGFzaENvbnN0TG9jazsKKworICAgIGlmICghV1RGOjp3ZWFrQ29tcGFy
ZUFuZFN3YXAoJm1fZmxhZ3MsIGN1cnJlbnRGbGFncywgbmV3RmxhZ3MpKQorICAgICAgICByZXR1
cm4gZmFsc2U7CisKKyAgICBXVEY6Om1lbW9yeUJhcnJpZXJBZnRlckxvY2soKTsKKyAgICByZXR1
cm4gdHJ1ZTsKKyNlbHNlCisgICAgaWYgKGlzSGFzaENvbnN0U2luZ2xldG9uKCkpCisgICAgICAg
IHJldHVybiBmYWxzZTsKKworICAgIG1fZmxhZ3MgfD0gSGFzaENvbnN0TG9jazsKKworICAgIHJl
dHVybiB0cnVlOworI2VuZGlmCit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBKU1N0cmluZzo6cmVs
ZWFzZUhhc2hDb25zdExvY2soKQoreworI2lmIEVOQUJMRShQQVJBTExFTF9HQykKKyAgICBXVEY6
Om1lbW9yeUJhcnJpZXJCZWZvcmVVbmxvY2soKTsKKyNlbmRpZgorICAgIG1fZmxhZ3MgJj0gfkhh
c2hDb25zdExvY2s7Cit9CisKK0FMV0FZU19JTkxJTkUgYm9vbCBKU1N0cmluZzo6c2hvdWxkVHJ5
SGFzaENvbnN0KCkKK3sKKyAgICByZXR1cm4gKChsZW5ndGgoKSA+IDEpICYmICFpc1JvcGUoKSAm
JiAhaXNIYXNoQ29uc3RTaW5nbGV0b24oKSk7Cit9CisKK0FMV0FZU19JTkxJTkUgdm9pZCBNYXJr
U3RhY2s6OmludGVybmFsQXBwZW5kKEpTVmFsdWUqIHNsb3QpCit7CisgICAgLy8gVGhpcyBpbnRl
cm5hbEFwcGVuZCBpcyBvbmx5IGludGVuZGVkIGZvciB2aXNpdHMgdG8gb2JqZWN0IGFuZCBhcnJh
eSBiYWNraW5nIHN0b3Jlcy4KKyAgICAvLyBhcyBpdCBjYW4gY2hhbmdlIHRoZSBKU1ZhbHVlIHBv
aW50ZWQgdG8gYmUgdGhlIGFyZ3VtZW50IHdoZW4gdGhlIG9yaWdpbmFsIEpTVmFsdWUKKyAgICAv
LyBpcyBhIHN0cmluZyB0aGF0IGNvbnRhaW5zIHRoZSBzYW1lIGNvbnRlbnRzIGFzIGFub3RoZXIg
c3RyaW5nLgorCisgICAgQVNTRVJUKHNsb3QpOworICAgIEpTVmFsdWUgdmFsdWUgPSAqc2xvdDsK
KyAgICBBU1NFUlQodmFsdWUpOworICAgIGlmICghdmFsdWUuaXNDZWxsKCkpCisgICAgICAgIHJl
dHVybjsKKworICAgIEpTQ2VsbCogY2VsbCA9IHZhbHVlLmFzQ2VsbCgpOworCisgICAgaWYgKG1f
c2hhcmVkLm1fc2hvdWxkSGFzaENvbnN0ICYmIGNlbGwtPmlzU3RyaW5nKCkpIHsKKyAgICAgICAg
SlNTdHJpbmcqIHN0cmluZyA9IGpzQ2FzdDxKU1N0cmluZyo+KGNlbGwpOworICAgICAgICBpZiAo
c3RyaW5nLT5zaG91bGRUcnlIYXNoQ29uc3QoKSAmJiBzdHJpbmctPnRyeUhhc2hDb25zdExvY2so
KSkgeworICAgICAgICAgICAgVW5pcXVlU3RyaW5nTWFwOjpBZGRSZXN1bHQgYWRkUmVzdWx0ID0g
bV91bmlxdWVTdHJpbmdzLmFkZChzdHJpbmctPnN0cmluZygpLmltcGwoKSwgdmFsdWUpOworICAg
ICAgICAgICAgaWYgKGFkZFJlc3VsdC5pc05ld0VudHJ5KQorICAgICAgICAgICAgICAgIHN0cmlu
Zy0+c2V0SGFzaENvbnN0U2luZ2xldG9uKCk7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICBKU1ZhbHVlIGV4aXN0aW5nSlNWYWx1ZSA9IGFkZFJlc3VsdC5pdGVyYXRvci0+c2Vj
b25kOworICAgICAgICAgICAgICAgIGlmICh2YWx1ZSAhPSBleGlzdGluZ0pTVmFsdWUpCisgICAg
ICAgICAgICAgICAgICAgIGpzQ2FzdDxKU1N0cmluZyo+KGV4aXN0aW5nSlNWYWx1ZS5hc0NlbGwo
KSktPmNsZWFySGFzaENvbnN0U2luZ2xldG9uKCk7CisgICAgICAgICAgICAgICAgKnNsb3QgPSBl
eGlzdGluZ0pTVmFsdWU7CisgICAgICAgICAgICAgICAgc3RyaW5nLT5yZWxlYXNlSGFzaENvbnN0
TG9jaygpOworICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIHN0cmluZy0+cmVsZWFzZUhhc2hDb25zdExvY2soKTsKKyAgICAgICAgfQorICAgIH0KKwor
ICAgIGludGVybmFsQXBwZW5kKGNlbGwpOworfQorCiB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5k
QXBwZW5kKHZvaWQqKiBwdHIsIHNpemVfdCBieXRlcywgSlNWYWx1ZSogdmFsdWVzLCB1bnNpZ25l
ZCBsZW5ndGgpCiB7CiAgICAgdm9pZCogb2xkUHRyID0gKnB0cjsKQEAgLTUzNCw3ICs2MTcsNyBA
QCB2b2lkIFNsb3RWaXNpdG9yOjpjb3B5QW5kQXBwZW5kKHZvaWQqKiBwCiAgICAgICAgICAgICBu
ZXdWYWx1ZXNbaV0gPSB2YWx1ZTsKICAgICAgICAgICAgIGlmICghdmFsdWUpCiAgICAgICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgICAgICBpbnRlcm5hbEFwcGVuZCh2YWx1ZSk7CisgICAg
ICAgICAgICBpbnRlcm5hbEFwcGVuZCgmbmV3VmFsdWVzW2ldKTsKICAgICAgICAgfQogCiAgICAg
ICAgIG1lbWNweShuZXdQdHIsIG9sZFB0ciwganNWYWx1ZXNPZmZzZXQpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2hlYXAvTWFya1N0YWNrLmgJKHJldmlzaW9uIDEyMTY4OSkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9oZWFwL01hcmtTdGFjay5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMjgs
NiArMjI4LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIG1fbnVtYmVyT2ZB
Y3RpdmVQYXJhbGxlbE1hcmtlcnM7CiAgICAgICAgIGJvb2wgbV9wYXJhbGxlbE1hcmtlcnNTaG91
bGRFeGl0OwogCisgICAgICAgIGJvb2wgbV9zaG91bGRIYXNoQ29uc3Q7CisKICAgICAgICAgTXV0
ZXggbV9vcGFxdWVSb290c0xvY2s7CiAgICAgICAgIEhhc2hTZXQ8dm9pZCo+IG1fb3BhcXVlUm9v
dHM7CiAKQEAgLTI1OSw2ICsyNjEsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTWFya1N0
YWNrVGhyZWFkU2hhcmVkRGF0YSYgc2hhcmVkRGF0YSgpIHsgcmV0dXJuIG1fc2hhcmVkOyB9CiAg
ICAgICAgIGJvb2wgaXNFbXB0eSgpIHsgcmV0dXJuIG1fc3RhY2suaXNFbXB0eSgpOyB9CiAKKyAg
ICAgICAgdm9pZCBzZXR1cCgpOwogICAgICAgICB2b2lkIHJlc2V0KCk7CiAKICAgICAgICAgc2l6
ZV90IHZpc2l0Q291bnQoKSBjb25zdCB7IHJldHVybiBtX3Zpc2l0Q291bnQ7IH0KQEAgLTI5Miw2
ICsyOTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGludGVybmFsQXBwZW5k
KEpTQ2VsbCopOwogICAgICAgICB2b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUpOworICAgICAg
ICB2b2lkIGludGVybmFsQXBwZW5kKEpTVmFsdWUqKTsKICAgICAgICAgCiAgICAgICAgIEpTX0VY
UE9SVF9QUklWQVRFIHZvaWQgbWVyZ2VPcGFxdWVSb290cygpOwogICAgICAgICAKQEAgLTMyNSw2
ICszMjksOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAgICAgIE1hcmtTdGFja1Ro
cmVhZFNoYXJlZERhdGEmIG1fc2hhcmVkOwogCisgICAgICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJp
bmdJbXBsKiwgSlNWYWx1ZT4gVW5pcXVlU3RyaW5nTWFwOworICAgICAgICBVbmlxdWVTdHJpbmdN
YXAgbV91bmlxdWVTdHJpbmdzOworCiAjaWYgRU5BQkxFKE9CSkVDVF9NQVJLX0xPR0dJTkcpCiAg
ICAgICAgIHVuc2lnbmVkIG1fbG9nQ2hpbGRDb3VudDsKICNlbmRpZgpJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCShyZXZpc2lvbiAxMjE2
ODkpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbERhdGEuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xNzAsNiArMTcwLDcgQEAgSlNHbG9iYWxEYXRhOjpKU0dsb2JhbERh
dGEoR2xvYmFsRGF0YVR5cAogI2lmIENQVShYODYpICYmIEVOQUJMRShKSVQpCiAgICAgLCBtX3Rp
bWVvdXRDb3VudCg1MTIpCiAjZW5kaWYKKyAgICAsIG1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hD
b25zdCgwKQogI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIChFTkFCTEUoQ0xBU1NJQ19JTlRFUlBS
RVRFUikgfHwgRU5BQkxFKExMSU5UKSkKICAgICAsIG1fY2FuVXNlQXNzZW1ibGVyKGVuYWJsZUFz
c2VtYmxlcihleGVjdXRhYmxlQWxsb2NhdG9yKSkKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNHbG9iYWxEYXRhLmgJKHJldmlzaW9uIDEyMTY4OSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsRGF0YS5oCSh3b3JraW5nIGNv
cHkpCkBAIC0zOTUsNiArMzk1LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB1bnNpZ25l
ZCBtX3RpbWVvdXRDb3VudDsKICNlbmRpZgogCisgICAgICAgIHVuc2lnbmVkIG1fbmV3U3RyaW5n
c1NpbmNlTGFzdEhhc2hDb25zdDsKKworICAgICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc19t
aW5OdW1iZXJPZk5ld1N0cmluZ3NUb0hhc2hDb25zdCA9IDEwMDsKKworICAgICAgICBib29sIGhh
dmVFbm91Z2hOZXdTdHJpbmdzVG9IYXNoQ29uc3QoKSB7IHJldHVybiBtX25ld1N0cmluZ3NTaW5j
ZUxhc3RIYXNoQ29uc3QgPiBzX21pbk51bWJlck9mTmV3U3RyaW5nc1RvSGFzaENvbnN0OyB9Cisg
ICAgICAgIHZvaWQgcmVzZXROZXdTdHJpbmdzU2luY2VMYXN0SGFzaENvbnN0KCkgeyBtX25ld1N0
cmluZ3NTaW5jZUxhc3RIYXNoQ29uc3QgPSAwOyB9CisKICNkZWZpbmUgcmVnaXN0ZXJUeXBlZEFy
cmF5RnVuY3Rpb24odHlwZSwgY2FwaXRhbGl6ZWRUeXBlKSBcCiAgICAgICAgIHZvaWQgcmVnaXN0
ZXJUeXBlZEFycmF5RGVzY3JpcHRvcihjb25zdCBjYXBpdGFsaXplZFR5cGUjI0FycmF5KiwgY29u
c3QgVHlwZWRBcnJheURlc2NyaXB0b3ImIGRlc2NyaXB0b3IpIFwKICAgICAgICAgeyBcCkluZGV4
OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHJldmlzaW9uIDEyMTY4
OSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmgJKHdvcmtpbmcg
Y29weSkKQEAgLTY3LDYgKzY3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIGZyaWVuZCBj
bGFzcyBKU0dsb2JhbERhdGE7CiAgICAgICAgIGZyaWVuZCBjbGFzcyBTcGVjaWFsaXplZFRodW5r
SklUOwogICAgICAgICBmcmllbmQgY2xhc3MgSlNSb3BlU3RyaW5nOworICAgICAgICBmcmllbmQg
Y2xhc3MgTWFya1N0YWNrOwogICAgICAgICBmcmllbmQgY2xhc3MgU2xvdFZpc2l0b3I7CiAgICAg
ICAgIGZyaWVuZCBzdHJ1Y3QgVGh1bmtIZWxwZXJzOwogCkBAIC03NywxMiArNzgsMTQgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgcHJpdmF0ZToKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRh
JiBnbG9iYWxEYXRhLCBQYXNzUmVmUHRyPFN0cmluZ0ltcGw+IHZhbHVlKQogICAgICAgICAgICAg
OiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJpbmdTdHJ1Y3R1cmUuZ2V0KCkpCisg
ICAgICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgICAgICwgbV92YWx1ZSh2YWx1ZSkKICAg
ICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgSlNTdHJpbmcoSlNHbG9iYWxEYXRhJiBnbG9i
YWxEYXRhKQogICAgICAgICAgICAgOiBKU0NlbGwoZ2xvYmFsRGF0YSwgZ2xvYmFsRGF0YS5zdHJp
bmdTdHJ1Y3R1cmUuZ2V0KCkpCisgICAgICAgICAgICAsIG1fZmxhZ3MoMCkKICAgICAgICAgewog
ICAgICAgICB9CiAKQEAgLTkxLDcgKzk0LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAg
ICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgQmFzZTo6ZmluaXNoQ3Jl
YXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0aDsKLSAgICAg
ICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpOworICAgICAgICAgICAg
c2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CisgICAgICAgICAgICBnbG9iYWxE
YXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zdCsrOwogICAgICAgICB9CiAKICAgICAg
ICAgdm9pZCBmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEmIGdsb2JhbERhdGEsIHNpemVfdCBs
ZW5ndGgsIHNpemVfdCBjb3N0KQpAQCAtOTksOCArMTAzLDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBBU1NFUlQoIW1fdmFsdWUuaXNOdWxsKCkpOwogICAgICAgICAgICAgQmFzZTo6
ZmluaXNoQ3JlYXRpb24oZ2xvYmFsRGF0YSk7CiAgICAgICAgICAgICBtX2xlbmd0aCA9IGxlbmd0
aDsKLSAgICAgICAgICAgIG1faXM4Qml0ID0gbV92YWx1ZS5pbXBsKCktPmlzOEJpdCgpOworICAg
ICAgICAgICAgc2V0SXM4Qml0KG1fdmFsdWUuaW1wbCgpLT5pczhCaXQoKSk7CiAgICAgICAgICAg
ICBIZWFwOjpoZWFwKHRoaXMpLT5yZXBvcnRFeHRyYU1lbW9yeUNvc3QoY29zdCk7CisgICAgICAg
ICAgICBnbG9iYWxEYXRhLm1fbmV3U3RyaW5nc1NpbmNlTGFzdEhhc2hDb25zdCsrOwogICAgICAg
ICB9CiAKICAgICBwcm90ZWN0ZWQ6CkBAIC0xMDgsNyArMTEzLDggQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEp
OwogICAgICAgICAgICAgbV9sZW5ndGggPSAwOwotICAgICAgICAgICAgbV9pczhCaXQgPSB0cnVl
OworICAgICAgICAgICAgc2V0SXM4Qml0KHRydWUpOworICAgICAgICAgICAgZ2xvYmFsRGF0YS5t
X25ld1N0cmluZ3NTaW5jZUxhc3RIYXNoQ29uc3QrKzsKICAgICAgICAgfQogICAgICAgICAKICAg
ICBwdWJsaWM6CkBAIC0xNjEsMTAgKzE2NywzMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgIHBy
b3RlY3RlZDoKICAgICAgICAgYm9vbCBpc1JvcGUoKSBjb25zdCB7IHJldHVybiBtX3ZhbHVlLmlz
TnVsbCgpOyB9Ci0gICAgICAgIGJvb2wgaXM4Qml0KCkgY29uc3QgeyByZXR1cm4gbV9pczhCaXQ7
IH0KKyAgICAgICAgYm9vbCBpczhCaXQoKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSXM4Qml0
OyB9CisgICAgICAgIHZvaWQgc2V0SXM4Qml0KGJvb2wgZmxhZykKKyAgICAgICAgeworICAgICAg
ICAgICAgaWYgKGZsYWcpCisgICAgICAgICAgICAgICAgbV9mbGFncyB8PSBJczhCaXQ7CisgICAg
ICAgICAgICBlbHNlCisgICAgICAgICAgICAgICAgbV9mbGFncyAmPSB+SXM4Qml0OworICAgICAg
ICB9CisgICAgICAgIGJvb2wgc2hvdWxkVHJ5SGFzaENvbnN0KCk7CisgICAgICAgIGJvb2wgaXNI
YXNoQ29uc3RTaW5nbGV0b24oKSBjb25zdCB7IHJldHVybiBtX2ZsYWdzICYgSXNIYXNoQ29uc3RT
aW5nbGV0b247IH0KKyAgICAgICAgdm9pZCBjbGVhckhhc2hDb25zdFNpbmdsZXRvbigpIHsgbV9m
bGFncyAmPSB+SXNIYXNoQ29uc3RTaW5nbGV0b247IH0KKyAgICAgICAgdm9pZCBzZXRIYXNoQ29u
c3RTaW5nbGV0b24oKSB7IG1fZmxhZ3MgfD0gSXNIYXNoQ29uc3RTaW5nbGV0b247IH0KKyAgICAg
ICAgYm9vbCB0cnlIYXNoQ29uc3RMb2NrKCk7CisgICAgICAgIHZvaWQgcmVsZWFzZUhhc2hDb25z
dExvY2soKTsKKworICAgICAgICB1bnNpZ25lZCBtX2ZsYWdzOworICAgICAgICAKKyAgICAgICAg
ZW51bSB7CisgICAgICAgICAgICBIYXNoQ29uc3RMb2NrID0gMXUgPDwgMiwKKyAgICAgICAgICAg
IElzSGFzaENvbnN0U2luZ2xldG9uID0gMXUgPDwgMSwKKyAgICAgICAgICAgIElzOEJpdCA9IDF1
CisgICAgICAgIH07CiAKICAgICAgICAgLy8gQSBzdHJpbmcgaXMgcmVwcmVzZW50ZWQgZWl0aGVy
IGJ5IGEgVVN0cmluZyBvciBhIHJvcGUgb2YgZmliZXJzLgotICAgICAgICBib29sIG1faXM4Qml0
IDogMTsKICAgICAgICAgdW5zaWduZWQgbV9sZW5ndGg7CiAgICAgICAgIG11dGFibGUgVVN0cmlu
ZyBtX3ZhbHVlOwogCkBAIC0yMzEsNyArMjU3LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlzaENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAg
ICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3RoKCkgKyBzMi0+bGVuZ3RoKCk7Ci0gICAgICAgICAg
ICBtX2lzOEJpdCA9IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKKyAgICAgICAgICAg
IHNldElzOEJpdChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpKTsKICAgICAgICAgICAgIG1f
ZmliZXJzWzBdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMSk7CiAgICAgICAgICAgICBtX2ZpYmVy
c1sxXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczIpOwogICAgICAgICB9CkBAIC0yNDAsNyArMjY2
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIEJhc2U6OmZpbmlz
aENyZWF0aW9uKGdsb2JhbERhdGEpOwogICAgICAgICAgICAgbV9sZW5ndGggPSBzMS0+bGVuZ3Ro
KCkgKyBzMi0+bGVuZ3RoKCkgKyBzMy0+bGVuZ3RoKCk7Ci0gICAgICAgICAgICBtX2lzOEJpdCA9
IChzMS0+aXM4Qml0KCkgJiYgczItPmlzOEJpdCgpICYmICBzMy0+aXM4Qml0KCkpOworICAgICAg
ICAgICAgc2V0SXM4Qml0KHMxLT5pczhCaXQoKSAmJiBzMi0+aXM4Qml0KCkgJiYgIHMzLT5pczhC
aXQoKSk7CiAgICAgICAgICAgICBtX2ZpYmVyc1swXS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywgczEp
OwogICAgICAgICAgICAgbV9maWJlcnNbMV0uc2V0KGdsb2JhbERhdGEsIHRoaXMsIHMyKTsKICAg
ICAgICAgICAgIG1fZmliZXJzWzJdLnNldChnbG9iYWxEYXRhLCB0aGlzLCBzMyk7CkBAIC0yNTUs
NyArMjgxLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgICAgIG1fZmli
ZXJzW2luZGV4XS5zZXQoZ2xvYmFsRGF0YSwgdGhpcywganNTdHJpbmcpOwogICAgICAgICAgICAg
bV9sZW5ndGggKz0ganNTdHJpbmctPm1fbGVuZ3RoOwotICAgICAgICAgICAgbV9pczhCaXQgPSBt
X2lzOEJpdCAmJiBqc1N0cmluZy0+bV9pczhCaXQ7CisgICAgICAgICAgICBzZXRJczhCaXQoaXM4
Qml0KCkgJiYganNTdHJpbmctPmlzOEJpdCgpKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRp
YyBKU1JvcGVTdHJpbmcqIGNyZWF0ZU51bGwoSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQo=
</data>
<flag name="review"
          id="158939"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>