<html><head><title>/src/appl/gssftp/</title></head>
<body>
<h2>/src/appl/gssftp/</h2>
<ul>
<li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>../</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/.Sanitize?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>.Sanitize</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/ChangeLog?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>ChangeLog</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/Makefile.in?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>Makefile.in</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/README.gssftp?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>README.gssftp</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/arpa/?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>arpa</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/configure.in?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>configure.in</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/ftp/?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>ftp</a></li>
  <li><a href='/cgit/gd/public_git/krb5.git/plain/src/appl/gssftp/ftpd/?id=70585b725f15e984d0c08ce4c1540f09a8c711c6'>ftpd</a></li>
 </ul>
</body></html>
ion>
<option value='f20-3.14-ac100'>f20-3.14-ac100</option>
<option value='f21-3.16-tegra'>f21-3.16-tegra</option>
<option value='f21-3.17-tegra'>f21-3.17-tegra</option>
<option value='f21-3.18-armada'>f21-3.18-armada</option>
<option value='f21-3.18-tegra'>f21-3.18-tegra</option>
<option value='for-fedora'>for-fedora</option>
<option value='master' selected='selected'>master</option>
<option value='master-tegra'>master-tegra</option>
</select> <input type='submit' value='switch'/></form></td></tr>
<tr><td class='sub'>kwizart's kernel repository</td><td class='sub right'>Nicolas Chauvet</td></tr></table>
<table class='tabs'><tr><td>
<a href='/cgit/kwizart/public_git/kernel.git/'>summary</a><a href='/cgit/kwizart/public_git/kernel.git/refs/?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>refs</a><a href='/cgit/kwizart/public_git/kernel.git/log/kernel-arm64.patch'>log</a><a class='active' href='/cgit/kwizart/public_git/kernel.git/tree/kernel-arm64.patch?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>tree</a><a href='/cgit/kwizart/public_git/kernel.git/commit/kernel-arm64.patch?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>commit</a><a href='/cgit/kwizart/public_git/kernel.git/diff/kernel-arm64.patch?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>diff</a><a href='/cgit/kwizart/public_git/kernel.git/stats/kernel-arm64.patch'>stats</a></td><td class='form'><form class='right' method='get' action='/cgit/kwizart/public_git/kernel.git/log/kernel-arm64.patch'>
<input type='hidden' name='id' value='dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'/><select name='qt'>
<option value='grep'>log msg</option>
<option value='author'>author</option>
<option value='committer'>committer</option>
<option value='range'>range</option>
</select>
<input class='txt' type='search' size='10' name='q' value=''/>
<input type='submit' value='search'/>
</form>
</td></tr></table>
<div class='path'>path: <a href='/cgit/kwizart/public_git/kernel.git/tree/?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>root</a>/<a href='/cgit/kwizart/public_git/kernel.git/tree/kernel-arm64.patch?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>kernel-arm64.patch</a></div><div class='content'>blob: 05249a97eb41d146e9112c850acdba740cc7b7c6 (<a href='/cgit/kwizart/public_git/kernel.git/plain/kernel-arm64.patch?id=dc80ed2fd10c543bee324e97cef85a8ee0d5fd2a'>plain</a>)
<table summary='blob content' class='blob'>
<tr><td class='linenumbers'><pre><a id='n1' href='#n1'>1</a>
<a id='n2' href='#n2'>2</a>
<a id='n3' href='#n3'>3</a>
<a id='n4' href='#n4'>4</a>
<a id='n5' href='#n5'>5</a>
<a id='n6' href='#n6'>6</a>
<a id='n7' href='#n7'>7</a>
<a id='n8' href='#n8'>8</a>
<a id='n9' href='#n9'>9</a>
<a id='n10' href='#n10'>10</a>
<a id='n11' href='#n11'>11</a>
<a id='n12' href='#n12'>12</a>
<a id='n13' href='#n13'>13</a>
<a id='n14' href='#n14'>14</a>
<a id='n15' href='#n15'>15</a>
<a id='n16' href='#n16'>16</a>
<a id='n17' href='#n17'>17</a>
<a id='n18' href='#n18'>18</a>
<a id='n19' href='#n19'>19</a>
<a id='n20' href='#n20'>20</a>
<a id='n21' href='#n21'>21</a>
<a id='n22' href='#n22'>22</a>
<a id='n23' href='#n23'>23</a>
<a id='n24' href='#n24'>24</a>
<a id='n25' href='#n25'>25</a>
<a id='n26' href='#n26'>26</a>
<a id='n27' href='#n27'>27</a>
<a id='n28' href='#n28'>28</a>
<a id='n29' href='#n29'>29</a>
<a id='n30' href='#n30'>30</a>
<a id='n31' href='#n31'>31</a>
<a id='n32' href='#n32'>32</a>
<a id='n33' href='#n33'>33</a>
<a id='n34' href='#n34'>34</a>
<a id='n35' href='#n35'>35</a>
<a id='n36' href='#n36'>36</a>
<a id='n37' href='#n37'>37</a>
<a id='n38' href='#n38'>38</a>
<a id='n39' href='#n39'>39</a>
<a id='n40' href='#n40'>40</a>
<a id='n41' href='#n41'>41</a>
<a id='n42' href='#n42'>42</a>
<a id='n43' href='#n43'>43</a>
<a id='n44' href='#n44'>44</a>
<a id='n45' href='#n45'>45</a>
<a id='n46' href='#n46'>46</a>
<a id='n47' href='#n47'>47</a>
<a id='n48' href='#n48'>48</a>
<a id='n49' href='#n49'>49</a>
<a id='n50' href='#n50'>50</a>
<a id='n51' href='#n51'>51</a>
<a id='n52' href='#n52'>52</a>
<a id='n53' href='#n53'>53</a>
<a id='n54' href='#n54'>54</a>
<a id='n55' href='#n55'>55</a>
<a id='n56' href='#n56'>56</a>
<a id='n57' href='#n57'>57</a>
<a id='n58' href='#n58'>58</a>
<a id='n59' href='#n59'>59</a>
<a id='n60' href='#n60'>60</a>
<a id='n61' href='#n61'>61</a>
<a id='n62' href='#n62'>62</a>
<a id='n63' href='#n63'>63</a>
<a id='n64' href='#n64'>64</a>
<a id='n65' href='#n65'>65</a>
<a id='n66' href='#n66'>66</a>
<a id='n67' href='#n67'>67</a>
<a id='n68' href='#n68'>68</a>
<a id='n69' href='#n69'>69</a>
<a id='n70' href='#n70'>70</a>
<a id='n71' href='#n71'>71</a>
<a id='n72' href='#n72'>72</a>
<a id='n73' href='#n73'>73</a>
<a id='n74' href='#n74'>74</a>
<a id='n75' href='#n75'>75</a>
<a id='n76' href='#n76'>76</a>
<a id='n77' href='#n77'>77</a>
<a id='n78' href='#n78'>78</a>
<a id='n79' href='#n79'>79</a>
<a id='n80' href='#n80'>80</a>
<a id='n81' href='#n81'>81</a>
<a id='n82' href='#n82'>82</a>
<a id='n83' href='#n83'>83</a>
<a id='n84' href='#n84'>84</a>
<a id='n85' href='#n85'>85</a>
<a id='n86' href='#n86'>86</a>
<a id='n87' href='#n87'>87</a>
<a id='n88' href='#n88'>88</a>
<a id='n89' href='#n89'>89</a>
<a id='n90' href='#n90'>90</a>
<a id='n91' href='#n91'>91</a>
<a id='n92' href='#n92'>92</a>
<a id='n93' href='#n93'>93</a>
<a id='n94' href='#n94'>94</a>
<a id='n95' href='#n95'>95</a>
<a id='n96' href='#n96'>96</a>
<a id='n97' href='#n97'>97</a>
<a id='n98' href='#n98'>98</a>
<a id='n99' href='#n99'>99</a>
<a id='n100' href='#n100'>100</a>
<a id='n101' href='#n101'>101</a>
<a id='n102' href='#n102'>102</a>
<a id='n103' href='#n103'>103</a>
<a id='n104' href='#n104'>104</a>
<a id='n105' href='#n105'>105</a>
<a id='n106' href='#n106'>106</a>
<a id='n107' href='#n107'>107</a>
<a id='n108' href='#n108'>108</a>
<a id='n109' href='#n109'>109</a>
<a id='n110' href='#n110'>110</a>
<a id='n111' href='#n111'>111</a>
<a id='n112' href='#n112'>112</a>
<a id='n113' href='#n113'>113</a>
<a id='n114' href='#n114'>114</a>
<a id='n115' href='#n115'>115</a>
<a id='n116' href='#n116'>116</a>
<a id='n117' href='#n117'>117</a>
<a id='n118' href='#n118'>118</a>
<a id='n119' href='#n119'>119</a>
<a id='n120' href='#n120'>120</a>
<a id='n121' href='#n121'>121</a>
<a id='n122' href='#n122'>122</a>
<a id='n123' href='#n123'>123</a>
<a id='n124' href='#n124'>124</a>
<a id='n125' href='#n125'>125</a>
<a id='n126' href='#n126'>126</a>
<a id='n127' href='#n127'>127</a>
<a id='n128' href='#n128'>128</a>
<a id='n129' href='#n129'>129</a>
<a id='n130' href='#n130'>130</a>
<a id='n131' href='#n131'>131</a>
<a id='n132' href='#n132'>132</a>
<a id='n133' href='#n133'>133</a>
<a id='n134' href='#n134'>134</a>
<a id='n135' href='#n135'>135</a>
<a id='n136' href='#n136'>136</a>
<a id='n137' href='#n137'>137</a>
<a id='n138' href='#n138'>138</a>
<a id='n139' href='#n139'>139</a>
<a id='n140' href='#n140'>140</a>
<a id='n141' href='#n141'>141</a>
<a id='n142' href='#n142'>142</a>
<a id='n143' href='#n143'>143</a>
<a id='n144' href='#n144'>144</a>
<a id='n145' href='#n145'>145</a>
<a id='n146' href='#n146'>146</a>
<a id='n147' href='#n147'>147</a>
<a id='n148' href='#n148'>148</a>
<a id='n149' href='#n149'>149</a>
<a id='n150' href='#n150'>150</a>
<a id='n151' href='#n151'>151</a>
<a id='n152' href='#n152'>152</a>
<a id='n153' href='#n153'>153</a>
<a id='n154' href='#n154'>154</a>
<a id='n155' href='#n155'>155</a>
<a id='n156' href='#n156'>156</a>
<a id='n157' href='#n157'>157</a>
<a id='n158' href='#n158'>158</a>
<a id='n159' href='#n159'>159</a>
<a id='n160' href='#n160'>160</a>
<a id='n161' href='#n161'>161</a>
<a id='n162' href='#n162'>162</a>
<a id='n163' href='#n163'>163</a>
<a id='n164' href='#n164'>164</a>
<a id='n165' href='#n165'>165</a>
<a id='n166' href='#n166'>166</a>
<a id='n167' href='#n167'>167</a>
<a id='n168' href='#n168'>168</a>
<a id='n169' href='#n169'>169</a>
<a id='n170' href='#n170'>170</a>
<a id='n171' href='#n171'>171</a>
<a id='n172' href='#n172'>172</a>
<a id='n173' href='#n173'>173</a>
<a id='n174' href='#n174'>174</a>
<a id='n175' href='#n175'>175</a>
<a id='n176' href='#n176'>176</a>
<a id='n177' href='#n177'>177</a>
<a id='n178' href='#n178'>178</a>
<a id='n179' href='#n179'>179</a>
<a id='n180' href='#n180'>180</a>
<a id='n181' href='#n181'>181</a>
<a id='n182' href='#n182'>182</a>
<a id='n183' href='#n183'>183</a>
<a id='n184' href='#n184'>184</a>
<a id='n185' href='#n185'>185</a>
<a id='n186' href='#n186'>186</a>
<a id='n187' href='#n187'>187</a>
<a id='n188' href='#n188'>188</a>
<a id='n189' href='#n189'>189</a>
<a id='n190' href='#n190'>190</a>
<a id='n191' href='#n191'>191</a>
<a id='n192' href='#n192'>192</a>
<a id='n193' href='#n193'>193</a>
<a id='n194' href='#n194'>194</a>
<a id='n195' href='#n195'>195</a>
<a id='n196' href='#n196'>196</a>
<a id='n197' href='#n197'>197</a>
<a id='n198' href='#n198'>198</a>
<a id='n199' href='#n199'>199</a>
<a id='n200' href='#n200'>200</a>
<a id='n201' href='#n201'>201</a>
<a id='n202' href='#n202'>202</a>
<a id='n203' href='#n203'>203</a>
<a id='n204' href='#n204'>204</a>
<a id='n205' href='#n205'>205</a>
<a id='n206' href='#n206'>206</a>
<a id='n207' href='#n207'>207</a>
<a id='n208' href='#n208'>208</a>
<a id='n209' href='#n209'>209</a>
<a id='n210' href='#n210'>210</a>
<a id='n211' href='#n211'>211</a>
<a id='n212' href='#n212'>212</a>
<a id='n213' href='#n213'>213</a>
<a id='n214' href='#n214'>214</a>
<a id='n215' href='#n215'>215</a>
<a id='n216' href='#n216'>216</a>
<a id='n217' href='#n217'>217</a>
<a id='n218' href='#n218'>218</a>
<a id='n219' href='#n219'>219</a>
<a id='n220' href='#n220'>220</a>
<a id='n221' href='#n221'>221</a>
<a id='n222' href='#n222'>222</a>
<a id='n223' href='#n223'>223</a>
<a id='n224' href='#n224'>224</a>
<a id='n225' href='#n225'>225</a>
<a id='n226' href='#n226'>226</a>
<a id='n227' href='#n227'>227</a>
<a id='n228' href='#n228'>228</a>
<a id='n229' href='#n229'>229</a>
<a id='n230' href='#n230'>230</a>
<a id='n231' href='#n231'>231</a>
<a id='n232' href='#n232'>232</a>
<a id='n233' href='#n233'>233</a>
<a id='n234' href='#n234'>234</a>
<a id='n235' href='#n235'>235</a>
<a id='n236' href='#n236'>236</a>
<a id='n237' href='#n237'>237</a>
<a id='n238' href='#n238'>238</a>
<a id='n239' href='#n239'>239</a>
<a id='n240' href='#n240'>240</a>
<a id='n241' href='#n241'>241</a>
<a id='n242' href='#n242'>242</a>
<a id='n243' href='#n243'>243</a>
<a id='n244' href='#n244'>244</a>
<a id='n245' href='#n245'>245</a>
<a id='n246' href='#n246'>246</a>
<a id='n247' href='#n247'>247</a>
<a id='n248' href='#n248'>248</a>
<a id='n249' href='#n249'>249</a>
<a id='n250' href='#n250'>250</a>
<a id='n251' href='#n251'>251</a>
<a id='n252' href='#n252'>252</a>
<a id='n253' href='#n253'>253</a>
<a id='n254' href='#n254'>254</a>
<a id='n255' href='#n255'>255</a>
<a id='n256' href='#n256'>256</a>
<a id='n257' href='#n257'>257</a>
<a id='n258' href='#n258'>258</a>
<a id='n259' href='#n259'>259</a>
<a id='n260' href='#n260'>260</a>
<a id='n261' href='#n261'>261</a>
<a id='n262' href='#n262'>262</a>
<a id='n263' href='#n263'>263</a>
<a id='n264' href='#n264'>264</a>
<a id='n265' href='#n265'>265</a>
<a id='n266' href='#n266'>266</a>
<a id='n267' href='#n267'>267</a>
<a id='n268' href='#n268'>268</a>
<a id='n269' href='#n269'>269</a>
<a id='n270' href='#n270'>270</a>
<a id='n271' href='#n271'>271</a>
<a id='n272' href='#n272'>272</a>
<a id='n273' href='#n273'>273</a>
<a id='n274' href='#n274'>274</a>
<a id='n275' href='#n275'>275</a>
<a id='n276' href='#n276'>276</a>
<a id='n277' href='#n277'>277</a>
<a id='n278' href='#n278'>278</a>
<a id='n279' href='#n279'>279</a>
<a id='n280' href='#n280'>280</a>
<a id='n281' href='#n281'>281</a>
<a id='n282' href='#n282'>282</a>
<a id='n283' href='#n283'>283</a>
<a id='n284' href='#n284'>284</a>
<a id='n285' href='#n285'>285</a>
<a id='n286' href='#n286'>286</a>
<a id='n287' href='#n287'>287</a>
<a id='n288' href='#n288'>288</a>
<a id='n289' href='#n289'>289</a>
<a id='n290' href='#n290'>290</a>
<a id='n291' href='#n291'>291</a>
<a id='n292' href='#n292'>292</a>
<a id='n293' href='#n293'>293</a>
<a id='n294' href='#n294'>294</a>
<a id='n295' href='#n295'>295</a>
<a id='n296' href='#n296'>296</a>
<a id='n297' href='#n297'>297</a>
<a id='n298' href='#n298'>298</a>
<a id='n299' href='#n299'>299</a>
<a id='n300' href='#n300'>300</a>
<a id='n301' href='#n301'>301</a>
<a id='n302' href='#n302'>302</a>
<a id='n303' href='#n303'>303</a>
<a id='n304' href='#n304'>304</a>
<a id='n305' href='#n305'>305</a>
<a id='n306' href='#n306'>306</a>
<a id='n307' href='#n307'>307</a>
<a id='n308' href='#n308'>308</a>
<a id='n309' href='#n309'>309</a>
<a id='n310' href='#n310'>310</a>
<a id='n311' href='#n311'>311</a>
<a id='n312' href='#n312'>312</a>
<a id='n313' href='#n313'>313</a>
<a id='n314' href='#n314'>314</a>
<a id='n315' href='#n315'>315</a>
<a id='n316' href='#n316'>316</a>
<a id='n317' href='#n317'>317</a>
<a id='n318' href='#n318'>318</a>
<a id='n319' href='#n319'>319</a>
<a id='n320' href='#n320'>320</a>
<a id='n321' href='#n321'>321</a>
<a id='n322' href='#n322'>322</a>
<a id='n323' href='#n323'>323</a>
<a id='n324' href='#n324'>324</a>
<a id='n325' href='#n325'>325</a>
<a id='n326' href='#n326'>326</a>
<a id='n327' href='#n327'>327</a>
<a id='n328' href='#n328'>328</a>
<a id='n329' href='#n329'>329</a>
<a id='n330' href='#n330'>330</a>
<a id='n331' href='#n331'>331</a>
<a id='n332' href='#n332'>332</a>
<a id='n333' href='#n333'>333</a>
<a id='n334' href='#n334'>334</a>
<a id='n335' href='#n335'>335</a>
<a id='n336' href='#n336'>336</a>
<a id='n337' href='#n337'>337</a>
<a id='n338' href='#n338'>338</a>
<a id='n339' href='#n339'>339</a>
<a id='n340' href='#n340'>340</a>
<a id='n341' href='#n341'>341</a>
<a id='n342' href='#n342'>342</a>
<a id='n343' href='#n343'>343</a>
<a id='n344' href='#n344'>344</a>
<a id='n345' href='#n345'>345</a>
<a id='n346' href='#n346'>346</a>
<a id='n347' href='#n347'>347</a>
<a id='n348' href='#n348'>348</a>
<a id='n349' href='#n349'>349</a>
<a id='n350' href='#n350'>350</a>
<a id='n351' href='#n351'>351</a>
<a id='n352' href='#n352'>352</a>
<a id='n353' href='#n353'>353</a>
<a id='n354' href='#n354'>354</a>
<a id='n355' href='#n355'>355</a>
<a id='n356' href='#n356'>356</a>
<a id='n357' href='#n357'>357</a>
<a id='n358' href='#n358'>358</a>
<a id='n359' href='#n359'>359</a>
<a id='n360' href='#n360'>360</a>
<a id='n361' href='#n361'>361</a>
<a id='n362' href='#n362'>362</a>
<a id='n363' href='#n363'>363</a>
<a id='n364' href='#n364'>364</a>
<a id='n365' href='#n365'>365</a>
<a id='n366' href='#n366'>366</a>
<a id='n367' href='#n367'>367</a>
<a id='n368' href='#n368'>368</a>
<a id='n369' href='#n369'>369</a>
<a id='n370' href='#n370'>370</a>
<a id='n371' href='#n371'>371</a>
<a id='n372' href='#n372'>372</a>
<a id='n373' href='#n373'>373</a>
<a id='n374' href='#n374'>374</a>
<a id='n375' href='#n375'>375</a>
<a id='n376' href='#n376'>376</a>
<a id='n377' href='#n377'>377</a>
<a id='n378' href='#n378'>378</a>
<a id='n379' href='#n379'>379</a>
<a id='n380' href='#n380'>380</a>
<a id='n381' href='#n381'>381</a>
<a id='n382' href='#n382'>382</a>
<a id='n383' href='#n383'>383</a>
<a id='n384' href='#n384'>384</a>
<a id='n385' href='#n385'>385</a>
<a id='n386' href='#n386'>386</a>
<a id='n387' href='#n387'>387</a>
<a id='n388' href='#n388'>388</a>
<a id='n389' href='#n389'>389</a>
<a id='n390' href='#n390'>390</a>
<a id='n391' href='#n391'>391</a>
<a id='n392' href='#n392'>392</a>
<a id='n393' href='#n393'>393</a>
<a id='n394' href='#n394'>394</a>
<a id='n395' href='#n395'>395</a>
<a id='n396' href='#n396'>396</a>
<a id='n397' href='#n397'>397</a>
<a id='n398' href='#n398'>398</a>
<a id='n399' href='#n399'>399</a>
<a id='n400' href='#n400'>400</a>
<a id='n401' href='#n401'>401</a>
<a id='n402' href='#n402'>402</a>
<a id='n403' href='#n403'>403</a>
<a id='n404' href='#n404'>404</a>
<a id='n405' href='#n405'>405</a>
<a id='n406' href='#n406'>406</a>
<a id='n407' href='#n407'>407</a>
<a id='n408' href='#n408'>408</a>
<a id='n409' href='#n409'>409</a>
<a id='n410' href='#n410'>410</a>
<a id='n411' href='#n411'>411</a>
<a id='n412' href='#n412'>412</a>
<a id='n413' href='#n413'>413</a>
<a id='n414' href='#n414'>414</a>
<a id='n415' href='#n415'>415</a>
<a id='n416' href='#n416'>416</a>
<a id='n417' href='#n417'>417</a>
<a id='n418' href='#n418'>418</a>
<a id='n419' href='#n419'>419</a>
<a id='n420' href='#n420'>420</a>
<a id='n421' href='#n421'>421</a>
<a id='n422' href='#n422'>422</a>
<a id='n423' href='#n423'>423</a>
<a id='n424' href='#n424'>424</a>
<a id='n425' href='#n425'>425</a>
<a id='n426' href='#n426'>426</a>
<a id='n427' href='#n427'>427</a>
<a id='n428' href='#n428'>428</a>
<a id='n429' href='#n429'>429</a>
<a id='n430' href='#n430'>430</a>
<a id='n431' href='#n431'>431</a>
<a id='n432' href='#n432'>432</a>
<a id='n433' href='#n433'>433</a>
<a id='n434' href='#n434'>434</a>
<a id='n435' href='#n435'>435</a>
<a id='n436' href='#n436'>436</a>
<a id='n437' href='#n437'>437</a>
<a id='n438' href='#n438'>438</a>
<a id='n439' href='#n439'>439</a>
<a id='n440' href='#n440'>440</a>
<a id='n441' href='#n441'>441</a>
<a id='n442' href='#n442'>442</a>
<a id='n443' href='#n443'>443</a>
<a id='n444' href='#n444'>444</a>
<a id='n445' href='#n445'>445</a>
<a id='n446' href='#n446'>446</a>
<a id='n447' href='#n447'>447</a>
<a id='n448' href='#n448'>448</a>
<a id='n449' href='#n449'>449</a>
<a id='n450' href='#n450'>450</a>
<a id='n451' href='#n451'>451</a>
<a id='n452' href='#n452'>452</a>
<a id='n453' href='#n453'>453</a>
<a id='n454' href='#n454'>454</a>
<a id='n455' href='#n455'>455</a>
<a id='n456' href='#n456'>456</a>
<a id='n457' href='#n457'>457</a>
<a id='n458' href='#n458'>458</a>
<a id='n459' href='#n459'>459</a>
<a id='n460' href='#n460'>460</a>
<a id='n461' href='#n461'>461</a>
<a id='n462' href='#n462'>462</a>
<a id='n463' href='#n463'>463</a>
<a id='n464' href='#n464'>464</a>
<a id='n465' href='#n465'>465</a>
<a id='n466' href='#n466'>466</a>
<a id='n467' href='#n467'>467</a>
<a id='n468' href='#n468'>468</a>
<a id='n469' href='#n469'>469</a>
<a id='n470' href='#n470'>470</a>
<a id='n471' href='#n471'>471</a>
<a id='n472' href='#n472'>472</a>
<a id='n473' href='#n473'>473</a>
<a id='n474' href='#n474'>474</a>
<a id='n475' href='#n475'>475</a>
<a id='n476' href='#n476'>476</a>
<a id='n477' href='#n477'>477</a>
<a id='n478' href='#n478'>478</a>
<a id='n479' href='#n479'>479</a>
<a id='n480' href='#n480'>480</a>
<a id='n481' href='#n481'>481</a>
<a id='n482' href='#n482'>482</a>
<a id='n483' href='#n483'>483</a>
<a id='n484' href='#n484'>484</a>
<a id='n485' href='#n485'>485</a>
<a id='n486' href='#n486'>486</a>
<a id='n487' href='#n487'>487</a>
<a id='n488' href='#n488'>488</a>
<a id='n489' href='#n489'>489</a>
<a id='n490' href='#n490'>490</a>
<a id='n491' href='#n491'>491</a>
<a id='n492' href='#n492'>492</a>
<a id='n493' href='#n493'>493</a>
<a id='n494' href='#n494'>494</a>
<a id='n495' href='#n495'>495</a>
<a id='n496' href='#n496'>496</a>
<a id='n497' href='#n497'>497</a>
<a id='n498' href='#n498'>498</a>
<a id='n499' href='#n499'>499</a>
<a id='n500' href='#n500'>500</a>
<a id='n501' href='#n501'>501</a>
<a id='n502' href='#n502'>502</a>
<a id='n503' href='#n503'>503</a>
<a id='n504' href='#n504'>504</a>
<a id='n505' href='#n505'>505</a>
<a id='n506' href='#n506'>506</a>
<a id='n507' href='#n507'>507</a>
<a id='n508' href='#n508'>508</a>
<a id='n509' href='#n509'>509</a>
<a id='n510' href='#n510'>510</a>
<a id='n511' href='#n511'>511</a>
<a id='n512' href='#n512'>512</a>
<a id='n513' href='#n513'>513</a>
<a id='n514' href='#n514'>514</a>
<a id='n515' href='#n515'>515</a>
<a id='n516' href='#n516'>516</a>
<a id='n517' href='#n517'>517</a>
<a id='n518' href='#n518'>518</a>
<a id='n519' href='#n519'>519</a>
<a id='n520' href='#n520'>520</a>
<a id='n521' href='#n521'>521</a>
<a id='n522' href='#n522'>522</a>
<a id='n523' href='#n523'>523</a>
<a id='n524' href='#n524'>524</a>
<a id='n525' href='#n525'>525</a>
<a id='n526' href='#n526'>526</a>
<a id='n527' href='#n527'>527</a>
<a id='n528' href='#n528'>528</a>
<a id='n529' href='#n529'>529</a>
<a id='n530' href='#n530'>530</a>
<a id='n531' href='#n531'>531</a>
<a id='n532' href='#n532'>532</a>
<a id='n533' href='#n533'>533</a>
<a id='n534' href='#n534'>534</a>
<a id='n535' href='#n535'>535</a>
<a id='n536' href='#n536'>536</a>
<a id='n537' href='#n537'>537</a>
<a id='n538' href='#n538'>538</a>
<a id='n539' href='#n539'>539</a>
<a id='n540' href='#n540'>540</a>
<a id='n541' href='#n541'>541</a>
<a id='n542' href='#n542'>542</a>
<a id='n543' href='#n543'>543</a>
<a id='n544' href='#n544'>544</a>
<a id='n545' href='#n545'>545</a>
<a id='n546' href='#n546'>546</a>
<a id='n547' href='#n547'>547</a>
<a id='n548' href='#n548'>548</a>
<a id='n549' href='#n549'>549</a>
<a id='n550' href='#n550'>550</a>
<a id='n551' href='#n551'>551</a>
<a id='n552' href='#n552'>552</a>
<a id='n553' href='#n553'>553</a>
<a id='n554' href='#n554'>554</a>
<a id='n555' href='#n555'>555</a>
<a id='n556' href='#n556'>556</a>
<a id='n557' href='#n557'>557</a>
<a id='n558' href='#n558'>558</a>
<a id='n559' href='#n559'>559</a>
<a id='n560' href='#n560'>560</a>
<a id='n561' href='#n561'>561</a>
<a id='n562' href='#n562'>562</a>
<a id='n563' href='#n563'>563</a>
<a id='n564' href='#n564'>564</a>
<a id='n565' href='#n565'>565</a>
<a id='n566' href='#n566'>566</a>
<a id='n567' href='#n567'>567</a>
<a id='n568' href='#n568'>568</a>
<a id='n569' href='#n569'>569</a>
<a id='n570' href='#n570'>570</a>
<a id='n571' href='#n571'>571</a>
<a id='n572' href='#n572'>572</a>
<a id='n573' href='#n573'>573</a>
<a id='n574' href='#n574'>574</a>
<a id='n575' href='#n575'>575</a>
<a id='n576' href='#n576'>576</a>
<a id='n577' href='#n577'>577</a>
<a id='n578' href='#n578'>578</a>
<a id='n579' href='#n579'>579</a>
<a id='n580' href='#n580'>580</a>
<a id='n581' href='#n581'>581</a>
<a id='n582' href='#n582'>582</a>
<a id='n583' href='#n583'>583</a>
<a id='n584' href='#n584'>584</a>
<a id='n585' href='#n585'>585</a>
<a id='n586' href='#n586'>586</a>
<a id='n587' href='#n587'>587</a>
<a id='n588' href='#n588'>588</a>
<a id='n589' href='#n589'>589</a>
<a id='n590' href='#n590'>590</a>
<a id='n591' href='#n591'>591</a>
<a id='n592' href='#n592'>592</a>
<a id='n593' href='#n593'>593</a>
<a id='n594' href='#n594'>594</a>
<a id='n595' href='#n595'>595</a>
<a id='n596' href='#n596'>596</a>
<a id='n597' href='#n597'>597</a>
<a id='n598' href='#n598'>598</a>
<a id='n599' href='#n599'>599</a>
<a id='n600' href='#n600'>600</a>
<a id='n601' href='#n601'>601</a>
<a id='n602' href='#n602'>602</a>
<a id='n603' href='#n603'>603</a>
<a id='n604' href='#n604'>604</a>
<a id='n605' href='#n605'>605</a>
<a id='n606' href='#n606'>606</a>
<a id='n607' href='#n607'>607</a>
<a id='n608' href='#n608'>608</a>
<a id='n609' href='#n609'>609</a>
<a id='n610' href='#n610'>610</a>
<a id='n611' href='#n611'>611</a>
<a id='n612' href='#n612'>612</a>
<a id='n613' href='#n613'>613</a>
<a id='n614' href='#n614'>614</a>
<a id='n615' href='#n615'>615</a>
<a id='n616' href='#n616'>616</a>
<a id='n617' href='#n617'>617</a>
<a id='n618' href='#n618'>618</a>
<a id='n619' href='#n619'>619</a>
<a id='n620' href='#n620'>620</a>
<a id='n621' href='#n621'>621</a>
<a id='n622' href='#n622'>622</a>
<a id='n623' href='#n623'>623</a>
<a id='n624' href='#n624'>624</a>
<a id='n625' href='#n625'>625</a>
<a id='n626' href='#n626'>626</a>
<a id='n627' href='#n627'>627</a>
<a id='n628' href='#n628'>628</a>
<a id='n629' href='#n629'>629</a>
<a id='n630' href='#n630'>630</a>
<a id='n631' href='#n631'>631</a>
<a id='n632' href='#n632'>632</a>
<a id='n633' href='#n633'>633</a>
<a id='n634' href='#n634'>634</a>
<a id='n635' href='#n635'>635</a>
<a id='n636' href='#n636'>636</a>
<a id='n637' href='#n637'>637</a>
<a id='n638' href='#n638'>638</a>
<a id='n639' href='#n639'>639</a>
<a id='n640' href='#n640'>640</a>
<a id='n641' href='#n641'>641</a>
<a id='n642' href='#n642'>642</a>
<a id='n643' href='#n643'>643</a>
<a id='n644' href='#n644'>644</a>
<a id='n645' href='#n645'>645</a>
<a id='n646' href='#n646'>646</a>
<a id='n647' href='#n647'>647</a>
<a id='n648' href='#n648'>648</a>
<a id='n649' href='#n649'>649</a>
<a id='n650' href='#n650'>650</a>
<a id='n651' href='#n651'>651</a>
<a id='n652' href='#n652'>652</a>
<a id='n653' href='#n653'>653</a>
<a id='n654' href='#n654'>654</a>
<a id='n655' href='#n655'>655</a>
<a id='n656' href='#n656'>656</a>
<a id='n657' href='#n657'>657</a>
<a id='n658' href='#n658'>658</a>
<a id='n659' href='#n659'>659</a>
<a id='n660' href='#n660'>660</a>
<a id='n661' href='#n661'>661</a>
<a id='n662' href='#n662'>662</a>
<a id='n663' href='#n663'>663</a>
<a id='n664' href='#n664'>664</a>
<a id='n665' href='#n665'>665</a>
<a id='n666' href='#n666'>666</a>
<a id='n667' href='#n667'>667</a>
<a id='n668' href='#n668'>668</a>
<a id='n669' href='#n669'>669</a>
<a id='n670' href='#n670'>670</a>
<a id='n671' href='#n671'>671</a>
<a id='n672' href='#n672'>672</a>
<a id='n673' href='#n673'>673</a>
<a id='n674' href='#n674'>674</a>
<a id='n675' href='#n675'>675</a>
<a id='n676' href='#n676'>676</a>
<a id='n677' href='#n677'>677</a>
<a id='n678' href='#n678'>678</a>
<a id='n679' href='#n679'>679</a>
<a id='n680' href='#n680'>680</a>
<a id='n681' href='#n681'>681</a>
<a id='n682' href='#n682'>682</a>
<a id='n683' href='#n683'>683</a>
<a id='n684' href='#n684'>684</a>
<a id='n685' href='#n685'>685</a>
<a id='n686' href='#n686'>686</a>
<a id='n687' href='#n687'>687</a>
<a id='n688' href='#n688'>688</a>
<a id='n689' href='#n689'>689</a>
<a id='n690' href='#n690'>690</a>
<a id='n691' href='#n691'>691</a>
<a id='n692' href='#n692'>692</a>
<a id='n693' href='#n693'>693</a>
<a id='n694' href='#n694'>694</a>
<a id='n695' href='#n695'>695</a>
<a id='n696' href='#n696'>696</a>
<a id='n697' href='#n697'>697</a>
<a id='n698' href='#n698'>698</a>
<a id='n699' href='#n699'>699</a>
<a id='n700' href='#n700'>700</a>
<a id='n701' href='#n701'>701</a>
<a id='n702' href='#n702'>702</a>
<a id='n703' href='#n703'>703</a>
<a id='n704' href='#n704'>704</a>
<a id='n705' href='#n705'>705</a>
<a id='n706' href='#n706'>706</a>
<a id='n707' href='#n707'>707</a>
<a id='n708' href='#n708'>708</a>
<a id='n709' href='#n709'>709</a>
<a id='n710' href='#n710'>710</a>
<a id='n711' href='#n711'>711</a>
<a id='n712' href='#n712'>712</a>
<a id='n713' href='#n713'>713</a>
<a id='n714' href='#n714'>714</a>
<a id='n715' href='#n715'>715</a>
<a id='n716' href='#n716'>716</a>
<a id='n717' href='#n717'>717</a>
<a id='n718' href='#n718'>718</a>
<a id='n719' href='#n719'>719</a>
<a id='n720' href='#n720'>720</a>
<a id='n721' href='#n721'>721</a>
<a id='n722' href='#n722'>722</a>
<a id='n723' href='#n723'>723</a>
<a id='n724' href='#n724'>724</a>
<a id='n725' href='#n725'>725</a>
<a id='n726' href='#n726'>726</a>
<a id='n727' href='#n727'>727</a>
<a id='n728' href='#n728'>728</a>
<a id='n729' href='#n729'>729</a>
<a id='n730' href='#n730'>730</a>
<a id='n731' href='#n731'>731</a>
<a id='n732' href='#n732'>732</a>
<a id='n733' href='#n733'>733</a>
<a id='n734' href='#n734'>734</a>
<a id='n735' href='#n735'>735</a>
<a id='n736' href='#n736'>736</a>
<a id='n737' href='#n737'>737</a>
<a id='n738' href='#n738'>738</a>
<a id='n739' href='#n739'>739</a>
<a id='n740' href='#n740'>740</a>
<a id='n741' href='#n741'>741</a>
<a id='n742' href='#n742'>742</a>
<a id='n743' href='#n743'>743</a>
<a id='n744' href='#n744'>744</a>
<a id='n745' href='#n745'>745</a>
<a id='n746' href='#n746'>746</a>
<a id='n747' href='#n747'>747</a>
<a id='n748' href='#n748'>748</a>
<a id='n749' href='#n749'>749</a>
<a id='n750' href='#n750'>750</a>
<a id='n751' href='#n751'>751</a>
<a id='n752' href='#n752'>752</a>
<a id='n753' href='#n753'>753</a>
<a id='n754' href='#n754'>754</a>
<a id='n755' href='#n755'>755</a>
<a id='n756' href='#n756'>756</a>
<a id='n757' href='#n757'>757</a>
<a id='n758' href='#n758'>758</a>
<a id='n759' href='#n759'>759</a>
<a id='n760' href='#n760'>760</a>
<a id='n761' href='#n761'>761</a>
<a id='n762' href='#n762'>762</a>
<a id='n763' href='#n763'>763</a>
<a id='n764' href='#n764'>764</a>
<a id='n765' href='#n765'>765</a>
<a id='n766' href='#n766'>766</a>
<a id='n767' href='#n767'>767</a>
<a id='n768' href='#n768'>768</a>
<a id='n769' href='#n769'>769</a>
<a id='n770' href='#n770'>770</a>
<a id='n771' href='#n771'>771</a>
<a id='n772' href='#n772'>772</a>
<a id='n773' href='#n773'>773</a>
<a id='n774' href='#n774'>774</a>
<a id='n775' href='#n775'>775</a>
<a id='n776' href='#n776'>776</a>
<a id='n777' href='#n777'>777</a>
<a id='n778' href='#n778'>778</a>
<a id='n779' href='#n779'>779</a>
<a id='n780' href='#n780'>780</a>
<a id='n781' href='#n781'>781</a>
<a id='n782' href='#n782'>782</a>
<a id='n783' href='#n783'>783</a>
<a id='n784' href='#n784'>784</a>
<a id='n785' href='#n785'>785</a>
<a id='n786' href='#n786'>786</a>
<a id='n787' href='#n787'>787</a>
<a id='n788' href='#n788'>788</a>
<a id='n789' href='#n789'>789</a>
<a id='n790' href='#n790'>790</a>
<a id='n791' href='#n791'>791</a>
<a id='n792' href='#n792'>792</a>
<a id='n793' href='#n793'>793</a>
<a id='n794' href='#n794'>794</a>
<a id='n795' href='#n795'>795</a>
<a id='n796' href='#n796'>796</a>
<a id='n797' href='#n797'>797</a>
<a id='n798' href='#n798'>798</a>
<a id='n799' href='#n799'>799</a>
<a id='n800' href='#n800'>800</a>
<a id='n801' href='#n801'>801</a>
<a id='n802' href='#n802'>802</a>
<a id='n803' href='#n803'>803</a>
<a id='n804' href='#n804'>804</a>
<a id='n805' href='#n805'>805</a>
<a id='n806' href='#n806'>806</a>
<a id='n807' href='#n807'>807</a>
<a id='n808' href='#n808'>808</a>
<a id='n809' href='#n809'>809</a>
<a id='n810' href='#n810'>810</a>
<a id='n811' href='#n811'>811</a>
<a id='n812' href='#n812'>812</a>
<a id='n813' href='#n813'>813</a>
<a id='n814' href='#n814'>814</a>
<a id='n815' href='#n815'>815</a>
<a id='n816' href='#n816'>816</a>
<a id='n817' href='#n817'>817</a>
<a id='n818' href='#n818'>818</a>
<a id='n819' href='#n819'>819</a>
<a id='n820' href='#n820'>820</a>
<a id='n821' href='#n821'>821</a>
<a id='n822' href='#n822'>822</a>
<a id='n823' href='#n823'>823</a>
<a id='n824' href='#n824'>824</a>
<a id='n825' href='#n825'>825</a>
<a id='n826' href='#n826'>826</a>
<a id='n827' href='#n827'>827</a>
<a id='n828' href='#n828'>828</a>
<a id='n829' href='#n829'>829</a>
<a id='n830' href='#n830'>830</a>
<a id='n831' href='#n831'>831</a>
<a id='n832' href='#n832'>832</a>
<a id='n833' href='#n833'>833</a>
<a id='n834' href='#n834'>834</a>
<a id='n835' href='#n835'>835</a>
<a id='n836' href='#n836'>836</a>
<a id='n837' href='#n837'>837</a>
<a id='n838' href='#n838'>838</a>
<a id='n839' href='#n839'>839</a>
<a id='n840' href='#n840'>840</a>
<a id='n841' href='#n841'>841</a>
<a id='n842' href='#n842'>842</a>
<a id='n843' href='#n843'>843</a>
<a id='n844' href='#n844'>844</a>
<a id='n845' href='#n845'>845</a>
<a id='n846' href='#n846'>846</a>
<a id='n847' href='#n847'>847</a>
<a id='n848' href='#n848'>848</a>
<a id='n849' href='#n849'>849</a>
<a id='n850' href='#n850'>850</a>
<a id='n851' href='#n851'>851</a>
<a id='n852' href='#n852'>852</a>
<a id='n853' href='#n853'>853</a>
<a id='n854' href='#n854'>854</a>
<a id='n855' href='#n855'>855</a>
<a id='n856' href='#n856'>856</a>
<a id='n857' href='#n857'>857</a>
<a id='n858' href='#n858'>858</a>
<a id='n859' href='#n859'>859</a>
<a id='n860' href='#n860'>860</a>
<a id='n861' href='#n861'>861</a>
<a id='n862' href='#n862'>862</a>
<a id='n863' href='#n863'>863</a>
<a id='n864' href='#n864'>864</a>
<a id='n865' href='#n865'>865</a>
<a id='n866' href='#n866'>866</a>
<a id='n867' href='#n867'>867</a>
<a id='n868' href='#n868'>868</a>
<a id='n869' href='#n869'>869</a>
<a id='n870' href='#n870'>870</a>
<a id='n871' href='#n871'>871</a>
<a id='n872' href='#n872'>872</a>
<a id='n873' href='#n873'>873</a>
<a id='n874' href='#n874'>874</a>
<a id='n875' href='#n875'>875</a>
<a id='n876' href='#n876'>876</a>
<a id='n877' href='#n877'>877</a>
<a id='n878' href='#n878'>878</a>
<a id='n879' href='#n879'>879</a>
<a id='n880' href='#n880'>880</a>
<a id='n881' href='#n881'>881</a>
<a id='n882' href='#n882'>882</a>
<a id='n883' href='#n883'>883</a>
<a id='n884' href='#n884'>884</a>
<a id='n885' href='#n885'>885</a>
<a id='n886' href='#n886'>886</a>
<a id='n887' href='#n887'>887</a>
<a id='n888' href='#n888'>888</a>
<a id='n889' href='#n889'>889</a>
<a id='n890' href='#n890'>890</a>
<a id='n891' href='#n891'>891</a>
<a id='n892' href='#n892'>892</a>
<a id='n893' href='#n893'>893</a>
<a id='n894' href='#n894'>894</a>
<a id='n895' href='#n895'>895</a>
<a id='n896' href='#n896'>896</a>
<a id='n897' href='#n897'>897</a>
<a id='n898' href='#n898'>898</a>
<a id='n899' href='#n899'>899</a>
<a id='n900' href='#n900'>900</a>
<a id='n901' href='#n901'>901</a>
<a id='n902' href='#n902'>902</a>
<a id='n903' href='#n903'>903</a>
<a id='n904' href='#n904'>904</a>
<a id='n905' href='#n905'>905</a>
<a id='n906' href='#n906'>906</a>
<a id='n907' href='#n907'>907</a>
<a id='n908' href='#n908'>908</a>
<a id='n909' href='#n909'>909</a>
<a id='n910' href='#n910'>910</a>
<a id='n911' href='#n911'>911</a>
<a id='n912' href='#n912'>912</a>
<a id='n913' href='#n913'>913</a>
<a id='n914' href='#n914'>914</a>
<a id='n915' href='#n915'>915</a>
<a id='n916' href='#n916'>916</a>
<a id='n917' href='#n917'>917</a>
<a id='n918' href='#n918'>918</a>
<a id='n919' href='#n919'>919</a>
<a id='n920' href='#n920'>920</a>
<a id='n921' href='#n921'>921</a>
<a id='n922' href='#n922'>922</a>
<a id='n923' href='#n923'>923</a>
<a id='n924' href='#n924'>924</a>
<a id='n925' href='#n925'>925</a>
<a id='n926' href='#n926'>926</a>
<a id='n927' href='#n927'>927</a>
<a id='n928' href='#n928'>928</a>
<a id='n929' href='#n929'>929</a>
<a id='n930' href='#n930'>930</a>
<a id='n931' href='#n931'>931</a>
<a id='n932' href='#n932'>932</a>
<a id='n933' href='#n933'>933</a>
<a id='n934' href='#n934'>934</a>
<a id='n935' href='#n935'>935</a>
<a id='n936' href='#n936'>936</a>
<a id='n937' href='#n937'>937</a>
<a id='n938' href='#n938'>938</a>
<a id='n939' href='#n939'>939</a>
<a id='n940' href='#n940'>940</a>
<a id='n941' href='#n941'>941</a>
<a id='n942' href='#n942'>942</a>
<a id='n943' href='#n943'>943</a>
<a id='n944' href='#n944'>944</a>
<a id='n945' href='#n945'>945</a>
<a id='n946' href='#n946'>946</a>
<a id='n947' href='#n947'>947</a>
<a id='n948' href='#n948'>948</a>
<a id='n949' href='#n949'>949</a>
<a id='n950' href='#n950'>950</a>
<a id='n951' href='#n951'>951</a>
<a id='n952' href='#n952'>952</a>
<a id='n953' href='#n953'>953</a>
<a id='n954' href='#n954'>954</a>
<a id='n955' href='#n955'>955</a>
<a id='n956' href='#n956'>956</a>
<a id='n957' href='#n957'>957</a>
<a id='n958' href='#n958'>958</a>
<a id='n959' href='#n959'>959</a>
<a id='n960' href='#n960'>960</a>
<a id='n961' href='#n961'>961</a>
<a id='n962' href='#n962'>962</a>
<a id='n963' href='#n963'>963</a>
<a id='n964' href='#n964'>964</a>
<a id='n965' href='#n965'>965</a>
<a id='n966' href='#n966'>966</a>
<a id='n967' href='#n967'>967</a>
<a id='n968' href='#n968'>968</a>
<a id='n969' href='#n969'>969</a>
<a id='n970' href='#n970'>970</a>
<a id='n971' href='#n971'>971</a>
<a id='n972' href='#n972'>972</a>
<a id='n973' href='#n973'>973</a>
<a id='n974' href='#n974'>974</a>
<a id='n975' href='#n975'>975</a>
<a id='n976' href='#n976'>976</a>
<a id='n977' href='#n977'>977</a>
<a id='n978' href='#n978'>978</a>
<a id='n979' href='#n979'>979</a>
<a id='n980' href='#n980'>980</a>
<a id='n981' href='#n981'>981</a>
<a id='n982' href='#n982'>982</a>
<a id='n983' href='#n983'>983</a>
<a id='n984' href='#n984'>984</a>
<a id='n985' href='#n985'>985</a>
<a id='n986' href='#n986'>986</a>
<a id='n987' href='#n987'>987</a>
<a id='n988' href='#n988'>988</a>
<a id='n989' href='#n989'>989</a>
<a id='n990' href='#n990'>990</a>
<a id='n991' href='#n991'>991</a>
<a id='n992' href='#n992'>992</a>
<a id='n993' href='#n993'>993</a>
<a id='n994' href='#n994'>994</a>
<a id='n995' href='#n995'>995</a>
<a id='n996' href='#n996'>996</a>
<a id='n997' href='#n997'>997</a>
<a id='n998' href='#n998'>998</a>
<a id='n999' href='#n999'>999</a>
<a id='n1000' href='#n1000'>1000</a>
<a id='n1001' href='#n1001'>1001</a>
<a id='n1002' href='#n1002'>1002</a>
<a id='n1003' href='#n1003'>1003</a>
<a id='n1004' href='#n1004'>1004</a>
<a id='n1005' href='#n1005'>1005</a>
<a id='n1006' href='#n1006'>1006</a>
<a id='n1007' href='#n1007'>1007</a>
<a id='n1008' href='#n1008'>1008</a>
<a id='n1009' href='#n1009'>1009</a>
<a id='n1010' href='#n1010'>1010</a>
<a id='n1011' href='#n1011'>1011</a>
<a id='n1012' href='#n1012'>1012</a>
<a id='n1013' href='#n1013'>1013</a>
<a id='n1014' href='#n1014'>1014</a>
<a id='n1015' href='#n1015'>1015</a>
<a id='n1016' href='#n1016'>1016</a>
<a id='n1017' href='#n1017'>1017</a>
<a id='n1018' href='#n1018'>1018</a>
<a id='n1019' href='#n1019'>1019</a>
<a id='n1020' href='#n1020'>1020</a>
<a id='n1021' href='#n1021'>1021</a>
<a id='n1022' href='#n1022'>1022</a>
<a id='n1023' href='#n1023'>1023</a>
<a id='n1024' href='#n1024'>1024</a>
<a id='n1025' href='#n1025'>1025</a>
<a id='n1026' href='#n1026'>1026</a>
<a id='n1027' href='#n1027'>1027</a>
<a id='n1028' href='#n1028'>1028</a>
<a id='n1029' href='#n1029'>1029</a>
<a id='n1030' href='#n1030'>1030</a>
<a id='n1031' href='#n1031'>1031</a>
<a id='n1032' href='#n1032'>1032</a>
<a id='n1033' href='#n1033'>1033</a>
<a id='n1034' href='#n1034'>1034</a>
<a id='n1035' href='#n1035'>1035</a>
<a id='n1036' href='#n1036'>1036</a>
<a id='n1037' href='#n1037'>1037</a>
<a id='n1038' href='#n1038'>1038</a>
<a id='n1039' href='#n1039'>1039</a>
<a id='n1040' href='#n1040'>1040</a>
<a id='n1041' href='#n1041'>1041</a>
<a id='n1042' href='#n1042'>1042</a>
<a id='n1043' href='#n1043'>1043</a>
<a id='n1044' href='#n1044'>1044</a>
<a id='n1045' href='#n1045'>1045</a>
<a id='n1046' href='#n1046'>1046</a>
<a id='n1047' href='#n1047'>1047</a>
<a id='n1048' href='#n1048'>1048</a>
<a id='n1049' href='#n1049'>1049</a>
<a id='n1050' href='#n1050'>1050</a>
<a id='n1051' href='#n1051'>1051</a>
<a id='n1052' href='#n1052'>1052</a>
<a id='n1053' href='#n1053'>1053</a>
<a id='n1054' href='#n1054'>1054</a>
<a id='n1055' href='#n1055'>1055</a>
<a id='n1056' href='#n1056'>1056</a>
<a id='n1057' href='#n1057'>1057</a>
<a id='n1058' href='#n1058'>1058</a>
<a id='n1059' href='#n1059'>1059</a>
<a id='n1060' href='#n1060'>1060</a>
<a id='n1061' href='#n1061'>1061</a>
<a id='n1062' href='#n1062'>1062</a>
<a id='n1063' href='#n1063'>1063</a>
<a id='n1064' href='#n1064'>1064</a>
<a id='n1065' href='#n1065'>1065</a>
<a id='n1066' href='#n1066'>1066</a>
<a id='n1067' href='#n1067'>1067</a>
<a id='n1068' href='#n1068'>1068</a>
<a id='n1069' href='#n1069'>1069</a>
<a id='n1070' href='#n1070'>1070</a>
<a id='n1071' href='#n1071'>1071</a>
<a id='n1072' href='#n1072'>1072</a>
<a id='n1073' href='#n1073'>1073</a>
<a id='n1074' href='#n1074'>1074</a>
<a id='n1075' href='#n1075'>1075</a>
<a id='n1076' href='#n1076'>1076</a>
<a id='n1077' href='#n1077'>1077</a>
<a id='n1078' href='#n1078'>1078</a>
<a id='n1079' href='#n1079'>1079</a>
<a id='n1080' href='#n1080'>1080</a>
<a id='n1081' href='#n1081'>1081</a>
<a id='n1082' href='#n1082'>1082</a>
<a id='n1083' href='#n1083'>1083</a>
<a id='n1084' href='#n1084'>1084</a>
<a id='n1085' href='#n1085'>1085</a>
<a id='n1086' href='#n1086'>1086</a>
<a id='n1087' href='#n1087'>1087</a>
<a id='n1088' href='#n1088'>1088</a>
<a id='n1089' href='#n1089'>1089</a>
<a id='n1090' href='#n1090'>1090</a>
<a id='n1091' href='#n1091'>1091</a>
<a id='n1092' href='#n1092'>1092</a>
<a id='n1093' href='#n1093'>1093</a>
<a id='n1094' href='#n1094'>1094</a>
<a id='n1095' href='#n1095'>1095</a>
<a id='n1096' href='#n1096'>1096</a>
<a id='n1097' href='#n1097'>1097</a>
<a id='n1098' href='#n1098'>1098</a>
<a id='n1099' href='#n1099'>1099</a>
<a id='n1100' href='#n1100'>1100</a>
<a id='n1101' href='#n1101'>1101</a>
<a id='n1102' href='#n1102'>1102</a>
<a id='n1103' href='#n1103'>1103</a>
<a id='n1104' href='#n1104'>1104</a>
<a id='n1105' href='#n1105'>1105</a>
<a id='n1106' href='#n1106'>1106</a>
<a id='n1107' href='#n1107'>1107</a>
<a id='n1108' href='#n1108'>1108</a>
<a id='n1109' href='#n1109'>1109</a>
<a id='n1110' href='#n1110'>1110</a>
<a id='n1111' href='#n1111'>1111</a>
<a id='n1112' href='#n1112'>1112</a>
<a id='n1113' href='#n1113'>1113</a>
<a id='n1114' href='#n1114'>1114</a>
<a id='n1115' href='#n1115'>1115</a>
<a id='n1116' href='#n1116'>1116</a>
<a id='n1117' href='#n1117'>1117</a>
<a id='n1118' href='#n1118'>1118</a>
<a id='n1119' href='#n1119'>1119</a>
<a id='n1120' href='#n1120'>1120</a>
<a id='n1121' href='#n1121'>1121</a>
<a id='n1122' href='#n1122'>1122</a>
<a id='n1123' href='#n1123'>1123</a>
<a id='n1124' href='#n1124'>1124</a>
<a id='n1125' href='#n1125'>1125</a>
<a id='n1126' href='#n1126'>1126</a>
<a id='n1127' href='#n1127'>1127</a>
<a id='n1128' href='#n1128'>1128</a>
<a id='n1129' href='#n1129'>1129</a>
<a id='n1130' href='#n1130'>1130</a>
<a id='n1131' href='#n1131'>1131</a>
<a id='n1132' href='#n1132'>1132</a>
<a id='n1133' href='#n1133'>1133</a>
<a id='n1134' href='#n1134'>1134</a>
<a id='n1135' href='#n1135'>1135</a>
<a id='n1136' href='#n1136'>1136</a>
<a id='n1137' href='#n1137'>1137</a>
<a id='n1138' href='#n1138'>1138</a>
<a id='n1139' href='#n1139'>1139</a>
<a id='n1140' href='#n1140'>1140</a>
<a id='n1141' href='#n1141'>1141</a>
<a id='n1142' href='#n1142'>1142</a>
<a id='n1143' href='#n1143'>1143</a>
<a id='n1144' href='#n1144'>1144</a>
<a id='n1145' href='#n1145'>1145</a>
<a id='n1146' href='#n1146'>1146</a>
<a id='n1147' href='#n1147'>1147</a>
<a id='n1148' href='#n1148'>1148</a>
<a id='n1149' href='#n1149'>1149</a>
<a id='n1150' href='#n1150'>1150</a>
<a id='n1151' href='#n1151'>1151</a>
<a id='n1152' href='#n1152'>1152</a>
<a id='n1153' href='#n1153'>1153</a>
<a id='n1154' href='#n1154'>1154</a>
<a id='n1155' href='#n1155'>1155</a>
<a id='n1156' href='#n1156'>1156</a>
<a id='n1157' href='#n1157'>1157</a>
<a id='n1158' href='#n1158'>1158</a>
<a id='n1159' href='#n1159'>1159</a>
<a id='n1160' href='#n1160'>1160</a>
<a id='n1161' href='#n1161'>1161</a>
<a id='n1162' href='#n1162'>1162</a>
<a id='n1163' href='#n1163'>1163</a>
<a id='n1164' href='#n1164'>1164</a>
<a id='n1165' href='#n1165'>1165</a>
<a id='n1166' href='#n1166'>1166</a>
<a id='n1167' href='#n1167'>1167</a>
<a id='n1168' href='#n1168'>1168</a>
<a id='n1169' href='#n1169'>1169</a>
<a id='n1170' href='#n1170'>1170</a>
<a id='n1171' href='#n1171'>1171</a>
<a id='n1172' href='#n1172'>1172</a>
<a id='n1173' href='#n1173'>1173</a>
<a id='n1174' href='#n1174'>1174</a>
<a id='n1175' href='#n1175'>1175</a>
<a id='n1176' href='#n1176'>1176</a>
<a id='n1177' href='#n1177'>1177</a>
<a id='n1178' href='#n1178'>1178</a>
<a id='n1179' href='#n1179'>1179</a>
<a id='n1180' href='#n1180'>1180</a>
<a id='n1181' href='#n1181'>1181</a>
<a id='n1182' href='#n1182'>1182</a>
<a id='n1183' href='#n1183'>1183</a>
<a id='n1184' href='#n1184'>1184</a>
<a id='n1185' href='#n1185'>1185</a>
<a id='n1186' href='#n1186'>1186</a>
<a id='n1187' href='#n1187'>1187</a>
<a id='n1188' href='#n1188'>1188</a>
<a id='n1189' href='#n1189'>1189</a>
<a id='n1190' href='#n1190'>1190</a>
<a id='n1191' href='#n1191'>1191</a>
<a id='n1192' href='#n1192'>1192</a>
<a id='n1193' href='#n1193'>1193</a>
<a id='n1194' href='#n1194'>1194</a>
<a id='n1195' href='#n1195'>1195</a>
<a id='n1196' href='#n1196'>1196</a>
<a id='n1197' href='#n1197'>1197</a>
<a id='n1198' href='#n1198'>1198</a>
<a id='n1199' href='#n1199'>1199</a>
<a id='n1200' href='#n1200'>1200</a>
<a id='n1201' href='#n1201'>1201</a>
<a id='n1202' href='#n1202'>1202</a>
<a id='n1203' href='#n1203'>1203</a>
<a id='n1204' href='#n1204'>1204</a>
<a id='n1205' href='#n1205'>1205</a>
<a id='n1206' href='#n1206'>1206</a>
<a id='n1207' href='#n1207'>1207</a>
<a id='n1208' href='#n1208'>1208</a>
<a id='n1209' href='#n1209'>1209</a>
<a id='n1210' href='#n1210'>1210</a>
<a id='n1211' href='#n1211'>1211</a>
<a id='n1212' href='#n1212'>1212</a>
<a id='n1213' href='#n1213'>1213</a>
<a id='n1214' href='#n1214'>1214</a>
<a id='n1215' href='#n1215'>1215</a>
<a id='n1216' href='#n1216'>1216</a>
<a id='n1217' href='#n1217'>1217</a>
<a id='n1218' href='#n1218'>1218</a>
<a id='n1219' href='#n1219'>1219</a>
<a id='n1220' href='#n1220'>1220</a>
<a id='n1221' href='#n1221'>1221</a>
<a id='n1222' href='#n1222'>1222</a>
<a id='n1223' href='#n1223'>1223</a>
<a id='n1224' href='#n1224'>1224</a>
<a id='n1225' href='#n1225'>1225</a>
<a id='n1226' href='#n1226'>1226</a>
<a id='n1227' href='#n1227'>1227</a>
<a id='n1228' href='#n1228'>1228</a>
<a id='n1229' href='#n1229'>1229</a>
<a id='n1230' href='#n1230'>1230</a>
<a id='n1231' href='#n1231'>1231</a>
<a id='n1232' href='#n1232'>1232</a>
<a id='n1233' href='#n1233'>1233</a>
<a id='n1234' href='#n1234'>1234</a>
<a id='n1235' href='#n1235'>1235</a>
<a id='n1236' href='#n1236'>1236</a>
<a id='n1237' href='#n1237'>1237</a>
<a id='n1238' href='#n1238'>1238</a>
<a id='n1239' href='#n1239'>1239</a>
<a id='n1240' href='#n1240'>1240</a>
<a id='n1241' href='#n1241'>1241</a>
<a id='n1242' href='#n1242'>1242</a>
<a id='n1243' href='#n1243'>1243</a>
<a id='n1244' href='#n1244'>1244</a>
<a id='n1245' href='#n1245'>1245</a>
<a id='n1246' href='#n1246'>1246</a>
<a id='n1247' href='#n1247'>1247</a>
<a id='n1248' href='#n1248'>1248</a>
<a id='n1249' href='#n1249'>1249</a>
<a id='n1250' href='#n1250'>1250</a>
<a id='n1251' href='#n1251'>1251</a>
<a id='n1252' href='#n1252'>1252</a>
<a id='n1253' href='#n1253'>1253</a>
<a id='n1254' href='#n1254'>1254</a>
<a id='n1255' href='#n1255'>1255</a>
<a id='n1256' href='#n1256'>1256</a>
<a id='n1257' href='#n1257'>1257</a>
<a id='n1258' href='#n1258'>1258</a>
<a id='n1259' href='#n1259'>1259</a>
<a id='n1260' href='#n1260'>1260</a>
<a id='n1261' href='#n1261'>1261</a>
<a id='n1262' href='#n1262'>1262</a>
<a id='n1263' href='#n1263'>1263</a>
<a id='n1264' href='#n1264'>1264</a>
<a id='n1265' href='#n1265'>1265</a>
<a id='n1266' href='#n1266'>1266</a>
<a id='n1267' href='#n1267'>1267</a>
<a id='n1268' href='#n1268'>1268</a>
<a id='n1269' href='#n1269'>1269</a>
<a id='n1270' href='#n1270'>1270</a>
<a id='n1271' href='#n1271'>1271</a>
<a id='n1272' href='#n1272'>1272</a>
<a id='n1273' href='#n1273'>1273</a>
<a id='n1274' href='#n1274'>1274</a>
<a id='n1275' href='#n1275'>1275</a>
<a id='n1276' href='#n1276'>1276</a>
<a id='n1277' href='#n1277'>1277</a>
<a id='n1278' href='#n1278'>1278</a>
<a id='n1279' href='#n1279'>1279</a>
<a id='n1280' href='#n1280'>1280</a>
<a id='n1281' href='#n1281'>1281</a>
<a id='n1282' href='#n1282'>1282</a>
<a id='n1283' href='#n1283'>1283</a>
<a id='n1284' href='#n1284'>1284</a>
<a id='n1285' href='#n1285'>1285</a>
<a id='n1286' href='#n1286'>1286</a>
<a id='n1287' href='#n1287'>1287</a>
<a id='n1288' href='#n1288'>1288</a>
<a id='n1289' href='#n1289'>1289</a>
<a id='n1290' href='#n1290'>1290</a>
<a id='n1291' href='#n1291'>1291</a>
<a id='n1292' href='#n1292'>1292</a>
<a id='n1293' href='#n1293'>1293</a>
<a id='n1294' href='#n1294'>1294</a>
<a id='n1295' href='#n1295'>1295</a>
<a id='n1296' href='#n1296'>1296</a>
<a id='n1297' href='#n1297'>1297</a>
<a id='n1298' href='#n1298'>1298</a>
<a id='n1299' href='#n1299'>1299</a>
<a id='n1300' href='#n1300'>1300</a>
<a id='n1301' href='#n1301'>1301</a>
<a id='n1302' href='#n1302'>1302</a>
<a id='n1303' href='#n1303'>1303</a>
<a id='n1304' href='#n1304'>1304</a>
<a id='n1305' href='#n1305'>1305</a>
<a id='n1306' href='#n1306'>1306</a>
<a id='n1307' href='#n1307'>1307</a>
<a id='n1308' href='#n1308'>1308</a>
<a id='n1309' href='#n1309'>1309</a>
<a id='n1310' href='#n1310'>1310</a>
<a id='n1311' href='#n1311'>1311</a>
<a id='n1312' href='#n1312'>1312</a>
<a id='n1313' href='#n1313'>1313</a>
<a id='n1314' href='#n1314'>1314</a>
<a id='n1315' href='#n1315'>1315</a>
<a id='n1316' href='#n1316'>1316</a>
<a id='n1317' href='#n1317'>1317</a>
<a id='n1318' href='#n1318'>1318</a>
<a id='n1319' href='#n1319'>1319</a>
<a id='n1320' href='#n1320'>1320</a>
<a id='n1321' href='#n1321'>1321</a>
<a id='n1322' href='#n1322'>1322</a>
<a id='n1323' href='#n1323'>1323</a>
<a id='n1324' href='#n1324'>1324</a>
<a id='n1325' href='#n1325'>1325</a>
<a id='n1326' href='#n1326'>1326</a>
<a id='n1327' href='#n1327'>1327</a>
<a id='n1328' href='#n1328'>1328</a>
<a id='n1329' href='#n1329'>1329</a>
<a id='n1330' href='#n1330'>1330</a>
<a id='n1331' href='#n1331'>1331</a>
<a id='n1332' href='#n1332'>1332</a>
<a id='n1333' href='#n1333'>1333</a>
<a id='n1334' href='#n1334'>1334</a>
<a id='n1335' href='#n1335'>1335</a>
<a id='n1336' href='#n1336'>1336</a>
<a id='n1337' href='#n1337'>1337</a>
<a id='n1338' href='#n1338'>1338</a>
<a id='n1339' href='#n1339'>1339</a>
<a id='n1340' href='#n1340'>1340</a>
<a id='n1341' href='#n1341'>1341</a>
<a id='n1342' href='#n1342'>1342</a>
<a id='n1343' href='#n1343'>1343</a>
<a id='n1344' href='#n1344'>1344</a>
<a id='n1345' href='#n1345'>1345</a>
<a id='n1346' href='#n1346'>1346</a>
<a id='n1347' href='#n1347'>1347</a>
<a id='n1348' href='#n1348'>1348</a>
<a id='n1349' href='#n1349'>1349</a>
<a id='n1350' href='#n1350'>1350</a>
<a id='n1351' href='#n1351'>1351</a>
<a id='n1352' href='#n1352'>1352</a>
<a id='n1353' href='#n1353'>1353</a>
<a id='n1354' href='#n1354'>1354</a>
<a id='n1355' href='#n1355'>1355</a>
<a id='n1356' href='#n1356'>1356</a>
<a id='n1357' href='#n1357'>1357</a>
<a id='n1358' href='#n1358'>1358</a>
<a id='n1359' href='#n1359'>1359</a>
<a id='n1360' href='#n1360'>1360</a>
<a id='n1361' href='#n1361'>1361</a>
<a id='n1362' href='#n1362'>1362</a>
<a id='n1363' href='#n1363'>1363</a>
<a id='n1364' href='#n1364'>1364</a>
<a id='n1365' href='#n1365'>1365</a>
<a id='n1366' href='#n1366'>1366</a>
<a id='n1367' href='#n1367'>1367</a>
<a id='n1368' href='#n1368'>1368</a>
<a id='n1369' href='#n1369'>1369</a>
<a id='n1370' href='#n1370'>1370</a>
<a id='n1371' href='#n1371'>1371</a>
<a id='n1372' href='#n1372'>1372</a>
<a id='n1373' href='#n1373'>1373</a>
<a id='n1374' href='#n1374'>1374</a>
<a id='n1375' href='#n1375'>1375</a>
<a id='n1376' href='#n1376'>1376</a>
<a id='n1377' href='#n1377'>1377</a>
<a id='n1378' href='#n1378'>1378</a>
<a id='n1379' href='#n1379'>1379</a>
<a id='n1380' href='#n1380'>1380</a>
<a id='n1381' href='#n1381'>1381</a>
<a id='n1382' href='#n1382'>1382</a>
<a id='n1383' href='#n1383'>1383</a>
<a id='n1384' href='#n1384'>1384</a>
<a id='n1385' href='#n1385'>1385</a>
<a id='n1386' href='#n1386'>1386</a>
<a id='n1387' href='#n1387'>1387</a>
<a id='n1388' href='#n1388'>1388</a>
<a id='n1389' href='#n1389'>1389</a>
<a id='n1390' href='#n1390'>1390</a>
<a id='n1391' href='#n1391'>1391</a>
<a id='n1392' href='#n1392'>1392</a>
<a id='n1393' href='#n1393'>1393</a>
<a id='n1394' href='#n1394'>1394</a>
<a id='n1395' href='#n1395'>1395</a>
<a id='n1396' href='#n1396'>1396</a>
<a id='n1397' href='#n1397'>1397</a>
<a id='n1398' href='#n1398'>1398</a>
<a id='n1399' href='#n1399'>1399</a>
<a id='n1400' href='#n1400'>1400</a>
<a id='n1401' href='#n1401'>1401</a>
<a id='n1402' href='#n1402'>1402</a>
<a id='n1403' href='#n1403'>1403</a>
<a id='n1404' href='#n1404'>1404</a>
<a id='n1405' href='#n1405'>1405</a>
<a id='n1406' href='#n1406'>1406</a>
<a id='n1407' href='#n1407'>1407</a>
<a id='n1408' href='#n1408'>1408</a>
<a id='n1409' href='#n1409'>1409</a>
<a id='n1410' href='#n1410'>1410</a>
<a id='n1411' href='#n1411'>1411</a>
<a id='n1412' href='#n1412'>1412</a>
<a id='n1413' href='#n1413'>1413</a>
<a id='n1414' href='#n1414'>1414</a>
<a id='n1415' href='#n1415'>1415</a>
<a id='n1416' href='#n1416'>1416</a>
<a id='n1417' href='#n1417'>1417</a>
<a id='n1418' href='#n1418'>1418</a>
<a id='n1419' href='#n1419'>1419</a>
<a id='n1420' href='#n1420'>1420</a>
<a id='n1421' href='#n1421'>1421</a>
<a id='n1422' href='#n1422'>1422</a>
<a id='n1423' href='#n1423'>1423</a>
<a id='n1424' href='#n1424'>1424</a>
<a id='n1425' href='#n1425'>1425</a>
<a id='n1426' href='#n1426'>1426</a>
<a id='n1427' href='#n1427'>1427</a>
<a id='n1428' href='#n1428'>1428</a>
<a id='n1429' href='#n1429'>1429</a>
<a id='n1430' href='#n1430'>1430</a>
<a id='n1431' href='#n1431'>1431</a>
<a id='n1432' href='#n1432'>1432</a>
<a id='n1433' href='#n1433'>1433</a>
<a id='n1434' href='#n1434'>1434</a>
<a id='n1435' href='#n1435'>1435</a>
<a id='n1436' href='#n1436'>1436</a>
<a id='n1437' href='#n1437'>1437</a>
<a id='n1438' href='#n1438'>1438</a>
<a id='n1439' href='#n1439'>1439</a>
<a id='n1440' href='#n1440'>1440</a>
<a id='n1441' href='#n1441'>1441</a>
<a id='n1442' href='#n1442'>1442</a>
<a id='n1443' href='#n1443'>1443</a>
<a id='n1444' href='#n1444'>1444</a>
<a id='n1445' href='#n1445'>1445</a>
<a id='n1446' href='#n1446'>1446</a>
<a id='n1447' href='#n1447'>1447</a>
<a id='n1448' href='#n1448'>1448</a>
<a id='n1449' href='#n1449'>1449</a>
<a id='n1450' href='#n1450'>1450</a>
<a id='n1451' href='#n1451'>1451</a>
<a id='n1452' href='#n1452'>1452</a>
<a id='n1453' href='#n1453'>1453</a>
<a id='n1454' href='#n1454'>1454</a>
<a id='n1455' href='#n1455'>1455</a>
<a id='n1456' href='#n1456'>1456</a>
<a id='n1457' href='#n1457'>1457</a>
<a id='n1458' href='#n1458'>1458</a>
<a id='n1459' href='#n1459'>1459</a>
<a id='n1460' href='#n1460'>1460</a>
<a id='n1461' href='#n1461'>1461</a>
<a id='n1462' href='#n1462'>1462</a>
<a id='n1463' href='#n1463'>1463</a>
<a id='n1464' href='#n1464'>1464</a>
<a id='n1465' href='#n1465'>1465</a>
<a id='n1466' href='#n1466'>1466</a>
<a id='n1467' href='#n1467'>1467</a>
<a id='n1468' href='#n1468'>1468</a>
<a id='n1469' href='#n1469'>1469</a>
<a id='n1470' href='#n1470'>1470</a>
<a id='n1471' href='#n1471'>1471</a>
<a id='n1472' href='#n1472'>1472</a>
<a id='n1473' href='#n1473'>1473</a>
<a id='n1474' href='#n1474'>1474</a>
<a id='n1475' href='#n1475'>1475</a>
<a id='n1476' href='#n1476'>1476</a>
<a id='n1477' href='#n1477'>1477</a>
<a id='n1478' href='#n1478'>1478</a>
<a id='n1479' href='#n1479'>1479</a>
<a id='n1480' href='#n1480'>1480</a>
<a id='n1481' href='#n1481'>1481</a>
<a id='n1482' href='#n1482'>1482</a>
<a id='n1483' href='#n1483'>1483</a>
<a id='n1484' href='#n1484'>1484</a>
<a id='n1485' href='#n1485'>1485</a>
<a id='n1486' href='#n1486'>1486</a>
<a id='n1487' href='#n1487'>1487</a>
<a id='n1488' href='#n1488'>1488</a>
<a id='n1489' href='#n1489'>1489</a>
<a id='n1490' href='#n1490'>1490</a>
<a id='n1491' href='#n1491'>1491</a>
<a id='n1492' href='#n1492'>1492</a>
<a id='n1493' href='#n1493'>1493</a>
<a id='n1494' href='#n1494'>1494</a>
<a id='n1495' href='#n1495'>1495</a>
<a id='n1496' href='#n1496'>1496</a>
<a id='n1497' href='#n1497'>1497</a>
<a id='n1498' href='#n1498'>1498</a>
<a id='n1499' href='#n1499'>1499</a>
<a id='n1500' href='#n1500'>1500</a>
<a id='n1501' href='#n1501'>1501</a>
<a id='n1502' href='#n1502'>1502</a>
<a id='n1503' href='#n1503'>1503</a>
<a id='n1504' href='#n1504'>1504</a>
<a id='n1505' href='#n1505'>1505</a>
<a id='n1506' href='#n1506'>1506</a>
<a id='n1507' href='#n1507'>1507</a>
<a id='n1508' href='#n1508'>1508</a>
<a id='n1509' href='#n1509'>1509</a>
<a id='n1510' href='#n1510'>1510</a>
<a id='n1511' href='#n1511'>1511</a>
<a id='n1512' href='#n1512'>1512</a>
<a id='n1513' href='#n1513'>1513</a>
<a id='n1514' href='#n1514'>1514</a>
<a id='n1515' href='#n1515'>1515</a>
<a id='n1516' href='#n1516'>1516</a>
<a id='n1517' href='#n1517'>1517</a>
<a id='n1518' href='#n1518'>1518</a>
<a id='n1519' href='#n1519'>1519</a>
<a id='n1520' href='#n1520'>1520</a>
<a id='n1521' href='#n1521'>1521</a>
<a id='n1522' href='#n1522'>1522</a>
<a id='n1523' href='#n1523'>1523</a>
<a id='n1524' href='#n1524'>1524</a>
<a id='n1525' href='#n1525'>1525</a>
<a id='n1526' href='#n1526'>1526</a>
<a id='n1527' href='#n1527'>1527</a>
<a id='n1528' href='#n1528'>1528</a>
<a id='n1529' href='#n1529'>1529</a>
<a id='n1530' href='#n1530'>1530</a>
<a id='n1531' href='#n1531'>1531</a>
<a id='n1532' href='#n1532'>1532</a>
<a id='n1533' href='#n1533'>1533</a>
<a id='n1534' href='#n1534'>1534</a>
<a id='n1535' href='#n1535'>1535</a>
<a id='n1536' href='#n1536'>1536</a>
<a id='n1537' href='#n1537'>1537</a>
<a id='n1538' href='#n1538'>1538</a>
<a id='n1539' href='#n1539'>1539</a>
<a id='n1540' href='#n1540'>1540</a>
<a id='n1541' href='#n1541'>1541</a>
<a id='n1542' href='#n1542'>1542</a>
<a id='n1543' href='#n1543'>1543</a>
<a id='n1544' href='#n1544'>1544</a>
<a id='n1545' href='#n1545'>1545</a>
<a id='n1546' href='#n1546'>1546</a>
<a id='n1547' href='#n1547'>1547</a>
<a id='n1548' href='#n1548'>1548</a>
<a id='n1549' href='#n1549'>1549</a>
<a id='n1550' href='#n1550'>1550</a>
<a id='n1551' href='#n1551'>1551</a>
<a id='n1552' href='#n1552'>1552</a>
<a id='n1553' href='#n1553'>1553</a>
<a id='n1554' href='#n1554'>1554</a>
<a id='n1555' href='#n1555'>1555</a>
<a id='n1556' href='#n1556'>1556</a>
<a id='n1557' href='#n1557'>1557</a>
<a id='n1558' href='#n1558'>1558</a>
<a id='n1559' href='#n1559'>1559</a>
<a id='n1560' href='#n1560'>1560</a>
<a id='n1561' href='#n1561'>1561</a>
<a id='n1562' href='#n1562'>1562</a>
<a id='n1563' href='#n1563'>1563</a>
<a id='n1564' href='#n1564'>1564</a>
<a id='n1565' href='#n1565'>1565</a>
<a id='n1566' href='#n1566'>1566</a>
<a id='n1567' href='#n1567'>1567</a>
<a id='n1568' href='#n1568'>1568</a>
<a id='n1569' href='#n1569'>1569</a>
<a id='n1570' href='#n1570'>1570</a>
<a id='n1571' href='#n1571'>1571</a>
<a id='n1572' href='#n1572'>1572</a>
<a id='n1573' href='#n1573'>1573</a>
<a id='n1574' href='#n1574'>1574</a>
<a id='n1575' href='#n1575'>1575</a>
<a id='n1576' href='#n1576'>1576</a>
<a id='n1577' href='#n1577'>1577</a>
<a id='n1578' href='#n1578'>1578</a>
<a id='n1579' href='#n1579'>1579</a>
<a id='n1580' href='#n1580'>1580</a>
<a id='n1581' href='#n1581'>1581</a>
<a id='n1582' href='#n1582'>1582</a>
<a id='n1583' href='#n1583'>1583</a>
<a id='n1584' href='#n1584'>1584</a>
<a id='n1585' href='#n1585'>1585</a>
<a id='n1586' href='#n1586'>1586</a>
<a id='n1587' href='#n1587'>1587</a>
<a id='n1588' href='#n1588'>1588</a>
<a id='n1589' href='#n1589'>1589</a>
<a id='n1590' href='#n1590'>1590</a>
<a id='n1591' href='#n1591'>1591</a>
<a id='n1592' href='#n1592'>1592</a>
<a id='n1593' href='#n1593'>1593</a>
<a id='n1594' href='#n1594'>1594</a>
<a id='n1595' href='#n1595'>1595</a>
<a id='n1596' href='#n1596'>1596</a>
<a id='n1597' href='#n1597'>1597</a>
<a id='n1598' href='#n1598'>1598</a>
<a id='n1599' href='#n1599'>1599</a>
<a id='n1600' href='#n1600'>1600</a>
<a id='n1601' href='#n1601'>1601</a>
<a id='n1602' href='#n1602'>1602</a>
<a id='n1603' href='#n1603'>1603</a>
<a id='n1604' href='#n1604'>1604</a>
<a id='n1605' href='#n1605'>1605</a>
<a id='n1606' href='#n1606'>1606</a>
<a id='n1607' href='#n1607'>1607</a>
<a id='n1608' href='#n1608'>1608</a>
<a id='n1609' href='#n1609'>1609</a>
<a id='n1610' href='#n1610'>1610</a>
<a id='n1611' href='#n1611'>1611</a>
<a id='n1612' href='#n1612'>1612</a>
<a id='n1613' href='#n1613'>1613</a>
<a id='n1614' href='#n1614'>1614</a>
<a id='n1615' href='#n1615'>1615</a>
<a id='n1616' href='#n1616'>1616</a>
<a id='n1617' href='#n1617'>1617</a>
<a id='n1618' href='#n1618'>1618</a>
<a id='n1619' href='#n1619'>1619</a>
<a id='n1620' href='#n1620'>1620</a>
<a id='n1621' href='#n1621'>1621</a>
<a id='n1622' href='#n1622'>1622</a>
<a id='n1623' href='#n1623'>1623</a>
<a id='n1624' href='#n1624'>1624</a>
<a id='n1625' href='#n1625'>1625</a>
<a id='n1626' href='#n1626'>1626</a>
<a id='n1627' href='#n1627'>1627</a>
<a id='n1628' href='#n1628'>1628</a>
<a id='n1629' href='#n1629'>1629</a>
<a id='n1630' href='#n1630'>1630</a>
<a id='n1631' href='#n1631'>1631</a>
<a id='n1632' href='#n1632'>1632</a>
<a id='n1633' href='#n1633'>1633</a>
<a id='n1634' href='#n1634'>1634</a>
<a id='n1635' href='#n1635'>1635</a>
<a id='n1636' href='#n1636'>1636</a>
<a id='n1637' href='#n1637'>1637</a>
<a id='n1638' href='#n1638'>1638</a>
<a id='n1639' href='#n1639'>1639</a>
<a id='n1640' href='#n1640'>1640</a>
<a id='n1641' href='#n1641'>1641</a>
<a id='n1642' href='#n1642'>1642</a>
<a id='n1643' href='#n1643'>1643</a>
<a id='n1644' href='#n1644'>1644</a>
<a id='n1645' href='#n1645'>1645</a>
<a id='n1646' href='#n1646'>1646</a>
<a id='n1647' href='#n1647'>1647</a>
<a id='n1648' href='#n1648'>1648</a>
<a id='n1649' href='#n1649'>1649</a>
<a id='n1650' href='#n1650'>1650</a>
<a id='n1651' href='#n1651'>1651</a>
<a id='n1652' href='#n1652'>1652</a>
<a id='n1653' href='#n1653'>1653</a>
<a id='n1654' href='#n1654'>1654</a>
<a id='n1655' href='#n1655'>1655</a>
<a id='n1656' href='#n1656'>1656</a>
<a id='n1657' href='#n1657'>1657</a>
<a id='n1658' href='#n1658'>1658</a>
<a id='n1659' href='#n1659'>1659</a>
<a id='n1660' href='#n1660'>1660</a>
<a id='n1661' href='#n1661'>1661</a>
<a id='n1662' href='#n1662'>1662</a>
<a id='n1663' href='#n1663'>1663</a>
<a id='n1664' href='#n1664'>1664</a>
<a id='n1665' href='#n1665'>1665</a>
<a id='n1666' href='#n1666'>1666</a>
<a id='n1667' href='#n1667'>1667</a>
<a id='n1668' href='#n1668'>1668</a>
<a id='n1669' href='#n1669'>1669</a>
<a id='n1670' href='#n1670'>1670</a>
<a id='n1671' href='#n1671'>1671</a>
<a id='n1672' href='#n1672'>1672</a>
<a id='n1673' href='#n1673'>1673</a>
<a id='n1674' href='#n1674'>1674</a>
<a id='n1675' href='#n1675'>1675</a>
<a id='n1676' href='#n1676'>1676</a>
<a id='n1677' href='#n1677'>1677</a>
<a id='n1678' href='#n1678'>1678</a>
<a id='n1679' href='#n1679'>1679</a>
<a id='n1680' href='#n1680'>1680</a>
<a id='n1681' href='#n1681'>1681</a>
<a id='n1682' href='#n1682'>1682</a>
<a id='n1683' href='#n1683'>1683</a>
<a id='n1684' href='#n1684'>1684</a>
<a id='n1685' href='#n1685'>1685</a>
<a id='n1686' href='#n1686'>1686</a>
<a id='n1687' href='#n1687'>1687</a>
<a id='n1688' href='#n1688'>1688</a>
<a id='n1689' href='#n1689'>1689</a>
<a id='n1690' href='#n1690'>1690</a>
<a id='n1691' href='#n1691'>1691</a>
<a id='n1692' href='#n1692'>1692</a>
<a id='n1693' href='#n1693'>1693</a>
<a id='n1694' href='#n1694'>1694</a>
<a id='n1695' href='#n1695'>1695</a>
<a id='n1696' href='#n1696'>1696</a>
<a id='n1697' href='#n1697'>1697</a>
<a id='n1698' href='#n1698'>1698</a>
<a id='n1699' href='#n1699'>1699</a>
<a id='n1700' href='#n1700'>1700</a>
<a id='n1701' href='#n1701'>1701</a>
<a id='n1702' href='#n1702'>1702</a>
<a id='n1703' href='#n1703'>1703</a>
<a id='n1704' href='#n1704'>1704</a>
<a id='n1705' href='#n1705'>1705</a>
<a id='n1706' href='#n1706'>1706</a>
<a id='n1707' href='#n1707'>1707</a>
<a id='n1708' href='#n1708'>1708</a>
<a id='n1709' href='#n1709'>1709</a>
<a id='n1710' href='#n1710'>1710</a>
<a id='n1711' href='#n1711'>1711</a>
<a id='n1712' href='#n1712'>1712</a>
<a id='n1713' href='#n1713'>1713</a>
<a id='n1714' href='#n1714'>1714</a>
<a id='n1715' href='#n1715'>1715</a>
<a id='n1716' href='#n1716'>1716</a>
<a id='n1717' href='#n1717'>1717</a>
<a id='n1718' href='#n1718'>1718</a>
<a id='n1719' href='#n1719'>1719</a>
<a id='n1720' href='#n1720'>1720</a>
<a id='n1721' href='#n1721'>1721</a>
<a id='n1722' href='#n1722'>1722</a>
<a id='n1723' href='#n1723'>1723</a>
<a id='n1724' href='#n1724'>1724</a>
<a id='n1725' href='#n1725'>1725</a>
<a id='n1726' href='#n1726'>1726</a>
<a id='n1727' href='#n1727'>1727</a>
<a id='n1728' href='#n1728'>1728</a>
<a id='n1729' href='#n1729'>1729</a>
<a id='n1730' href='#n1730'>1730</a>
<a id='n1731' href='#n1731'>1731</a>
<a id='n1732' href='#n1732'>1732</a>
<a id='n1733' href='#n1733'>1733</a>
<a id='n1734' href='#n1734'>1734</a>
<a id='n1735' href='#n1735'>1735</a>
<a id='n1736' href='#n1736'>1736</a>
<a id='n1737' href='#n1737'>1737</a>
<a id='n1738' href='#n1738'>1738</a>
<a id='n1739' href='#n1739'>1739</a>
<a id='n1740' href='#n1740'>1740</a>
<a id='n1741' href='#n1741'>1741</a>
<a id='n1742' href='#n1742'>1742</a>
<a id='n1743' href='#n1743'>1743</a>
<a id='n1744' href='#n1744'>1744</a>
<a id='n1745' href='#n1745'>1745</a>
<a id='n1746' href='#n1746'>1746</a>
<a id='n1747' href='#n1747'>1747</a>
<a id='n1748' href='#n1748'>1748</a>
<a id='n1749' href='#n1749'>1749</a>
<a id='n1750' href='#n1750'>1750</a>
<a id='n1751' href='#n1751'>1751</a>
<a id='n1752' href='#n1752'>1752</a>
<a id='n1753' href='#n1753'>1753</a>
<a id='n1754' href='#n1754'>1754</a>
<a id='n1755' href='#n1755'>1755</a>
<a id='n1756' href='#n1756'>1756</a>
<a id='n1757' href='#n1757'>1757</a>
<a id='n1758' href='#n1758'>1758</a>
<a id='n1759' href='#n1759'>1759</a>
<a id='n1760' href='#n1760'>1760</a>
<a id='n1761' href='#n1761'>1761</a>
<a id='n1762' href='#n1762'>1762</a>
<a id='n1763' href='#n1763'>1763</a>
<a id='n1764' href='#n1764'>1764</a>
<a id='n1765' href='#n1765'>1765</a>
<a id='n1766' href='#n1766'>1766</a>
<a id='n1767' href='#n1767'>1767</a>
<a id='n1768' href='#n1768'>1768</a>
<a id='n1769' href='#n1769'>1769</a>
<a id='n1770' href='#n1770'>1770</a>
<a id='n1771' href='#n1771'>1771</a>
<a id='n1772' href='#n1772'>1772</a>
<a id='n1773' href='#n1773'>1773</a>
<a id='n1774' href='#n1774'>1774</a>
<a id='n1775' href='#n1775'>1775</a>
<a id='n1776' href='#n1776'>1776</a>
<a id='n1777' href='#n1777'>1777</a>
<a id='n1778' href='#n1778'>1778</a>
<a id='n1779' href='#n1779'>1779</a>
<a id='n1780' href='#n1780'>1780</a>
<a id='n1781' href='#n1781'>1781</a>
<a id='n1782' href='#n1782'>1782</a>
<a id='n1783' href='#n1783'>1783</a>
<a id='n1784' href='#n1784'>1784</a>
<a id='n1785' href='#n1785'>1785</a>
<a id='n1786' href='#n1786'>1786</a>
<a id='n1787' href='#n1787'>1787</a>
<a id='n1788' href='#n1788'>1788</a>
<a id='n1789' href='#n1789'>1789</a>
<a id='n1790' href='#n1790'>1790</a>
<a id='n1791' href='#n1791'>1791</a>
<a id='n1792' href='#n1792'>1792</a>
<a id='n1793' href='#n1793'>1793</a>
<a id='n1794' href='#n1794'>1794</a>
<a id='n1795' href='#n1795'>1795</a>
<a id='n1796' href='#n1796'>1796</a>
<a id='n1797' href='#n1797'>1797</a>
<a id='n1798' href='#n1798'>1798</a>
<a id='n1799' href='#n1799'>1799</a>
<a id='n1800' href='#n1800'>1800</a>
<a id='n1801' href='#n1801'>1801</a>
<a id='n1802' href='#n1802'>1802</a>
<a id='n1803' href='#n1803'>1803</a>
<a id='n1804' href='#n1804'>1804</a>
<a id='n1805' href='#n1805'>1805</a>
<a id='n1806' href='#n1806'>1806</a>
<a id='n1807' href='#n1807'>1807</a>
<a id='n1808' href='#n1808'>1808</a>
<a id='n1809' href='#n1809'>1809</a>
<a id='n1810' href='#n1810'>1810</a>
<a id='n1811' href='#n1811'>1811</a>
<a id='n1812' href='#n1812'>1812</a>
<a id='n1813' href='#n1813'>1813</a>
<a id='n1814' href='#n1814'>1814</a>
<a id='n1815' href='#n1815'>1815</a>
<a id='n1816' href='#n1816'>1816</a>
<a id='n1817' href='#n1817'>1817</a>
<a id='n1818' href='#n1818'>1818</a>
<a id='n1819' href='#n1819'>1819</a>
<a id='n1820' href='#n1820'>1820</a>
<a id='n1821' href='#n1821'>1821</a>
<a id='n1822' href='#n1822'>1822</a>
<a id='n1823' href='#n1823'>1823</a>
<a id='n1824' href='#n1824'>1824</a>
<a id='n1825' href='#n1825'>1825</a>
<a id='n1826' href='#n1826'>1826</a>
<a id='n1827' href='#n1827'>1827</a>
<a id='n1828' href='#n1828'>1828</a>
<a id='n1829' href='#n1829'>1829</a>
<a id='n1830' href='#n1830'>1830</a>
<a id='n1831' href='#n1831'>1831</a>
<a id='n1832' href='#n1832'>1832</a>
<a id='n1833' href='#n1833'>1833</a>
<a id='n1834' href='#n1834'>1834</a>
<a id='n1835' href='#n1835'>1835</a>
<a id='n1836' href='#n1836'>1836</a>
<a id='n1837' href='#n1837'>1837</a>
<a id='n1838' href='#n1838'>1838</a>
<a id='n1839' href='#n1839'>1839</a>
<a id='n1840' href='#n1840'>1840</a>
<a id='n1841' href='#n1841'>1841</a>
<a id='n1842' href='#n1842'>1842</a>
<a id='n1843' href='#n1843'>1843</a>
<a id='n1844' href='#n1844'>1844</a>
<a id='n1845' href='#n1845'>1845</a>
<a id='n1846' href='#n1846'>1846</a>
<a id='n1847' href='#n1847'>1847</a>
<a id='n1848' href='#n1848'>1848</a>
<a id='n1849' href='#n1849'>1849</a>
<a id='n1850' href='#n1850'>1850</a>
<a id='n1851' href='#n1851'>1851</a>
<a id='n1852' href='#n1852'>1852</a>
<a id='n1853' href='#n1853'>1853</a>
<a id='n1854' href='#n1854'>1854</a>
<a id='n1855' href='#n1855'>1855</a>
<a id='n1856' href='#n1856'>1856</a>
<a id='n1857' href='#n1857'>1857</a>
<a id='n1858' href='#n1858'>1858</a>
<a id='n1859' href='#n1859'>1859</a>
<a id='n1860' href='#n1860'>1860</a>
<a id='n1861' href='#n1861'>1861</a>
<a id='n1862' href='#n1862'>1862</a>
<a id='n1863' href='#n1863'>1863</a>
<a id='n1864' href='#n1864'>1864</a>
<a id='n1865' href='#n1865'>1865</a>
<a id='n1866' href='#n1866'>1866</a>
<a id='n1867' href='#n1867'>1867</a>
<a id='n1868' href='#n1868'>1868</a>
<a id='n1869' href='#n1869'>1869</a>
<a id='n1870' href='#n1870'>1870</a>
<a id='n1871' href='#n1871'>1871</a>
<a id='n1872' href='#n1872'>1872</a>
<a id='n1873' href='#n1873'>1873</a>
<a id='n1874' href='#n1874'>1874</a>
<a id='n1875' href='#n1875'>1875</a>
<a id='n1876' href='#n1876'>1876</a>
<a id='n1877' href='#n1877'>1877</a>
<a id='n1878' href='#n1878'>1878</a>
<a id='n1879' href='#n1879'>1879</a>
<a id='n1880' href='#n1880'>1880</a>
<a id='n1881' href='#n1881'>1881</a>
<a id='n1882' href='#n1882'>1882</a>
<a id='n1883' href='#n1883'>1883</a>
<a id='n1884' href='#n1884'>1884</a>
<a id='n1885' href='#n1885'>1885</a>
<a id='n1886' href='#n1886'>1886</a>
<a id='n1887' href='#n1887'>1887</a>
<a id='n1888' href='#n1888'>1888</a>
<a id='n1889' href='#n1889'>1889</a>
<a id='n1890' href='#n1890'>1890</a>
<a id='n1891' href='#n1891'>1891</a>
<a id='n1892' href='#n1892'>1892</a>
<a id='n1893' href='#n1893'>1893</a>
<a id='n1894' href='#n1894'>1894</a>
<a id='n1895' href='#n1895'>1895</a>
<a id='n1896' href='#n1896'>1896</a>
<a id='n1897' href='#n1897'>1897</a>
<a id='n1898' href='#n1898'>1898</a>
<a id='n1899' href='#n1899'>1899</a>
<a id='n1900' href='#n1900'>1900</a>
<a id='n1901' href='#n1901'>1901</a>
<a id='n1902' href='#n1902'>1902</a>
<a id='n1903' href='#n1903'>1903</a>
<a id='n1904' href='#n1904'>1904</a>
<a id='n1905' href='#n1905'>1905</a>
<a id='n1906' href='#n1906'>1906</a>
<a id='n1907' href='#n1907'>1907</a>
<a id='n1908' href='#n1908'>1908</a>
<a id='n1909' href='#n1909'>1909</a>
<a id='n1910' href='#n1910'>1910</a>
<a id='n1911' href='#n1911'>1911</a>
<a id='n1912' href='#n1912'>1912</a>
<a id='n1913' href='#n1913'>1913</a>
<a id='n1914' href='#n1914'>1914</a>
<a id='n1915' href='#n1915'>1915</a>
<a id='n1916' href='#n1916'>1916</a>
<a id='n1917' href='#n1917'>1917</a>
<a id='n1918' href='#n1918'>1918</a>
<a id='n1919' href='#n1919'>1919</a>
<a id='n1920' href='#n1920'>1920</a>
<a id='n1921' href='#n1921'>1921</a>
<a id='n1922' href='#n1922'>1922</a>
<a id='n1923' href='#n1923'>1923</a>
<a id='n1924' href='#n1924'>1924</a>
<a id='n1925' href='#n1925'>1925</a>
<a id='n1926' href='#n1926'>1926</a>
<a id='n1927' href='#n1927'>1927</a>
<a id='n1928' href='#n1928'>1928</a>
<a id='n1929' href='#n1929'>1929</a>
<a id='n1930' href='#n1930'>1930</a>
<a id='n1931' href='#n1931'>1931</a>
<a id='n1932' href='#n1932'>1932</a>
<a id='n1933' href='#n1933'>1933</a>
<a id='n1934' href='#n1934'>1934</a>
<a id='n1935' href='#n1935'>1935</a>
<a id='n1936' href='#n1936'>1936</a>
<a id='n1937' href='#n1937'>1937</a>
<a id='n1938' href='#n1938'>1938</a>
<a id='n1939' href='#n1939'>1939</a>
<a id='n1940' href='#n1940'>1940</a>
<a id='n1941' href='#n1941'>1941</a>
<a id='n1942' href='#n1942'>1942</a>
<a id='n1943' href='#n1943'>1943</a>
<a id='n1944' href='#n1944'>1944</a>
<a id='n1945' href='#n1945'>1945</a>
<a id='n1946' href='#n1946'>1946</a>
<a id='n1947' href='#n1947'>1947</a>
<a id='n1948' href='#n1948'>1948</a>
<a id='n1949' href='#n1949'>1949</a>
<a id='n1950' href='#n1950'>1950</a>
<a id='n1951' href='#n1951'>1951</a>
<a id='n1952' href='#n1952'>1952</a>
<a id='n1953' href='#n1953'>1953</a>
<a id='n1954' href='#n1954'>1954</a>
<a id='n1955' href='#n1955'>1955</a>
<a id='n1956' href='#n1956'>1956</a>
<a id='n1957' href='#n1957'>1957</a>
<a id='n1958' href='#n1958'>1958</a>
<a id='n1959' href='#n1959'>1959</a>
<a id='n1960' href='#n1960'>1960</a>
<a id='n1961' href='#n1961'>1961</a>
<a id='n1962' href='#n1962'>1962</a>
<a id='n1963' href='#n1963'>1963</a>
<a id='n1964' href='#n1964'>1964</a>
<a id='n1965' href='#n1965'>1965</a>
<a id='n1966' href='#n1966'>1966</a>
<a id='n1967' href='#n1967'>1967</a>
<a id='n1968' href='#n1968'>1968</a>
<a id='n1969' href='#n1969'>1969</a>
<a id='n1970' href='#n1970'>1970</a>
<a id='n1971' href='#n1971'>1971</a>
<a id='n1972' href='#n1972'>1972</a>
<a id='n1973' href='#n1973'>1973</a>
<a id='n1974' href='#n1974'>1974</a>
<a id='n1975' href='#n1975'>1975</a>
<a id='n1976' href='#n1976'>1976</a>
<a id='n1977' href='#n1977'>1977</a>
<a id='n1978' href='#n1978'>1978</a>
<a id='n1979' href='#n1979'>1979</a>
<a id='n1980' href='#n1980'>1980</a>
<a id='n1981' href='#n1981'>1981</a>
<a id='n1982' href='#n1982'>1982</a>
<a id='n1983' href='#n1983'>1983</a>
<a id='n1984' href='#n1984'>1984</a>
<a id='n1985' href='#n1985'>1985</a>
<a id='n1986' href='#n1986'>1986</a>
<a id='n1987' href='#n1987'>1987</a>
<a id='n1988' href='#n1988'>1988</a>
<a id='n1989' href='#n1989'>1989</a>
<a id='n1990' href='#n1990'>1990</a>
<a id='n1991' href='#n1991'>1991</a>
<a id='n1992' href='#n1992'>1992</a>
<a id='n1993' href='#n1993'>1993</a>
<a id='n1994' href='#n1994'>1994</a>
<a id='n1995' href='#n1995'>1995</a>
<a id='n1996' href='#n1996'>1996</a>
<a id='n1997' href='#n1997'>1997</a>
<a id='n1998' href='#n1998'>1998</a>
<a id='n1999' href='#n1999'>1999</a>
<a id='n2000' href='#n2000'>2000</a>
<a id='n2001' href='#n2001'>2001</a>
<a id='n2002' href='#n2002'>2002</a>
<a id='n2003' href='#n2003'>2003</a>
<a id='n2004' href='#n2004'>2004</a>
<a id='n2005' href='#n2005'>2005</a>
<a id='n2006' href='#n2006'>2006</a>
<a id='n2007' href='#n2007'>2007</a>
<a id='n2008' href='#n2008'>2008</a>
<a id='n2009' href='#n2009'>2009</a>
<a id='n2010' href='#n2010'>2010</a>
<a id='n2011' href='#n2011'>2011</a>
<a id='n2012' href='#n2012'>2012</a>
<a id='n2013' href='#n2013'>2013</a>
<a id='n2014' href='#n2014'>2014</a>
<a id='n2015' href='#n2015'>2015</a>
<a id='n2016' href='#n2016'>2016</a>
<a id='n2017' href='#n2017'>2017</a>
<a id='n2018' href='#n2018'>2018</a>
<a id='n2019' href='#n2019'>2019</a>
<a id='n2020' href='#n2020'>2020</a>
<a id='n2021' href='#n2021'>2021</a>
<a id='n2022' href='#n2022'>2022</a>
<a id='n2023' href='#n2023'>2023</a>
<a id='n2024' href='#n2024'>2024</a>
<a id='n2025' href='#n2025'>2025</a>
<a id='n2026' href='#n2026'>2026</a>
<a id='n2027' href='#n2027'>2027</a>
<a id='n2028' href='#n2028'>2028</a>
<a id='n2029' href='#n2029'>2029</a>
<a id='n2030' href='#n2030'>2030</a>
<a id='n2031' href='#n2031'>2031</a>
<a id='n2032' href='#n2032'>2032</a>
<a id='n2033' href='#n2033'>2033</a>
<a id='n2034' href='#n2034'>2034</a>
<a id='n2035' href='#n2035'>2035</a>
<a id='n2036' href='#n2036'>2036</a>
<a id='n2037' href='#n2037'>2037</a>
<a id='n2038' href='#n2038'>2038</a>
<a id='n2039' href='#n2039'>2039</a>
<a id='n2040' href='#n2040'>2040</a>
<a id='n2041' href='#n2041'>2041</a>
<a id='n2042' href='#n2042'>2042</a>
<a id='n2043' href='#n2043'>2043</a>
<a id='n2044' href='#n2044'>2044</a>
<a id='n2045' href='#n2045'>2045</a>
<a id='n2046' href='#n2046'>2046</a>
<a id='n2047' href='#n2047'>2047</a>
<a id='n2048' href='#n2048'>2048</a>
<a id='n2049' href='#n2049'>2049</a>
<a id='n2050' href='#n2050'>2050</a>
<a id='n2051' href='#n2051'>2051</a>
<a id='n2052' href='#n2052'>2052</a>
<a id='n2053' href='#n2053'>2053</a>
<a id='n2054' href='#n2054'>2054</a>
<a id='n2055' href='#n2055'>2055</a>
<a id='n2056' href='#n2056'>2056</a>
<a id='n2057' href='#n2057'>2057</a>
<a id='n2058' href='#n2058'>2058</a>
<a id='n2059' href='#n2059'>2059</a>
<a id='n2060' href='#n2060'>2060</a>
<a id='n2061' href='#n2061'>2061</a>
<a id='n2062' href='#n2062'>2062</a>
<a id='n2063' href='#n2063'>2063</a>
<a id='n2064' href='#n2064'>2064</a>
<a id='n2065' href='#n2065'>2065</a>
<a id='n2066' href='#n2066'>2066</a>
<a id='n2067' href='#n2067'>2067</a>
<a id='n2068' href='#n2068'>2068</a>
<a id='n2069' href='#n2069'>2069</a>
<a id='n2070' href='#n2070'>2070</a>
<a id='n2071' href='#n2071'>2071</a>
<a id='n2072' href='#n2072'>2072</a>
<a id='n2073' href='#n2073'>2073</a>
<a id='n2074' href='#n2074'>2074</a>
<a id='n2075' href='#n2075'>2075</a>
<a id='n2076' href='#n2076'>2076</a>
<a id='n2077' href='#n2077'>2077</a>
<a id='n2078' href='#n2078'>2078</a>
<a id='n2079' href='#n2079'>2079</a>
<a id='n2080' href='#n2080'>2080</a>
<a id='n2081' href='#n2081'>2081</a>
<a id='n2082' href='#n2082'>2082</a>
<a id='n2083' href='#n2083'>2083</a>
<a id='n2084' href='#n2084'>2084</a>
<a id='n2085' href='#n2085'>2085</a>
<a id='n2086' href='#n2086'>2086</a>
<a id='n2087' href='#n2087'>2087</a>
<a id='n2088' href='#n2088'>2088</a>
<a id='n2089' href='#n2089'>2089</a>
<a id='n2090' href='#n2090'>2090</a>
<a id='n2091' href='#n2091'>2091</a>
<a id='n2092' href='#n2092'>2092</a>
<a id='n2093' href='#n2093'>2093</a>
<a id='n2094' href='#n2094'>2094</a>
<a id='n2095' href='#n2095'>2095</a>
<a id='n2096' href='#n2096'>2096</a>
<a id='n2097' href='#n2097'>2097</a>
<a id='n2098' href='#n2098'>2098</a>
<a id='n2099' href='#n2099'>2099</a>
<a id='n2100' href='#n2100'>2100</a>
<a id='n2101' href='#n2101'>2101</a>
<a id='n2102' href='#n2102'>2102</a>
<a id='n2103' href='#n2103'>2103</a>
<a id='n2104' href='#n2104'>2104</a>
<a id='n2105' href='#n2105'>2105</a>
<a id='n2106' href='#n2106'>2106</a>
<a id='n2107' href='#n2107'>2107</a>
<a id='n2108' href='#n2108'>2108</a>
<a id='n2109' href='#n2109'>2109</a>
<a id='n2110' href='#n2110'>2110</a>
<a id='n2111' href='#n2111'>2111</a>
<a id='n2112' href='#n2112'>2112</a>
<a id='n2113' href='#n2113'>2113</a>
<a id='n2114' href='#n2114'>2114</a>
<a id='n2115' href='#n2115'>2115</a>
<a id='n2116' href='#n2116'>2116</a>
<a id='n2117' href='#n2117'>2117</a>
<a id='n2118' href='#n2118'>2118</a>
<a id='n2119' href='#n2119'>2119</a>
<a id='n2120' href='#n2120'>2120</a>
<a id='n2121' href='#n2121'>2121</a>
<a id='n2122' href='#n2122'>2122</a>
<a id='n2123' href='#n2123'>2123</a>
<a id='n2124' href='#n2124'>2124</a>
<a id='n2125' href='#n2125'>2125</a>
<a id='n2126' href='#n2126'>2126</a>
<a id='n2127' href='#n2127'>2127</a>
<a id='n2128' href='#n2128'>2128</a>
<a id='n2129' href='#n2129'>2129</a>
<a id='n2130' href='#n2130'>2130</a>
<a id='n2131' href='#n2131'>2131</a>
<a id='n2132' href='#n2132'>2132</a>
<a id='n2133' href='#n2133'>2133</a>
<a id='n2134' href='#n2134'>2134</a>
<a id='n2135' href='#n2135'>2135</a>
<a id='n2136' href='#n2136'>2136</a>
<a id='n2137' href='#n2137'>2137</a>
<a id='n2138' href='#n2138'>2138</a>
<a id='n2139' href='#n2139'>2139</a>
<a id='n2140' href='#n2140'>2140</a>
<a id='n2141' href='#n2141'>2141</a>
<a id='n2142' href='#n2142'>2142</a>
<a id='n2143' href='#n2143'>2143</a>
<a id='n2144' href='#n2144'>2144</a>
<a id='n2145' href='#n2145'>2145</a>
<a id='n2146' href='#n2146'>2146</a>
<a id='n2147' href='#n2147'>2147</a>
<a id='n2148' href='#n2148'>2148</a>
<a id='n2149' href='#n2149'>2149</a>
<a id='n2150' href='#n2150'>2150</a>
<a id='n2151' href='#n2151'>2151</a>
<a id='n2152' href='#n2152'>2152</a>
<a id='n2153' href='#n2153'>2153</a>
<a id='n2154' href='#n2154'>2154</a>
<a id='n2155' href='#n2155'>2155</a>
<a id='n2156' href='#n2156'>2156</a>
<a id='n2157' href='#n2157'>2157</a>
<a id='n2158' href='#n2158'>2158</a>
<a id='n2159' href='#n2159'>2159</a>
<a id='n2160' href='#n2160'>2160</a>
<a id='n2161' href='#n2161'>2161</a>
<a id='n2162' href='#n2162'>2162</a>
<a id='n2163' href='#n2163'>2163</a>
<a id='n2164' href='#n2164'>2164</a>
<a id='n2165' href='#n2165'>2165</a>
<a id='n2166' href='#n2166'>2166</a>
<a id='n2167' href='#n2167'>2167</a>
<a id='n2168' href='#n2168'>2168</a>
<a id='n2169' href='#n2169'>2169</a>
<a id='n2170' href='#n2170'>2170</a>
<a id='n2171' href='#n2171'>2171</a>
<a id='n2172' href='#n2172'>2172</a>
<a id='n2173' href='#n2173'>2173</a>
<a id='n2174' href='#n2174'>2174</a>
<a id='n2175' href='#n2175'>2175</a>
<a id='n2176' href='#n2176'>2176</a>
<a id='n2177' href='#n2177'>2177</a>
<a id='n2178' href='#n2178'>2178</a>
<a id='n2179' href='#n2179'>2179</a>
<a id='n2180' href='#n2180'>2180</a>
<a id='n2181' href='#n2181'>2181</a>
<a id='n2182' href='#n2182'>2182</a>
<a id='n2183' href='#n2183'>2183</a>
<a id='n2184' href='#n2184'>2184</a>
<a id='n2185' href='#n2185'>2185</a>
<a id='n2186' href='#n2186'>2186</a>
<a id='n2187' href='#n2187'>2187</a>
<a id='n2188' href='#n2188'>2188</a>
<a id='n2189' href='#n2189'>2189</a>
<a id='n2190' href='#n2190'>2190</a>
<a id='n2191' href='#n2191'>2191</a>
<a id='n2192' href='#n2192'>2192</a>
<a id='n2193' href='#n2193'>2193</a>
<a id='n2194' href='#n2194'>2194</a>
<a id='n2195' href='#n2195'>2195</a>
<a id='n2196' href='#n2196'>2196</a>
<a id='n2197' href='#n2197'>2197</a>
<a id='n2198' href='#n2198'>2198</a>
<a id='n2199' href='#n2199'>2199</a>
<a id='n2200' href='#n2200'>2200</a>
<a id='n2201' href='#n2201'>2201</a>
<a id='n2202' href='#n2202'>2202</a>
<a id='n2203' href='#n2203'>2203</a>
<a id='n2204' href='#n2204'>2204</a>
<a id='n2205' href='#n2205'>2205</a>
<a id='n2206' href='#n2206'>2206</a>
<a id='n2207' href='#n2207'>2207</a>
<a id='n2208' href='#n2208'>2208</a>
<a id='n2209' href='#n2209'>2209</a>
<a id='n2210' href='#n2210'>2210</a>
<a id='n2211' href='#n2211'>2211</a>
<a id='n2212' href='#n2212'>2212</a>
<a id='n2213' href='#n2213'>2213</a>
<a id='n2214' href='#n2214'>2214</a>
<a id='n2215' href='#n2215'>2215</a>
<a id='n2216' href='#n2216'>2216</a>
<a id='n2217' href='#n2217'>2217</a>
<a id='n2218' href='#n2218'>2218</a>
<a id='n2219' href='#n2219'>2219</a>
<a id='n2220' href='#n2220'>2220</a>
<a id='n2221' href='#n2221'>2221</a>
<a id='n2222' href='#n2222'>2222</a>
<a id='n2223' href='#n2223'>2223</a>
<a id='n2224' href='#n2224'>2224</a>
<a id='n2225' href='#n2225'>2225</a>
<a id='n2226' href='#n2226'>2226</a>
<a id='n2227' href='#n2227'>2227</a>
<a id='n2228' href='#n2228'>2228</a>
<a id='n2229' href='#n2229'>2229</a>
<a id='n2230' href='#n2230'>2230</a>
<a id='n2231' href='#n2231'>2231</a>
<a id='n2232' href='#n2232'>2232</a>
<a id='n2233' href='#n2233'>2233</a>
<a id='n2234' href='#n2234'>2234</a>
<a id='n2235' href='#n2235'>2235</a>
<a id='n2236' href='#n2236'>2236</a>
<a id='n2237' href='#n2237'>2237</a>
<a id='n2238' href='#n2238'>2238</a>
<a id='n2239' href='#n2239'>2239</a>
<a id='n2240' href='#n2240'>2240</a>
<a id='n2241' href='#n2241'>2241</a>
<a id='n2242' href='#n2242'>2242</a>
<a id='n2243' href='#n2243'>2243</a>
<a id='n2244' href='#n2244'>2244</a>
<a id='n2245' href='#n2245'>2245</a>
<a id='n2246' href='#n2246'>2246</a>
<a id='n2247' href='#n2247'>2247</a>
<a id='n2248' href='#n2248'>2248</a>
<a id='n2249' href='#n2249'>2249</a>
<a id='n2250' href='#n2250'>2250</a>
<a id='n2251' href='#n2251'>2251</a>
<a id='n2252' href='#n2252'>2252</a>
<a id='n2253' href='#n2253'>2253</a>
<a id='n2254' href='#n2254'>2254</a>
<a id='n2255' href='#n2255'>2255</a>
<a id='n2256' href='#n2256'>2256</a>
<a id='n2257' href='#n2257'>2257</a>
<a id='n2258' href='#n2258'>2258</a>
<a id='n2259' href='#n2259'>2259</a>
<a id='n2260' href='#n2260'>2260</a>
<a id='n2261' href='#n2261'>2261</a>
<a id='n2262' href='#n2262'>2262</a>
<a id='n2263' href='#n2263'>2263</a>
<a id='n2264' href='#n2264'>2264</a>
<a id='n2265' href='#n2265'>2265</a>
<a id='n2266' href='#n2266'>2266</a>
<a id='n2267' href='#n2267'>2267</a>
<a id='n2268' href='#n2268'>2268</a>
<a id='n2269' href='#n2269'>2269</a>
<a id='n2270' href='#n2270'>2270</a>
<a id='n2271' href='#n2271'>2271</a>
<a id='n2272' href='#n2272'>2272</a>
<a id='n2273' href='#n2273'>2273</a>
<a id='n2274' href='#n2274'>2274</a>
<a id='n2275' href='#n2275'>2275</a>
<a id='n2276' href='#n2276'>2276</a>
<a id='n2277' href='#n2277'>2277</a>
<a id='n2278' href='#n2278'>2278</a>
<a id='n2279' href='#n2279'>2279</a>
<a id='n2280' href='#n2280'>2280</a>
<a id='n2281' href='#n2281'>2281</a>
<a id='n2282' href='#n2282'>2282</a>
<a id='n2283' href='#n2283'>2283</a>
<a id='n2284' href='#n2284'>2284</a>
<a id='n2285' href='#n2285'>2285</a>
<a id='n2286' href='#n2286'>2286</a>
<a id='n2287' href='#n2287'>2287</a>
<a id='n2288' href='#n2288'>2288</a>
<a id='n2289' href='#n2289'>2289</a>
<a id='n2290' href='#n2290'>2290</a>
<a id='n2291' href='#n2291'>2291</a>
<a id='n2292' href='#n2292'>2292</a>
<a id='n2293' href='#n2293'>2293</a>
<a id='n2294' href='#n2294'>2294</a>
<a id='n2295' href='#n2295'>2295</a>
<a id='n2296' href='#n2296'>2296</a>
<a id='n2297' href='#n2297'>2297</a>
<a id='n2298' href='#n2298'>2298</a>
<a id='n2299' href='#n2299'>2299</a>
<a id='n2300' href='#n2300'>2300</a>
<a id='n2301' href='#n2301'>2301</a>
<a id='n2302' href='#n2302'>2302</a>
<a id='n2303' href='#n2303'>2303</a>
<a id='n2304' href='#n2304'>2304</a>
<a id='n2305' href='#n2305'>2305</a>
<a id='n2306' href='#n2306'>2306</a>
<a id='n2307' href='#n2307'>2307</a>
<a id='n2308' href='#n2308'>2308</a>
<a id='n2309' href='#n2309'>2309</a>
<a id='n2310' href='#n2310'>2310</a>
<a id='n2311' href='#n2311'>2311</a>
<a id='n2312' href='#n2312'>2312</a>
<a id='n2313' href='#n2313'>2313</a>
<a id='n2314' href='#n2314'>2314</a>
<a id='n2315' href='#n2315'>2315</a>
<a id='n2316' href='#n2316'>2316</a>
<a id='n2317' href='#n2317'>2317</a>
<a id='n2318' href='#n2318'>2318</a>
<a id='n2319' href='#n2319'>2319</a>
<a id='n2320' href='#n2320'>2320</a>
<a id='n2321' href='#n2321'>2321</a>
<a id='n2322' href='#n2322'>2322</a>
<a id='n2323' href='#n2323'>2323</a>
<a id='n2324' href='#n2324'>2324</a>
<a id='n2325' href='#n2325'>2325</a>
<a id='n2326' href='#n2326'>2326</a>
<a id='n2327' href='#n2327'>2327</a>
<a id='n2328' href='#n2328'>2328</a>
<a id='n2329' href='#n2329'>2329</a>
<a id='n2330' href='#n2330'>2330</a>
<a id='n2331' href='#n2331'>2331</a>
<a id='n2332' href='#n2332'>2332</a>
<a id='n2333' href='#n2333'>2333</a>
<a id='n2334' href='#n2334'>2334</a>
<a id='n2335' href='#n2335'>2335</a>
<a id='n2336' href='#n2336'>2336</a>
<a id='n2337' href='#n2337'>2337</a>
<a id='n2338' href='#n2338'>2338</a>
<a id='n2339' href='#n2339'>2339</a>
<a id='n2340' href='#n2340'>2340</a>
<a id='n2341' href='#n2341'>2341</a>
<a id='n2342' href='#n2342'>2342</a>
<a id='n2343' href='#n2343'>2343</a>
<a id='n2344' href='#n2344'>2344</a>
<a id='n2345' href='#n2345'>2345</a>
<a id='n2346' href='#n2346'>2346</a>
<a id='n2347' href='#n2347'>2347</a>
<a id='n2348' href='#n2348'>2348</a>
<a id='n2349' href='#n2349'>2349</a>
<a id='n2350' href='#n2350'>2350</a>
<a id='n2351' href='#n2351'>2351</a>
<a id='n2352' href='#n2352'>2352</a>
<a id='n2353' href='#n2353'>2353</a>
<a id='n2354' href='#n2354'>2354</a>
<a id='n2355' href='#n2355'>2355</a>
<a id='n2356' href='#n2356'>2356</a>
<a id='n2357' href='#n2357'>2357</a>
<a id='n2358' href='#n2358'>2358</a>
<a id='n2359' href='#n2359'>2359</a>
<a id='n2360' href='#n2360'>2360</a>
<a id='n2361' href='#n2361'>2361</a>
<a id='n2362' href='#n2362'>2362</a>
<a id='n2363' href='#n2363'>2363</a>
<a id='n2364' href='#n2364'>2364</a>
<a id='n2365' href='#n2365'>2365</a>
<a id='n2366' href='#n2366'>2366</a>
<a id='n2367' href='#n2367'>2367</a>
<a id='n2368' href='#n2368'>2368</a>
<a id='n2369' href='#n2369'>2369</a>
<a id='n2370' href='#n2370'>2370</a>
<a id='n2371' href='#n2371'>2371</a>
<a id='n2372' href='#n2372'>2372</a>
<a id='n2373' href='#n2373'>2373</a>
<a id='n2374' href='#n2374'>2374</a>
<a id='n2375' href='#n2375'>2375</a>
<a id='n2376' href='#n2376'>2376</a>
<a id='n2377' href='#n2377'>2377</a>
<a id='n2378' href='#n2378'>2378</a>
<a id='n2379' href='#n2379'>2379</a>
<a id='n2380' href='#n2380'>2380</a>
<a id='n2381' href='#n2381'>2381</a>
<a id='n2382' href='#n2382'>2382</a>
<a id='n2383' href='#n2383'>2383</a>
<a id='n2384' href='#n2384'>2384</a>
<a id='n2385' href='#n2385'>2385</a>
<a id='n2386' href='#n2386'>2386</a>
<a id='n2387' href='#n2387'>2387</a>
<a id='n2388' href='#n2388'>2388</a>
<a id='n2389' href='#n2389'>2389</a>
<a id='n2390' href='#n2390'>2390</a>
<a id='n2391' href='#n2391'>2391</a>
<a id='n2392' href='#n2392'>2392</a>
<a id='n2393' href='#n2393'>2393</a>
<a id='n2394' href='#n2394'>2394</a>
<a id='n2395' href='#n2395'>2395</a>
<a id='n2396' href='#n2396'>2396</a>
<a id='n2397' href='#n2397'>2397</a>
<a id='n2398' href='#n2398'>2398</a>
<a id='n2399' href='#n2399'>2399</a>
<a id='n2400' href='#n2400'>2400</a>
<a id='n2401' href='#n2401'>2401</a>
<a id='n2402' href='#n2402'>2402</a>
<a id='n2403' href='#n2403'>2403</a>
<a id='n2404' href='#n2404'>2404</a>
<a id='n2405' href='#n2405'>2405</a>
<a id='n2406' href='#n2406'>2406</a>
<a id='n2407' href='#n2407'>2407</a>
<a id='n2408' href='#n2408'>2408</a>
<a id='n2409' href='#n2409'>2409</a>
<a id='n2410' href='#n2410'>2410</a>
<a id='n2411' href='#n2411'>2411</a>
<a id='n2412' href='#n2412'>2412</a>
<a id='n2413' href='#n2413'>2413</a>
<a id='n2414' href='#n2414'>2414</a>
<a id='n2415' href='#n2415'>2415</a>
<a id='n2416' href='#n2416'>2416</a>
<a id='n2417' href='#n2417'>2417</a>
<a id='n2418' href='#n2418'>2418</a>
<a id='n2419' href='#n2419'>2419</a>
<a id='n2420' href='#n2420'>2420</a>
<a id='n2421' href='#n2421'>2421</a>
<a id='n2422' href='#n2422'>2422</a>
<a id='n2423' href='#n2423'>2423</a>
<a id='n2424' href='#n2424'>2424</a>
<a id='n2425' href='#n2425'>2425</a>
<a id='n2426' href='#n2426'>2426</a>
<a id='n2427' href='#n2427'>2427</a>
<a id='n2428' href='#n2428'>2428</a>
<a id='n2429' href='#n2429'>2429</a>
<a id='n2430' href='#n2430'>2430</a>
<a id='n2431' href='#n2431'>2431</a>
<a id='n2432' href='#n2432'>2432</a>
<a id='n2433' href='#n2433'>2433</a>
<a id='n2434' href='#n2434'>2434</a>
<a id='n2435' href='#n2435'>2435</a>
<a id='n2436' href='#n2436'>2436</a>
<a id='n2437' href='#n2437'>2437</a>
<a id='n2438' href='#n2438'>2438</a>
<a id='n2439' href='#n2439'>2439</a>
<a id='n2440' href='#n2440'>2440</a>
<a id='n2441' href='#n2441'>2441</a>
<a id='n2442' href='#n2442'>2442</a>
<a id='n2443' href='#n2443'>2443</a>
<a id='n2444' href='#n2444'>2444</a>
<a id='n2445' href='#n2445'>2445</a>
<a id='n2446' href='#n2446'>2446</a>
<a id='n2447' href='#n2447'>2447</a>
<a id='n2448' href='#n2448'>2448</a>
<a id='n2449' href='#n2449'>2449</a>
<a id='n2450' href='#n2450'>2450</a>
<a id='n2451' href='#n2451'>2451</a>
<a id='n2452' href='#n2452'>2452</a>
<a id='n2453' href='#n2453'>2453</a>
<a id='n2454' href='#n2454'>2454</a>
<a id='n2455' href='#n2455'>2455</a>
<a id='n2456' href='#n2456'>2456</a>
<a id='n2457' href='#n2457'>2457</a>
<a id='n2458' href='#n2458'>2458</a>
<a id='n2459' href='#n2459'>2459</a>
<a id='n2460' href='#n2460'>2460</a>
<a id='n2461' href='#n2461'>2461</a>
<a id='n2462' href='#n2462'>2462</a>
<a id='n2463' href='#n2463'>2463</a>
<a id='n2464' href='#n2464'>2464</a>
<a id='n2465' href='#n2465'>2465</a>
<a id='n2466' href='#n2466'>2466</a>
<a id='n2467' href='#n2467'>2467</a>
<a id='n2468' href='#n2468'>2468</a>
<a id='n2469' href='#n2469'>2469</a>
<a id='n2470' href='#n2470'>2470</a>
<a id='n2471' href='#n2471'>2471</a>
<a id='n2472' href='#n2472'>2472</a>
<a id='n2473' href='#n2473'>2473</a>
<a id='n2474' href='#n2474'>2474</a>
<a id='n2475' href='#n2475'>2475</a>
<a id='n2476' href='#n2476'>2476</a>
<a id='n2477' href='#n2477'>2477</a>
<a id='n2478' href='#n2478'>2478</a>
<a id='n2479' href='#n2479'>2479</a>
<a id='n2480' href='#n2480'>2480</a>
<a id='n2481' href='#n2481'>2481</a>
<a id='n2482' href='#n2482'>2482</a>
<a id='n2483' href='#n2483'>2483</a>
<a id='n2484' href='#n2484'>2484</a>
<a id='n2485' href='#n2485'>2485</a>
<a id='n2486' href='#n2486'>2486</a>
<a id='n2487' href='#n2487'>2487</a>
<a id='n2488' href='#n2488'>2488</a>
<a id='n2489' href='#n2489'>2489</a>
<a id='n2490' href='#n2490'>2490</a>
<a id='n2491' href='#n2491'>2491</a>
<a id='n2492' href='#n2492'>2492</a>
<a id='n2493' href='#n2493'>2493</a>
<a id='n2494' href='#n2494'>2494</a>
<a id='n2495' href='#n2495'>2495</a>
<a id='n2496' href='#n2496'>2496</a>
<a id='n2497' href='#n2497'>2497</a>
<a id='n2498' href='#n2498'>2498</a>
<a id='n2499' href='#n2499'>2499</a>
<a id='n2500' href='#n2500'>2500</a>
<a id='n2501' href='#n2501'>2501</a>
<a id='n2502' href='#n2502'>2502</a>
<a id='n2503' href='#n2503'>2503</a>
<a id='n2504' href='#n2504'>2504</a>
<a id='n2505' href='#n2505'>2505</a>
<a id='n2506' href='#n2506'>2506</a>
<a id='n2507' href='#n2507'>2507</a>
<a id='n2508' href='#n2508'>2508</a>
<a id='n2509' href='#n2509'>2509</a>
<a id='n2510' href='#n2510'>2510</a>
<a id='n2511' href='#n2511'>2511</a>
<a id='n2512' href='#n2512'>2512</a>
<a id='n2513' href='#n2513'>2513</a>
<a id='n2514' href='#n2514'>2514</a>
<a id='n2515' href='#n2515'>2515</a>
<a id='n2516' href='#n2516'>2516</a>
<a id='n2517' href='#n2517'>2517</a>
<a id='n2518' href='#n2518'>2518</a>
<a id='n2519' href='#n2519'>2519</a>
<a id='n2520' href='#n2520'>2520</a>
<a id='n2521' href='#n2521'>2521</a>
<a id='n2522' href='#n2522'>2522</a>
<a id='n2523' href='#n2523'>2523</a>
<a id='n2524' href='#n2524'>2524</a>
<a id='n2525' href='#n2525'>2525</a>
<a id='n2526' href='#n2526'>2526</a>
<a id='n2527' href='#n2527'>2527</a>
<a id='n2528' href='#n2528'>2528</a>
<a id='n2529' href='#n2529'>2529</a>
<a id='n2530' href='#n2530'>2530</a>
<a id='n2531' href='#n2531'>2531</a>
<a id='n2532' href='#n2532'>2532</a>
<a id='n2533' href='#n2533'>2533</a>
<a id='n2534' href='#n2534'>2534</a>
<a id='n2535' href='#n2535'>2535</a>
<a id='n2536' href='#n2536'>2536</a>
<a id='n2537' href='#n2537'>2537</a>
<a id='n2538' href='#n2538'>2538</a>
<a id='n2539' href='#n2539'>2539</a>
<a id='n2540' href='#n2540'>2540</a>
<a id='n2541' href='#n2541'>2541</a>
<a id='n2542' href='#n2542'>2542</a>
<a id='n2543' href='#n2543'>2543</a>
<a id='n2544' href='#n2544'>2544</a>
<a id='n2545' href='#n2545'>2545</a>
<a id='n2546' href='#n2546'>2546</a>
<a id='n2547' href='#n2547'>2547</a>
<a id='n2548' href='#n2548'>2548</a>
<a id='n2549' href='#n2549'>2549</a>
<a id='n2550' href='#n2550'>2550</a>
<a id='n2551' href='#n2551'>2551</a>
<a id='n2552' href='#n2552'>2552</a>
<a id='n2553' href='#n2553'>2553</a>
<a id='n2554' href='#n2554'>2554</a>
<a id='n2555' href='#n2555'>2555</a>
<a id='n2556' href='#n2556'>2556</a>
<a id='n2557' href='#n2557'>2557</a>
<a id='n2558' href='#n2558'>2558</a>
<a id='n2559' href='#n2559'>2559</a>
<a id='n2560' href='#n2560'>2560</a>
<a id='n2561' href='#n2561'>2561</a>
<a id='n2562' href='#n2562'>2562</a>
<a id='n2563' href='#n2563'>2563</a>
<a id='n2564' href='#n2564'>2564</a>
<a id='n2565' href='#n2565'>2565</a>
<a id='n2566' href='#n2566'>2566</a>
<a id='n2567' href='#n2567'>2567</a>
<a id='n2568' href='#n2568'>2568</a>
<a id='n2569' href='#n2569'>2569</a>
<a id='n2570' href='#n2570'>2570</a>
<a id='n2571' href='#n2571'>2571</a>
<a id='n2572' href='#n2572'>2572</a>
<a id='n2573' href='#n2573'>2573</a>
<a id='n2574' href='#n2574'>2574</a>
<a id='n2575' href='#n2575'>2575</a>
<a id='n2576' href='#n2576'>2576</a>
<a id='n2577' href='#n2577'>2577</a>
<a id='n2578' href='#n2578'>2578</a>
<a id='n2579' href='#n2579'>2579</a>
<a id='n2580' href='#n2580'>2580</a>
<a id='n2581' href='#n2581'>2581</a>
<a id='n2582' href='#n2582'>2582</a>
<a id='n2583' href='#n2583'>2583</a>
<a id='n2584' href='#n2584'>2584</a>
<a id='n2585' href='#n2585'>2585</a>
<a id='n2586' href='#n2586'>2586</a>
<a id='n2587' href='#n2587'>2587</a>
<a id='n2588' href='#n2588'>2588</a>
<a id='n2589' href='#n2589'>2589</a>
<a id='n2590' href='#n2590'>2590</a>
<a id='n2591' href='#n2591'>2591</a>
<a id='n2592' href='#n2592'>2592</a>
<a id='n2593' href='#n2593'>2593</a>
<a id='n2594' href='#n2594'>2594</a>
<a id='n2595' href='#n2595'>2595</a>
<a id='n2596' href='#n2596'>2596</a>
<a id='n2597' href='#n2597'>2597</a>
<a id='n2598' href='#n2598'>2598</a>
<a id='n2599' href='#n2599'>2599</a>
<a id='n2600' href='#n2600'>2600</a>
<a id='n2601' href='#n2601'>2601</a>
<a id='n2602' href='#n2602'>2602</a>
<a id='n2603' href='#n2603'>2603</a>
<a id='n2604' href='#n2604'>2604</a>
<a id='n2605' href='#n2605'>2605</a>
<a id='n2606' href='#n2606'>2606</a>
<a id='n2607' href='#n2607'>2607</a>
<a id='n2608' href='#n2608'>2608</a>
<a id='n2609' href='#n2609'>2609</a>
<a id='n2610' href='#n2610'>2610</a>
<a id='n2611' href='#n2611'>2611</a>
<a id='n2612' href='#n2612'>2612</a>
<a id='n2613' href='#n2613'>2613</a>
<a id='n2614' href='#n2614'>2614</a>
<a id='n2615' href='#n2615'>2615</a>
<a id='n2616' href='#n2616'>2616</a>
<a id='n2617' href='#n2617'>2617</a>
<a id='n2618' href='#n2618'>2618</a>
<a id='n2619' href='#n2619'>2619</a>
<a id='n2620' href='#n2620'>2620</a>
<a id='n2621' href='#n2621'>2621</a>
<a id='n2622' href='#n2622'>2622</a>
<a id='n2623' href='#n2623'>2623</a>
<a id='n2624' href='#n2624'>2624</a>
<a id='n2625' href='#n2625'>2625</a>
<a id='n2626' href='#n2626'>2626</a>
<a id='n2627' href='#n2627'>2627</a>
<a id='n2628' href='#n2628'>2628</a>
<a id='n2629' href='#n2629'>2629</a>
<a id='n2630' href='#n2630'>2630</a>
<a id='n2631' href='#n2631'>2631</a>
<a id='n2632' href='#n2632'>2632</a>
<a id='n2633' href='#n2633'>2633</a>
<a id='n2634' href='#n2634'>2634</a>
<a id='n2635' href='#n2635'>2635</a>
<a id='n2636' href='#n2636'>2636</a>
<a id='n2637' href='#n2637'>2637</a>
<a id='n2638' href='#n2638'>2638</a>
<a id='n2639' href='#n2639'>2639</a>
<a id='n2640' href='#n2640'>2640</a>
<a id='n2641' href='#n2641'>2641</a>
<a id='n2642' href='#n2642'>2642</a>
<a id='n2643' href='#n2643'>2643</a>
<a id='n2644' href='#n2644'>2644</a>
<a id='n2645' href='#n2645'>2645</a>
<a id='n2646' href='#n2646'>2646</a>
<a id='n2647' href='#n2647'>2647</a>
<a id='n2648' href='#n2648'>2648</a>
<a id='n2649' href='#n2649'>2649</a>
<a id='n2650' href='#n2650'>2650</a>
<a id='n2651' href='#n2651'>2651</a>
<a id='n2652' href='#n2652'>2652</a>
<a id='n2653' href='#n2653'>2653</a>
<a id='n2654' href='#n2654'>2654</a>
<a id='n2655' href='#n2655'>2655</a>
<a id='n2656' href='#n2656'>2656</a>
<a id='n2657' href='#n2657'>2657</a>
<a id='n2658' href='#n2658'>2658</a>
<a id='n2659' href='#n2659'>2659</a>
<a id='n2660' href='#n2660'>2660</a>
<a id='n2661' href='#n2661'>2661</a>
<a id='n2662' href='#n2662'>2662</a>
<a id='n2663' href='#n2663'>2663</a>
<a id='n2664' href='#n2664'>2664</a>
<a id='n2665' href='#n2665'>2665</a>
<a id='n2666' href='#n2666'>2666</a>
<a id='n2667' href='#n2667'>2667</a>
<a id='n2668' href='#n2668'>2668</a>
<a id='n2669' href='#n2669'>2669</a>
<a id='n2670' href='#n2670'>2670</a>
<a id='n2671' href='#n2671'>2671</a>
<a id='n2672' href='#n2672'>2672</a>
<a id='n2673' href='#n2673'>2673</a>
<a id='n2674' href='#n2674'>2674</a>
<a id='n2675' href='#n2675'>2675</a>
<a id='n2676' href='#n2676'>2676</a>
<a id='n2677' href='#n2677'>2677</a>
<a id='n2678' href='#n2678'>2678</a>
<a id='n2679' href='#n2679'>2679</a>
<a id='n2680' href='#n2680'>2680</a>
<a id='n2681' href='#n2681'>2681</a>
<a id='n2682' href='#n2682'>2682</a>
<a id='n2683' href='#n2683'>2683</a>
<a id='n2684' href='#n2684'>2684</a>
<a id='n2685' href='#n2685'>2685</a>
<a id='n2686' href='#n2686'>2686</a>
<a id='n2687' href='#n2687'>2687</a>
<a id='n2688' href='#n2688'>2688</a>
<a id='n2689' href='#n2689'>2689</a>
<a id='n2690' href='#n2690'>2690</a>
<a id='n2691' href='#n2691'>2691</a>
<a id='n2692' href='#n2692'>2692</a>
<a id='n2693' href='#n2693'>2693</a>
<a id='n2694' href='#n2694'>2694</a>
<a id='n2695' href='#n2695'>2695</a>
<a id='n2696' href='#n2696'>2696</a>
<a id='n2697' href='#n2697'>2697</a>
<a id='n2698' href='#n2698'>2698</a>
<a id='n2699' href='#n2699'>2699</a>
<a id='n2700' href='#n2700'>2700</a>
<a id='n2701' href='#n2701'>2701</a>
<a id='n2702' href='#n2702'>2702</a>
<a id='n2703' href='#n2703'>2703</a>
<a id='n2704' href='#n2704'>2704</a>
<a id='n2705' href='#n2705'>2705</a>
<a id='n2706' href='#n2706'>2706</a>
<a id='n2707' href='#n2707'>2707</a>
<a id='n2708' href='#n2708'>2708</a>
<a id='n2709' href='#n2709'>2709</a>
<a id='n2710' href='#n2710'>2710</a>
<a id='n2711' href='#n2711'>2711</a>
<a id='n2712' href='#n2712'>2712</a>
<a id='n2713' href='#n2713'>2713</a>
<a id='n2714' href='#n2714'>2714</a>
<a id='n2715' href='#n2715'>2715</a>
<a id='n2716' href='#n2716'>2716</a>
<a id='n2717' href='#n2717'>2717</a>
<a id='n2718' href='#n2718'>2718</a>
<a id='n2719' href='#n2719'>2719</a>
<a id='n2720' href='#n2720'>2720</a>
<a id='n2721' href='#n2721'>2721</a>
<a id='n2722' href='#n2722'>2722</a>
<a id='n2723' href='#n2723'>2723</a>
<a id='n2724' href='#n2724'>2724</a>
<a id='n2725' href='#n2725'>2725</a>
<a id='n2726' href='#n2726'>2726</a>
<a id='n2727' href='#n2727'>2727</a>
<a id='n2728' href='#n2728'>2728</a>
<a id='n2729' href='#n2729'>2729</a>
<a id='n2730' href='#n2730'>2730</a>
<a id='n2731' href='#n2731'>2731</a>
<a id='n2732' href='#n2732'>2732</a>
<a id='n2733' href='#n2733'>2733</a>
<a id='n2734' href='#n2734'>2734</a>
<a id='n2735' href='#n2735'>2735</a>
<a id='n2736' href='#n2736'>2736</a>
<a id='n2737' href='#n2737'>2737</a>
<a id='n2738' href='#n2738'>2738</a>
<a id='n2739' href='#n2739'>2739</a>
<a id='n2740' href='#n2740'>2740</a>
<a id='n2741' href='#n2741'>2741</a>
<a id='n2742' href='#n2742'>2742</a>
<a id='n2743' href='#n2743'>2743</a>
<a id='n2744' href='#n2744'>2744</a>
<a id='n2745' href='#n2745'>2745</a>
<a id='n2746' href='#n2746'>2746</a>
<a id='n2747' href='#n2747'>2747</a>
<a id='n2748' href='#n2748'>2748</a>
<a id='n2749' href='#n2749'>2749</a>
<a id='n2750' href='#n2750'>2750</a>
<a id='n2751' href='#n2751'>2751</a>
<a id='n2752' href='#n2752'>2752</a>
<a id='n2753' href='#n2753'>2753</a>
<a id='n2754' href='#n2754'>2754</a>
<a id='n2755' href='#n2755'>2755</a>
<a id='n2756' href='#n2756'>2756</a>
<a id='n2757' href='#n2757'>2757</a>
<a id='n2758' href='#n2758'>2758</a>
<a id='n2759' href='#n2759'>2759</a>
<a id='n2760' href='#n2760'>2760</a>
<a id='n2761' href='#n2761'>2761</a>
<a id='n2762' href='#n2762'>2762</a>
<a id='n2763' href='#n2763'>2763</a>
<a id='n2764' href='#n2764'>2764</a>
<a id='n2765' href='#n2765'>2765</a>
<a id='n2766' href='#n2766'>2766</a>
<a id='n2767' href='#n2767'>2767</a>
<a id='n2768' href='#n2768'>2768</a>
<a id='n2769' href='#n2769'>2769</a>
<a id='n2770' href='#n2770'>2770</a>
<a id='n2771' href='#n2771'>2771</a>
<a id='n2772' href='#n2772'>2772</a>
<a id='n2773' href='#n2773'>2773</a>
<a id='n2774' href='#n2774'>2774</a>
<a id='n2775' href='#n2775'>2775</a>
<a id='n2776' href='#n2776'>2776</a>
<a id='n2777' href='#n2777'>2777</a>
<a id='n2778' href='#n2778'>2778</a>
<a id='n2779' href='#n2779'>2779</a>
<a id='n2780' href='#n2780'>2780</a>
<a id='n2781' href='#n2781'>2781</a>
<a id='n2782' href='#n2782'>2782</a>
<a id='n2783' href='#n2783'>2783</a>
<a id='n2784' href='#n2784'>2784</a>
<a id='n2785' href='#n2785'>2785</a>
<a id='n2786' href='#n2786'>2786</a>
<a id='n2787' href='#n2787'>2787</a>
<a id='n2788' href='#n2788'>2788</a>
<a id='n2789' href='#n2789'>2789</a>
<a id='n2790' href='#n2790'>2790</a>
<a id='n2791' href='#n2791'>2791</a>
<a id='n2792' href='#n2792'>2792</a>
<a id='n2793' href='#n2793'>2793</a>
<a id='n2794' href='#n2794'>2794</a>
<a id='n2795' href='#n2795'>2795</a>
<a id='n2796' href='#n2796'>2796</a>
<a id='n2797' href='#n2797'>2797</a>
<a id='n2798' href='#n2798'>2798</a>
<a id='n2799' href='#n2799'>2799</a>
<a id='n2800' href='#n2800'>2800</a>
<a id='n2801' href='#n2801'>2801</a>
<a id='n2802' href='#n2802'>2802</a>
<a id='n2803' href='#n2803'>2803</a>
<a id='n2804' href='#n2804'>2804</a>
<a id='n2805' href='#n2805'>2805</a>
<a id='n2806' href='#n2806'>2806</a>
<a id='n2807' href='#n2807'>2807</a>
<a id='n2808' href='#n2808'>2808</a>
<a id='n2809' href='#n2809'>2809</a>
<a id='n2810' href='#n2810'>2810</a>
<a id='n2811' href='#n2811'>2811</a>
<a id='n2812' href='#n2812'>2812</a>
<a id='n2813' href='#n2813'>2813</a>
<a id='n2814' href='#n2814'>2814</a>
<a id='n2815' href='#n2815'>2815</a>
<a id='n2816' href='#n2816'>2816</a>
<a id='n2817' href='#n2817'>2817</a>
<a id='n2818' href='#n2818'>2818</a>
<a id='n2819' href='#n2819'>2819</a>
<a id='n2820' href='#n2820'>2820</a>
<a id='n2821' href='#n2821'>2821</a>
<a id='n2822' href='#n2822'>2822</a>
<a id='n2823' href='#n2823'>2823</a>
<a id='n2824' href='#n2824'>2824</a>
<a id='n2825' href='#n2825'>2825</a>
<a id='n2826' href='#n2826'>2826</a>
<a id='n2827' href='#n2827'>2827</a>
<a id='n2828' href='#n2828'>2828</a>
<a id='n2829' href='#n2829'>2829</a>
<a id='n2830' href='#n2830'>2830</a>
<a id='n2831' href='#n2831'>2831</a>
<a id='n2832' href='#n2832'>2832</a>
<a id='n2833' href='#n2833'>2833</a>
<a id='n2834' href='#n2834'>2834</a>
<a id='n2835' href='#n2835'>2835</a>
<a id='n2836' href='#n2836'>2836</a>
<a id='n2837' href='#n2837'>2837</a>
<a id='n2838' href='#n2838'>2838</a>
<a id='n2839' href='#n2839'>2839</a>
<a id='n2840' href='#n2840'>2840</a>
<a id='n2841' href='#n2841'>2841</a>
<a id='n2842' href='#n2842'>2842</a>
<a id='n2843' href='#n2843'>2843</a>
<a id='n2844' href='#n2844'>2844</a>
<a id='n2845' href='#n2845'>2845</a>
<a id='n2846' href='#n2846'>2846</a>
<a id='n2847' href='#n2847'>2847</a>
<a id='n2848' href='#n2848'>2848</a>
<a id='n2849' href='#n2849'>2849</a>
<a id='n2850' href='#n2850'>2850</a>
<a id='n2851' href='#n2851'>2851</a>
<a id='n2852' href='#n2852'>2852</a>
<a id='n2853' href='#n2853'>2853</a>
<a id='n2854' href='#n2854'>2854</a>
<a id='n2855' href='#n2855'>2855</a>
<a id='n2856' href='#n2856'>2856</a>
<a id='n2857' href='#n2857'>2857</a>
<a id='n2858' href='#n2858'>2858</a>
<a id='n2859' href='#n2859'>2859</a>
<a id='n2860' href='#n2860'>2860</a>
<a id='n2861' href='#n2861'>2861</a>
<a id='n2862' href='#n2862'>2862</a>
<a id='n2863' href='#n2863'>2863</a>
<a id='n2864' href='#n2864'>2864</a>
<a id='n2865' href='#n2865'>2865</a>
<a id='n2866' href='#n2866'>2866</a>
<a id='n2867' href='#n2867'>2867</a>
<a id='n2868' href='#n2868'>2868</a>
<a id='n2869' href='#n2869'>2869</a>
<a id='n2870' href='#n2870'>2870</a>
<a id='n2871' href='#n2871'>2871</a>
<a id='n2872' href='#n2872'>2872</a>
<a id='n2873' href='#n2873'>2873</a>
<a id='n2874' href='#n2874'>2874</a>
<a id='n2875' href='#n2875'>2875</a>
<a id='n2876' href='#n2876'>2876</a>
<a id='n2877' href='#n2877'>2877</a>
<a id='n2878' href='#n2878'>2878</a>
<a id='n2879' href='#n2879'>2879</a>
<a id='n2880' href='#n2880'>2880</a>
<a id='n2881' href='#n2881'>2881</a>
<a id='n2882' href='#n2882'>2882</a>
<a id='n2883' href='#n2883'>2883</a>
<a id='n2884' href='#n2884'>2884</a>
<a id='n2885' href='#n2885'>2885</a>
<a id='n2886' href='#n2886'>2886</a>
<a id='n2887' href='#n2887'>2887</a>
<a id='n2888' href='#n2888'>2888</a>
<a id='n2889' href='#n2889'>2889</a>
<a id='n2890' href='#n2890'>2890</a>
<a id='n2891' href='#n2891'>2891</a>
<a id='n2892' href='#n2892'>2892</a>
<a id='n2893' href='#n2893'>2893</a>
<a id='n2894' href='#n2894'>2894</a>
<a id='n2895' href='#n2895'>2895</a>
<a id='n2896' href='#n2896'>2896</a>
<a id='n2897' href='#n2897'>2897</a>
<a id='n2898' href='#n2898'>2898</a>
<a id='n2899' href='#n2899'>2899</a>
<a id='n2900' href='#n2900'>2900</a>
<a id='n2901' href='#n2901'>2901</a>
<a id='n2902' href='#n2902'>2902</a>
<a id='n2903' href='#n2903'>2903</a>
<a id='n2904' href='#n2904'>2904</a>
<a id='n2905' href='#n2905'>2905</a>
<a id='n2906' href='#n2906'>2906</a>
<a id='n2907' href='#n2907'>2907</a>
<a id='n2908' href='#n2908'>2908</a>
<a id='n2909' href='#n2909'>2909</a>
<a id='n2910' href='#n2910'>2910</a>
<a id='n2911' href='#n2911'>2911</a>
<a id='n2912' href='#n2912'>2912</a>
<a id='n2913' href='#n2913'>2913</a>
<a id='n2914' href='#n2914'>2914</a>
<a id='n2915' href='#n2915'>2915</a>
<a id='n2916' href='#n2916'>2916</a>
<a id='n2917' href='#n2917'>2917</a>
<a id='n2918' href='#n2918'>2918</a>
<a id='n2919' href='#n2919'>2919</a>
<a id='n2920' href='#n2920'>2920</a>
<a id='n2921' href='#n2921'>2921</a>
<a id='n2922' href='#n2922'>2922</a>
<a id='n2923' href='#n2923'>2923</a>
<a id='n2924' href='#n2924'>2924</a>
<a id='n2925' href='#n2925'>2925</a>
<a id='n2926' href='#n2926'>2926</a>
<a id='n2927' href='#n2927'>2927</a>
<a id='n2928' href='#n2928'>2928</a>
<a id='n2929' href='#n2929'>2929</a>
<a id='n2930' href='#n2930'>2930</a>
<a id='n2931' href='#n2931'>2931</a>
<a id='n2932' href='#n2932'>2932</a>
<a id='n2933' href='#n2933'>2933</a>
<a id='n2934' href='#n2934'>2934</a>
<a id='n2935' href='#n2935'>2935</a>
<a id='n2936' href='#n2936'>2936</a>
<a id='n2937' href='#n2937'>2937</a>
<a id='n2938' href='#n2938'>2938</a>
<a id='n2939' href='#n2939'>2939</a>
<a id='n2940' href='#n2940'>2940</a>
<a id='n2941' href='#n2941'>2941</a>
<a id='n2942' href='#n2942'>2942</a>
<a id='n2943' href='#n2943'>2943</a>
<a id='n2944' href='#n2944'>2944</a>
<a id='n2945' href='#n2945'>2945</a>
<a id='n2946' href='#n2946'>2946</a>
<a id='n2947' href='#n2947'>2947</a>
<a id='n2948' href='#n2948'>2948</a>
<a id='n2949' href='#n2949'>2949</a>
<a id='n2950' href='#n2950'>2950</a>
<a id='n2951' href='#n2951'>2951</a>
<a id='n2952' href='#n2952'>2952</a>
<a id='n2953' href='#n2953'>2953</a>
<a id='n2954' href='#n2954'>2954</a>
<a id='n2955' href='#n2955'>2955</a>
<a id='n2956' href='#n2956'>2956</a>
<a id='n2957' href='#n2957'>2957</a>
<a id='n2958' href='#n2958'>2958</a>
<a id='n2959' href='#n2959'>2959</a>
<a id='n2960' href='#n2960'>2960</a>
<a id='n2961' href='#n2961'>2961</a>
<a id='n2962' href='#n2962'>2962</a>
<a id='n2963' href='#n2963'>2963</a>
<a id='n2964' href='#n2964'>2964</a>
<a id='n2965' href='#n2965'>2965</a>
<a id='n2966' href='#n2966'>2966</a>
<a id='n2967' href='#n2967'>2967</a>
<a id='n2968' href='#n2968'>2968</a>
<a id='n2969' href='#n2969'>2969</a>
<a id='n2970' href='#n2970'>2970</a>
<a id='n2971' href='#n2971'>2971</a>
<a id='n2972' href='#n2972'>2972</a>
<a id='n2973' href='#n2973'>2973</a>
<a id='n2974' href='#n2974'>2974</a>
<a id='n2975' href='#n2975'>2975</a>
<a id='n2976' href='#n2976'>2976</a>
<a id='n2977' href='#n2977'>2977</a>
<a id='n2978' href='#n2978'>2978</a>
<a id='n2979' href='#n2979'>2979</a>
<a id='n2980' href='#n2980'>2980</a>
<a id='n2981' href='#n2981'>2981</a>
<a id='n2982' href='#n2982'>2982</a>
<a id='n2983' href='#n2983'>2983</a>
<a id='n2984' href='#n2984'>2984</a>
<a id='n2985' href='#n2985'>2985</a>
<a id='n2986' href='#n2986'>2986</a>
<a id='n2987' href='#n2987'>2987</a>
<a id='n2988' href='#n2988'>2988</a>
<a id='n2989' href='#n2989'>2989</a>
<a id='n2990' href='#n2990'>2990</a>
<a id='n2991' href='#n2991'>2991</a>
<a id='n2992' href='#n2992'>2992</a>
<a id='n2993' href='#n2993'>2993</a>
<a id='n2994' href='#n2994'>2994</a>
<a id='n2995' href='#n2995'>2995</a>
<a id='n2996' href='#n2996'>2996</a>
<a id='n2997' href='#n2997'>2997</a>
<a id='n2998' href='#n2998'>2998</a>
<a id='n2999' href='#n2999'>2999</a>
<a id='n3000' href='#n3000'>3000</a>
<a id='n3001' href='#n3001'>3001</a>
<a id='n3002' href='#n3002'>3002</a>
<a id='n3003' href='#n3003'>3003</a>
<a id='n3004' href='#n3004'>3004</a>
<a id='n3005' href='#n3005'>3005</a>
<a id='n3006' href='#n3006'>3006</a>
<a id='n3007' href='#n3007'>3007</a>
<a id='n3008' href='#n3008'>3008</a>
<a id='n3009' href='#n3009'>3009</a>
<a id='n3010' href='#n3010'>3010</a>
<a id='n3011' href='#n3011'>3011</a>
<a id='n3012' href='#n3012'>3012</a>
<a id='n3013' href='#n3013'>3013</a>
<a id='n3014' href='#n3014'>3014</a>
<a id='n3015' href='#n3015'>3015</a>
<a id='n3016' href='#n3016'>3016</a>
<a id='n3017' href='#n3017'>3017</a>
<a id='n3018' href='#n3018'>3018</a>
<a id='n3019' href='#n3019'>3019</a>
<a id='n3020' href='#n3020'>3020</a>
<a id='n3021' href='#n3021'>3021</a>
<a id='n3022' href='#n3022'>3022</a>
<a id='n3023' href='#n3023'>3023</a>
<a id='n3024' href='#n3024'>3024</a>
<a id='n3025' href='#n3025'>3025</a>
<a id='n3026' href='#n3026'>3026</a>
<a id='n3027' href='#n3027'>3027</a>
<a id='n3028' href='#n3028'>3028</a>
<a id='n3029' href='#n3029'>3029</a>
<a id='n3030' href='#n3030'>3030</a>
<a id='n3031' href='#n3031'>3031</a>
<a id='n3032' href='#n3032'>3032</a>
<a id='n3033' href='#n3033'>3033</a>
<a id='n3034' href='#n3034'>3034</a>
<a id='n3035' href='#n3035'>3035</a>
<a id='n3036' href='#n3036'>3036</a>
<a id='n3037' href='#n3037'>3037</a>
<a id='n3038' href='#n3038'>3038</a>
<a id='n3039' href='#n3039'>3039</a>
<a id='n3040' href='#n3040'>3040</a>
<a id='n3041' href='#n3041'>3041</a>
<a id='n3042' href='#n3042'>3042</a>
<a id='n3043' href='#n3043'>3043</a>
<a id='n3044' href='#n3044'>3044</a>
<a id='n3045' href='#n3045'>3045</a>
<a id='n3046' href='#n3046'>3046</a>
<a id='n3047' href='#n3047'>3047</a>
<a id='n3048' href='#n3048'>3048</a>
<a id='n3049' href='#n3049'>3049</a>
<a id='n3050' href='#n3050'>3050</a>
<a id='n3051' href='#n3051'>3051</a>
<a id='n3052' href='#n3052'>3052</a>
<a id='n3053' href='#n3053'>3053</a>
<a id='n3054' href='#n3054'>3054</a>
<a id='n3055' href='#n3055'>3055</a>
<a id='n3056' href='#n3056'>3056</a>
<a id='n3057' href='#n3057'>3057</a>
<a id='n3058' href='#n3058'>3058</a>
<a id='n3059' href='#n3059'>3059</a>
<a id='n3060' href='#n3060'>3060</a>
<a id='n3061' href='#n3061'>3061</a>
<a id='n3062' href='#n3062'>3062</a>
<a id='n3063' href='#n3063'>3063</a>
<a id='n3064' href='#n3064'>3064</a>
<a id='n3065' href='#n3065'>3065</a>
<a id='n3066' href='#n3066'>3066</a>
<a id='n3067' href='#n3067'>3067</a>
<a id='n3068' href='#n3068'>3068</a>
<a id='n3069' href='#n3069'>3069</a>
<a id='n3070' href='#n3070'>3070</a>
<a id='n3071' href='#n3071'>3071</a>
<a id='n3072' href='#n3072'>3072</a>
<a id='n3073' href='#n3073'>3073</a>
<a id='n3074' href='#n3074'>3074</a>
<a id='n3075' href='#n3075'>3075</a>
<a id='n3076' href='#n3076'>3076</a>
<a id='n3077' href='#n3077'>3077</a>
<a id='n3078' href='#n3078'>3078</a>
<a id='n3079' href='#n3079'>3079</a>
<a id='n3080' href='#n3080'>3080</a>
<a id='n3081' href='#n3081'>3081</a>
<a id='n3082' href='#n3082'>3082</a>
<a id='n3083' href='#n3083'>3083</a>
<a id='n3084' href='#n3084'>3084</a>
<a id='n3085' href='#n3085'>3085</a>
<a id='n3086' href='#n3086'>3086</a>
<a id='n3087' href='#n3087'>3087</a>
<a id='n3088' href='#n3088'>3088</a>
<a id='n3089' href='#n3089'>3089</a>
<a id='n3090' href='#n3090'>3090</a>
<a id='n3091' href='#n3091'>3091</a>
<a id='n3092' href='#n3092'>3092</a>
<a id='n3093' href='#n3093'>3093</a>
<a id='n3094' href='#n3094'>3094</a>
<a id='n3095' href='#n3095'>3095</a>
<a id='n3096' href='#n3096'>3096</a>
<a id='n3097' href='#n3097'>3097</a>
<a id='n3098' href='#n3098'>3098</a>
<a id='n3099' href='#n3099'>3099</a>
<a id='n3100' href='#n3100'>3100</a>
<a id='n3101' href='#n3101'>3101</a>
<a id='n3102' href='#n3102'>3102</a>
<a id='n3103' href='#n3103'>3103</a>
<a id='n3104' href='#n3104'>3104</a>
<a id='n3105' href='#n3105'>3105</a>
<a id='n3106' href='#n3106'>3106</a>
<a id='n3107' href='#n3107'>3107</a>
<a id='n3108' href='#n3108'>3108</a>
<a id='n3109' href='#n3109'>3109</a>
<a id='n3110' href='#n3110'>3110</a>
<a id='n3111' href='#n3111'>3111</a>
<a id='n3112' href='#n3112'>3112</a>
<a id='n3113' href='#n3113'>3113</a>
<a id='n3114' href='#n3114'>3114</a>
<a id='n3115' href='#n3115'>3115</a>
<a id='n3116' href='#n3116'>3116</a>
<a id='n3117' href='#n3117'>3117</a>
<a id='n3118' href='#n3118'>3118</a>
<a id='n3119' href='#n3119'>3119</a>
<a id='n3120' href='#n3120'>3120</a>
<a id='n3121' href='#n3121'>3121</a>
<a id='n3122' href='#n3122'>3122</a>
<a id='n3123' href='#n3123'>3123</a>
<a id='n3124' href='#n3124'>3124</a>
<a id='n3125' href='#n3125'>3125</a>
<a id='n3126' href='#n3126'>3126</a>
<a id='n3127' href='#n3127'>3127</a>
<a id='n3128' href='#n3128'>3128</a>
<a id='n3129' href='#n3129'>3129</a>
<a id='n3130' href='#n3130'>3130</a>
<a id='n3131' href='#n3131'>3131</a>
<a id='n3132' href='#n3132'>3132</a>
<a id='n3133' href='#n3133'>3133</a>
<a id='n3134' href='#n3134'>3134</a>
<a id='n3135' href='#n3135'>3135</a>
<a id='n3136' href='#n3136'>3136</a>
<a id='n3137' href='#n3137'>3137</a>
<a id='n3138' href='#n3138'>3138</a>
<a id='n3139' href='#n3139'>3139</a>
<a id='n3140' href='#n3140'>3140</a>
<a id='n3141' href='#n3141'>3141</a>
<a id='n3142' href='#n3142'>3142</a>
<a id='n3143' href='#n3143'>3143</a>
<a id='n3144' href='#n3144'>3144</a>
<a id='n3145' href='#n3145'>3145</a>
<a id='n3146' href='#n3146'>3146</a>
<a id='n3147' href='#n3147'>3147</a>
<a id='n3148' href='#n3148'>3148</a>
<a id='n3149' href='#n3149'>3149</a>
<a id='n3150' href='#n3150'>3150</a>
<a id='n3151' href='#n3151'>3151</a>
<a id='n3152' href='#n3152'>3152</a>
<a id='n3153' href='#n3153'>3153</a>
<a id='n3154' href='#n3154'>3154</a>
<a id='n3155' href='#n3155'>3155</a>
<a id='n3156' href='#n3156'>3156</a>
<a id='n3157' href='#n3157'>3157</a>
<a id='n3158' href='#n3158'>3158</a>
<a id='n3159' href='#n3159'>3159</a>
<a id='n3160' href='#n3160'>3160</a>
<a id='n3161' href='#n3161'>3161</a>
<a id='n3162' href='#n3162'>3162</a>
<a id='n3163' href='#n3163'>3163</a>
<a id='n3164' href='#n3164'>3164</a>
<a id='n3165' href='#n3165'>3165</a>
<a id='n3166' href='#n3166'>3166</a>
<a id='n3167' href='#n3167'>3167</a>
<a id='n3168' href='#n3168'>3168</a>
<a id='n3169' href='#n3169'>3169</a>
<a id='n3170' href='#n3170'>3170</a>
<a id='n3171' href='#n3171'>3171</a>
<a id='n3172' href='#n3172'>3172</a>
<a id='n3173' href='#n3173'>3173</a>
<a id='n3174' href='#n3174'>3174</a>
<a id='n3175' href='#n3175'>3175</a>
<a id='n3176' href='#n3176'>3176</a>
<a id='n3177' href='#n3177'>3177</a>
<a id='n3178' href='#n3178'>3178</a>
<a id='n3179' href='#n3179'>3179</a>
<a id='n3180' href='#n3180'>3180</a>
<a id='n3181' href='#n3181'>3181</a>
<a id='n3182' href='#n3182'>3182</a>
<a id='n3183' href='#n3183'>3183</a>
<a id='n3184' href='#n3184'>3184</a>
<a id='n3185' href='#n3185'>3185</a>
<a id='n3186' href='#n3186'>3186</a>
<a id='n3187' href='#n3187'>3187</a>
<a id='n3188' href='#n3188'>3188</a>
<a id='n3189' href='#n3189'>3189</a>
<a id='n3190' href='#n3190'>3190</a>
<a id='n3191' href='#n3191'>3191</a>
<a id='n3192' href='#n3192'>3192</a>
<a id='n3193' href='#n3193'>3193</a>
<a id='n3194' href='#n3194'>3194</a>
<a id='n3195' href='#n3195'>3195</a>
<a id='n3196' href='#n3196'>3196</a>
<a id='n3197' href='#n3197'>3197</a>
<a id='n3198' href='#n3198'>3198</a>
<a id='n3199' href='#n3199'>3199</a>
<a id='n3200' href='#n3200'>3200</a>
<a id='n3201' href='#n3201'>3201</a>
<a id='n3202' href='#n3202'>3202</a>
<a id='n3203' href='#n3203'>3203</a>
<a id='n3204' href='#n3204'>3204</a>
<a id='n3205' href='#n3205'>3205</a>
<a id='n3206' href='#n3206'>3206</a>
<a id='n3207' href='#n3207'>3207</a>
<a id='n3208' href='#n3208'>3208</a>
<a id='n3209' href='#n3209'>3209</a>
<a id='n3210' href='#n3210'>3210</a>
<a id='n3211' href='#n3211'>3211</a>
<a id='n3212' href='#n3212'>3212</a>
<a id='n3213' href='#n3213'>3213</a>
<a id='n3214' href='#n3214'>3214</a>
<a id='n3215' href='#n3215'>3215</a>
<a id='n3216' href='#n3216'>3216</a>
<a id='n3217' href='#n3217'>3217</a>
<a id='n3218' href='#n3218'>3218</a>
<a id='n3219' href='#n3219'>3219</a>
<a id='n3220' href='#n3220'>3220</a>
<a id='n3221' href='#n3221'>3221</a>
<a id='n3222' href='#n3222'>3222</a>
<a id='n3223' href='#n3223'>3223</a>
<a id='n3224' href='#n3224'>3224</a>
<a id='n3225' href='#n3225'>3225</a>
<a id='n3226' href='#n3226'>3226</a>
<a id='n3227' href='#n3227'>3227</a>
<a id='n3228' href='#n3228'>3228</a>
<a id='n3229' href='#n3229'>3229</a>
<a id='n3230' href='#n3230'>3230</a>
<a id='n3231' href='#n3231'>3231</a>
<a id='n3232' href='#n3232'>3232</a>
<a id='n3233' href='#n3233'>3233</a>
<a id='n3234' href='#n3234'>3234</a>
<a id='n3235' href='#n3235'>3235</a>
<a id='n3236' href='#n3236'>3236</a>
<a id='n3237' href='#n3237'>3237</a>
<a id='n3238' href='#n3238'>3238</a>
<a id='n3239' href='#n3239'>3239</a>
<a id='n3240' href='#n3240'>3240</a>
<a id='n3241' href='#n3241'>3241</a>
<a id='n3242' href='#n3242'>3242</a>
<a id='n3243' href='#n3243'>3243</a>
<a id='n3244' href='#n3244'>3244</a>
<a id='n3245' href='#n3245'>3245</a>
<a id='n3246' href='#n3246'>3246</a>
<a id='n3247' href='#n3247'>3247</a>
<a id='n3248' href='#n3248'>3248</a>
<a id='n3249' href='#n3249'>3249</a>
<a id='n3250' href='#n3250'>3250</a>
<a id='n3251' href='#n3251'>3251</a>
<a id='n3252' href='#n3252'>3252</a>
<a id='n3253' href='#n3253'>3253</a>
<a id='n3254' href='#n3254'>3254</a>
<a id='n3255' href='#n3255'>3255</a>
<a id='n3256' href='#n3256'>3256</a>
<a id='n3257' href='#n3257'>3257</a>
<a id='n3258' href='#n3258'>3258</a>
<a id='n3259' href='#n3259'>3259</a>
<a id='n3260' href='#n3260'>3260</a>
<a id='n3261' href='#n3261'>3261</a>
<a id='n3262' href='#n3262'>3262</a>
<a id='n3263' href='#n3263'>3263</a>
<a id='n3264' href='#n3264'>3264</a>
<a id='n3265' href='#n3265'>3265</a>
<a id='n3266' href='#n3266'>3266</a>
<a id='n3267' href='#n3267'>3267</a>
<a id='n3268' href='#n3268'>3268</a>
<a id='n3269' href='#n3269'>3269</a>
<a id='n3270' href='#n3270'>3270</a>
<a id='n3271' href='#n3271'>3271</a>
<a id='n3272' href='#n3272'>3272</a>
<a id='n3273' href='#n3273'>3273</a>
<a id='n3274' href='#n3274'>3274</a>
<a id='n3275' href='#n3275'>3275</a>
<a id='n3276' href='#n3276'>3276</a>
<a id='n3277' href='#n3277'>3277</a>
<a id='n3278' href='#n3278'>3278</a>
<a id='n3279' href='#n3279'>3279</a>
<a id='n3280' href='#n3280'>3280</a>
<a id='n3281' href='#n3281'>3281</a>
<a id='n3282' href='#n3282'>3282</a>
<a id='n3283' href='#n3283'>3283</a>
<a id='n3284' href='#n3284'>3284</a>
<a id='n3285' href='#n3285'>3285</a>
<a id='n3286' href='#n3286'>3286</a>
<a id='n3287' href='#n3287'>3287</a>
<a id='n3288' href='#n3288'>3288</a>
<a id='n3289' href='#n3289'>3289</a>
<a id='n3290' href='#n3290'>3290</a>
<a id='n3291' href='#n3291'>3291</a>
<a id='n3292' href='#n3292'>3292</a>
<a id='n3293' href='#n3293'>3293</a>
<a id='n3294' href='#n3294'>3294</a>
<a id='n3295' href='#n3295'>3295</a>
<a id='n3296' href='#n3296'>3296</a>
<a id='n3297' href='#n3297'>3297</a>
<a id='n3298' href='#n3298'>3298</a>
<a id='n3299' href='#n3299'>3299</a>
<a id='n3300' href='#n3300'>3300</a>
<a id='n3301' href='#n3301'>3301</a>
<a id='n3302' href='#n3302'>3302</a>
<a id='n3303' href='#n3303'>3303</a>
<a id='n3304' href='#n3304'>3304</a>
<a id='n3305' href='#n3305'>3305</a>
<a id='n3306' href='#n3306'>3306</a>
<a id='n3307' href='#n3307'>3307</a>
<a id='n3308' href='#n3308'>3308</a>
<a id='n3309' href='#n3309'>3309</a>
<a id='n3310' href='#n3310'>3310</a>
<a id='n3311' href='#n3311'>3311</a>
<a id='n3312' href='#n3312'>3312</a>
<a id='n3313' href='#n3313'>3313</a>
<a id='n3314' href='#n3314'>3314</a>
<a id='n3315' href='#n3315'>3315</a>
<a id='n3316' href='#n3316'>3316</a>
<a id='n3317' href='#n3317'>3317</a>
<a id='n3318' href='#n3318'>3318</a>
<a id='n3319' href='#n3319'>3319</a>
<a id='n3320' href='#n3320'>3320</a>
<a id='n3321' href='#n3321'>3321</a>
<a id='n3322' href='#n3322'>3322</a>
<a id='n3323' href='#n3323'>3323</a>
<a id='n3324' href='#n3324'>3324</a>
<a id='n3325' href='#n3325'>3325</a>
<a id='n3326' href='#n3326'>3326</a>
<a id='n3327' href='#n3327'>3327</a>
<a id='n3328' href='#n3328'>3328</a>
<a id='n3329' href='#n3329'>3329</a>
<a id='n3330' href='#n3330'>3330</a>
<a id='n3331' href='#n3331'>3331</a>
<a id='n3332' href='#n3332'>3332</a>
<a id='n3333' href='#n3333'>3333</a>
<a id='n3334' href='#n3334'>3334</a>
<a id='n3335' href='#n3335'>3335</a>
<a id='n3336' href='#n3336'>3336</a>
<a id='n3337' href='#n3337'>3337</a>
<a id='n3338' href='#n3338'>3338</a>
<a id='n3339' href='#n3339'>3339</a>
<a id='n3340' href='#n3340'>3340</a>
<a id='n3341' href='#n3341'>3341</a>
<a id='n3342' href='#n3342'>3342</a>
<a id='n3343' href='#n3343'>3343</a>
<a id='n3344' href='#n3344'>3344</a>
<a id='n3345' href='#n3345'>3345</a>
<a id='n3346' href='#n3346'>3346</a>
<a id='n3347' href='#n3347'>3347</a>
<a id='n3348' href='#n3348'>3348</a>
<a id='n3349' href='#n3349'>3349</a>
<a id='n3350' href='#n3350'>3350</a>
<a id='n3351' href='#n3351'>3351</a>
<a id='n3352' href='#n3352'>3352</a>
<a id='n3353' href='#n3353'>3353</a>
<a id='n3354' href='#n3354'>3354</a>
<a id='n3355' href='#n3355'>3355</a>
<a id='n3356' href='#n3356'>3356</a>
<a id='n3357' href='#n3357'>3357</a>
<a id='n3358' href='#n3358'>3358</a>
<a id='n3359' href='#n3359'>3359</a>
<a id='n3360' href='#n3360'>3360</a>
<a id='n3361' href='#n3361'>3361</a>
<a id='n3362' href='#n3362'>3362</a>
<a id='n3363' href='#n3363'>3363</a>
<a id='n3364' href='#n3364'>3364</a>
<a id='n3365' href='#n3365'>3365</a>
<a id='n3366' href='#n3366'>3366</a>
<a id='n3367' href='#n3367'>3367</a>
<a id='n3368' href='#n3368'>3368</a>
<a id='n3369' href='#n3369'>3369</a>
<a id='n3370' href='#n3370'>3370</a>
<a id='n3371' href='#n3371'>3371</a>
<a id='n3372' href='#n3372'>3372</a>
<a id='n3373' href='#n3373'>3373</a>
<a id='n3374' href='#n3374'>3374</a>
<a id='n3375' href='#n3375'>3375</a>
<a id='n3376' href='#n3376'>3376</a>
<a id='n3377' href='#n3377'>3377</a>
<a id='n3378' href='#n3378'>3378</a>
<a id='n3379' href='#n3379'>3379</a>
<a id='n3380' href='#n3380'>3380</a>
<a id='n3381' href='#n3381'>3381</a>
<a id='n3382' href='#n3382'>3382</a>
<a id='n3383' href='#n3383'>3383</a>
<a id='n3384' href='#n3384'>3384</a>
<a id='n3385' href='#n3385'>3385</a>
<a id='n3386' href='#n3386'>3386</a>
<a id='n3387' href='#n3387'>3387</a>
<a id='n3388' href='#n3388'>3388</a>
<a id='n3389' href='#n3389'>3389</a>
<a id='n3390' href='#n3390'>3390</a>
<a id='n3391' href='#n3391'>3391</a>
<a id='n3392' href='#n3392'>3392</a>
<a id='n3393' href='#n3393'>3393</a>
<a id='n3394' href='#n3394'>3394</a>
<a id='n3395' href='#n3395'>3395</a>
<a id='n3396' href='#n3396'>3396</a>
<a id='n3397' href='#n3397'>3397</a>
<a id='n3398' href='#n3398'>3398</a>
<a id='n3399' href='#n3399'>3399</a>
<a id='n3400' href='#n3400'>3400</a>
<a id='n3401' href='#n3401'>3401</a>
<a id='n3402' href='#n3402'>3402</a>
<a id='n3403' href='#n3403'>3403</a>
<a id='n3404' href='#n3404'>3404</a>
<a id='n3405' href='#n3405'>3405</a>
<a id='n3406' href='#n3406'>3406</a>
<a id='n3407' href='#n3407'>3407</a>
<a id='n3408' href='#n3408'>3408</a>
<a id='n3409' href='#n3409'>3409</a>
<a id='n3410' href='#n3410'>3410</a>
<a id='n3411' href='#n3411'>3411</a>
<a id='n3412' href='#n3412'>3412</a>
<a id='n3413' href='#n3413'>3413</a>
<a id='n3414' href='#n3414'>3414</a>
<a id='n3415' href='#n3415'>3415</a>
<a id='n3416' href='#n3416'>3416</a>
<a id='n3417' href='#n3417'>3417</a>
<a id='n3418' href='#n3418'>3418</a>
<a id='n3419' href='#n3419'>3419</a>
<a id='n3420' href='#n3420'>3420</a>
<a id='n3421' href='#n3421'>3421</a>
<a id='n3422' href='#n3422'>3422</a>
<a id='n3423' href='#n3423'>3423</a>
<a id='n3424' href='#n3424'>3424</a>
<a id='n3425' href='#n3425'>3425</a>
<a id='n3426' href='#n3426'>3426</a>
<a id='n3427' href='#n3427'>3427</a>
<a id='n3428' href='#n3428'>3428</a>
<a id='n3429' href='#n3429'>3429</a>
<a id='n3430' href='#n3430'>3430</a>
<a id='n3431' href='#n3431'>3431</a>
<a id='n3432' href='#n3432'>3432</a>
<a id='n3433' href='#n3433'>3433</a>
<a id='n3434' href='#n3434'>3434</a>
<a id='n3435' href='#n3435'>3435</a>
<a id='n3436' href='#n3436'>3436</a>
<a id='n3437' href='#n3437'>3437</a>
<a id='n3438' href='#n3438'>3438</a>
<a id='n3439' href='#n3439'>3439</a>
<a id='n3440' href='#n3440'>3440</a>
<a id='n3441' href='#n3441'>3441</a>
<a id='n3442' href='#n3442'>3442</a>
<a id='n3443' href='#n3443'>3443</a>
<a id='n3444' href='#n3444'>3444</a>
<a id='n3445' href='#n3445'>3445</a>
<a id='n3446' href='#n3446'>3446</a>
<a id='n3447' href='#n3447'>3447</a>
<a id='n3448' href='#n3448'>3448</a>
<a id='n3449' href='#n3449'>3449</a>
<a id='n3450' href='#n3450'>3450</a>
<a id='n3451' href='#n3451'>3451</a>
<a id='n3452' href='#n3452'>3452</a>
<a id='n3453' href='#n3453'>3453</a>
<a id='n3454' href='#n3454'>3454</a>
<a id='n3455' href='#n3455'>3455</a>
<a id='n3456' href='#n3456'>3456</a>
<a id='n3457' href='#n3457'>3457</a>
<a id='n3458' href='#n3458'>3458</a>
<a id='n3459' href='#n3459'>3459</a>
<a id='n3460' href='#n3460'>3460</a>
<a id='n3461' href='#n3461'>3461</a>
<a id='n3462' href='#n3462'>3462</a>
<a id='n3463' href='#n3463'>3463</a>
<a id='n3464' href='#n3464'>3464</a>
<a id='n3465' href='#n3465'>3465</a>
<a id='n3466' href='#n3466'>3466</a>
<a id='n3467' href='#n3467'>3467</a>
<a id='n3468' href='#n3468'>3468</a>
<a id='n3469' href='#n3469'>3469</a>
<a id='n3470' href='#n3470'>3470</a>
<a id='n3471' href='#n3471'>3471</a>
<a id='n3472' href='#n3472'>3472</a>
<a id='n3473' href='#n3473'>3473</a>
<a id='n3474' href='#n3474'>3474</a>
<a id='n3475' href='#n3475'>3475</a>
<a id='n3476' href='#n3476'>3476</a>
<a id='n3477' href='#n3477'>3477</a>
<a id='n3478' href='#n3478'>3478</a>
<a id='n3479' href='#n3479'>3479</a>
<a id='n3480' href='#n3480'>3480</a>
<a id='n3481' href='#n3481'>3481</a>
<a id='n3482' href='#n3482'>3482</a>
<a id='n3483' href='#n3483'>3483</a>
<a id='n3484' href='#n3484'>3484</a>
<a id='n3485' href='#n3485'>3485</a>
<a id='n3486' href='#n3486'>3486</a>
<a id='n3487' href='#n3487'>3487</a>
<a id='n3488' href='#n3488'>3488</a>
<a id='n3489' href='#n3489'>3489</a>
<a id='n3490' href='#n3490'>3490</a>
<a id='n3491' href='#n3491'>3491</a>
<a id='n3492' href='#n3492'>3492</a>
<a id='n3493' href='#n3493'>3493</a>
<a id='n3494' href='#n3494'>3494</a>
<a id='n3495' href='#n3495'>3495</a>
<a id='n3496' href='#n3496'>3496</a>
<a id='n3497' href='#n3497'>3497</a>
<a id='n3498' href='#n3498'>3498</a>
<a id='n3499' href='#n3499'>3499</a>
<a id='n3500' href='#n3500'>3500</a>
<a id='n3501' href='#n3501'>3501</a>
<a id='n3502' href='#n3502'>3502</a>
<a id='n3503' href='#n3503'>3503</a>
<a id='n3504' href='#n3504'>3504</a>
<a id='n3505' href='#n3505'>3505</a>
<a id='n3506' href='#n3506'>3506</a>
<a id='n3507' href='#n3507'>3507</a>
<a id='n3508' href='#n3508'>3508</a>
<a id='n3509' href='#n3509'>3509</a>
<a id='n3510' href='#n3510'>3510</a>
<a id='n3511' href='#n3511'>3511</a>
<a id='n3512' href='#n3512'>3512</a>
<a id='n3513' href='#n3513'>3513</a>
<a id='n3514' href='#n3514'>3514</a>
<a id='n3515' href='#n3515'>3515</a>
<a id='n3516' href='#n3516'>3516</a>
<a id='n3517' href='#n3517'>3517</a>
<a id='n3518' href='#n3518'>3518</a>
<a id='n3519' href='#n3519'>3519</a>
<a id='n3520' href='#n3520'>3520</a>
<a id='n3521' href='#n3521'>3521</a>
<a id='n3522' href='#n3522'>3522</a>
<a id='n3523' href='#n3523'>3523</a>
<a id='n3524' href='#n3524'>3524</a>
<a id='n3525' href='#n3525'>3525</a>
<a id='n3526' href='#n3526'>3526</a>
<a id='n3527' href='#n3527'>3527</a>
<a id='n3528' href='#n3528'>3528</a>
<a id='n3529' href='#n3529'>3529</a>
<a id='n3530' href='#n3530'>3530</a>
<a id='n3531' href='#n3531'>3531</a>
<a id='n3532' href='#n3532'>3532</a>
<a id='n3533' href='#n3533'>3533</a>
<a id='n3534' href='#n3534'>3534</a>
<a id='n3535' href='#n3535'>3535</a>
<a id='n3536' href='#n3536'>3536</a>
<a id='n3537' href='#n3537'>3537</a>
<a id='n3538' href='#n3538'>3538</a>
<a id='n3539' href='#n3539'>3539</a>
<a id='n3540' href='#n3540'>3540</a>
<a id='n3541' href='#n3541'>3541</a>
<a id='n3542' href='#n3542'>3542</a>
<a id='n3543' href='#n3543'>3543</a>
<a id='n3544' href='#n3544'>3544</a>
<a id='n3545' href='#n3545'>3545</a>
<a id='n3546' href='#n3546'>3546</a>
<a id='n3547' href='#n3547'>3547</a>
<a id='n3548' href='#n3548'>3548</a>
<a id='n3549' href='#n3549'>3549</a>
<a id='n3550' href='#n3550'>3550</a>
<a id='n3551' href='#n3551'>3551</a>
<a id='n3552' href='#n3552'>3552</a>
<a id='n3553' href='#n3553'>3553</a>
<a id='n3554' href='#n3554'>3554</a>
<a id='n3555' href='#n3555'>3555</a>
<a id='n3556' href='#n3556'>3556</a>
<a id='n3557' href='#n3557'>3557</a>
<a id='n3558' href='#n3558'>3558</a>
<a id='n3559' href='#n3559'>3559</a>
<a id='n3560' href='#n3560'>3560</a>
<a id='n3561' href='#n3561'>3561</a>
<a id='n3562' href='#n3562'>3562</a>
<a id='n3563' href='#n3563'>3563</a>
<a id='n3564' href='#n3564'>3564</a>
<a id='n3565' href='#n3565'>3565</a>
<a id='n3566' href='#n3566'>3566</a>
<a id='n3567' href='#n3567'>3567</a>
<a id='n3568' href='#n3568'>3568</a>
<a id='n3569' href='#n3569'>3569</a>
<a id='n3570' href='#n3570'>3570</a>
<a id='n3571' href='#n3571'>3571</a>
<a id='n3572' href='#n3572'>3572</a>
<a id='n3573' href='#n3573'>3573</a>
<a id='n3574' href='#n3574'>3574</a>
<a id='n3575' href='#n3575'>3575</a>
<a id='n3576' href='#n3576'>3576</a>
<a id='n3577' href='#n3577'>3577</a>
<a id='n3578' href='#n3578'>3578</a>
<a id='n3579' href='#n3579'>3579</a>
<a id='n3580' href='#n3580'>3580</a>
<a id='n3581' href='#n3581'>3581</a>
<a id='n3582' href='#n3582'>3582</a>
<a id='n3583' href='#n3583'>3583</a>
<a id='n3584' href='#n3584'>3584</a>
<a id='n3585' href='#n3585'>3585</a>
<a id='n3586' href='#n3586'>3586</a>
<a id='n3587' href='#n3587'>3587</a>
<a id='n3588' href='#n3588'>3588</a>
<a id='n3589' href='#n3589'>3589</a>
<a id='n3590' href='#n3590'>3590</a>
<a id='n3591' href='#n3591'>3591</a>
<a id='n3592' href='#n3592'>3592</a>
<a id='n3593' href='#n3593'>3593</a>
<a id='n3594' href='#n3594'>3594</a>
<a id='n3595' href='#n3595'>3595</a>
<a id='n3596' href='#n3596'>3596</a>
<a id='n3597' href='#n3597'>3597</a>
<a id='n3598' href='#n3598'>3598</a>
<a id='n3599' href='#n3599'>3599</a>
<a id='n3600' href='#n3600'>3600</a>
<a id='n3601' href='#n3601'>3601</a>
<a id='n3602' href='#n3602'>3602</a>
<a id='n3603' href='#n3603'>3603</a>
<a id='n3604' href='#n3604'>3604</a>
<a id='n3605' href='#n3605'>3605</a>
<a id='n3606' href='#n3606'>3606</a>
<a id='n3607' href='#n3607'>3607</a>
<a id='n3608' href='#n3608'>3608</a>
<a id='n3609' href='#n3609'>3609</a>
<a id='n3610' href='#n3610'>3610</a>
<a id='n3611' href='#n3611'>3611</a>
<a id='n3612' href='#n3612'>3612</a>
<a id='n3613' href='#n3613'>3613</a>
<a id='n3614' href='#n3614'>3614</a>
<a id='n3615' href='#n3615'>3615</a>
<a id='n3616' href='#n3616'>3616</a>
<a id='n3617' href='#n3617'>3617</a>
<a id='n3618' href='#n3618'>3618</a>
<a id='n3619' href='#n3619'>3619</a>
<a id='n3620' href='#n3620'>3620</a>
<a id='n3621' href='#n3621'>3621</a>
<a id='n3622' href='#n3622'>3622</a>
<a id='n3623' href='#n3623'>3623</a>
<a id='n3624' href='#n3624'>3624</a>
<a id='n3625' href='#n3625'>3625</a>
<a id='n3626' href='#n3626'>3626</a>
<a id='n3627' href='#n3627'>3627</a>
<a id='n3628' href='#n3628'>3628</a>
<a id='n3629' href='#n3629'>3629</a>
<a id='n3630' href='#n3630'>3630</a>
<a id='n3631' href='#n3631'>3631</a>
<a id='n3632' href='#n3632'>3632</a>
<a id='n3633' href='#n3633'>3633</a>
<a id='n3634' href='#n3634'>3634</a>
<a id='n3635' href='#n3635'>3635</a>
<a id='n3636' href='#n3636'>3636</a>
<a id='n3637' href='#n3637'>3637</a>
<a id='n3638' href='#n3638'>3638</a>
<a id='n3639' href='#n3639'>3639</a>
<a id='n3640' href='#n3640'>3640</a>
<a id='n3641' href='#n3641'>3641</a>
<a id='n3642' href='#n3642'>3642</a>
<a id='n3643' href='#n3643'>3643</a>
<a id='n3644' href='#n3644'>3644</a>
<a id='n3645' href='#n3645'>3645</a>
<a id='n3646' href='#n3646'>3646</a>
<a id='n3647' href='#n3647'>3647</a>
<a id='n3648' href='#n3648'>3648</a>
<a id='n3649' href='#n3649'>3649</a>
<a id='n3650' href='#n3650'>3650</a>
<a id='n3651' href='#n3651'>3651</a>
<a id='n3652' href='#n3652'>3652</a>
<a id='n3653' href='#n3653'>3653</a>
<a id='n3654' href='#n3654'>3654</a>
<a id='n3655' href='#n3655'>3655</a>
<a id='n3656' href='#n3656'>3656</a>
<a id='n3657' href='#n3657'>3657</a>
<a id='n3658' href='#n3658'>3658</a>
<a id='n3659' href='#n3659'>3659</a>
<a id='n3660' href='#n3660'>3660</a>
<a id='n3661' href='#n3661'>3661</a>
<a id='n3662' href='#n3662'>3662</a>
<a id='n3663' href='#n3663'>3663</a>
<a id='n3664' href='#n3664'>3664</a>
<a id='n3665' href='#n3665'>3665</a>
<a id='n3666' href='#n3666'>3666</a>
<a id='n3667' href='#n3667'>3667</a>
<a id='n3668' href='#n3668'>3668</a>
<a id='n3669' href='#n3669'>3669</a>
<a id='n3670' href='#n3670'>3670</a>
<a id='n3671' href='#n3671'>3671</a>
<a id='n3672' href='#n3672'>3672</a>
<a id='n3673' href='#n3673'>3673</a>
<a id='n3674' href='#n3674'>3674</a>
<a id='n3675' href='#n3675'>3675</a>
<a id='n3676' href='#n3676'>3676</a>
<a id='n3677' href='#n3677'>3677</a>
<a id='n3678' href='#n3678'>3678</a>
<a id='n3679' href='#n3679'>3679</a>
<a id='n3680' href='#n3680'>3680</a>
<a id='n3681' href='#n3681'>3681</a>
<a id='n3682' href='#n3682'>3682</a>
<a id='n3683' href='#n3683'>3683</a>
<a id='n3684' href='#n3684'>3684</a>
<a id='n3685' href='#n3685'>3685</a>
<a id='n3686' href='#n3686'>3686</a>
<a id='n3687' href='#n3687'>3687</a>
<a id='n3688' href='#n3688'>3688</a>
<a id='n3689' href='#n3689'>3689</a>
<a id='n3690' href='#n3690'>3690</a>
<a id='n3691' href='#n3691'>3691</a>
<a id='n3692' href='#n3692'>3692</a>
<a id='n3693' href='#n3693'>3693</a>
<a id='n3694' href='#n3694'>3694</a>
<a id='n3695' href='#n3695'>3695</a>
<a id='n3696' href='#n3696'>3696</a>
<a id='n3697' href='#n3697'>3697</a>
<a id='n3698' href='#n3698'>3698</a>
<a id='n3699' href='#n3699'>3699</a>
<a id='n3700' href='#n3700'>3700</a>
<a id='n3701' href='#n3701'>3701</a>
<a id='n3702' href='#n3702'>3702</a>
<a id='n3703' href='#n3703'>3703</a>
<a id='n3704' href='#n3704'>3704</a>
<a id='n3705' href='#n3705'>3705</a>
<a id='n3706' href='#n3706'>3706</a>
<a id='n3707' href='#n3707'>3707</a>
<a id='n3708' href='#n3708'>3708</a>
<a id='n3709' href='#n3709'>3709</a>
<a id='n3710' href='#n3710'>3710</a>
<a id='n3711' href='#n3711'>3711</a>
<a id='n3712' href='#n3712'>3712</a>
<a id='n3713' href='#n3713'>3713</a>
<a id='n3714' href='#n3714'>3714</a>
<a id='n3715' href='#n3715'>3715</a>
<a id='n3716' href='#n3716'>3716</a>
<a id='n3717' href='#n3717'>3717</a>
<a id='n3718' href='#n3718'>3718</a>
<a id='n3719' href='#n3719'>3719</a>
<a id='n3720' href='#n3720'>3720</a>
<a id='n3721' href='#n3721'>3721</a>
<a id='n3722' href='#n3722'>3722</a>
<a id='n3723' href='#n3723'>3723</a>
<a id='n3724' href='#n3724'>3724</a>
<a id='n3725' href='#n3725'>3725</a>
<a id='n3726' href='#n3726'>3726</a>
<a id='n3727' href='#n3727'>3727</a>
<a id='n3728' href='#n3728'>3728</a>
<a id='n3729' href='#n3729'>3729</a>
<a id='n3730' href='#n3730'>3730</a>
<a id='n3731' href='#n3731'>3731</a>
<a id='n3732' href='#n3732'>3732</a>
<a id='n3733' href='#n3733'>3733</a>
<a id='n3734' href='#n3734'>3734</a>
<a id='n3735' href='#n3735'>3735</a>
<a id='n3736' href='#n3736'>3736</a>
<a id='n3737' href='#n3737'>3737</a>
<a id='n3738' href='#n3738'>3738</a>
<a id='n3739' href='#n3739'>3739</a>
<a id='n3740' href='#n3740'>3740</a>
<a id='n3741' href='#n3741'>3741</a>
<a id='n3742' href='#n3742'>3742</a>
<a id='n3743' href='#n3743'>3743</a>
<a id='n3744' href='#n3744'>3744</a>
<a id='n3745' href='#n3745'>3745</a>
<a id='n3746' href='#n3746'>3746</a>
<a id='n3747' href='#n3747'>3747</a>
<a id='n3748' href='#n3748'>3748</a>
<a id='n3749' href='#n3749'>3749</a>
<a id='n3750' href='#n3750'>3750</a>
<a id='n3751' href='#n3751'>3751</a>
<a id='n3752' href='#n3752'>3752</a>
<a id='n3753' href='#n3753'>3753</a>
<a id='n3754' href='#n3754'>3754</a>
<a id='n3755' href='#n3755'>3755</a>
<a id='n3756' href='#n3756'>3756</a>
<a id='n3757' href='#n3757'>3757</a>
<a id='n3758' href='#n3758'>3758</a>
<a id='n3759' href='#n3759'>3759</a>
<a id='n3760' href='#n3760'>3760</a>
<a id='n3761' href='#n3761'>3761</a>
<a id='n3762' href='#n3762'>3762</a>
<a id='n3763' href='#n3763'>3763</a>
<a id='n3764' href='#n3764'>3764</a>
<a id='n3765' href='#n3765'>3765</a>
<a id='n3766' href='#n3766'>3766</a>
<a id='n3767' href='#n3767'>3767</a>
<a id='n3768' href='#n3768'>3768</a>
<a id='n3769' href='#n3769'>3769</a>
<a id='n3770' href='#n3770'>3770</a>
<a id='n3771' href='#n3771'>3771</a>
<a id='n3772' href='#n3772'>3772</a>
<a id='n3773' href='#n3773'>3773</a>
<a id='n3774' href='#n3774'>3774</a>
<a id='n3775' href='#n3775'>3775</a>
<a id='n3776' href='#n3776'>3776</a>
<a id='n3777' href='#n3777'>3777</a>
<a id='n3778' href='#n3778'>3778</a>
<a id='n3779' href='#n3779'>3779</a>
<a id='n3780' href='#n3780'>3780</a>
<a id='n3781' href='#n3781'>3781</a>
<a id='n3782' href='#n3782'>3782</a>
<a id='n3783' href='#n3783'>3783</a>
<a id='n3784' href='#n3784'>3784</a>
<a id='n3785' href='#n3785'>3785</a>
<a id='n3786' href='#n3786'>3786</a>
<a id='n3787' href='#n3787'>3787</a>
<a id='n3788' href='#n3788'>3788</a>
<a id='n3789' href='#n3789'>3789</a>
<a id='n3790' href='#n3790'>3790</a>
<a id='n3791' href='#n3791'>3791</a>
<a id='n3792' href='#n3792'>3792</a>
<a id='n3793' href='#n3793'>3793</a>
<a id='n3794' href='#n3794'>3794</a>
<a id='n3795' href='#n3795'>3795</a>
<a id='n3796' href='#n3796'>3796</a>
<a id='n3797' href='#n3797'>3797</a>
<a id='n3798' href='#n3798'>3798</a>
<a id='n3799' href='#n3799'>3799</a>
<a id='n3800' href='#n3800'>3800</a>
<a id='n3801' href='#n3801'>3801</a>
<a id='n3802' href='#n3802'>3802</a>
<a id='n3803' href='#n3803'>3803</a>
<a id='n3804' href='#n3804'>3804</a>
<a id='n3805' href='#n3805'>3805</a>
<a id='n3806' href='#n3806'>3806</a>
<a id='n3807' href='#n3807'>3807</a>
<a id='n3808' href='#n3808'>3808</a>
<a id='n3809' href='#n3809'>3809</a>
<a id='n3810' href='#n3810'>3810</a>
<a id='n3811' href='#n3811'>3811</a>
<a id='n3812' href='#n3812'>3812</a>
<a id='n3813' href='#n3813'>3813</a>
<a id='n3814' href='#n3814'>3814</a>
<a id='n3815' href='#n3815'>3815</a>
<a id='n3816' href='#n3816'>3816</a>
<a id='n3817' href='#n3817'>3817</a>
<a id='n3818' href='#n3818'>3818</a>
<a id='n3819' href='#n3819'>3819</a>
<a id='n3820' href='#n3820'>3820</a>
<a id='n3821' href='#n3821'>3821</a>
<a id='n3822' href='#n3822'>3822</a>
<a id='n3823' href='#n3823'>3823</a>
<a id='n3824' href='#n3824'>3824</a>
<a id='n3825' href='#n3825'>3825</a>
<a id='n3826' href='#n3826'>3826</a>
<a id='n3827' href='#n3827'>3827</a>
<a id='n3828' href='#n3828'>3828</a>
<a id='n3829' href='#n3829'>3829</a>
<a id='n3830' href='#n3830'>3830</a>
<a id='n3831' href='#n3831'>3831</a>
<a id='n3832' href='#n3832'>3832</a>
<a id='n3833' href='#n3833'>3833</a>
<a id='n3834' href='#n3834'>3834</a>
<a id='n3835' href='#n3835'>3835</a>
<a id='n3836' href='#n3836'>3836</a>
<a id='n3837' href='#n3837'>3837</a>
<a id='n3838' href='#n3838'>3838</a>
<a id='n3839' href='#n3839'>3839</a>
<a id='n3840' href='#n3840'>3840</a>
<a id='n3841' href='#n3841'>3841</a>
<a id='n3842' href='#n3842'>3842</a>
<a id='n3843' href='#n3843'>3843</a>
<a id='n3844' href='#n3844'>3844</a>
<a id='n3845' href='#n3845'>3845</a>
<a id='n3846' href='#n3846'>3846</a>
<a id='n3847' href='#n3847'>3847</a>
<a id='n3848' href='#n3848'>3848</a>
<a id='n3849' href='#n3849'>3849</a>
<a id='n3850' href='#n3850'>3850</a>
<a id='n3851' href='#n3851'>3851</a>
<a id='n3852' href='#n3852'>3852</a>
<a id='n3853' href='#n3853'>3853</a>
<a id='n3854' href='#n3854'>3854</a>
<a id='n3855' href='#n3855'>3855</a>
<a id='n3856' href='#n3856'>3856</a>
<a id='n3857' href='#n3857'>3857</a>
<a id='n3858' href='#n3858'>3858</a>
<a id='n3859' href='#n3859'>3859</a>
<a id='n3860' href='#n3860'>3860</a>
<a id='n3861' href='#n3861'>3861</a>
<a id='n3862' href='#n3862'>3862</a>
<a id='n3863' href='#n3863'>3863</a>
<a id='n3864' href='#n3864'>3864</a>
<a id='n3865' href='#n3865'>3865</a>
<a id='n3866' href='#n3866'>3866</a>
<a id='n3867' href='#n3867'>3867</a>
<a id='n3868' href='#n3868'>3868</a>
<a id='n3869' href='#n3869'>3869</a>
<a id='n3870' href='#n3870'>3870</a>
<a id='n3871' href='#n3871'>3871</a>
<a id='n3872' href='#n3872'>3872</a>
<a id='n3873' href='#n3873'>3873</a>
<a id='n3874' href='#n3874'>3874</a>
<a id='n3875' href='#n3875'>3875</a>
<a id='n3876' href='#n3876'>3876</a>
<a id='n3877' href='#n3877'>3877</a>
<a id='n3878' href='#n3878'>3878</a>
<a id='n3879' href='#n3879'>3879</a>
<a id='n3880' href='#n3880'>3880</a>
<a id='n3881' href='#n3881'>3881</a>
<a id='n3882' href='#n3882'>3882</a>
<a id='n3883' href='#n3883'>3883</a>
<a id='n3884' href='#n3884'>3884</a>
<a id='n3885' href='#n3885'>3885</a>
<a id='n3886' href='#n3886'>3886</a>
<a id='n3887' href='#n3887'>3887</a>
<a id='n3888' href='#n3888'>3888</a>
<a id='n3889' href='#n3889'>3889</a>
<a id='n3890' href='#n3890'>3890</a>
<a id='n3891' href='#n3891'>3891</a>
<a id='n3892' href='#n3892'>3892</a>
<a id='n3893' href='#n3893'>3893</a>
<a id='n3894' href='#n3894'>3894</a>
<a id='n3895' href='#n3895'>3895</a>
<a id='n3896' href='#n3896'>3896</a>
<a id='n3897' href='#n3897'>3897</a>
<a id='n3898' href='#n3898'>3898</a>
<a id='n3899' href='#n3899'>3899</a>
<a id='n3900' href='#n3900'>3900</a>
<a id='n3901' href='#n3901'>3901</a>
<a id='n3902' href='#n3902'>3902</a>
<a id='n3903' href='#n3903'>3903</a>
<a id='n3904' href='#n3904'>3904</a>
<a id='n3905' href='#n3905'>3905</a>
<a id='n3906' href='#n3906'>3906</a>
<a id='n3907' href='#n3907'>3907</a>
<a id='n3908' href='#n3908'>3908</a>
<a id='n3909' href='#n3909'>3909</a>
<a id='n3910' href='#n3910'>3910</a>
<a id='n3911' href='#n3911'>3911</a>
<a id='n3912' href='#n3912'>3912</a>
<a id='n3913' href='#n3913'>3913</a>
<a id='n3914' href='#n3914'>3914</a>
<a id='n3915' href='#n3915'>3915</a>
<a id='n3916' href='#n3916'>3916</a>
<a id='n3917' href='#n3917'>3917</a>
<a id='n3918' href='#n3918'>3918</a>
<a id='n3919' href='#n3919'>3919</a>
<a id='n3920' href='#n3920'>3920</a>
<a id='n3921' href='#n3921'>3921</a>
<a id='n3922' href='#n3922'>3922</a>
<a id='n3923' href='#n3923'>3923</a>
<a id='n3924' href='#n3924'>3924</a>
<a id='n3925' href='#n3925'>3925</a>
<a id='n3926' href='#n3926'>3926</a>
<a id='n3927' href='#n3927'>3927</a>
<a id='n3928' href='#n3928'>3928</a>
<a id='n3929' href='#n3929'>3929</a>
<a id='n3930' href='#n3930'>3930</a>
<a id='n3931' href='#n3931'>3931</a>
<a id='n3932' href='#n3932'>3932</a>
<a id='n3933' href='#n3933'>3933</a>
<a id='n3934' href='#n3934'>3934</a>
<a id='n3935' href='#n3935'>3935</a>
<a id='n3936' href='#n3936'>3936</a>
<a id='n3937' href='#n3937'>3937</a>
<a id='n3938' href='#n3938'>3938</a>
<a id='n3939' href='#n3939'>3939</a>
<a id='n3940' href='#n3940'>3940</a>
<a id='n3941' href='#n3941'>3941</a>
<a id='n3942' href='#n3942'>3942</a>
<a id='n3943' href='#n3943'>3943</a>
<a id='n3944' href='#n3944'>3944</a>
<a id='n3945' href='#n3945'>3945</a>
<a id='n3946' href='#n3946'>3946</a>
<a id='n3947' href='#n3947'>3947</a>
<a id='n3948' href='#n3948'>3948</a>
<a id='n3949' href='#n3949'>3949</a>
<a id='n3950' href='#n3950'>3950</a>
<a id='n3951' href='#n3951'>3951</a>
<a id='n3952' href='#n3952'>3952</a>
<a id='n3953' href='#n3953'>3953</a>
<a id='n3954' href='#n3954'>3954</a>
<a id='n3955' href='#n3955'>3955</a>
<a id='n3956' href='#n3956'>3956</a>
<a id='n3957' href='#n3957'>3957</a>
<a id='n3958' href='#n3958'>3958</a>
<a id='n3959' href='#n3959'>3959</a>
<a id='n3960' href='#n3960'>3960</a>
<a id='n3961' href='#n3961'>3961</a>
<a id='n3962' href='#n3962'>3962</a>
<a id='n3963' href='#n3963'>3963</a>
<a id='n3964' href='#n3964'>3964</a>
<a id='n3965' href='#n3965'>3965</a>
<a id='n3966' href='#n3966'>3966</a>
<a id='n3967' href='#n3967'>3967</a>
<a id='n3968' href='#n3968'>3968</a>
<a id='n3969' href='#n3969'>3969</a>
<a id='n3970' href='#n3970'>3970</a>
<a id='n3971' href='#n3971'>3971</a>
<a id='n3972' href='#n3972'>3972</a>
<a id='n3973' href='#n3973'>3973</a>
<a id='n3974' href='#n3974'>3974</a>
<a id='n3975' href='#n3975'>3975</a>
<a id='n3976' href='#n3976'>3976</a>
<a id='n3977' href='#n3977'>3977</a>
<a id='n3978' href='#n3978'>3978</a>
<a id='n3979' href='#n3979'>3979</a>
<a id='n3980' href='#n3980'>3980</a>
<a id='n3981' href='#n3981'>3981</a>
<a id='n3982' href='#n3982'>3982</a>
<a id='n3983' href='#n3983'>3983</a>
<a id='n3984' href='#n3984'>3984</a>
<a id='n3985' href='#n3985'>3985</a>
<a id='n3986' href='#n3986'>3986</a>
<a id='n3987' href='#n3987'>3987</a>
<a id='n3988' href='#n3988'>3988</a>
<a id='n3989' href='#n3989'>3989</a>
<a id='n3990' href='#n3990'>3990</a>
<a id='n3991' href='#n3991'>3991</a>
<a id='n3992' href='#n3992'>3992</a>
<a id='n3993' href='#n3993'>3993</a>
<a id='n3994' href='#n3994'>3994</a>
<a id='n3995' href='#n3995'>3995</a>
<a id='n3996' href='#n3996'>3996</a>
<a id='n3997' href='#n3997'>3997</a>
<a id='n3998' href='#n3998'>3998</a>
<a id='n3999' href='#n3999'>3999</a>
<a id='n4000' href='#n4000'>4000</a>
<a id='n4001' href='#n4001'>4001</a>
<a id='n4002' href='#n4002'>4002</a>
<a id='n4003' href='#n4003'>4003</a>
<a id='n4004' href='#n4004'>4004</a>
<a id='n4005' href='#n4005'>4005</a>
<a id='n4006' href='#n4006'>4006</a>
<a id='n4007' href='#n4007'>4007</a>
<a id='n4008' href='#n4008'>4008</a>
<a id='n4009' href='#n4009'>4009</a>
<a id='n4010' href='#n4010'>4010</a>
<a id='n4011' href='#n4011'>4011</a>
<a id='n4012' href='#n4012'>4012</a>
<a id='n4013' href='#n4013'>4013</a>
<a id='n4014' href='#n4014'>4014</a>
<a id='n4015' href='#n4015'>4015</a>
<a id='n4016' href='#n4016'>4016</a>
<a id='n4017' href='#n4017'>4017</a>
<a id='n4018' href='#n4018'>4018</a>
<a id='n4019' href='#n4019'>4019</a>
<a id='n4020' href='#n4020'>4020</a>
<a id='n4021' href='#n4021'>4021</a>
<a id='n4022' href='#n4022'>4022</a>
<a id='n4023' href='#n4023'>4023</a>
<a id='n4024' href='#n4024'>4024</a>
<a id='n4025' href='#n4025'>4025</a>
<a id='n4026' href='#n4026'>4026</a>
<a id='n4027' href='#n4027'>4027</a>
<a id='n4028' href='#n4028'>4028</a>
<a id='n4029' href='#n4029'>4029</a>
<a id='n4030' href='#n4030'>4030</a>
<a id='n4031' href='#n4031'>4031</a>
<a id='n4032' href='#n4032'>4032</a>
<a id='n4033' href='#n4033'>4033</a>
<a id='n4034' href='#n4034'>4034</a>
<a id='n4035' href='#n4035'>4035</a>
<a id='n4036' href='#n4036'>4036</a>
<a id='n4037' href='#n4037'>4037</a>
<a id='n4038' href='#n4038'>4038</a>
<a id='n4039' href='#n4039'>4039</a>
<a id='n4040' href='#n4040'>4040</a>
<a id='n4041' href='#n4041'>4041</a>
<a id='n4042' href='#n4042'>4042</a>
<a id='n4043' href='#n4043'>4043</a>
<a id='n4044' href='#n4044'>4044</a>
<a id='n4045' href='#n4045'>4045</a>
<a id='n4046' href='#n4046'>4046</a>
<a id='n4047' href='#n4047'>4047</a>
<a id='n4048' href='#n4048'>4048</a>
<a id='n4049' href='#n4049'>4049</a>
<a id='n4050' href='#n4050'>4050</a>
<a id='n4051' href='#n4051'>4051</a>
<a id='n4052' href='#n4052'>4052</a>
<a id='n4053' href='#n4053'>4053</a>
<a id='n4054' href='#n4054'>4054</a>
<a id='n4055' href='#n4055'>4055</a>
<a id='n4056' href='#n4056'>4056</a>
<a id='n4057' href='#n4057'>4057</a>
<a id='n4058' href='#n4058'>4058</a>
<a id='n4059' href='#n4059'>4059</a>
<a id='n4060' href='#n4060'>4060</a>
<a id='n4061' href='#n4061'>4061</a>
<a id='n4062' href='#n4062'>4062</a>
<a id='n4063' href='#n4063'>4063</a>
<a id='n4064' href='#n4064'>4064</a>
<a id='n4065' href='#n4065'>4065</a>
<a id='n4066' href='#n4066'>4066</a>
<a id='n4067' href='#n4067'>4067</a>
<a id='n4068' href='#n4068'>4068</a>
<a id='n4069' href='#n4069'>4069</a>
<a id='n4070' href='#n4070'>4070</a>
<a id='n4071' href='#n4071'>4071</a>
<a id='n4072' href='#n4072'>4072</a>
<a id='n4073' href='#n4073'>4073</a>
<a id='n4074' href='#n4074'>4074</a>
<a id='n4075' href='#n4075'>4075</a>
<a id='n4076' href='#n4076'>4076</a>
<a id='n4077' href='#n4077'>4077</a>
<a id='n4078' href='#n4078'>4078</a>
<a id='n4079' href='#n4079'>4079</a>
<a id='n4080' href='#n4080'>4080</a>
<a id='n4081' href='#n4081'>4081</a>
<a id='n4082' href='#n4082'>4082</a>
<a id='n4083' href='#n4083'>4083</a>
<a id='n4084' href='#n4084'>4084</a>
<a id='n4085' href='#n4085'>4085</a>
<a id='n4086' href='#n4086'>4086</a>
<a id='n4087' href='#n4087'>4087</a>
<a id='n4088' href='#n4088'>4088</a>
<a id='n4089' href='#n4089'>4089</a>
<a id='n4090' href='#n4090'>4090</a>
<a id='n4091' href='#n4091'>4091</a>
<a id='n4092' href='#n4092'>4092</a>
<a id='n4093' href='#n4093'>4093</a>
<a id='n4094' href='#n4094'>4094</a>
<a id='n4095' href='#n4095'>4095</a>
<a id='n4096' href='#n4096'>4096</a>
<a id='n4097' href='#n4097'>4097</a>
<a id='n4098' href='#n4098'>4098</a>
<a id='n4099' href='#n4099'>4099</a>
<a id='n4100' href='#n4100'>4100</a>
<a id='n4101' href='#n4101'>4101</a>
<a id='n4102' href='#n4102'>4102</a>
<a id='n4103' href='#n4103'>4103</a>
<a id='n4104' href='#n4104'>4104</a>
<a id='n4105' href='#n4105'>4105</a>
<a id='n4106' href='#n4106'>4106</a>
<a id='n4107' href='#n4107'>4107</a>
<a id='n4108' href='#n4108'>4108</a>
<a id='n4109' href='#n4109'>4109</a>
<a id='n4110' href='#n4110'>4110</a>
<a id='n4111' href='#n4111'>4111</a>
<a id='n4112' href='#n4112'>4112</a>
<a id='n4113' href='#n4113'>4113</a>
<a id='n4114' href='#n4114'>4114</a>
<a id='n4115' href='#n4115'>4115</a>
<a id='n4116' href='#n4116'>4116</a>
<a id='n4117' href='#n4117'>4117</a>
<a id='n4118' href='#n4118'>4118</a>
<a id='n4119' href='#n4119'>4119</a>
<a id='n4120' href='#n4120'>4120</a>
<a id='n4121' href='#n4121'>4121</a>
<a id='n4122' href='#n4122'>4122</a>
<a id='n4123' href='#n4123'>4123</a>
<a id='n4124' href='#n4124'>4124</a>
<a id='n4125' href='#n4125'>4125</a>
<a id='n4126' href='#n4126'>4126</a>
<a id='n4127' href='#n4127'>4127</a>
<a id='n4128' href='#n4128'>4128</a>
<a id='n4129' href='#n4129'>4129</a>
<a id='n4130' href='#n4130'>4130</a>
<a id='n4131' href='#n4131'>4131</a>
<a id='n4132' href='#n4132'>4132</a>
<a id='n4133' href='#n4133'>4133</a>
<a id='n4134' href='#n4134'>4134</a>
<a id='n4135' href='#n4135'>4135</a>
<a id='n4136' href='#n4136'>4136</a>
<a id='n4137' href='#n4137'>4137</a>
<a id='n4138' href='#n4138'>4138</a>
<a id='n4139' href='#n4139'>4139</a>
<a id='n4140' href='#n4140'>4140</a>
<a id='n4141' href='#n4141'>4141</a>
<a id='n4142' href='#n4142'>4142</a>
<a id='n4143' href='#n4143'>4143</a>
<a id='n4144' href='#n4144'>4144</a>
<a id='n4145' href='#n4145'>4145</a>
<a id='n4146' href='#n4146'>4146</a>
<a id='n4147' href='#n4147'>4147</a>
<a id='n4148' href='#n4148'>4148</a>
<a id='n4149' href='#n4149'>4149</a>
<a id='n4150' href='#n4150'>4150</a>
<a id='n4151' href='#n4151'>4151</a>
<a id='n4152' href='#n4152'>4152</a>
<a id='n4153' href='#n4153'>4153</a>
<a id='n4154' href='#n4154'>4154</a>
<a id='n4155' href='#n4155'>4155</a>
<a id='n4156' href='#n4156'>4156</a>
<a id='n4157' href='#n4157'>4157</a>
<a id='n4158' href='#n4158'>4158</a>
<a id='n4159' href='#n4159'>4159</a>
<a id='n4160' href='#n4160'>4160</a>
<a id='n4161' href='#n4161'>4161</a>
<a id='n4162' href='#n4162'>4162</a>
<a id='n4163' href='#n4163'>4163</a>
<a id='n4164' href='#n4164'>4164</a>
<a id='n4165' href='#n4165'>4165</a>
<a id='n4166' href='#n4166'>4166</a>
<a id='n4167' href='#n4167'>4167</a>
<a id='n4168' href='#n4168'>4168</a>
<a id='n4169' href='#n4169'>4169</a>
<a id='n4170' href='#n4170'>4170</a>
<a id='n4171' href='#n4171'>4171</a>
<a id='n4172' href='#n4172'>4172</a>
<a id='n4173' href='#n4173'>4173</a>
<a id='n4174' href='#n4174'>4174</a>
<a id='n4175' href='#n4175'>4175</a>
<a id='n4176' href='#n4176'>4176</a>
<a id='n4177' href='#n4177'>4177</a>
<a id='n4178' href='#n4178'>4178</a>
<a id='n4179' href='#n4179'>4179</a>
<a id='n4180' href='#n4180'>4180</a>
<a id='n4181' href='#n4181'>4181</a>
<a id='n4182' href='#n4182'>4182</a>
<a id='n4183' href='#n4183'>4183</a>
<a id='n4184' href='#n4184'>4184</a>
<a id='n4185' href='#n4185'>4185</a>
<a id='n4186' href='#n4186'>4186</a>
<a id='n4187' href='#n4187'>4187</a>
<a id='n4188' href='#n4188'>4188</a>
<a id='n4189' href='#n4189'>4189</a>
<a id='n4190' href='#n4190'>4190</a>
<a id='n4191' href='#n4191'>4191</a>
<a id='n4192' href='#n4192'>4192</a>
<a id='n4193' href='#n4193'>4193</a>
<a id='n4194' href='#n4194'>4194</a>
<a id='n4195' href='#n4195'>4195</a>
<a id='n4196' href='#n4196'>4196</a>
<a id='n4197' href='#n4197'>4197</a>
<a id='n4198' href='#n4198'>4198</a>
<a id='n4199' href='#n4199'>4199</a>
<a id='n4200' href='#n4200'>4200</a>
<a id='n4201' href='#n4201'>4201</a>
<a id='n4202' href='#n4202'>4202</a>
<a id='n4203' href='#n4203'>4203</a>
<a id='n4204' href='#n4204'>4204</a>
<a id='n4205' href='#n4205'>4205</a>
<a id='n4206' href='#n4206'>4206</a>
<a id='n4207' href='#n4207'>4207</a>
<a id='n4208' href='#n4208'>4208</a>
<a id='n4209' href='#n4209'>4209</a>
<a id='n4210' href='#n4210'>4210</a>
<a id='n4211' href='#n4211'>4211</a>
<a id='n4212' href='#n4212'>4212</a>
<a id='n4213' href='#n4213'>4213</a>
<a id='n4214' href='#n4214'>4214</a>
<a id='n4215' href='#n4215'>4215</a>
<a id='n4216' href='#n4216'>4216</a>
<a id='n4217' href='#n4217'>4217</a>
<a id='n4218' href='#n4218'>4218</a>
<a id='n4219' href='#n4219'>4219</a>
<a id='n4220' href='#n4220'>4220</a>
<a id='n4221' href='#n4221'>4221</a>
<a id='n4222' href='#n4222'>4222</a>
<a id='n4223' href='#n4223'>4223</a>
<a id='n4224' href='#n4224'>4224</a>
<a id='n4225' href='#n4225'>4225</a>
<a id='n4226' href='#n4226'>4226</a>
<a id='n4227' href='#n4227'>4227</a>
<a id='n4228' href='#n4228'>4228</a>
<a id='n4229' href='#n4229'>4229</a>
<a id='n4230' href='#n4230'>4230</a>
<a id='n4231' href='#n4231'>4231</a>
<a id='n4232' href='#n4232'>4232</a>
<a id='n4233' href='#n4233'>4233</a>
<a id='n4234' href='#n4234'>4234</a>
<a id='n4235' href='#n4235'>4235</a>
<a id='n4236' href='#n4236'>4236</a>
<a id='n4237' href='#n4237'>4237</a>
<a id='n4238' href='#n4238'>4238</a>
<a id='n4239' href='#n4239'>4239</a>
<a id='n4240' href='#n4240'>4240</a>
<a id='n4241' href='#n4241'>4241</a>
<a id='n4242' href='#n4242'>4242</a>
<a id='n4243' href='#n4243'>4243</a>
<a id='n4244' href='#n4244'>4244</a>
<a id='n4245' href='#n4245'>4245</a>
<a id='n4246' href='#n4246'>4246</a>
<a id='n4247' href='#n4247'>4247</a>
<a id='n4248' href='#n4248'>4248</a>
<a id='n4249' href='#n4249'>4249</a>
<a id='n4250' href='#n4250'>4250</a>
<a id='n4251' href='#n4251'>4251</a>
<a id='n4252' href='#n4252'>4252</a>
<a id='n4253' href='#n4253'>4253</a>
<a id='n4254' href='#n4254'>4254</a>
<a id='n4255' href='#n4255'>4255</a>
<a id='n4256' href='#n4256'>4256</a>
<a id='n4257' href='#n4257'>4257</a>
<a id='n4258' href='#n4258'>4258</a>
<a id='n4259' href='#n4259'>4259</a>
<a id='n4260' href='#n4260'>4260</a>
<a id='n4261' href='#n4261'>4261</a>
<a id='n4262' href='#n4262'>4262</a>
<a id='n4263' href='#n4263'>4263</a>
<a id='n4264' href='#n4264'>4264</a>
<a id='n4265' href='#n4265'>4265</a>
<a id='n4266' href='#n4266'>4266</a>
<a id='n4267' href='#n4267'>4267</a>
<a id='n4268' href='#n4268'>4268</a>
<a id='n4269' href='#n4269'>4269</a>
<a id='n4270' href='#n4270'>4270</a>
<a id='n4271' href='#n4271'>4271</a>
<a id='n4272' href='#n4272'>4272</a>
<a id='n4273' href='#n4273'>4273</a>
<a id='n4274' href='#n4274'>4274</a>
<a id='n4275' href='#n4275'>4275</a>
<a id='n4276' href='#n4276'>4276</a>
<a id='n4277' href='#n4277'>4277</a>
<a id='n4278' href='#n4278'>4278</a>
<a id='n4279' href='#n4279'>4279</a>
<a id='n4280' href='#n4280'>4280</a>
<a id='n4281' href='#n4281'>4281</a>
<a id='n4282' href='#n4282'>4282</a>
<a id='n4283' href='#n4283'>4283</a>
<a id='n4284' href='#n4284'>4284</a>
<a id='n4285' href='#n4285'>4285</a>
<a id='n4286' href='#n4286'>4286</a>
<a id='n4287' href='#n4287'>4287</a>
<a id='n4288' href='#n4288'>4288</a>
<a id='n4289' href='#n4289'>4289</a>
<a id='n4290' href='#n4290'>4290</a>
<a id='n4291' href='#n4291'>4291</a>
<a id='n4292' href='#n4292'>4292</a>
<a id='n4293' href='#n4293'>4293</a>
<a id='n4294' href='#n4294'>4294</a>
<a id='n4295' href='#n4295'>4295</a>
<a id='n4296' href='#n4296'>4296</a>
<a id='n4297' href='#n4297'>4297</a>
<a id='n4298' href='#n4298'>4298</a>
<a id='n4299' href='#n4299'>4299</a>
<a id='n4300' href='#n4300'>4300</a>
<a id='n4301' href='#n4301'>4301</a>
<a id='n4302' href='#n4302'>4302</a>
<a id='n4303' href='#n4303'>4303</a>
<a id='n4304' href='#n4304'>4304</a>
<a id='n4305' href='#n4305'>4305</a>
<a id='n4306' href='#n4306'>4306</a>
<a id='n4307' href='#n4307'>4307</a>
<a id='n4308' href='#n4308'>4308</a>
<a id='n4309' href='#n4309'>4309</a>
<a id='n4310' href='#n4310'>4310</a>
<a id='n4311' href='#n4311'>4311</a>
<a id='n4312' href='#n4312'>4312</a>
<a id='n4313' href='#n4313'>4313</a>
<a id='n4314' href='#n4314'>4314</a>
<a id='n4315' href='#n4315'>4315</a>
<a id='n4316' href='#n4316'>4316</a>
<a id='n4317' href='#n4317'>4317</a>
<a id='n4318' href='#n4318'>4318</a>
<a id='n4319' href='#n4319'>4319</a>
<a id='n4320' href='#n4320'>4320</a>
<a id='n4321' href='#n4321'>4321</a>
<a id='n4322' href='#n4322'>4322</a>
<a id='n4323' href='#n4323'>4323</a>
<a id='n4324' href='#n4324'>4324</a>
<a id='n4325' href='#n4325'>4325</a>
<a id='n4326' href='#n4326'>4326</a>
<a id='n4327' href='#n4327'>4327</a>
<a id='n4328' href='#n4328'>4328</a>
<a id='n4329' href='#n4329'>4329</a>
<a id='n4330' href='#n4330'>4330</a>
<a id='n4331' href='#n4331'>4331</a>
<a id='n4332' href='#n4332'>4332</a>
<a id='n4333' href='#n4333'>4333</a>
<a id='n4334' href='#n4334'>4334</a>
<a id='n4335' href='#n4335'>4335</a>
<a id='n4336' href='#n4336'>4336</a>
<a id='n4337' href='#n4337'>4337</a>
<a id='n4338' href='#n4338'>4338</a>
<a id='n4339' href='#n4339'>4339</a>
<a id='n4340' href='#n4340'>4340</a>
<a id='n4341' href='#n4341'>4341</a>
<a id='n4342' href='#n4342'>4342</a>
<a id='n4343' href='#n4343'>4343</a>
<a id='n4344' href='#n4344'>4344</a>
<a id='n4345' href='#n4345'>4345</a>
<a id='n4346' href='#n4346'>4346</a>
<a id='n4347' href='#n4347'>4347</a>
<a id='n4348' href='#n4348'>4348</a>
<a id='n4349' href='#n4349'>4349</a>
<a id='n4350' href='#n4350'>4350</a>
<a id='n4351' href='#n4351'>4351</a>
<a id='n4352' href='#n4352'>4352</a>
<a id='n4353' href='#n4353'>4353</a>
<a id='n4354' href='#n4354'>4354</a>
<a id='n4355' href='#n4355'>4355</a>
<a id='n4356' href='#n4356'>4356</a>
<a id='n4357' href='#n4357'>4357</a>
<a id='n4358' href='#n4358'>4358</a>
<a id='n4359' href='#n4359'>4359</a>
<a id='n4360' href='#n4360'>4360</a>
<a id='n4361' href='#n4361'>4361</a>
<a id='n4362' href='#n4362'>4362</a>
<a id='n4363' href='#n4363'>4363</a>
<a id='n4364' href='#n4364'>4364</a>
<a id='n4365' href='#n4365'>4365</a>
<a id='n4366' href='#n4366'>4366</a>
<a id='n4367' href='#n4367'>4367</a>
<a id='n4368' href='#n4368'>4368</a>
<a id='n4369' href='#n4369'>4369</a>
<a id='n4370' href='#n4370'>4370</a>
<a id='n4371' href='#n4371'>4371</a>
<a id='n4372' href='#n4372'>4372</a>
<a id='n4373' href='#n4373'>4373</a>
<a id='n4374' href='#n4374'>4374</a>
<a id='n4375' href='#n4375'>4375</a>
<a id='n4376' href='#n4376'>4376</a>
<a id='n4377' href='#n4377'>4377</a>
<a id='n4378' href='#n4378'>4378</a>
<a id='n4379' href='#n4379'>4379</a>
<a id='n4380' href='#n4380'>4380</a>
<a id='n4381' href='#n4381'>4381</a>
<a id='n4382' href='#n4382'>4382</a>
<a id='n4383' href='#n4383'>4383</a>
<a id='n4384' href='#n4384'>4384</a>
<a id='n4385' href='#n4385'>4385</a>
<a id='n4386' href='#n4386'>4386</a>
<a id='n4387' href='#n4387'>4387</a>
<a id='n4388' href='#n4388'>4388</a>
<a id='n4389' href='#n4389'>4389</a>
<a id='n4390' href='#n4390'>4390</a>
<a id='n4391' href='#n4391'>4391</a>
<a id='n4392' href='#n4392'>4392</a>
<a id='n4393' href='#n4393'>4393</a>
<a id='n4394' href='#n4394'>4394</a>
<a id='n4395' href='#n4395'>4395</a>
<a id='n4396' href='#n4396'>4396</a>
<a id='n4397' href='#n4397'>4397</a>
<a id='n4398' href='#n4398'>4398</a>
<a id='n4399' href='#n4399'>4399</a>
<a id='n4400' href='#n4400'>4400</a>
<a id='n4401' href='#n4401'>4401</a>
<a id='n4402' href='#n4402'>4402</a>
<a id='n4403' href='#n4403'>4403</a>
<a id='n4404' href='#n4404'>4404</a>
<a id='n4405' href='#n4405'>4405</a>
<a id='n4406' href='#n4406'>4406</a>
<a id='n4407' href='#n4407'>4407</a>
<a id='n4408' href='#n4408'>4408</a>
<a id='n4409' href='#n4409'>4409</a>
<a id='n4410' href='#n4410'>4410</a>
<a id='n4411' href='#n4411'>4411</a>
<a id='n4412' href='#n4412'>4412</a>
<a id='n4413' href='#n4413'>4413</a>
<a id='n4414' href='#n4414'>4414</a>
<a id='n4415' href='#n4415'>4415</a>
<a id='n4416' href='#n4416'>4416</a>
<a id='n4417' href='#n4417'>4417</a>
<a id='n4418' href='#n4418'>4418</a>
<a id='n4419' href='#n4419'>4419</a>
<a id='n4420' href='#n4420'>4420</a>
<a id='n4421' href='#n4421'>4421</a>
<a id='n4422' href='#n4422'>4422</a>
<a id='n4423' href='#n4423'>4423</a>
<a id='n4424' href='#n4424'>4424</a>
<a id='n4425' href='#n4425'>4425</a>
<a id='n4426' href='#n4426'>4426</a>
<a id='n4427' href='#n4427'>4427</a>
<a id='n4428' href='#n4428'>4428</a>
<a id='n4429' href='#n4429'>4429</a>
<a id='n4430' href='#n4430'>4430</a>
<a id='n4431' href='#n4431'>4431</a>
<a id='n4432' href='#n4432'>4432</a>
<a id='n4433' href='#n4433'>4433</a>
<a id='n4434' href='#n4434'>4434</a>
<a id='n4435' href='#n4435'>4435</a>
<a id='n4436' href='#n4436'>4436</a>
<a id='n4437' href='#n4437'>4437</a>
<a id='n4438' href='#n4438'>4438</a>
<a id='n4439' href='#n4439'>4439</a>
<a id='n4440' href='#n4440'>4440</a>
<a id='n4441' href='#n4441'>4441</a>
<a id='n4442' href='#n4442'>4442</a>
<a id='n4443' href='#n4443'>4443</a>
<a id='n4444' href='#n4444'>4444</a>
<a id='n4445' href='#n4445'>4445</a>
<a id='n4446' href='#n4446'>4446</a>
<a id='n4447' href='#n4447'>4447</a>
<a id='n4448' href='#n4448'>4448</a>
<a id='n4449' href='#n4449'>4449</a>
<a id='n4450' href='#n4450'>4450</a>
<a id='n4451' href='#n4451'>4451</a>
<a id='n4452' href='#n4452'>4452</a>
<a id='n4453' href='#n4453'>4453</a>
<a id='n4454' href='#n4454'>4454</a>
<a id='n4455' href='#n4455'>4455</a>
<a id='n4456' href='#n4456'>4456</a>
<a id='n4457' href='#n4457'>4457</a>
<a id='n4458' href='#n4458'>4458</a>
<a id='n4459' href='#n4459'>4459</a>
<a id='n4460' href='#n4460'>4460</a>
<a id='n4461' href='#n4461'>4461</a>
<a id='n4462' href='#n4462'>4462</a>
<a id='n4463' href='#n4463'>4463</a>
<a id='n4464' href='#n4464'>4464</a>
<a id='n4465' href='#n4465'>4465</a>
<a id='n4466' href='#n4466'>4466</a>
<a id='n4467' href='#n4467'>4467</a>
<a id='n4468' href='#n4468'>4468</a>
<a id='n4469' href='#n4469'>4469</a>
<a id='n4470' href='#n4470'>4470</a>
<a id='n4471' href='#n4471'>4471</a>
<a id='n4472' href='#n4472'>4472</a>
<a id='n4473' href='#n4473'>4473</a>
<a id='n4474' href='#n4474'>4474</a>
<a id='n4475' href='#n4475'>4475</a>
<a id='n4476' href='#n4476'>4476</a>
<a id='n4477' href='#n4477'>4477</a>
<a id='n4478' href='#n4478'>4478</a>
<a id='n4479' href='#n4479'>4479</a>
<a id='n4480' href='#n4480'>4480</a>
<a id='n4481' href='#n4481'>4481</a>
<a id='n4482' href='#n4482'>4482</a>
<a id='n4483' href='#n4483'>4483</a>
<a id='n4484' href='#n4484'>4484</a>
<a id='n4485' href='#n4485'>4485</a>
<a id='n4486' href='#n4486'>4486</a>
<a id='n4487' href='#n4487'>4487</a>
<a id='n4488' href='#n4488'>4488</a>
<a id='n4489' href='#n4489'>4489</a>
<a id='n4490' href='#n4490'>4490</a>
<a id='n4491' href='#n4491'>4491</a>
<a id='n4492' href='#n4492'>4492</a>
<a id='n4493' href='#n4493'>4493</a>
<a id='n4494' href='#n4494'>4494</a>
<a id='n4495' href='#n4495'>4495</a>
<a id='n4496' href='#n4496'>4496</a>
<a id='n4497' href='#n4497'>4497</a>
<a id='n4498' href='#n4498'>4498</a>
<a id='n4499' href='#n4499'>4499</a>
<a id='n4500' href='#n4500'>4500</a>
<a id='n4501' href='#n4501'>4501</a>
<a id='n4502' href='#n4502'>4502</a>
<a id='n4503' href='#n4503'>4503</a>
<a id='n4504' href='#n4504'>4504</a>
<a id='n4505' href='#n4505'>4505</a>
<a id='n4506' href='#n4506'>4506</a>
<a id='n4507' href='#n4507'>4507</a>
<a id='n4508' href='#n4508'>4508</a>
<a id='n4509' href='#n4509'>4509</a>
<a id='n4510' href='#n4510'>4510</a>
<a id='n4511' href='#n4511'>4511</a>
<a id='n4512' href='#n4512'>4512</a>
<a id='n4513' href='#n4513'>4513</a>
<a id='n4514' href='#n4514'>4514</a>
<a id='n4515' href='#n4515'>4515</a>
<a id='n4516' href='#n4516'>4516</a>
<a id='n4517' href='#n4517'>4517</a>
<a id='n4518' href='#n4518'>4518</a>
<a id='n4519' href='#n4519'>4519</a>
<a id='n4520' href='#n4520'>4520</a>
<a id='n4521' href='#n4521'>4521</a>
<a id='n4522' href='#n4522'>4522</a>
<a id='n4523' href='#n4523'>4523</a>
<a id='n4524' href='#n4524'>4524</a>
<a id='n4525' href='#n4525'>4525</a>
<a id='n4526' href='#n4526'>4526</a>
<a id='n4527' href='#n4527'>4527</a>
<a id='n4528' href='#n4528'>4528</a>
<a id='n4529' href='#n4529'>4529</a>
<a id='n4530' href='#n4530'>4530</a>
<a id='n4531' href='#n4531'>4531</a>
<a id='n4532' href='#n4532'>4532</a>
<a id='n4533' href='#n4533'>4533</a>
<a id='n4534' href='#n4534'>4534</a>
<a id='n4535' href='#n4535'>4535</a>
<a id='n4536' href='#n4536'>4536</a>
<a id='n4537' href='#n4537'>4537</a>
<a id='n4538' href='#n4538'>4538</a>
<a id='n4539' href='#n4539'>4539</a>
<a id='n4540' href='#n4540'>4540</a>
<a id='n4541' href='#n4541'>4541</a>
<a id='n4542' href='#n4542'>4542</a>
<a id='n4543' href='#n4543'>4543</a>
<a id='n4544' href='#n4544'>4544</a>
<a id='n4545' href='#n4545'>4545</a>
<a id='n4546' href='#n4546'>4546</a>
<a id='n4547' href='#n4547'>4547</a>
<a id='n4548' href='#n4548'>4548</a>
<a id='n4549' href='#n4549'>4549</a>
<a id='n4550' href='#n4550'>4550</a>
<a id='n4551' href='#n4551'>4551</a>
<a id='n4552' href='#n4552'>4552</a>
<a id='n4553' href='#n4553'>4553</a>
<a id='n4554' href='#n4554'>4554</a>
<a id='n4555' href='#n4555'>4555</a>
<a id='n4556' href='#n4556'>4556</a>
<a id='n4557' href='#n4557'>4557</a>
<a id='n4558' href='#n4558'>4558</a>
<a id='n4559' href='#n4559'>4559</a>
<a id='n4560' href='#n4560'>4560</a>
<a id='n4561' href='#n4561'>4561</a>
<a id='n4562' href='#n4562'>4562</a>
<a id='n4563' href='#n4563'>4563</a>
<a id='n4564' href='#n4564'>4564</a>
<a id='n4565' href='#n4565'>4565</a>
<a id='n4566' href='#n4566'>4566</a>
<a id='n4567' href='#n4567'>4567</a>
<a id='n4568' href='#n4568'>4568</a>
<a id='n4569' href='#n4569'>4569</a>
<a id='n4570' href='#n4570'>4570</a>
<a id='n4571' href='#n4571'>4571</a>
<a id='n4572' href='#n4572'>4572</a>
<a id='n4573' href='#n4573'>4573</a>
<a id='n4574' href='#n4574'>4574</a>
<a id='n4575' href='#n4575'>4575</a>
<a id='n4576' href='#n4576'>4576</a>
<a id='n4577' href='#n4577'>4577</a>
<a id='n4578' href='#n4578'>4578</a>
<a id='n4579' href='#n4579'>4579</a>
<a id='n4580' href='#n4580'>4580</a>
<a id='n4581' href='#n4581'>4581</a>
<a id='n4582' href='#n4582'>4582</a>
<a id='n4583' href='#n4583'>4583</a>
<a id='n4584' href='#n4584'>4584</a>
<a id='n4585' href='#n4585'>4585</a>
<a id='n4586' href='#n4586'>4586</a>
<a id='n4587' href='#n4587'>4587</a>
<a id='n4588' href='#n4588'>4588</a>
<a id='n4589' href='#n4589'>4589</a>
<a id='n4590' href='#n4590'>4590</a>
<a id='n4591' href='#n4591'>4591</a>
<a id='n4592' href='#n4592'>4592</a>
<a id='n4593' href='#n4593'>4593</a>
<a id='n4594' href='#n4594'>4594</a>
<a id='n4595' href='#n4595'>4595</a>
<a id='n4596' href='#n4596'>4596</a>
<a id='n4597' href='#n4597'>4597</a>
<a id='n4598' href='#n4598'>4598</a>
<a id='n4599' href='#n4599'>4599</a>
<a id='n4600' href='#n4600'>4600</a>
<a id='n4601' href='#n4601'>4601</a>
<a id='n4602' href='#n4602'>4602</a>
<a id='n4603' href='#n4603'>4603</a>
<a id='n4604' href='#n4604'>4604</a>
<a id='n4605' href='#n4605'>4605</a>
<a id='n4606' href='#n4606'>4606</a>
<a id='n4607' href='#n4607'>4607</a>
<a id='n4608' href='#n4608'>4608</a>
<a id='n4609' href='#n4609'>4609</a>
<a id='n4610' href='#n4610'>4610</a>
<a id='n4611' href='#n4611'>4611</a>
<a id='n4612' href='#n4612'>4612</a>
<a id='n4613' href='#n4613'>4613</a>
<a id='n4614' href='#n4614'>4614</a>
<a id='n4615' href='#n4615'>4615</a>
<a id='n4616' href='#n4616'>4616</a>
<a id='n4617' href='#n4617'>4617</a>
<a id='n4618' href='#n4618'>4618</a>
<a id='n4619' href='#n4619'>4619</a>
<a id='n4620' href='#n4620'>4620</a>
<a id='n4621' href='#n4621'>4621</a>
<a id='n4622' href='#n4622'>4622</a>
<a id='n4623' href='#n4623'>4623</a>
<a id='n4624' href='#n4624'>4624</a>
<a id='n4625' href='#n4625'>4625</a>
<a id='n4626' href='#n4626'>4626</a>
<a id='n4627' href='#n4627'>4627</a>
<a id='n4628' href='#n4628'>4628</a>
<a id='n4629' href='#n4629'>4629</a>
<a id='n4630' href='#n4630'>4630</a>
<a id='n4631' href='#n4631'>4631</a>
<a id='n4632' href='#n4632'>4632</a>
<a id='n4633' href='#n4633'>4633</a>
<a id='n4634' href='#n4634'>4634</a>
<a id='n4635' href='#n4635'>4635</a>
<a id='n4636' href='#n4636'>4636</a>
<a id='n4637' href='#n4637'>4637</a>
<a id='n4638' href='#n4638'>4638</a>
<a id='n4639' href='#n4639'>4639</a>
<a id='n4640' href='#n4640'>4640</a>
<a id='n4641' href='#n4641'>4641</a>
<a id='n4642' href='#n4642'>4642</a>
<a id='n4643' href='#n4643'>4643</a>
<a id='n4644' href='#n4644'>4644</a>
<a id='n4645' href='#n4645'>4645</a>
<a id='n4646' href='#n4646'>4646</a>
<a id='n4647' href='#n4647'>4647</a>
<a id='n4648' href='#n4648'>4648</a>
<a id='n4649' href='#n4649'>4649</a>
<a id='n4650' href='#n4650'>4650</a>
<a id='n4651' href='#n4651'>4651</a>
<a id='n4652' href='#n4652'>4652</a>
<a id='n4653' href='#n4653'>4653</a>
<a id='n4654' href='#n4654'>4654</a>
<a id='n4655' href='#n4655'>4655</a>
<a id='n4656' href='#n4656'>4656</a>
<a id='n4657' href='#n4657'>4657</a>
<a id='n4658' href='#n4658'>4658</a>
<a id='n4659' href='#n4659'>4659</a>
<a id='n4660' href='#n4660'>4660</a>
<a id='n4661' href='#n4661'>4661</a>
<a id='n4662' href='#n4662'>4662</a>
<a id='n4663' href='#n4663'>4663</a>
<a id='n4664' href='#n4664'>4664</a>
<a id='n4665' href='#n4665'>4665</a>
<a id='n4666' href='#n4666'>4666</a>
<a id='n4667' href='#n4667'>4667</a>
<a id='n4668' href='#n4668'>4668</a>
<a id='n4669' href='#n4669'>4669</a>
<a id='n4670' href='#n4670'>4670</a>
<a id='n4671' href='#n4671'>4671</a>
<a id='n4672' href='#n4672'>4672</a>
<a id='n4673' href='#n4673'>4673</a>
<a id='n4674' href='#n4674'>4674</a>
<a id='n4675' href='#n4675'>4675</a>
<a id='n4676' href='#n4676'>4676</a>
<a id='n4677' href='#n4677'>4677</a>
<a id='n4678' href='#n4678'>4678</a>
<a id='n4679' href='#n4679'>4679</a>
<a id='n4680' href='#n4680'>4680</a>
<a id='n4681' href='#n4681'>4681</a>
<a id='n4682' href='#n4682'>4682</a>
<a id='n4683' href='#n4683'>4683</a>
<a id='n4684' href='#n4684'>4684</a>
<a id='n4685' href='#n4685'>4685</a>
<a id='n4686' href='#n4686'>4686</a>
<a id='n4687' href='#n4687'>4687</a>
<a id='n4688' href='#n4688'>4688</a>
<a id='n4689' href='#n4689'>4689</a>
<a id='n4690' href='#n4690'>4690</a>
<a id='n4691' href='#n4691'>4691</a>
<a id='n4692' href='#n4692'>4692</a>
<a id='n4693' href='#n4693'>4693</a>
<a id='n4694' href='#n4694'>4694</a>
<a id='n4695' href='#n4695'>4695</a>
<a id='n4696' href='#n4696'>4696</a>
<a id='n4697' href='#n4697'>4697</a>
<a id='n4698' href='#n4698'>4698</a>
<a id='n4699' href='#n4699'>4699</a>
<a id='n4700' href='#n4700'>4700</a>
<a id='n4701' href='#n4701'>4701</a>
<a id='n4702' href='#n4702'>4702</a>
<a id='n4703' href='#n4703'>4703</a>
<a id='n4704' href='#n4704'>4704</a>
<a id='n4705' href='#n4705'>4705</a>
<a id='n4706' href='#n4706'>4706</a>
<a id='n4707' href='#n4707'>4707</a>
<a id='n4708' href='#n4708'>4708</a>
<a id='n4709' href='#n4709'>4709</a>
<a id='n4710' href='#n4710'>4710</a>
<a id='n4711' href='#n4711'>4711</a>
<a id='n4712' href='#n4712'>4712</a>
<a id='n4713' href='#n4713'>4713</a>
<a id='n4714' href='#n4714'>4714</a>
<a id='n4715' href='#n4715'>4715</a>
<a id='n4716' href='#n4716'>4716</a>
<a id='n4717' href='#n4717'>4717</a>
<a id='n4718' href='#n4718'>4718</a>
<a id='n4719' href='#n4719'>4719</a>
<a id='n4720' href='#n4720'>4720</a>
<a id='n4721' href='#n4721'>4721</a>
<a id='n4722' href='#n4722'>4722</a>
<a id='n4723' href='#n4723'>4723</a>
<a id='n4724' href='#n4724'>4724</a>
<a id='n4725' href='#n4725'>4725</a>
<a id='n4726' href='#n4726'>4726</a>
<a id='n4727' href='#n4727'>4727</a>
<a id='n4728' href='#n4728'>4728</a>
<a id='n4729' href='#n4729'>4729</a>
<a id='n4730' href='#n4730'>4730</a>
<a id='n4731' href='#n4731'>4731</a>
<a id='n4732' href='#n4732'>4732</a>
<a id='n4733' href='#n4733'>4733</a>
<a id='n4734' href='#n4734'>4734</a>
<a id='n4735' href='#n4735'>4735</a>
<a id='n4736' href='#n4736'>4736</a>
<a id='n4737' href='#n4737'>4737</a>
<a id='n4738' href='#n4738'>4738</a>
<a id='n4739' href='#n4739'>4739</a>
<a id='n4740' href='#n4740'>4740</a>
<a id='n4741' href='#n4741'>4741</a>
<a id='n4742' href='#n4742'>4742</a>
<a id='n4743' href='#n4743'>4743</a>
<a id='n4744' href='#n4744'>4744</a>
<a id='n4745' href='#n4745'>4745</a>
<a id='n4746' href='#n4746'>4746</a>
<a id='n4747' href='#n4747'>4747</a>
<a id='n4748' href='#n4748'>4748</a>
<a id='n4749' href='#n4749'>4749</a>
<a id='n4750' href='#n4750'>4750</a>
<a id='n4751' href='#n4751'>4751</a>
<a id='n4752' href='#n4752'>4752</a>
<a id='n4753' href='#n4753'>4753</a>
<a id='n4754' href='#n4754'>4754</a>
<a id='n4755' href='#n4755'>4755</a>
<a id='n4756' href='#n4756'>4756</a>
<a id='n4757' href='#n4757'>4757</a>
<a id='n4758' href='#n4758'>4758</a>
<a id='n4759' href='#n4759'>4759</a>
<a id='n4760' href='#n4760'>4760</a>
<a id='n4761' href='#n4761'>4761</a>
<a id='n4762' href='#n4762'>4762</a>
<a id='n4763' href='#n4763'>4763</a>
<a id='n4764' href='#n4764'>4764</a>
<a id='n4765' href='#n4765'>4765</a>
<a id='n4766' href='#n4766'>4766</a>
<a id='n4767' href='#n4767'>4767</a>
<a id='n4768' href='#n4768'>4768</a>
<a id='n4769' href='#n4769'>4769</a>
<a id='n4770' href='#n4770'>4770</a>
<a id='n4771' href='#n4771'>4771</a>
<a id='n4772' href='#n4772'>4772</a>
<a id='n4773' href='#n4773'>4773</a>
<a id='n4774' href='#n4774'>4774</a>
<a id='n4775' href='#n4775'>4775</a>
<a id='n4776' href='#n4776'>4776</a>
<a id='n4777' href='#n4777'>4777</a>
<a id='n4778' href='#n4778'>4778</a>
<a id='n4779' href='#n4779'>4779</a>
<a id='n4780' href='#n4780'>4780</a>
<a id='n4781' href='#n4781'>4781</a>
<a id='n4782' href='#n4782'>4782</a>
<a id='n4783' href='#n4783'>4783</a>
<a id='n4784' href='#n4784'>4784</a>
<a id='n4785' href='#n4785'>4785</a>
<a id='n4786' href='#n4786'>4786</a>
<a id='n4787' href='#n4787'>4787</a>
<a id='n4788' href='#n4788'>4788</a>
<a id='n4789' href='#n4789'>4789</a>
<a id='n4790' href='#n4790'>4790</a>
<a id='n4791' href='#n4791'>4791</a>
<a id='n4792' href='#n4792'>4792</a>
<a id='n4793' href='#n4793'>4793</a>
<a id='n4794' href='#n4794'>4794</a>
<a id='n4795' href='#n4795'>4795</a>
<a id='n4796' href='#n4796'>4796</a>
<a id='n4797' href='#n4797'>4797</a>
<a id='n4798' href='#n4798'>4798</a>
<a id='n4799' href='#n4799'>4799</a>
<a id='n4800' href='#n4800'>4800</a>
<a id='n4801' href='#n4801'>4801</a>
<a id='n4802' href='#n4802'>4802</a>
<a id='n4803' href='#n4803'>4803</a>
<a id='n4804' href='#n4804'>4804</a>
<a id='n4805' href='#n4805'>4805</a>
<a id='n4806' href='#n4806'>4806</a>
<a id='n4807' href='#n4807'>4807</a>
<a id='n4808' href='#n4808'>4808</a>
<a id='n4809' href='#n4809'>4809</a>
<a id='n4810' href='#n4810'>4810</a>
<a id='n4811' href='#n4811'>4811</a>
<a id='n4812' href='#n4812'>4812</a>
<a id='n4813' href='#n4813'>4813</a>
<a id='n4814' href='#n4814'>4814</a>
<a id='n4815' href='#n4815'>4815</a>
<a id='n4816' href='#n4816'>4816</a>
<a id='n4817' href='#n4817'>4817</a>
<a id='n4818' href='#n4818'>4818</a>
<a id='n4819' href='#n4819'>4819</a>
<a id='n4820' href='#n4820'>4820</a>
<a id='n4821' href='#n4821'>4821</a>
<a id='n4822' href='#n4822'>4822</a>
<a id='n4823' href='#n4823'>4823</a>
<a id='n4824' href='#n4824'>4824</a>
<a id='n4825' href='#n4825'>4825</a>
<a id='n4826' href='#n4826'>4826</a>
<a id='n4827' href='#n4827'>4827</a>
<a id='n4828' href='#n4828'>4828</a>
<a id='n4829' href='#n4829'>4829</a>
<a id='n4830' href='#n4830'>4830</a>
<a id='n4831' href='#n4831'>4831</a>
<a id='n4832' href='#n4832'>4832</a>
<a id='n4833' href='#n4833'>4833</a>
<a id='n4834' href='#n4834'>4834</a>
<a id='n4835' href='#n4835'>4835</a>
<a id='n4836' href='#n4836'>4836</a>
<a id='n4837' href='#n4837'>4837</a>
<a id='n4838' href='#n4838'>4838</a>
<a id='n4839' href='#n4839'>4839</a>
<a id='n4840' href='#n4840'>4840</a>
<a id='n4841' href='#n4841'>4841</a>
<a id='n4842' href='#n4842'>4842</a>
<a id='n4843' href='#n4843'>4843</a>
<a id='n4844' href='#n4844'>4844</a>
<a id='n4845' href='#n4845'>4845</a>
<a id='n4846' href='#n4846'>4846</a>
<a id='n4847' href='#n4847'>4847</a>
<a id='n4848' href='#n4848'>4848</a>
<a id='n4849' href='#n4849'>4849</a>
<a id='n4850' href='#n4850'>4850</a>
<a id='n4851' href='#n4851'>4851</a>
<a id='n4852' href='#n4852'>4852</a>
<a id='n4853' href='#n4853'>4853</a>
<a id='n4854' href='#n4854'>4854</a>
<a id='n4855' href='#n4855'>4855</a>
<a id='n4856' href='#n4856'>4856</a>
<a id='n4857' href='#n4857'>4857</a>
<a id='n4858' href='#n4858'>4858</a>
<a id='n4859' href='#n4859'>4859</a>
<a id='n4860' href='#n4860'>4860</a>
<a id='n4861' href='#n4861'>4861</a>
<a id='n4862' href='#n4862'>4862</a>
<a id='n4863' href='#n4863'>4863</a>
<a id='n4864' href='#n4864'>4864</a>
<a id='n4865' href='#n4865'>4865</a>
<a id='n4866' href='#n4866'>4866</a>
<a id='n4867' href='#n4867'>4867</a>
<a id='n4868' href='#n4868'>4868</a>
<a id='n4869' href='#n4869'>4869</a>
<a id='n4870' href='#n4870'>4870</a>
<a id='n4871' href='#n4871'>4871</a>
<a id='n4872' href='#n4872'>4872</a>
<a id='n4873' href='#n4873'>4873</a>
<a id='n4874' href='#n4874'>4874</a>
<a id='n4875' href='#n4875'>4875</a>
<a id='n4876' href='#n4876'>4876</a>
<a id='n4877' href='#n4877'>4877</a>
<a id='n4878' href='#n4878'>4878</a>
<a id='n4879' href='#n4879'>4879</a>
<a id='n4880' href='#n4880'>4880</a>
<a id='n4881' href='#n4881'>4881</a>
<a id='n4882' href='#n4882'>4882</a>
<a id='n4883' href='#n4883'>4883</a>
<a id='n4884' href='#n4884'>4884</a>
<a id='n4885' href='#n4885'>4885</a>
<a id='n4886' href='#n4886'>4886</a>
<a id='n4887' href='#n4887'>4887</a>
<a id='n4888' href='#n4888'>4888</a>
<a id='n4889' href='#n4889'>4889</a>
<a id='n4890' href='#n4890'>4890</a>
<a id='n4891' href='#n4891'>4891</a>
<a id='n4892' href='#n4892'>4892</a>
<a id='n4893' href='#n4893'>4893</a>
<a id='n4894' href='#n4894'>4894</a>
<a id='n4895' href='#n4895'>4895</a>
<a id='n4896' href='#n4896'>4896</a>
<a id='n4897' href='#n4897'>4897</a>
<a id='n4898' href='#n4898'>4898</a>
<a id='n4899' href='#n4899'>4899</a>
<a id='n4900' href='#n4900'>4900</a>
<a id='n4901' href='#n4901'>4901</a>
<a id='n4902' href='#n4902'>4902</a>
<a id='n4903' href='#n4903'>4903</a>
<a id='n4904' href='#n4904'>4904</a>
<a id='n4905' href='#n4905'>4905</a>
<a id='n4906' href='#n4906'>4906</a>
<a id='n4907' href='#n4907'>4907</a>
<a id='n4908' href='#n4908'>4908</a>
<a id='n4909' href='#n4909'>4909</a>
<a id='n4910' href='#n4910'>4910</a>
<a id='n4911' href='#n4911'>4911</a>
<a id='n4912' href='#n4912'>4912</a>
<a id='n4913' href='#n4913'>4913</a>
<a id='n4914' href='#n4914'>4914</a>
<a id='n4915' href='#n4915'>4915</a>
<a id='n4916' href='#n4916'>4916</a>
<a id='n4917' href='#n4917'>4917</a>
<a id='n4918' href='#n4918'>4918</a>
<a id='n4919' href='#n4919'>4919</a>
<a id='n4920' href='#n4920'>4920</a>
<a id='n4921' href='#n4921'>4921</a>
<a id='n4922' href='#n4922'>4922</a>
<a id='n4923' href='#n4923'>4923</a>
<a id='n4924' href='#n4924'>4924</a>
<a id='n4925' href='#n4925'>4925</a>
<a id='n4926' href='#n4926'>4926</a>
<a id='n4927' href='#n4927'>4927</a>
<a id='n4928' href='#n4928'>4928</a>
<a id='n4929' href='#n4929'>4929</a>
<a id='n4930' href='#n4930'>4930</a>
<a id='n4931' href='#n4931'>4931</a>
<a id='n4932' href='#n4932'>4932</a>
<a id='n4933' href='#n4933'>4933</a>
<a id='n4934' href='#n4934'>4934</a>
<a id='n4935' href='#n4935'>4935</a>
<a id='n4936' href='#n4936'>4936</a>
<a id='n4937' href='#n4937'>4937</a>
<a id='n4938' href='#n4938'>4938</a>
<a id='n4939' href='#n4939'>4939</a>
<a id='n4940' href='#n4940'>4940</a>
<a id='n4941' href='#n4941'>4941</a>
<a id='n4942' href='#n4942'>4942</a>
<a id='n4943' href='#n4943'>4943</a>
<a id='n4944' href='#n4944'>4944</a>
<a id='n4945' href='#n4945'>4945</a>
<a id='n4946' href='#n4946'>4946</a>
<a id='n4947' href='#n4947'>4947</a>
<a id='n4948' href='#n4948'>4948</a>
<a id='n4949' href='#n4949'>4949</a>
<a id='n4950' href='#n4950'>4950</a>
<a id='n4951' href='#n4951'>4951</a>
<a id='n4952' href='#n4952'>4952</a>
<a id='n4953' href='#n4953'>4953</a>
<a id='n4954' href='#n4954'>4954</a>
<a id='n4955' href='#n4955'>4955</a>
<a id='n4956' href='#n4956'>4956</a>
<a id='n4957' href='#n4957'>4957</a>
<a id='n4958' href='#n4958'>4958</a>
<a id='n4959' href='#n4959'>4959</a>
<a id='n4960' href='#n4960'>4960</a>
<a id='n4961' href='#n4961'>4961</a>
<a id='n4962' href='#n4962'>4962</a>
<a id='n4963' href='#n4963'>4963</a>
<a id='n4964' href='#n4964'>4964</a>
<a id='n4965' href='#n4965'>4965</a>
<a id='n4966' href='#n4966'>4966</a>
<a id='n4967' href='#n4967'>4967</a>
<a id='n4968' href='#n4968'>4968</a>
<a id='n4969' href='#n4969'>4969</a>
<a id='n4970' href='#n4970'>4970</a>
<a id='n4971' href='#n4971'>4971</a>
<a id='n4972' href='#n4972'>4972</a>
<a id='n4973' href='#n4973'>4973</a>
<a id='n4974' href='#n4974'>4974</a>
<a id='n4975' href='#n4975'>4975</a>
<a id='n4976' href='#n4976'>4976</a>
<a id='n4977' href='#n4977'>4977</a>
<a id='n4978' href='#n4978'>4978</a>
<a id='n4979' href='#n4979'>4979</a>
<a id='n4980' href='#n4980'>4980</a>
<a id='n4981' href='#n4981'>4981</a>
<a id='n4982' href='#n4982'>4982</a>
<a id='n4983' href='#n4983'>4983</a>
<a id='n4984' href='#n4984'>4984</a>
<a id='n4985' href='#n4985'>4985</a>
<a id='n4986' href='#n4986'>4986</a>
<a id='n4987' href='#n4987'>4987</a>
<a id='n4988' href='#n4988'>4988</a>
<a id='n4989' href='#n4989'>4989</a>
<a id='n4990' href='#n4990'>4990</a>
<a id='n4991' href='#n4991'>4991</a>
<a id='n4992' href='#n4992'>4992</a>
<a id='n4993' href='#n4993'>4993</a>
<a id='n4994' href='#n4994'>4994</a>
<a id='n4995' href='#n4995'>4995</a>
<a id='n4996' href='#n4996'>4996</a>
<a id='n4997' href='#n4997'>4997</a>
<a id='n4998' href='#n4998'>4998</a>
<a id='n4999' href='#n4999'>4999</a>
<a id='n5000' href='#n5000'>5000</a>
<a id='n5001' href='#n5001'>5001</a>
<a id='n5002' href='#n5002'>5002</a>
<a id='n5003' href='#n5003'>5003</a>
<a id='n5004' href='#n5004'>5004</a>
<a id='n5005' href='#n5005'>5005</a>
<a id='n5006' href='#n5006'>5006</a>
<a id='n5007' href='#n5007'>5007</a>
<a id='n5008' href='#n5008'>5008</a>
<a id='n5009' href='#n5009'>5009</a>
<a id='n5010' href='#n5010'>5010</a>
<a id='n5011' href='#n5011'>5011</a>
<a id='n5012' href='#n5012'>5012</a>
<a id='n5013' href='#n5013'>5013</a>
<a id='n5014' href='#n5014'>5014</a>
<a id='n5015' href='#n5015'>5015</a>
<a id='n5016' href='#n5016'>5016</a>
<a id='n5017' href='#n5017'>5017</a>
<a id='n5018' href='#n5018'>5018</a>
<a id='n5019' href='#n5019'>5019</a>
<a id='n5020' href='#n5020'>5020</a>
<a id='n5021' href='#n5021'>5021</a>
<a id='n5022' href='#n5022'>5022</a>
<a id='n5023' href='#n5023'>5023</a>
<a id='n5024' href='#n5024'>5024</a>
<a id='n5025' href='#n5025'>5025</a>
<a id='n5026' href='#n5026'>5026</a>
<a id='n5027' href='#n5027'>5027</a>
<a id='n5028' href='#n5028'>5028</a>
<a id='n5029' href='#n5029'>5029</a>
<a id='n5030' href='#n5030'>5030</a>
<a id='n5031' href='#n5031'>5031</a>
<a id='n5032' href='#n5032'>5032</a>
<a id='n5033' href='#n5033'>5033</a>
<a id='n5034' href='#n5034'>5034</a>
<a id='n5035' href='#n5035'>5035</a>
<a id='n5036' href='#n5036'>5036</a>
<a id='n5037' href='#n5037'>5037</a>
<a id='n5038' href='#n5038'>5038</a>
<a id='n5039' href='#n5039'>5039</a>
<a id='n5040' href='#n5040'>5040</a>
<a id='n5041' href='#n5041'>5041</a>
<a id='n5042' href='#n5042'>5042</a>
<a id='n5043' href='#n5043'>5043</a>
<a id='n5044' href='#n5044'>5044</a>
<a id='n5045' href='#n5045'>5045</a>
<a id='n5046' href='#n5046'>5046</a>
<a id='n5047' href='#n5047'>5047</a>
<a id='n5048' href='#n5048'>5048</a>
<a id='n5049' href='#n5049'>5049</a>
<a id='n5050' href='#n5050'>5050</a>
<a id='n5051' href='#n5051'>5051</a>
<a id='n5052' href='#n5052'>5052</a>
<a id='n5053' href='#n5053'>5053</a>
<a id='n5054' href='#n5054'>5054</a>
<a id='n5055' href='#n5055'>5055</a>
<a id='n5056' href='#n5056'>5056</a>
<a id='n5057' href='#n5057'>5057</a>
<a id='n5058' href='#n5058'>5058</a>
<a id='n5059' href='#n5059'>5059</a>
<a id='n5060' href='#n5060'>5060</a>
<a id='n5061' href='#n5061'>5061</a>
<a id='n5062' href='#n5062'>5062</a>
<a id='n5063' href='#n5063'>5063</a>
<a id='n5064' href='#n5064'>5064</a>
<a id='n5065' href='#n5065'>5065</a>
<a id='n5066' href='#n5066'>5066</a>
<a id='n5067' href='#n5067'>5067</a>
<a id='n5068' href='#n5068'>5068</a>
<a id='n5069' href='#n5069'>5069</a>
<a id='n5070' href='#n5070'>5070</a>
<a id='n5071' href='#n5071'>5071</a>
<a id='n5072' href='#n5072'>5072</a>
<a id='n5073' href='#n5073'>5073</a>
<a id='n5074' href='#n5074'>5074</a>
<a id='n5075' href='#n5075'>5075</a>
<a id='n5076' href='#n5076'>5076</a>
<a id='n5077' href='#n5077'>5077</a>
<a id='n5078' href='#n5078'>5078</a>
<a id='n5079' href='#n5079'>5079</a>
<a id='n5080' href='#n5080'>5080</a>
<a id='n5081' href='#n5081'>5081</a>
<a id='n5082' href='#n5082'>5082</a>
<a id='n5083' href='#n5083'>5083</a>
<a id='n5084' href='#n5084'>5084</a>
<a id='n5085' href='#n5085'>5085</a>
<a id='n5086' href='#n5086'>5086</a>
<a id='n5087' href='#n5087'>5087</a>
<a id='n5088' href='#n5088'>5088</a>
<a id='n5089' href='#n5089'>5089</a>
<a id='n5090' href='#n5090'>5090</a>
<a id='n5091' href='#n5091'>5091</a>
<a id='n5092' href='#n5092'>5092</a>
<a id='n5093' href='#n5093'>5093</a>
<a id='n5094' href='#n5094'>5094</a>
<a id='n5095' href='#n5095'>5095</a>
<a id='n5096' href='#n5096'>5096</a>
<a id='n5097' href='#n5097'>5097</a>
<a id='n5098' href='#n5098'>5098</a>
<a id='n5099' href='#n5099'>5099</a>
<a id='n5100' href='#n5100'>5100</a>
<a id='n5101' href='#n5101'>5101</a>
<a id='n5102' href='#n5102'>5102</a>
<a id='n5103' href='#n5103'>5103</a>
<a id='n5104' href='#n5104'>5104</a>
<a id='n5105' href='#n5105'>5105</a>
<a id='n5106' href='#n5106'>5106</a>
<a id='n5107' href='#n5107'>5107</a>
<a id='n5108' href='#n5108'>5108</a>
<a id='n5109' href='#n5109'>5109</a>
<a id='n5110' href='#n5110'>5110</a>
<a id='n5111' href='#n5111'>5111</a>
<a id='n5112' href='#n5112'>5112</a>
<a id='n5113' href='#n5113'>5113</a>
<a id='n5114' href='#n5114'>5114</a>
<a id='n5115' href='#n5115'>5115</a>
<a id='n5116' href='#n5116'>5116</a>
<a id='n5117' href='#n5117'>5117</a>
<a id='n5118' href='#n5118'>5118</a>
<a id='n5119' href='#n5119'>5119</a>
<a id='n5120' href='#n5120'>5120</a>
<a id='n5121' href='#n5121'>5121</a>
<a id='n5122' href='#n5122'>5122</a>
<a id='n5123' href='#n5123'>5123</a>
<a id='n5124' href='#n5124'>5124</a>
<a id='n5125' href='#n5125'>5125</a>
<a id='n5126' href='#n5126'>5126</a>
<a id='n5127' href='#n5127'>5127</a>
<a id='n5128' href='#n5128'>5128</a>
<a id='n5129' href='#n5129'>5129</a>
<a id='n5130' href='#n5130'>5130</a>
<a id='n5131' href='#n5131'>5131</a>
<a id='n5132' href='#n5132'>5132</a>
<a id='n5133' href='#n5133'>5133</a>
<a id='n5134' href='#n5134'>5134</a>
<a id='n5135' href='#n5135'>5135</a>
<a id='n5136' href='#n5136'>5136</a>
<a id='n5137' href='#n5137'>5137</a>
<a id='n5138' href='#n5138'>5138</a>
<a id='n5139' href='#n5139'>5139</a>
<a id='n5140' href='#n5140'>5140</a>
<a id='n5141' href='#n5141'>5141</a>
<a id='n5142' href='#n5142'>5142</a>
<a id='n5143' href='#n5143'>5143</a>
<a id='n5144' href='#n5144'>5144</a>
<a id='n5145' href='#n5145'>5145</a>
<a id='n5146' href='#n5146'>5146</a>
<a id='n5147' href='#n5147'>5147</a>
<a id='n5148' href='#n5148'>5148</a>
<a id='n5149' href='#n5149'>5149</a>
<a id='n5150' href='#n5150'>5150</a>
<a id='n5151' href='#n5151'>5151</a>
<a id='n5152' href='#n5152'>5152</a>
<a id='n5153' href='#n5153'>5153</a>
<a id='n5154' href='#n5154'>5154</a>
<a id='n5155' href='#n5155'>5155</a>
<a id='n5156' href='#n5156'>5156</a>
<a id='n5157' href='#n5157'>5157</a>
<a id='n5158' href='#n5158'>5158</a>
<a id='n5159' href='#n5159'>5159</a>
<a id='n5160' href='#n5160'>5160</a>
<a id='n5161' href='#n5161'>5161</a>
<a id='n5162' href='#n5162'>5162</a>
<a id='n5163' href='#n5163'>5163</a>
<a id='n5164' href='#n5164'>5164</a>
<a id='n5165' href='#n5165'>5165</a>
<a id='n5166' href='#n5166'>5166</a>
<a id='n5167' href='#n5167'>5167</a>
<a id='n5168' href='#n5168'>5168</a>
<a id='n5169' href='#n5169'>5169</a>
<a id='n5170' href='#n5170'>5170</a>
<a id='n5171' href='#n5171'>5171</a>
<a id='n5172' href='#n5172'>5172</a>
<a id='n5173' href='#n5173'>5173</a>
<a id='n5174' href='#n5174'>5174</a>
<a id='n5175' href='#n5175'>5175</a>
<a id='n5176' href='#n5176'>5176</a>
<a id='n5177' href='#n5177'>5177</a>
<a id='n5178' href='#n5178'>5178</a>
<a id='n5179' href='#n5179'>5179</a>
<a id='n5180' href='#n5180'>5180</a>
<a id='n5181' href='#n5181'>5181</a>
<a id='n5182' href='#n5182'>5182</a>
<a id='n5183' href='#n5183'>5183</a>
<a id='n5184' href='#n5184'>5184</a>
<a id='n5185' href='#n5185'>5185</a>
<a id='n5186' href='#n5186'>5186</a>
<a id='n5187' href='#n5187'>5187</a>
<a id='n5188' href='#n5188'>5188</a>
<a id='n5189' href='#n5189'>5189</a>
<a id='n5190' href='#n5190'>5190</a>
<a id='n5191' href='#n5191'>5191</a>
<a id='n5192' href='#n5192'>5192</a>
<a id='n5193' href='#n5193'>5193</a>
<a id='n5194' href='#n5194'>5194</a>
<a id='n5195' href='#n5195'>5195</a>
<a id='n5196' href='#n5196'>5196</a>
<a id='n5197' href='#n5197'>5197</a>
<a id='n5198' href='#n5198'>5198</a>
<a id='n5199' href='#n5199'>5199</a>
<a id='n5200' href='#n5200'>5200</a>
<a id='n5201' href='#n5201'>5201</a>
<a id='n5202' href='#n5202'>5202</a>
<a id='n5203' href='#n5203'>5203</a>
<a id='n5204' href='#n5204'>5204</a>
<a id='n5205' href='#n5205'>5205</a>
<a id='n5206' href='#n5206'>5206</a>
<a id='n5207' href='#n5207'>5207</a>
<a id='n5208' href='#n5208'>5208</a>
<a id='n5209' href='#n5209'>5209</a>
<a id='n5210' href='#n5210'>5210</a>
<a id='n5211' href='#n5211'>5211</a>
<a id='n5212' href='#n5212'>5212</a>
<a id='n5213' href='#n5213'>5213</a>
<a id='n5214' href='#n5214'>5214</a>
<a id='n5215' href='#n5215'>5215</a>
<a id='n5216' href='#n5216'>5216</a>
<a id='n5217' href='#n5217'>5217</a>
<a id='n5218' href='#n5218'>5218</a>
<a id='n5219' href='#n5219'>5219</a>
<a id='n5220' href='#n5220'>5220</a>
<a id='n5221' href='#n5221'>5221</a>
<a id='n5222' href='#n5222'>5222</a>
<a id='n5223' href='#n5223'>5223</a>
<a id='n5224' href='#n5224'>5224</a>
<a id='n5225' href='#n5225'>5225</a>
<a id='n5226' href='#n5226'>5226</a>
<a id='n5227' href='#n5227'>5227</a>
<a id='n5228' href='#n5228'>5228</a>
<a id='n5229' href='#n5229'>5229</a>
<a id='n5230' href='#n5230'>5230</a>
<a id='n5231' href='#n5231'>5231</a>
<a id='n5232' href='#n5232'>5232</a>
<a id='n5233' href='#n5233'>5233</a>
<a id='n5234' href='#n5234'>5234</a>
<a id='n5235' href='#n5235'>5235</a>
<a id='n5236' href='#n5236'>5236</a>
<a id='n5237' href='#n5237'>5237</a>
<a id='n5238' href='#n5238'>5238</a>
<a id='n5239' href='#n5239'>5239</a>
<a id='n5240' href='#n5240'>5240</a>
<a id='n5241' href='#n5241'>5241</a>
<a id='n5242' href='#n5242'>5242</a>
<a id='n5243' href='#n5243'>5243</a>
<a id='n5244' href='#n5244'>5244</a>
<a id='n5245' href='#n5245'>5245</a>
<a id='n5246' href='#n5246'>5246</a>
<a id='n5247' href='#n5247'>5247</a>
<a id='n5248' href='#n5248'>5248</a>
<a id='n5249' href='#n5249'>5249</a>
<a id='n5250' href='#n5250'>5250</a>
<a id='n5251' href='#n5251'>5251</a>
<a id='n5252' href='#n5252'>5252</a>
<a id='n5253' href='#n5253'>5253</a>
<a id='n5254' href='#n5254'>5254</a>
<a id='n5255' href='#n5255'>5255</a>
<a id='n5256' href='#n5256'>5256</a>
<a id='n5257' href='#n5257'>5257</a>
<a id='n5258' href='#n5258'>5258</a>
<a id='n5259' href='#n5259'>5259</a>
<a id='n5260' href='#n5260'>5260</a>
<a id='n5261' href='#n5261'>5261</a>
<a id='n5262' href='#n5262'>5262</a>
<a id='n5263' href='#n5263'>5263</a>
<a id='n5264' href='#n5264'>5264</a>
<a id='n5265' href='#n5265'>5265</a>
<a id='n5266' href='#n5266'>5266</a>
<a id='n5267' href='#n5267'>5267</a>
<a id='n5268' href='#n5268'>5268</a>
<a id='n5269' href='#n5269'>5269</a>
<a id='n5270' href='#n5270'>5270</a>
<a id='n5271' href='#n5271'>5271</a>
<a id='n5272' href='#n5272'>5272</a>
<a id='n5273' href='#n5273'>5273</a>
<a id='n5274' href='#n5274'>5274</a>
<a id='n5275' href='#n5275'>5275</a>
<a id='n5276' href='#n5276'>5276</a>
<a id='n5277' href='#n5277'>5277</a>
<a id='n5278' href='#n5278'>5278</a>
<a id='n5279' href='#n5279'>5279</a>
<a id='n5280' href='#n5280'>5280</a>
<a id='n5281' href='#n5281'>5281</a>
<a id='n5282' href='#n5282'>5282</a>
<a id='n5283' href='#n5283'>5283</a>
<a id='n5284' href='#n5284'>5284</a>
<a id='n5285' href='#n5285'>5285</a>
<a id='n5286' href='#n5286'>5286</a>
<a id='n5287' href='#n5287'>5287</a>
<a id='n5288' href='#n5288'>5288</a>
<a id='n5289' href='#n5289'>5289</a>
<a id='n5290' href='#n5290'>5290</a>
<a id='n5291' href='#n5291'>5291</a>
<a id='n5292' href='#n5292'>5292</a>
<a id='n5293' href='#n5293'>5293</a>
<a id='n5294' href='#n5294'>5294</a>
<a id='n5295' href='#n5295'>5295</a>
<a id='n5296' href='#n5296'>5296</a>
<a id='n5297' href='#n5297'>5297</a>
<a id='n5298' href='#n5298'>5298</a>
<a id='n5299' href='#n5299'>5299</a>
<a id='n5300' href='#n5300'>5300</a>
<a id='n5301' href='#n5301'>5301</a>
<a id='n5302' href='#n5302'>5302</a>
<a id='n5303' href='#n5303'>5303</a>
<a id='n5304' href='#n5304'>5304</a>
<a id='n5305' href='#n5305'>5305</a>
<a id='n5306' href='#n5306'>5306</a>
<a id='n5307' href='#n5307'>5307</a>
<a id='n5308' href='#n5308'>5308</a>
<a id='n5309' href='#n5309'>5309</a>
<a id='n5310' href='#n5310'>5310</a>
<a id='n5311' href='#n5311'>5311</a>
<a id='n5312' href='#n5312'>5312</a>
<a id='n5313' href='#n5313'>5313</a>
<a id='n5314' href='#n5314'>5314</a>
<a id='n5315' href='#n5315'>5315</a>
<a id='n5316' href='#n5316'>5316</a>
<a id='n5317' href='#n5317'>5317</a>
<a id='n5318' href='#n5318'>5318</a>
<a id='n5319' href='#n5319'>5319</a>
<a id='n5320' href='#n5320'>5320</a>
<a id='n5321' href='#n5321'>5321</a>
<a id='n5322' href='#n5322'>5322</a>
<a id='n5323' href='#n5323'>5323</a>
<a id='n5324' href='#n5324'>5324</a>
<a id='n5325' href='#n5325'>5325</a>
<a id='n5326' href='#n5326'>5326</a>
<a id='n5327' href='#n5327'>5327</a>
<a id='n5328' href='#n5328'>5328</a>
<a id='n5329' href='#n5329'>5329</a>
<a id='n5330' href='#n5330'>5330</a>
<a id='n5331' href='#n5331'>5331</a>
<a id='n5332' href='#n5332'>5332</a>
<a id='n5333' href='#n5333'>5333</a>
<a id='n5334' href='#n5334'>5334</a>
<a id='n5335' href='#n5335'>5335</a>
<a id='n5336' href='#n5336'>5336</a>
<a id='n5337' href='#n5337'>5337</a>
<a id='n5338' href='#n5338'>5338</a>
<a id='n5339' href='#n5339'>5339</a>
<a id='n5340' href='#n5340'>5340</a>
<a id='n5341' href='#n5341'>5341</a>
<a id='n5342' href='#n5342'>5342</a>
<a id='n5343' href='#n5343'>5343</a>
<a id='n5344' href='#n5344'>5344</a>
<a id='n5345' href='#n5345'>5345</a>
<a id='n5346' href='#n5346'>5346</a>
<a id='n5347' href='#n5347'>5347</a>
<a id='n5348' href='#n5348'>5348</a>
<a id='n5349' href='#n5349'>5349</a>
<a id='n5350' href='#n5350'>5350</a>
<a id='n5351' href='#n5351'>5351</a>
<a id='n5352' href='#n5352'>5352</a>
<a id='n5353' href='#n5353'>5353</a>
<a id='n5354' href='#n5354'>5354</a>
<a id='n5355' href='#n5355'>5355</a>
<a id='n5356' href='#n5356'>5356</a>
<a id='n5357' href='#n5357'>5357</a>
<a id='n5358' href='#n5358'>5358</a>
<a id='n5359' href='#n5359'>5359</a>
<a id='n5360' href='#n5360'>5360</a>
<a id='n5361' href='#n5361'>5361</a>
<a id='n5362' href='#n5362'>5362</a>
<a id='n5363' href='#n5363'>5363</a>
<a id='n5364' href='#n5364'>5364</a>
<a id='n5365' href='#n5365'>5365</a>
<a id='n5366' href='#n5366'>5366</a>
<a id='n5367' href='#n5367'>5367</a>
<a id='n5368' href='#n5368'>5368</a>
<a id='n5369' href='#n5369'>5369</a>
<a id='n5370' href='#n5370'>5370</a>
<a id='n5371' href='#n5371'>5371</a>
<a id='n5372' href='#n5372'>5372</a>
<a id='n5373' href='#n5373'>5373</a>
<a id='n5374' href='#n5374'>5374</a>
<a id='n5375' href='#n5375'>5375</a>
<a id='n5376' href='#n5376'>5376</a>
<a id='n5377' href='#n5377'>5377</a>
<a id='n5378' href='#n5378'>5378</a>
<a id='n5379' href='#n5379'>5379</a>
<a id='n5380' href='#n5380'>5380</a>
<a id='n5381' href='#n5381'>5381</a>
<a id='n5382' href='#n5382'>5382</a>
<a id='n5383' href='#n5383'>5383</a>
<a id='n5384' href='#n5384'>5384</a>
<a id='n5385' href='#n5385'>5385</a>
<a id='n5386' href='#n5386'>5386</a>
<a id='n5387' href='#n5387'>5387</a>
<a id='n5388' href='#n5388'>5388</a>
<a id='n5389' href='#n5389'>5389</a>
<a id='n5390' href='#n5390'>5390</a>
<a id='n5391' href='#n5391'>5391</a>
<a id='n5392' href='#n5392'>5392</a>
<a id='n5393' href='#n5393'>5393</a>
<a id='n5394' href='#n5394'>5394</a>
<a id='n5395' href='#n5395'>5395</a>
<a id='n5396' href='#n5396'>5396</a>
<a id='n5397' href='#n5397'>5397</a>
<a id='n5398' href='#n5398'>5398</a>
<a id='n5399' href='#n5399'>5399</a>
<a id='n5400' href='#n5400'>5400</a>
<a id='n5401' href='#n5401'>5401</a>
<a id='n5402' href='#n5402'>5402</a>
<a id='n5403' href='#n5403'>5403</a>
<a id='n5404' href='#n5404'>5404</a>
<a id='n5405' href='#n5405'>5405</a>
<a id='n5406' href='#n5406'>5406</a>
<a id='n5407' href='#n5407'>5407</a>
<a id='n5408' href='#n5408'>5408</a>
<a id='n5409' href='#n5409'>5409</a>
<a id='n5410' href='#n5410'>5410</a>
<a id='n5411' href='#n5411'>5411</a>
<a id='n5412' href='#n5412'>5412</a>
<a id='n5413' href='#n5413'>5413</a>
<a id='n5414' href='#n5414'>5414</a>
<a id='n5415' href='#n5415'>5415</a>
<a id='n5416' href='#n5416'>5416</a>
<a id='n5417' href='#n5417'>5417</a>
<a id='n5418' href='#n5418'>5418</a>
<a id='n5419' href='#n5419'>5419</a>
<a id='n5420' href='#n5420'>5420</a>
<a id='n5421' href='#n5421'>5421</a>
<a id='n5422' href='#n5422'>5422</a>
<a id='n5423' href='#n5423'>5423</a>
<a id='n5424' href='#n5424'>5424</a>
<a id='n5425' href='#n5425'>5425</a>
<a id='n5426' href='#n5426'>5426</a>
<a id='n5427' href='#n5427'>5427</a>
<a id='n5428' href='#n5428'>5428</a>
<a id='n5429' href='#n5429'>5429</a>
<a id='n5430' href='#n5430'>5430</a>
<a id='n5431' href='#n5431'>5431</a>
<a id='n5432' href='#n5432'>5432</a>
<a id='n5433' href='#n5433'>5433</a>
<a id='n5434' href='#n5434'>5434</a>
<a id='n5435' href='#n5435'>5435</a>
<a id='n5436' href='#n5436'>5436</a>
<a id='n5437' href='#n5437'>5437</a>
<a id='n5438' href='#n5438'>5438</a>
<a id='n5439' href='#n5439'>5439</a>
<a id='n5440' href='#n5440'>5440</a>
<a id='n5441' href='#n5441'>5441</a>
<a id='n5442' href='#n5442'>5442</a>
<a id='n5443' href='#n5443'>5443</a>
<a id='n5444' href='#n5444'>5444</a>
<a id='n5445' href='#n5445'>5445</a>
<a id='n5446' href='#n5446'>5446</a>
<a id='n5447' href='#n5447'>5447</a>
<a id='n5448' href='#n5448'>5448</a>
<a id='n5449' href='#n5449'>5449</a>
<a id='n5450' href='#n5450'>5450</a>
<a id='n5451' href='#n5451'>5451</a>
<a id='n5452' href='#n5452'>5452</a>
<a id='n5453' href='#n5453'>5453</a>
<a id='n5454' href='#n5454'>5454</a>
<a id='n5455' href='#n5455'>5455</a>
<a id='n5456' href='#n5456'>5456</a>
<a id='n5457' href='#n5457'>5457</a>
<a id='n5458' href='#n5458'>5458</a>
<a id='n5459' href='#n5459'>5459</a>
<a id='n5460' href='#n5460'>5460</a>
<a id='n5461' href='#n5461'>5461</a>
<a id='n5462' href='#n5462'>5462</a>
<a id='n5463' href='#n5463'>5463</a>
<a id='n5464' href='#n5464'>5464</a>
<a id='n5465' href='#n5465'>5465</a>
<a id='n5466' href='#n5466'>5466</a>
<a id='n5467' href='#n5467'>5467</a>
<a id='n5468' href='#n5468'>5468</a>
<a id='n5469' href='#n5469'>5469</a>
<a id='n5470' href='#n5470'>5470</a>
<a id='n5471' href='#n5471'>5471</a>
<a id='n5472' href='#n5472'>5472</a>
<a id='n5473' href='#n5473'>5473</a>
<a id='n5474' href='#n5474'>5474</a>
<a id='n5475' href='#n5475'>5475</a>
<a id='n5476' href='#n5476'>5476</a>
<a id='n5477' href='#n5477'>5477</a>
<a id='n5478' href='#n5478'>5478</a>
<a id='n5479' href='#n5479'>5479</a>
<a id='n5480' href='#n5480'>5480</a>
<a id='n5481' href='#n5481'>5481</a>
<a id='n5482' href='#n5482'>5482</a>
<a id='n5483' href='#n5483'>5483</a>
<a id='n5484' href='#n5484'>5484</a>
<a id='n5485' href='#n5485'>5485</a>
<a id='n5486' href='#n5486'>5486</a>
<a id='n5487' href='#n5487'>5487</a>
<a id='n5488' href='#n5488'>5488</a>
<a id='n5489' href='#n5489'>5489</a>
<a id='n5490' href='#n5490'>5490</a>
<a id='n5491' href='#n5491'>5491</a>
<a id='n5492' href='#n5492'>5492</a>
<a id='n5493' href='#n5493'>5493</a>
<a id='n5494' href='#n5494'>5494</a>
<a id='n5495' href='#n5495'>5495</a>
<a id='n5496' href='#n5496'>5496</a>
<a id='n5497' href='#n5497'>5497</a>
<a id='n5498' href='#n5498'>5498</a>
<a id='n5499' href='#n5499'>5499</a>
<a id='n5500' href='#n5500'>5500</a>
<a id='n5501' href='#n5501'>5501</a>
<a id='n5502' href='#n5502'>5502</a>
<a id='n5503' href='#n5503'>5503</a>
<a id='n5504' href='#n5504'>5504</a>
<a id='n5505' href='#n5505'>5505</a>
<a id='n5506' href='#n5506'>5506</a>
<a id='n5507' href='#n5507'>5507</a>
<a id='n5508' href='#n5508'>5508</a>
<a id='n5509' href='#n5509'>5509</a>
<a id='n5510' href='#n5510'>5510</a>
<a id='n5511' href='#n5511'>5511</a>
<a id='n5512' href='#n5512'>5512</a>
<a id='n5513' href='#n5513'>5513</a>
<a id='n5514' href='#n5514'>5514</a>
<a id='n5515' href='#n5515'>5515</a>
<a id='n5516' href='#n5516'>5516</a>
<a id='n5517' href='#n5517'>5517</a>
<a id='n5518' href='#n5518'>5518</a>
<a id='n5519' href='#n5519'>5519</a>
<a id='n5520' href='#n5520'>5520</a>
<a id='n5521' href='#n5521'>5521</a>
<a id='n5522' href='#n5522'>5522</a>
<a id='n5523' href='#n5523'>5523</a>
<a id='n5524' href='#n5524'>5524</a>
<a id='n5525' href='#n5525'>5525</a>
<a id='n5526' href='#n5526'>5526</a>
<a id='n5527' href='#n5527'>5527</a>
<a id='n5528' href='#n5528'>5528</a>
<a id='n5529' href='#n5529'>5529</a>
<a id='n5530' href='#n5530'>5530</a>
<a id='n5531' href='#n5531'>5531</a>
<a id='n5532' href='#n5532'>5532</a>
<a id='n5533' href='#n5533'>5533</a>
<a id='n5534' href='#n5534'>5534</a>
<a id='n5535' href='#n5535'>5535</a>
<a id='n5536' href='#n5536'>5536</a>
<a id='n5537' href='#n5537'>5537</a>
<a id='n5538' href='#n5538'>5538</a>
<a id='n5539' href='#n5539'>5539</a>
<a id='n5540' href='#n5540'>5540</a>
<a id='n5541' href='#n5541'>5541</a>
<a id='n5542' href='#n5542'>5542</a>
<a id='n5543' href='#n5543'>5543</a>
<a id='n5544' href='#n5544'>5544</a>
<a id='n5545' href='#n5545'>5545</a>
<a id='n5546' href='#n5546'>5546</a>
<a id='n5547' href='#n5547'>5547</a>
<a id='n5548' href='#n5548'>5548</a>
<a id='n5549' href='#n5549'>5549</a>
<a id='n5550' href='#n5550'>5550</a>
<a id='n5551' href='#n5551'>5551</a>
<a id='n5552' href='#n5552'>5552</a>
<a id='n5553' href='#n5553'>5553</a>
<a id='n5554' href='#n5554'>5554</a>
<a id='n5555' href='#n5555'>5555</a>
<a id='n5556' href='#n5556'>5556</a>
<a id='n5557' href='#n5557'>5557</a>
<a id='n5558' href='#n5558'>5558</a>
<a id='n5559' href='#n5559'>5559</a>
<a id='n5560' href='#n5560'>5560</a>
<a id='n5561' href='#n5561'>5561</a>
<a id='n5562' href='#n5562'>5562</a>
<a id='n5563' href='#n5563'>5563</a>
<a id='n5564' href='#n5564'>5564</a>
<a id='n5565' href='#n5565'>5565</a>
<a id='n5566' href='#n5566'>5566</a>
<a id='n5567' href='#n5567'>5567</a>
<a id='n5568' href='#n5568'>5568</a>
<a id='n5569' href='#n5569'>5569</a>
<a id='n5570' href='#n5570'>5570</a>
<a id='n5571' href='#n5571'>5571</a>
<a id='n5572' href='#n5572'>5572</a>
<a id='n5573' href='#n5573'>5573</a>
<a id='n5574' href='#n5574'>5574</a>
<a id='n5575' href='#n5575'>5575</a>
<a id='n5576' href='#n5576'>5576</a>
<a id='n5577' href='#n5577'>5577</a>
<a id='n5578' href='#n5578'>5578</a>
<a id='n5579' href='#n5579'>5579</a>
<a id='n5580' href='#n5580'>5580</a>
<a id='n5581' href='#n5581'>5581</a>
<a id='n5582' href='#n5582'>5582</a>
<a id='n5583' href='#n5583'>5583</a>
<a id='n5584' href='#n5584'>5584</a>
<a id='n5585' href='#n5585'>5585</a>
<a id='n5586' href='#n5586'>5586</a>
<a id='n5587' href='#n5587'>5587</a>
<a id='n5588' href='#n5588'>5588</a>
<a id='n5589' href='#n5589'>5589</a>
<a id='n5590' href='#n5590'>5590</a>
<a id='n5591' href='#n5591'>5591</a>
<a id='n5592' href='#n5592'>5592</a>
<a id='n5593' href='#n5593'>5593</a>
<a id='n5594' href='#n5594'>5594</a>
<a id='n5595' href='#n5595'>5595</a>
<a id='n5596' href='#n5596'>5596</a>
<a id='n5597' href='#n5597'>5597</a>
<a id='n5598' href='#n5598'>5598</a>
<a id='n5599' href='#n5599'>5599</a>
<a id='n5600' href='#n5600'>5600</a>
<a id='n5601' href='#n5601'>5601</a>
<a id='n5602' href='#n5602'>5602</a>
<a id='n5603' href='#n5603'>5603</a>
<a id='n5604' href='#n5604'>5604</a>
<a id='n5605' href='#n5605'>5605</a>
<a id='n5606' href='#n5606'>5606</a>
<a id='n5607' href='#n5607'>5607</a>
<a id='n5608' href='#n5608'>5608</a>
<a id='n5609' href='#n5609'>5609</a>
<a id='n5610' href='#n5610'>5610</a>
<a id='n5611' href='#n5611'>5611</a>
<a id='n5612' href='#n5612'>5612</a>
<a id='n5613' href='#n5613'>5613</a>
<a id='n5614' href='#n5614'>5614</a>
<a id='n5615' href='#n5615'>5615</a>
<a id='n5616' href='#n5616'>5616</a>
<a id='n5617' href='#n5617'>5617</a>
<a id='n5618' href='#n5618'>5618</a>
<a id='n5619' href='#n5619'>5619</a>
<a id='n5620' href='#n5620'>5620</a>
<a id='n5621' href='#n5621'>5621</a>
<a id='n5622' href='#n5622'>5622</a>
<a id='n5623' href='#n5623'>5623</a>
<a id='n5624' href='#n5624'>5624</a>
<a id='n5625' href='#n5625'>5625</a>
<a id='n5626' href='#n5626'>5626</a>
<a id='n5627' href='#n5627'>5627</a>
<a id='n5628' href='#n5628'>5628</a>
<a id='n5629' href='#n5629'>5629</a>
<a id='n5630' href='#n5630'>5630</a>
<a id='n5631' href='#n5631'>5631</a>
<a id='n5632' href='#n5632'>5632</a>
<a id='n5633' href='#n5633'>5633</a>
<a id='n5634' href='#n5634'>5634</a>
<a id='n5635' href='#n5635'>5635</a>
<a id='n5636' href='#n5636'>5636</a>
<a id='n5637' href='#n5637'>5637</a>
<a id='n5638' href='#n5638'>5638</a>
<a id='n5639' href='#n5639'>5639</a>
<a id='n5640' href='#n5640'>5640</a>
<a id='n5641' href='#n5641'>5641</a>
<a id='n5642' href='#n5642'>5642</a>
<a id='n5643' href='#n5643'>5643</a>
<a id='n5644' href='#n5644'>5644</a>
<a id='n5645' href='#n5645'>5645</a>
<a id='n5646' href='#n5646'>5646</a>
<a id='n5647' href='#n5647'>5647</a>
<a id='n5648' href='#n5648'>5648</a>
<a id='n5649' href='#n5649'>5649</a>
<a id='n5650' href='#n5650'>5650</a>
<a id='n5651' href='#n5651'>5651</a>
<a id='n5652' href='#n5652'>5652</a>
<a id='n5653' href='#n5653'>5653</a>
<a id='n5654' href='#n5654'>5654</a>
<a id='n5655' href='#n5655'>5655</a>
<a id='n5656' href='#n5656'>5656</a>
<a id='n5657' href='#n5657'>5657</a>
<a id='n5658' href='#n5658'>5658</a>
<a id='n5659' href='#n5659'>5659</a>
<a id='n5660' href='#n5660'>5660</a>
<a id='n5661' href='#n5661'>5661</a>
<a id='n5662' href='#n5662'>5662</a>
<a id='n5663' href='#n5663'>5663</a>
<a id='n5664' href='#n5664'>5664</a>
<a id='n5665' href='#n5665'>5665</a>
<a id='n5666' href='#n5666'>5666</a>
<a id='n5667' href='#n5667'>5667</a>
<a id='n5668' href='#n5668'>5668</a>
<a id='n5669' href='#n5669'>5669</a>
<a id='n5670' href='#n5670'>5670</a>
<a id='n5671' href='#n5671'>5671</a>
<a id='n5672' href='#n5672'>5672</a>
<a id='n5673' href='#n5673'>5673</a>
<a id='n5674' href='#n5674'>5674</a>
<a id='n5675' href='#n5675'>5675</a>
<a id='n5676' href='#n5676'>5676</a>
<a id='n5677' href='#n5677'>5677</a>
<a id='n5678' href='#n5678'>5678</a>
<a id='n5679' href='#n5679'>5679</a>
<a id='n5680' href='#n5680'>5680</a>
<a id='n5681' href='#n5681'>5681</a>
<a id='n5682' href='#n5682'>5682</a>
<a id='n5683' href='#n5683'>5683</a>
<a id='n5684' href='#n5684'>5684</a>
<a id='n5685' href='#n5685'>5685</a>
<a id='n5686' href='#n5686'>5686</a>
<a id='n5687' href='#n5687'>5687</a>
<a id='n5688' href='#n5688'>5688</a>
<a id='n5689' href='#n5689'>5689</a>
<a id='n5690' href='#n5690'>5690</a>
<a id='n5691' href='#n5691'>5691</a>
<a id='n5692' href='#n5692'>5692</a>
<a id='n5693' href='#n5693'>5693</a>
<a id='n5694' href='#n5694'>5694</a>
<a id='n5695' href='#n5695'>5695</a>
<a id='n5696' href='#n5696'>5696</a>
<a id='n5697' href='#n5697'>5697</a>
<a id='n5698' href='#n5698'>5698</a>
<a id='n5699' href='#n5699'>5699</a>
<a id='n5700' href='#n5700'>5700</a>
<a id='n5701' href='#n5701'>5701</a>
<a id='n5702' href='#n5702'>5702</a>
<a id='n5703' href='#n5703'>5703</a>
<a id='n5704' href='#n5704'>5704</a>
<a id='n5705' href='#n5705'>5705</a>
<a id='n5706' href='#n5706'>5706</a>
<a id='n5707' href='#n5707'>5707</a>
<a id='n5708' href='#n5708'>5708</a>
<a id='n5709' href='#n5709'>5709</a>
<a id='n5710' href='#n5710'>5710</a>
<a id='n5711' href='#n5711'>5711</a>
<a id='n5712' href='#n5712'>5712</a>
<a id='n5713' href='#n5713'>5713</a>
<a id='n5714' href='#n5714'>5714</a>
<a id='n5715' href='#n5715'>5715</a>
<a id='n5716' href='#n5716'>5716</a>
<a id='n5717' href='#n5717'>5717</a>
<a id='n5718' href='#n5718'>5718</a>
<a id='n5719' href='#n5719'>5719</a>
<a id='n5720' href='#n5720'>5720</a>
<a id='n5721' href='#n5721'>5721</a>
<a id='n5722' href='#n5722'>5722</a>
<a id='n5723' href='#n5723'>5723</a>
<a id='n5724' href='#n5724'>5724</a>
<a id='n5725' href='#n5725'>5725</a>
<a id='n5726' href='#n5726'>5726</a>
<a id='n5727' href='#n5727'>5727</a>
<a id='n5728' href='#n5728'>5728</a>
<a id='n5729' href='#n5729'>5729</a>
<a id='n5730' href='#n5730'>5730</a>
<a id='n5731' href='#n5731'>5731</a>
<a id='n5732' href='#n5732'>5732</a>
<a id='n5733' href='#n5733'>5733</a>
<a id='n5734' href='#n5734'>5734</a>
<a id='n5735' href='#n5735'>5735</a>
<a id='n5736' href='#n5736'>5736</a>
<a id='n5737' href='#n5737'>5737</a>
<a id='n5738' href='#n5738'>5738</a>
<a id='n5739' href='#n5739'>5739</a>
<a id='n5740' href='#n5740'>5740</a>
<a id='n5741' href='#n5741'>5741</a>
<a id='n5742' href='#n5742'>5742</a>
<a id='n5743' href='#n5743'>5743</a>
<a id='n5744' href='#n5744'>5744</a>
<a id='n5745' href='#n5745'>5745</a>
<a id='n5746' href='#n5746'>5746</a>
<a id='n5747' href='#n5747'>5747</a>
<a id='n5748' href='#n5748'>5748</a>
<a id='n5749' href='#n5749'>5749</a>
<a id='n5750' href='#n5750'>5750</a>
<a id='n5751' href='#n5751'>5751</a>
<a id='n5752' href='#n5752'>5752</a>
<a id='n5753' href='#n5753'>5753</a>
<a id='n5754' href='#n5754'>5754</a>
<a id='n5755' href='#n5755'>5755</a>
<a id='n5756' href='#n5756'>5756</a>
<a id='n5757' href='#n5757'>5757</a>
<a id='n5758' href='#n5758'>5758</a>
<a id='n5759' href='#n5759'>5759</a>
<a id='n5760' href='#n5760'>5760</a>
<a id='n5761' href='#n5761'>5761</a>
<a id='n5762' href='#n5762'>5762</a>
<a id='n5763' href='#n5763'>5763</a>
<a id='n5764' href='#n5764'>5764</a>
<a id='n5765' href='#n5765'>5765</a>
<a id='n5766' href='#n5766'>5766</a>
<a id='n5767' href='#n5767'>5767</a>
<a id='n5768' href='#n5768'>5768</a>
<a id='n5769' href='#n5769'>5769</a>
<a id='n5770' href='#n5770'>5770</a>
<a id='n5771' href='#n5771'>5771</a>
<a id='n5772' href='#n5772'>5772</a>
<a id='n5773' href='#n5773'>5773</a>
<a id='n5774' href='#n5774'>5774</a>
<a id='n5775' href='#n5775'>5775</a>
<a id='n5776' href='#n5776'>5776</a>
<a id='n5777' href='#n5777'>5777</a>
<a id='n5778' href='#n5778'>5778</a>
<a id='n5779' href='#n5779'>5779</a>
<a id='n5780' href='#n5780'>5780</a>
<a id='n5781' href='#n5781'>5781</a>
<a id='n5782' href='#n5782'>5782</a>
<a id='n5783' href='#n5783'>5783</a>
<a id='n5784' href='#n5784'>5784</a>
<a id='n5785' href='#n5785'>5785</a>
<a id='n5786' href='#n5786'>5786</a>
<a id='n5787' href='#n5787'>5787</a>
<a id='n5788' href='#n5788'>5788</a>
<a id='n5789' href='#n5789'>5789</a>
<a id='n5790' href='#n5790'>5790</a>
<a id='n5791' href='#n5791'>5791</a>
<a id='n5792' href='#n5792'>5792</a>
<a id='n5793' href='#n5793'>5793</a>
<a id='n5794' href='#n5794'>5794</a>
<a id='n5795' href='#n5795'>5795</a>
<a id='n5796' href='#n5796'>5796</a>
<a id='n5797' href='#n5797'>5797</a>
<a id='n5798' href='#n5798'>5798</a>
<a id='n5799' href='#n5799'>5799</a>
<a id='n5800' href='#n5800'>5800</a>
<a id='n5801' href='#n5801'>5801</a>
<a id='n5802' href='#n5802'>5802</a>
<a id='n5803' href='#n5803'>5803</a>
<a id='n5804' href='#n5804'>5804</a>
<a id='n5805' href='#n5805'>5805</a>
<a id='n5806' href='#n5806'>5806</a>
<a id='n5807' href='#n5807'>5807</a>
<a id='n5808' href='#n5808'>5808</a>
<a id='n5809' href='#n5809'>5809</a>
<a id='n5810' href='#n5810'>5810</a>
<a id='n5811' href='#n5811'>5811</a>
<a id='n5812' href='#n5812'>5812</a>
<a id='n5813' href='#n5813'>5813</a>
<a id='n5814' href='#n5814'>5814</a>
<a id='n5815' href='#n5815'>5815</a>
<a id='n5816' href='#n5816'>5816</a>
<a id='n5817' href='#n5817'>5817</a>
<a id='n5818' href='#n5818'>5818</a>
<a id='n5819' href='#n5819'>5819</a>
<a id='n5820' href='#n5820'>5820</a>
<a id='n5821' href='#n5821'>5821</a>
<a id='n5822' href='#n5822'>5822</a>
<a id='n5823' href='#n5823'>5823</a>
<a id='n5824' href='#n5824'>5824</a>
<a id='n5825' href='#n5825'>5825</a>
<a id='n5826' href='#n5826'>5826</a>
<a id='n5827' href='#n5827'>5827</a>
<a id='n5828' href='#n5828'>5828</a>
<a id='n5829' href='#n5829'>5829</a>
<a id='n5830' href='#n5830'>5830</a>
<a id='n5831' href='#n5831'>5831</a>
<a id='n5832' href='#n5832'>5832</a>
<a id='n5833' href='#n5833'>5833</a>
<a id='n5834' href='#n5834'>5834</a>
<a id='n5835' href='#n5835'>5835</a>
<a id='n5836' href='#n5836'>5836</a>
<a id='n5837' href='#n5837'>5837</a>
<a id='n5838' href='#n5838'>5838</a>
<a id='n5839' href='#n5839'>5839</a>
<a id='n5840' href='#n5840'>5840</a>
<a id='n5841' href='#n5841'>5841</a>
<a id='n5842' href='#n5842'>5842</a>
<a id='n5843' href='#n5843'>5843</a>
<a id='n5844' href='#n5844'>5844</a>
<a id='n5845' href='#n5845'>5845</a>
<a id='n5846' href='#n5846'>5846</a>
<a id='n5847' href='#n5847'>5847</a>
<a id='n5848' href='#n5848'>5848</a>
<a id='n5849' href='#n5849'>5849</a>
<a id='n5850' href='#n5850'>5850</a>
<a id='n5851' href='#n5851'>5851</a>
<a id='n5852' href='#n5852'>5852</a>
<a id='n5853' href='#n5853'>5853</a>
<a id='n5854' href='#n5854'>5854</a>
<a id='n5855' href='#n5855'>5855</a>
<a id='n5856' href='#n5856'>5856</a>
<a id='n5857' href='#n5857'>5857</a>
<a id='n5858' href='#n5858'>5858</a>
<a id='n5859' href='#n5859'>5859</a>
<a id='n5860' href='#n5860'>5860</a>
<a id='n5861' href='#n5861'>5861</a>
<a id='n5862' href='#n5862'>5862</a>
<a id='n5863' href='#n5863'>5863</a>
<a id='n5864' href='#n5864'>5864</a>
<a id='n5865' href='#n5865'>5865</a>
<a id='n5866' href='#n5866'>5866</a>
<a id='n5867' href='#n5867'>5867</a>
<a id='n5868' href='#n5868'>5868</a>
<a id='n5869' href='#n5869'>5869</a>
<a id='n5870' href='#n5870'>5870</a>
<a id='n5871' href='#n5871'>5871</a>
<a id='n5872' href='#n5872'>5872</a>
<a id='n5873' href='#n5873'>5873</a>
<a id='n5874' href='#n5874'>5874</a>
<a id='n5875' href='#n5875'>5875</a>
<a id='n5876' href='#n5876'>5876</a>
<a id='n5877' href='#n5877'>5877</a>
<a id='n5878' href='#n5878'>5878</a>
<a id='n5879' href='#n5879'>5879</a>
<a id='n5880' href='#n5880'>5880</a>
<a id='n5881' href='#n5881'>5881</a>
<a id='n5882' href='#n5882'>5882</a>
<a id='n5883' href='#n5883'>5883</a>
<a id='n5884' href='#n5884'>5884</a>
<a id='n5885' href='#n5885'>5885</a>
<a id='n5886' href='#n5886'>5886</a>
<a id='n5887' href='#n5887'>5887</a>
<a id='n5888' href='#n5888'>5888</a>
<a id='n5889' href='#n5889'>5889</a>
<a id='n5890' href='#n5890'>5890</a>
<a id='n5891' href='#n5891'>5891</a>
<a id='n5892' href='#n5892'>5892</a>
<a id='n5893' href='#n5893'>5893</a>
<a id='n5894' href='#n5894'>5894</a>
<a id='n5895' href='#n5895'>5895</a>
<a id='n5896' href='#n5896'>5896</a>
<a id='n5897' href='#n5897'>5897</a>
<a id='n5898' href='#n5898'>5898</a>
<a id='n5899' href='#n5899'>5899</a>
<a id='n5900' href='#n5900'>5900</a>
<a id='n5901' href='#n5901'>5901</a>
<a id='n5902' href='#n5902'>5902</a>
<a id='n5903' href='#n5903'>5903</a>
<a id='n5904' href='#n5904'>5904</a>
<a id='n5905' href='#n5905'>5905</a>
<a id='n5906' href='#n5906'>5906</a>
<a id='n5907' href='#n5907'>5907</a>
<a id='n5908' href='#n5908'>5908</a>
<a id='n5909' href='#n5909'>5909</a>
<a id='n5910' href='#n5910'>5910</a>
<a id='n5911' href='#n5911'>5911</a>
<a id='n5912' href='#n5912'>5912</a>
<a id='n5913' href='#n5913'>5913</a>
<a id='n5914' href='#n5914'>5914</a>
<a id='n5915' href='#n5915'>5915</a>
<a id='n5916' href='#n5916'>5916</a>
<a id='n5917' href='#n5917'>5917</a>
<a id='n5918' href='#n5918'>5918</a>
<a id='n5919' href='#n5919'>5919</a>
<a id='n5920' href='#n5920'>5920</a>
<a id='n5921' href='#n5921'>5921</a>
<a id='n5922' href='#n5922'>5922</a>
<a id='n5923' href='#n5923'>5923</a>
<a id='n5924' href='#n5924'>5924</a>
<a id='n5925' href='#n5925'>5925</a>
<a id='n5926' href='#n5926'>5926</a>
<a id='n5927' href='#n5927'>5927</a>
<a id='n5928' href='#n5928'>5928</a>
<a id='n5929' href='#n5929'>5929</a>
<a id='n5930' href='#n5930'>5930</a>
<a id='n5931' href='#n5931'>5931</a>
<a id='n5932' href='#n5932'>5932</a>
<a id='n5933' href='#n5933'>5933</a>
<a id='n5934' href='#n5934'>5934</a>
<a id='n5935' href='#n5935'>5935</a>
<a id='n5936' href='#n5936'>5936</a>
<a id='n5937' href='#n5937'>5937</a>
<a id='n5938' href='#n5938'>5938</a>
<a id='n5939' href='#n5939'>5939</a>
<a id='n5940' href='#n5940'>5940</a>
<a id='n5941' href='#n5941'>5941</a>
<a id='n5942' href='#n5942'>5942</a>
<a id='n5943' href='#n5943'>5943</a>
<a id='n5944' href='#n5944'>5944</a>
<a id='n5945' href='#n5945'>5945</a>
<a id='n5946' href='#n5946'>5946</a>
<a id='n5947' href='#n5947'>5947</a>
<a id='n5948' href='#n5948'>5948</a>
<a id='n5949' href='#n5949'>5949</a>
<a id='n5950' href='#n5950'>5950</a>
<a id='n5951' href='#n5951'>5951</a>
<a id='n5952' href='#n5952'>5952</a>
<a id='n5953' href='#n5953'>5953</a>
<a id='n5954' href='#n5954'>5954</a>
<a id='n5955' href='#n5955'>5955</a>
<a id='n5956' href='#n5956'>5956</a>
<a id='n5957' href='#n5957'>5957</a>
<a id='n5958' href='#n5958'>5958</a>
<a id='n5959' href='#n5959'>5959</a>
<a id='n5960' href='#n5960'>5960</a>
<a id='n5961' href='#n5961'>5961</a>
<a id='n5962' href='#n5962'>5962</a>
<a id='n5963' href='#n5963'>5963</a>
<a id='n5964' href='#n5964'>5964</a>
<a id='n5965' href='#n5965'>5965</a>
<a id='n5966' href='#n5966'>5966</a>
<a id='n5967' href='#n5967'>5967</a>
<a id='n5968' href='#n5968'>5968</a>
<a id='n5969' href='#n5969'>5969</a>
<a id='n5970' href='#n5970'>5970</a>
<a id='n5971' href='#n5971'>5971</a>
<a id='n5972' href='#n5972'>5972</a>
<a id='n5973' href='#n5973'>5973</a>
<a id='n5974' href='#n5974'>5974</a>
<a id='n5975' href='#n5975'>5975</a>
<a id='n5976' href='#n5976'>5976</a>
<a id='n5977' href='#n5977'>5977</a>
<a id='n5978' href='#n5978'>5978</a>
<a id='n5979' href='#n5979'>5979</a>
<a id='n5980' href='#n5980'>5980</a>
<a id='n5981' href='#n5981'>5981</a>
<a id='n5982' href='#n5982'>5982</a>
<a id='n5983' href='#n5983'>5983</a>
<a id='n5984' href='#n5984'>5984</a>
<a id='n5985' href='#n5985'>5985</a>
<a id='n5986' href='#n5986'>5986</a>
<a id='n5987' href='#n5987'>5987</a>
<a id='n5988' href='#n5988'>5988</a>
<a id='n5989' href='#n5989'>5989</a>
<a id='n5990' href='#n5990'>5990</a>
<a id='n5991' href='#n5991'>5991</a>
<a id='n5992' href='#n5992'>5992</a>
<a id='n5993' href='#n5993'>5993</a>
<a id='n5994' href='#n5994'>5994</a>
<a id='n5995' href='#n5995'>5995</a>
<a id='n5996' href='#n5996'>5996</a>
<a id='n5997' href='#n5997'>5997</a>
<a id='n5998' href='#n5998'>5998</a>
<a id='n5999' href='#n5999'>5999</a>
<a id='n6000' href='#n6000'>6000</a>
<a id='n6001' href='#n6001'>6001</a>
<a id='n6002' href='#n6002'>6002</a>
<a id='n6003' href='#n6003'>6003</a>
<a id='n6004' href='#n6004'>6004</a>
<a id='n6005' href='#n6005'>6005</a>
<a id='n6006' href='#n6006'>6006</a>
<a id='n6007' href='#n6007'>6007</a>
<a id='n6008' href='#n6008'>6008</a>
<a id='n6009' href='#n6009'>6009</a>
<a id='n6010' href='#n6010'>6010</a>
<a id='n6011' href='#n6011'>6011</a>
<a id='n6012' href='#n6012'>6012</a>
<a id='n6013' href='#n6013'>6013</a>
<a id='n6014' href='#n6014'>6014</a>
<a id='n6015' href='#n6015'>6015</a>
<a id='n6016' href='#n6016'>6016</a>
<a id='n6017' href='#n6017'>6017</a>
<a id='n6018' href='#n6018'>6018</a>
<a id='n6019' href='#n6019'>6019</a>
<a id='n6020' href='#n6020'>6020</a>
<a id='n6021' href='#n6021'>6021</a>
<a id='n6022' href='#n6022'>6022</a>
<a id='n6023' href='#n6023'>6023</a>
<a id='n6024' href='#n6024'>6024</a>
<a id='n6025' href='#n6025'>6025</a>
<a id='n6026' href='#n6026'>6026</a>
<a id='n6027' href='#n6027'>6027</a>
<a id='n6028' href='#n6028'>6028</a>
<a id='n6029' href='#n6029'>6029</a>
<a id='n6030' href='#n6030'>6030</a>
<a id='n6031' href='#n6031'>6031</a>
<a id='n6032' href='#n6032'>6032</a>
<a id='n6033' href='#n6033'>6033</a>
<a id='n6034' href='#n6034'>6034</a>
<a id='n6035' href='#n6035'>6035</a>
<a id='n6036' href='#n6036'>6036</a>
<a id='n6037' href='#n6037'>6037</a>
<a id='n6038' href='#n6038'>6038</a>
<a id='n6039' href='#n6039'>6039</a>
<a id='n6040' href='#n6040'>6040</a>
<a id='n6041' href='#n6041'>6041</a>
<a id='n6042' href='#n6042'>6042</a>
<a id='n6043' href='#n6043'>6043</a>
<a id='n6044' href='#n6044'>6044</a>
<a id='n6045' href='#n6045'>6045</a>
<a id='n6046' href='#n6046'>6046</a>
<a id='n6047' href='#n6047'>6047</a>
<a id='n6048' href='#n6048'>6048</a>
<a id='n6049' href='#n6049'>6049</a>
<a id='n6050' href='#n6050'>6050</a>
<a id='n6051' href='#n6051'>6051</a>
<a id='n6052' href='#n6052'>6052</a>
<a id='n6053' href='#n6053'>6053</a>
<a id='n6054' href='#n6054'>6054</a>
<a id='n6055' href='#n6055'>6055</a>
<a id='n6056' href='#n6056'>6056</a>
<a id='n6057' href='#n6057'>6057</a>
<a id='n6058' href='#n6058'>6058</a>
<a id='n6059' href='#n6059'>6059</a>
<a id='n6060' href='#n6060'>6060</a>
<a id='n6061' href='#n6061'>6061</a>
<a id='n6062' href='#n6062'>6062</a>
<a id='n6063' href='#n6063'>6063</a>
<a id='n6064' href='#n6064'>6064</a>
<a id='n6065' href='#n6065'>6065</a>
<a id='n6066' href='#n6066'>6066</a>
<a id='n6067' href='#n6067'>6067</a>
<a id='n6068' href='#n6068'>6068</a>
<a id='n6069' href='#n6069'>6069</a>
<a id='n6070' href='#n6070'>6070</a>
<a id='n6071' href='#n6071'>6071</a>
<a id='n6072' href='#n6072'>6072</a>
<a id='n6073' href='#n6073'>6073</a>
<a id='n6074' href='#n6074'>6074</a>
<a id='n6075' href='#n6075'>6075</a>
<a id='n6076' href='#n6076'>6076</a>
<a id='n6077' href='#n6077'>6077</a>
<a id='n6078' href='#n6078'>6078</a>
<a id='n6079' href='#n6079'>6079</a>
<a id='n6080' href='#n6080'>6080</a>
<a id='n6081' href='#n6081'>6081</a>
<a id='n6082' href='#n6082'>6082</a>
<a id='n6083' href='#n6083'>6083</a>
<a id='n6084' href='#n6084'>6084</a>
<a id='n6085' href='#n6085'>6085</a>
<a id='n6086' href='#n6086'>6086</a>
<a id='n6087' href='#n6087'>6087</a>
<a id='n6088' href='#n6088'>6088</a>
<a id='n6089' href='#n6089'>6089</a>
<a id='n6090' href='#n6090'>6090</a>
<a id='n6091' href='#n6091'>6091</a>
<a id='n6092' href='#n6092'>6092</a>
<a id='n6093' href='#n6093'>6093</a>
<a id='n6094' href='#n6094'>6094</a>
<a id='n6095' href='#n6095'>6095</a>
<a id='n6096' href='#n6096'>6096</a>
<a id='n6097' href='#n6097'>6097</a>
<a id='n6098' href='#n6098'>6098</a>
<a id='n6099' href='#n6099'>6099</a>
<a id='n6100' href='#n6100'>6100</a>
<a id='n6101' href='#n6101'>6101</a>
<a id='n6102' href='#n6102'>6102</a>
<a id='n6103' href='#n6103'>6103</a>
<a id='n6104' href='#n6104'>6104</a>
<a id='n6105' href='#n6105'>6105</a>
<a id='n6106' href='#n6106'>6106</a>
<a id='n6107' href='#n6107'>6107</a>
<a id='n6108' href='#n6108'>6108</a>
<a id='n6109' href='#n6109'>6109</a>
<a id='n6110' href='#n6110'>6110</a>
<a id='n6111' href='#n6111'>6111</a>
<a id='n6112' href='#n6112'>6112</a>
<a id='n6113' href='#n6113'>6113</a>
<a id='n6114' href='#n6114'>6114</a>
<a id='n6115' href='#n6115'>6115</a>
<a id='n6116' href='#n6116'>6116</a>
<a id='n6117' href='#n6117'>6117</a>
<a id='n6118' href='#n6118'>6118</a>
<a id='n6119' href='#n6119'>6119</a>
<a id='n6120' href='#n6120'>6120</a>
<a id='n6121' href='#n6121'>6121</a>
<a id='n6122' href='#n6122'>6122</a>
<a id='n6123' href='#n6123'>6123</a>
<a id='n6124' href='#n6124'>6124</a>
<a id='n6125' href='#n6125'>6125</a>
<a id='n6126' href='#n6126'>6126</a>
<a id='n6127' href='#n6127'>6127</a>
<a id='n6128' href='#n6128'>6128</a>
<a id='n6129' href='#n6129'>6129</a>
<a id='n6130' href='#n6130'>6130</a>
<a id='n6131' href='#n6131'>6131</a>
<a id='n6132' href='#n6132'>6132</a>
<a id='n6133' href='#n6133'>6133</a>
<a id='n6134' href='#n6134'>6134</a>
<a id='n6135' href='#n6135'>6135</a>
<a id='n6136' href='#n6136'>6136</a>
<a id='n6137' href='#n6137'>6137</a>
<a id='n6138' href='#n6138'>6138</a>
<a id='n6139' href='#n6139'>6139</a>
<a id='n6140' href='#n6140'>6140</a>
<a id='n6141' href='#n6141'>6141</a>
<a id='n6142' href='#n6142'>6142</a>
<a id='n6143' href='#n6143'>6143</a>
<a id='n6144' href='#n6144'>6144</a>
<a id='n6145' href='#n6145'>6145</a>
<a id='n6146' href='#n6146'>6146</a>
<a id='n6147' href='#n6147'>6147</a>
<a id='n6148' href='#n6148'>6148</a>
<a id='n6149' href='#n6149'>6149</a>
<a id='n6150' href='#n6150'>6150</a>
<a id='n6151' href='#n6151'>6151</a>
<a id='n6152' href='#n6152'>6152</a>
<a id='n6153' href='#n6153'>6153</a>
<a id='n6154' href='#n6154'>6154</a>
<a id='n6155' href='#n6155'>6155</a>
<a id='n6156' href='#n6156'>6156</a>
<a id='n6157' href='#n6157'>6157</a>
<a id='n6158' href='#n6158'>6158</a>
<a id='n6159' href='#n6159'>6159</a>
<a id='n6160' href='#n6160'>6160</a>
<a id='n6161' href='#n6161'>6161</a>
<a id='n6162' href='#n6162'>6162</a>
<a id='n6163' href='#n6163'>6163</a>
<a id='n6164' href='#n6164'>6164</a>
<a id='n6165' href='#n6165'>6165</a>
<a id='n6166' href='#n6166'>6166</a>
<a id='n6167' href='#n6167'>6167</a>
<a id='n6168' href='#n6168'>6168</a>
<a id='n6169' href='#n6169'>6169</a>
<a id='n6170' href='#n6170'>6170</a>
<a id='n6171' href='#n6171'>6171</a>
<a id='n6172' href='#n6172'>6172</a>
<a id='n6173' href='#n6173'>6173</a>
<a id='n6174' href='#n6174'>6174</a>
<a id='n6175' href='#n6175'>6175</a>
<a id='n6176' href='#n6176'>6176</a>
<a id='n6177' href='#n6177'>6177</a>
<a id='n6178' href='#n6178'>6178</a>
<a id='n6179' href='#n6179'>6179</a>
<a id='n6180' href='#n6180'>6180</a>
<a id='n6181' href='#n6181'>6181</a>
<a id='n6182' href='#n6182'>6182</a>
<a id='n6183' href='#n6183'>6183</a>
<a id='n6184' href='#n6184'>6184</a>
<a id='n6185' href='#n6185'>6185</a>
<a id='n6186' href='#n6186'>6186</a>
<a id='n6187' href='#n6187'>6187</a>
<a id='n6188' href='#n6188'>6188</a>
<a id='n6189' href='#n6189'>6189</a>
<a id='n6190' href='#n6190'>6190</a>
<a id='n6191' href='#n6191'>6191</a>
<a id='n6192' href='#n6192'>6192</a>
<a id='n6193' href='#n6193'>6193</a>
<a id='n6194' href='#n6194'>6194</a>
<a id='n6195' href='#n6195'>6195</a>
<a id='n6196' href='#n6196'>6196</a>
<a id='n6197' href='#n6197'>6197</a>
<a id='n6198' href='#n6198'>6198</a>
<a id='n6199' href='#n6199'>6199</a>
<a id='n6200' href='#n6200'>6200</a>
<a id='n6201' href='#n6201'>6201</a>
<a id='n6202' href='#n6202'>6202</a>
<a id='n6203' href='#n6203'>6203</a>
<a id='n6204' href='#n6204'>6204</a>
<a id='n6205' href='#n6205'>6205</a>
<a id='n6206' href='#n6206'>6206</a>
<a id='n6207' href='#n6207'>6207</a>
<a id='n6208' href='#n6208'>6208</a>
<a id='n6209' href='#n6209'>6209</a>
<a id='n6210' href='#n6210'>6210</a>
<a id='n6211' href='#n6211'>6211</a>
<a id='n6212' href='#n6212'>6212</a>
<a id='n6213' href='#n6213'>6213</a>
<a id='n6214' href='#n6214'>6214</a>
<a id='n6215' href='#n6215'>6215</a>
<a id='n6216' href='#n6216'>6216</a>
<a id='n6217' href='#n6217'>6217</a>
<a id='n6218' href='#n6218'>6218</a>
<a id='n6219' href='#n6219'>6219</a>
<a id='n6220' href='#n6220'>6220</a>
<a id='n6221' href='#n6221'>6221</a>
<a id='n6222' href='#n6222'>6222</a>
<a id='n6223' href='#n6223'>6223</a>
<a id='n6224' href='#n6224'>6224</a>
<a id='n6225' href='#n6225'>6225</a>
<a id='n6226' href='#n6226'>6226</a>
<a id='n6227' href='#n6227'>6227</a>
<a id='n6228' href='#n6228'>6228</a>
<a id='n6229' href='#n6229'>6229</a>
<a id='n6230' href='#n6230'>6230</a>
<a id='n6231' href='#n6231'>6231</a>
<a id='n6232' href='#n6232'>6232</a>
<a id='n6233' href='#n6233'>6233</a>
<a id='n6234' href='#n6234'>6234</a>
<a id='n6235' href='#n6235'>6235</a>
<a id='n6236' href='#n6236'>6236</a>
<a id='n6237' href='#n6237'>6237</a>
<a id='n6238' href='#n6238'>6238</a>
<a id='n6239' href='#n6239'>6239</a>
<a id='n6240' href='#n6240'>6240</a>
<a id='n6241' href='#n6241'>6241</a>
<a id='n6242' href='#n6242'>6242</a>
<a id='n6243' href='#n6243'>6243</a>
<a id='n6244' href='#n6244'>6244</a>
<a id='n6245' href='#n6245'>6245</a>
<a id='n6246' href='#n6246'>6246</a>
<a id='n6247' href='#n6247'>6247</a>
<a id='n6248' href='#n6248'>6248</a>
<a id='n6249' href='#n6249'>6249</a>
<a id='n6250' href='#n6250'>6250</a>
<a id='n6251' href='#n6251'>6251</a>
<a id='n6252' href='#n6252'>6252</a>
<a id='n6253' href='#n6253'>6253</a>
<a id='n6254' href='#n6254'>6254</a>
<a id='n6255' href='#n6255'>6255</a>
<a id='n6256' href='#n6256'>6256</a>
<a id='n6257' href='#n6257'>6257</a>
<a id='n6258' href='#n6258'>6258</a>
<a id='n6259' href='#n6259'>6259</a>
<a id='n6260' href='#n6260'>6260</a>
<a id='n6261' href='#n6261'>6261</a>
<a id='n6262' href='#n6262'>6262</a>
<a id='n6263' href='#n6263'>6263</a>
<a id='n6264' href='#n6264'>6264</a>
<a id='n6265' href='#n6265'>6265</a>
<a id='n6266' href='#n6266'>6266</a>
<a id='n6267' href='#n6267'>6267</a>
<a id='n6268' href='#n6268'>6268</a>
<a id='n6269' href='#n6269'>6269</a>
<a id='n6270' href='#n6270'>6270</a>
<a id='n6271' href='#n6271'>6271</a>
<a id='n6272' href='#n6272'>6272</a>
<a id='n6273' href='#n6273'>6273</a>
<a id='n6274' href='#n6274'>6274</a>
<a id='n6275' href='#n6275'>6275</a>
<a id='n6276' href='#n6276'>6276</a>
<a id='n6277' href='#n6277'>6277</a>
<a id='n6278' href='#n6278'>6278</a>
<a id='n6279' href='#n6279'>6279</a>
<a id='n6280' href='#n6280'>6280</a>
<a id='n6281' href='#n6281'>6281</a>
<a id='n6282' href='#n6282'>6282</a>
<a id='n6283' href='#n6283'>6283</a>
<a id='n6284' href='#n6284'>6284</a>
<a id='n6285' href='#n6285'>6285</a>
<a id='n6286' href='#n6286'>6286</a>
<a id='n6287' href='#n6287'>6287</a>
<a id='n6288' href='#n6288'>6288</a>
<a id='n6289' href='#n6289'>6289</a>
<a id='n6290' href='#n6290'>6290</a>
<a id='n6291' href='#n6291'>6291</a>
<a id='n6292' href='#n6292'>6292</a>
<a id='n6293' href='#n6293'>6293</a>
<a id='n6294' href='#n6294'>6294</a>
<a id='n6295' href='#n6295'>6295</a>
<a id='n6296' href='#n6296'>6296</a>
<a id='n6297' href='#n6297'>6297</a>
<a id='n6298' href='#n6298'>6298</a>
<a id='n6299' href='#n6299'>6299</a>
<a id='n6300' href='#n6300'>6300</a>
<a id='n6301' href='#n6301'>6301</a>
<a id='n6302' href='#n6302'>6302</a>
<a id='n6303' href='#n6303'>6303</a>
<a id='n6304' href='#n6304'>6304</a>
<a id='n6305' href='#n6305'>6305</a>
<a id='n6306' href='#n6306'>6306</a>
<a id='n6307' href='#n6307'>6307</a>
<a id='n6308' href='#n6308'>6308</a>
<a id='n6309' href='#n6309'>6309</a>
<a id='n6310' href='#n6310'>6310</a>
<a id='n6311' href='#n6311'>6311</a>
<a id='n6312' href='#n6312'>6312</a>
<a id='n6313' href='#n6313'>6313</a>
<a id='n6314' href='#n6314'>6314</a>
<a id='n6315' href='#n6315'>6315</a>
<a id='n6316' href='#n6316'>6316</a>
<a id='n6317' href='#n6317'>6317</a>
<a id='n6318' href='#n6318'>6318</a>
<a id='n6319' href='#n6319'>6319</a>
<a id='n6320' href='#n6320'>6320</a>
<a id='n6321' href='#n6321'>6321</a>
<a id='n6322' href='#n6322'>6322</a>
<a id='n6323' href='#n6323'>6323</a>
<a id='n6324' href='#n6324'>6324</a>
<a id='n6325' href='#n6325'>6325</a>
<a id='n6326' href='#n6326'>6326</a>
<a id='n6327' href='#n6327'>6327</a>
<a id='n6328' href='#n6328'>6328</a>
<a id='n6329' href='#n6329'>6329</a>
<a id='n6330' href='#n6330'>6330</a>
<a id='n6331' href='#n6331'>6331</a>
<a id='n6332' href='#n6332'>6332</a>
<a id='n6333' href='#n6333'>6333</a>
<a id='n6334' href='#n6334'>6334</a>
<a id='n6335' href='#n6335'>6335</a>
<a id='n6336' href='#n6336'>6336</a>
<a id='n6337' href='#n6337'>6337</a>
<a id='n6338' href='#n6338'>6338</a>
<a id='n6339' href='#n6339'>6339</a>
<a id='n6340' href='#n6340'>6340</a>
<a id='n6341' href='#n6341'>6341</a>
<a id='n6342' href='#n6342'>6342</a>
<a id='n6343' href='#n6343'>6343</a>
<a id='n6344' href='#n6344'>6344</a>
<a id='n6345' href='#n6345'>6345</a>
<a id='n6346' href='#n6346'>6346</a>
<a id='n6347' href='#n6347'>6347</a>
<a id='n6348' href='#n6348'>6348</a>
<a id='n6349' href='#n6349'>6349</a>
<a id='n6350' href='#n6350'>6350</a>
<a id='n6351' href='#n6351'>6351</a>
<a id='n6352' href='#n6352'>6352</a>
<a id='n6353' href='#n6353'>6353</a>
<a id='n6354' href='#n6354'>6354</a>
<a id='n6355' href='#n6355'>6355</a>
<a id='n6356' href='#n6356'>6356</a>
<a id='n6357' href='#n6357'>6357</a>
<a id='n6358' href='#n6358'>6358</a>
<a id='n6359' href='#n6359'>6359</a>
<a id='n6360' href='#n6360'>6360</a>
<a id='n6361' href='#n6361'>6361</a>
<a id='n6362' href='#n6362'>6362</a>
<a id='n6363' href='#n6363'>6363</a>
<a id='n6364' href='#n6364'>6364</a>
<a id='n6365' href='#n6365'>6365</a>
<a id='n6366' href='#n6366'>6366</a>
<a id='n6367' href='#n6367'>6367</a>
<a id='n6368' href='#n6368'>6368</a>
<a id='n6369' href='#n6369'>6369</a>
<a id='n6370' href='#n6370'>6370</a>
<a id='n6371' href='#n6371'>6371</a>
<a id='n6372' href='#n6372'>6372</a>
<a id='n6373' href='#n6373'>6373</a>
<a id='n6374' href='#n6374'>6374</a>
<a id='n6375' href='#n6375'>6375</a>
<a id='n6376' href='#n6376'>6376</a>
<a id='n6377' href='#n6377'>6377</a>
<a id='n6378' href='#n6378'>6378</a>
<a id='n6379' href='#n6379'>6379</a>
<a id='n6380' href='#n6380'>6380</a>
<a id='n6381' href='#n6381'>6381</a>
<a id='n6382' href='#n6382'>6382</a>
<a id='n6383' href='#n6383'>6383</a>
<a id='n6384' href='#n6384'>6384</a>
<a id='n6385' href='#n6385'>6385</a>
<a id='n6386' href='#n6386'>6386</a>
<a id='n6387' href='#n6387'>6387</a>
<a id='n6388' href='#n6388'>6388</a>
<a id='n6389' href='#n6389'>6389</a>
<a id='n6390' href='#n6390'>6390</a>
<a id='n6391' href='#n6391'>6391</a>
<a id='n6392' href='#n6392'>6392</a>
<a id='n6393' href='#n6393'>6393</a>
<a id='n6394' href='#n6394'>6394</a>
<a id='n6395' href='#n6395'>6395</a>
<a id='n6396' href='#n6396'>6396</a>
<a id='n6397' href='#n6397'>6397</a>
<a id='n6398' href='#n6398'>6398</a>
<a id='n6399' href='#n6399'>6399</a>
<a id='n6400' href='#n6400'>6400</a>
<a id='n6401' href='#n6401'>6401</a>
<a id='n6402' href='#n6402'>6402</a>
<a id='n6403' href='#n6403'>6403</a>
<a id='n6404' href='#n6404'>6404</a>
<a id='n6405' href='#n6405'>6405</a>
<a id='n6406' href='#n6406'>6406</a>
<a id='n6407' href='#n6407'>6407</a>
<a id='n6408' href='#n6408'>6408</a>
<a id='n6409' href='#n6409'>6409</a>
<a id='n6410' href='#n6410'>6410</a>
<a id='n6411' href='#n6411'>6411</a>
<a id='n6412' href='#n6412'>6412</a>
<a id='n6413' href='#n6413'>6413</a>
<a id='n6414' href='#n6414'>6414</a>
<a id='n6415' href='#n6415'>6415</a>
<a id='n6416' href='#n6416'>6416</a>
<a id='n6417' href='#n6417'>6417</a>
<a id='n6418' href='#n6418'>6418</a>
<a id='n6419' href='#n6419'>6419</a>
<a id='n6420' href='#n6420'>6420</a>
<a id='n6421' href='#n6421'>6421</a>
<a id='n6422' href='#n6422'>6422</a>
<a id='n6423' href='#n6423'>6423</a>
<a id='n6424' href='#n6424'>6424</a>
<a id='n6425' href='#n6425'>6425</a>
<a id='n6426' href='#n6426'>6426</a>
<a id='n6427' href='#n6427'>6427</a>
<a id='n6428' href='#n6428'>6428</a>
<a id='n6429' href='#n6429'>6429</a>
<a id='n6430' href='#n6430'>6430</a>
<a id='n6431' href='#n6431'>6431</a>
<a id='n6432' href='#n6432'>6432</a>
<a id='n6433' href='#n6433'>6433</a>
<a id='n6434' href='#n6434'>6434</a>
<a id='n6435' href='#n6435'>6435</a>
<a id='n6436' href='#n6436'>6436</a>
<a id='n6437' href='#n6437'>6437</a>
<a id='n6438' href='#n6438'>6438</a>
<a id='n6439' href='#n6439'>6439</a>
<a id='n6440' href='#n6440'>6440</a>
<a id='n6441' href='#n6441'>6441</a>
<a id='n6442' href='#n6442'>6442</a>
<a id='n6443' href='#n6443'>6443</a>
<a id='n6444' href='#n6444'>6444</a>
<a id='n6445' href='#n6445'>6445</a>
<a id='n6446' href='#n6446'>6446</a>
<a id='n6447' href='#n6447'>6447</a>
<a id='n6448' href='#n6448'>6448</a>
<a id='n6449' href='#n6449'>6449</a>
<a id='n6450' href='#n6450'>6450</a>
<a id='n6451' href='#n6451'>6451</a>
<a id='n6452' href='#n6452'>6452</a>
<a id='n6453' href='#n6453'>6453</a>
<a id='n6454' href='#n6454'>6454</a>
<a id='n6455' href='#n6455'>6455</a>
<a id='n6456' href='#n6456'>6456</a>
<a id='n6457' href='#n6457'>6457</a>
<a id='n6458' href='#n6458'>6458</a>
<a id='n6459' href='#n6459'>6459</a>
<a id='n6460' href='#n6460'>6460</a>
<a id='n6461' href='#n6461'>6461</a>
<a id='n6462' href='#n6462'>6462</a>
<a id='n6463' href='#n6463'>6463</a>
<a id='n6464' href='#n6464'>6464</a>
<a id='n6465' href='#n6465'>6465</a>
<a id='n6466' href='#n6466'>6466</a>
<a id='n6467' href='#n6467'>6467</a>
<a id='n6468' href='#n6468'>6468</a>
<a id='n6469' href='#n6469'>6469</a>
<a id='n6470' href='#n6470'>6470</a>
<a id='n6471' href='#n6471'>6471</a>
<a id='n6472' href='#n6472'>6472</a>
<a id='n6473' href='#n6473'>6473</a>
<a id='n6474' href='#n6474'>6474</a>
<a id='n6475' href='#n6475'>6475</a>
<a id='n6476' href='#n6476'>6476</a>
<a id='n6477' href='#n6477'>6477</a>
<a id='n6478' href='#n6478'>6478</a>
<a id='n6479' href='#n6479'>6479</a>
<a id='n6480' href='#n6480'>6480</a>
<a id='n6481' href='#n6481'>6481</a>
<a id='n6482' href='#n6482'>6482</a>
<a id='n6483' href='#n6483'>6483</a>
<a id='n6484' href='#n6484'>6484</a>
<a id='n6485' href='#n6485'>6485</a>
<a id='n6486' href='#n6486'>6486</a>
<a id='n6487' href='#n6487'>6487</a>
<a id='n6488' href='#n6488'>6488</a>
<a id='n6489' href='#n6489'>6489</a>
<a id='n6490' href='#n6490'>6490</a>
<a id='n6491' href='#n6491'>6491</a>
<a id='n6492' href='#n6492'>6492</a>
<a id='n6493' href='#n6493'>6493</a>
<a id='n6494' href='#n6494'>6494</a>
<a id='n6495' href='#n6495'>6495</a>
<a id='n6496' href='#n6496'>6496</a>
<a id='n6497' href='#n6497'>6497</a>
<a id='n6498' href='#n6498'>6498</a>
<a id='n6499' href='#n6499'>6499</a>
<a id='n6500' href='#n6500'>6500</a>
<a id='n6501' href='#n6501'>6501</a>
<a id='n6502' href='#n6502'>6502</a>
<a id='n6503' href='#n6503'>6503</a>
<a id='n6504' href='#n6504'>6504</a>
<a id='n6505' href='#n6505'>6505</a>
<a id='n6506' href='#n6506'>6506</a>
<a id='n6507' href='#n6507'>6507</a>
<a id='n6508' href='#n6508'>6508</a>
<a id='n6509' href='#n6509'>6509</a>
<a id='n6510' href='#n6510'>6510</a>
<a id='n6511' href='#n6511'>6511</a>
<a id='n6512' href='#n6512'>6512</a>
<a id='n6513' href='#n6513'>6513</a>
<a id='n6514' href='#n6514'>6514</a>
<a id='n6515' href='#n6515'>6515</a>
<a id='n6516' href='#n6516'>6516</a>
<a id='n6517' href='#n6517'>6517</a>
<a id='n6518' href='#n6518'>6518</a>
<a id='n6519' href='#n6519'>6519</a>
<a id='n6520' href='#n6520'>6520</a>
<a id='n6521' href='#n6521'>6521</a>
<a id='n6522' href='#n6522'>6522</a>
<a id='n6523' href='#n6523'>6523</a>
<a id='n6524' href='#n6524'>6524</a>
<a id='n6525' href='#n6525'>6525</a>
<a id='n6526' href='#n6526'>6526</a>
<a id='n6527' href='#n6527'>6527</a>
<a id='n6528' href='#n6528'>6528</a>
<a id='n6529' href='#n6529'>6529</a>
<a id='n6530' href='#n6530'>6530</a>
<a id='n6531' href='#n6531'>6531</a>
<a id='n6532' href='#n6532'>6532</a>
<a id='n6533' href='#n6533'>6533</a>
<a id='n6534' href='#n6534'>6534</a>
<a id='n6535' href='#n6535'>6535</a>
<a id='n6536' href='#n6536'>6536</a>
<a id='n6537' href='#n6537'>6537</a>
<a id='n6538' href='#n6538'>6538</a>
<a id='n6539' href='#n6539'>6539</a>
<a id='n6540' href='#n6540'>6540</a>
<a id='n6541' href='#n6541'>6541</a>
<a id='n6542' href='#n6542'>6542</a>
<a id='n6543' href='#n6543'>6543</a>
<a id='n6544' href='#n6544'>6544</a>
<a id='n6545' href='#n6545'>6545</a>
<a id='n6546' href='#n6546'>6546</a>
<a id='n6547' href='#n6547'>6547</a>
<a id='n6548' href='#n6548'>6548</a>
<a id='n6549' href='#n6549'>6549</a>
<a id='n6550' href='#n6550'>6550</a>
<a id='n6551' href='#n6551'>6551</a>
<a id='n6552' href='#n6552'>6552</a>
<a id='n6553' href='#n6553'>6553</a>
<a id='n6554' href='#n6554'>6554</a>
<a id='n6555' href='#n6555'>6555</a>
<a id='n6556' href='#n6556'>6556</a>
<a id='n6557' href='#n6557'>6557</a>
<a id='n6558' href='#n6558'>6558</a>
<a id='n6559' href='#n6559'>6559</a>
<a id='n6560' href='#n6560'>6560</a>
<a id='n6561' href='#n6561'>6561</a>
<a id='n6562' href='#n6562'>6562</a>
<a id='n6563' href='#n6563'>6563</a>
<a id='n6564' href='#n6564'>6564</a>
<a id='n6565' href='#n6565'>6565</a>
<a id='n6566' href='#n6566'>6566</a>
<a id='n6567' href='#n6567'>6567</a>
<a id='n6568' href='#n6568'>6568</a>
<a id='n6569' href='#n6569'>6569</a>
<a id='n6570' href='#n6570'>6570</a>
<a id='n6571' href='#n6571'>6571</a>
<a id='n6572' href='#n6572'>6572</a>
<a id='n6573' href='#n6573'>6573</a>
<a id='n6574' href='#n6574'>6574</a>
<a id='n6575' href='#n6575'>6575</a>
<a id='n6576' href='#n6576'>6576</a>
<a id='n6577' href='#n6577'>6577</a>
<a id='n6578' href='#n6578'>6578</a>
<a id='n6579' href='#n6579'>6579</a>
<a id='n6580' href='#n6580'>6580</a>
<a id='n6581' href='#n6581'>6581</a>
<a id='n6582' href='#n6582'>6582</a>
<a id='n6583' href='#n6583'>6583</a>
<a id='n6584' href='#n6584'>6584</a>
<a id='n6585' href='#n6585'>6585</a>
<a id='n6586' href='#n6586'>6586</a>
<a id='n6587' href='#n6587'>6587</a>
<a id='n6588' href='#n6588'>6588</a>
<a id='n6589' href='#n6589'>6589</a>
<a id='n6590' href='#n6590'>6590</a>
<a id='n6591' href='#n6591'>6591</a>
<a id='n6592' href='#n6592'>6592</a>
<a id='n6593' href='#n6593'>6593</a>
<a id='n6594' href='#n6594'>6594</a>
<a id='n6595' href='#n6595'>6595</a>
<a id='n6596' href='#n6596'>6596</a>
<a id='n6597' href='#n6597'>6597</a>
<a id='n6598' href='#n6598'>6598</a>
<a id='n6599' href='#n6599'>6599</a>
<a id='n6600' href='#n6600'>6600</a>
<a id='n6601' href='#n6601'>6601</a>
<a id='n6602' href='#n6602'>6602</a>
<a id='n6603' href='#n6603'>6603</a>
<a id='n6604' href='#n6604'>6604</a>
<a id='n6605' href='#n6605'>6605</a>
<a id='n6606' href='#n6606'>6606</a>
<a id='n6607' href='#n6607'>6607</a>
<a id='n6608' href='#n6608'>6608</a>
<a id='n6609' href='#n6609'>6609</a>
<a id='n6610' href='#n6610'>6610</a>
<a id='n6611' href='#n6611'>6611</a>
<a id='n6612' href='#n6612'>6612</a>
<a id='n6613' href='#n6613'>6613</a>
<a id='n6614' href='#n6614'>6614</a>
<a id='n6615' href='#n6615'>6615</a>
<a id='n6616' href='#n6616'>6616</a>
<a id='n6617' href='#n6617'>6617</a>
<a id='n6618' href='#n6618'>6618</a>
<a id='n6619' href='#n6619'>6619</a>
<a id='n6620' href='#n6620'>6620</a>
<a id='n6621' href='#n6621'>6621</a>
<a id='n6622' href='#n6622'>6622</a>
<a id='n6623' href='#n6623'>6623</a>
<a id='n6624' href='#n6624'>6624</a>
<a id='n6625' href='#n6625'>6625</a>
<a id='n6626' href='#n6626'>6626</a>
<a id='n6627' href='#n6627'>6627</a>
<a id='n6628' href='#n6628'>6628</a>
<a id='n6629' href='#n6629'>6629</a>
<a id='n6630' href='#n6630'>6630</a>
<a id='n6631' href='#n6631'>6631</a>
<a id='n6632' href='#n6632'>6632</a>
<a id='n6633' href='#n6633'>6633</a>
<a id='n6634' href='#n6634'>6634</a>
<a id='n6635' href='#n6635'>6635</a>
<a id='n6636' href='#n6636'>6636</a>
<a id='n6637' href='#n6637'>6637</a>
<a id='n6638' href='#n6638'>6638</a>
<a id='n6639' href='#n6639'>6639</a>
<a id='n6640' href='#n6640'>6640</a>
<a id='n6641' href='#n6641'>6641</a>
<a id='n6642' href='#n6642'>6642</a>
<a id='n6643' href='#n6643'>6643</a>
<a id='n6644' href='#n6644'>6644</a>
<a id='n6645' href='#n6645'>6645</a>
<a id='n6646' href='#n6646'>6646</a>
<a id='n6647' href='#n6647'>6647</a>
<a id='n6648' href='#n6648'>6648</a>
<a id='n6649' href='#n6649'>6649</a>
<a id='n6650' href='#n6650'>6650</a>
<a id='n6651' href='#n6651'>6651</a>
<a id='n6652' href='#n6652'>6652</a>
<a id='n6653' href='#n6653'>6653</a>
<a id='n6654' href='#n6654'>6654</a>
<a id='n6655' href='#n6655'>6655</a>
<a id='n6656' href='#n6656'>6656</a>
<a id='n6657' href='#n6657'>6657</a>
<a id='n6658' href='#n6658'>6658</a>
<a id='n6659' href='#n6659'>6659</a>
<a id='n6660' href='#n6660'>6660</a>
<a id='n6661' href='#n6661'>6661</a>
<a id='n6662' href='#n6662'>6662</a>
<a id='n6663' href='#n6663'>6663</a>
<a id='n6664' href='#n6664'>6664</a>
<a id='n6665' href='#n6665'>6665</a>
<a id='n6666' href='#n6666'>6666</a>
<a id='n6667' href='#n6667'>6667</a>
<a id='n6668' href='#n6668'>6668</a>
<a id='n6669' href='#n6669'>6669</a>
<a id='n6670' href='#n6670'>6670</a>
<a id='n6671' href='#n6671'>6671</a>
<a id='n6672' href='#n6672'>6672</a>
<a id='n6673' href='#n6673'>6673</a>
<a id='n6674' href='#n6674'>6674</a>
<a id='n6675' href='#n6675'>6675</a>
<a id='n6676' href='#n6676'>6676</a>
<a id='n6677' href='#n6677'>6677</a>
<a id='n6678' href='#n6678'>6678</a>
<a id='n6679' href='#n6679'>6679</a>
<a id='n6680' href='#n6680'>6680</a>
<a id='n6681' href='#n6681'>6681</a>
<a id='n6682' href='#n6682'>6682</a>
<a id='n6683' href='#n6683'>6683</a>
<a id='n6684' href='#n6684'>6684</a>
<a id='n6685' href='#n6685'>6685</a>
<a id='n6686' href='#n6686'>6686</a>
<a id='n6687' href='#n6687'>6687</a>
<a id='n6688' href='#n6688'>6688</a>
<a id='n6689' href='#n6689'>6689</a>
<a id='n6690' href='#n6690'>6690</a>
<a id='n6691' href='#n6691'>6691</a>
<a id='n6692' href='#n6692'>6692</a>
<a id='n6693' href='#n6693'>6693</a>
<a id='n6694' href='#n6694'>6694</a>
<a id='n6695' href='#n6695'>6695</a>
<a id='n6696' href='#n6696'>6696</a>
<a id='n6697' href='#n6697'>6697</a>
<a id='n6698' href='#n6698'>6698</a>
<a id='n6699' href='#n6699'>6699</a>
<a id='n6700' href='#n6700'>6700</a>
<a id='n6701' href='#n6701'>6701</a>
<a id='n6702' href='#n6702'>6702</a>
<a id='n6703' href='#n6703'>6703</a>
<a id='n6704' href='#n6704'>6704</a>
<a id='n6705' href='#n6705'>6705</a>
<a id='n6706' href='#n6706'>6706</a>
<a id='n6707' href='#n6707'>6707</a>
<a id='n6708' href='#n6708'>6708</a>
<a id='n6709' href='#n6709'>6709</a>
<a id='n6710' href='#n6710'>6710</a>
<a id='n6711' href='#n6711'>6711</a>
<a id='n6712' href='#n6712'>6712</a>
<a id='n6713' href='#n6713'>6713</a>
<a id='n6714' href='#n6714'>6714</a>
<a id='n6715' href='#n6715'>6715</a>
<a id='n6716' href='#n6716'>6716</a>
<a id='n6717' href='#n6717'>6717</a>
<a id='n6718' href='#n6718'>6718</a>
<a id='n6719' href='#n6719'>6719</a>
<a id='n6720' href='#n6720'>6720</a>
<a id='n6721' href='#n6721'>6721</a>
<a id='n6722' href='#n6722'>6722</a>
<a id='n6723' href='#n6723'>6723</a>
<a id='n6724' href='#n6724'>6724</a>
<a id='n6725' href='#n6725'>6725</a>
<a id='n6726' href='#n6726'>6726</a>
<a id='n6727' href='#n6727'>6727</a>
<a id='n6728' href='#n6728'>6728</a>
<a id='n6729' href='#n6729'>6729</a>
<a id='n6730' href='#n6730'>6730</a>
<a id='n6731' href='#n6731'>6731</a>
<a id='n6732' href='#n6732'>6732</a>
<a id='n6733' href='#n6733'>6733</a>
<a id='n6734' href='#n6734'>6734</a>
<a id='n6735' href='#n6735'>6735</a>
<a id='n6736' href='#n6736'>6736</a>
<a id='n6737' href='#n6737'>6737</a>
<a id='n6738' href='#n6738'>6738</a>
<a id='n6739' href='#n6739'>6739</a>
<a id='n6740' href='#n6740'>6740</a>
<a id='n6741' href='#n6741'>6741</a>
<a id='n6742' href='#n6742'>6742</a>
<a id='n6743' href='#n6743'>6743</a>
<a id='n6744' href='#n6744'>6744</a>
<a id='n6745' href='#n6745'>6745</a>
<a id='n6746' href='#n6746'>6746</a>
<a id='n6747' href='#n6747'>6747</a>
<a id='n6748' href='#n6748'>6748</a>
<a id='n6749' href='#n6749'>6749</a>
<a id='n6750' href='#n6750'>6750</a>
<a id='n6751' href='#n6751'>6751</a>
<a id='n6752' href='#n6752'>6752</a>
<a id='n6753' href='#n6753'>6753</a>
<a id='n6754' href='#n6754'>6754</a>
<a id='n6755' href='#n6755'>6755</a>
<a id='n6756' href='#n6756'>6756</a>
<a id='n6757' href='#n6757'>6757</a>
<a id='n6758' href='#n6758'>6758</a>
<a id='n6759' href='#n6759'>6759</a>
<a id='n6760' href='#n6760'>6760</a>
<a id='n6761' href='#n6761'>6761</a>
<a id='n6762' href='#n6762'>6762</a>
<a id='n6763' href='#n6763'>6763</a>
<a id='n6764' href='#n6764'>6764</a>
<a id='n6765' href='#n6765'>6765</a>
<a id='n6766' href='#n6766'>6766</a>
<a id='n6767' href='#n6767'>6767</a>
<a id='n6768' href='#n6768'>6768</a>
<a id='n6769' href='#n6769'>6769</a>
<a id='n6770' href='#n6770'>6770</a>
<a id='n6771' href='#n6771'>6771</a>
<a id='n6772' href='#n6772'>6772</a>
<a id='n6773' href='#n6773'>6773</a>
<a id='n6774' href='#n6774'>6774</a>
<a id='n6775' href='#n6775'>6775</a>
<a id='n6776' href='#n6776'>6776</a>
<a id='n6777' href='#n6777'>6777</a>
<a id='n6778' href='#n6778'>6778</a>
<a id='n6779' href='#n6779'>6779</a>
<a id='n6780' href='#n6780'>6780</a>
<a id='n6781' href='#n6781'>6781</a>
<a id='n6782' href='#n6782'>6782</a>
<a id='n6783' href='#n6783'>6783</a>
<a id='n6784' href='#n6784'>6784</a>
<a id='n6785' href='#n6785'>6785</a>
<a id='n6786' href='#n6786'>6786</a>
<a id='n6787' href='#n6787'>6787</a>
<a id='n6788' href='#n6788'>6788</a>
<a id='n6789' href='#n6789'>6789</a>
<a id='n6790' href='#n6790'>6790</a>
<a id='n6791' href='#n6791'>6791</a>
<a id='n6792' href='#n6792'>6792</a>
<a id='n6793' href='#n6793'>6793</a>
<a id='n6794' href='#n6794'>6794</a>
<a id='n6795' href='#n6795'>6795</a>
<a id='n6796' href='#n6796'>6796</a>
<a id='n6797' href='#n6797'>6797</a>
<a id='n6798' href='#n6798'>6798</a>
<a id='n6799' href='#n6799'>6799</a>
<a id='n6800' href='#n6800'>6800</a>
<a id='n6801' href='#n6801'>6801</a>
<a id='n6802' href='#n6802'>6802</a>
<a id='n6803' href='#n6803'>6803</a>
<a id='n6804' href='#n6804'>6804</a>
<a id='n6805' href='#n6805'>6805</a>
<a id='n6806' href='#n6806'>6806</a>
<a id='n6807' href='#n6807'>6807</a>
<a id='n6808' href='#n6808'>6808</a>
<a id='n6809' href='#n6809'>6809</a>
<a id='n6810' href='#n6810'>6810</a>
<a id='n6811' href='#n6811'>6811</a>
<a id='n6812' href='#n6812'>6812</a>
<a id='n6813' href='#n6813'>6813</a>
<a id='n6814' href='#n6814'>6814</a>
<a id='n6815' href='#n6815'>6815</a>
<a id='n6816' href='#n6816'>6816</a>
<a id='n6817' href='#n6817'>6817</a>
<a id='n6818' href='#n6818'>6818</a>
<a id='n6819' href='#n6819'>6819</a>
<a id='n6820' href='#n6820'>6820</a>
<a id='n6821' href='#n6821'>6821</a>
<a id='n6822' href='#n6822'>6822</a>
<a id='n6823' href='#n6823'>6823</a>
<a id='n6824' href='#n6824'>6824</a>
<a id='n6825' href='#n6825'>6825</a>
<a id='n6826' href='#n6826'>6826</a>
<a id='n6827' href='#n6827'>6827</a>
<a id='n6828' href='#n6828'>6828</a>
<a id='n6829' href='#n6829'>6829</a>
<a id='n6830' href='#n6830'>6830</a>
<a id='n6831' href='#n6831'>6831</a>
<a id='n6832' href='#n6832'>6832</a>
<a id='n6833' href='#n6833'>6833</a>
<a id='n6834' href='#n6834'>6834</a>
<a id='n6835' href='#n6835'>6835</a>
<a id='n6836' href='#n6836'>6836</a>
<a id='n6837' href='#n6837'>6837</a>
<a id='n6838' href='#n6838'>6838</a>
<a id='n6839' href='#n6839'>6839</a>
<a id='n6840' href='#n6840'>6840</a>
<a id='n6841' href='#n6841'>6841</a>
<a id='n6842' href='#n6842'>6842</a>
<a id='n6843' href='#n6843'>6843</a>
<a id='n6844' href='#n6844'>6844</a>
<a id='n6845' href='#n6845'>6845</a>
<a id='n6846' href='#n6846'>6846</a>
<a id='n6847' href='#n6847'>6847</a>
<a id='n6848' href='#n6848'>6848</a>
<a id='n6849' href='#n6849'>6849</a>
<a id='n6850' href='#n6850'>6850</a>
<a id='n6851' href='#n6851'>6851</a>
<a id='n6852' href='#n6852'>6852</a>
<a id='n6853' href='#n6853'>6853</a>
<a id='n6854' href='#n6854'>6854</a>
<a id='n6855' href='#n6855'>6855</a>
<a id='n6856' href='#n6856'>6856</a>
<a id='n6857' href='#n6857'>6857</a>
<a id='n6858' href='#n6858'>6858</a>
<a id='n6859' href='#n6859'>6859</a>
<a id='n6860' href='#n6860'>6860</a>
<a id='n6861' href='#n6861'>6861</a>
<a id='n6862' href='#n6862'>6862</a>
<a id='n6863' href='#n6863'>6863</a>
<a id='n6864' href='#n6864'>6864</a>
<a id='n6865' href='#n6865'>6865</a>
<a id='n6866' href='#n6866'>6866</a>
<a id='n6867' href='#n6867'>6867</a>
<a id='n6868' href='#n6868'>6868</a>
<a id='n6869' href='#n6869'>6869</a>
<a id='n6870' href='#n6870'>6870</a>
<a id='n6871' href='#n6871'>6871</a>
<a id='n6872' href='#n6872'>6872</a>
<a id='n6873' href='#n6873'>6873</a>
<a id='n6874' href='#n6874'>6874</a>
<a id='n6875' href='#n6875'>6875</a>
<a id='n6876' href='#n6876'>6876</a>
<a id='n6877' href='#n6877'>6877</a>
<a id='n6878' href='#n6878'>6878</a>
<a id='n6879' href='#n6879'>6879</a>
<a id='n6880' href='#n6880'>6880</a>
<a id='n6881' href='#n6881'>6881</a>
<a id='n6882' href='#n6882'>6882</a>
<a id='n6883' href='#n6883'>6883</a>
<a id='n6884' href='#n6884'>6884</a>
<a id='n6885' href='#n6885'>6885</a>
<a id='n6886' href='#n6886'>6886</a>
<a id='n6887' href='#n6887'>6887</a>
<a id='n6888' href='#n6888'>6888</a>
<a id='n6889' href='#n6889'>6889</a>
<a id='n6890' href='#n6890'>6890</a>
<a id='n6891' href='#n6891'>6891</a>
<a id='n6892' href='#n6892'>6892</a>
<a id='n6893' href='#n6893'>6893</a>
<a id='n6894' href='#n6894'>6894</a>
<a id='n6895' href='#n6895'>6895</a>
<a id='n6896' href='#n6896'>6896</a>
<a id='n6897' href='#n6897'>6897</a>
<a id='n6898' href='#n6898'>6898</a>
<a id='n6899' href='#n6899'>6899</a>
<a id='n6900' href='#n6900'>6900</a>
<a id='n6901' href='#n6901'>6901</a>
<a id='n6902' href='#n6902'>6902</a>
<a id='n6903' href='#n6903'>6903</a>
<a id='n6904' href='#n6904'>6904</a>
<a id='n6905' href='#n6905'>6905</a>
<a id='n6906' href='#n6906'>6906</a>
<a id='n6907' href='#n6907'>6907</a>
<a id='n6908' href='#n6908'>6908</a>
<a id='n6909' href='#n6909'>6909</a>
<a id='n6910' href='#n6910'>6910</a>
<a id='n6911' href='#n6911'>6911</a>
<a id='n6912' href='#n6912'>6912</a>
<a id='n6913' href='#n6913'>6913</a>
<a id='n6914' href='#n6914'>6914</a>
<a id='n6915' href='#n6915'>6915</a>
<a id='n6916' href='#n6916'>6916</a>
<a id='n6917' href='#n6917'>6917</a>
<a id='n6918' href='#n6918'>6918</a>
<a id='n6919' href='#n6919'>6919</a>
<a id='n6920' href='#n6920'>6920</a>
<a id='n6921' href='#n6921'>6921</a>
<a id='n6922' href='#n6922'>6922</a>
<a id='n6923' href='#n6923'>6923</a>
<a id='n6924' href='#n6924'>6924</a>
<a id='n6925' href='#n6925'>6925</a>
<a id='n6926' href='#n6926'>6926</a>
<a id='n6927' href='#n6927'>6927</a>
<a id='n6928' href='#n6928'>6928</a>
<a id='n6929' href='#n6929'>6929</a>
<a id='n6930' href='#n6930'>6930</a>
<a id='n6931' href='#n6931'>6931</a>
<a id='n6932' href='#n6932'>6932</a>
<a id='n6933' href='#n6933'>6933</a>
<a id='n6934' href='#n6934'>6934</a>
<a id='n6935' href='#n6935'>6935</a>
<a id='n6936' href='#n6936'>6936</a>
<a id='n6937' href='#n6937'>6937</a>
<a id='n6938' href='#n6938'>6938</a>
<a id='n6939' href='#n6939'>6939</a>
<a id='n6940' href='#n6940'>6940</a>
<a id='n6941' href='#n6941'>6941</a>
<a id='n6942' href='#n6942'>6942</a>
<a id='n6943' href='#n6943'>6943</a>
<a id='n6944' href='#n6944'>6944</a>
<a id='n6945' href='#n6945'>6945</a>
<a id='n6946' href='#n6946'>6946</a>
<a id='n6947' href='#n6947'>6947</a>
<a id='n6948' href='#n6948'>6948</a>
<a id='n6949' href='#n6949'>6949</a>
<a id='n6950' href='#n6950'>6950</a>
<a id='n6951' href='#n6951'>6951</a>
<a id='n6952' href='#n6952'>6952</a>
<a id='n6953' href='#n6953'>6953</a>
<a id='n6954' href='#n6954'>6954</a>
<a id='n6955' href='#n6955'>6955</a>
<a id='n6956' href='#n6956'>6956</a>
<a id='n6957' href='#n6957'>6957</a>
<a id='n6958' href='#n6958'>6958</a>
<a id='n6959' href='#n6959'>6959</a>
<a id='n6960' href='#n6960'>6960</a>
<a id='n6961' href='#n6961'>6961</a>
<a id='n6962' href='#n6962'>6962</a>
<a id='n6963' href='#n6963'>6963</a>
<a id='n6964' href='#n6964'>6964</a>
<a id='n6965' href='#n6965'>6965</a>
<a id='n6966' href='#n6966'>6966</a>
<a id='n6967' href='#n6967'>6967</a>
<a id='n6968' href='#n6968'>6968</a>
<a id='n6969' href='#n6969'>6969</a>
<a id='n6970' href='#n6970'>6970</a>
<a id='n6971' href='#n6971'>6971</a>
<a id='n6972' href='#n6972'>6972</a>
<a id='n6973' href='#n6973'>6973</a>
<a id='n6974' href='#n6974'>6974</a>
<a id='n6975' href='#n6975'>6975</a>
<a id='n6976' href='#n6976'>6976</a>
<a id='n6977' href='#n6977'>6977</a>
<a id='n6978' href='#n6978'>6978</a>
<a id='n6979' href='#n6979'>6979</a>
<a id='n6980' href='#n6980'>6980</a>
<a id='n6981' href='#n6981'>6981</a>
<a id='n6982' href='#n6982'>6982</a>
<a id='n6983' href='#n6983'>6983</a>
<a id='n6984' href='#n6984'>6984</a>
<a id='n6985' href='#n6985'>6985</a>
<a id='n6986' href='#n6986'>6986</a>
<a id='n6987' href='#n6987'>6987</a>
<a id='n6988' href='#n6988'>6988</a>
<a id='n6989' href='#n6989'>6989</a>
<a id='n6990' href='#n6990'>6990</a>
<a id='n6991' href='#n6991'>6991</a>
<a id='n6992' href='#n6992'>6992</a>
<a id='n6993' href='#n6993'>6993</a>
<a id='n6994' href='#n6994'>6994</a>
<a id='n6995' href='#n6995'>6995</a>
<a id='n6996' href='#n6996'>6996</a>
<a id='n6997' href='#n6997'>6997</a>
<a id='n6998' href='#n6998'>6998</a>
<a id='n6999' href='#n6999'>6999</a>
<a id='n7000' href='#n7000'>7000</a>
<a id='n7001' href='#n7001'>7001</a>
<a id='n7002' href='#n7002'>7002</a>
<a id='n7003' href='#n7003'>7003</a>
<a id='n7004' href='#n7004'>7004</a>
<a id='n7005' href='#n7005'>7005</a>
<a id='n7006' href='#n7006'>7006</a>
<a id='n7007' href='#n7007'>7007</a>
<a id='n7008' href='#n7008'>7008</a>
<a id='n7009' href='#n7009'>7009</a>
<a id='n7010' href='#n7010'>7010</a>
<a id='n7011' href='#n7011'>7011</a>
<a id='n7012' href='#n7012'>7012</a>
<a id='n7013' href='#n7013'>7013</a>
<a id='n7014' href='#n7014'>7014</a>
<a id='n7015' href='#n7015'>7015</a>
<a id='n7016' href='#n7016'>7016</a>
<a id='n7017' href='#n7017'>7017</a>
<a id='n7018' href='#n7018'>7018</a>
<a id='n7019' href='#n7019'>7019</a>
<a id='n7020' href='#n7020'>7020</a>
<a id='n7021' href='#n7021'>7021</a>
<a id='n7022' href='#n7022'>7022</a>
<a id='n7023' href='#n7023'>7023</a>
<a id='n7024' href='#n7024'>7024</a>
<a id='n7025' href='#n7025'>7025</a>
<a id='n7026' href='#n7026'>7026</a>
<a id='n7027' href='#n7027'>7027</a>
<a id='n7028' href='#n7028'>7028</a>
<a id='n7029' href='#n7029'>7029</a>
<a id='n7030' href='#n7030'>7030</a>
<a id='n7031' href='#n7031'>7031</a>
<a id='n7032' href='#n7032'>7032</a>
<a id='n7033' href='#n7033'>7033</a>
<a id='n7034' href='#n7034'>7034</a>
<a id='n7035' href='#n7035'>7035</a>
<a id='n7036' href='#n7036'>7036</a>
<a id='n7037' href='#n7037'>7037</a>
<a id='n7038' href='#n7038'>7038</a>
<a id='n7039' href='#n7039'>7039</a>
<a id='n7040' href='#n7040'>7040</a>
<a id='n7041' href='#n7041'>7041</a>
<a id='n7042' href='#n7042'>7042</a>
<a id='n7043' href='#n7043'>7043</a>
<a id='n7044' href='#n7044'>7044</a>
<a id='n7045' href='#n7045'>7045</a>
<a id='n7046' href='#n7046'>7046</a>
<a id='n7047' href='#n7047'>7047</a>
<a id='n7048' href='#n7048'>7048</a>
<a id='n7049' href='#n7049'>7049</a>
<a id='n7050' href='#n7050'>7050</a>
<a id='n7051' href='#n7051'>7051</a>
<a id='n7052' href='#n7052'>7052</a>
<a id='n7053' href='#n7053'>7053</a>
<a id='n7054' href='#n7054'>7054</a>
<a id='n7055' href='#n7055'>7055</a>
<a id='n7056' href='#n7056'>7056</a>
<a id='n7057' href='#n7057'>7057</a>
<a id='n7058' href='#n7058'>7058</a>
<a id='n7059' href='#n7059'>7059</a>
<a id='n7060' href='#n7060'>7060</a>
<a id='n7061' href='#n7061'>7061</a>
<a id='n7062' href='#n7062'>7062</a>
<a id='n7063' href='#n7063'>7063</a>
<a id='n7064' href='#n7064'>7064</a>
<a id='n7065' href='#n7065'>7065</a>
<a id='n7066' href='#n7066'>7066</a>
<a id='n7067' href='#n7067'>7067</a>
<a id='n7068' href='#n7068'>7068</a>
<a id='n7069' href='#n7069'>7069</a>
<a id='n7070' href='#n7070'>7070</a>
<a id='n7071' href='#n7071'>7071</a>
<a id='n7072' href='#n7072'>7072</a>
<a id='n7073' href='#n7073'>7073</a>
<a id='n7074' href='#n7074'>7074</a>
<a id='n7075' href='#n7075'>7075</a>
<a id='n7076' href='#n7076'>7076</a>
<a id='n7077' href='#n7077'>7077</a>
<a id='n7078' href='#n7078'>7078</a>
<a id='n7079' href='#n7079'>7079</a>
<a id='n7080' href='#n7080'>7080</a>
<a id='n7081' href='#n7081'>7081</a>
<a id='n7082' href='#n7082'>7082</a>
<a id='n7083' href='#n7083'>7083</a>
<a id='n7084' href='#n7084'>7084</a>
<a id='n7085' href='#n7085'>7085</a>
<a id='n7086' href='#n7086'>7086</a>
<a id='n7087' href='#n7087'>7087</a>
<a id='n7088' href='#n7088'>7088</a>
<a id='n7089' href='#n7089'>7089</a>
<a id='n7090' href='#n7090'>7090</a>
<a id='n7091' href='#n7091'>7091</a>
<a id='n7092' href='#n7092'>7092</a>
<a id='n7093' href='#n7093'>7093</a>
<a id='n7094' href='#n7094'>7094</a>
<a id='n7095' href='#n7095'>7095</a>
<a id='n7096' href='#n7096'>7096</a>
<a id='n7097' href='#n7097'>7097</a>
<a id='n7098' href='#n7098'>7098</a>
<a id='n7099' href='#n7099'>7099</a>
<a id='n7100' href='#n7100'>7100</a>
<a id='n7101' href='#n7101'>7101</a>
<a id='n7102' href='#n7102'>7102</a>
<a id='n7103' href='#n7103'>7103</a>
<a id='n7104' href='#n7104'>7104</a>
<a id='n7105' href='#n7105'>7105</a>
<a id='n7106' href='#n7106'>7106</a>
<a id='n7107' href='#n7107'>7107</a>
<a id='n7108' href='#n7108'>7108</a>
<a id='n7109' href='#n7109'>7109</a>
<a id='n7110' href='#n7110'>7110</a>
<a id='n7111' href='#n7111'>7111</a>
<a id='n7112' href='#n7112'>7112</a>
<a id='n7113' href='#n7113'>7113</a>
<a id='n7114' href='#n7114'>7114</a>
<a id='n7115' href='#n7115'>7115</a>
<a id='n7116' href='#n7116'>7116</a>
<a id='n7117' href='#n7117'>7117</a>
<a id='n7118' href='#n7118'>7118</a>
<a id='n7119' href='#n7119'>7119</a>
<a id='n7120' href='#n7120'>7120</a>
<a id='n7121' href='#n7121'>7121</a>
<a id='n7122' href='#n7122'>7122</a>
<a id='n7123' href='#n7123'>7123</a>
<a id='n7124' href='#n7124'>7124</a>
<a id='n7125' href='#n7125'>7125</a>
<a id='n7126' href='#n7126'>7126</a>
<a id='n7127' href='#n7127'>7127</a>
<a id='n7128' href='#n7128'>7128</a>
<a id='n7129' href='#n7129'>7129</a>
<a id='n7130' href='#n7130'>7130</a>
<a id='n7131' href='#n7131'>7131</a>
<a id='n7132' href='#n7132'>7132</a>
<a id='n7133' href='#n7133'>7133</a>
<a id='n7134' href='#n7134'>7134</a>
<a id='n7135' href='#n7135'>7135</a>
<a id='n7136' href='#n7136'>7136</a>
<a id='n7137' href='#n7137'>7137</a>
<a id='n7138' href='#n7138'>7138</a>
<a id='n7139' href='#n7139'>7139</a>
<a id='n7140' href='#n7140'>7140</a>
<a id='n7141' href='#n7141'>7141</a>
<a id='n7142' href='#n7142'>7142</a>
<a id='n7143' href='#n7143'>7143</a>
<a id='n7144' href='#n7144'>7144</a>
<a id='n7145' href='#n7145'>7145</a>
<a id='n7146' href='#n7146'>7146</a>
<a id='n7147' href='#n7147'>7147</a>
<a id='n7148' href='#n7148'>7148</a>
<a id='n7149' href='#n7149'>7149</a>
<a id='n7150' href='#n7150'>7150</a>
<a id='n7151' href='#n7151'>7151</a>
<a id='n7152' href='#n7152'>7152</a>
<a id='n7153' href='#n7153'>7153</a>
<a id='n7154' href='#n7154'>7154</a>
<a id='n7155' href='#n7155'>7155</a>
<a id='n7156' href='#n7156'>7156</a>
<a id='n7157' href='#n7157'>7157</a>
<a id='n7158' href='#n7158'>7158</a>
<a id='n7159' href='#n7159'>7159</a>
<a id='n7160' href='#n7160'>7160</a>
<a id='n7161' href='#n7161'>7161</a>
<a id='n7162' href='#n7162'>7162</a>
<a id='n7163' href='#n7163'>7163</a>
<a id='n7164' href='#n7164'>7164</a>
<a id='n7165' href='#n7165'>7165</a>
<a id='n7166' href='#n7166'>7166</a>
<a id='n7167' href='#n7167'>7167</a>
<a id='n7168' href='#n7168'>7168</a>
<a id='n7169' href='#n7169'>7169</a>
<a id='n7170' href='#n7170'>7170</a>
<a id='n7171' href='#n7171'>7171</a>
<a id='n7172' href='#n7172'>7172</a>
<a id='n7173' href='#n7173'>7173</a>
<a id='n7174' href='#n7174'>7174</a>
<a id='n7175' href='#n7175'>7175</a>
<a id='n7176' href='#n7176'>7176</a>
<a id='n7177' href='#n7177'>7177</a>
<a id='n7178' href='#n7178'>7178</a>
<a id='n7179' href='#n7179'>7179</a>
<a id='n7180' href='#n7180'>7180</a>
<a id='n7181' href='#n7181'>7181</a>
<a id='n7182' href='#n7182'>7182</a>
<a id='n7183' href='#n7183'>7183</a>
<a id='n7184' href='#n7184'>7184</a>
<a id='n7185' href='#n7185'>7185</a>
<a id='n7186' href='#n7186'>7186</a>
<a id='n7187' href='#n7187'>7187</a>
<a id='n7188' href='#n7188'>7188</a>
<a id='n7189' href='#n7189'>7189</a>
<a id='n7190' href='#n7190'>7190</a>
<a id='n7191' href='#n7191'>7191</a>
<a id='n7192' href='#n7192'>7192</a>
<a id='n7193' href='#n7193'>7193</a>
<a id='n7194' href='#n7194'>7194</a>
<a id='n7195' href='#n7195'>7195</a>
<a id='n7196' href='#n7196'>7196</a>
<a id='n7197' href='#n7197'>7197</a>
<a id='n7198' href='#n7198'>7198</a>
<a id='n7199' href='#n7199'>7199</a>
<a id='n7200' href='#n7200'>7200</a>
<a id='n7201' href='#n7201'>7201</a>
<a id='n7202' href='#n7202'>7202</a>
<a id='n7203' href='#n7203'>7203</a>
<a id='n7204' href='#n7204'>7204</a>
<a id='n7205' href='#n7205'>7205</a>
<a id='n7206' href='#n7206'>7206</a>
<a id='n7207' href='#n7207'>7207</a>
<a id='n7208' href='#n7208'>7208</a>
<a id='n7209' href='#n7209'>7209</a>
<a id='n7210' href='#n7210'>7210</a>
<a id='n7211' href='#n7211'>7211</a>
<a id='n7212' href='#n7212'>7212</a>
<a id='n7213' href='#n7213'>7213</a>
<a id='n7214' href='#n7214'>7214</a>
<a id='n7215' href='#n7215'>7215</a>
<a id='n7216' href='#n7216'>7216</a>
<a id='n7217' href='#n7217'>7217</a>
<a id='n7218' href='#n7218'>7218</a>
<a id='n7219' href='#n7219'>7219</a>
<a id='n7220' href='#n7220'>7220</a>
<a id='n7221' href='#n7221'>7221</a>
<a id='n7222' href='#n7222'>7222</a>
<a id='n7223' href='#n7223'>7223</a>
<a id='n7224' href='#n7224'>7224</a>
<a id='n7225' href='#n7225'>7225</a>
<a id='n7226' href='#n7226'>7226</a>
<a id='n7227' href='#n7227'>7227</a>
<a id='n7228' href='#n7228'>7228</a>
<a id='n7229' href='#n7229'>7229</a>
<a id='n7230' href='#n7230'>7230</a>
<a id='n7231' href='#n7231'>7231</a>
<a id='n7232' href='#n7232'>7232</a>
<a id='n7233' href='#n7233'>7233</a>
<a id='n7234' href='#n7234'>7234</a>
<a id='n7235' href='#n7235'>7235</a>
<a id='n7236' href='#n7236'>7236</a>
<a id='n7237' href='#n7237'>7237</a>
<a id='n7238' href='#n7238'>7238</a>
<a id='n7239' href='#n7239'>7239</a>
<a id='n7240' href='#n7240'>7240</a>
<a id='n7241' href='#n7241'>7241</a>
<a id='n7242' href='#n7242'>7242</a>
<a id='n7243' href='#n7243'>7243</a>
<a id='n7244' href='#n7244'>7244</a>
<a id='n7245' href='#n7245'>7245</a>
<a id='n7246' href='#n7246'>7246</a>
<a id='n7247' href='#n7247'>7247</a>
<a id='n7248' href='#n7248'>7248</a>
<a id='n7249' href='#n7249'>7249</a>
<a id='n7250' href='#n7250'>7250</a>
<a id='n7251' href='#n7251'>7251</a>
<a id='n7252' href='#n7252'>7252</a>
<a id='n7253' href='#n7253'>7253</a>
<a id='n7254' href='#n7254'>7254</a>
<a id='n7255' href='#n7255'>7255</a>
<a id='n7256' href='#n7256'>7256</a>
<a id='n7257' href='#n7257'>7257</a>
<a id='n7258' href='#n7258'>7258</a>
<a id='n7259' href='#n7259'>7259</a>
<a id='n7260' href='#n7260'>7260</a>
<a id='n7261' href='#n7261'>7261</a>
<a id='n7262' href='#n7262'>7262</a>
<a id='n7263' href='#n7263'>7263</a>
<a id='n7264' href='#n7264'>7264</a>
<a id='n7265' href='#n7265'>7265</a>
<a id='n7266' href='#n7266'>7266</a>
<a id='n7267' href='#n7267'>7267</a>
<a id='n7268' href='#n7268'>7268</a>
<a id='n7269' href='#n7269'>7269</a>
<a id='n7270' href='#n7270'>7270</a>
<a id='n7271' href='#n7271'>7271</a>
<a id='n7272' href='#n7272'>7272</a>
<a id='n7273' href='#n7273'>7273</a>
<a id='n7274' href='#n7274'>7274</a>
<a id='n7275' href='#n7275'>7275</a>
<a id='n7276' href='#n7276'>7276</a>
<a id='n7277' href='#n7277'>7277</a>
<a id='n7278' href='#n7278'>7278</a>
<a id='n7279' href='#n7279'>7279</a>
<a id='n7280' href='#n7280'>7280</a>
<a id='n7281' href='#n7281'>7281</a>
<a id='n7282' href='#n7282'>7282</a>
<a id='n7283' href='#n7283'>7283</a>
<a id='n7284' href='#n7284'>7284</a>
<a id='n7285' href='#n7285'>7285</a>
<a id='n7286' href='#n7286'>7286</a>
<a id='n7287' href='#n7287'>7287</a>
<a id='n7288' href='#n7288'>7288</a>
<a id='n7289' href='#n7289'>7289</a>
<a id='n7290' href='#n7290'>7290</a>
<a id='n7291' href='#n7291'>7291</a>
<a id='n7292' href='#n7292'>7292</a>
<a id='n7293' href='#n7293'>7293</a>
<a id='n7294' href='#n7294'>7294</a>
<a id='n7295' href='#n7295'>7295</a>
<a id='n7296' href='#n7296'>7296</a>
<a id='n7297' href='#n7297'>7297</a>
<a id='n7298' href='#n7298'>7298</a>
<a id='n7299' href='#n7299'>7299</a>
<a id='n7300' href='#n7300'>7300</a>
<a id='n7301' href='#n7301'>7301</a>
<a id='n7302' href='#n7302'>7302</a>
<a id='n7303' href='#n7303'>7303</a>
<a id='n7304' href='#n7304'>7304</a>
<a id='n7305' href='#n7305'>7305</a>
<a id='n7306' href='#n7306'>7306</a>
<a id='n7307' href='#n7307'>7307</a>
<a id='n7308' href='#n7308'>7308</a>
<a id='n7309' href='#n7309'>7309</a>
<a id='n7310' href='#n7310'>7310</a>
<a id='n7311' href='#n7311'>7311</a>
<a id='n7312' href='#n7312'>7312</a>
<a id='n7313' href='#n7313'>7313</a>
<a id='n7314' href='#n7314'>7314</a>
<a id='n7315' href='#n7315'>7315</a>
<a id='n7316' href='#n7316'>7316</a>
<a id='n7317' href='#n7317'>7317</a>
<a id='n7318' href='#n7318'>7318</a>
<a id='n7319' href='#n7319'>7319</a>
<a id='n7320' href='#n7320'>7320</a>
<a id='n7321' href='#n7321'>7321</a>
<a id='n7322' href='#n7322'>7322</a>
<a id='n7323' href='#n7323'>7323</a>
<a id='n7324' href='#n7324'>7324</a>
<a id='n7325' href='#n7325'>7325</a>
<a id='n7326' href='#n7326'>7326</a>
<a id='n7327' href='#n7327'>7327</a>
<a id='n7328' href='#n7328'>7328</a>
<a id='n7329' href='#n7329'>7329</a>
<a id='n7330' href='#n7330'>7330</a>
<a id='n7331' href='#n7331'>7331</a>
<a id='n7332' href='#n7332'>7332</a>
<a id='n7333' href='#n7333'>7333</a>
<a id='n7334' href='#n7334'>7334</a>
<a id='n7335' href='#n7335'>7335</a>
<a id='n7336' href='#n7336'>7336</a>
<a id='n7337' href='#n7337'>7337</a>
<a id='n7338' href='#n7338'>7338</a>
<a id='n7339' href='#n7339'>7339</a>
<a id='n7340' href='#n7340'>7340</a>
<a id='n7341' href='#n7341'>7341</a>
<a id='n7342' href='#n7342'>7342</a>
<a id='n7343' href='#n7343'>7343</a>
<a id='n7344' href='#n7344'>7344</a>
<a id='n7345' href='#n7345'>7345</a>
<a id='n7346' href='#n7346'>7346</a>
<a id='n7347' href='#n7347'>7347</a>
<a id='n7348' href='#n7348'>7348</a>
<a id='n7349' href='#n7349'>7349</a>
<a id='n7350' href='#n7350'>7350</a>
<a id='n7351' href='#n7351'>7351</a>
<a id='n7352' href='#n7352'>7352</a>
<a id='n7353' href='#n7353'>7353</a>
<a id='n7354' href='#n7354'>7354</a>
<a id='n7355' href='#n7355'>7355</a>
<a id='n7356' href='#n7356'>7356</a>
<a id='n7357' href='#n7357'>7357</a>
<a id='n7358' href='#n7358'>7358</a>
<a id='n7359' href='#n7359'>7359</a>
<a id='n7360' href='#n7360'>7360</a>
<a id='n7361' href='#n7361'>7361</a>
<a id='n7362' href='#n7362'>7362</a>
<a id='n7363' href='#n7363'>7363</a>
<a id='n7364' href='#n7364'>7364</a>
<a id='n7365' href='#n7365'>7365</a>
<a id='n7366' href='#n7366'>7366</a>
<a id='n7367' href='#n7367'>7367</a>
<a id='n7368' href='#n7368'>7368</a>
<a id='n7369' href='#n7369'>7369</a>
<a id='n7370' href='#n7370'>7370</a>
<a id='n7371' href='#n7371'>7371</a>
<a id='n7372' href='#n7372'>7372</a>
<a id='n7373' href='#n7373'>7373</a>
<a id='n7374' href='#n7374'>7374</a>
<a id='n7375' href='#n7375'>7375</a>
<a id='n7376' href='#n7376'>7376</a>
<a id='n7377' href='#n7377'>7377</a>
<a id='n7378' href='#n7378'>7378</a>
<a id='n7379' href='#n7379'>7379</a>
<a id='n7380' href='#n7380'>7380</a>
<a id='n7381' href='#n7381'>7381</a>
<a id='n7382' href='#n7382'>7382</a>
<a id='n7383' href='#n7383'>7383</a>
<a id='n7384' href='#n7384'>7384</a>
<a id='n7385' href='#n7385'>7385</a>
<a id='n7386' href='#n7386'>7386</a>
<a id='n7387' href='#n7387'>7387</a>
<a id='n7388' href='#n7388'>7388</a>
<a id='n7389' href='#n7389'>7389</a>
<a id='n7390' href='#n7390'>7390</a>
<a id='n7391' href='#n7391'>7391</a>
<a id='n7392' href='#n7392'>7392</a>
<a id='n7393' href='#n7393'>7393</a>
<a id='n7394' href='#n7394'>7394</a>
<a id='n7395' href='#n7395'>7395</a>
<a id='n7396' href='#n7396'>7396</a>
<a id='n7397' href='#n7397'>7397</a>
<a id='n7398' href='#n7398'>7398</a>
<a id='n7399' href='#n7399'>7399</a>
<a id='n7400' href='#n7400'>7400</a>
<a id='n7401' href='#n7401'>7401</a>
<a id='n7402' href='#n7402'>7402</a>
<a id='n7403' href='#n7403'>7403</a>
<a id='n7404' href='#n7404'>7404</a>
<a id='n7405' href='#n7405'>7405</a>
<a id='n7406' href='#n7406'>7406</a>
<a id='n7407' href='#n7407'>7407</a>
<a id='n7408' href='#n7408'>7408</a>
<a id='n7409' href='#n7409'>7409</a>
<a id='n7410' href='#n7410'>7410</a>
<a id='n7411' href='#n7411'>7411</a>
<a id='n7412' href='#n7412'>7412</a>
<a id='n7413' href='#n7413'>7413</a>
<a id='n7414' href='#n7414'>7414</a>
<a id='n7415' href='#n7415'>7415</a>
<a id='n7416' href='#n7416'>7416</a>
<a id='n7417' href='#n7417'>7417</a>
<a id='n7418' href='#n7418'>7418</a>
<a id='n7419' href='#n7419'>7419</a>
<a id='n7420' href='#n7420'>7420</a>
<a id='n7421' href='#n7421'>7421</a>
<a id='n7422' href='#n7422'>7422</a>
<a id='n7423' href='#n7423'>7423</a>
<a id='n7424' href='#n7424'>7424</a>
<a id='n7425' href='#n7425'>7425</a>
<a id='n7426' href='#n7426'>7426</a>
<a id='n7427' href='#n7427'>7427</a>
<a id='n7428' href='#n7428'>7428</a>
<a id='n7429' href='#n7429'>7429</a>
<a id='n7430' href='#n7430'>7430</a>
<a id='n7431' href='#n7431'>7431</a>
<a id='n7432' href='#n7432'>7432</a>
<a id='n7433' href='#n7433'>7433</a>
<a id='n7434' href='#n7434'>7434</a>
<a id='n7435' href='#n7435'>7435</a>
<a id='n7436' href='#n7436'>7436</a>
<a id='n7437' href='#n7437'>7437</a>
<a id='n7438' href='#n7438'>7438</a>
<a id='n7439' href='#n7439'>7439</a>
<a id='n7440' href='#n7440'>7440</a>
<a id='n7441' href='#n7441'>7441</a>
<a id='n7442' href='#n7442'>7442</a>
<a id='n7443' href='#n7443'>7443</a>
<a id='n7444' href='#n7444'>7444</a>
<a id='n7445' href='#n7445'>7445</a>
<a id='n7446' href='#n7446'>7446</a>
<a id='n7447' href='#n7447'>7447</a>
<a id='n7448' href='#n7448'>7448</a>
<a id='n7449' href='#n7449'>7449</a>
<a id='n7450' href='#n7450'>7450</a>
<a id='n7451' href='#n7451'>7451</a>
<a id='n7452' href='#n7452'>7452</a>
<a id='n7453' href='#n7453'>7453</a>
<a id='n7454' href='#n7454'>7454</a>
<a id='n7455' href='#n7455'>7455</a>
<a id='n7456' href='#n7456'>7456</a>
<a id='n7457' href='#n7457'>7457</a>
<a id='n7458' href='#n7458'>7458</a>
<a id='n7459' href='#n7459'>7459</a>
<a id='n7460' href='#n7460'>7460</a>
<a id='n7461' href='#n7461'>7461</a>
<a id='n7462' href='#n7462'>7462</a>
<a id='n7463' href='#n7463'>7463</a>
<a id='n7464' href='#n7464'>7464</a>
<a id='n7465' href='#n7465'>7465</a>
<a id='n7466' href='#n7466'>7466</a>
<a id='n7467' href='#n7467'>7467</a>
<a id='n7468' href='#n7468'>7468</a>
<a id='n7469' href='#n7469'>7469</a>
<a id='n7470' href='#n7470'>7470</a>
<a id='n7471' href='#n7471'>7471</a>
<a id='n7472' href='#n7472'>7472</a>
<a id='n7473' href='#n7473'>7473</a>
<a id='n7474' href='#n7474'>7474</a>
<a id='n7475' href='#n7475'>7475</a>
<a id='n7476' href='#n7476'>7476</a>
<a id='n7477' href='#n7477'>7477</a>
<a id='n7478' href='#n7478'>7478</a>
<a id='n7479' href='#n7479'>7479</a>
<a id='n7480' href='#n7480'>7480</a>
<a id='n7481' href='#n7481'>7481</a>
<a id='n7482' href='#n7482'>7482</a>
<a id='n7483' href='#n7483'>7483</a>
<a id='n7484' href='#n7484'>7484</a>
<a id='n7485' href='#n7485'>7485</a>
<a id='n7486' href='#n7486'>7486</a>
<a id='n7487' href='#n7487'>7487</a>
<a id='n7488' href='#n7488'>7488</a>
<a id='n7489' href='#n7489'>7489</a>
<a id='n7490' href='#n7490'>7490</a>
<a id='n7491' href='#n7491'>7491</a>
<a id='n7492' href='#n7492'>7492</a>
<a id='n7493' href='#n7493'>7493</a>
<a id='n7494' href='#n7494'>7494</a>
<a id='n7495' href='#n7495'>7495</a>
<a id='n7496' href='#n7496'>7496</a>
<a id='n7497' href='#n7497'>7497</a>
<a id='n7498' href='#n7498'>7498</a>
<a id='n7499' href='#n7499'>7499</a>
<a id='n7500' href='#n7500'>7500</a>
<a id='n7501' href='#n7501'>7501</a>
<a id='n7502' href='#n7502'>7502</a>
<a id='n7503' href='#n7503'>7503</a>
<a id='n7504' href='#n7504'>7504</a>
<a id='n7505' href='#n7505'>7505</a>
<a id='n7506' href='#n7506'>7506</a>
<a id='n7507' href='#n7507'>7507</a>
<a id='n7508' href='#n7508'>7508</a>
<a id='n7509' href='#n7509'>7509</a>
<a id='n7510' href='#n7510'>7510</a>
<a id='n7511' href='#n7511'>7511</a>
<a id='n7512' href='#n7512'>7512</a>
<a id='n7513' href='#n7513'>7513</a>
<a id='n7514' href='#n7514'>7514</a>
<a id='n7515' href='#n7515'>7515</a>
<a id='n7516' href='#n7516'>7516</a>
<a id='n7517' href='#n7517'>7517</a>
<a id='n7518' href='#n7518'>7518</a>
<a id='n7519' href='#n7519'>7519</a>
<a id='n7520' href='#n7520'>7520</a>
<a id='n7521' href='#n7521'>7521</a>
<a id='n7522' href='#n7522'>7522</a>
<a id='n7523' href='#n7523'>7523</a>
<a id='n7524' href='#n7524'>7524</a>
<a id='n7525' href='#n7525'>7525</a>
<a id='n7526' href='#n7526'>7526</a>
<a id='n7527' href='#n7527'>7527</a>
<a id='n7528' href='#n7528'>7528</a>
<a id='n7529' href='#n7529'>7529</a>
<a id='n7530' href='#n7530'>7530</a>
<a id='n7531' href='#n7531'>7531</a>
<a id='n7532' href='#n7532'>7532</a>
<a id='n7533' href='#n7533'>7533</a>
<a id='n7534' href='#n7534'>7534</a>
<a id='n7535' href='#n7535'>7535</a>
<a id='n7536' href='#n7536'>7536</a>
<a id='n7537' href='#n7537'>7537</a>
<a id='n7538' href='#n7538'>7538</a>
<a id='n7539' href='#n7539'>7539</a>
<a id='n7540' href='#n7540'>7540</a>
<a id='n7541' href='#n7541'>7541</a>
<a id='n7542' href='#n7542'>7542</a>
<a id='n7543' href='#n7543'>7543</a>
<a id='n7544' href='#n7544'>7544</a>
<a id='n7545' href='#n7545'>7545</a>
<a id='n7546' href='#n7546'>7546</a>
<a id='n7547' href='#n7547'>7547</a>
<a id='n7548' href='#n7548'>7548</a>
<a id='n7549' href='#n7549'>7549</a>
<a id='n7550' href='#n7550'>7550</a>
<a id='n7551' href='#n7551'>7551</a>
<a id='n7552' href='#n7552'>7552</a>
<a id='n7553' href='#n7553'>7553</a>
<a id='n7554' href='#n7554'>7554</a>
<a id='n7555' href='#n7555'>7555</a>
<a id='n7556' href='#n7556'>7556</a>
<a id='n7557' href='#n7557'>7557</a>
<a id='n7558' href='#n7558'>7558</a>
<a id='n7559' href='#n7559'>7559</a>
<a id='n7560' href='#n7560'>7560</a>
<a id='n7561' href='#n7561'>7561</a>
<a id='n7562' href='#n7562'>7562</a>
<a id='n7563' href='#n7563'>7563</a>
<a id='n7564' href='#n7564'>7564</a>
<a id='n7565' href='#n7565'>7565</a>
<a id='n7566' href='#n7566'>7566</a>
<a id='n7567' href='#n7567'>7567</a>
<a id='n7568' href='#n7568'>7568</a>
<a id='n7569' href='#n7569'>7569</a>
<a id='n7570' href='#n7570'>7570</a>
<a id='n7571' href='#n7571'>7571</a>
<a id='n7572' href='#n7572'>7572</a>
<a id='n7573' href='#n7573'>7573</a>
<a id='n7574' href='#n7574'>7574</a>
<a id='n7575' href='#n7575'>7575</a>
<a id='n7576' href='#n7576'>7576</a>
<a id='n7577' href='#n7577'>7577</a>
<a id='n7578' href='#n7578'>7578</a>
<a id='n7579' href='#n7579'>7579</a>
<a id='n7580' href='#n7580'>7580</a>
<a id='n7581' href='#n7581'>7581</a>
<a id='n7582' href='#n7582'>7582</a>
<a id='n7583' href='#n7583'>7583</a>
<a id='n7584' href='#n7584'>7584</a>
<a id='n7585' href='#n7585'>7585</a>
<a id='n7586' href='#n7586'>7586</a>
<a id='n7587' href='#n7587'>7587</a>
<a id='n7588' href='#n7588'>7588</a>
<a id='n7589' href='#n7589'>7589</a>
<a id='n7590' href='#n7590'>7590</a>
<a id='n7591' href='#n7591'>7591</a>
<a id='n7592' href='#n7592'>7592</a>
<a id='n7593' href='#n7593'>7593</a>
<a id='n7594' href='#n7594'>7594</a>
<a id='n7595' href='#n7595'>7595</a>
<a id='n7596' href='#n7596'>7596</a>
<a id='n7597' href='#n7597'>7597</a>
<a id='n7598' href='#n7598'>7598</a>
<a id='n7599' href='#n7599'>7599</a>
<a id='n7600' href='#n7600'>7600</a>
<a id='n7601' href='#n7601'>7601</a>
<a id='n7602' href='#n7602'>7602</a>
<a id='n7603' href='#n7603'>7603</a>
<a id='n7604' href='#n7604'>7604</a>
<a id='n7605' href='#n7605'>7605</a>
<a id='n7606' href='#n7606'>7606</a>
<a id='n7607' href='#n7607'>7607</a>
<a id='n7608' href='#n7608'>7608</a>
<a id='n7609' href='#n7609'>7609</a>
<a id='n7610' href='#n7610'>7610</a>
<a id='n7611' href='#n7611'>7611</a>
<a id='n7612' href='#n7612'>7612</a>
<a id='n7613' href='#n7613'>7613</a>
<a id='n7614' href='#n7614'>7614</a>
<a id='n7615' href='#n7615'>7615</a>
<a id='n7616' href='#n7616'>7616</a>
<a id='n7617' href='#n7617'>7617</a>
<a id='n7618' href='#n7618'>7618</a>
<a id='n7619' href='#n7619'>7619</a>
<a id='n7620' href='#n7620'>7620</a>
<a id='n7621' href='#n7621'>7621</a>
<a id='n7622' href='#n7622'>7622</a>
<a id='n7623' href='#n7623'>7623</a>
<a id='n7624' href='#n7624'>7624</a>
<a id='n7625' href='#n7625'>7625</a>
<a id='n7626' href='#n7626'>7626</a>
<a id='n7627' href='#n7627'>7627</a>
<a id='n7628' href='#n7628'>7628</a>
<a id='n7629' href='#n7629'>7629</a>
<a id='n7630' href='#n7630'>7630</a>
<a id='n7631' href='#n7631'>7631</a>
<a id='n7632' href='#n7632'>7632</a>
<a id='n7633' href='#n7633'>7633</a>
<a id='n7634' href='#n7634'>7634</a>
<a id='n7635' href='#n7635'>7635</a>
<a id='n7636' href='#n7636'>7636</a>
<a id='n7637' href='#n7637'>7637</a>
<a id='n7638' href='#n7638'>7638</a>
<a id='n7639' href='#n7639'>7639</a>
<a id='n7640' href='#n7640'>7640</a>
<a id='n7641' href='#n7641'>7641</a>
<a id='n7642' href='#n7642'>7642</a>
<a id='n7643' href='#n7643'>7643</a>
<a id='n7644' href='#n7644'>7644</a>
<a id='n7645' href='#n7645'>7645</a>
<a id='n7646' href='#n7646'>7646</a>
<a id='n7647' href='#n7647'>7647</a>
<a id='n7648' href='#n7648'>7648</a>
<a id='n7649' href='#n7649'>7649</a>
<a id='n7650' href='#n7650'>7650</a>
<a id='n7651' href='#n7651'>7651</a>
<a id='n7652' href='#n7652'>7652</a>
<a id='n7653' href='#n7653'>7653</a>
<a id='n7654' href='#n7654'>7654</a>
<a id='n7655' href='#n7655'>7655</a>
<a id='n7656' href='#n7656'>7656</a>
<a id='n7657' href='#n7657'>7657</a>
<a id='n7658' href='#n7658'>7658</a>
<a id='n7659' href='#n7659'>7659</a>
<a id='n7660' href='#n7660'>7660</a>
<a id='n7661' href='#n7661'>7661</a>
<a id='n7662' href='#n7662'>7662</a>
<a id='n7663' href='#n7663'>7663</a>
<a id='n7664' href='#n7664'>7664</a>
<a id='n7665' href='#n7665'>7665</a>
<a id='n7666' href='#n7666'>7666</a>
<a id='n7667' href='#n7667'>7667</a>
<a id='n7668' href='#n7668'>7668</a>
<a id='n7669' href='#n7669'>7669</a>
<a id='n7670' href='#n7670'>7670</a>
<a id='n7671' href='#n7671'>7671</a>
<a id='n7672' href='#n7672'>7672</a>
<a id='n7673' href='#n7673'>7673</a>
<a id='n7674' href='#n7674'>7674</a>
<a id='n7675' href='#n7675'>7675</a>
<a id='n7676' href='#n7676'>7676</a>
<a id='n7677' href='#n7677'>7677</a>
<a id='n7678' href='#n7678'>7678</a>
<a id='n7679' href='#n7679'>7679</a>
<a id='n7680' href='#n7680'>7680</a>
<a id='n7681' href='#n7681'>7681</a>
<a id='n7682' href='#n7682'>7682</a>
<a id='n7683' href='#n7683'>7683</a>
<a id='n7684' href='#n7684'>7684</a>
<a id='n7685' href='#n7685'>7685</a>
<a id='n7686' href='#n7686'>7686</a>
<a id='n7687' href='#n7687'>7687</a>
<a id='n7688' href='#n7688'>7688</a>
<a id='n7689' href='#n7689'>7689</a>
<a id='n7690' href='#n7690'>7690</a>
<a id='n7691' href='#n7691'>7691</a>
<a id='n7692' href='#n7692'>7692</a>
<a id='n7693' href='#n7693'>7693</a>
<a id='n7694' href='#n7694'>7694</a>
<a id='n7695' href='#n7695'>7695</a>
<a id='n7696' href='#n7696'>7696</a>
<a id='n7697' href='#n7697'>7697</a>
<a id='n7698' href='#n7698'>7698</a>
<a id='n7699' href='#n7699'>7699</a>
<a id='n7700' href='#n7700'>7700</a>
<a id='n7701' href='#n7701'>7701</a>
<a id='n7702' href='#n7702'>7702</a>
<a id='n7703' href='#n7703'>7703</a>
<a id='n7704' href='#n7704'>7704</a>
<a id='n7705' href='#n7705'>7705</a>
<a id='n7706' href='#n7706'>7706</a>
<a id='n7707' href='#n7707'>7707</a>
<a id='n7708' href='#n7708'>7708</a>
<a id='n7709' href='#n7709'>7709</a>
<a id='n7710' href='#n7710'>7710</a>
<a id='n7711' href='#n7711'>7711</a>
<a id='n7712' href='#n7712'>7712</a>
<a id='n7713' href='#n7713'>7713</a>
<a id='n7714' href='#n7714'>7714</a>
<a id='n7715' href='#n7715'>7715</a>
<a id='n7716' href='#n7716'>7716</a>
<a id='n7717' href='#n7717'>7717</a>
<a id='n7718' href='#n7718'>7718</a>
<a id='n7719' href='#n7719'>7719</a>
<a id='n7720' href='#n7720'>7720</a>
<a id='n7721' href='#n7721'>7721</a>
<a id='n7722' href='#n7722'>7722</a>
<a id='n7723' href='#n7723'>7723</a>
<a id='n7724' href='#n7724'>7724</a>
<a id='n7725' href='#n7725'>7725</a>
<a id='n7726' href='#n7726'>7726</a>
<a id='n7727' href='#n7727'>7727</a>
<a id='n7728' href='#n7728'>7728</a>
<a id='n7729' href='#n7729'>7729</a>
<a id='n7730' href='#n7730'>7730</a>
<a id='n7731' href='#n7731'>7731</a>
<a id='n7732' href='#n7732'>7732</a>
<a id='n7733' href='#n7733'>7733</a>
<a id='n7734' href='#n7734'>7734</a>
<a id='n7735' href='#n7735'>7735</a>
<a id='n7736' href='#n7736'>7736</a>
<a id='n7737' href='#n7737'>7737</a>
<a id='n7738' href='#n7738'>7738</a>
<a id='n7739' href='#n7739'>7739</a>
<a id='n7740' href='#n7740'>7740</a>
<a id='n7741' href='#n7741'>7741</a>
<a id='n7742' href='#n7742'>7742</a>
<a id='n7743' href='#n7743'>7743</a>
<a id='n7744' href='#n7744'>7744</a>
<a id='n7745' href='#n7745'>7745</a>
<a id='n7746' href='#n7746'>7746</a>
<a id='n7747' href='#n7747'>7747</a>
<a id='n7748' href='#n7748'>7748</a>
<a id='n7749' href='#n7749'>7749</a>
<a id='n7750' href='#n7750'>7750</a>
<a id='n7751' href='#n7751'>7751</a>
<a id='n7752' href='#n7752'>7752</a>
<a id='n7753' href='#n7753'>7753</a>
<a id='n7754' href='#n7754'>7754</a>
<a id='n7755' href='#n7755'>7755</a>
<a id='n7756' href='#n7756'>7756</a>
<a id='n7757' href='#n7757'>7757</a>
<a id='n7758' href='#n7758'>7758</a>
<a id='n7759' href='#n7759'>7759</a>
<a id='n7760' href='#n7760'>7760</a>
<a id='n7761' href='#n7761'>7761</a>
<a id='n7762' href='#n7762'>7762</a>
<a id='n7763' href='#n7763'>7763</a>
<a id='n7764' href='#n7764'>7764</a>
<a id='n7765' href='#n7765'>7765</a>
<a id='n7766' href='#n7766'>7766</a>
<a id='n7767' href='#n7767'>7767</a>
<a id='n7768' href='#n7768'>7768</a>
<a id='n7769' href='#n7769'>7769</a>
<a id='n7770' href='#n7770'>7770</a>
<a id='n7771' href='#n7771'>7771</a>
<a id='n7772' href='#n7772'>7772</a>
<a id='n7773' href='#n7773'>7773</a>
<a id='n7774' href='#n7774'>7774</a>
<a id='n7775' href='#n7775'>7775</a>
<a id='n7776' href='#n7776'>7776</a>
<a id='n7777' href='#n7777'>7777</a>
<a id='n7778' href='#n7778'>7778</a>
<a id='n7779' href='#n7779'>7779</a>
<a id='n7780' href='#n7780'>7780</a>
<a id='n7781' href='#n7781'>7781</a>
<a id='n7782' href='#n7782'>7782</a>
<a id='n7783' href='#n7783'>7783</a>
<a id='n7784' href='#n7784'>7784</a>
<a id='n7785' href='#n7785'>7785</a>
<a id='n7786' href='#n7786'>7786</a>
<a id='n7787' href='#n7787'>7787</a>
<a id='n7788' href='#n7788'>7788</a>
<a id='n7789' href='#n7789'>7789</a>
<a id='n7790' href='#n7790'>7790</a>
<a id='n7791' href='#n7791'>7791</a>
<a id='n7792' href='#n7792'>7792</a>
<a id='n7793' href='#n7793'>7793</a>
<a id='n7794' href='#n7794'>7794</a>
<a id='n7795' href='#n7795'>7795</a>
<a id='n7796' href='#n7796'>7796</a>
<a id='n7797' href='#n7797'>7797</a>
<a id='n7798' href='#n7798'>7798</a>
<a id='n7799' href='#n7799'>7799</a>
<a id='n7800' href='#n7800'>7800</a>
<a id='n7801' href='#n7801'>7801</a>
<a id='n7802' href='#n7802'>7802</a>
<a id='n7803' href='#n7803'>7803</a>
<a id='n7804' href='#n7804'>7804</a>
<a id='n7805' href='#n7805'>7805</a>
<a id='n7806' href='#n7806'>7806</a>
<a id='n7807' href='#n7807'>7807</a>
<a id='n7808' href='#n7808'>7808</a>
<a id='n7809' href='#n7809'>7809</a>
<a id='n7810' href='#n7810'>7810</a>
<a id='n7811' href='#n7811'>7811</a>
<a id='n7812' href='#n7812'>7812</a>
<a id='n7813' href='#n7813'>7813</a>
<a id='n7814' href='#n7814'>7814</a>
<a id='n7815' href='#n7815'>7815</a>
<a id='n7816' href='#n7816'>7816</a>
<a id='n7817' href='#n7817'>7817</a>
<a id='n7818' href='#n7818'>7818</a>
<a id='n7819' href='#n7819'>7819</a>
<a id='n7820' href='#n7820'>7820</a>
<a id='n7821' href='#n7821'>7821</a>
<a id='n7822' href='#n7822'>7822</a>
<a id='n7823' href='#n7823'>7823</a>
<a id='n7824' href='#n7824'>7824</a>
<a id='n7825' href='#n7825'>7825</a>
<a id='n7826' href='#n7826'>7826</a>
<a id='n7827' href='#n7827'>7827</a>
<a id='n7828' href='#n7828'>7828</a>
<a id='n7829' href='#n7829'>7829</a>
<a id='n7830' href='#n7830'>7830</a>
<a id='n7831' href='#n7831'>7831</a>
<a id='n7832' href='#n7832'>7832</a>
<a id='n7833' href='#n7833'>7833</a>
<a id='n7834' href='#n7834'>7834</a>
<a id='n7835' href='#n7835'>7835</a>
<a id='n7836' href='#n7836'>7836</a>
<a id='n7837' href='#n7837'>7837</a>
<a id='n7838' href='#n7838'>7838</a>
<a id='n7839' href='#n7839'>7839</a>
<a id='n7840' href='#n7840'>7840</a>
<a id='n7841' href='#n7841'>7841</a>
<a id='n7842' href='#n7842'>7842</a>
<a id='n7843' href='#n7843'>7843</a>
<a id='n7844' href='#n7844'>7844</a>
<a id='n7845' href='#n7845'>7845</a>
<a id='n7846' href='#n7846'>7846</a>
<a id='n7847' href='#n7847'>7847</a>
<a id='n7848' href='#n7848'>7848</a>
<a id='n7849' href='#n7849'>7849</a>
<a id='n7850' href='#n7850'>7850</a>
<a id='n7851' href='#n7851'>7851</a>
<a id='n7852' href='#n7852'>7852</a>
<a id='n7853' href='#n7853'>7853</a>
<a id='n7854' href='#n7854'>7854</a>
<a id='n7855' href='#n7855'>7855</a>
<a id='n7856' href='#n7856'>7856</a>
<a id='n7857' href='#n7857'>7857</a>
<a id='n7858' href='#n7858'>7858</a>
<a id='n7859' href='#n7859'>7859</a>
<a id='n7860' href='#n7860'>7860</a>
<a id='n7861' href='#n7861'>7861</a>
<a id='n7862' href='#n7862'>7862</a>
<a id='n7863' href='#n7863'>7863</a>
<a id='n7864' href='#n7864'>7864</a>
<a id='n7865' href='#n7865'>7865</a>
<a id='n7866' href='#n7866'>7866</a>
<a id='n7867' href='#n7867'>7867</a>
<a id='n7868' href='#n7868'>7868</a>
<a id='n7869' href='#n7869'>7869</a>
<a id='n7870' href='#n7870'>7870</a>
<a id='n7871' href='#n7871'>7871</a>
<a id='n7872' href='#n7872'>7872</a>
<a id='n7873' href='#n7873'>7873</a>
<a id='n7874' href='#n7874'>7874</a>
<a id='n7875' href='#n7875'>7875</a>
<a id='n7876' href='#n7876'>7876</a>
<a id='n7877' href='#n7877'>7877</a>
<a id='n7878' href='#n7878'>7878</a>
<a id='n7879' href='#n7879'>7879</a>
<a id='n7880' href='#n7880'>7880</a>
<a id='n7881' href='#n7881'>7881</a>
<a id='n7882' href='#n7882'>7882</a>
<a id='n7883' href='#n7883'>7883</a>
<a id='n7884' href='#n7884'>7884</a>
<a id='n7885' href='#n7885'>7885</a>
<a id='n7886' href='#n7886'>7886</a>
<a id='n7887' href='#n7887'>7887</a>
<a id='n7888' href='#n7888'>7888</a>
<a id='n7889' href='#n7889'>7889</a>
<a id='n7890' href='#n7890'>7890</a>
<a id='n7891' href='#n7891'>7891</a>
<a id='n7892' href='#n7892'>7892</a>
<a id='n7893' href='#n7893'>7893</a>
<a id='n7894' href='#n7894'>7894</a>
<a id='n7895' href='#n7895'>7895</a>
<a id='n7896' href='#n7896'>7896</a>
<a id='n7897' href='#n7897'>7897</a>
<a id='n7898' href='#n7898'>7898</a>
<a id='n7899' href='#n7899'>7899</a>
<a id='n7900' href='#n7900'>7900</a>
<a id='n7901' href='#n7901'>7901</a>
<a id='n7902' href='#n7902'>7902</a>
<a id='n7903' href='#n7903'>7903</a>
<a id='n7904' href='#n7904'>7904</a>
<a id='n7905' href='#n7905'>7905</a>
<a id='n7906' href='#n7906'>7906</a>
<a id='n7907' href='#n7907'>7907</a>
<a id='n7908' href='#n7908'>7908</a>
<a id='n7909' href='#n7909'>7909</a>
<a id='n7910' href='#n7910'>7910</a>
<a id='n7911' href='#n7911'>7911</a>
<a id='n7912' href='#n7912'>7912</a>
<a id='n7913' href='#n7913'>7913</a>
<a id='n7914' href='#n7914'>7914</a>
<a id='n7915' href='#n7915'>7915</a>
<a id='n7916' href='#n7916'>7916</a>
<a id='n7917' href='#n7917'>7917</a>
<a id='n7918' href='#n7918'>7918</a>
<a id='n7919' href='#n7919'>7919</a>
<a id='n7920' href='#n7920'>7920</a>
<a id='n7921' href='#n7921'>7921</a>
<a id='n7922' href='#n7922'>7922</a>
<a id='n7923' href='#n7923'>7923</a>
<a id='n7924' href='#n7924'>7924</a>
<a id='n7925' href='#n7925'>7925</a>
<a id='n7926' href='#n7926'>7926</a>
<a id='n7927' href='#n7927'>7927</a>
<a id='n7928' href='#n7928'>7928</a>
<a id='n7929' href='#n7929'>7929</a>
<a id='n7930' href='#n7930'>7930</a>
<a id='n7931' href='#n7931'>7931</a>
<a id='n7932' href='#n7932'>7932</a>
<a id='n7933' href='#n7933'>7933</a>
<a id='n7934' href='#n7934'>7934</a>
<a id='n7935' href='#n7935'>7935</a>
<a id='n7936' href='#n7936'>7936</a>
<a id='n7937' href='#n7937'>7937</a>
<a id='n7938' href='#n7938'>7938</a>
<a id='n7939' href='#n7939'>7939</a>
<a id='n7940' href='#n7940'>7940</a>
<a id='n7941' href='#n7941'>7941</a>
<a id='n7942' href='#n7942'>7942</a>
<a id='n7943' href='#n7943'>7943</a>
<a id='n7944' href='#n7944'>7944</a>
<a id='n7945' href='#n7945'>7945</a>
<a id='n7946' href='#n7946'>7946</a>
<a id='n7947' href='#n7947'>7947</a>
<a id='n7948' href='#n7948'>7948</a>
<a id='n7949' href='#n7949'>7949</a>
<a id='n7950' href='#n7950'>7950</a>
<a id='n7951' href='#n7951'>7951</a>
<a id='n7952' href='#n7952'>7952</a>
<a id='n7953' href='#n7953'>7953</a>
<a id='n7954' href='#n7954'>7954</a>
<a id='n7955' href='#n7955'>7955</a>
<a id='n7956' href='#n7956'>7956</a>
<a id='n7957' href='#n7957'>7957</a>
<a id='n7958' href='#n7958'>7958</a>
<a id='n7959' href='#n7959'>7959</a>
<a id='n7960' href='#n7960'>7960</a>
<a id='n7961' href='#n7961'>7961</a>
<a id='n7962' href='#n7962'>7962</a>
<a id='n7963' href='#n7963'>7963</a>
<a id='n7964' href='#n7964'>7964</a>
<a id='n7965' href='#n7965'>7965</a>
<a id='n7966' href='#n7966'>7966</a>
<a id='n7967' href='#n7967'>7967</a>
<a id='n7968' href='#n7968'>7968</a>
<a id='n7969' href='#n7969'>7969</a>
<a id='n7970' href='#n7970'>7970</a>
<a id='n7971' href='#n7971'>7971</a>
<a id='n7972' href='#n7972'>7972</a>
<a id='n7973' href='#n7973'>7973</a>
<a id='n7974' href='#n7974'>7974</a>
<a id='n7975' href='#n7975'>7975</a>
<a id='n7976' href='#n7976'>7976</a>
<a id='n7977' href='#n7977'>7977</a>
<a id='n7978' href='#n7978'>7978</a>
<a id='n7979' href='#n7979'>7979</a>
<a id='n7980' href='#n7980'>7980</a>
<a id='n7981' href='#n7981'>7981</a>
<a id='n7982' href='#n7982'>7982</a>
<a id='n7983' href='#n7983'>7983</a>
<a id='n7984' href='#n7984'>7984</a>
<a id='n7985' href='#n7985'>7985</a>
<a id='n7986' href='#n7986'>7986</a>
<a id='n7987' href='#n7987'>7987</a>
<a id='n7988' href='#n7988'>7988</a>
<a id='n7989' href='#n7989'>7989</a>
<a id='n7990' href='#n7990'>7990</a>
<a id='n7991' href='#n7991'>7991</a>
<a id='n7992' href='#n7992'>7992</a>
<a id='n7993' href='#n7993'>7993</a>
<a id='n7994' href='#n7994'>7994</a>
<a id='n7995' href='#n7995'>7995</a>
<a id='n7996' href='#n7996'>7996</a>
<a id='n7997' href='#n7997'>7997</a>
<a id='n7998' href='#n7998'>7998</a>
<a id='n7999' href='#n7999'>7999</a>
<a id='n8000' href='#n8000'>8000</a>
<a id='n8001' href='#n8001'>8001</a>
<a id='n8002' href='#n8002'>8002</a>
<a id='n8003' href='#n8003'>8003</a>
<a id='n8004' href='#n8004'>8004</a>
<a id='n8005' href='#n8005'>8005</a>
<a id='n8006' href='#n8006'>8006</a>
<a id='n8007' href='#n8007'>8007</a>
<a id='n8008' href='#n8008'>8008</a>
<a id='n8009' href='#n8009'>8009</a>
<a id='n8010' href='#n8010'>8010</a>
<a id='n8011' href='#n8011'>8011</a>
<a id='n8012' href='#n8012'>8012</a>
<a id='n8013' href='#n8013'>8013</a>
<a id='n8014' href='#n8014'>8014</a>
<a id='n8015' href='#n8015'>8015</a>
<a id='n8016' href='#n8016'>8016</a>
<a id='n8017' href='#n8017'>8017</a>
<a id='n8018' href='#n8018'>8018</a>
<a id='n8019' href='#n8019'>8019</a>
<a id='n8020' href='#n8020'>8020</a>
<a id='n8021' href='#n8021'>8021</a>
<a id='n8022' href='#n8022'>8022</a>
<a id='n8023' href='#n8023'>8023</a>
<a id='n8024' href='#n8024'>8024</a>
<a id='n8025' href='#n8025'>8025</a>
<a id='n8026' href='#n8026'>8026</a>
<a id='n8027' href='#n8027'>8027</a>
<a id='n8028' href='#n8028'>8028</a>
<a id='n8029' href='#n8029'>8029</a>
<a id='n8030' href='#n8030'>8030</a>
<a id='n8031' href='#n8031'>8031</a>
<a id='n8032' href='#n8032'>8032</a>
<a id='n8033' href='#n8033'>8033</a>
<a id='n8034' href='#n8034'>8034</a>
<a id='n8035' href='#n8035'>8035</a>
<a id='n8036' href='#n8036'>8036</a>
<a id='n8037' href='#n8037'>8037</a>
<a id='n8038' href='#n8038'>8038</a>
<a id='n8039' href='#n8039'>8039</a>
<a id='n8040' href='#n8040'>8040</a>
<a id='n8041' href='#n8041'>8041</a>
<a id='n8042' href='#n8042'>8042</a>
<a id='n8043' href='#n8043'>8043</a>
<a id='n8044' href='#n8044'>8044</a>
<a id='n8045' href='#n8045'>8045</a>
<a id='n8046' href='#n8046'>8046</a>
<a id='n8047' href='#n8047'>8047</a>
<a id='n8048' href='#n8048'>8048</a>
<a id='n8049' href='#n8049'>8049</a>
<a id='n8050' href='#n8050'>8050</a>
<a id='n8051' href='#n8051'>8051</a>
<a id='n8052' href='#n8052'>8052</a>
<a id='n8053' href='#n8053'>8053</a>
<a id='n8054' href='#n8054'>8054</a>
<a id='n8055' href='#n8055'>8055</a>
<a id='n8056' href='#n8056'>8056</a>
<a id='n8057' href='#n8057'>8057</a>
<a id='n8058' href='#n8058'>8058</a>
<a id='n8059' href='#n8059'>8059</a>
<a id='n8060' href='#n8060'>8060</a>
<a id='n8061' href='#n8061'>8061</a>
<a id='n8062' href='#n8062'>8062</a>
<a id='n8063' href='#n8063'>8063</a>
<a id='n8064' href='#n8064'>8064</a>
<a id='n8065' href='#n8065'>8065</a>
<a id='n8066' href='#n8066'>8066</a>
<a id='n8067' href='#n8067'>8067</a>
<a id='n8068' href='#n8068'>8068</a>
<a id='n8069' href='#n8069'>8069</a>
<a id='n8070' href='#n8070'>8070</a>
<a id='n8071' href='#n8071'>8071</a>
<a id='n8072' href='#n8072'>8072</a>
<a id='n8073' href='#n8073'>8073</a>
<a id='n8074' href='#n8074'>8074</a>
<a id='n8075' href='#n8075'>8075</a>
<a id='n8076' href='#n8076'>8076</a>
<a id='n8077' href='#n8077'>8077</a>
<a id='n8078' href='#n8078'>8078</a>
<a id='n8079' href='#n8079'>8079</a>
<a id='n8080' href='#n8080'>8080</a>
<a id='n8081' href='#n8081'>8081</a>
<a id='n8082' href='#n8082'>8082</a>
<a id='n8083' href='#n8083'>8083</a>
<a id='n8084' href='#n8084'>8084</a>
<a id='n8085' href='#n8085'>8085</a>
<a id='n8086' href='#n8086'>8086</a>
<a id='n8087' href='#n8087'>8087</a>
<a id='n8088' href='#n8088'>8088</a>
<a id='n8089' href='#n8089'>8089</a>
<a id='n8090' href='#n8090'>8090</a>
<a id='n8091' href='#n8091'>8091</a>
<a id='n8092' href='#n8092'>8092</a>
<a id='n8093' href='#n8093'>8093</a>
<a id='n8094' href='#n8094'>8094</a>
<a id='n8095' href='#n8095'>8095</a>
<a id='n8096' href='#n8096'>8096</a>
<a id='n8097' href='#n8097'>8097</a>
<a id='n8098' href='#n8098'>8098</a>
<a id='n8099' href='#n8099'>8099</a>
<a id='n8100' href='#n8100'>8100</a>
<a id='n8101' href='#n8101'>8101</a>
<a id='n8102' href='#n8102'>8102</a>
<a id='n8103' href='#n8103'>8103</a>
<a id='n8104' href='#n8104'>8104</a>
<a id='n8105' href='#n8105'>8105</a>
<a id='n8106' href='#n8106'>8106</a>
<a id='n8107' href='#n8107'>8107</a>
<a id='n8108' href='#n8108'>8108</a>
<a id='n8109' href='#n8109'>8109</a>
<a id='n8110' href='#n8110'>8110</a>
<a id='n8111' href='#n8111'>8111</a>
<a id='n8112' href='#n8112'>8112</a>
<a id='n8113' href='#n8113'>8113</a>
<a id='n8114' href='#n8114'>8114</a>
<a id='n8115' href='#n8115'>8115</a>
<a id='n8116' href='#n8116'>8116</a>
<a id='n8117' href='#n8117'>8117</a>
<a id='n8118' href='#n8118'>8118</a>
<a id='n8119' href='#n8119'>8119</a>
<a id='n8120' href='#n8120'>8120</a>
<a id='n8121' href='#n8121'>8121</a>
<a id='n8122' href='#n8122'>8122</a>
<a id='n8123' href='#n8123'>8123</a>
<a id='n8124' href='#n8124'>8124</a>
<a id='n8125' href='#n8125'>8125</a>
<a id='n8126' href='#n8126'>8126</a>
<a id='n8127' href='#n8127'>8127</a>
<a id='n8128' href='#n8128'>8128</a>
<a id='n8129' href='#n8129'>8129</a>
<a id='n8130' href='#n8130'>8130</a>
<a id='n8131' href='#n8131'>8131</a>
<a id='n8132' href='#n8132'>8132</a>
<a id='n8133' href='#n8133'>8133</a>
<a id='n8134' href='#n8134'>8134</a>
<a id='n8135' href='#n8135'>8135</a>
<a id='n8136' href='#n8136'>8136</a>
<a id='n8137' href='#n8137'>8137</a>
<a id='n8138' href='#n8138'>8138</a>
<a id='n8139' href='#n8139'>8139</a>
<a id='n8140' href='#n8140'>8140</a>
<a id='n8141' href='#n8141'>8141</a>
<a id='n8142' href='#n8142'>8142</a>
<a id='n8143' href='#n8143'>8143</a>
<a id='n8144' href='#n8144'>8144</a>
<a id='n8145' href='#n8145'>8145</a>
<a id='n8146' href='#n8146'>8146</a>
<a id='n8147' href='#n8147'>8147</a>
<a id='n8148' href='#n8148'>8148</a>
<a id='n8149' href='#n8149'>8149</a>
<a id='n8150' href='#n8150'>8150</a>
<a id='n8151' href='#n8151'>8151</a>
<a id='n8152' href='#n8152'>8152</a>
<a id='n8153' href='#n8153'>8153</a>
<a id='n8154' href='#n8154'>8154</a>
<a id='n8155' href='#n8155'>8155</a>
<a id='n8156' href='#n8156'>8156</a>
<a id='n8157' href='#n8157'>8157</a>
<a id='n8158' href='#n8158'>8158</a>
<a id='n8159' href='#n8159'>8159</a>
<a id='n8160' href='#n8160'>8160</a>
<a id='n8161' href='#n8161'>8161</a>
<a id='n8162' href='#n8162'>8162</a>
<a id='n8163' href='#n8163'>8163</a>
<a id='n8164' href='#n8164'>8164</a>
<a id='n8165' href='#n8165'>8165</a>
<a id='n8166' href='#n8166'>8166</a>
<a id='n8167' href='#n8167'>8167</a>
<a id='n8168' href='#n8168'>8168</a>
<a id='n8169' href='#n8169'>8169</a>
<a id='n8170' href='#n8170'>8170</a>
<a id='n8171' href='#n8171'>8171</a>
<a id='n8172' href='#n8172'>8172</a>
<a id='n8173' href='#n8173'>8173</a>
<a id='n8174' href='#n8174'>8174</a>
<a id='n8175' href='#n8175'>8175</a>
<a id='n8176' href='#n8176'>8176</a>
<a id='n8177' href='#n8177'>8177</a>
<a id='n8178' href='#n8178'>8178</a>
<a id='n8179' href='#n8179'>8179</a>
<a id='n8180' href='#n8180'>8180</a>
<a id='n8181' href='#n8181'>8181</a>
<a id='n8182' href='#n8182'>8182</a>
<a id='n8183' href='#n8183'>8183</a>
<a id='n8184' href='#n8184'>8184</a>
<a id='n8185' href='#n8185'>8185</a>
<a id='n8186' href='#n8186'>8186</a>
<a id='n8187' href='#n8187'>8187</a>
<a id='n8188' href='#n8188'>8188</a>
<a id='n8189' href='#n8189'>8189</a>
<a id='n8190' href='#n8190'>8190</a>
</pre></td>
<td class='lines'><pre><code>commit 983932f4feeb38a09ae12e49875479db22cd3312
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Tue Jun 24 23:16:45 2014 -0400

    perf: fix arm64 build error
    
    I&#39;m seeing the following build error on arm64:
    
      In file included from util/event.c:3:0:
      util/event.h:95:17: error: &#39;PERF_REGS_MAX&#39; undeclared here (not in a function)
        u64 cache_regs[PERF_REGS_MAX];
                     ^
    
    This patch adds a PEFF_REGS_MAX definition for arm64.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit 46c0ee11217eb143c70e947064e5cc9413f8dd79
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Mon Jun 23 00:34:17 2014 -0400

    arm64: fix CONFIG_ZONE_DMA on systems with no 32-bit addressable DRAM
    
    Commit 2d5a5612bc (arm64: Limit the CMA buffer to 32-bit if ZONE_DMA)
    forces the CMA buffer to be 32-bit addressable if CONFIG_ZONE_DMA is
    defined. This breaks CMA on platforms with no 32-bit addressable DRAM.
    This patch checks to make sure there is 32-bit addressable DRAM before
    setting the 32-bit limit. If there is none, no limit is placed on the
    CMA buffer. This allows a single kernel (with CONFIG_ZONE_DMA defined)
    to support platforms requiring the 32-bit limit and platforms with no
    32-bit limit.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit 5500ed01dcd1c606cfcde8183429b81131fe320f
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:43 2014 +0100

    arm64: KVM: vgic: add GICv3 world switch
    
    Introduce the GICv3 world switch code and helper functions, enabling
    GICv2 emulation on GICv3 hardware.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit e9ad9cfb26b54f286032b0b5b7226b089ba2a1ae
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:42 2014 +0100

    KVM: ARM: vgic: add the GICv3 backend
    
    Introduce the support code for emulating a GICv2 on top of GICv3
    hardware.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 8eeec56af2a9b33b1d6e9bfbbd2cbfefe3251a95
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:41 2014 +0100

    arm64: KVM: move HCR_EL2.{IMO, FMO} manipulation into the vgic switch code
    
    GICv3 requires the IMO and FMO bits to be tightly coupled with some
    of the interrupt controller&#39;s register switch.
    
    In order to have similar code paths, move the manipulation of these
    bits to the GICv2 switch code.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 7454825239cf45a68e3f4762a2e8bc7d48cc9dcf
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:40 2014 +0100

    arm64: KVM: split GICv2 world switch from hyp code
    
    Move the GICv2 world switch code into its own file, and add the
    necessary indirection to the arm64 switch code.
    
    Also introduce a new type field to the vgic_params structure.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 3683c401f6baf5f423d84fb79463a71a9bb83193
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:39 2014 +0100

    arm64: KVM: remove __kvm_hyp_code_{start, end} from hyp.S
    
    We already have __hyp_text_{start,end} to express the boundaries
    of the HYP text section, and __kvm_hyp_code_{start,end} are getting
    in the way of a more modular world switch code.
    
    Just turn __kvm_hyp_code_{start,end} into #defines mapping the
    linker-emited symbols.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit db14591a1ee58c7b5184e5133b6d3d01bd800f32
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:38 2014 +0100

    KVM: ARM: vgic: revisit implementation of irqchip_in_kernel
    
    So far, irqchip_in_kernel() was implemented by testing the value of
    vctrl_base, which worked fine with GICv2.
    
    With GICv3, this field is useless, as we&#39;re using system registers
    instead of a emmory mapped interface. To solve this, add a boolean
    flag indicating if the we&#39;re using a vgic or not.
    
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit a2059979751390473cfdb4e4a8b1215f4329234c
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:37 2014 +0100

    KVM: ARM: vgic: split GICv2 backend from the main vgic code
    
    Brutally hack the innocent vgic code, and move the GICv2 specific code
    to its own file, using vgic_ops and vgic_params as a way to pass
    information between the two blocks.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 997913f5ee0b3edb9d63015b984876ce88dcacc1
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:36 2014 +0100

    KVM: ARM: introduce vgic_params structure
    
    Move all the data specific to a given GIC implementation into its own
    little structure.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 64aa80c7c6133b18442c0e648c833fdbafc71c13
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:35 2014 +0100

    KVM: ARM: vgic: introduce vgic_enable
    
    Move the code dealing with enabling the VGIC on to vgic_ops.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit a3541bd1a3edeae13f4dc6cb1236d1fa6b1ff999
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:34 2014 +0100

    KVM: ARM: vgic: abstract VMCR access
    
    Instead of directly messing with with the GICH_VMCR bits for the CPU
    interface save/restore code, add accessors that encode/decode the
    entire set of registers exposed by VMCR.
    
    Not the most efficient thing, but given that this code is only used
    by the save/restore code, performance is far from being critical.
    
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit e4a2b077cd5cfb1898fe1df98daa6f0bfaf574e4
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:33 2014 +0100

    KVM: ARM: vgic: move underflow handling to vgic_ops
    
    Move the code dealing with LR underflow handling to its own functions,
    and make them accessible through vgic_ops.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 2ec7fc615658e4c75437b7e702130733d0e59bbd
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:32 2014 +0100

    KVM: ARM: vgic: abstract MISR decoding
    
    Instead of directly dealing with the GICH_MISR bits, move the code to
    its own function and use a couple of public flags to represent the
    actual state.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 75fbfe0b0d0645f99612ab4c65ede696291d0fb3
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:31 2014 +0100

    KVM: ARM: vgic: abstract EISR bitmap access
    
    Move the GICH_EISR access to its own function.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 58922f2fe73a8c27f502289f89f39a60f0be9e63
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:30 2014 +0100

    KVM: ARM: vgic: abstract access to the ELRSR bitmap
    
    Move the GICH_ELRSR access to its own functions, and add them to
    the vgic_ops structure.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 62b5e49b44aa033d4489108a84310d1ac074ec11
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:29 2014 +0100

    KVM: ARM: vgic: introduce vgic_ops and LR manipulation primitives
    
    In order to split the various register manipulation from the main vgic
    code, introduce a vgic_ops structure, and start by abstracting the
    LR manipulation code with a couple of accessors.
    
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit dad9fe9a8274b6fed74a348b09a131f96560f47a
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:28 2014 +0100

    KVM: arm/arm64: vgic: move GICv2 registers to their own structure
    
    In order to make way for the GICv3 registers, move the v2-specific
    registers to their own structure.
    
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 97e409937d206ca0c97a8e143f3cb9736d6e8ac7
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:27 2014 +0100

    arm64: boot protocol documentation update for GICv3
    
    Linux has some requirements that must be satisfied in order to boot
    on a system built with a GICv3.
    
    Acked-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit fdd6a7889226f60469933ae5bf50c168ba2ceb27
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:26 2014 +0100

    arm64: GICv3 device tree binding documentation
    
    Add the necessary documentation to support GICv3.
    
    Cc: Thomas Gleixner &lt;tglx&#64;linutronix.de&gt;
    Cc: Mark Rutland &lt;mark.rutland&#64;arm.com&gt;
    Cc: Jason Cooper &lt;jason&#64;lakedaemon.net&gt;
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Acked-by: Rob Herring &lt;robh&#64;kernel.org&gt;
    Acked-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 4ab4528bd42f832c10a9a07f77c8d96749fca0db
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:25 2014 +0100

    arm64: initial support for GICv3
    
    The Generic Interrupt Controller (version 3) offers services that are
    similar to GICv2, with a number of additional features:
    - Affinity routing based on the CPU MPIDR (ARE)
    - System register for the CPU interfaces (SRE)
    - Support for more that 8 CPUs
    - Locality-specific Peripheral Interrupts (LPIs)
    - Interrupt Translation Services (ITS)
    
    This patch adds preliminary support for GICv3 with ARE and SRE,
    non-secure mode only. It relies on higher exception levels to grant ARE
    and SRE access.
    
    Support for LPI and ITS will be added at a later time.
    
    Cc: Thomas Gleixner &lt;tglx&#64;linutronix.de&gt;
    Cc: Jason Cooper &lt;jason&#64;lakedaemon.net&gt;
    Reviewed-by: Zi Shen Lim &lt;zlim&#64;broadcom.com&gt;
    Reviewed-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Reviewed-by: Tirumalesh Chalamarla &lt;tchalamarla&#64;cavium.com&gt;
    Reviewed-by: Yun Wu &lt;wuyun.wu&#64;huawei.com&gt;
    Reviewed-by: Zhen Lei &lt;thunder.leizhen&#64;huawei.com&gt;
    Tested-by: Tirumalesh Chalamarla&lt;tchalamarla&#64;cavium.com&gt;
    Tested-by: Radha Mohan Chintakuntla &lt;rchintakuntla&#64;cavium.com&gt;
    Acked-by: Radha Mohan Chintakuntla &lt;rchintakuntla&#64;cavium.com&gt;
    Acked-by: Catalin Marinas &lt;catalin.marinas&#64;arm.com&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 76a9db9c074d536b3a310246aaca6c949c6e1b43
Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;
Date:   Thu Jun 19 10:19:24 2014 +0100

    ARM: GIC: move some bits of GICv2 to a library-type file
    
    A few GICv2 low-level function are actually very useful to GICv3,
    and it makes some sense to share them across the two drivers.
    They end-up in their own file, with an additional parameter used
    to ensure an optional synchronization (unused on GICv2).
    
    Cc: Thomas Gleixner &lt;tglx&#64;linutronix.de&gt;
    Cc: Jason Cooper &lt;jason&#64;lakedaemon.net&gt;
    Acked-by: Christoffer Dall &lt;christoffer.dall&#64;linaro.org&gt;
    Signed-off-by: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;

commit 24ee5c9fa14106f699027a80ef5bece8a02d3640
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Thu Jun 12 15:10:22 2014 -0400

    rtc: ia64: allow other architectures to use EFI RTC
    
    Currently, the rtc-efi driver is restricted to ia64 only.
    Newer architectures with EFI support may want to also use
    that driver. This patch moves the platform device setup
    from ia64 into drivers/rtc and allow any architecture with
    CONFIG_EFI=y to use the rtc-efi driver.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit f0cb397f038b00d6a3d3aafaa56815e8615b7152
Author: Don Dutile &lt;ddutile&#64;redhat.com&gt;
Date:   Tue Mar 25 20:22:26 2014 -0400

    pmu: Adding support for Xgene PMUs
    
    Message-id: &lt;1395778948-47814-2-git-send-email-ddutile&#64;redhat.com&gt;
    Patchwork-id: 78602
    O-Subject: [PATCH 1/3] pmu: Adding support for Xgene PMUs
    Bugzilla: 1079110
    
    Backport of these two posted (but not upstream) patches.
    Combined into single patch due to gic-patch dependency.
    
    Signed-off-by: Donald Dutile &lt;ddutile&#64;redhat.com&gt;

commit 7fabb73d32c81cedc5c7ad11a3f3e6c96cd79f50
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Sun Jun 15 09:06:55 2014 -0400

    arm64: fix up APM Mustang devicetree
    
    These are changes needed when loading device tree blob built with
    kernel. i.e. with grub. These are not needed when using devicetree
    from Tianocore which will be fixed up at tianocore runtime.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit a3d5ec7e0cad00c3b89abae91813910470d209b1
Author: Kyle McMartin &lt;kmcmarti&#64;redhat.com&gt;
Date:   Tue May 13 22:25:26 2014 -0400

    arm64: don&#39;t set READ_IMPLIES_EXEC for EM_AARCH64 ELF objects
    
    Message-id: &lt;20140513222526.GC26038&#64;redacted.bos.redhat.com&gt;
    Patchwork-id: 79789
    O-Subject: [ACADIA PATCH] arm64: don&#39;t set READ_IMPLIES_EXEC for EM_AARCH64 ELF objects
    Bugzilla: 1085528
    
    BZ: https://bugzilla.redhat.com/show_bug.cgi?id=1085528
    Upstream: submitted soon
    
    [Sadly this isn&#39;t (yet) sufficient... but it fixes at least one issue
     here... cat /proc/$$/personality shows READ_IMPLIES_EXEC before. I&#39;ll
     try to figure the rest out tomorrow.]
    
    Currently, we&#39;re accidentally ending up with executable stacks on
    AArch64 when the ABI says we shouldn&#39;t be, and relying on glibc to fix
    things up for us when we&#39;re loaded. However, SELinux will deny us
    mucking with the stack, and hit us with execmem AVCs.
    
    The reason this is happening is somewhat complex:
    
    fs/binfmt_elf.c:load_elf_binary()
     - initializes executable_stack = EXSTACK_DEFAULT implying the
       architecture should make up its mind.
     - does a pile of loading goo
     - runs through the program headers, looking for PT_GNU_STACK
       and setting (or unsetting) executable_stack if it finds it.
    
       This is our first problem, we won&#39;t generate these unless an
       executable stack is explicitly requested.
    
     - more ELF loading goo
     - sets whether we&#39;re a compat task or not (TIF_32BIT) based on compat.h
     - for compat reasons (pre-GNU_STACK) checks if the READ_IMPLIES_EXEC
       flag should be set for ancient toolchains
    
       Here&#39;s our second problem, we test if read_implies_exec based on
       stk != EXSTACK_DISABLE_X, which is true since stk == EXSTACK_DEFAULT.
    
       So we set current-&gt;personality |= READ_IMPLIES_EXEC like a broken
       legacy toolchain would want.
    
     - Now we call setup_arg_pages to set up the stack...
    
    fs/exec.c:setup_arg_pages()
     - lots of magic happens here
     - vm_flags gets initialized to VM_STACK_FLAGS
    
       Here&#39;s our third problem, VM_STACK_FLAGS on arm64 is
       VM_DEFAULT_DATA_FLAG which tests READ_IMPLIES_EXEC and sets VM_EXEC
       if it&#39;s true. So we end up with an executable stack mapping, since we
       don&#39;t have executable_stack set (it&#39;s still EXSTACK_DEFAULT at this
       point) to unset it anywhere.
    
    Bang. execstack AVC when the program starts running.
    
    The easiest way I can see to fix this is to test if we&#39;re a legacy task
    and fix it up there. But that&#39;s not as simple as it sounds, because
    the 32-bit ABI depends on what revision of the CPU we&#39;ve enabled (not
    that it matters since we&#39;re ARMv8...) Regardless, in the compat case,
    set READ_IMPLIES_EXEC if we&#39;ve found a GNU_STACK header which explicitly
    requested it as in arch/arm/kernel/elf.c:arm_elf_read_implies_exec().
    
    Signed-off-by: Kyle McMartin &lt;kmcmarti&#64;redhat.com&gt;
    Signed-off-by: Donald Dutile &lt;ddutile&#64;redhat.com&gt;

commit 83c13f2718624a69568121628bd7b51c67a14dea
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Fri Jun 13 00:37:11 2014 -0400

    arm64: fix soft lockup due to large tlb flush range
    
    Under certain loads, this soft lockup has been observed:
    
       BUG: soft lockup - CPU#2 stuck for 22s! [ip6tables:1016]
       Modules linked in: ip6t_rpfilter ip6t_REJECT cfg80211 rfkill xt_conntrack ebtable_nat ebtable_broute bridge stp llc ebtable_filter ebtables ip6table_nat nf_conntrack_ipv6 nf_defrag_ipv6 nf_nat_ipv6 ip6table_mangle ip6table_security ip6table_raw ip6table_filter ip6_tables iptable_nat nf_conntrack_ipv4 nf_defrag_ipv4 nf_nat_ipv4 nf_nat nf_conntrack iptable_mangle iptable_security iptable_raw vfat fat efivarfs xfs libcrc32c
    
       CPU: 2 PID: 1016 Comm: ip6tables Not tainted 3.13.0-0.rc7.30.sa2.aarch64 #1
       task: fffffe03e81d1400 ti: fffffe03f01f8000 task.ti: fffffe03f01f8000
       PC is at __cpu_flush_kern_tlb_range+0xc/0x40
       LR is at __purge_vmap_area_lazy+0x28c/0x3ac
       pc : [&lt;fffffe000009c5cc&gt;] lr : [&lt;fffffe0000182710&gt;] pstate: 80000145
       sp : fffffe03f01fbb70
       x29: fffffe03f01fbb70 x28: fffffe03f01f8000
       x27: fffffe0000b19000 x26: 00000000000000d0
       x25: 000000000000001c x24: fffffe03f01fbc50
       x23: fffffe03f01fbc58 x22: fffffe03f01fbc10
       x21: fffffe0000b2a3f8 x20: 0000000000000802
       x19: fffffe0000b2a3c8 x18: 000003fffdf52710
       x17: 000003ff9d8bb910 x16: fffffe000050fbfc
       x15: 0000000000005735 x14: 000003ff9d7e1a5c
       x13: 0000000000000000 x12: 000003ff9d7e1a5c
       x11: 0000000000000007 x10: fffffe0000c09af0
       x9 : fffffe0000ad1000 x8 : 000000000000005c
       x7 : fffffe03e8624000 x6 : 0000000000000000
       x5 : 0000000000000000 x4 : 0000000000000000
       x3 : fffffe0000c09cc8 x2 : 0000000000000000
       x1 : 000fffffdfffca80 x0 : 000fffffcd742150
    
    The __cpu_flush_kern_tlb_range() function looks like:
    
      ENTRY(__cpu_flush_kern_tlb_range)
    	dsb	sy
    	lsr	x0, x0, #12
    	lsr	x1, x1, #12
      1:	tlbi	vaae1is, x0
    	add	x0, x0, #1
    	cmp	x0, x1
    	b.lo	1b
    	dsb	sy
    	isb
    	ret
      ENDPROC(__cpu_flush_kern_tlb_range)
    
    The above soft lockup shows the PC at tlbi insn with:
    
      x0 = 0x000fffffcd742150
      x1 = 0x000fffffdfffca80
    
    So __cpu_flush_kern_tlb_range has 0x128ba930 tlbi flushes left
    after it has already been looping for 23 seconds!.
    
    Looking up one frame at __purge_vmap_area_lazy(), there is:
    
    	...
    	list_for_each_entry_rcu(va, &amp;vmap_area_list, list) {
    		if (va-&gt;flags &amp; VM_LAZY_FREE) {
    			if (va-&gt;va_start &lt; *start)
    				*start = va-&gt;va_start;
    			if (va-&gt;va_end &gt; *end)
    				*end = va-&gt;va_end;
    			nr += (va-&gt;va_end - va-&gt;va_start) &gt;&gt; PAGE_SHIFT;
    			list_add_tail(&amp;va-&gt;purge_list, &amp;valist);
    			va-&gt;flags |= VM_LAZY_FREEING;
    			va-&gt;flags &amp;= ~VM_LAZY_FREE;
    		}
    	}
    	...
    	if (nr || force_flush)
    		flush_tlb_kernel_range(*start, *end);
    
    So if two areas are being freed, the range passed to
    flush_tlb_kernel_range() may be as large as the vmalloc
    space. For arm64, this is ~240GB for 4k pagesize and ~2TB
    for 64kpage size.
    
    This patch works around this problem by adding a loop limit.
    If the range is larger than the limit, use flush_tlb_all()
    rather than flushing based on individual pages. The limit
    chosen is arbitrary and would be better if based on the
    actual size of the tlb. I looked through the ARM ARM but
    didn&#39;t see any easy way to get the actual tlb size, so for
    now the arbitrary limit is better than the soft lockup.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit 88ccd0e487a20575b4c9610c4df095af47f15d32
Author: Mark Salter &lt;msalter&#64;redhat.com&gt;
Date:   Tue Jun 24 09:50:28 2014 -0400

    arm64: use EFI as last resort for reboot and poweroff
    
    Wire in support for EFI reboot and poweroff functions. We use these
    only if no other mechanism has been registered with arm_pm_reboot
    and/or pm_power_off respectively.
    
    Signed-off-by: Mark Salter &lt;msalter&#64;redhat.com&gt;

commit b99cd7b41a68bdf74034044e53992cb6d60cd5c5
Author: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;
Date:   Fri Jun 13 12:39:55 2014 +0100

    x86/reboot: Add EFI reboot quirk for ACPI Hardware Reduced flag
    
    It appears that the BayTrail-T class of hardware requires EFI in order
    to powerdown and reboot and no other reliable method exists.
    
    This quirk is generally applicable to all hardware that has the ACPI
    Hardware Reduced bit set, since usually ACPI would be the preferred
    method.
    
    Cc: Len Brown &lt;len.brown&#64;intel.com&gt;
    Cc: Mark Salter &lt;msalter&#64;redhat.com&gt;
    Cc: &quot;Rafael J. Wysocki&quot; &lt;rafael.j.wysocki&#64;intel.com&gt;
    Signed-off-by: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;

commit b0a9441c25fc622d21ea838670292886db5e4774
Author: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;
Date:   Fri Jun 13 12:35:21 2014 +0100

    efi/reboot: Allow powering off machines using EFI
    
    Not only can EfiResetSystem() be used to reboot, it can also be used to
    power down machines.
    
    By and large, this functionality doesn&#39;t work very well across the range
    of EFI machines in the wild, so it should definitely only be used as a
    last resort. In an ideal world, this wouldn&#39;t be needed at all.
    
    Unfortunately, we&#39;re starting to see machines where EFI is the *only*
    reliable way to power down, and nothing else, not PCI, not ACPI, works.
    
    efi_poweroff_required() should be implemented on a per-architecture
    basis, since exactly when we should be using EFI runtime services is a
    platform-specific decision. There&#39;s no analogue for reboot because each
    architecture handles reboot very differently - the x86 code in
    particular is pretty complex.
    
    Patches to enable this for specific classes of hardware will be
    submitted separately.
    
    Cc: Mark Salter &lt;msalter&#64;redhat.com&gt;
    Signed-off-by: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;

commit 178be6962ce99a8f97c857acb72382568fad5a09
Author: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;
Date:   Fri Jun 13 12:22:22 2014 +0100

    efi/reboot: Add generic wrapper around EfiResetSystem()
    
    Implement efi_reboot(), which is really just a wrapper around the
    EfiResetSystem() EFI runtime service, but it does at least allow us to
    funnel all callers through a single location.
    
    It also simplifies the callsites since users no longer need to check to
    see whether EFI_RUNTIME_SERVICES are enabled.
    
    Cc: Tony Luck &lt;tony.luck&#64;intel.com&gt;
    Cc: Mark Salter &lt;msalter&#64;redhat.com&gt;
    Signed-off-by: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;

commit 741309a7ffef94dbd1c4c92f2d29efefb2f7d3ea
Author: Saurabh Tangri &lt;saurabh.tangri&#64;intel.com&gt;
Date:   Mon Jun 2 05:18:35 2014 -0700

    x86/efi: Move all workarounds to a separate file quirks.c
    
    Currently, it&#39;s difficult to find all the workarounds that are
    applied when running on EFI, because they&#39;re littered throughout
    various code paths. This change moves all of them into a separate
    file with the hope that it will be come the single location for all
    our well documented quirks.
    
    Signed-off-by: Saurabh Tangri &lt;saurabh.tangri&#64;intel.com&gt;
    Signed-off-by: Matt Fleming &lt;matt.fleming&#64;intel.com&gt;

commit 026545c8ed8737f6686036326a80498ae14d7fe5
Author: Suman Tripathi &lt;stripathi&#64;apm.com&gt;
Date:   Thu Jun 19 06:51:32 2014 -0400

    ata: Fix the dma state machine lockup for the IDENTIFY DEVICE PIO mode command.
    
    This patch fixes the dma state machine lockup due to the processing
    of IDENTIFY DEVICE PIO mode command. The X-Gene AHCI controller
    has an errata in which it cannot clear the BSY bit after
    receiving the PIO setup FIS and results the dma state machine to go
    into the CMFatalErrorUpdate state resulting in the dma state
    machine lockup. This patch also removes the dma restart workaround
    from the read_id function as the read_id function is only called by
    libata layer for ATA_INTERNAL commands. But for somecases eg:
    PORT MULTIPLIER and udev, the framework will enumerate using SCSI
    commands and it will not call read_id function.
    
    Signed-off-by: Loc Ho &lt;lho&#64;apm.com&gt;
    Signed-off-by: Suman Tripathi &lt;stripathi&#64;apm.com&gt;

commit 7750926fa769afc57a2d9ea4491e83b3d3e1e562
Author: Suman Tripathi &lt;stripathi&#64;apm.com&gt;
Date:   Thu Jun 19 06:50:08 2014 -0400

    libahci: Implement the function ahci_restart_engine to restart the port dma engine.
    
    This patch adds an function to restart the port dma engine.
    
    Signed-off-by: Loc Ho &lt;lho&#64;apm.com&gt;
    Signed-off-by: Suman Tripathi &lt;stripathi&#64;apm.com&gt;

commit 1952edc2d9e0236efaf573e11ed194052b893fd6
Author: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
Date:   Fri Jun 20 16:18:16 2014 -0700

    drivers: net: Add APM X-Gene SoC ethernet driver support.
    
    This patch adds network driver for APM X-Gene SoC ethernet.
    
    Signed-off-by: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
    Signed-off-by: Ravi Patel &lt;rapatel&#64;apm.com&gt;
    Signed-off-by: Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;

commit c5f8a2ce5b5ae15e8c68147463a19859a70c7a5b
Author: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
Date:   Fri Jun 20 16:18:15 2014 -0700

    dts: Add bindings for APM X-Gene SoC ethernet driver
    
    This patch adds bindings for APM X-Gene SoC ethernet driver.
    
    Signed-off-by: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
    Signed-off-by: Ravi Patel &lt;rapatel&#64;apm.com&gt;
    Signed-off-by: Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;

commit ea7b7777362958223ca018cea22dba4074df102c
Author: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
Date:   Fri Jun 20 16:18:14 2014 -0700

    Documentation: dts: Add bindings for APM X-Gene SoC ethernet driver
    
    This patch adds documentation for APM X-Gene SoC ethernet DTS binding.
    
    Signed-off-by: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
    Signed-off-by: Ravi Patel &lt;rapatel&#64;apm.com&gt;
    Signed-off-by: Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;

commit f2d2384a3d914cdd6cae7afdf3d6394c157d22b2
Author: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
Date:   Fri Jun 20 16:18:13 2014 -0700

    MAINTAINERS: Add entry for APM X-Gene SoC ethernet driver
    
    This patch adds a MAINTAINERS entry for APM X-Gene SoC
    ethernet driver.
    
    Signed-off-by: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;
    Signed-off-by: Ravi Patel &lt;rapatel&#64;apm.com&gt;
    Signed-off-by: Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;

diff --git a/Documentation/arm64/booting.txt b/Documentation/arm64/booting.txt
index 37fc4f6..e28ccec 100644
<span class="hl kwa">--- a/Documentation/arm64/booting.txt</span>
<span class="hl kwb">+++ b/Documentation/arm64/booting.txt</span>
&#64;&#64; -141,6 +141,12 &#64;&#64; Before jumping into the kernel, the following conditions must be met:
   the kernel image will be entered must be initialised by software at a
   higher exception level to prevent execution in an UNKNOWN state.
 
<span class="hl kwb">+  For systems with a GICv3 interrupt controller, it is expected that:</span>
<span class="hl kwb">+  - If EL3 is present, it must program ICC_SRE_EL3.Enable (bit 3) to</span>
<span class="hl kwb">+    0b1 and ICC_SRE_EL3.SRE (bit 0) to 0b1.</span>
<span class="hl kwb">+  - If the kernel is entered at EL1, EL2 must set ICC_SRE_EL2.Enable</span>
<span class="hl kwb">+    (bit 3) to 0b1 and ICC_SRE_EL2.SRE (bit 0) to 0b1.</span>
<span class="hl kwb">+</span>
 The requirements described above for CPU mode, caches, MMUs, architected
 timers, coherency and system registers apply to all CPUs.  All CPUs must
 enter the kernel in the same exception level.
diff --git a/Documentation/devicetree/bindings/arm/gic-v3.txt b/Documentation/devicetree/bindings/arm/gic-v3.txt
new file mode 100644
index 0000000..33cd05e
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/Documentation/devicetree/bindings/arm/gic-v3.txt</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,79 &#64;&#64;</span>
<span class="hl kwb">+* ARM Generic Interrupt Controller, version 3</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+AArch64 SMP cores are often associated with a GICv3, providing Private</span>
<span class="hl kwb">+Peripheral Interrupts (PPI), Shared Peripheral Interrupts (SPI),</span>
<span class="hl kwb">+Software Generated Interrupts (SGI), and Locality-specific Peripheral</span>
<span class="hl kwb">+Interrupts (LPI).</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Main node required properties:</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- compatible : should at least contain  &quot;arm,gic-v3&quot;.</span>
<span class="hl kwb">+- interrupt-controller : Identifies the node as an interrupt controller</span>
<span class="hl kwb">+- #interrupt-cells : Specifies the number of cells needed to encode an</span>
<span class="hl kwb">+  interrupt source. Must be a single cell with a value of at least 3.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+  The 1st cell is the interrupt type; 0 for SPI interrupts, 1 for PPI</span>
<span class="hl kwb">+  interrupts. Other values are reserved for future use.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+  The 2nd cell contains the interrupt number for the interrupt type.</span>
<span class="hl kwb">+  SPI interrupts are in the range [0-987]. PPI interrupts are in the</span>
<span class="hl kwb">+  range [0-15].</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+  The 3rd cell is the flags, encoded as follows:</span>
<span class="hl kwb">+	bits[3:0] trigger type and level flags.</span>
<span class="hl kwb">+		1 = edge triggered</span>
<span class="hl kwb">+		4 = level triggered</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+  Cells 4 and beyond are reserved for future use. When the 1st cell</span>
<span class="hl kwb">+  has a value of 0 or 1, cells 4 and beyond act as padding, and may be</span>
<span class="hl kwb">+  ignored. It is recommended that padding cells have a value of 0.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- reg : Specifies base physical address(s) and size of the GIC</span>
<span class="hl kwb">+  registers, in the following order:</span>
<span class="hl kwb">+  - GIC Distributor interface (GICD)</span>
<span class="hl kwb">+  - GIC Redistributors (GICR), one range per redistributor region</span>
<span class="hl kwb">+  - GIC CPU interface (GICC)</span>
<span class="hl kwb">+  - GIC Hypervisor interface (GICH)</span>
<span class="hl kwb">+  - GIC Virtual CPU interface (GICV)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+  GICC, GICH and GICV are optional.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- interrupts : Interrupt source of the VGIC maintenance interrupt.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Optional</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- redistributor-stride : If using padding pages, specifies the stride</span>
<span class="hl kwb">+  of consecutive redistributors. Must be a multiple of 64kB.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- #redistributor-regions: The number of independent contiguous regions</span>
<span class="hl kwb">+  occupied by the redistributors. Required if more than one such</span>
<span class="hl kwb">+  region is present.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Examples:</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic: interrupt-controller&#64;2cf00000 {</span>
<span class="hl kwb">+		compatible = &quot;arm,gic-v3&quot;;</span>
<span class="hl kwb">+		#interrupt-cells = &lt;3&gt;;</span>
<span class="hl kwb">+		interrupt-controller;</span>
<span class="hl kwb">+		reg = &lt;0x0 0x2f000000 0 0x10000&gt;,	// GICD</span>
<span class="hl kwb">+		      &lt;0x0 0x2f100000 0 0x200000&gt;,	// GICR</span>
<span class="hl kwb">+		      &lt;0x0 0x2c000000 0 0x2000&gt;,	// GICC</span>
<span class="hl kwb">+		      &lt;0x0 0x2c010000 0 0x2000&gt;,	// GICH</span>
<span class="hl kwb">+		      &lt;0x0 0x2c020000 0 0x2000&gt;;	// GICV</span>
<span class="hl kwb">+		interrupts = &lt;1 9 4&gt;;</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic: interrupt-controller&#64;2c010000 {</span>
<span class="hl kwb">+		compatible = &quot;arm,gic-v3&quot;;</span>
<span class="hl kwb">+		#interrupt-cells = &lt;3&gt;;</span>
<span class="hl kwb">+		interrupt-controller;</span>
<span class="hl kwb">+		redistributor-stride = &lt;0x0 0x40000&gt;;	// 256kB stride</span>
<span class="hl kwb">+		#redistributor-regions = &lt;2&gt;;</span>
<span class="hl kwb">+		reg = &lt;0x0 0x2c010000 0 0x10000&gt;,	// GICD</span>
<span class="hl kwb">+		      &lt;0x0 0x2d000000 0 0x800000&gt;,	// GICR 1: CPUs 0-31</span>
<span class="hl kwb">+		      &lt;0x0 0x2e000000 0 0x800000&gt;;	// GICR 2: CPUs 32-63</span>
<span class="hl kwb">+		      &lt;0x0 0x2c040000 0 0x2000&gt;,	// GICC</span>
<span class="hl kwb">+		      &lt;0x0 0x2c060000 0 0x2000&gt;,	// GICH</span>
<span class="hl kwb">+		      &lt;0x0 0x2c080000 0 0x2000&gt;;	// GICV</span>
<span class="hl kwb">+		interrupts = &lt;1 9 4&gt;;</span>
<span class="hl kwb">+	};</span>
diff --git a/Documentation/devicetree/bindings/net/apm-xgene-enet.txt b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt
new file mode 100644
index 0000000..3e2a295
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/Documentation/devicetree/bindings/net/apm-xgene-enet.txt</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,72 &#64;&#64;</span>
<span class="hl kwb">+APM X-Gene SoC Ethernet nodes</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Ethernet nodes are defined to describe on-chip ethernet interfaces in</span>
<span class="hl kwb">+APM X-Gene SoC.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Required properties:</span>
<span class="hl kwb">+- compatible:		Should be &quot;apm,xgene-enet&quot;</span>
<span class="hl kwb">+- reg: Address and length of the register set for the device. It contains the</span>
<span class="hl kwb">+       information of registers in the same order as described by reg-names</span>
<span class="hl kwb">+- reg-names: Should contain the register set names</span>
<span class="hl kwb">+  &quot;enet_csr&quot;:		Ethernet control and status register address space</span>
<span class="hl kwb">+  &quot;ring_csr&quot;:		Descriptor ring control and status register address space</span>
<span class="hl kwb">+  &quot;ring_cmd&quot;:		Descriptor ring command register address space</span>
<span class="hl kwb">+- interrupts:		Ethernet main interrupt</span>
<span class="hl kwb">+- clocks:		Reference to the clock entry.</span>
<span class="hl kwb">+- local-mac-address:	MAC address assigned to this device</span>
<span class="hl kwb">+- phy-connection-type:	Interface type between ethernet device and PHY device</span>
<span class="hl kwb">+- phy-handle:		Reference to a PHY node connected to this device</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+- mdio: 		Device tree subnode with the following required</span>
<span class="hl kwb">+			properties:</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	- compatible: Must be &quot;apm,xgene-mdio&quot;.</span>
<span class="hl kwb">+	- #address-cells: Must be &lt;1&gt;.</span>
<span class="hl kwb">+	- #size-cells: Must be &lt;0&gt;.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	For the phy on the mdio bus, there must be a node with the following</span>
<span class="hl kwb">+	fields:</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	- compatible: PHY identifier.  Please refer ./phy.txt for the format.</span>
<span class="hl kwb">+	- reg: The ID number for the phy.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Optional properties:</span>
<span class="hl kwb">+- status		: Should be &quot;ok&quot; or &quot;disabled&quot; for enabled/disabled.</span>
<span class="hl kwb">+			  Default is &quot;ok&quot;.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+Example:</span>
<span class="hl kwb">+	menetclk: menetclk {</span>
<span class="hl kwb">+		compatible = &quot;apm,xgene-device-clock&quot;;</span>
<span class="hl kwb">+		clock-output-names = &quot;menetclk&quot;;</span>
<span class="hl kwb">+		status = &quot;ok&quot;;</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	menet: ethernet&#64;17020000 {</span>
<span class="hl kwb">+		compatible = &quot;apm,xgene-enet&quot;;</span>
<span class="hl kwb">+		status = &quot;disabled&quot;;</span>
<span class="hl kwb">+		reg = &lt;0x0 0x17020000 0x0 0xd100&gt;,</span>
<span class="hl kwb">+		      &lt;0x0 0X17030000 0x0 0X400&gt;,</span>
<span class="hl kwb">+		      &lt;0x0 0X10000000 0x0 0X200&gt;;</span>
<span class="hl kwb">+		reg-names = &quot;enet_csr&quot;, &quot;ring_csr&quot;, &quot;ring_cmd&quot;;</span>
<span class="hl kwb">+		interrupts = &lt;0x0 0x3c 0x4&gt;;</span>
<span class="hl kwb">+		clocks = &lt;&amp;menetclk 0&gt;;</span>
<span class="hl kwb">+		local-mac-address = [00 01 73 00 00 01];</span>
<span class="hl kwb">+		phy-connection-type = &quot;rgmii&quot;;</span>
<span class="hl kwb">+		phy-handle = &lt;&amp;menetphy&gt;;</span>
<span class="hl kwb">+		mdio {</span>
<span class="hl kwb">+			compatible = &quot;apm,xgene-mdio&quot;;</span>
<span class="hl kwb">+			#address-cells = &lt;1&gt;;</span>
<span class="hl kwb">+			#size-cells = &lt;0&gt;;</span>
<span class="hl kwb">+			menetphy: menetphy&#64;3 {</span>
<span class="hl kwb">+				compatible = &quot;ethernet-phy-id001c.c915&quot;;</span>
<span class="hl kwb">+				reg = &lt;0x3&gt;;</span>
<span class="hl kwb">+			};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		};</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Board-specific peripheral configurations */</span>
<span class="hl kwb">+&amp;menet {</span>
<span class="hl kwb">+        status = &quot;ok&quot;;</span>
<span class="hl kwb">+};</span>
diff --git a/MAINTAINERS b/MAINTAINERS
index 702ca10..5ce8e87 100644
<span class="hl kwa">--- a/MAINTAINERS</span>
<span class="hl kwb">+++ b/MAINTAINERS</span>
&#64;&#64; -700,6 +700,14 &#64;&#64; S:	Maintained
 F:	drivers/net/appletalk/
 F:	net/appletalk/
 
<span class="hl kwb">+APPLIED MICRO (APM) X-GENE SOC ETHERNET DRIVER</span>
<span class="hl kwb">+M:	Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+M:	Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;</span>
<span class="hl kwb">+M:	Ravi Patel &lt;rapatel&#64;apm.com&gt;</span>
<span class="hl kwb">+S:	Supported</span>
<span class="hl kwb">+F:	drivers/net/ethernet/apm/xgene/</span>
<span class="hl kwb">+F:	Documentation/devicetree/bindings/net/apm-xgene-enet.txt</span>
<span class="hl kwb">+</span>
 APTINA CAMERA SENSOR PLL
 M:	Laurent Pinchart &lt;Laurent.pinchart&#64;ideasonboard.com&gt;
 L:	linux-media&#64;vger.kernel.org
diff --git a/arch/arm/include/asm/kvm_host.h b/arch/arm/include/asm/kvm_host.h
index 193ceaf..d6d5227 100644
<span class="hl kwa">--- a/arch/arm/include/asm/kvm_host.h</span>
<span class="hl kwb">+++ b/arch/arm/include/asm/kvm_host.h</span>
&#64;&#64; -225,6 +225,11 &#64;&#64; static inline int kvm_arch_dev_ioctl_check_extension(long ext)
 	return 0;
 }
 
<span class="hl kwb">+static inline void vgic_arch_setup(const struct vgic_params *vgic)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	BUG_ON(vgic-&gt;type != VGIC_V2);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
 int kvm_perf_init(void);
 int kvm_perf_teardown(void);
 
diff --git a/arch/arm/kernel/asm-offsets.c b/arch/arm/kernel/asm-offsets.c
index 85598b5..713e807 100644
<span class="hl kwa">--- a/arch/arm/kernel/asm-offsets.c</span>
<span class="hl kwb">+++ b/arch/arm/kernel/asm-offsets.c</span>
&#64;&#64; -182,13 +182,13 &#64;&#64; int main(void)
   DEFINE(VCPU_HYP_PC,		offsetof(struct kvm_vcpu, arch.fault.hyp_pc));
 #ifdef CONFIG_KVM_ARM_VGIC
   DEFINE(VCPU_VGIC_CPU,		offsetof(struct kvm_vcpu, arch.vgic_cpu));
<span class="hl kwa">-  DEFINE(VGIC_CPU_HCR,		offsetof(struct vgic_cpu, vgic_hcr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_VMCR,		offsetof(struct vgic_cpu, vgic_vmcr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_MISR,		offsetof(struct vgic_cpu, vgic_misr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_EISR,		offsetof(struct vgic_cpu, vgic_eisr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_ELRSR,	offsetof(struct vgic_cpu, vgic_elrsr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_APR,		offsetof(struct vgic_cpu, vgic_apr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_LR,		offsetof(struct vgic_cpu, vgic_lr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_HCR,	offsetof(struct vgic_cpu, vgic_v2.vgic_hcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_VMCR,	offsetof(struct vgic_cpu, vgic_v2.vgic_vmcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_MISR,	offsetof(struct vgic_cpu, vgic_v2.vgic_misr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_EISR,	offsetof(struct vgic_cpu, vgic_v2.vgic_eisr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_ELRSR,	offsetof(struct vgic_cpu, vgic_v2.vgic_elrsr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_APR,	offsetof(struct vgic_cpu, vgic_v2.vgic_apr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_LR,	offsetof(struct vgic_cpu, vgic_v2.vgic_lr));</span>
   DEFINE(VGIC_CPU_NR_LR,	offsetof(struct vgic_cpu, nr_lr));
 #ifdef CONFIG_KVM_ARM_TIMER
   DEFINE(VCPU_TIMER_CNTV_CTL,	offsetof(struct kvm_vcpu, arch.timer_cpu.cntv_ctl));
diff --git a/arch/arm/kvm/Makefile b/arch/arm/kvm/Makefile
index 789bca9..f7057ed 100644
<span class="hl kwa">--- a/arch/arm/kvm/Makefile</span>
<span class="hl kwb">+++ b/arch/arm/kvm/Makefile</span>
&#64;&#64; -21,4 +21,5 &#64;&#64; obj-y += kvm-arm.o init.o interrupts.o
 obj-y += arm.o handle_exit.o guest.o mmu.o emulate.o reset.o
 obj-y += coproc.o coproc_a15.o coproc_a7.o mmio.o psci.o perf.o
 obj-$(CONFIG_KVM_ARM_VGIC) += $(KVM)/arm/vgic.o
<span class="hl kwb">+obj-$(CONFIG_KVM_ARM_VGIC) += $(KVM)/arm/vgic-v2.o</span>
 obj-$(CONFIG_KVM_ARM_TIMER) += $(KVM)/arm/arch_timer.o
diff --git a/arch/arm/kvm/interrupts_head.S b/arch/arm/kvm/interrupts_head.S
index 76af9302..e4eaf30 100644
<span class="hl kwa">--- a/arch/arm/kvm/interrupts_head.S</span>
<span class="hl kwb">+++ b/arch/arm/kvm/interrupts_head.S</span>
&#64;&#64; -421,14 +421,14 &#64;&#64; vcpu	.req	r0		&#64; vcpu pointer always in r0
 	ldr	r9, [r2, #GICH_ELRSR1]
 	ldr	r10, [r2, #GICH_APR]
 
<span class="hl kwa">-	str	r3, [r11, #VGIC_CPU_HCR]</span>
<span class="hl kwa">-	str	r4, [r11, #VGIC_CPU_VMCR]</span>
<span class="hl kwa">-	str	r5, [r11, #VGIC_CPU_MISR]</span>
<span class="hl kwa">-	str	r6, [r11, #VGIC_CPU_EISR]</span>
<span class="hl kwa">-	str	r7, [r11, #(VGIC_CPU_EISR + 4)]</span>
<span class="hl kwa">-	str	r8, [r11, #VGIC_CPU_ELRSR]</span>
<span class="hl kwa">-	str	r9, [r11, #(VGIC_CPU_ELRSR + 4)]</span>
<span class="hl kwa">-	str	r10, [r11, #VGIC_CPU_APR]</span>
<span class="hl kwb">+	str	r3, [r11, #VGIC_V2_CPU_HCR]</span>
<span class="hl kwb">+	str	r4, [r11, #VGIC_V2_CPU_VMCR]</span>
<span class="hl kwb">+	str	r5, [r11, #VGIC_V2_CPU_MISR]</span>
<span class="hl kwb">+	str	r6, [r11, #VGIC_V2_CPU_EISR]</span>
<span class="hl kwb">+	str	r7, [r11, #(VGIC_V2_CPU_EISR + 4)]</span>
<span class="hl kwb">+	str	r8, [r11, #VGIC_V2_CPU_ELRSR]</span>
<span class="hl kwb">+	str	r9, [r11, #(VGIC_V2_CPU_ELRSR + 4)]</span>
<span class="hl kwb">+	str	r10, [r11, #VGIC_V2_CPU_APR]</span>
 
 	/* Clear GICH_HCR */
 	mov	r5, #0
&#64;&#64; -436,7 +436,7 &#64;&#64; vcpu	.req	r0		&#64; vcpu pointer always in r0
 
 	/* Save list registers */
 	add	r2, r2, #GICH_LR0
<span class="hl kwa">-	add	r3, r11, #VGIC_CPU_LR</span>
<span class="hl kwb">+	add	r3, r11, #VGIC_V2_CPU_LR</span>
 	ldr	r4, [r11, #VGIC_CPU_NR_LR]
 1:	ldr	r6, [r2], #4
 	str	r6, [r3], #4
&#64;&#64; -463,9 +463,9 &#64;&#64; vcpu	.req	r0		&#64; vcpu pointer always in r0
 	add	r11, vcpu, #VCPU_VGIC_CPU
 
 	/* We only restore a minimal set of registers */
<span class="hl kwa">-	ldr	r3, [r11, #VGIC_CPU_HCR]</span>
<span class="hl kwa">-	ldr	r4, [r11, #VGIC_CPU_VMCR]</span>
<span class="hl kwa">-	ldr	r8, [r11, #VGIC_CPU_APR]</span>
<span class="hl kwb">+	ldr	r3, [r11, #VGIC_V2_CPU_HCR]</span>
<span class="hl kwb">+	ldr	r4, [r11, #VGIC_V2_CPU_VMCR]</span>
<span class="hl kwb">+	ldr	r8, [r11, #VGIC_V2_CPU_APR]</span>
 
 	str	r3, [r2, #GICH_HCR]
 	str	r4, [r2, #GICH_VMCR]
&#64;&#64; -473,7 +473,7 &#64;&#64; vcpu	.req	r0		&#64; vcpu pointer always in r0
 
 	/* Restore list registers */
 	add	r2, r2, #GICH_LR0
<span class="hl kwa">-	add	r3, r11, #VGIC_CPU_LR</span>
<span class="hl kwb">+	add	r3, r11, #VGIC_V2_CPU_LR</span>
 	ldr	r4, [r11, #VGIC_CPU_NR_LR]
 1:	ldr	r6, [r3], #4
 	str	r6, [r2], #4
diff --git a/arch/arm64/Kconfig b/arch/arm64/Kconfig
index a474de34..7fc6e2e 100644
<span class="hl kwa">--- a/arch/arm64/Kconfig</span>
<span class="hl kwb">+++ b/arch/arm64/Kconfig</span>
&#64;&#64; -10,6 +10,7 &#64;&#64; config ARM64
 	select ARM_AMBA
 	select ARM_ARCH_TIMER
 	select ARM_GIC
<span class="hl kwb">+	select ARM_GIC_V3</span>
 	select BUILDTIME_EXTABLE_SORT
 	select CLONE_BACKWARDS
 	select COMMON_CLK
diff --git a/arch/arm64/boot/dts/apm-mustang.dts b/arch/arm64/boot/dts/apm-mustang.dts
index 6541962..b2f5622 100644
<span class="hl kwa">--- a/arch/arm64/boot/dts/apm-mustang.dts</span>
<span class="hl kwb">+++ b/arch/arm64/boot/dts/apm-mustang.dts</span>
<span class="hl kwd">&#64;&#64; -28,3 +28,7 &#64;&#64;</span>
 &amp;serial0 {
 	status = &quot;ok&quot;;
 };
<span class="hl kwb">+</span>
<span class="hl kwb">+&amp;menet {</span>
<span class="hl kwb">+	status = &quot;ok&quot;;</span>
<span class="hl kwb">+};</span>
diff --git a/arch/arm64/boot/dts/apm-storm.dtsi b/arch/arm64/boot/dts/apm-storm.dtsi
index 40aa96c..846ee3a 100644
<span class="hl kwa">--- a/arch/arm64/boot/dts/apm-storm.dtsi</span>
<span class="hl kwb">+++ b/arch/arm64/boot/dts/apm-storm.dtsi</span>
<span class="hl kwd">&#64;&#64; -24,56 +24,56 &#64;&#64;</span>
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x000&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;001 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x001&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;100 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x100&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;101 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x101&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;200 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x200&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;201 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x201&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;300 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x300&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 		cpu&#64;301 {
 			device_type = &quot;cpu&quot;;
 			compatible = &quot;apm,potenza&quot;, &quot;arm,armv8&quot;;
 			reg = &lt;0x0 0x301&gt;;
 			enable-method = &quot;spin-table&quot;;
<span class="hl kwa">-			cpu-release-addr = &lt;0x1 0x0000fff8&gt;;</span>
<span class="hl kwb">+			cpu-release-addr = &lt;0x40 0x0000f000&gt;;</span>
 		};
 	};
 
<span class="hl kwd">&#64;&#64; -97,6 +97,11 &#64;&#64;</span>
 		clock-frequency = &lt;50000000&gt;;
 	};
 
<span class="hl kwb">+	pmu {</span>
<span class="hl kwb">+		compatible = &quot;arm,armv8-pmuv3&quot;;</span>
<span class="hl kwb">+		interrupts = &lt;1 12 0xff04&gt;;</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+</span>
 	soc {
 		compatible = &quot;simple-bus&quot;;
 		#address-cells = &lt;2&gt;;
<span class="hl kwd">&#64;&#64; -167,14 +172,13 &#64;&#64;</span>
 				clock-output-names = &quot;ethclk&quot;;
 			};
 
<span class="hl kwa">-			eth8clk: eth8clk {</span>
<span class="hl kwb">+			menetclk: menetclk {</span>
 				compatible = &quot;apm,xgene-device-clock&quot;;
 				#clock-cells = &lt;1&gt;;
 				clocks = &lt;&amp;ethclk 0&gt;;
<span class="hl kwa">-				clock-names = &quot;eth8clk&quot;;</span>
 				reg = &lt;0x0 0x1702C000 0x0 0x1000&gt;;
 				reg-names = &quot;csr-reg&quot;;
<span class="hl kwa">-				clock-output-names = &quot;eth8clk&quot;;</span>
<span class="hl kwb">+				clock-output-names = &quot;menetclk&quot;;</span>
 			};
 
 			sataphy1clk: sataphy1clk&#64;1f21c000 {
<span class="hl kwd">&#64;&#64; -278,7 +282,7 &#64;&#64;</span>
 			compatible = &quot;ns16550a&quot;;
 			reg = &lt;0 0x1c020000 0x0 0x1000&gt;;
 			reg-shift = &lt;2&gt;;
<span class="hl kwa">-			clock-frequency = &lt;10000000&gt;; /* Updated by bootloader */</span>
<span class="hl kwb">+			clock-frequency = &lt;50000000&gt;; /* Updated by bootloader */</span>
 			interrupt-parent = &lt;&amp;gic&gt;;
 			interrupts = &lt;0x0 0x4c 0x4&gt;;
 		};
<span class="hl kwd">&#64;&#64; -397,5 +401,30 &#64;&#64;</span>
 			#clock-cells = &lt;1&gt;;
 			clocks = &lt;&amp;rtcclk 0&gt;;
 		};
<span class="hl kwb">+</span>
<span class="hl kwb">+		menet: ethernet&#64;17020000 {</span>
<span class="hl kwb">+			compatible = &quot;apm,xgene-enet&quot;;</span>
<span class="hl kwb">+			status = &quot;disabled&quot;;</span>
<span class="hl kwb">+			reg = &lt;0x0 0x17020000 0x0 0xd100&gt;,</span>
<span class="hl kwb">+			      &lt;0x0 0X17030000 0x0 0X400&gt;,</span>
<span class="hl kwb">+			      &lt;0x0 0X10000000 0x0 0X200&gt;;</span>
<span class="hl kwb">+			reg-names = &quot;enet_csr&quot;, &quot;ring_csr&quot;, &quot;ring_cmd&quot;;</span>
<span class="hl kwb">+			interrupts = &lt;0x0 0x3c 0x4&gt;;</span>
<span class="hl kwb">+			dma-coherent;</span>
<span class="hl kwb">+			clocks = &lt;&amp;menetclk 0&gt;;</span>
<span class="hl kwb">+			local-mac-address = [00 00 00 00 00 00];</span>
<span class="hl kwb">+			phy-connection-type = &quot;rgmii&quot;;</span>
<span class="hl kwb">+			phy-handle = &lt;&amp;menetphy&gt;;</span>
<span class="hl kwb">+			mdio {</span>
<span class="hl kwb">+				compatible = &quot;apm,xgene-mdio&quot;;</span>
<span class="hl kwb">+				#address-cells = &lt;1&gt;;</span>
<span class="hl kwb">+				#size-cells = &lt;0&gt;;</span>
<span class="hl kwb">+				menetphy: menetphy&#64;3 {</span>
<span class="hl kwb">+					compatible = &quot;ethernet-phy-id001c.c915&quot;;</span>
<span class="hl kwb">+					reg = &lt;0x3&gt;;</span>
<span class="hl kwb">+				};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+			};</span>
<span class="hl kwb">+		};</span>
 	};
 };
diff --git a/arch/arm64/include/asm/elf.h b/arch/arm64/include/asm/elf.h
index 01d3aab..8186df6 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/elf.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/elf.h</span>
&#64;&#64; -114,7 +114,8 &#64;&#64; typedef struct user_fpsimd_state elf_fpregset_t;
  */
 #define elf_check_arch(x)		((x)-&gt;e_machine == EM_AARCH64)
 
<span class="hl kwa">-#define elf_read_implies_exec(ex,stk)	(stk != EXSTACK_DISABLE_X)</span>
<span class="hl kwb">+#define elf_read_implies_exec(ex,stk)	(test_thread_flag(TIF_32BIT) \</span>
<span class="hl kwb">+					 ? (stk == EXSTACK_ENABLE_X) : 0)</span>
 
 #define CORE_DUMP_USE_REGSET
 #define ELF_EXEC_PAGESIZE	PAGE_SIZE
diff --git a/arch/arm64/include/asm/kvm_arm.h b/arch/arm64/include/asm/kvm_arm.h
index 3d69030..cc83520 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/kvm_arm.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/kvm_arm.h</span>
<span class="hl kwd">&#64;&#64; -76,9 +76,10 &#64;&#64;</span>
  */
 #define HCR_GUEST_FLAGS (HCR_TSC | HCR_TSW | HCR_TWE | HCR_TWI | HCR_VM | \
 			 HCR_TVM | HCR_BSU_IS | HCR_FB | HCR_TAC | \
<span class="hl kwa">-			 HCR_AMO | HCR_IMO | HCR_FMO | \</span>
<span class="hl kwa">-			 HCR_SWIO | HCR_TIDCP | HCR_RW)</span>
<span class="hl kwb">+			 HCR_AMO | HCR_SWIO | HCR_TIDCP | HCR_RW)</span>
 #define HCR_VIRT_EXCP_MASK (HCR_VA | HCR_VI | HCR_VF)
<span class="hl kwb">+#define HCR_INT_OVERRIDE   (HCR_FMO | HCR_IMO)</span>
<span class="hl kwb">+</span>
 
 /* Hyp System Control Register (SCTLR_EL2) bits */
 #define SCTLR_EL2_EE	(1 &lt;&lt; 25)
diff --git a/arch/arm64/include/asm/kvm_asm.h b/arch/arm64/include/asm/kvm_asm.h
index 9fcd54b..a28c35b 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/kvm_asm.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/kvm_asm.h</span>
<span class="hl kwd">&#64;&#64; -18,6 +18,8 &#64;&#64;</span>
 #ifndef __ARM_KVM_ASM_H__
 #define __ARM_KVM_ASM_H__
 
<span class="hl kwb">+#include &lt;asm/virt.h&gt;</span>
<span class="hl kwb">+</span>
 /*
  * 0 is reserved as an invalid value.
  * Order *must* be kept in sync with the hyp switch code.
&#64;&#64; -96,13 +98,21 &#64;&#64; extern char __kvm_hyp_init_end[];
 
 extern char __kvm_hyp_vector[];
 
<span class="hl kwa">-extern char __kvm_hyp_code_start[];</span>
<span class="hl kwa">-extern char __kvm_hyp_code_end[];</span>
<span class="hl kwb">+#define	__kvm_hyp_code_start	__hyp_text_start</span>
<span class="hl kwb">+#define	__kvm_hyp_code_end	__hyp_text_end</span>
 
 extern void __kvm_flush_vm_context(void);
 extern void __kvm_tlb_flush_vmid_ipa(struct kvm *kvm, phys_addr_t ipa);
 
 extern int __kvm_vcpu_run(struct kvm_vcpu *vcpu);
<span class="hl kwb">+</span>
<span class="hl kwb">+extern u64 __vgic_v3_get_ich_vtr_el2(void);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+extern char __save_vgic_v2_state[];</span>
<span class="hl kwb">+extern char __restore_vgic_v2_state[];</span>
<span class="hl kwb">+extern char __save_vgic_v3_state[];</span>
<span class="hl kwb">+extern char __restore_vgic_v3_state[];</span>
<span class="hl kwb">+</span>
 #endif
 
 #endif /* __ARM_KVM_ASM_H__ */
diff --git a/arch/arm64/include/asm/kvm_host.h b/arch/arm64/include/asm/kvm_host.h
index 92242ce..4ae9213 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/kvm_host.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/kvm_host.h</span>
&#64;&#64; -200,4 +200,32 &#64;&#64; static inline void __cpu_init_hyp_mode(phys_addr_t boot_pgd_ptr,
 		     hyp_stack_ptr, vector_ptr);
 }
 
<span class="hl kwb">+struct vgic_sr_vectors {</span>
<span class="hl kwb">+	void	*save_vgic;</span>
<span class="hl kwb">+	void	*restore_vgic;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void vgic_arch_setup(const struct vgic_params *vgic)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	extern struct vgic_sr_vectors __vgic_sr_vectors;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch(vgic-&gt;type)</span>
<span class="hl kwb">+	{</span>
<span class="hl kwb">+	case VGIC_V2:</span>
<span class="hl kwb">+		__vgic_sr_vectors.save_vgic	= __save_vgic_v2_state;</span>
<span class="hl kwb">+		__vgic_sr_vectors.restore_vgic	= __restore_vgic_v2_state;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifdef CONFIG_ARM_GIC_V3</span>
<span class="hl kwb">+	case VGIC_V3:</span>
<span class="hl kwb">+		__vgic_sr_vectors.save_vgic	= __save_vgic_v3_state;</span>
<span class="hl kwb">+		__vgic_sr_vectors.restore_vgic	= __restore_vgic_v3_state;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		BUG();</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
 #endif /* __ARM64_KVM_HOST_H__ */
diff --git a/arch/arm64/include/asm/tlbflush.h b/arch/arm64/include/asm/tlbflush.h
index b9349c4..e0f37ef 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/tlbflush.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/tlbflush.h</span>
&#64;&#64; -98,8 +98,8 &#64;&#64; static inline void flush_tlb_page(struct vm_area_struct *vma,
 	dsb(ish);
 }
 
<span class="hl kwa">-static inline void flush_tlb_range(struct vm_area_struct *vma,</span>
<span class="hl kwa">-					unsigned long start, unsigned long end)</span>
<span class="hl kwb">+static inline void __flush_tlb_range(struct vm_area_struct *vma,</span>
<span class="hl kwb">+				     unsigned long start, unsigned long end)</span>
 {
 	unsigned long asid = (unsigned long)ASID(vma-&gt;vm_mm) &lt;&lt; 48;
 	unsigned long addr;
&#64;&#64; -112,7 +112,9 &#64;&#64; static inline void flush_tlb_range(struct vm_area_struct *vma,
 	dsb(ish);
 }
 
<span class="hl kwa">-static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end)</span>
<span class="hl kwb">+#define MAX_TLB_LOOP 128</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void __flush_tlb_kernel_range(unsigned long start, unsigned long end)</span>
 {
 	unsigned long addr;
 	start &gt;&gt;= 12;
&#64;&#64; -124,6 +126,23 &#64;&#64; static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end
 	dsb(ish);
 }
 
<span class="hl kwb">+static inline void flush_tlb_range(struct vm_area_struct *vma,</span>
<span class="hl kwb">+				   unsigned long start, unsigned long end)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (((end - start) &gt;&gt; PAGE_SHIFT) &lt; MAX_TLB_LOOP)</span>
<span class="hl kwb">+		__flush_tlb_range(vma, start, end);</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		flush_tlb_mm(vma-&gt;vm_mm);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void flush_tlb_kernel_range(unsigned long start, unsigned long end)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (((end - start) &gt;&gt; PAGE_SHIFT) &lt; MAX_TLB_LOOP)</span>
<span class="hl kwb">+		__flush_tlb_kernel_range(start, end);</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		flush_tlb_all();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
 /*
  * On AArch64, the cache coherency is handled via the set_pte_at() function.
  */
diff --git a/arch/arm64/include/asm/virt.h b/arch/arm64/include/asm/virt.h
index 215ad46..7a5df52 100644
<span class="hl kwa">--- a/arch/arm64/include/asm/virt.h</span>
<span class="hl kwb">+++ b/arch/arm64/include/asm/virt.h</span>
&#64;&#64; -50,6 +50,10 &#64;&#64; static inline bool is_hyp_mode_mismatched(void)
 	return __boot_cpu_mode[0] != __boot_cpu_mode[1];
 }
 
<span class="hl kwb">+/* The section containing the hypervisor text */</span>
<span class="hl kwb">+extern char __hyp_text_start[];</span>
<span class="hl kwb">+extern char __hyp_text_end[];</span>
<span class="hl kwb">+</span>
 #endif /* __ASSEMBLY__ */
 
 #endif /* ! __ASM__VIRT_H */
diff --git a/arch/arm64/kernel/asm-offsets.c b/arch/arm64/kernel/asm-offsets.c
index 646f888..e74654c 100644
<span class="hl kwa">--- a/arch/arm64/kernel/asm-offsets.c</span>
<span class="hl kwb">+++ b/arch/arm64/kernel/asm-offsets.c</span>
&#64;&#64; -129,13 +129,24 &#64;&#64; int main(void)
   DEFINE(KVM_TIMER_ENABLED,	offsetof(struct kvm, arch.timer.enabled));
   DEFINE(VCPU_KVM,		offsetof(struct kvm_vcpu, kvm));
   DEFINE(VCPU_VGIC_CPU,		offsetof(struct kvm_vcpu, arch.vgic_cpu));
<span class="hl kwa">-  DEFINE(VGIC_CPU_HCR,		offsetof(struct vgic_cpu, vgic_hcr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_VMCR,		offsetof(struct vgic_cpu, vgic_vmcr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_MISR,		offsetof(struct vgic_cpu, vgic_misr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_EISR,		offsetof(struct vgic_cpu, vgic_eisr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_ELRSR,	offsetof(struct vgic_cpu, vgic_elrsr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_APR,		offsetof(struct vgic_cpu, vgic_apr));</span>
<span class="hl kwa">-  DEFINE(VGIC_CPU_LR,		offsetof(struct vgic_cpu, vgic_lr));</span>
<span class="hl kwb">+  DEFINE(VGIC_SAVE_FN,		offsetof(struct vgic_sr_vectors, save_vgic));</span>
<span class="hl kwb">+  DEFINE(VGIC_RESTORE_FN,	offsetof(struct vgic_sr_vectors, restore_vgic));</span>
<span class="hl kwb">+  DEFINE(VGIC_SR_VECTOR_SZ,	sizeof(struct vgic_sr_vectors));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_HCR,	offsetof(struct vgic_cpu, vgic_v2.vgic_hcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_VMCR,	offsetof(struct vgic_cpu, vgic_v2.vgic_vmcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_MISR,	offsetof(struct vgic_cpu, vgic_v2.vgic_misr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_EISR,	offsetof(struct vgic_cpu, vgic_v2.vgic_eisr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_ELRSR,	offsetof(struct vgic_cpu, vgic_v2.vgic_elrsr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_APR,	offsetof(struct vgic_cpu, vgic_v2.vgic_apr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V2_CPU_LR,	offsetof(struct vgic_cpu, vgic_v2.vgic_lr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_HCR,	offsetof(struct vgic_cpu, vgic_v3.vgic_hcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_VMCR,	offsetof(struct vgic_cpu, vgic_v3.vgic_vmcr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_MISR,	offsetof(struct vgic_cpu, vgic_v3.vgic_misr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_EISR,	offsetof(struct vgic_cpu, vgic_v3.vgic_eisr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_ELRSR,	offsetof(struct vgic_cpu, vgic_v3.vgic_elrsr));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_AP0R,	offsetof(struct vgic_cpu, vgic_v3.vgic_ap0r));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_AP1R,	offsetof(struct vgic_cpu, vgic_v3.vgic_ap1r));</span>
<span class="hl kwb">+  DEFINE(VGIC_V3_CPU_LR,	offsetof(struct vgic_cpu, vgic_v3.vgic_lr));</span>
   DEFINE(VGIC_CPU_NR_LR,	offsetof(struct vgic_cpu, nr_lr));
   DEFINE(KVM_VTTBR,		offsetof(struct kvm, arch.vttbr));
   DEFINE(KVM_VGIC_VCTRL,	offsetof(struct kvm, arch.vgic.vctrl_base));
diff --git a/arch/arm64/kernel/efi.c b/arch/arm64/kernel/efi.c
index 14db1f6..453b7f8 100644
<span class="hl kwa">--- a/arch/arm64/kernel/efi.c</span>
<span class="hl kwb">+++ b/arch/arm64/kernel/efi.c</span>
&#64;&#64; -467,3 +467,14 &#64;&#64; static int __init arm64_enter_virtual_mode(void)
 	return 0;
 }
 early_initcall(arm64_enter_virtual_mode);
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * If nothing else is handling pm_power_off, use EFI</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This is called from a late_initcall after other mechanisms</span>
<span class="hl kwb">+ * have had a chance to register a handler.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+bool efi_poweroff_required(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return pm_power_off == NULL;</span>
<span class="hl kwb">+}</span>
diff --git a/arch/arm64/kernel/head.S b/arch/arm64/kernel/head.S
index a96d3a6..871b4ee 100644
<span class="hl kwa">--- a/arch/arm64/kernel/head.S</span>
<span class="hl kwb">+++ b/arch/arm64/kernel/head.S</span>
<span class="hl kwd">&#64;&#64; -22,6 +22,7 &#64;&#64;</span>
 
 #include &lt;linux/linkage.h&gt;
 #include &lt;linux/init.h&gt;
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic-v3.h&gt;</span>
 
 #include &lt;asm/assembler.h&gt;
 #include &lt;asm/ptrace.h&gt;
&#64;&#64; -296,6 +297,23 &#64;&#64; CPU_LE(	bic	x0, x0, #(3 &lt;&lt; 24)	)	// Clear the EE and E0E bits for EL1
 	msr	cnthctl_el2, x0
 	msr	cntvoff_el2, xzr		// Clear virtual offset
 
<span class="hl kwb">+#ifdef CONFIG_ARM_GIC_V3</span>
<span class="hl kwb">+	/* GICv3 system register access */</span>
<span class="hl kwb">+	mrs	x0, id_aa64pfr0_el1</span>
<span class="hl kwb">+	ubfx	x0, x0, #24, #4</span>
<span class="hl kwb">+	cmp	x0, #1</span>
<span class="hl kwb">+	b.ne	3f</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mrs	x0, ICC_SRE_EL2</span>
<span class="hl kwb">+	orr	x0, x0, #1			// Set ICC_SRE_EL2.SRE==1</span>
<span class="hl kwb">+	orr	x0, x0, #(1 &lt;&lt; 3)		// Set ICC_SRE_EL2.Enable==1</span>
<span class="hl kwb">+	msr	ICC_SRE_EL2, x0</span>
<span class="hl kwb">+	isb					// Make sure SRE is now 1</span>
<span class="hl kwb">+	msr	ICH_HCR_EL2, xzr		// Reset ICC_HCR_EL2 to defaults</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+3:</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+</span>
 	/* Populate ID registers. */
 	mrs	x0, midr_el1
 	mrs	x1, mpidr_el1
diff --git a/arch/arm64/kernel/hyp-stub.S b/arch/arm64/kernel/hyp-stub.S
index 0959611..a272f33 100644
<span class="hl kwa">--- a/arch/arm64/kernel/hyp-stub.S</span>
<span class="hl kwb">+++ b/arch/arm64/kernel/hyp-stub.S</span>
<span class="hl kwd">&#64;&#64; -19,6 +19,7 &#64;&#64;</span>
 
 #include &lt;linux/init.h&gt;
 #include &lt;linux/linkage.h&gt;
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic-v3.h&gt;</span>
 
 #include &lt;asm/assembler.h&gt;
 #include &lt;asm/ptrace.h&gt;
diff --git a/arch/arm64/kernel/process.c b/arch/arm64/kernel/process.c
index 43b7c34..ec5cbbe 100644
<span class="hl kwa">--- a/arch/arm64/kernel/process.c</span>
<span class="hl kwb">+++ b/arch/arm64/kernel/process.c</span>
<span class="hl kwd">&#64;&#64; -43,6 +43,7 &#64;&#64;</span>
 #include &lt;linux/hw_breakpoint.h&gt;
 #include &lt;linux/personality.h&gt;
 #include &lt;linux/notifier.h&gt;
<span class="hl kwb">+#include &lt;linux/efi.h&gt;</span>
 
 #include &lt;asm/compat.h&gt;
 #include &lt;asm/cacheflush.h&gt;
&#64;&#64; -176,6 +177,11 &#64;&#64; void machine_restart(char *cmd)
 		arm_pm_restart(reboot_mode, cmd);
 
 	/*
<span class="hl kwb">+	 * If all else fails, try EFI</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	efi_reboot(reboot_mode, cmd);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
 	 * Whoops - the architecture was unable to reboot.
 	 */
 	printk(&quot;Reboot failed -- System halted\n&quot;);
diff --git a/arch/arm64/kvm/Makefile b/arch/arm64/kvm/Makefile
index 72a9fd5..32a0961 100644
<span class="hl kwa">--- a/arch/arm64/kvm/Makefile</span>
<span class="hl kwb">+++ b/arch/arm64/kvm/Makefile</span>
&#64;&#64; -20,4 +20,8 &#64;&#64; kvm-$(CONFIG_KVM_ARM_HOST) += hyp.o hyp-init.o handle_exit.o
 kvm-$(CONFIG_KVM_ARM_HOST) += guest.o reset.o sys_regs.o sys_regs_generic_v8.o
 
 kvm-$(CONFIG_KVM_ARM_VGIC) += $(KVM)/arm/vgic.o
<span class="hl kwb">+kvm-$(CONFIG_KVM_ARM_VGIC) += $(KVM)/arm/vgic-v2.o</span>
<span class="hl kwb">+kvm-$(CONFIG_KVM_ARM_VGIC) += vgic-v2-switch.o</span>
<span class="hl kwb">+kvm-$(CONFIG_KVM_ARM_VGIC) += $(KVM)/arm/vgic-v3.o</span>
<span class="hl kwb">+kvm-$(CONFIG_KVM_ARM_VGIC) += vgic-v3-switch.o</span>
 kvm-$(CONFIG_KVM_ARM_TIMER) += $(KVM)/arm/arch_timer.o
diff --git a/arch/arm64/kvm/hyp.S b/arch/arm64/kvm/hyp.S
index b0d1512..5945f3b 100644
<span class="hl kwa">--- a/arch/arm64/kvm/hyp.S</span>
<span class="hl kwb">+++ b/arch/arm64/kvm/hyp.S</span>
<span class="hl kwd">&#64;&#64; -16,7 +16,6 &#64;&#64;</span>
  */
 
 #include &lt;linux/linkage.h&gt;
<span class="hl kwa">-#include &lt;linux/irqchip/arm-gic.h&gt;</span>
 
 #include &lt;asm/assembler.h&gt;
 #include &lt;asm/memory.h&gt;
<span class="hl kwd">&#64;&#64; -36,9 +35,6 &#64;&#64;</span>
 	.pushsection	.hyp.text, &quot;ax&quot;
 	.align	PAGE_SHIFT
 
<span class="hl kwa">-__kvm_hyp_code_start:</span>
<span class="hl kwa">-	.globl __kvm_hyp_code_start</span>
<span class="hl kwa">-</span>
 .macro save_common_regs
 	// x2: base address for cpu context
 	// x3: tmp register
&#64;&#64; -339,11 +335,8 &#64;&#64; __kvm_hyp_code_start:
 .endm
 
 .macro activate_traps
<span class="hl kwa">-	ldr	x2, [x0, #VCPU_IRQ_LINES]</span>
<span class="hl kwa">-	ldr	x1, [x0, #VCPU_HCR_EL2]</span>
<span class="hl kwa">-	orr	x2, x2, x1</span>
<span class="hl kwa">-	msr	hcr_el2, x2</span>
<span class="hl kwa">-</span>
<span class="hl kwb">+	ldr     x2, [x0, #VCPU_HCR_EL2]</span>
<span class="hl kwb">+	msr     hcr_el2, x2</span>
 	ldr	x2, =(CPTR_EL2_TTA)
 	msr	cptr_el2, x2
 
&#64;&#64; -379,100 +372,33 &#64;&#64; __kvm_hyp_code_start:
 .endm
 
 /*
<span class="hl kwa">- * Save the VGIC CPU state into memory</span>
<span class="hl kwa">- * x0: Register pointing to VCPU struct</span>
<span class="hl kwa">- * Do not corrupt x1!!!</span>
<span class="hl kwb">+ * Call into the vgic backend for state saving</span>
  */
 .macro save_vgic_state
<span class="hl kwa">-	/* Get VGIC VCTRL base into x2 */</span>
<span class="hl kwa">-	ldr	x2, [x0, #VCPU_KVM]</span>
<span class="hl kwa">-	kern_hyp_va	x2</span>
<span class="hl kwa">-	ldr	x2, [x2, #KVM_VGIC_VCTRL]</span>
<span class="hl kwa">-	kern_hyp_va	x2</span>
<span class="hl kwa">-	cbz	x2, 2f		// disabled</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Compute the address of struct vgic_cpu */</span>
<span class="hl kwa">-	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Save all interesting registers */</span>
<span class="hl kwa">-	ldr	w4, [x2, #GICH_HCR]</span>
<span class="hl kwa">-	ldr	w5, [x2, #GICH_VMCR]</span>
<span class="hl kwa">-	ldr	w6, [x2, #GICH_MISR]</span>
<span class="hl kwa">-	ldr	w7, [x2, #GICH_EISR0]</span>
<span class="hl kwa">-	ldr	w8, [x2, #GICH_EISR1]</span>
<span class="hl kwa">-	ldr	w9, [x2, #GICH_ELRSR0]</span>
<span class="hl kwa">-	ldr	w10, [x2, #GICH_ELRSR1]</span>
<span class="hl kwa">-	ldr	w11, [x2, #GICH_APR]</span>
<span class="hl kwa">-CPU_BE(	rev	w4,  w4  )</span>
<span class="hl kwa">-CPU_BE(	rev	w5,  w5  )</span>
<span class="hl kwa">-CPU_BE(	rev	w6,  w6  )</span>
<span class="hl kwa">-CPU_BE(	rev	w7,  w7  )</span>
<span class="hl kwa">-CPU_BE(	rev	w8,  w8  )</span>
<span class="hl kwa">-CPU_BE(	rev	w9,  w9  )</span>
<span class="hl kwa">-CPU_BE(	rev	w10, w10 )</span>
<span class="hl kwa">-CPU_BE(	rev	w11, w11 )</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	str	w4, [x3, #VGIC_CPU_HCR]</span>
<span class="hl kwa">-	str	w5, [x3, #VGIC_CPU_VMCR]</span>
<span class="hl kwa">-	str	w6, [x3, #VGIC_CPU_MISR]</span>
<span class="hl kwa">-	str	w7, [x3, #VGIC_CPU_EISR]</span>
<span class="hl kwa">-	str	w8, [x3, #(VGIC_CPU_EISR + 4)]</span>
<span class="hl kwa">-	str	w9, [x3, #VGIC_CPU_ELRSR]</span>
<span class="hl kwa">-	str	w10, [x3, #(VGIC_CPU_ELRSR + 4)]</span>
<span class="hl kwa">-	str	w11, [x3, #VGIC_CPU_APR]</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Clear GICH_HCR */</span>
<span class="hl kwa">-	str	wzr, [x2, #GICH_HCR]</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Save list registers */</span>
<span class="hl kwa">-	add	x2, x2, #GICH_LR0</span>
<span class="hl kwa">-	ldr	w4, [x3, #VGIC_CPU_NR_LR]</span>
<span class="hl kwa">-	add	x3, x3, #VGIC_CPU_LR</span>
<span class="hl kwa">-1:	ldr	w5, [x2], #4</span>
<span class="hl kwa">-CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwa">-	str	w5, [x3], #4</span>
<span class="hl kwa">-	sub	w4, w4, #1</span>
<span class="hl kwa">-	cbnz	w4, 1b</span>
<span class="hl kwa">-2:</span>
<span class="hl kwb">+	adr	x24, __vgic_sr_vectors</span>
<span class="hl kwb">+	ldr	x24, [x24, VGIC_SAVE_FN]</span>
<span class="hl kwb">+	kern_hyp_va	x24</span>
<span class="hl kwb">+	blr	x24</span>
<span class="hl kwb">+	mrs	x24, hcr_el2</span>
<span class="hl kwb">+	mov	x25, #HCR_INT_OVERRIDE</span>
<span class="hl kwb">+	neg	x25, x25</span>
<span class="hl kwb">+	and	x24, x24, x25</span>
<span class="hl kwb">+	msr	hcr_el2, x24</span>
 .endm
 
 /*
<span class="hl kwa">- * Restore the VGIC CPU state from memory</span>
<span class="hl kwa">- * x0: Register pointing to VCPU struct</span>
<span class="hl kwb">+ * Call into the vgic backend for state restoring</span>
  */
 .macro restore_vgic_state
<span class="hl kwa">-	/* Get VGIC VCTRL base into x2 */</span>
<span class="hl kwa">-	ldr	x2, [x0, #VCPU_KVM]</span>
<span class="hl kwa">-	kern_hyp_va	x2</span>
<span class="hl kwa">-	ldr	x2, [x2, #KVM_VGIC_VCTRL]</span>
<span class="hl kwa">-	kern_hyp_va	x2</span>
<span class="hl kwa">-	cbz	x2, 2f		// disabled</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Compute the address of struct vgic_cpu */</span>
<span class="hl kwa">-	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* We only restore a minimal set of registers */</span>
<span class="hl kwa">-	ldr	w4, [x3, #VGIC_CPU_HCR]</span>
<span class="hl kwa">-	ldr	w5, [x3, #VGIC_CPU_VMCR]</span>
<span class="hl kwa">-	ldr	w6, [x3, #VGIC_CPU_APR]</span>
<span class="hl kwa">-CPU_BE(	rev	w4, w4 )</span>
<span class="hl kwa">-CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwa">-CPU_BE(	rev	w6, w6 )</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	str	w4, [x2, #GICH_HCR]</span>
<span class="hl kwa">-	str	w5, [x2, #GICH_VMCR]</span>
<span class="hl kwa">-	str	w6, [x2, #GICH_APR]</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* Restore list registers */</span>
<span class="hl kwa">-	add	x2, x2, #GICH_LR0</span>
<span class="hl kwa">-	ldr	w4, [x3, #VGIC_CPU_NR_LR]</span>
<span class="hl kwa">-	add	x3, x3, #VGIC_CPU_LR</span>
<span class="hl kwa">-1:	ldr	w5, [x3], #4</span>
<span class="hl kwa">-CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwa">-	str	w5, [x2], #4</span>
<span class="hl kwa">-	sub	w4, w4, #1</span>
<span class="hl kwa">-	cbnz	w4, 1b</span>
<span class="hl kwa">-2:</span>
<span class="hl kwb">+	mrs	x24, hcr_el2</span>
<span class="hl kwb">+	ldr	x25, [x0, #VCPU_IRQ_LINES]</span>
<span class="hl kwb">+	orr	x24, x24, #HCR_INT_OVERRIDE</span>
<span class="hl kwb">+	orr	x24, x24, x25</span>
<span class="hl kwb">+	msr	hcr_el2, x24</span>
<span class="hl kwb">+	adr	x24, __vgic_sr_vectors</span>
<span class="hl kwb">+	ldr	x24, [x24, #VGIC_RESTORE_FN]</span>
<span class="hl kwb">+	kern_hyp_va	x24</span>
<span class="hl kwb">+	blr	x24</span>
 .endm
 
 .macro save_timer_state
&#64;&#64; -653,6 +579,12 &#64;&#64; ENTRY(__kvm_flush_vm_context)
 	ret
 ENDPROC(__kvm_flush_vm_context)
 
<span class="hl kwb">+	// struct vgic_sr_vectors __vgi_sr_vectors;</span>
<span class="hl kwb">+	.align 3</span>
<span class="hl kwb">+ENTRY(__vgic_sr_vectors)</span>
<span class="hl kwb">+	.skip	VGIC_SR_VECTOR_SZ</span>
<span class="hl kwb">+ENDPROC(__vgic_sr_vectors)</span>
<span class="hl kwb">+</span>
 __kvm_hyp_panic:
 	// Guess the context by looking at VTTBR:
 	// If zero, then we&#39;re already a host.
&#64;&#64; -880,7 +812,4 &#64;&#64; ENTRY(__kvm_hyp_vector)
 	ventry	el1_error_invalid		// Error 32-bit EL1
 ENDPROC(__kvm_hyp_vector)
 
<span class="hl kwa">-__kvm_hyp_code_end:</span>
<span class="hl kwa">-	.globl	__kvm_hyp_code_end</span>
<span class="hl kwa">-</span>
 	.popsection
diff --git a/arch/arm64/kvm/vgic-v2-switch.S b/arch/arm64/kvm/vgic-v2-switch.S
new file mode 100644
index 0000000..ae21177
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/arch/arm64/kvm/vgic-v2-switch.S</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,133 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2012,2013 - ARM Ltd</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/linkage.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;asm/assembler.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/memory.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/asm-offsets.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_asm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_arm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_mmu.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	.text</span>
<span class="hl kwb">+	.pushsection	.hyp.text, &quot;ax&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Save the VGIC CPU state into memory</span>
<span class="hl kwb">+ * x0: Register pointing to VCPU struct</span>
<span class="hl kwb">+ * Do not corrupt x1!!!</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+ENTRY(__save_vgic_v2_state)</span>
<span class="hl kwb">+__save_vgic_v2_state:</span>
<span class="hl kwb">+	/* Get VGIC VCTRL base into x2 */</span>
<span class="hl kwb">+	ldr	x2, [x0, #VCPU_KVM]</span>
<span class="hl kwb">+	kern_hyp_va	x2</span>
<span class="hl kwb">+	ldr	x2, [x2, #KVM_VGIC_VCTRL]</span>
<span class="hl kwb">+	kern_hyp_va	x2</span>
<span class="hl kwb">+	cbz	x2, 2f		// disabled</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Compute the address of struct vgic_cpu */</span>
<span class="hl kwb">+	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Save all interesting registers */</span>
<span class="hl kwb">+	ldr	w4, [x2, #GICH_HCR]</span>
<span class="hl kwb">+	ldr	w5, [x2, #GICH_VMCR]</span>
<span class="hl kwb">+	ldr	w6, [x2, #GICH_MISR]</span>
<span class="hl kwb">+	ldr	w7, [x2, #GICH_EISR0]</span>
<span class="hl kwb">+	ldr	w8, [x2, #GICH_EISR1]</span>
<span class="hl kwb">+	ldr	w9, [x2, #GICH_ELRSR0]</span>
<span class="hl kwb">+	ldr	w10, [x2, #GICH_ELRSR1]</span>
<span class="hl kwb">+	ldr	w11, [x2, #GICH_APR]</span>
<span class="hl kwb">+CPU_BE(	rev	w4,  w4  )</span>
<span class="hl kwb">+CPU_BE(	rev	w5,  w5  )</span>
<span class="hl kwb">+CPU_BE(	rev	w6,  w6  )</span>
<span class="hl kwb">+CPU_BE(	rev	w7,  w7  )</span>
<span class="hl kwb">+CPU_BE(	rev	w8,  w8  )</span>
<span class="hl kwb">+CPU_BE(	rev	w9,  w9  )</span>
<span class="hl kwb">+CPU_BE(	rev	w10, w10 )</span>
<span class="hl kwb">+CPU_BE(	rev	w11, w11 )</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	str	w4, [x3, #VGIC_V2_CPU_HCR]</span>
<span class="hl kwb">+	str	w5, [x3, #VGIC_V2_CPU_VMCR]</span>
<span class="hl kwb">+	str	w6, [x3, #VGIC_V2_CPU_MISR]</span>
<span class="hl kwb">+	str	w7, [x3, #VGIC_V2_CPU_EISR]</span>
<span class="hl kwb">+	str	w8, [x3, #(VGIC_V2_CPU_EISR + 4)]</span>
<span class="hl kwb">+	str	w9, [x3, #VGIC_V2_CPU_ELRSR]</span>
<span class="hl kwb">+	str	w10, [x3, #(VGIC_V2_CPU_ELRSR + 4)]</span>
<span class="hl kwb">+	str	w11, [x3, #VGIC_V2_CPU_APR]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Clear GICH_HCR */</span>
<span class="hl kwb">+	str	wzr, [x2, #GICH_HCR]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Save list registers */</span>
<span class="hl kwb">+	add	x2, x2, #GICH_LR0</span>
<span class="hl kwb">+	ldr	w4, [x3, #VGIC_CPU_NR_LR]</span>
<span class="hl kwb">+	add	x3, x3, #VGIC_V2_CPU_LR</span>
<span class="hl kwb">+1:	ldr	w5, [x2], #4</span>
<span class="hl kwb">+CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwb">+	str	w5, [x3], #4</span>
<span class="hl kwb">+	sub	w4, w4, #1</span>
<span class="hl kwb">+	cbnz	w4, 1b</span>
<span class="hl kwb">+2:</span>
<span class="hl kwb">+	ret</span>
<span class="hl kwb">+ENDPROC(__save_vgic_v2_state)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Restore the VGIC CPU state from memory</span>
<span class="hl kwb">+ * x0: Register pointing to VCPU struct</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+ENTRY(__restore_vgic_v2_state)</span>
<span class="hl kwb">+__restore_vgic_v2_state:</span>
<span class="hl kwb">+	/* Get VGIC VCTRL base into x2 */</span>
<span class="hl kwb">+	ldr	x2, [x0, #VCPU_KVM]</span>
<span class="hl kwb">+	kern_hyp_va	x2</span>
<span class="hl kwb">+	ldr	x2, [x2, #KVM_VGIC_VCTRL]</span>
<span class="hl kwb">+	kern_hyp_va	x2</span>
<span class="hl kwb">+	cbz	x2, 2f		// disabled</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Compute the address of struct vgic_cpu */</span>
<span class="hl kwb">+	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* We only restore a minimal set of registers */</span>
<span class="hl kwb">+	ldr	w4, [x3, #VGIC_V2_CPU_HCR]</span>
<span class="hl kwb">+	ldr	w5, [x3, #VGIC_V2_CPU_VMCR]</span>
<span class="hl kwb">+	ldr	w6, [x3, #VGIC_V2_CPU_APR]</span>
<span class="hl kwb">+CPU_BE(	rev	w4, w4 )</span>
<span class="hl kwb">+CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwb">+CPU_BE(	rev	w6, w6 )</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	str	w4, [x2, #GICH_HCR]</span>
<span class="hl kwb">+	str	w5, [x2, #GICH_VMCR]</span>
<span class="hl kwb">+	str	w6, [x2, #GICH_APR]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Restore list registers */</span>
<span class="hl kwb">+	add	x2, x2, #GICH_LR0</span>
<span class="hl kwb">+	ldr	w4, [x3, #VGIC_CPU_NR_LR]</span>
<span class="hl kwb">+	add	x3, x3, #VGIC_V2_CPU_LR</span>
<span class="hl kwb">+1:	ldr	w5, [x3], #4</span>
<span class="hl kwb">+CPU_BE(	rev	w5, w5 )</span>
<span class="hl kwb">+	str	w5, [x2], #4</span>
<span class="hl kwb">+	sub	w4, w4, #1</span>
<span class="hl kwb">+	cbnz	w4, 1b</span>
<span class="hl kwb">+2:</span>
<span class="hl kwb">+	ret</span>
<span class="hl kwb">+ENDPROC(__restore_vgic_v2_state)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	.popsection</span>
diff --git a/arch/arm64/kvm/vgic-v3-switch.S b/arch/arm64/kvm/vgic-v3-switch.S
new file mode 100644
index 0000000..4ede9d8
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/arch/arm64/kvm/vgic-v3-switch.S</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,266 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2012,2013 - ARM Ltd</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/linkage.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic-v3.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;asm/assembler.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/memory.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/asm-offsets.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_asm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_arm.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	.text</span>
<span class="hl kwb">+	.pushsection	.hyp.text, &quot;ax&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * We store LRs in reverse order to let the CPU deal with streaming</span>
<span class="hl kwb">+ * access. Use this macro to make it look saner...</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define LR_OFFSET(n)	(VGIC_V3_CPU_LR + (15 - n) * 8)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Save the VGIC CPU state into memory</span>
<span class="hl kwb">+ * x0: Register pointing to VCPU struct</span>
<span class="hl kwb">+ * Do not corrupt x1!!!</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+.macro	save_vgic_v3_state</span>
<span class="hl kwb">+	// Compute the address of struct vgic_cpu</span>
<span class="hl kwb">+	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Make sure stores to the GIC via the memory mapped interface</span>
<span class="hl kwb">+	// are now visible to the system register interface</span>
<span class="hl kwb">+	dsb	st</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Save all interesting registers</span>
<span class="hl kwb">+	mrs	x4, ICH_HCR_EL2</span>
<span class="hl kwb">+	mrs	x5, ICH_VMCR_EL2</span>
<span class="hl kwb">+	mrs	x6, ICH_MISR_EL2</span>
<span class="hl kwb">+	mrs	x7, ICH_EISR_EL2</span>
<span class="hl kwb">+	mrs	x8, ICH_ELSR_EL2</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	str	w4, [x3, #VGIC_V3_CPU_HCR]</span>
<span class="hl kwb">+	str	w5, [x3, #VGIC_V3_CPU_VMCR]</span>
<span class="hl kwb">+	str	w6, [x3, #VGIC_V3_CPU_MISR]</span>
<span class="hl kwb">+	str	w7, [x3, #VGIC_V3_CPU_EISR]</span>
<span class="hl kwb">+	str	w8, [x3, #VGIC_V3_CPU_ELRSR]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	msr	ICH_HCR_EL2, xzr</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mrs	x21, ICH_VTR_EL2</span>
<span class="hl kwb">+	mvn	w22, w21</span>
<span class="hl kwb">+	ubfiz	w23, w22, 2, 4	// w23 = (15 - ListRegs) * 4</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	adr	x24, 1f</span>
<span class="hl kwb">+	add	x24, x24, x23</span>
<span class="hl kwb">+	br	x24</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+1:</span>
<span class="hl kwb">+	mrs	x20, ICH_LR15_EL2</span>
<span class="hl kwb">+	mrs	x19, ICH_LR14_EL2</span>
<span class="hl kwb">+	mrs	x18, ICH_LR13_EL2</span>
<span class="hl kwb">+	mrs	x17, ICH_LR12_EL2</span>
<span class="hl kwb">+	mrs	x16, ICH_LR11_EL2</span>
<span class="hl kwb">+	mrs	x15, ICH_LR10_EL2</span>
<span class="hl kwb">+	mrs	x14, ICH_LR9_EL2</span>
<span class="hl kwb">+	mrs	x13, ICH_LR8_EL2</span>
<span class="hl kwb">+	mrs	x12, ICH_LR7_EL2</span>
<span class="hl kwb">+	mrs	x11, ICH_LR6_EL2</span>
<span class="hl kwb">+	mrs	x10, ICH_LR5_EL2</span>
<span class="hl kwb">+	mrs	x9, ICH_LR4_EL2</span>
<span class="hl kwb">+	mrs	x8, ICH_LR3_EL2</span>
<span class="hl kwb">+	mrs	x7, ICH_LR2_EL2</span>
<span class="hl kwb">+	mrs	x6, ICH_LR1_EL2</span>
<span class="hl kwb">+	mrs	x5, ICH_LR0_EL2</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	adr	x24, 1f</span>
<span class="hl kwb">+	add	x24, x24, x23</span>
<span class="hl kwb">+	br	x24</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+1:</span>
<span class="hl kwb">+	str	x20, [x3, #LR_OFFSET(15)]</span>
<span class="hl kwb">+	str	x19, [x3, #LR_OFFSET(14)]</span>
<span class="hl kwb">+	str	x18, [x3, #LR_OFFSET(13)]</span>
<span class="hl kwb">+	str	x17, [x3, #LR_OFFSET(12)]</span>
<span class="hl kwb">+	str	x16, [x3, #LR_OFFSET(11)]</span>
<span class="hl kwb">+	str	x15, [x3, #LR_OFFSET(10)]</span>
<span class="hl kwb">+	str	x14, [x3, #LR_OFFSET(9)]</span>
<span class="hl kwb">+	str	x13, [x3, #LR_OFFSET(8)]</span>
<span class="hl kwb">+	str	x12, [x3, #LR_OFFSET(7)]</span>
<span class="hl kwb">+	str	x11, [x3, #LR_OFFSET(6)]</span>
<span class="hl kwb">+	str	x10, [x3, #LR_OFFSET(5)]</span>
<span class="hl kwb">+	str	x9, [x3, #LR_OFFSET(4)]</span>
<span class="hl kwb">+	str	x8, [x3, #LR_OFFSET(3)]</span>
<span class="hl kwb">+	str	x7, [x3, #LR_OFFSET(2)]</span>
<span class="hl kwb">+	str	x6, [x3, #LR_OFFSET(1)]</span>
<span class="hl kwb">+	str	x5, [x3, #LR_OFFSET(0)]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tbnz	w21, #29, 6f	// 6 bits</span>
<span class="hl kwb">+	tbz	w21, #30, 5f	// 5 bits</span>
<span class="hl kwb">+				// 7 bits</span>
<span class="hl kwb">+	mrs	x20, ICH_AP0R3_EL2</span>
<span class="hl kwb">+	str	w20, [x3, #(VGIC_V3_CPU_AP0R + 3*4)]</span>
<span class="hl kwb">+	mrs	x19, ICH_AP0R2_EL2</span>
<span class="hl kwb">+	str	w19, [x3, #(VGIC_V3_CPU_AP0R + 2*4)]</span>
<span class="hl kwb">+6:	mrs	x18, ICH_AP0R1_EL2</span>
<span class="hl kwb">+	str	w18, [x3, #(VGIC_V3_CPU_AP0R + 1*4)]</span>
<span class="hl kwb">+5:	mrs	x17, ICH_AP0R0_EL2</span>
<span class="hl kwb">+	str	w17, [x3, #VGIC_V3_CPU_AP0R]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tbnz	w21, #29, 6f	// 6 bits</span>
<span class="hl kwb">+	tbz	w21, #30, 5f	// 5 bits</span>
<span class="hl kwb">+				// 7 bits</span>
<span class="hl kwb">+	mrs	x20, ICH_AP1R3_EL2</span>
<span class="hl kwb">+	str	w20, [x3, #(VGIC_V3_CPU_AP1R + 3*4)]</span>
<span class="hl kwb">+	mrs	x19, ICH_AP1R2_EL2</span>
<span class="hl kwb">+	str	w19, [x3, #(VGIC_V3_CPU_AP1R + 2*4)]</span>
<span class="hl kwb">+6:	mrs	x18, ICH_AP1R1_EL2</span>
<span class="hl kwb">+	str	w18, [x3, #(VGIC_V3_CPU_AP1R + 1*4)]</span>
<span class="hl kwb">+5:	mrs	x17, ICH_AP1R0_EL2</span>
<span class="hl kwb">+	str	w17, [x3, #VGIC_V3_CPU_AP1R]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Restore SRE_EL1 access and re-enable SRE at EL1.</span>
<span class="hl kwb">+	mrs	x5, ICC_SRE_EL2</span>
<span class="hl kwb">+	orr	x5, x5, #ICC_SRE_EL2_ENABLE</span>
<span class="hl kwb">+	msr	ICC_SRE_EL2, x5</span>
<span class="hl kwb">+	isb</span>
<span class="hl kwb">+	mov	x5, #1</span>
<span class="hl kwb">+	msr	ICC_SRE_EL1, x5</span>
<span class="hl kwb">+.endm</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Restore the VGIC CPU state from memory</span>
<span class="hl kwb">+ * x0: Register pointing to VCPU struct</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+.macro	restore_vgic_v3_state</span>
<span class="hl kwb">+	// Disable SRE_EL1 access. Necessary, otherwise</span>
<span class="hl kwb">+	// ICH_VMCR_EL2.VFIQEn becomes one, and FIQ happens...</span>
<span class="hl kwb">+	msr	ICC_SRE_EL1, xzr</span>
<span class="hl kwb">+	isb</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Compute the address of struct vgic_cpu</span>
<span class="hl kwb">+	add	x3, x0, #VCPU_VGIC_CPU</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Restore all interesting registers</span>
<span class="hl kwb">+	ldr	w4, [x3, #VGIC_V3_CPU_HCR]</span>
<span class="hl kwb">+	ldr	w5, [x3, #VGIC_V3_CPU_VMCR]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	msr	ICH_HCR_EL2, x4</span>
<span class="hl kwb">+	msr	ICH_VMCR_EL2, x5</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mrs	x21, ICH_VTR_EL2</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tbnz	w21, #29, 6f	// 6 bits</span>
<span class="hl kwb">+	tbz	w21, #30, 5f	// 5 bits</span>
<span class="hl kwb">+				// 7 bits</span>
<span class="hl kwb">+	ldr	w20, [x3, #(VGIC_V3_CPU_AP1R + 3*4)]</span>
<span class="hl kwb">+	msr	ICH_AP1R3_EL2, x20</span>
<span class="hl kwb">+	ldr	w19, [x3, #(VGIC_V3_CPU_AP1R + 2*4)]</span>
<span class="hl kwb">+	msr	ICH_AP1R2_EL2, x19</span>
<span class="hl kwb">+6:	ldr	w18, [x3, #(VGIC_V3_CPU_AP1R + 1*4)]</span>
<span class="hl kwb">+	msr	ICH_AP1R1_EL2, x18</span>
<span class="hl kwb">+5:	ldr	w17, [x3, #VGIC_V3_CPU_AP1R]</span>
<span class="hl kwb">+	msr	ICH_AP1R0_EL2, x17</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tbnz	w21, #29, 6f	// 6 bits</span>
<span class="hl kwb">+	tbz	w21, #30, 5f	// 5 bits</span>
<span class="hl kwb">+				// 7 bits</span>
<span class="hl kwb">+	ldr	w20, [x3, #(VGIC_V3_CPU_AP0R + 3*4)]</span>
<span class="hl kwb">+	msr	ICH_AP0R3_EL2, x20</span>
<span class="hl kwb">+	ldr	w19, [x3, #(VGIC_V3_CPU_AP0R + 2*4)]</span>
<span class="hl kwb">+	msr	ICH_AP0R2_EL2, x19</span>
<span class="hl kwb">+6:	ldr	w18, [x3, #(VGIC_V3_CPU_AP0R + 1*4)]</span>
<span class="hl kwb">+	msr	ICH_AP0R1_EL2, x18</span>
<span class="hl kwb">+5:	ldr	w17, [x3, #VGIC_V3_CPU_AP0R]</span>
<span class="hl kwb">+	msr	ICH_AP0R0_EL2, x17</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	and	w22, w21, #0xf</span>
<span class="hl kwb">+	mvn	w22, w21</span>
<span class="hl kwb">+	ubfiz	w23, w22, 2, 4	// w23 = (15 - ListRegs) * 4</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	adr	x24, 1f</span>
<span class="hl kwb">+	add	x24, x24, x23</span>
<span class="hl kwb">+	br	x24</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+1:</span>
<span class="hl kwb">+	ldr	x20, [x3, #LR_OFFSET(15)]</span>
<span class="hl kwb">+	ldr	x19, [x3, #LR_OFFSET(14)]</span>
<span class="hl kwb">+	ldr	x18, [x3, #LR_OFFSET(13)]</span>
<span class="hl kwb">+	ldr	x17, [x3, #LR_OFFSET(12)]</span>
<span class="hl kwb">+	ldr	x16, [x3, #LR_OFFSET(11)]</span>
<span class="hl kwb">+	ldr	x15, [x3, #LR_OFFSET(10)]</span>
<span class="hl kwb">+	ldr	x14, [x3, #LR_OFFSET(9)]</span>
<span class="hl kwb">+	ldr	x13, [x3, #LR_OFFSET(8)]</span>
<span class="hl kwb">+	ldr	x12, [x3, #LR_OFFSET(7)]</span>
<span class="hl kwb">+	ldr	x11, [x3, #LR_OFFSET(6)]</span>
<span class="hl kwb">+	ldr	x10, [x3, #LR_OFFSET(5)]</span>
<span class="hl kwb">+	ldr	x9, [x3, #LR_OFFSET(4)]</span>
<span class="hl kwb">+	ldr	x8, [x3, #LR_OFFSET(3)]</span>
<span class="hl kwb">+	ldr	x7, [x3, #LR_OFFSET(2)]</span>
<span class="hl kwb">+	ldr	x6, [x3, #LR_OFFSET(1)]</span>
<span class="hl kwb">+	ldr	x5, [x3, #LR_OFFSET(0)]</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	adr	x24, 1f</span>
<span class="hl kwb">+	add	x24, x24, x23</span>
<span class="hl kwb">+	br	x24</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+1:</span>
<span class="hl kwb">+	msr	ICH_LR15_EL2, x20</span>
<span class="hl kwb">+	msr	ICH_LR14_EL2, x19</span>
<span class="hl kwb">+	msr	ICH_LR13_EL2, x18</span>
<span class="hl kwb">+	msr	ICH_LR12_EL2, x17</span>
<span class="hl kwb">+	msr	ICH_LR11_EL2, x16</span>
<span class="hl kwb">+	msr	ICH_LR10_EL2, x15</span>
<span class="hl kwb">+	msr	ICH_LR9_EL2,  x14</span>
<span class="hl kwb">+	msr	ICH_LR8_EL2,  x13</span>
<span class="hl kwb">+	msr	ICH_LR7_EL2,  x12</span>
<span class="hl kwb">+	msr	ICH_LR6_EL2,  x11</span>
<span class="hl kwb">+	msr	ICH_LR5_EL2,  x10</span>
<span class="hl kwb">+	msr	ICH_LR4_EL2,   x9</span>
<span class="hl kwb">+	msr	ICH_LR3_EL2,   x8</span>
<span class="hl kwb">+	msr	ICH_LR2_EL2,   x7</span>
<span class="hl kwb">+	msr	ICH_LR1_EL2,   x6</span>
<span class="hl kwb">+	msr	ICH_LR0_EL2,   x5</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Ensure that the above will be visible via the memory-mapped</span>
<span class="hl kwb">+	// view of the CPU interface (GICV).</span>
<span class="hl kwb">+	isb</span>
<span class="hl kwb">+	dsb	sy</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	// Prevent the guest from touching the GIC system registers</span>
<span class="hl kwb">+	mrs	x5, ICC_SRE_EL2</span>
<span class="hl kwb">+	and	x5, x5, #~ICC_SRE_EL2_ENABLE</span>
<span class="hl kwb">+	msr	ICC_SRE_EL2, x5</span>
<span class="hl kwb">+.endm</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+ENTRY(__save_vgic_v3_state)</span>
<span class="hl kwb">+	save_vgic_v3_state</span>
<span class="hl kwb">+	ret</span>
<span class="hl kwb">+ENDPROC(__save_vgic_v3_state)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+ENTRY(__restore_vgic_v3_state)</span>
<span class="hl kwb">+	restore_vgic_v3_state</span>
<span class="hl kwb">+	ret</span>
<span class="hl kwb">+ENDPROC(__restore_vgic_v3_state)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+ENTRY(__vgic_v3_get_ich_vtr_el2)</span>
<span class="hl kwb">+	mrs	x0, ICH_VTR_EL2</span>
<span class="hl kwb">+	ret</span>
<span class="hl kwb">+ENDPROC(__vgic_v3_get_ich_vtr_el2)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	.popsection</span>
diff --git a/arch/arm64/mm/init.c b/arch/arm64/mm/init.c
index f43db8a..05d6079 100644
<span class="hl kwa">--- a/arch/arm64/mm/init.c</span>
<span class="hl kwb">+++ b/arch/arm64/mm/init.c</span>
&#64;&#64; -145,8 +145,17 &#64;&#64; void __init arm64_memblock_init(void)
 	early_init_fdt_scan_reserved_mem();
 
 	/* 4GB maximum for 32-bit only capable devices */
<span class="hl kwa">-	if (IS_ENABLED(CONFIG_ZONE_DMA))</span>
<span class="hl kwb">+	if (IS_ENABLED(CONFIG_ZONE_DMA)) {</span>
 		dma_phys_limit = dma_to_phys(NULL, DMA_BIT_MASK(32)) + 1;
<span class="hl kwb">+		/*</span>
<span class="hl kwb">+		 * If platform doesn&#39;t have DRAM within the dma_phys_limit,</span>
<span class="hl kwb">+		 * remove the limit altogether. This allows one kernel (with</span>
<span class="hl kwb">+		 * CONFIG_ZONE_DMA defined) to support platforms with 32-bit</span>
<span class="hl kwb">+		 * only devices and platforms with no 32-bit DRAM.</span>
<span class="hl kwb">+		 */</span>
<span class="hl kwb">+		if (dma_phys_limit &lt;= memblock_start_of_DRAM())</span>
<span class="hl kwb">+			dma_phys_limit = 0;</span>
<span class="hl kwb">+	}</span>
 	dma_contiguous_reserve(dma_phys_limit);
 
 	memblock_allow_resize();
diff --git a/arch/ia64/kernel/process.c b/arch/ia64/kernel/process.c
index 55d4ba4..deed6fa 100644
<span class="hl kwa">--- a/arch/ia64/kernel/process.c</span>
<span class="hl kwb">+++ b/arch/ia64/kernel/process.c</span>
&#64;&#64; -662,7 +662,7 &#64;&#64; void
 machine_restart (char *restart_cmd)
 {
 	(void) notify_die(DIE_MACHINE_RESTART, restart_cmd, NULL, 0, 0, 0);
<span class="hl kwa">-	(*efi.reset_system)(EFI_RESET_WARM, 0, 0, NULL);</span>
<span class="hl kwb">+	efi_reboot(REBOOT_WARM, NULL);</span>
 }
 
 void
diff --git a/arch/ia64/kernel/time.c b/arch/ia64/kernel/time.c
index 71c52bc..a149c67 100644
<span class="hl kwa">--- a/arch/ia64/kernel/time.c</span>
<span class="hl kwb">+++ b/arch/ia64/kernel/time.c</span>
&#64;&#64; -384,21 +384,6 &#64;&#64; static struct irqaction timer_irqaction = {
 	.name =		&quot;timer&quot;
 };
 
<span class="hl kwa">-static struct platform_device rtc_efi_dev = {</span>
<span class="hl kwa">-	.name = &quot;rtc-efi&quot;,</span>
<span class="hl kwa">-	.id = -1,</span>
<span class="hl kwa">-};</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-static int __init rtc_init(void)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	if (platform_device_register(&amp;rtc_efi_dev) &lt; 0)</span>
<span class="hl kwa">-		printk(KERN_ERR &quot;unable to register rtc device...\n&quot;);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/* not necessarily an error */</span>
<span class="hl kwa">-	return 0;</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-module_init(rtc_init);</span>
<span class="hl kwa">-</span>
 void read_persistent_clock(struct timespec *ts)
 {
 	efi_gettimeofday(ts);
diff --git a/arch/x86/include/asm/efi.h b/arch/x86/include/asm/efi.h
index 1eb5f64..5d71d0e 100644
<span class="hl kwa">--- a/arch/x86/include/asm/efi.h</span>
<span class="hl kwb">+++ b/arch/x86/include/asm/efi.h</span>
&#64;&#64; -104,6 +104,8 &#64;&#64; extern void __init runtime_code_page_mkexec(void);
 extern void __init efi_runtime_mkexec(void);
 extern void __init efi_dump_pagetable(void);
 extern void __init efi_apply_memmap_quirks(void);
<span class="hl kwb">+extern int __init efi_reuse_config(u64 tables, int nr_tables);</span>
<span class="hl kwb">+extern void efi_delete_dummy_variable(void);</span>
 
 struct efi_setup_data {
 	u64 fw_vendor;
&#64;&#64; -156,6 +158,8 &#64;&#64; static inline efi_status_t efi_thunk_set_virtual_address_map(
 	return EFI_SUCCESS;
 }
 #endif /* CONFIG_EFI_MIXED */
<span class="hl kwb">+</span>
<span class="hl kwb">+extern bool efi_reboot_required(void);</span>
 #else
 /*
  * IF EFI is not configured, have the EFI calls return -ENOSYS.
&#64;&#64; -168,6 +172,10 &#64;&#64; static inline efi_status_t efi_thunk_set_virtual_address_map(
 #define efi_call5(_f, _a1, _a2, _a3, _a4, _a5)		(-ENOSYS)
 #define efi_call6(_f, _a1, _a2, _a3, _a4, _a5, _a6)	(-ENOSYS)
 static inline void parse_efi_setup(u64 phys_addr, u32 data_len) {}
<span class="hl kwb">+static inline bool efi_reboot_required(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return false;</span>
<span class="hl kwb">+}</span>
 #endif /* CONFIG_EFI */
 
 #endif /* _ASM_X86_EFI_H */
diff --git a/arch/x86/kernel/reboot.c b/arch/x86/kernel/reboot.c
index 52b1157..17962e6 100644
<span class="hl kwa">--- a/arch/x86/kernel/reboot.c</span>
<span class="hl kwb">+++ b/arch/x86/kernel/reboot.c</span>
<span class="hl kwd">&#64;&#64; -28,6 +28,7 &#64;&#64;</span>
 #include &lt;linux/mc146818rtc.h&gt;
 #include &lt;asm/realmode.h&gt;
 #include &lt;asm/x86_init.h&gt;
<span class="hl kwb">+#include &lt;asm/efi.h&gt;</span>
 
 /*
  * Power off function, if any
&#64;&#64; -401,12 +402,25 &#64;&#64; static struct dmi_system_id __initdata reboot_dmi_table[] = {
 
 static int __init reboot_init(void)
 {
<span class="hl kwb">+	int rv;</span>
<span class="hl kwb">+</span>
 	/*
 	 * Only do the DMI check if reboot_type hasn&#39;t been overridden
 	 * on the command line
 	 */
<span class="hl kwa">-	if (reboot_default)</span>
<span class="hl kwa">-		dmi_check_system(reboot_dmi_table);</span>
<span class="hl kwb">+	if (!reboot_default)</span>
<span class="hl kwb">+		return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * The DMI quirks table takes precedence. If no quirks entry</span>
<span class="hl kwb">+	 * matches and the ACPI Hardware Reduced bit is set, force EFI</span>
<span class="hl kwb">+	 * reboot.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	rv = dmi_check_system(reboot_dmi_table);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!rv &amp;&amp; efi_reboot_required())</span>
<span class="hl kwb">+		reboot_type = BOOT_EFI;</span>
<span class="hl kwb">+</span>
 	return 0;
 }
 core_initcall(reboot_init);
&#64;&#64; -528,11 +542,7 &#64;&#64; static void native_machine_emergency_restart(void)
 			break;
 
 		case BOOT_EFI:
<span class="hl kwa">-			if (efi_enabled(EFI_RUNTIME_SERVICES))</span>
<span class="hl kwa">-				efi.reset_system(reboot_mode == REBOOT_WARM ?</span>
<span class="hl kwa">-						 EFI_RESET_WARM :</span>
<span class="hl kwa">-						 EFI_RESET_COLD,</span>
<span class="hl kwa">-						 EFI_SUCCESS, 0, NULL);</span>
<span class="hl kwb">+			efi_reboot(reboot_mode, NULL);</span>
 			reboot_type = BOOT_BIOS;
 			break;
 
diff --git a/arch/x86/platform/efi/Makefile b/arch/x86/platform/efi/Makefile
index d51045a..2846aaa 100644
<span class="hl kwa">--- a/arch/x86/platform/efi/Makefile</span>
<span class="hl kwb">+++ b/arch/x86/platform/efi/Makefile</span>
<span class="hl kwd">&#64;&#64; -1,4 +1,4 &#64;&#64;</span>
<span class="hl kwa">-obj-$(CONFIG_EFI) 		+= efi.o efi_$(BITS).o efi_stub_$(BITS).o</span>
<span class="hl kwb">+obj-$(CONFIG_EFI) 		+= quirks.o efi.o efi_$(BITS).o efi_stub_$(BITS).o</span>
 obj-$(CONFIG_ACPI_BGRT) += efi-bgrt.o
 obj-$(CONFIG_EARLY_PRINTK_EFI)	+= early_printk.o
 obj-$(CONFIG_EFI_MIXED)		+= efi_thunk_$(BITS).o
diff --git a/arch/x86/platform/efi/efi.c b/arch/x86/platform/efi/efi.c
index 87fc96b..f852443 100644
<span class="hl kwa">--- a/arch/x86/platform/efi/efi.c</span>
<span class="hl kwb">+++ b/arch/x86/platform/efi/efi.c</span>
<span class="hl kwd">&#64;&#64; -56,13 +56,6 &#64;&#64;</span>
 
 #define EFI_DEBUG
 
<span class="hl kwa">-#define EFI_MIN_RESERVE 5120</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-#define EFI_DUMMY_GUID \</span>
<span class="hl kwa">-	EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9)</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-static efi_char16_t efi_dummy_name[6] = { &#39;D&#39;, &#39;U&#39;, &#39;M&#39;, &#39;M&#39;, &#39;Y&#39;, 0 };</span>
<span class="hl kwa">-</span>
 struct efi_memory_map memmap;
 
 static struct efi efi_phys __initdata;
&#64;&#64; -95,15 +88,6 &#64;&#64; static int __init setup_add_efi_memmap(char *arg)
 }
 early_param(&quot;add_efi_memmap&quot;, setup_add_efi_memmap);
 
<span class="hl kwa">-static bool efi_no_storage_paranoia;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-static int __init setup_storage_paranoia(char *arg)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	efi_no_storage_paranoia = true;</span>
<span class="hl kwa">-	return 0;</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-early_param(&quot;efi_no_storage_paranoia&quot;, setup_storage_paranoia);</span>
<span class="hl kwa">-</span>
 static efi_status_t virt_efi_get_time(efi_time_t *tm, efi_time_cap_t *tc)
 {
 	unsigned long flags;
&#64;&#64; -392,37 +376,6 &#64;&#64; static void __init print_efi_memmap(void)
 #endif  /*  EFI_DEBUG  */
 }
 
<span class="hl kwa">-void __init efi_reserve_boot_services(void)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	void *p;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	for (p = memmap.map; p &lt; memmap.map_end; p += memmap.desc_size) {</span>
<span class="hl kwa">-		efi_memory_desc_t *md = p;</span>
<span class="hl kwa">-		u64 start = md-&gt;phys_addr;</span>
<span class="hl kwa">-		u64 size = md-&gt;num_pages &lt;&lt; EFI_PAGE_SHIFT;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (md-&gt;type != EFI_BOOT_SERVICES_CODE &amp;&amp;</span>
<span class="hl kwa">-		    md-&gt;type != EFI_BOOT_SERVICES_DATA)</span>
<span class="hl kwa">-			continue;</span>
<span class="hl kwa">-		/* Only reserve where possible:</span>
<span class="hl kwa">-		 * - Not within any already allocated areas</span>
<span class="hl kwa">-		 * - Not over any memory area (really needed, if above?)</span>
<span class="hl kwa">-		 * - Not within any part of the kernel</span>
<span class="hl kwa">-		 * - Not the bios reserved area</span>
<span class="hl kwa">-		*/</span>
<span class="hl kwa">-		if ((start + size &gt; __pa_symbol(_text)</span>
<span class="hl kwa">-				&amp;&amp; start &lt;= __pa_symbol(_end)) ||</span>
<span class="hl kwa">-			!e820_all_mapped(start, start+size, E820_RAM) ||</span>
<span class="hl kwa">-			memblock_is_region_reserved(start, size)) {</span>
<span class="hl kwa">-			/* Could not reserve, skip it */</span>
<span class="hl kwa">-			md-&gt;num_pages = 0;</span>
<span class="hl kwa">-			memblock_dbg(&quot;Could not reserve boot range [0x%010llx-0x%010llx]\n&quot;,</span>
<span class="hl kwa">-				     start, start+size-1);</span>
<span class="hl kwa">-		} else</span>
<span class="hl kwa">-			memblock_reserve(start, size);</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-</span>
 void __init efi_unmap_memmap(void)
 {
 	clear_bit(EFI_MEMMAP, &amp;efi.flags);
&#64;&#64; -432,29 +385,6 &#64;&#64; void __init efi_unmap_memmap(void)
 	}
 }
 
<span class="hl kwa">-void __init efi_free_boot_services(void)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	void *p;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	for (p = memmap.map; p &lt; memmap.map_end; p += memmap.desc_size) {</span>
<span class="hl kwa">-		efi_memory_desc_t *md = p;</span>
<span class="hl kwa">-		unsigned long long start = md-&gt;phys_addr;</span>
<span class="hl kwa">-		unsigned long long size = md-&gt;num_pages &lt;&lt; EFI_PAGE_SHIFT;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (md-&gt;type != EFI_BOOT_SERVICES_CODE &amp;&amp;</span>
<span class="hl kwa">-		    md-&gt;type != EFI_BOOT_SERVICES_DATA)</span>
<span class="hl kwa">-			continue;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		/* Could not reserve boot area */</span>
<span class="hl kwa">-		if (!size)</span>
<span class="hl kwa">-			continue;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		free_bootmem_late(start, size);</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	efi_unmap_memmap();</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-</span>
 static int __init efi_systab_init(void *phys)
 {
 	if (efi_enabled(EFI_64BIT)) {
&#64;&#64; -649,62 +579,6 &#64;&#64; static int __init efi_memmap_init(void)
 	return 0;
 }
 
<span class="hl kwa">-/*</span>
<span class="hl kwa">- * A number of config table entries get remapped to virtual addresses</span>
<span class="hl kwa">- * after entering EFI virtual mode. However, the kexec kernel requires</span>
<span class="hl kwa">- * their physical addresses therefore we pass them via setup_data and</span>
<span class="hl kwa">- * correct those entries to their respective physical addresses here.</span>
<span class="hl kwa">- *</span>
<span class="hl kwa">- * Currently only handles smbios which is necessary for some firmware</span>
<span class="hl kwa">- * implementation.</span>
<span class="hl kwa">- */</span>
<span class="hl kwa">-static int __init efi_reuse_config(u64 tables, int nr_tables)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	int i, sz, ret = 0;</span>
<span class="hl kwa">-	void *p, *tablep;</span>
<span class="hl kwa">-	struct efi_setup_data *data;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	if (!efi_setup)</span>
<span class="hl kwa">-		return 0;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	if (!efi_enabled(EFI_64BIT))</span>
<span class="hl kwa">-		return 0;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	data = early_memremap(efi_setup, sizeof(*data));</span>
<span class="hl kwa">-	if (!data) {</span>
<span class="hl kwa">-		ret = -ENOMEM;</span>
<span class="hl kwa">-		goto out;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	if (!data-&gt;smbios)</span>
<span class="hl kwa">-		goto out_memremap;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	sz = sizeof(efi_config_table_64_t);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	p = tablep = early_memremap(tables, nr_tables * sz);</span>
<span class="hl kwa">-	if (!p) {</span>
<span class="hl kwa">-		pr_err(&quot;Could not map Configuration table!\n&quot;);</span>
<span class="hl kwa">-		ret = -ENOMEM;</span>
<span class="hl kwa">-		goto out_memremap;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	for (i = 0; i &lt; efi.systab-&gt;nr_tables; i++) {</span>
<span class="hl kwa">-		efi_guid_t guid;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		guid = ((efi_config_table_64_t *)p)-&gt;guid;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (!efi_guidcmp(guid, SMBIOS_TABLE_GUID))</span>
<span class="hl kwa">-			((efi_config_table_64_t *)p)-&gt;table = data-&gt;smbios;</span>
<span class="hl kwa">-		p += sz;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-	early_iounmap(tablep, nr_tables * sz);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-out_memremap:</span>
<span class="hl kwa">-	early_iounmap(data, sizeof(*data));</span>
<span class="hl kwa">-out:</span>
<span class="hl kwa">-	return ret;</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-</span>
 void __init efi_init(void)
 {
 	efi_char16_t *c16;
&#64;&#64; -1057,11 +931,7 &#64;&#64; static void __init kexec_enter_virtual_mode(void)
 		runtime_code_page_mkexec();
 
 	/* clean DUMMY object */
<span class="hl kwa">-	efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwa">-			 EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwa">-			 EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwa">-			 EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwa">-			 0, NULL);</span>
<span class="hl kwb">+	efi_delete_dummy_variable();</span>
 #endif
 }
 
&#64;&#64; -1179,11 +1049,7 &#64;&#64; static void __init __efi_enter_virtual_mode(void)
 	free_pages((unsigned long)new_memmap, pg_shift);
 
 	/* clean DUMMY object */
<span class="hl kwa">-	efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwa">-			 EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwa">-			 EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwa">-			 EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwa">-			 0, NULL);</span>
<span class="hl kwb">+	efi_delete_dummy_variable();</span>
 }
 
 void __init efi_enter_virtual_mode(void)
&#64;&#64; -1230,86 +1096,6 &#64;&#64; u64 efi_mem_attributes(unsigned long phys_addr)
 	return 0;
 }
 
<span class="hl kwa">-/*</span>
<span class="hl kwa">- * Some firmware implementations refuse to boot if there&#39;s insufficient space</span>
<span class="hl kwa">- * in the variable store. Ensure that we never use more than a safe limit.</span>
<span class="hl kwa">- *</span>
<span class="hl kwa">- * Return EFI_SUCCESS if it is safe to write &#39;size&#39; bytes to the variable</span>
<span class="hl kwa">- * store.</span>
<span class="hl kwa">- */</span>
<span class="hl kwa">-efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	efi_status_t status;</span>
<span class="hl kwa">-	u64 storage_size, remaining_size, max_size;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	if (!(attributes &amp; EFI_VARIABLE_NON_VOLATILE))</span>
<span class="hl kwa">-		return 0;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	status = efi.query_variable_info(attributes, &amp;storage_size,</span>
<span class="hl kwa">-					 &amp;remaining_size, &amp;max_size);</span>
<span class="hl kwa">-	if (status != EFI_SUCCESS)</span>
<span class="hl kwa">-		return status;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * We account for that by refusing the write if permitting it would</span>
<span class="hl kwa">-	 * reduce the available space to under 5KB. This figure was provided by</span>
<span class="hl kwa">-	 * Samsung, so should be safe.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	if ((remaining_size - size &lt; EFI_MIN_RESERVE) &amp;&amp;</span>
<span class="hl kwa">-		!efi_no_storage_paranoia) {</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		/*</span>
<span class="hl kwa">-		 * Triggering garbage collection may require that the firmware</span>
<span class="hl kwa">-		 * generate a real EFI_OUT_OF_RESOURCES error. We can force</span>
<span class="hl kwa">-		 * that by attempting to use more space than is available.</span>
<span class="hl kwa">-		 */</span>
<span class="hl kwa">-		unsigned long dummy_size = remaining_size + 1024;</span>
<span class="hl kwa">-		void *dummy = kzalloc(dummy_size, GFP_ATOMIC);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (!dummy)</span>
<span class="hl kwa">-			return EFI_OUT_OF_RESOURCES;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		status = efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwa">-					  EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwa">-					  EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwa">-					  EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwa">-					  dummy_size, dummy);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (status == EFI_SUCCESS) {</span>
<span class="hl kwa">-			/*</span>
<span class="hl kwa">-			 * This should have failed, so if it didn&#39;t make sure</span>
<span class="hl kwa">-			 * that we delete it...</span>
<span class="hl kwa">-			 */</span>
<span class="hl kwa">-			efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwa">-					 EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwa">-					 EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwa">-					 EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwa">-					 0, dummy);</span>
<span class="hl kwa">-		}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		kfree(dummy);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		/*</span>
<span class="hl kwa">-		 * The runtime code may now have triggered a garbage collection</span>
<span class="hl kwa">-		 * run, so check the variable info again</span>
<span class="hl kwa">-		 */</span>
<span class="hl kwa">-		status = efi.query_variable_info(attributes, &amp;storage_size,</span>
<span class="hl kwa">-						 &amp;remaining_size, &amp;max_size);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		if (status != EFI_SUCCESS)</span>
<span class="hl kwa">-			return status;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-		/*</span>
<span class="hl kwa">-		 * There still isn&#39;t enough room, so return an error</span>
<span class="hl kwa">-		 */</span>
<span class="hl kwa">-		if (remaining_size - size &lt; EFI_MIN_RESERVE)</span>
<span class="hl kwa">-			return EFI_OUT_OF_RESOURCES;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	return EFI_SUCCESS;</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-EXPORT_SYMBOL_GPL(efi_query_variable_store);</span>
<span class="hl kwa">-</span>
 static int __init parse_efi_cmdline(char *str)
 {
 	if (*str == &#39;=&#39;)
&#64;&#64; -1321,22 +1107,3 &#64;&#64; static int __init parse_efi_cmdline(char *str)
 	return 0;
 }
 early_param(&quot;efi&quot;, parse_efi_cmdline);
<span class="hl kwa">-</span>
<span class="hl kwa">-void __init efi_apply_memmap_quirks(void)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Once setup is done earlier, unmap the EFI memory map on mismatched</span>
<span class="hl kwa">-	 * firmware/kernel architectures since there is no support for runtime</span>
<span class="hl kwa">-	 * services.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	if (!efi_runtime_supported()) {</span>
<span class="hl kwa">-		pr_info(&quot;efi: Setup done, disabling due to 32/64-bit mismatch\n&quot;);</span>
<span class="hl kwa">-		efi_unmap_memmap();</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * UV doesn&#39;t support the new EFI pagetable mapping yet.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	if (is_uv_system())</span>
<span class="hl kwa">-		set_bit(EFI_OLD_MEMMAP, &amp;efi.flags);</span>
<span class="hl kwa">-}</span>
diff --git a/arch/x86/platform/efi/quirks.c b/arch/x86/platform/efi/quirks.c
new file mode 100644
index 0000000..1b9c4c3
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/arch/x86/platform/efi/quirks.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,290 &#64;&#64;</span>
<span class="hl kwb">+#include &lt;linux/init.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kernel.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/string.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/time.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/types.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/efi.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/slab.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/memblock.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/bootmem.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/acpi.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/efi.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/uv/uv.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define EFI_MIN_RESERVE 5120</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define EFI_DUMMY_GUID \</span>
<span class="hl kwb">+	EFI_GUID(0x4424ac57, 0xbe4b, 0x47dd, 0x9e, 0x97, 0xed, 0x50, 0xf0, 0x9f, 0x92, 0xa9)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static efi_char16_t efi_dummy_name[6] = { &#39;D&#39;, &#39;U&#39;, &#39;M&#39;, &#39;M&#39;, &#39;Y&#39;, 0 };</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static bool efi_no_storage_paranoia;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Some firmware implementations refuse to boot if there&#39;s insufficient</span>
<span class="hl kwb">+ * space in the variable store. The implementation of garbage collection</span>
<span class="hl kwb">+ * in some FW versions causes stale (deleted) variables to take up space</span>
<span class="hl kwb">+ * longer than intended and space is only freed once the store becomes</span>
<span class="hl kwb">+ * almost completely full.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Enabling this option disables the space checks in</span>
<span class="hl kwb">+ * efi_query_variable_store() and forces garbage collection.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Only enable this option if deleting EFI variables does not free up</span>
<span class="hl kwb">+ * space in your variable store, e.g. if despite deleting variables</span>
<span class="hl kwb">+ * you&#39;re unable to create new ones.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+static int __init setup_storage_paranoia(char *arg)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	efi_no_storage_paranoia = true;</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+early_param(&quot;efi_no_storage_paranoia&quot;, setup_storage_paranoia);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Deleting the dummy variable which kicks off garbage collection</span>
<span class="hl kwb">+*/</span>
<span class="hl kwb">+void efi_delete_dummy_variable(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwb">+			 EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwb">+			 EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwb">+			 EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwb">+			 0, NULL);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Some firmware implementations refuse to boot if there&#39;s insufficient space</span>
<span class="hl kwb">+ * in the variable store. Ensure that we never use more than a safe limit.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Return EFI_SUCCESS if it is safe to write &#39;size&#39; bytes to the variable</span>
<span class="hl kwb">+ * store.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+efi_status_t efi_query_variable_store(u32 attributes, unsigned long size)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	efi_status_t status;</span>
<span class="hl kwb">+	u64 storage_size, remaining_size, max_size;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!(attributes &amp; EFI_VARIABLE_NON_VOLATILE))</span>
<span class="hl kwb">+		return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	status = efi.query_variable_info(attributes, &amp;storage_size,</span>
<span class="hl kwb">+					 &amp;remaining_size, &amp;max_size);</span>
<span class="hl kwb">+	if (status != EFI_SUCCESS)</span>
<span class="hl kwb">+		return status;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * We account for that by refusing the write if permitting it would</span>
<span class="hl kwb">+	 * reduce the available space to under 5KB. This figure was provided by</span>
<span class="hl kwb">+	 * Samsung, so should be safe.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if ((remaining_size - size &lt; EFI_MIN_RESERVE) &amp;&amp;</span>
<span class="hl kwb">+		!efi_no_storage_paranoia) {</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/*</span>
<span class="hl kwb">+		 * Triggering garbage collection may require that the firmware</span>
<span class="hl kwb">+		 * generate a real EFI_OUT_OF_RESOURCES error. We can force</span>
<span class="hl kwb">+		 * that by attempting to use more space than is available.</span>
<span class="hl kwb">+		 */</span>
<span class="hl kwb">+		unsigned long dummy_size = remaining_size + 1024;</span>
<span class="hl kwb">+		void *dummy = kzalloc(dummy_size, GFP_ATOMIC);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (!dummy)</span>
<span class="hl kwb">+			return EFI_OUT_OF_RESOURCES;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		status = efi.set_variable(efi_dummy_name, &amp;EFI_DUMMY_GUID,</span>
<span class="hl kwb">+					  EFI_VARIABLE_NON_VOLATILE |</span>
<span class="hl kwb">+					  EFI_VARIABLE_BOOTSERVICE_ACCESS |</span>
<span class="hl kwb">+					  EFI_VARIABLE_RUNTIME_ACCESS,</span>
<span class="hl kwb">+					  dummy_size, dummy);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (status == EFI_SUCCESS) {</span>
<span class="hl kwb">+			/*</span>
<span class="hl kwb">+			 * This should have failed, so if it didn&#39;t make sure</span>
<span class="hl kwb">+			 * that we delete it...</span>
<span class="hl kwb">+			 */</span>
<span class="hl kwb">+			efi_delete_dummy_variable();</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		kfree(dummy);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/*</span>
<span class="hl kwb">+		 * The runtime code may now have triggered a garbage collection</span>
<span class="hl kwb">+		 * run, so check the variable info again</span>
<span class="hl kwb">+		 */</span>
<span class="hl kwb">+		status = efi.query_variable_info(attributes, &amp;storage_size,</span>
<span class="hl kwb">+						 &amp;remaining_size, &amp;max_size);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (status != EFI_SUCCESS)</span>
<span class="hl kwb">+			return status;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/*</span>
<span class="hl kwb">+		 * There still isn&#39;t enough room, so return an error</span>
<span class="hl kwb">+		 */</span>
<span class="hl kwb">+		if (remaining_size - size &lt; EFI_MIN_RESERVE)</span>
<span class="hl kwb">+			return EFI_OUT_OF_RESOURCES;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return EFI_SUCCESS;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+EXPORT_SYMBOL_GPL(efi_query_variable_store);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * The UEFI specification makes it clear that the operating system is free to do</span>
<span class="hl kwb">+ * whatever it wants with boot services code after ExitBootServices() has been</span>
<span class="hl kwb">+ * called. Ignoring this recommendation a significant bunch of EFI implementations </span>
<span class="hl kwb">+ * continue calling into boot services code (SetVirtualAddressMap). In order to </span>
<span class="hl kwb">+ * work around such buggy implementations we reserve boot services region during </span>
<span class="hl kwb">+ * EFI init and make sure it stays executable. Then, after SetVirtualAddressMap(), it</span>
<span class="hl kwb">+* is discarded.</span>
<span class="hl kwb">+*/</span>
<span class="hl kwb">+void __init efi_reserve_boot_services(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *p;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (p = memmap.map; p &lt; memmap.map_end; p += memmap.desc_size) {</span>
<span class="hl kwb">+		efi_memory_desc_t *md = p;</span>
<span class="hl kwb">+		u64 start = md-&gt;phys_addr;</span>
<span class="hl kwb">+		u64 size = md-&gt;num_pages &lt;&lt; EFI_PAGE_SHIFT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (md-&gt;type != EFI_BOOT_SERVICES_CODE &amp;&amp;</span>
<span class="hl kwb">+		    md-&gt;type != EFI_BOOT_SERVICES_DATA)</span>
<span class="hl kwb">+			continue;</span>
<span class="hl kwb">+		/* Only reserve where possible:</span>
<span class="hl kwb">+		 * - Not within any already allocated areas</span>
<span class="hl kwb">+		 * - Not over any memory area (really needed, if above?)</span>
<span class="hl kwb">+		 * - Not within any part of the kernel</span>
<span class="hl kwb">+		 * - Not the bios reserved area</span>
<span class="hl kwb">+		*/</span>
<span class="hl kwb">+		if ((start + size &gt; __pa_symbol(_text)</span>
<span class="hl kwb">+				&amp;&amp; start &lt;= __pa_symbol(_end)) ||</span>
<span class="hl kwb">+			!e820_all_mapped(start, start+size, E820_RAM) ||</span>
<span class="hl kwb">+			memblock_is_region_reserved(start, size)) {</span>
<span class="hl kwb">+			/* Could not reserve, skip it */</span>
<span class="hl kwb">+			md-&gt;num_pages = 0;</span>
<span class="hl kwb">+			memblock_dbg(&quot;Could not reserve boot range [0x%010llx-0x%010llx]\n&quot;,</span>
<span class="hl kwb">+				     start, start+size-1);</span>
<span class="hl kwb">+		} else</span>
<span class="hl kwb">+			memblock_reserve(start, size);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void __init efi_free_boot_services(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *p;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (p = memmap.map; p &lt; memmap.map_end; p += memmap.desc_size) {</span>
<span class="hl kwb">+		efi_memory_desc_t *md = p;</span>
<span class="hl kwb">+		unsigned long long start = md-&gt;phys_addr;</span>
<span class="hl kwb">+		unsigned long long size = md-&gt;num_pages &lt;&lt; EFI_PAGE_SHIFT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (md-&gt;type != EFI_BOOT_SERVICES_CODE &amp;&amp;</span>
<span class="hl kwb">+		    md-&gt;type != EFI_BOOT_SERVICES_DATA)</span>
<span class="hl kwb">+			continue;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/* Could not reserve boot area */</span>
<span class="hl kwb">+		if (!size)</span>
<span class="hl kwb">+			continue;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		free_bootmem_late(start, size);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	efi_unmap_memmap();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * A number of config table entries get remapped to virtual addresses</span>
<span class="hl kwb">+ * after entering EFI virtual mode. However, the kexec kernel requires</span>
<span class="hl kwb">+ * their physical addresses therefore we pass them via setup_data and</span>
<span class="hl kwb">+ * correct those entries to their respective physical addresses here.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Currently only handles smbios which is necessary for some firmware</span>
<span class="hl kwb">+ * implementation.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+int __init efi_reuse_config(u64 tables, int nr_tables)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int i, sz, ret = 0;</span>
<span class="hl kwb">+	void *p, *tablep;</span>
<span class="hl kwb">+	struct efi_setup_data *data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!efi_setup)</span>
<span class="hl kwb">+		return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!efi_enabled(EFI_64BIT))</span>
<span class="hl kwb">+		return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	data = early_memremap(efi_setup, sizeof(*data));</span>
<span class="hl kwb">+	if (!data) {</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!data-&gt;smbios)</span>
<span class="hl kwb">+		goto out_memremap;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	sz = sizeof(efi_config_table_64_t);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	p = tablep = early_memremap(tables, nr_tables * sz);</span>
<span class="hl kwb">+	if (!p) {</span>
<span class="hl kwb">+		pr_err(&quot;Could not map Configuration table!\n&quot;);</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto out_memremap;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; efi.systab-&gt;nr_tables; i++) {</span>
<span class="hl kwb">+		efi_guid_t guid;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		guid = ((efi_config_table_64_t *)p)-&gt;guid;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (!efi_guidcmp(guid, SMBIOS_TABLE_GUID))</span>
<span class="hl kwb">+			((efi_config_table_64_t *)p)-&gt;table = data-&gt;smbios;</span>
<span class="hl kwb">+		p += sz;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	early_iounmap(tablep, nr_tables * sz);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+out_memremap:</span>
<span class="hl kwb">+	early_iounmap(data, sizeof(*data));</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void __init efi_apply_memmap_quirks(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Once setup is done earlier, unmap the EFI memory map on mismatched</span>
<span class="hl kwb">+	 * firmware/kernel architectures since there is no support for runtime</span>
<span class="hl kwb">+	 * services.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (!efi_runtime_supported()) {</span>
<span class="hl kwb">+		pr_info(&quot;efi: Setup done, disabling due to 32/64-bit mismatch\n&quot;);</span>
<span class="hl kwb">+		efi_unmap_memmap();</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * UV doesn&#39;t support the new EFI pagetable mapping yet.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (is_uv_system())</span>
<span class="hl kwb">+		set_bit(EFI_OLD_MEMMAP, &amp;efi.flags);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * For most modern platforms the preferred method of powering off is via</span>
<span class="hl kwb">+ * ACPI. However, there are some that are known to require the use of</span>
<span class="hl kwb">+ * EFI runtime services and for which ACPI does not work at all.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Using EFI is a last resort, to be used only if no other option</span>
<span class="hl kwb">+ * exists.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+bool efi_reboot_required(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (!acpi_gbl_reduced_hardware)</span>
<span class="hl kwb">+		return false;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	efi_reboot_quirk_mode = EFI_RESET_WARM;</span>
<span class="hl kwb">+	return true;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+bool efi_poweroff_required(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return !!acpi_gbl_reduced_hardware;</span>
<span class="hl kwb">+}</span>
diff --git a/drivers/ata/ahci.h b/drivers/ata/ahci.h
index 05882e4..1db67a7 100644
<span class="hl kwa">--- a/drivers/ata/ahci.h</span>
<span class="hl kwb">+++ b/drivers/ata/ahci.h</span>
&#64;&#64; -373,6 +373,8 &#64;&#64; int ahci_do_softreset(struct ata_link *link, unsigned int *class,
 
 int ahci_stop_engine(struct ata_port *ap);
 void ahci_start_engine(struct ata_port *ap);
<span class="hl kwb">+int ahci_restart_engine(struct ata_port *ap);</span>
<span class="hl kwb">+void ahci_sw_activity(struct ata_link *link);</span>
 int ahci_check_ready(struct ata_link *link);
 int ahci_kick_engine(struct ata_port *ap);
 int ahci_port_resume(struct ata_port *ap);
diff --git a/drivers/ata/ahci_xgene.c b/drivers/ata/ahci_xgene.c
index 042a9bb..81fbdc9 100644
<span class="hl kwa">--- a/drivers/ata/ahci_xgene.c</span>
<span class="hl kwb">+++ b/drivers/ata/ahci_xgene.c</span>
<span class="hl kwd">&#64;&#64; -78,6 +78,7 &#64;&#64;</span>
 struct xgene_ahci_context {
 	struct ahci_host_priv *hpriv;
 	struct device *dev;
<span class="hl kwb">+	u8 last_cmd[MAX_AHCI_CHN_PERCTR]; /* tracking the last command */</span>
 	void __iomem *csr_core;		/* Core CSR address of IP */
 	void __iomem *csr_diag;		/* Diag CSR address of IP */
 	void __iomem *csr_axi;		/* AXI CSR address of IP */
&#64;&#64; -98,20 +99,72 &#64;&#64; static int xgene_ahci_init_memram(struct xgene_ahci_context *ctx)
 }
 
 /**
<span class="hl kwb">+ * xgene_ahci_qc_issue - Issue commands to the device</span>
<span class="hl kwb">+ * &#64;qc: Command to issue</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Due to H/W errata, for the IENTIFY DEVICE command</span>
<span class="hl kwb">+ * controller is unable to clear the BSY bit after</span>
<span class="hl kwb">+ * receiving the PIO setup FIS and results the dma</span>
<span class="hl kwb">+ * state machine to go into the CMFatalErrorUpdate</span>
<span class="hl kwb">+ * state resulting in the dma state machine lockup.</span>
<span class="hl kwb">+ * By restarting the dma engine to move it removes</span>
<span class="hl kwb">+ * the controller out of lock up state.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+static unsigned int xgene_ahci_qc_issue(struct ata_queued_cmd *qc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct ata_port *ap = qc-&gt;ap;</span>
<span class="hl kwb">+	void __iomem *port_mmio = ahci_port_base(ap);</span>
<span class="hl kwb">+	struct ahci_port_priv *pp = ap-&gt;private_data;</span>
<span class="hl kwb">+	struct ahci_host_priv *hpriv = ap-&gt;host-&gt;private_data;</span>
<span class="hl kwb">+	struct xgene_ahci_context *ctx = hpriv-&gt;plat_data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Keep track of the currently active link.  It will be used</span>
<span class="hl kwb">+	 * in completion path to determine whether NCQ phase is in</span>
<span class="hl kwb">+	 * progress.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	pp-&gt;active_link = qc-&gt;dev-&gt;link;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Restart the dma engine if the last cmd issued</span>
<span class="hl kwb">+	 * is IDENTIFY DEVICE command</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (unlikely(ctx-&gt;last_cmd[ap-&gt;port_no] == ATA_CMD_ID_ATA))</span>
<span class="hl kwb">+		ahci_restart_engine(ap);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (qc-&gt;tf.protocol == ATA_PROT_NCQ)</span>
<span class="hl kwb">+		writel(1 &lt;&lt; qc-&gt;tag, port_mmio + PORT_SCR_ACT);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pp-&gt;fbs_enabled &amp;&amp; pp-&gt;fbs_last_dev != qc-&gt;dev-&gt;link-&gt;pmp) {</span>
<span class="hl kwb">+		u32 fbs = readl(port_mmio + PORT_FBS);</span>
<span class="hl kwb">+		fbs &amp;= ~(PORT_FBS_DEV_MASK | PORT_FBS_DEC);</span>
<span class="hl kwb">+		fbs |= qc-&gt;dev-&gt;link-&gt;pmp &lt;&lt; PORT_FBS_DEV_OFFSET;</span>
<span class="hl kwb">+		writel(fbs, port_mmio + PORT_FBS);</span>
<span class="hl kwb">+		pp-&gt;fbs_last_dev = qc-&gt;dev-&gt;link-&gt;pmp;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	writel(1 &lt;&lt; qc-&gt;tag, port_mmio + PORT_CMD_ISSUE);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Save the last command issued */</span>
<span class="hl kwb">+	ctx-&gt;last_cmd[ap-&gt;port_no] = qc-&gt;tf.command;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ahci_sw_activity(qc-&gt;dev-&gt;link);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/**</span>
  * xgene_ahci_read_id - Read ID data from the specified device
  * &#64;dev: device
  * &#64;tf: proposed taskfile
  * &#64;id: data buffer
  *
  * This custom read ID function is required due to the fact that the HW
<span class="hl kwa">- * does not support DEVSLP and the controller state machine may get stuck</span>
<span class="hl kwa">- * after processing the ID query command.</span>
<span class="hl kwb">+ * does not support DEVSLP.</span>
  */
 static unsigned int xgene_ahci_read_id(struct ata_device *dev,
 				       struct ata_taskfile *tf, u16 *id)
 {
 	u32 err_mask;
<span class="hl kwa">-	void __iomem *port_mmio = ahci_port_base(dev-&gt;link-&gt;ap);</span>
 
 	err_mask = ata_do_dev_read_id(dev, tf, id);
 	if (err_mask)
&#64;&#64; -133,16 +186,6 &#64;&#64; static unsigned int xgene_ahci_read_id(struct ata_device *dev,
 	 */
 	id[ATA_ID_FEATURE_SUPP] &amp;= ~(1 &lt;&lt; 8);
 
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Due to HW errata, restart the port if no other command active.</span>
<span class="hl kwa">-	 * Otherwise the controller may get stuck.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	if (!readl(port_mmio + PORT_CMD_ISSUE)) {</span>
<span class="hl kwa">-		writel(PORT_CMD_FIS_RX, port_mmio + PORT_CMD);</span>
<span class="hl kwa">-		readl(port_mmio + PORT_CMD);	/* Force a barrier */</span>
<span class="hl kwa">-		writel(PORT_CMD_FIS_RX | PORT_CMD_START, port_mmio + PORT_CMD);</span>
<span class="hl kwa">-		readl(port_mmio + PORT_CMD);	/* Force a barrier */</span>
<span class="hl kwa">-	}</span>
 	return 0;
 }
 
&#64;&#64; -300,6 +343,7 &#64;&#64; static struct ata_port_operations xgene_ahci_ops = {
 	.host_stop = xgene_ahci_host_stop,
 	.hardreset = xgene_ahci_hardreset,
 	.read_id = xgene_ahci_read_id,
<span class="hl kwb">+	.qc_issue = xgene_ahci_qc_issue,</span>
 };
 
 static const struct ata_port_info xgene_ahci_port_info = {
diff --git a/drivers/ata/libahci.c b/drivers/ata/libahci.c
index 40ea583..3ec5dc7 100644
<span class="hl kwa">--- a/drivers/ata/libahci.c</span>
<span class="hl kwb">+++ b/drivers/ata/libahci.c</span>
&#64;&#64; -747,6 +747,18 &#64;&#64; static int ahci_set_lpm(struct ata_link *link, enum ata_lpm_policy policy,
 	return 0;
 }
 
<span class="hl kwb">+int ahci_restart_engine(struct ata_port *ap)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct ahci_host_priv *hpriv = ap-&gt;host-&gt;private_data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ahci_stop_engine(ap);</span>
<span class="hl kwb">+	ahci_start_fis_rx(ap);</span>
<span class="hl kwb">+	hpriv-&gt;start_engine(ap);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+EXPORT_SYMBOL_GPL(ahci_restart_engine);</span>
<span class="hl kwb">+</span>
 #ifdef CONFIG_PM
 static void ahci_power_down(struct ata_port *ap)
 {
&#64;&#64; -886,7 +898,7 &#64;&#64; int ahci_reset_controller(struct ata_host *host)
 }
 EXPORT_SYMBOL_GPL(ahci_reset_controller);
 
<span class="hl kwa">-static void ahci_sw_activity(struct ata_link *link)</span>
<span class="hl kwb">+void ahci_sw_activity(struct ata_link *link)</span>
 {
 	struct ata_port *ap = link-&gt;ap;
 	struct ahci_port_priv *pp = ap-&gt;private_data;
&#64;&#64; -899,6 +911,7 &#64;&#64; static void ahci_sw_activity(struct ata_link *link)
 	if (!timer_pending(&amp;emp-&gt;timer))
 		mod_timer(&amp;emp-&gt;timer, jiffies + msecs_to_jiffies(10));
 }
<span class="hl kwb">+EXPORT_SYMBOL_GPL(ahci_sw_activity);</span>
 
 static void ahci_sw_activity_blink(unsigned long arg)
 {
diff --git a/drivers/firmware/efi/Makefile b/drivers/firmware/efi/Makefile
index 9553496..c135154 100644
<span class="hl kwa">--- a/drivers/firmware/efi/Makefile</span>
<span class="hl kwb">+++ b/drivers/firmware/efi/Makefile</span>
<span class="hl kwd">&#64;&#64; -1,7 +1,7 &#64;&#64;</span>
 #
 # Makefile for linux kernel
 #
<span class="hl kwa">-obj-$(CONFIG_EFI)			+= efi.o vars.o</span>
<span class="hl kwb">+obj-$(CONFIG_EFI)			+= efi.o vars.o reboot.o</span>
 obj-$(CONFIG_EFI_VARS)			+= efivars.o
 obj-$(CONFIG_EFI_VARS_PSTORE)		+= efi-pstore.o
 obj-$(CONFIG_UEFI_CPER)			+= cper.o
diff --git a/drivers/firmware/efi/reboot.c b/drivers/firmware/efi/reboot.c
new file mode 100644
index 0000000..f94fb95
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/firmware/efi/reboot.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,55 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2014 Intel Corporation; author Matt Fleming</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#include &lt;linux/efi.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/reboot.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+int efi_reboot_quirk_mode = -1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void efi_reboot(enum reboot_mode reboot_mode, const char *__unused)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int efi_mode;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!efi_enabled(EFI_RUNTIME_SERVICES))</span>
<span class="hl kwb">+		return;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch (reboot_mode) {</span>
<span class="hl kwb">+	case REBOOT_WARM:</span>
<span class="hl kwb">+	case REBOOT_SOFT:</span>
<span class="hl kwb">+		efi_mode = EFI_RESET_WARM;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		efi_mode = EFI_RESET_COLD;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * If a quirk forced an EFI reset mode, always use that.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (efi_reboot_quirk_mode != -1)</span>
<span class="hl kwb">+		efi_mode = efi_reboot_quirk_mode;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	efi.reset_system(efi_mode, EFI_SUCCESS, 0, NULL);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+bool __weak efi_poweroff_required(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return false;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void efi_power_off(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	efi.reset_system(EFI_RESET_SHUTDOWN, EFI_SUCCESS, 0, NULL);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int __init efi_shutdown_init(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (!efi_enabled(EFI_RUNTIME_SERVICES))</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (efi_poweroff_required())</span>
<span class="hl kwb">+		pm_power_off = efi_power_off;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+late_initcall(efi_shutdown_init);</span>
diff --git a/drivers/irqchip/Kconfig b/drivers/irqchip/Kconfig
index bbb746e..7f0c2a3 100644
<span class="hl kwa">--- a/drivers/irqchip/Kconfig</span>
<span class="hl kwb">+++ b/drivers/irqchip/Kconfig</span>
&#64;&#64; -10,6 +10,11 &#64;&#64; config ARM_GIC
 config GIC_NON_BANKED
 	bool
 
<span class="hl kwb">+config ARM_GIC_V3</span>
<span class="hl kwb">+	bool</span>
<span class="hl kwb">+	select IRQ_DOMAIN</span>
<span class="hl kwb">+	select MULTI_IRQ_HANDLER</span>
<span class="hl kwb">+</span>
 config ARM_NVIC
 	bool
 	select IRQ_DOMAIN
diff --git a/drivers/irqchip/Makefile b/drivers/irqchip/Makefile
index 62a13e5..c57e642 100644
<span class="hl kwa">--- a/drivers/irqchip/Makefile</span>
<span class="hl kwb">+++ b/drivers/irqchip/Makefile</span>
&#64;&#64; -15,7 +15,8 &#64;&#64; obj-$(CONFIG_ORION_IRQCHIP)		+= irq-orion.o
 obj-$(CONFIG_ARCH_SUNXI)		+= irq-sun4i.o
 obj-$(CONFIG_ARCH_SUNXI)		+= irq-sunxi-nmi.o
 obj-$(CONFIG_ARCH_SPEAR3XX)		+= spear-shirq.o
<span class="hl kwa">-obj-$(CONFIG_ARM_GIC)			+= irq-gic.o</span>
<span class="hl kwb">+obj-$(CONFIG_ARM_GIC)			+= irq-gic.o irq-gic-common.o</span>
<span class="hl kwb">+obj-$(CONFIG_ARM_GIC_V3)		+= irq-gic-v3.o irq-gic-common.o</span>
 obj-$(CONFIG_ARM_NVIC)			+= irq-nvic.o
 obj-$(CONFIG_ARM_VIC)			+= irq-vic.o
 obj-$(CONFIG_IMGPDC_IRQ)		+= irq-imgpdc.o
diff --git a/drivers/irqchip/irq-gic-common.c b/drivers/irqchip/irq-gic-common.c
new file mode 100644
index 0000000..60ac704
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/irqchip/irq-gic-common.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,115 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2002 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/interrupt.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/io.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/irq.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &quot;irq-gic-common.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void gic_configure_irq(unsigned int irq, unsigned int type,</span>
<span class="hl kwb">+		       void __iomem *base, void (*sync_access)(void))</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 enablemask = 1 &lt;&lt; (irq % 32);</span>
<span class="hl kwb">+	u32 enableoff = (irq / 32) * 4;</span>
<span class="hl kwb">+	u32 confmask = 0x2 &lt;&lt; ((irq % 16) * 2);</span>
<span class="hl kwb">+	u32 confoff = (irq / 16) * 4;</span>
<span class="hl kwb">+	bool enabled = false;</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Read current configuration register, and insert the config</span>
<span class="hl kwb">+	 * for &quot;irq&quot;, depending on &quot;type&quot;.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	val = readl_relaxed(base + GIC_DIST_CONFIG + confoff);</span>
<span class="hl kwb">+	if (type == IRQ_TYPE_LEVEL_HIGH)</span>
<span class="hl kwb">+		val &amp;= ~confmask;</span>
<span class="hl kwb">+	else if (type == IRQ_TYPE_EDGE_RISING)</span>
<span class="hl kwb">+		val |= confmask;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * As recommended by the spec, disable the interrupt before changing</span>
<span class="hl kwb">+	 * the configuration</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (readl_relaxed(base + GIC_DIST_ENABLE_SET + enableoff) &amp; enablemask) {</span>
<span class="hl kwb">+		writel_relaxed(enablemask, base + GIC_DIST_ENABLE_CLEAR + enableoff);</span>
<span class="hl kwb">+		if (sync_access)</span>
<span class="hl kwb">+			sync_access();</span>
<span class="hl kwb">+		enabled = true;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Write back the new configuration, and possibly re-enable</span>
<span class="hl kwb">+	 * the interrupt.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	writel_relaxed(val, base + GIC_DIST_CONFIG + confoff);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (enabled)</span>
<span class="hl kwb">+		writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + enableoff);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (sync_access)</span>
<span class="hl kwb">+		sync_access();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void __init gic_dist_config(void __iomem *base, int gic_irqs,</span>
<span class="hl kwb">+			    void (*sync_access)(void))</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	unsigned int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Set all global interrupts to be level triggered, active low.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	for (i = 32; i &lt; gic_irqs; i += 16)</span>
<span class="hl kwb">+		writel_relaxed(0, base + GIC_DIST_CONFIG + i / 4);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Set priority on all global interrupts.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	for (i = 32; i &lt; gic_irqs; i += 4)</span>
<span class="hl kwb">+		writel_relaxed(0xa0a0a0a0, base + GIC_DIST_PRI + i);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Disable all interrupts.  Leave the PPI and SGIs alone</span>
<span class="hl kwb">+	 * as they are enabled by redistributor registers.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	for (i = 32; i &lt; gic_irqs; i += 32)</span>
<span class="hl kwb">+		writel_relaxed(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i / 8);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (sync_access)</span>
<span class="hl kwb">+		sync_access();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void gic_cpu_config(void __iomem *base, void (*sync_access)(void))</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Deal with the banked PPI and SGI interrupts - disable all</span>
<span class="hl kwb">+	 * PPI interrupts, ensure all SGI interrupts are enabled.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	writel_relaxed(0xffff0000, base + GIC_DIST_ENABLE_CLEAR);</span>
<span class="hl kwb">+	writel_relaxed(0x0000ffff, base + GIC_DIST_ENABLE_SET);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Set priority on PPI and SGI interrupts</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	for (i = 0; i &lt; 32; i += 4)</span>
<span class="hl kwb">+		writel_relaxed(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (sync_access)</span>
<span class="hl kwb">+		sync_access();</span>
<span class="hl kwb">+}</span>
diff --git a/drivers/irqchip/irq-gic-common.h b/drivers/irqchip/irq-gic-common.h
new file mode 100644
index 0000000..b41f024
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/irqchip/irq-gic-common.h</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,29 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2002 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifndef _IRQ_GIC_COMMON_H</span>
<span class="hl kwb">+#define _IRQ_GIC_COMMON_H</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/of.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/irqdomain.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void gic_configure_irq(unsigned int irq, unsigned int type,</span>
<span class="hl kwb">+                       void __iomem *base, void (*sync_access)(void));</span>
<span class="hl kwb">+void gic_dist_config(void __iomem *base, int gic_irqs,</span>
<span class="hl kwb">+		     void (*sync_access)(void));</span>
<span class="hl kwb">+void gic_cpu_config(void __iomem *base, void (*sync_access)(void));</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#endif /* _IRQ_GIC_COMMON_H */</span>
diff --git a/drivers/irqchip/irq-gic-v3.c b/drivers/irqchip/irq-gic-v3.c
new file mode 100644
index 0000000..c3dd8ad
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/irqchip/irq-gic-v3.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,690 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2013, 2014 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/cpu.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/delay.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/interrupt.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_address.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_irq.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/percpu.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/slab.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic-v3.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;asm/cputype.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/exception.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/smp_plat.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &quot;irq-gic-common.h&quot;</span>
<span class="hl kwb">+#include &quot;irqchip.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct gic_chip_data {</span>
<span class="hl kwb">+	void __iomem		*dist_base;</span>
<span class="hl kwb">+	void __iomem		**redist_base;</span>
<span class="hl kwb">+	void __percpu __iomem	**rdist;</span>
<span class="hl kwb">+	struct irq_domain	*domain;</span>
<span class="hl kwb">+	u64			redist_stride;</span>
<span class="hl kwb">+	u32			redist_regions;</span>
<span class="hl kwb">+	unsigned int		irq_nr;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct gic_chip_data gic_data __read_mostly;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define gic_data_rdist()		(this_cpu_ptr(gic_data.rdist))</span>
<span class="hl kwb">+#define gic_data_rdist_rd_base()	(*gic_data_rdist())</span>
<span class="hl kwb">+#define gic_data_rdist_sgi_base()	(gic_data_rdist_rd_base() + SZ_64K)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define DEFAULT_PMR_VALUE	0xf0</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline unsigned int gic_irq(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return d-&gt;hwirq;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline int gic_irq_in_rdist(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return gic_irq(d) &lt; 32;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void __iomem *gic_dist_base(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (gic_irq_in_rdist(d))	/* SGI+PPI -&gt; SGI_base for this CPU */</span>
<span class="hl kwb">+		return gic_data_rdist_sgi_base();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (d-&gt;hwirq &lt;= 1023)		/* SPI -&gt; dist_base */</span>
<span class="hl kwb">+		return gic_data.dist_base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (d-&gt;hwirq &gt;= 8192)</span>
<span class="hl kwb">+		BUG();		/* LPI Detected!!! */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return NULL;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_do_wait_for_rwp(void __iomem *base)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 count = 1000000;	/* 1s! */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	while (readl_relaxed(base + GICD_CTLR) &amp; GICD_CTLR_RWP) {</span>
<span class="hl kwb">+		count--;</span>
<span class="hl kwb">+		if (!count) {</span>
<span class="hl kwb">+			pr_err_ratelimited(&quot;RWP timeout, gone fishing\n&quot;);</span>
<span class="hl kwb">+			return;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+		cpu_relax();</span>
<span class="hl kwb">+		udelay(1);</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Wait for completion of a distributor change */</span>
<span class="hl kwb">+static void gic_dist_wait_for_rwp(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	gic_do_wait_for_rwp(gic_data.dist_base);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Wait for completion of a redistributor change */</span>
<span class="hl kwb">+static void gic_redist_wait_for_rwp(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	gic_do_wait_for_rwp(gic_data_rdist_rd_base());</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Low level accessors */</span>
<span class="hl kwb">+static u64 gic_read_iar(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 irqstat;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	asm volatile(&quot;mrs %0, &quot; __stringify(ICC_IAR1_EL1) : &quot;=r&quot; (irqstat));</span>
<span class="hl kwb">+	return irqstat;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_write_pmr(u64 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_PMR_EL1) &quot;, %0&quot; : : &quot;r&quot; (val));</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_write_ctlr(u64 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_CTLR_EL1) &quot;, %0&quot; : : &quot;r&quot; (val));</span>
<span class="hl kwb">+	isb();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_write_grpen1(u64 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_GRPEN1_EL1) &quot;, %0&quot; : : &quot;r&quot; (val));</span>
<span class="hl kwb">+	isb();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_write_sgi1r(u64 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_SGI1R_EL1) &quot;, %0&quot; : : &quot;r&quot; (val));</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_enable_sre(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	asm volatile(&quot;mrs %0, &quot; __stringify(ICC_SRE_EL1) : &quot;=r&quot; (val));</span>
<span class="hl kwb">+	val |= ICC_SRE_EL1_SRE;</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_SRE_EL1) &quot;, %0&quot; : : &quot;r&quot; (val));</span>
<span class="hl kwb">+	isb();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Need to check that the SRE bit has actually been set. If</span>
<span class="hl kwb">+	 * not, it means that SRE is disabled at EL2. We&#39;re going to</span>
<span class="hl kwb">+	 * die painfully, and there is nothing we can do about it.</span>
<span class="hl kwb">+	 *</span>
<span class="hl kwb">+	 * Kindly inform the luser.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	asm volatile(&quot;mrs %0, &quot; __stringify(ICC_SRE_EL1) : &quot;=r&quot; (val));</span>
<span class="hl kwb">+	if (!(val &amp; ICC_SRE_EL1_SRE))</span>
<span class="hl kwb">+		pr_err(&quot;GIC: unable to set SRE (disabled at EL2), panic ahead\n&quot;);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_enable_redist(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void __iomem *rbase;</span>
<span class="hl kwb">+	u32 count = 1000000;	/* 1s! */</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	rbase = gic_data_rdist_rd_base();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Wake up this CPU redistributor */</span>
<span class="hl kwb">+	val = readl_relaxed(rbase + GICR_WAKER);</span>
<span class="hl kwb">+	val &amp;= ~GICR_WAKER_ProcessorSleep;</span>
<span class="hl kwb">+	writel_relaxed(val, rbase + GICR_WAKER);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	while (readl_relaxed(rbase + GICR_WAKER) &amp; GICR_WAKER_ChildrenAsleep) {</span>
<span class="hl kwb">+		count--;</span>
<span class="hl kwb">+		if (!count) {</span>
<span class="hl kwb">+			pr_err_ratelimited(&quot;redist didn&#39;t wake up...\n&quot;);</span>
<span class="hl kwb">+			return;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+		cpu_relax();</span>
<span class="hl kwb">+		udelay(1);</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Routines to acknowledge, disable and enable interrupts</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+static void gic_poke_irq(struct irq_data *d, u32 offset)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 mask = 1 &lt;&lt; (gic_irq(d) % 32);</span>
<span class="hl kwb">+	void (*rwp_wait)(void);</span>
<span class="hl kwb">+	void __iomem *base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (gic_irq_in_rdist(d)) {</span>
<span class="hl kwb">+		base = gic_data_rdist_sgi_base();</span>
<span class="hl kwb">+		rwp_wait = gic_redist_wait_for_rwp;</span>
<span class="hl kwb">+	} else {</span>
<span class="hl kwb">+		base = gic_data.dist_base;</span>
<span class="hl kwb">+		rwp_wait = gic_dist_wait_for_rwp;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	writel_relaxed(mask, base + offset + (gic_irq(d) / 32) * 4);</span>
<span class="hl kwb">+	rwp_wait();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_peek_irq(struct irq_data *d, u32 offset)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 mask = 1 &lt;&lt; (gic_irq(d) % 32);</span>
<span class="hl kwb">+	void __iomem *base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (gic_irq_in_rdist(d))</span>
<span class="hl kwb">+		base = gic_data_rdist_sgi_base();</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		base = gic_data.dist_base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return !!(readl_relaxed(base + offset + (gic_irq(d) / 32) * 4) &amp; mask);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_mask_irq(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	gic_poke_irq(d, GICD_ICENABLER);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_unmask_irq(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	gic_poke_irq(d, GICD_ISENABLER);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_eoi_irq(struct irq_data *d)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	gic_write_eoir(gic_irq(d));</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_set_type(struct irq_data *d, unsigned int type)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	unsigned int irq = gic_irq(d);</span>
<span class="hl kwb">+	void (*rwp_wait)(void);</span>
<span class="hl kwb">+	void __iomem *base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Interrupt configuration for SGIs can&#39;t be changed */</span>
<span class="hl kwb">+	if (irq &lt; 16)</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (type != IRQ_TYPE_LEVEL_HIGH &amp;&amp; type != IRQ_TYPE_EDGE_RISING)</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (gic_irq_in_rdist(d)) {</span>
<span class="hl kwb">+		base = gic_data_rdist_sgi_base();</span>
<span class="hl kwb">+		rwp_wait = gic_redist_wait_for_rwp;</span>
<span class="hl kwb">+	} else {</span>
<span class="hl kwb">+		base = gic_data.dist_base;</span>
<span class="hl kwb">+		rwp_wait = gic_dist_wait_for_rwp;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_configure_irq(irq, type, base, rwp_wait);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 gic_mpidr_to_affinity(u64 mpidr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 aff;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	aff = (MPIDR_AFFINITY_LEVEL(mpidr, 3) &lt;&lt; 32 |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 2) &lt;&lt; 16 |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 1) &lt;&lt; 8  |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 0)) &amp; ~GICD_IROUTER_SPI_MODE_ANY;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return aff;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static asmlinkage void __exception_irq_entry gic_handle_irq(struct pt_regs *regs)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 irqnr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	do {</span>
<span class="hl kwb">+		irqnr = gic_read_iar();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (likely(irqnr &gt; 15 &amp;&amp; irqnr &lt; 1020)) {</span>
<span class="hl kwb">+			u64 irq = irq_find_mapping(gic_data.domain, irqnr);</span>
<span class="hl kwb">+			if (likely(irq)) {</span>
<span class="hl kwb">+				handle_IRQ(irq, regs);</span>
<span class="hl kwb">+				continue;</span>
<span class="hl kwb">+			}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+			WARN_ONCE(true, &quot;Unexpected SPI received!\n&quot;);</span>
<span class="hl kwb">+			gic_write_eoir(irqnr);</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+		if (irqnr &lt; 16) {</span>
<span class="hl kwb">+			gic_write_eoir(irqnr);</span>
<span class="hl kwb">+#ifdef CONFIG_SMP</span>
<span class="hl kwb">+			handle_IPI(irqnr, regs);</span>
<span class="hl kwb">+#else</span>
<span class="hl kwb">+			WARN_ONCE(true, &quot;Unexpected SGI received!\n&quot;);</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+			continue;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+	} while (irqnr != 0x3ff);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void __init gic_dist_init(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	unsigned int i;</span>
<span class="hl kwb">+	u64 affinity;</span>
<span class="hl kwb">+	void __iomem *base = gic_data.dist_base;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Disable the distributor */</span>
<span class="hl kwb">+	writel_relaxed(0, base + GICD_CTLR);</span>
<span class="hl kwb">+	gic_dist_wait_for_rwp();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_dist_config(base, gic_data.irq_nr, gic_dist_wait_for_rwp);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable distributor with ARE, Group1 */</span>
<span class="hl kwb">+	writel_relaxed(GICD_CTLR_ARE_NS | GICD_CTLR_ENABLE_G1A | GICD_CTLR_ENABLE_G1,</span>
<span class="hl kwb">+		       base + GICD_CTLR);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Set all global interrupts to the boot CPU only. ARE must be</span>
<span class="hl kwb">+	 * enabled.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	affinity = gic_mpidr_to_affinity(cpu_logical_map(smp_processor_id()));</span>
<span class="hl kwb">+	for (i = 32; i &lt; gic_data.irq_nr; i++)</span>
<span class="hl kwb">+		writeq_relaxed(affinity, base + GICD_IROUTER + i * 8);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_populate_rdist(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 mpidr = cpu_logical_map(smp_processor_id());</span>
<span class="hl kwb">+	u64 typer;</span>
<span class="hl kwb">+	u32 aff;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Convert affinity to a 32bit value that can be matched to</span>
<span class="hl kwb">+	 * GICR_TYPER bits [63:32].</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	aff = (MPIDR_AFFINITY_LEVEL(mpidr, 3) &lt;&lt; 24 |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 2) &lt;&lt; 16 |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 1) &lt;&lt; 8 |</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(mpidr, 0));</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; gic_data.redist_regions; i++) {</span>
<span class="hl kwb">+		void __iomem *ptr = gic_data.redist_base[i];</span>
<span class="hl kwb">+		u32 reg;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		reg = readl_relaxed(ptr + GICR_PIDR2) &amp; GIC_PIDR2_ARCH_MASK;</span>
<span class="hl kwb">+		if (reg != 0x30 &amp;&amp; reg != 0x40) { /* We&#39;re in trouble... */</span>
<span class="hl kwb">+			pr_warn(&quot;No redistributor present &#64;%p\n&quot;, ptr);</span>
<span class="hl kwb">+			break;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		do {</span>
<span class="hl kwb">+			typer = readq_relaxed(ptr + GICR_TYPER);</span>
<span class="hl kwb">+			if ((typer &gt;&gt; 32) == aff) {</span>
<span class="hl kwb">+				gic_data_rdist_rd_base() = ptr;</span>
<span class="hl kwb">+				pr_info(&quot;CPU%d: found redistributor %llx &#64;%p\n&quot;,</span>
<span class="hl kwb">+					smp_processor_id(),</span>
<span class="hl kwb">+					(unsigned long long)mpidr, ptr);</span>
<span class="hl kwb">+				return 0;</span>
<span class="hl kwb">+			}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+			if (gic_data.redist_stride) {</span>
<span class="hl kwb">+				ptr += gic_data.redist_stride;</span>
<span class="hl kwb">+			} else {</span>
<span class="hl kwb">+				ptr += SZ_64K * 2; /* Skip RD_base + SGI_base */</span>
<span class="hl kwb">+				if (typer &amp; GICR_TYPER_VLPIS)</span>
<span class="hl kwb">+					ptr += SZ_64K * 2; /* Skip VLPI_base + reserved page */</span>
<span class="hl kwb">+			}</span>
<span class="hl kwb">+		} while (!(typer &amp; GICR_TYPER_LAST));</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* We couldn&#39;t even deal with ourselves... */</span>
<span class="hl kwb">+	WARN(true, &quot;CPU%d: mpidr %llx has no re-distributor!\n&quot;,</span>
<span class="hl kwb">+	     smp_processor_id(), (unsigned long long)mpidr);</span>
<span class="hl kwb">+	return -ENODEV;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_cpu_init(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void __iomem *rbase;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Register ourselves with the rest of the world */</span>
<span class="hl kwb">+	if (gic_populate_rdist())</span>
<span class="hl kwb">+		return;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_enable_redist();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	rbase = gic_data_rdist_sgi_base();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_cpu_config(rbase, gic_redist_wait_for_rwp);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable system registers */</span>
<span class="hl kwb">+	gic_enable_sre();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Set priority mask register */</span>
<span class="hl kwb">+	gic_write_pmr(DEFAULT_PMR_VALUE);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* EOI deactivates interrupt too (mode 0) */</span>
<span class="hl kwb">+	gic_write_ctlr(ICC_CTLR_EL1_EOImode_drop_dir);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* ... and let&#39;s hit the road... */</span>
<span class="hl kwb">+	gic_write_grpen1(1);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifdef CONFIG_SMP</span>
<span class="hl kwb">+static int gic_secondary_init(struct notifier_block *nfb,</span>
<span class="hl kwb">+			      unsigned long action, void *hcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (action == CPU_STARTING || action == CPU_STARTING_FROZEN)</span>
<span class="hl kwb">+		gic_cpu_init();</span>
<span class="hl kwb">+	return NOTIFY_OK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Notifier for enabling the GIC CPU interface. Set an arbitrarily high</span>
<span class="hl kwb">+ * priority because the GIC needs to be up before the ARM generic timers.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+static struct notifier_block gic_cpu_notifier = {</span>
<span class="hl kwb">+	.notifier_call = gic_secondary_init,</span>
<span class="hl kwb">+	.priority = 100,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u16 gic_compute_target_list(int *base_cpu, const struct cpumask *mask,</span>
<span class="hl kwb">+				   u64 cluster_id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int cpu = *base_cpu;</span>
<span class="hl kwb">+	u64 mpidr = cpu_logical_map(cpu);</span>
<span class="hl kwb">+	u16 tlist = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	while (cpu &lt; nr_cpu_ids) {</span>
<span class="hl kwb">+		/*</span>
<span class="hl kwb">+		 * If we ever get a cluster of more than 16 CPUs, just</span>
<span class="hl kwb">+		 * scream and skip that CPU.</span>
<span class="hl kwb">+		 */</span>
<span class="hl kwb">+		if (WARN_ON((mpidr &amp; 0xff) &gt;= 16))</span>
<span class="hl kwb">+			goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		tlist |= 1 &lt;&lt; (mpidr &amp; 0xf);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		cpu = cpumask_next(cpu, mask);</span>
<span class="hl kwb">+		if (cpu == nr_cpu_ids)</span>
<span class="hl kwb">+			goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		mpidr = cpu_logical_map(cpu);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (cluster_id != (mpidr &amp; ~0xffUL)) {</span>
<span class="hl kwb">+			cpu--;</span>
<span class="hl kwb">+			goto out;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	*base_cpu = cpu;</span>
<span class="hl kwb">+	return tlist;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_send_sgi(u64 cluster_id, u16 tlist, unsigned int irq)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	val = (MPIDR_AFFINITY_LEVEL(cluster_id, 3) &lt;&lt; 48	|</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(cluster_id, 2) &lt;&lt; 32	|</span>
<span class="hl kwb">+	       irq &lt;&lt; 24			    		|</span>
<span class="hl kwb">+	       MPIDR_AFFINITY_LEVEL(cluster_id, 1) &lt;&lt; 16	|</span>
<span class="hl kwb">+	       tlist);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pr_debug(&quot;CPU%d: ICC_SGI1R_EL1 %llx\n&quot;, smp_processor_id(), val);</span>
<span class="hl kwb">+	gic_write_sgi1r(val);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_raise_softirq(const struct cpumask *mask, unsigned int irq)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int cpu;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (WARN_ON(irq &gt;= 16))</span>
<span class="hl kwb">+		return;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Ensure that stores to Normal memory are visible to the</span>
<span class="hl kwb">+	 * other CPUs before issuing the IPI.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	smp_wmb();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for_each_cpu_mask(cpu, *mask) {</span>
<span class="hl kwb">+		u64 cluster_id = cpu_logical_map(cpu) &amp; ~0xffUL;</span>
<span class="hl kwb">+		u16 tlist;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		tlist = gic_compute_target_list(&amp;cpu, mask, cluster_id);</span>
<span class="hl kwb">+		gic_send_sgi(cluster_id, tlist, irq);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Force the above writes to ICC_SGI1R_EL1 to be executed */</span>
<span class="hl kwb">+	isb();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void gic_smp_init(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	set_smp_cross_call(gic_raise_softirq);</span>
<span class="hl kwb">+	register_cpu_notifier(&amp;gic_cpu_notifier);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_set_affinity(struct irq_data *d, const struct cpumask *mask_val,</span>
<span class="hl kwb">+			    bool force)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	unsigned int cpu = cpumask_any_and(mask_val, cpu_online_mask);</span>
<span class="hl kwb">+	void __iomem *reg;</span>
<span class="hl kwb">+	int enabled;</span>
<span class="hl kwb">+	u64 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (gic_irq_in_rdist(d))</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* If interrupt was enabled, disable it first */</span>
<span class="hl kwb">+	enabled = gic_peek_irq(d, GICD_ISENABLER);</span>
<span class="hl kwb">+	if (enabled)</span>
<span class="hl kwb">+		gic_mask_irq(d);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	reg = gic_dist_base(d) + GICD_IROUTER + (gic_irq(d) * 8);</span>
<span class="hl kwb">+	val = gic_mpidr_to_affinity(cpu_logical_map(cpu));</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	writeq_relaxed(val, reg);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * If the interrupt was enabled, enabled it again. Otherwise,</span>
<span class="hl kwb">+	 * just wait for the distributor to have digested our changes.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	if (enabled)</span>
<span class="hl kwb">+		gic_unmask_irq(d);</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		gic_dist_wait_for_rwp();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return IRQ_SET_MASK_OK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+#else</span>
<span class="hl kwb">+#define gic_set_affinity	NULL</span>
<span class="hl kwb">+#define gic_smp_init()		do { } while(0)</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct irq_chip gic_chip = {</span>
<span class="hl kwb">+	.name			= &quot;GICv3&quot;,</span>
<span class="hl kwb">+	.irq_mask		= gic_mask_irq,</span>
<span class="hl kwb">+	.irq_unmask		= gic_unmask_irq,</span>
<span class="hl kwb">+	.irq_eoi		= gic_eoi_irq,</span>
<span class="hl kwb">+	.irq_set_type		= gic_set_type,</span>
<span class="hl kwb">+	.irq_set_affinity	= gic_set_affinity,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_irq_domain_map(struct irq_domain *d, unsigned int irq,</span>
<span class="hl kwb">+			      irq_hw_number_t hw)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	/* SGIs are private to the core kernel */</span>
<span class="hl kwb">+	if (hw &lt; 16)</span>
<span class="hl kwb">+		return -EPERM;</span>
<span class="hl kwb">+	/* PPIs */</span>
<span class="hl kwb">+	if (hw &lt; 32) {</span>
<span class="hl kwb">+		irq_set_percpu_devid(irq);</span>
<span class="hl kwb">+		irq_set_chip_and_handler(irq, &amp;gic_chip,</span>
<span class="hl kwb">+					 handle_percpu_devid_irq);</span>
<span class="hl kwb">+		set_irq_flags(irq, IRQF_VALID | IRQF_NOAUTOEN);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	/* SPIs */</span>
<span class="hl kwb">+	if (hw &gt;= 32 &amp;&amp; hw &lt; gic_data.irq_nr) {</span>
<span class="hl kwb">+		irq_set_chip_and_handler(irq, &amp;gic_chip,</span>
<span class="hl kwb">+					 handle_fasteoi_irq);</span>
<span class="hl kwb">+		set_irq_flags(irq, IRQF_VALID | IRQF_PROBE);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	irq_set_chip_data(irq, d-&gt;host_data);</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int gic_irq_domain_xlate(struct irq_domain *d,</span>
<span class="hl kwb">+				struct device_node *controller,</span>
<span class="hl kwb">+				const u32 *intspec, unsigned int intsize,</span>
<span class="hl kwb">+				unsigned long *out_hwirq, unsigned int *out_type)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (d-&gt;of_node != controller)</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+	if (intsize &lt; 3)</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch(intspec[0]) {</span>
<span class="hl kwb">+	case 0:			/* SPI */</span>
<span class="hl kwb">+		*out_hwirq = intspec[1] + 32;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case 1:			/* PPI */</span>
<span class="hl kwb">+		*out_hwirq = intspec[1] + 16;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*out_type = intspec[2] &amp; IRQ_TYPE_SENSE_MASK;</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct irq_domain_ops gic_irq_domain_ops = {</span>
<span class="hl kwb">+	.map = gic_irq_domain_map,</span>
<span class="hl kwb">+	.xlate = gic_irq_domain_xlate,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int __init gic_of_init(struct device_node *node, struct device_node *parent)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void __iomem *dist_base;</span>
<span class="hl kwb">+	void __iomem **redist_base;</span>
<span class="hl kwb">+	u64 redist_stride;</span>
<span class="hl kwb">+	u32 redist_regions;</span>
<span class="hl kwb">+	u32 reg;</span>
<span class="hl kwb">+	int gic_irqs;</span>
<span class="hl kwb">+	int err;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	dist_base = of_iomap(node, 0);</span>
<span class="hl kwb">+	if (!dist_base) {</span>
<span class="hl kwb">+		pr_err(&quot;%s: unable to map gic dist registers\n&quot;,</span>
<span class="hl kwb">+			node-&gt;full_name);</span>
<span class="hl kwb">+		return -ENXIO;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	reg = readl_relaxed(dist_base + GICD_PIDR2) &amp; GIC_PIDR2_ARCH_MASK;</span>
<span class="hl kwb">+	if (reg != 0x30 &amp;&amp; reg != 0x40) {</span>
<span class="hl kwb">+		pr_err(&quot;%s: no distributor detected, giving up\n&quot;,</span>
<span class="hl kwb">+			node-&gt;full_name);</span>
<span class="hl kwb">+		err = -ENODEV;</span>
<span class="hl kwb">+		goto out_unmap_dist;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (of_property_read_u32(node, &quot;#redistributor-regions&quot;, &amp;redist_regions))</span>
<span class="hl kwb">+		redist_regions = 1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	redist_base = kzalloc(sizeof(*redist_base) * redist_regions, GFP_KERNEL);</span>
<span class="hl kwb">+	if (!redist_base) {</span>
<span class="hl kwb">+		err = -ENOMEM;</span>
<span class="hl kwb">+		goto out_unmap_dist;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; redist_regions; i++) {</span>
<span class="hl kwb">+		redist_base[i] = of_iomap(node, 1 + i);</span>
<span class="hl kwb">+		if (!redist_base[i]) {</span>
<span class="hl kwb">+			pr_err(&quot;%s: couldn&#39;t map region %d\n&quot;,</span>
<span class="hl kwb">+			       node-&gt;full_name, i);</span>
<span class="hl kwb">+			err = -ENODEV;</span>
<span class="hl kwb">+			goto out_unmap_rdist;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (of_property_read_u64(node, &quot;redistributor-stride&quot;, &amp;redist_stride))</span>
<span class="hl kwb">+		redist_stride = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_data.dist_base = dist_base;</span>
<span class="hl kwb">+	gic_data.redist_base = redist_base;</span>
<span class="hl kwb">+	gic_data.redist_regions = redist_regions;</span>
<span class="hl kwb">+	gic_data.redist_stride = redist_stride;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Find out how many interrupts are supported.</span>
<span class="hl kwb">+	 * The GIC only supports up to 1020 interrupt sources (SGI+PPI+SPI)</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	gic_irqs = readl_relaxed(gic_data.dist_base + GICD_TYPER) &amp; 0x1f;</span>
<span class="hl kwb">+	gic_irqs = (gic_irqs + 1) * 32;</span>
<span class="hl kwb">+	if (gic_irqs &gt; 1020)</span>
<span class="hl kwb">+		gic_irqs = 1020;</span>
<span class="hl kwb">+	gic_data.irq_nr = gic_irqs;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_data.domain = irq_domain_add_tree(node, &amp;gic_irq_domain_ops,</span>
<span class="hl kwb">+					      &amp;gic_data);</span>
<span class="hl kwb">+	gic_data.rdist = alloc_percpu(typeof(*gic_data.rdist));</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (WARN_ON(!gic_data.domain) || WARN_ON(!gic_data.rdist)) {</span>
<span class="hl kwb">+		err = -ENOMEM;</span>
<span class="hl kwb">+		goto out_free;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	set_handle_irq(gic_handle_irq);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gic_smp_init();</span>
<span class="hl kwb">+	gic_dist_init();</span>
<span class="hl kwb">+	gic_cpu_init();</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+out_free:</span>
<span class="hl kwb">+	if (gic_data.domain)</span>
<span class="hl kwb">+		irq_domain_remove(gic_data.domain);</span>
<span class="hl kwb">+	free_percpu(gic_data.rdist);</span>
<span class="hl kwb">+out_unmap_rdist:</span>
<span class="hl kwb">+	for (i = 0; i &lt; redist_regions; i++)</span>
<span class="hl kwb">+		if (redist_base[i])</span>
<span class="hl kwb">+			iounmap(redist_base[i]);</span>
<span class="hl kwb">+	kfree(redist_base);</span>
<span class="hl kwb">+out_unmap_dist:</span>
<span class="hl kwb">+	iounmap(dist_base);</span>
<span class="hl kwb">+	return err;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+IRQCHIP_DECLARE(gic_v3, &quot;arm,gic-v3&quot;, gic_of_init);</span>
diff --git a/drivers/irqchip/irq-gic.c b/drivers/irqchip/irq-gic.c
index 7e11c9d..5a75b97 100644
<span class="hl kwa">--- a/drivers/irqchip/irq-gic.c</span>
<span class="hl kwb">+++ b/drivers/irqchip/irq-gic.c</span>
<span class="hl kwd">&#64;&#64; -46,6 +46,7 &#64;&#64;</span>
 #include &lt;asm/exception.h&gt;
 #include &lt;asm/smp_plat.h&gt;
 
<span class="hl kwb">+#include &quot;irq-gic-common.h&quot;</span>
 #include &quot;irqchip.h&quot;
 
 union gic_base {
&#64;&#64; -188,12 +189,6 &#64;&#64; static int gic_set_type(struct irq_data *d, unsigned int type)
 {
 	void __iomem *base = gic_dist_base(d);
 	unsigned int gicirq = gic_irq(d);
<span class="hl kwa">-	u32 enablemask = 1 &lt;&lt; (gicirq % 32);</span>
<span class="hl kwa">-	u32 enableoff = (gicirq / 32) * 4;</span>
<span class="hl kwa">-	u32 confmask = 0x2 &lt;&lt; ((gicirq % 16) * 2);</span>
<span class="hl kwa">-	u32 confoff = (gicirq / 16) * 4;</span>
<span class="hl kwa">-	bool enabled = false;</span>
<span class="hl kwa">-	u32 val;</span>
 
 	/* Interrupt configuration for SGIs can&#39;t be changed */
 	if (gicirq &lt; 16)
&#64;&#64; -207,25 +202,7 &#64;&#64; static int gic_set_type(struct irq_data *d, unsigned int type)
 	if (gic_arch_extn.irq_set_type)
 		gic_arch_extn.irq_set_type(d, type);
 
<span class="hl kwa">-	val = readl_relaxed(base + GIC_DIST_CONFIG + confoff);</span>
<span class="hl kwa">-	if (type == IRQ_TYPE_LEVEL_HIGH)</span>
<span class="hl kwa">-		val &amp;= ~confmask;</span>
<span class="hl kwa">-	else if (type == IRQ_TYPE_EDGE_RISING)</span>
<span class="hl kwa">-		val |= confmask;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * As recommended by the spec, disable the interrupt before changing</span>
<span class="hl kwa">-	 * the configuration</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	if (readl_relaxed(base + GIC_DIST_ENABLE_SET + enableoff) &amp; enablemask) {</span>
<span class="hl kwa">-		writel_relaxed(enablemask, base + GIC_DIST_ENABLE_CLEAR + enableoff);</span>
<span class="hl kwa">-		enabled = true;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	writel_relaxed(val, base + GIC_DIST_CONFIG + confoff);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	if (enabled)</span>
<span class="hl kwa">-		writel_relaxed(enablemask, base + GIC_DIST_ENABLE_SET + enableoff);</span>
<span class="hl kwb">+	gic_configure_irq(gicirq, type, base, NULL);</span>
 
 	raw_spin_unlock(&amp;irq_controller_lock);
 
&#64;&#64; -387,12 +364,6 &#64;&#64; static void __init gic_dist_init(struct gic_chip_data *gic)
 	writel_relaxed(0, base + GIC_DIST_CTRL);
 
 	/*
<span class="hl kwa">-	 * Set all global interrupts to be level triggered, active low.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	for (i = 32; i &lt; gic_irqs; i += 16)</span>
<span class="hl kwa">-		writel_relaxed(0, base + GIC_DIST_CONFIG + i * 4 / 16);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
 	 * Set all global interrupts to this CPU only.
 	 */
 	cpumask = gic_get_cpumask(gic);
&#64;&#64; -401,18 +372,7 &#64;&#64; static void __init gic_dist_init(struct gic_chip_data *gic)
 	for (i = 32; i &lt; gic_irqs; i += 4)
 		writel_relaxed(cpumask, base + GIC_DIST_TARGET + i * 4 / 4);
 
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Set priority on all global interrupts.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	for (i = 32; i &lt; gic_irqs; i += 4)</span>
<span class="hl kwa">-		writel_relaxed(0xa0a0a0a0, base + GIC_DIST_PRI + i * 4 / 4);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Disable all interrupts.  Leave the PPI and SGIs alone</span>
<span class="hl kwa">-	 * as these enables are banked registers.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	for (i = 32; i &lt; gic_irqs; i += 32)</span>
<span class="hl kwa">-		writel_relaxed(0xffffffff, base + GIC_DIST_ENABLE_CLEAR + i * 4 / 32);</span>
<span class="hl kwb">+	gic_dist_config(base, gic_irqs, NULL);</span>
 
 	writel_relaxed(1, base + GIC_DIST_CTRL);
 }
&#64;&#64; -422,6 +382,7 &#64;&#64; static void gic_cpu_init(struct gic_chip_data *gic)
 	void __iomem *dist_base = gic_data_dist_base(gic);
 	void __iomem *base = gic_data_cpu_base(gic);
 	unsigned int cpu_mask, cpu = smp_processor_id();
<span class="hl kwb">+	unsigned int ctrl_mask;</span>
 	int i;
 
 	/*
&#64;&#64; -439,27 +400,32 &#64;&#64; static void gic_cpu_init(struct gic_chip_data *gic)
 		if (i != cpu)
 			gic_cpu_map[i] &amp;= ~cpu_mask;
 
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Deal with the banked PPI and SGI interrupts - disable all</span>
<span class="hl kwa">-	 * PPI interrupts, ensure all SGI interrupts are enabled.</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	writel_relaxed(0xffff0000, dist_base + GIC_DIST_ENABLE_CLEAR);</span>
<span class="hl kwa">-	writel_relaxed(0x0000ffff, dist_base + GIC_DIST_ENABLE_SET);</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	/*</span>
<span class="hl kwa">-	 * Set priority on PPI and SGI interrupts</span>
<span class="hl kwa">-	 */</span>
<span class="hl kwa">-	for (i = 0; i &lt; 32; i += 4)</span>
<span class="hl kwa">-		writel_relaxed(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4 / 4);</span>
<span class="hl kwb">+	gic_cpu_config(dist_base, NULL);</span>
 
 	writel_relaxed(0xf0, base + GIC_CPU_PRIMASK);
<span class="hl kwa">-	writel_relaxed(1, base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ctrl_mask = readl(base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Mask out the gic v2 bypass bits */</span>
<span class="hl kwb">+	ctrl_mask &amp;= 0x1e0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable group 0 */</span>
<span class="hl kwb">+	ctrl_mask |= 0x1;</span>
<span class="hl kwb">+	writel_relaxed(ctrl_mask, base + GIC_CPU_CTRL);</span>
 }
 
 void gic_cpu_if_down(void)
 {
<span class="hl kwb">+	unsigned int ctrl_mask;</span>
 	void __iomem *cpu_base = gic_data_cpu_base(&amp;gic_data[0]);
<span class="hl kwa">-	writel_relaxed(0, cpu_base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ctrl_mask = readl(cpu_base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * Disable grp enable bit, leave the bypass bits alone as changing</span>
<span class="hl kwb">+	 * them could leave the system unstable</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	ctrl_mask &amp;= 0x1e0;</span>
<span class="hl kwb">+	writel_relaxed(ctrl_mask, cpu_base + GIC_CPU_CTRL);</span>
 }
 
 #ifdef CONFIG_CPU_PM
&#64;&#64; -570,6 +536,7 &#64;&#64; static void gic_cpu_restore(unsigned int gic_nr)
 {
 	int i;
 	u32 *ptr;
<span class="hl kwb">+	unsigned int ctrl_mask;</span>
 	void __iomem *dist_base;
 	void __iomem *cpu_base;
 
&#64;&#64; -594,7 +561,15 &#64;&#64; static void gic_cpu_restore(unsigned int gic_nr)
 		writel_relaxed(0xa0a0a0a0, dist_base + GIC_DIST_PRI + i * 4);
 
 	writel_relaxed(0xf0, cpu_base + GIC_CPU_PRIMASK);
<span class="hl kwa">-	writel_relaxed(1, cpu_base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ctrl_mask = readl(cpu_base + GIC_CPU_CTRL);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Mask out the gic v2 bypass bits */</span>
<span class="hl kwb">+	ctrl_mask &amp;= 0x1e0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable group 0 */</span>
<span class="hl kwb">+	ctrl_mask |= 0x1;</span>
<span class="hl kwb">+	writel_relaxed(ctrl_mask, cpu_base + GIC_CPU_CTRL);</span>
 }
 
 static int gic_notifier(struct notifier_block *self, unsigned long cmd,	void *v)
diff --git a/drivers/net/ethernet/Kconfig b/drivers/net/ethernet/Kconfig
index edb7186..dc7406c 100644
<span class="hl kwa">--- a/drivers/net/ethernet/Kconfig</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/Kconfig</span>
&#64;&#64; -24,6 +24,7 &#64;&#64; source &quot;drivers/net/ethernet/allwinner/Kconfig&quot;
 source &quot;drivers/net/ethernet/alteon/Kconfig&quot;
 source &quot;drivers/net/ethernet/altera/Kconfig&quot;
 source &quot;drivers/net/ethernet/amd/Kconfig&quot;
<span class="hl kwb">+source &quot;drivers/net/ethernet/apm/Kconfig&quot;</span>
 source &quot;drivers/net/ethernet/apple/Kconfig&quot;
 source &quot;drivers/net/ethernet/arc/Kconfig&quot;
 source &quot;drivers/net/ethernet/atheros/Kconfig&quot;
diff --git a/drivers/net/ethernet/Makefile b/drivers/net/ethernet/Makefile
index 58de333..224a018 100644
<span class="hl kwa">--- a/drivers/net/ethernet/Makefile</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/Makefile</span>
&#64;&#64; -10,6 +10,7 &#64;&#64; obj-$(CONFIG_NET_VENDOR_ALLWINNER) += allwinner/
 obj-$(CONFIG_NET_VENDOR_ALTEON) += alteon/
 obj-$(CONFIG_ALTERA_TSE) += altera/
 obj-$(CONFIG_NET_VENDOR_AMD) += amd/
<span class="hl kwb">+obj-$(CONFIG_NET_XGENE) += apm/</span>
 obj-$(CONFIG_NET_VENDOR_APPLE) += apple/
 obj-$(CONFIG_NET_VENDOR_ARC) += arc/
 obj-$(CONFIG_NET_VENDOR_ATHEROS) += atheros/
diff --git a/drivers/net/ethernet/apm/Kconfig b/drivers/net/ethernet/apm/Kconfig
new file mode 100644
index 0000000..ec63d70
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/Kconfig</span>
<span class="hl kwd">&#64;&#64; -0,0 +1 &#64;&#64;</span>
<span class="hl kwb">+source &quot;drivers/net/ethernet/apm/xgene/Kconfig&quot;</span>
diff --git a/drivers/net/ethernet/apm/Makefile b/drivers/net/ethernet/apm/Makefile
new file mode 100644
index 0000000..65ce32a
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/Makefile</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,5 &#64;&#64;</span>
<span class="hl kwb">+#</span>
<span class="hl kwb">+# Makefile for APM X-GENE Ethernet driver.</span>
<span class="hl kwb">+#</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+obj-$(CONFIG_NET_XGENE) += xgene/</span>
diff --git a/drivers/net/ethernet/apm/xgene/Kconfig b/drivers/net/ethernet/apm/xgene/Kconfig
new file mode 100644
index 0000000..616dff6
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/Kconfig</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,9 &#64;&#64;</span>
<span class="hl kwb">+config NET_XGENE</span>
<span class="hl kwb">+	tristate &quot;APM X-Gene SoC Ethernet Driver&quot;</span>
<span class="hl kwb">+	select PHYLIB</span>
<span class="hl kwb">+	help</span>
<span class="hl kwb">+	  This is the Ethernet driver for the on-chip ethernet interface on the</span>
<span class="hl kwb">+	  APM X-Gene SoC.</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	  To compile this driver as a module, choose M here. This module will</span>
<span class="hl kwb">+	  be called xgene_enet.</span>
diff --git a/drivers/net/ethernet/apm/xgene/Makefile b/drivers/net/ethernet/apm/xgene/Makefile
new file mode 100644
index 0000000..c643e8a
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/Makefile</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,6 &#64;&#64;</span>
<span class="hl kwb">+#</span>
<span class="hl kwb">+# Makefile for APM X-Gene Ethernet Driver.</span>
<span class="hl kwb">+#</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+xgene-enet-objs := xgene_enet_hw.o xgene_enet_main.o xgene_enet_ethtool.o</span>
<span class="hl kwb">+obj-$(CONFIG_NET_XGENE) += xgene-enet.o</span>
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c b/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c
new file mode 100644
index 0000000..63f2aa5
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_ethtool.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,125 &#64;&#64;</span>
<span class="hl kwb">+/* Applied Micro X-Gene SoC Ethernet Driver</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (c) 2014, Applied Micro Circuits Corporation</span>
<span class="hl kwb">+ * Authors: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute  it and/or modify it</span>
<span class="hl kwb">+ * under  the terms of  the GNU General  Public License as published by the</span>
<span class="hl kwb">+ * Free Software Foundation;  either version 2 of the  License, or (at your</span>
<span class="hl kwb">+ * option) any later version.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/ethtool.h&gt;</span>
<span class="hl kwb">+#include &quot;xgene_enet_main.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_gstrings_stats {</span>
<span class="hl kwb">+	char name[ETH_GSTRING_LEN];</span>
<span class="hl kwb">+	int offset;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define XGENE_STAT(m) { #m, offsetof(struct xgene_enet_pdata, stats.m) }</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct xgene_gstrings_stats gstrings_stats[] = {</span>
<span class="hl kwb">+	XGENE_STAT(rx_packets),</span>
<span class="hl kwb">+	XGENE_STAT(tx_packets),</span>
<span class="hl kwb">+	XGENE_STAT(rx_bytes),</span>
<span class="hl kwb">+	XGENE_STAT(tx_bytes),</span>
<span class="hl kwb">+	XGENE_STAT(rx_errors),</span>
<span class="hl kwb">+	XGENE_STAT(tx_errors),</span>
<span class="hl kwb">+	XGENE_STAT(rx_length_errors),</span>
<span class="hl kwb">+	XGENE_STAT(rx_crc_errors),</span>
<span class="hl kwb">+	XGENE_STAT(rx_frame_errors),</span>
<span class="hl kwb">+	XGENE_STAT(rx_fifo_errors)</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define XGENE_STATS_LEN		ARRAY_SIZE(gstrings_stats)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_get_drvinfo(struct net_device *ndev,</span>
<span class="hl kwb">+			      struct ethtool_drvinfo *info)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct platform_device *pdev = pdata-&gt;pdev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	strcpy(info-&gt;driver, &quot;xgene_enet&quot;);</span>
<span class="hl kwb">+	strcpy(info-&gt;version, XGENE_DRV_VERSION);</span>
<span class="hl kwb">+	snprintf(info-&gt;fw_version, ETHTOOL_FWVERS_LEN, &quot;N/A&quot;);</span>
<span class="hl kwb">+	sprintf(info-&gt;bus_info, &quot;%s&quot;, pdev-&gt;name);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_get_settings(struct net_device *ndev, struct ethtool_cmd *cmd)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct phy_device *phydev = pdata-&gt;phy_dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (phydev == NULL)</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return phy_ethtool_gset(phydev, cmd);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_set_settings(struct net_device *ndev, struct ethtool_cmd *cmd)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct phy_device *phydev = pdata-&gt;phy_dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (phydev == NULL)</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return phy_ethtool_sset(phydev, cmd);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_get_strings(struct net_device *ndev, u32 stringset, u8 *data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+	u8 *p = data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (stringset != ETH_SS_STATS)</span>
<span class="hl kwb">+		return;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; XGENE_STATS_LEN; i++) {</span>
<span class="hl kwb">+		memcpy(p, gstrings_stats[i].name, ETH_GSTRING_LEN);</span>
<span class="hl kwb">+		p += ETH_GSTRING_LEN;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_get_sset_count(struct net_device *ndev, int sset)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (sset != ETH_SS_STATS)</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return XGENE_STATS_LEN;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_get_ethtool_stats(struct net_device *ndev,</span>
<span class="hl kwb">+				    struct ethtool_stats *dummy,</span>
<span class="hl kwb">+				    u64 *data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; XGENE_STATS_LEN; i++)</span>
<span class="hl kwb">+		*data++ = *(u64 *)(pdata + gstrings_stats[i].offset);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct ethtool_ops xgene_ethtool_ops = {</span>
<span class="hl kwb">+	.get_drvinfo = xgene_get_drvinfo,</span>
<span class="hl kwb">+	.get_settings = xgene_get_settings,</span>
<span class="hl kwb">+	.set_settings = xgene_set_settings,</span>
<span class="hl kwb">+	.get_link = ethtool_op_get_link,</span>
<span class="hl kwb">+	.get_strings = xgene_get_strings,</span>
<span class="hl kwb">+	.get_sset_count = xgene_get_sset_count,</span>
<span class="hl kwb">+	.get_ethtool_stats = xgene_get_ethtool_stats</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_set_ethtool_ops(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	ndev-&gt;ethtool_ops = &amp;xgene_ethtool_ops;</span>
<span class="hl kwb">+}</span>
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c
new file mode 100644
index 0000000..6c4a484
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,848 &#64;&#64;</span>
<span class="hl kwb">+/* Applied Micro X-Gene SoC Ethernet Driver</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (c) 2014, Applied Micro Circuits Corporation</span>
<span class="hl kwb">+ * Authors: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Ravi Patel &lt;rapatel&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute  it and/or modify it</span>
<span class="hl kwb">+ * under  the terms of  the GNU General  Public License as published by the</span>
<span class="hl kwb">+ * Free Software Foundation;  either version 2 of the  License, or (at your</span>
<span class="hl kwb">+ * option) any later version.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &quot;xgene_enet_main.h&quot;</span>
<span class="hl kwb">+#include &quot;xgene_enet_hw.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+u64 xgene_prepare_eth_work_msg(u8 l4hlen, u8 l3hlen, u8 ethhdr,</span>
<span class="hl kwb">+			       u8 csum_enable, u8 proto)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 hopinfo;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	hopinfo = (l4hlen &amp; TCPHDR_MASK) |</span>
<span class="hl kwb">+		  ((l3hlen &lt;&lt; IPHDR_POS) &amp; IPHDR_MASK) |</span>
<span class="hl kwb">+		  (ethhdr &lt;&lt; ETHHDR_POS) |</span>
<span class="hl kwb">+		  ((csum_enable &lt;&lt; EC_POS) &amp; EC_MASK) |</span>
<span class="hl kwb">+		  ((proto &lt;&lt; IS_POS) &amp; IS_MASK) |</span>
<span class="hl kwb">+		  INSERT_CRC |</span>
<span class="hl kwb">+		  TYPE_ETH_WORK_MESSAGE;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return hopinfo;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Tx descriptor raw write */</span>
<span class="hl kwb">+void xgene_set_tx_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+		       struct xgene_enet_raw_desc *raw_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	raw_desc-&gt;m0 = ring-&gt;desc.userinfo;</span>
<span class="hl kwb">+	raw_desc-&gt;m1 = (ring-&gt;desc.dataaddr &amp; DATAADDR_MASK) |</span>
<span class="hl kwb">+		       (((u64)ring-&gt;desc.bufdatalen &lt;&lt; BUFDATALEN_POS) &amp;</span>
<span class="hl kwb">+		       BUFDATALEN_MASK) | COHERENT_MASK;</span>
<span class="hl kwb">+	raw_desc-&gt;m3 = (((u64)ring-&gt;desc.henqnum &lt;&lt; HENQNUM_POS) &amp;</span>
<span class="hl kwb">+		       HENQNUM_MASK) |</span>
<span class="hl kwb">+		       ring-&gt;desc.hopinfo_lsb;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* descriptor raw read */</span>
<span class="hl kwb">+void xgene_get_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+		    struct xgene_enet_raw_desc *raw_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc *desc = &amp;ring-&gt;desc;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc-&gt;dataaddr = raw_desc-&gt;m1 &amp; DATAADDR_MASK;</span>
<span class="hl kwb">+	desc-&gt;bufdatalen = (raw_desc-&gt;m1 &amp; BUFDATALEN_MASK) &gt;&gt; BUFDATALEN_POS;</span>
<span class="hl kwb">+	desc-&gt;userinfo = raw_desc-&gt;m0 &amp; USERINFO_MASK;</span>
<span class="hl kwb">+	desc-&gt;fpqnum = (raw_desc-&gt;m0 &amp; FPQNUM_MASK) &gt;&gt; FPQNUM_POS;</span>
<span class="hl kwb">+	desc-&gt;status = (raw_desc-&gt;m0 &amp; LERR_MASK) &gt;&gt; LERR_POS;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Bufpool descriptor raw write common fields */</span>
<span class="hl kwb">+void xgene_set_init_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				 struct xgene_enet_raw_desc16 *raw_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	raw_desc-&gt;m0 = (ring-&gt;desc.userinfo) |</span>
<span class="hl kwb">+		       (((u64)ring-&gt;desc.fpqnum &lt;&lt; FPQNUM_POS) &amp; FPQNUM_MASK) |</span>
<span class="hl kwb">+		       STASHING_MASK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Bufpool descriptor raw write */</span>
<span class="hl kwb">+void xgene_set_refill_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				   struct xgene_enet_raw_desc16 *raw_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	raw_desc-&gt;m1 = (ring-&gt;desc.dataaddr &amp; DATAADDR_MASK) |</span>
<span class="hl kwb">+		       (((u64)ring-&gt;desc.bufdatalen &lt;&lt; BUFDATALEN_POS) &amp;</span>
<span class="hl kwb">+		       BUFDATALEN_MASK) |</span>
<span class="hl kwb">+		       COHERENT_MASK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Bufpool descriptor raw read */</span>
<span class="hl kwb">+void xgene_get_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+			    struct xgene_enet_raw_desc16 *raw_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc *desc = &amp;ring-&gt;desc;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc-&gt;userinfo = raw_desc-&gt;m0 &amp; USERINFO_MASK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_ring_init(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 *ring_cfg = ring-&gt;state;</span>
<span class="hl kwb">+	u64 addr = ring-&gt;dma;</span>
<span class="hl kwb">+	enum xgene_enet_ring_cfgsize cfgsize = ring-&gt;cfgsize;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_cfg[4] |= (1 &lt;&lt; SELTHRSH_POS) &amp;</span>
<span class="hl kwb">+			CREATE_MASK(SELTHRSH_POS, SELTHRSH_LEN);</span>
<span class="hl kwb">+	ring_cfg[3] |= ACCEPTLERR;</span>
<span class="hl kwb">+	ring_cfg[2] |= QCOHERENT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	addr &gt;&gt;= 8;</span>
<span class="hl kwb">+	ring_cfg[2] |= (addr &lt;&lt; RINGADDRL_POS) &amp;</span>
<span class="hl kwb">+			CREATE_MASK_ULL(RINGADDRL_POS, RINGADDRL_LEN);</span>
<span class="hl kwb">+	addr &gt;&gt;= RINGADDRL_LEN;</span>
<span class="hl kwb">+	ring_cfg[3] |= addr &amp; CREATE_MASK_ULL(RINGADDRH_POS, RINGADDRH_LEN);</span>
<span class="hl kwb">+	ring_cfg[3] |= ((u32) cfgsize &lt;&lt; RINGSIZE_POS) &amp;</span>
<span class="hl kwb">+			CREATE_MASK(RINGSIZE_POS, RINGSIZE_LEN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_ring_set_type(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 *ring_cfg = ring-&gt;state;</span>
<span class="hl kwb">+	bool is_bufpool;</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	is_bufpool = xgene_enet_is_bufpool(ring-&gt;id);</span>
<span class="hl kwb">+	val = (is_bufpool) ? RING_BUFPOOL : RING_REGULAR;</span>
<span class="hl kwb">+	ring_cfg[4] |= (val &lt;&lt; RINGTYPE_POS) &amp;</span>
<span class="hl kwb">+			CREATE_MASK(RINGTYPE_POS, RINGTYPE_LEN);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (is_bufpool) {</span>
<span class="hl kwb">+		ring_cfg[3] |= (BUFPOOL_MODE &lt;&lt; RINGMODE_POS) &amp;</span>
<span class="hl kwb">+				CREATE_MASK(RINGMODE_POS, RINGMODE_LEN);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_ring_set_recombbuf(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 *ring_cfg = ring-&gt;state;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_cfg[3] |= RECOMBBUF;</span>
<span class="hl kwb">+	ring_cfg[3] |= (0xf &lt;&lt; RECOMTIMEOUTL_POS) &amp;</span>
<span class="hl kwb">+			CREATE_MASK(RECOMTIMEOUTL_POS, RECOMTIMEOUTL_LEN);</span>
<span class="hl kwb">+	ring_cfg[4] |= 0x7 &amp; CREATE_MASK(RECOMTIMEOUTH_POS, RECOMTIMEOUTH_LEN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_ring_wr32(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				 u32 offset, u32 data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ring-&gt;ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(data, pdata-&gt;ring_csr_addr + offset);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_ring_rd32(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				 u32 offset, u32 *data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ring-&gt;ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*data = ioread32(pdata-&gt;ring_csr_addr + offset);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_write_ring_state(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_CONFIG, ring-&gt;num);</span>
<span class="hl kwb">+	for (i = 0; i &lt; NUM_RING_CONFIG; i++) {</span>
<span class="hl kwb">+		xgene_enet_ring_wr32(ring, CSR_RING_WR_BASE + (i * 4),</span>
<span class="hl kwb">+				     ring-&gt;state[i]);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_clr_ring_state(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	memset(ring-&gt;state, 0, sizeof(u32) * NUM_RING_CONFIG);</span>
<span class="hl kwb">+	xgene_enet_write_ring_state(ring);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_set_ring_state(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	xgene_enet_ring_set_type(ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (xgene_enet_ring_owner(ring-&gt;id) == RING_OWNER_ETH0)</span>
<span class="hl kwb">+		xgene_enet_ring_set_recombbuf(ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_ring_init(ring);</span>
<span class="hl kwb">+	xgene_enet_write_ring_state(ring);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_set_ring_id(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 ring_id_val, ring_id_buf;</span>
<span class="hl kwb">+	bool is_bufpool;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	is_bufpool = xgene_enet_is_bufpool(ring-&gt;id);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_id_val = ring-&gt;id &amp; GENMASK(9, 0);</span>
<span class="hl kwb">+	ring_id_val |= OVERWRITE;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_id_buf = (ring-&gt;num &lt;&lt; 9) &amp; GENMASK(18, 9);</span>
<span class="hl kwb">+	ring_id_buf |= PREFETCH_BUF_EN;</span>
<span class="hl kwb">+	if (is_bufpool)</span>
<span class="hl kwb">+		ring_id_buf |= IS_BUFFER_POOL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_ID, ring_id_val);</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_ID_BUF, ring_id_buf);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_clr_desc_ring_id(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 ring_id;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_id = ring-&gt;id | OVERWRITE;</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_ID, ring_id);</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_ID_BUF, 0);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_desc_ring *xgene_enet_setup_ring(</span>
<span class="hl kwb">+					struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 size = ring-&gt;size;</span>
<span class="hl kwb">+	u32 i, data;</span>
<span class="hl kwb">+	u64 *desc;</span>
<span class="hl kwb">+	bool is_bufpool;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_clr_ring_state(ring);</span>
<span class="hl kwb">+	xgene_enet_set_ring_state(ring);</span>
<span class="hl kwb">+	xgene_enet_set_ring_id(ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring-&gt;slots = xgene_enet_get_numslots(ring-&gt;id, size);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	is_bufpool = xgene_enet_is_bufpool(ring-&gt;id);</span>
<span class="hl kwb">+	if (is_bufpool || xgene_enet_ring_owner(ring-&gt;id) != RING_OWNER_CPU)</span>
<span class="hl kwb">+		return ring;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; ring-&gt;slots; i++) {</span>
<span class="hl kwb">+		desc = (u64 *)&amp;ring-&gt;raw_desc[i];</span>
<span class="hl kwb">+		desc[EMPTY_SLOT_INDEX] = EMPTY_SLOT;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_ring_rd32(ring, CSR_RING_NE_INT_MODE, &amp;data);</span>
<span class="hl kwb">+	data |= BIT(31 - xgene_enet_ring_bufnum(ring-&gt;id));</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_NE_INT_MODE, data);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ring;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_clear_ring(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+	bool is_bufpool;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	is_bufpool = xgene_enet_is_bufpool(ring-&gt;id);</span>
<span class="hl kwb">+	if (is_bufpool || xgene_enet_ring_owner(ring-&gt;id) != RING_OWNER_CPU)</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_ring_rd32(ring, CSR_RING_NE_INT_MODE, &amp;data);</span>
<span class="hl kwb">+	data &amp;= ~BIT(31 - xgene_enet_ring_bufnum(ring-&gt;id));</span>
<span class="hl kwb">+	xgene_enet_ring_wr32(ring, CSR_RING_NE_INT_MODE, data);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	xgene_enet_clr_desc_ring_id(ring);</span>
<span class="hl kwb">+	xgene_enet_clr_ring_state(ring);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_parse_error(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+			    struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			    enum xgene_enet_err_code status)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct rtnl_link_stats64 *stats = &amp;pdata-&gt;stats;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch (status) {</span>
<span class="hl kwb">+	case INGRESS_CRC:</span>
<span class="hl kwb">+		stats-&gt;rx_crc_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case INGRESS_CHECKSUM:</span>
<span class="hl kwb">+	case INGRESS_CHECKSUM_COMPUTE:</span>
<span class="hl kwb">+		stats-&gt;rx_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case INGRESS_TRUNC_FRAME:</span>
<span class="hl kwb">+		stats-&gt;rx_frame_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case INGRESS_PKT_LEN:</span>
<span class="hl kwb">+		stats-&gt;rx_length_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case INGRESS_PKT_UNDER:</span>
<span class="hl kwb">+		stats-&gt;rx_frame_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case INGRESS_FIFO_OVERRUN:</span>
<span class="hl kwb">+		stats-&gt;rx_fifo_errors++;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_wr_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			      u32 offset, u32 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;eth_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(val, addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_wr_ring_if(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				  u32 offset, u32 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;eth_ring_if_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(val, addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_wr_diag_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				   u32 offset, u32 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;eth_diag_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(val, addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_wr_mcx_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				  u32 offset, u32 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;mcx_mac_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(val, addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static bool xgene_enet_wr_indirect(void *addr, void *wr, void *cmd,</span>
<span class="hl kwb">+				   void *cmd_done, u32 wr_addr, u32 wr_data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 done;</span>
<span class="hl kwb">+	u8 wait = 10;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(wr_addr, addr);</span>
<span class="hl kwb">+	iowrite32(wr_data, wr);</span>
<span class="hl kwb">+	iowrite32(XGENE_ENET_WR_CMD, cmd);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* wait for write command to complete */</span>
<span class="hl kwb">+	while (!(done = ioread32(cmd_done)) &amp;&amp; wait--)</span>
<span class="hl kwb">+		udelay(1);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!done)</span>
<span class="hl kwb">+		return false;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(0, cmd);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return true;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_wr_mcx_mac(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				  u32 wr_addr, u32 wr_data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr, *wr, *cmd, *cmd_done;</span>
<span class="hl kwb">+	bool ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	addr = pdata-&gt;mcx_mac_addr + MAC_ADDR_REG_OFFSET;</span>
<span class="hl kwb">+	wr = pdata-&gt;mcx_mac_addr + MAC_WRITE_REG_OFFSET;</span>
<span class="hl kwb">+	cmd = pdata-&gt;mcx_mac_addr + MAC_COMMAND_REG_OFFSET;</span>
<span class="hl kwb">+	cmd_done = pdata-&gt;mcx_mac_addr + MAC_COMMAND_DONE_REG_OFFSET;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_wr_indirect(addr, wr, cmd, cmd_done, wr_addr, wr_data);</span>
<span class="hl kwb">+	if (!ret)</span>
<span class="hl kwb">+		netdev_err(pdata-&gt;ndev, &quot;MCX mac write failed, addr: %04x\n&quot;,</span>
<span class="hl kwb">+			   wr_addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_rd_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			      u32 offset, u32 *val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;eth_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*val = ioread32(addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_rd_diag_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				   u32 offset, u32 *val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;eth_diag_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*val = ioread32(addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_rd_mcx_csr(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				  u32 offset, u32 *val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr = pdata-&gt;mcx_mac_csr_addr + offset;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*val = ioread32(addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static bool xgene_enet_rd_indirect(void *addr, void *rd, void *cmd,</span>
<span class="hl kwb">+				   void *cmd_done, u32 rd_addr, u32 *rd_data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 done;</span>
<span class="hl kwb">+	u8 wait = 10;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(rd_addr, addr);</span>
<span class="hl kwb">+	iowrite32(XGENE_ENET_RD_CMD, cmd);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* wait for read command to complete */</span>
<span class="hl kwb">+	while (!(done = ioread32(cmd_done)) &amp;&amp; wait--)</span>
<span class="hl kwb">+		udelay(1);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!done)</span>
<span class="hl kwb">+		return false;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*rd_data = ioread32(rd);</span>
<span class="hl kwb">+	iowrite32(0, cmd);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return true;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_rd_mcx_mac(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+				  u32 rd_addr, u32 *rd_data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	void *addr, *rd, *cmd, *cmd_done;</span>
<span class="hl kwb">+	bool ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	addr = pdata-&gt;mcx_mac_addr + MAC_ADDR_REG_OFFSET;</span>
<span class="hl kwb">+	rd = pdata-&gt;mcx_mac_addr + MAC_READ_REG_OFFSET;</span>
<span class="hl kwb">+	cmd = pdata-&gt;mcx_mac_addr + MAC_COMMAND_REG_OFFSET;</span>
<span class="hl kwb">+	cmd_done = pdata-&gt;mcx_mac_addr + MAC_COMMAND_DONE_REG_OFFSET;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_rd_indirect(addr, rd, cmd, cmd_done, rd_addr, rd_data);</span>
<span class="hl kwb">+	if (!ret)</span>
<span class="hl kwb">+		netdev_err(pdata-&gt;ndev, &quot;MCX mac read failed, addr: %04x\n&quot;,</span>
<span class="hl kwb">+			   rd_addr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_mii_phy_write(struct xgene_enet_pdata *pdata, int phy_id,</span>
<span class="hl kwb">+			       u32 reg, u16 data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 addr = 0, wr_data = 0;</span>
<span class="hl kwb">+	u32 done;</span>
<span class="hl kwb">+	u8 wait = 10;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	PHY_ADDR_SET(&amp;addr, phy_id);</span>
<span class="hl kwb">+	REG_ADDR_SET(&amp;addr, reg);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_ADDRESS_ADDR, addr);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	PHY_CONTROL_SET(&amp;wr_data, data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_CONTROL_ADDR, wr_data);</span>
<span class="hl kwb">+	do {</span>
<span class="hl kwb">+		usleep_range(5, 10);</span>
<span class="hl kwb">+		xgene_enet_rd_mcx_mac(pdata, MII_MGMT_INDICATORS_ADDR, &amp;done);</span>
<span class="hl kwb">+	} while ((done &amp; BUSY_MASK) &amp;&amp; wait--);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (done &amp; BUSY_MASK) {</span>
<span class="hl kwb">+		netdev_err(pdata-&gt;ndev, &quot;MII_MGMT write failed\n&quot;);</span>
<span class="hl kwb">+		return -1;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_mii_phy_read(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			      u8 phy_id, u32 reg)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 addr = 0;</span>
<span class="hl kwb">+	u32 data, done;</span>
<span class="hl kwb">+	u8 wait = 10;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	PHY_ADDR_SET(&amp;addr, phy_id);</span>
<span class="hl kwb">+	REG_ADDR_SET(&amp;addr, reg);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_ADDRESS_ADDR, addr);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_COMMAND_ADDR, READ_CYCLE_MASK);</span>
<span class="hl kwb">+	do {</span>
<span class="hl kwb">+		usleep_range(5, 10);</span>
<span class="hl kwb">+		xgene_enet_rd_mcx_mac(pdata, MII_MGMT_INDICATORS_ADDR, &amp;done);</span>
<span class="hl kwb">+	} while ((done &amp; BUSY_MASK) &amp;&amp; wait--);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (done &amp; BUSY_MASK) {</span>
<span class="hl kwb">+		netdev_err(pdata-&gt;ndev, &quot;MII_MGMT read failed\n&quot;);</span>
<span class="hl kwb">+		return -1;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MII_MGMT_STATUS_ADDR, &amp;data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_COMMAND_ADDR, 0);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return data;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_set_mac_addr(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 addr0, addr1;</span>
<span class="hl kwb">+	u8 *dev_addr = pdata-&gt;ndev-&gt;dev_addr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	addr0 = (dev_addr[3] &lt;&lt; 24) | (dev_addr[2] &lt;&lt; 16) |</span>
<span class="hl kwb">+		(dev_addr[1] &lt;&lt; 8) | dev_addr[0];</span>
<span class="hl kwb">+	addr1 = (dev_addr[5] &lt;&lt; 24) | (dev_addr[4] &lt;&lt; 16);</span>
<span class="hl kwb">+	addr1 |= pdata-&gt;phy_addr &amp; 0xFFFF;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, STATION_ADDR0_ADDR, addr0);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, STATION_ADDR1_ADDR, addr1);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_ecc_init(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct net_device *ndev = pdata-&gt;ndev;</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+	u8 wait = 10;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_wr_diag_csr(pdata, ENET_CFG_MEM_RAM_SHUTDOWN_ADDR, 0x0);</span>
<span class="hl kwb">+	do {</span>
<span class="hl kwb">+		usleep_range(100, 110);</span>
<span class="hl kwb">+		xgene_enet_rd_diag_csr(pdata, ENET_BLOCK_MEM_RDY_ADDR, &amp;data);</span>
<span class="hl kwb">+	} while ((data != 0xffffffff) &amp;&amp; wait--);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (data != 0xffffffff) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;Failed to release memory from shutdown\n&quot;);</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_gmac_phy_enable_scan_cycle(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MII_MGMT_COMMAND_ADDR, &amp;val);</span>
<span class="hl kwb">+	SCAN_CYCLE_MASK_SET(&amp;val, 1);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_COMMAND_ADDR, val);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Program phy address start scan from 0 and register at address 0x1 */</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MII_MGMT_ADDRESS_ADDR, &amp;val);</span>
<span class="hl kwb">+	PHY_ADDR_SET(&amp;val, pdata-&gt;phy_dev-&gt;addr);</span>
<span class="hl kwb">+	REG_ADDR_SET(&amp;val, MII_BMSR);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_ADDRESS_ADDR, val);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_reset(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, SOFT_RESET1);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, 0);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_init(struct xgene_enet_pdata *pdata, int speed)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 value, mc2;</span>
<span class="hl kwb">+	u32 intf_ctl, rgmii;</span>
<span class="hl kwb">+	u32 icm0, icm2;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_reset(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_csr(pdata, ICM_CONFIG0_REG_0_ADDR, &amp;icm0);</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_csr(pdata, ICM_CONFIG2_REG_0_ADDR, &amp;icm2);</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MAC_CONFIG_2_ADDR, &amp;mc2);</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, INTERFACE_CONTROL_ADDR, &amp;intf_ctl);</span>
<span class="hl kwb">+	xgene_enet_rd_csr(pdata, RGMII_REG_0_ADDR, &amp;rgmii);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch (speed) {</span>
<span class="hl kwb">+	case SPEED_10:</span>
<span class="hl kwb">+		ENET_INTERFACE_MODE2_SET(&amp;mc2, 1);</span>
<span class="hl kwb">+		CFG_MACMODE_SET(&amp;icm0, 0);</span>
<span class="hl kwb">+		CFG_WAITASYNCRD_SET(&amp;icm2, 500);</span>
<span class="hl kwb">+		rgmii &amp;= ~CFG_SPEED_1250;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case SPEED_100:</span>
<span class="hl kwb">+		ENET_INTERFACE_MODE2_SET(&amp;mc2, 1);</span>
<span class="hl kwb">+		intf_ctl |= ENET_LHD_MODE;</span>
<span class="hl kwb">+		CFG_MACMODE_SET(&amp;icm0, 1);</span>
<span class="hl kwb">+		CFG_WAITASYNCRD_SET(&amp;icm2, 80);</span>
<span class="hl kwb">+		rgmii &amp;= ~CFG_SPEED_1250;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		ENET_INTERFACE_MODE2_SET(&amp;mc2, 2);</span>
<span class="hl kwb">+		intf_ctl |= ENET_GHD_MODE;</span>
<span class="hl kwb">+		CFG_TXCLK_MUXSEL0_SET(&amp;rgmii, 4);</span>
<span class="hl kwb">+		xgene_enet_rd_csr(pdata, DEBUG_REG_ADDR, &amp;value);</span>
<span class="hl kwb">+		value |= CFG_BYPASS_UNISEC_TX | CFG_BYPASS_UNISEC_RX;</span>
<span class="hl kwb">+		xgene_enet_wr_csr(pdata, DEBUG_REG_ADDR, value);</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mc2 |= FULL_DUPLEX2;</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_2_ADDR, mc2);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, INTERFACE_CONTROL_ADDR, intf_ctl);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_set_mac_addr(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Adjust MDC clock frequency */</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MII_MGMT_CONFIG_ADDR, &amp;value);</span>
<span class="hl kwb">+	MGMT_CLOCK_SEL_SET(&amp;value, 7);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_CONFIG_ADDR, value);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable drop if bufpool not available */</span>
<span class="hl kwb">+	xgene_enet_rd_csr(pdata, RSIF_CONFIG_REG_ADDR, &amp;value);</span>
<span class="hl kwb">+	value |= CFG_RSIF_FPBUFF_TIMEOUT_EN;</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, RSIF_CONFIG_REG_ADDR, value);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Rtype should be copied from FP */</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, RSIF_RAM_DBG_REG0_ADDR, 0);</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, RGMII_REG_0_ADDR, rgmii);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Rx-Tx traffic resume */</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, CFG_LINK_AGGR_RESUME_0_ADDR, TX_PORT0);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_csr(pdata, ICM_CONFIG0_REG_0_ADDR, icm0);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_csr(pdata, ICM_CONFIG2_REG_0_ADDR, icm2);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_csr(pdata, RX_DV_GATE_REG_0_ADDR, &amp;value);</span>
<span class="hl kwb">+	value &amp;= ~TX_DV_GATE_EN0;</span>
<span class="hl kwb">+	value &amp;= ~RX_DV_GATE_EN0;</span>
<span class="hl kwb">+	value |= RESUME_RX0;</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_csr(pdata, RX_DV_GATE_REG_0_ADDR, value);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, CFG_BYPASS_ADDR, RESUME_TX);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_config_ring_if_assoc(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 val = 0xffffffff;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIWQASSOC_ADDR, val);</span>
<span class="hl kwb">+	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIFPQASSOC_ADDR, val);</span>
<span class="hl kwb">+	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIQMLITEWQASSOC_ADDR, val);</span>
<span class="hl kwb">+	xgene_enet_wr_ring_if(pdata, ENET_CFGSSQMIQMLITEFPQASSOC_ADDR, val);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_cle_bypass(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			   u32 dst_ring_num, u16 bufpool_id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 cb;</span>
<span class="hl kwb">+	u32 fpsel;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	fpsel = xgene_enet_ring_bufnum(bufpool_id) - 0x20;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_csr(pdata, CLE_BYPASS_REG0_0_ADDR, &amp;cb);</span>
<span class="hl kwb">+	cb |= CFG_CLE_BYPASS_EN0;</span>
<span class="hl kwb">+	CFG_CLE_IP_PROTOCOL0_SET(&amp;cb, 3);</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, CLE_BYPASS_REG0_0_ADDR, cb);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_csr(pdata, CLE_BYPASS_REG1_0_ADDR, &amp;cb);</span>
<span class="hl kwb">+	CFG_CLE_DSTQID0_SET(&amp;cb, dst_ring_num);</span>
<span class="hl kwb">+	CFG_CLE_FPSEL0_SET(&amp;cb, fpsel);</span>
<span class="hl kwb">+	xgene_enet_wr_csr(pdata, CLE_BYPASS_REG1_0_ADDR, cb);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_rx_enable(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MAC_CONFIG_1_ADDR, &amp;data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, data | RX_EN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_tx_enable(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MAC_CONFIG_1_ADDR, &amp;data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, data | TX_EN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_rx_disable(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MAC_CONFIG_1_ADDR, &amp;data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, data &amp; ~RX_EN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gmac_tx_disable(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MAC_CONFIG_1_ADDR, &amp;data);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MAC_CONFIG_1_ADDR, data &amp; ~TX_EN);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_reset(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	clk_prepare_enable(pdata-&gt;clk);</span>
<span class="hl kwb">+	clk_disable_unprepare(pdata-&gt;clk);</span>
<span class="hl kwb">+	clk_prepare_enable(pdata-&gt;clk);</span>
<span class="hl kwb">+	xgene_enet_ecc_init(pdata);</span>
<span class="hl kwb">+	xgene_enet_config_ring_if_assoc(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Enable auto-incr for scanning */</span>
<span class="hl kwb">+	xgene_enet_rd_mcx_mac(pdata, MII_MGMT_CONFIG_ADDR, &amp;val);</span>
<span class="hl kwb">+	val |= SCAN_AUTO_INCR;</span>
<span class="hl kwb">+	MGMT_CLOCK_SEL_SET(&amp;val, 1);</span>
<span class="hl kwb">+	xgene_enet_wr_mcx_mac(pdata, MII_MGMT_CONFIG_ADDR, val);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_gport_shutdown(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	clk_disable_unprepare(pdata-&gt;clk);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_mdio_read(struct mii_bus *bus, int mii_id, int regnum)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = bus-&gt;priv;</span>
<span class="hl kwb">+	u32 val;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	val = xgene_mii_phy_read(pdata, mii_id, regnum);</span>
<span class="hl kwb">+	netdev_dbg(pdata-&gt;ndev, &quot;mdio_rd: bus=%d reg=%d val=%x\n&quot;,</span>
<span class="hl kwb">+		   mii_id, regnum, val);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return val;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_mdio_write(struct mii_bus *bus, int mii_id, int regnum,</span>
<span class="hl kwb">+				 u16 val)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = bus-&gt;priv;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	netdev_dbg(pdata-&gt;ndev, &quot;mdio_wr: bus=%d reg=%d val=%x\n&quot;,</span>
<span class="hl kwb">+		   mii_id, regnum, val);</span>
<span class="hl kwb">+	ret = xgene_mii_phy_write(pdata, mii_id, regnum, val);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_adjust_link(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct phy_device *phydev = pdata-&gt;phy_dev;</span>
<span class="hl kwb">+	bool status_change = false;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (phydev-&gt;link &amp;&amp; pdata-&gt;phy_speed != phydev-&gt;speed) {</span>
<span class="hl kwb">+		xgene_gmac_init(pdata, phydev-&gt;speed);</span>
<span class="hl kwb">+		pdata-&gt;phy_speed = phydev-&gt;speed;</span>
<span class="hl kwb">+		status_change = true;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pdata-&gt;phy_link != phydev-&gt;link) {</span>
<span class="hl kwb">+		if (!phydev-&gt;link)</span>
<span class="hl kwb">+			pdata-&gt;phy_speed = 0;</span>
<span class="hl kwb">+		pdata-&gt;phy_link = phydev-&gt;link;</span>
<span class="hl kwb">+		status_change = true;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!status_change)</span>
<span class="hl kwb">+		return;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (phydev-&gt;link) {</span>
<span class="hl kwb">+		xgene_gmac_rx_enable(pdata);</span>
<span class="hl kwb">+		xgene_gmac_tx_enable(pdata);</span>
<span class="hl kwb">+	} else {</span>
<span class="hl kwb">+		xgene_gmac_rx_disable(pdata);</span>
<span class="hl kwb">+		xgene_gmac_tx_disable(pdata);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	phy_print_status(phydev);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_phy_connect(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct device_node *phy_np;</span>
<span class="hl kwb">+	struct phy_device *phy_dev;</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	phy_np = of_parse_phandle(dev-&gt;of_node, &quot;phy-handle&quot;, 0);</span>
<span class="hl kwb">+	if (!phy_np) {</span>
<span class="hl kwb">+		netdev_dbg(ndev, &quot;No phy-handle found\n&quot;);</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	phy_dev = of_phy_connect(ndev, phy_np, &amp;xgene_enet_adjust_link,</span>
<span class="hl kwb">+				 0, pdata-&gt;phy_mode);</span>
<span class="hl kwb">+	if (!phy_dev) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;Could not connect to PHY\n&quot;);</span>
<span class="hl kwb">+		return  -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;phy_link = 0;</span>
<span class="hl kwb">+	pdata-&gt;phy_speed = 0;</span>
<span class="hl kwb">+	pdata-&gt;phy_dev = phy_dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+int xgene_enet_mdio_config(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct net_device *ndev = pdata-&gt;ndev;</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	struct device_node *child_np;</span>
<span class="hl kwb">+	struct device_node *mdio_np = NULL;</span>
<span class="hl kwb">+	struct mii_bus *mdio_bus;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for_each_child_of_node(dev-&gt;of_node, child_np) {</span>
<span class="hl kwb">+		if (of_device_is_compatible(child_np, &quot;apm,xgene-mdio&quot;)) {</span>
<span class="hl kwb">+			mdio_np = child_np;</span>
<span class="hl kwb">+			break;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!mdio_np) {</span>
<span class="hl kwb">+		netdev_dbg(ndev, &quot;No mdio node in the dts\n&quot;);</span>
<span class="hl kwb">+		return -1;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mdio_bus = mdiobus_alloc();</span>
<span class="hl kwb">+	if (!mdio_bus)</span>
<span class="hl kwb">+		return -ENOMEM;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mdio_bus-&gt;name = &quot;APM X-Gene MDIO bus&quot;;</span>
<span class="hl kwb">+	mdio_bus-&gt;read = xgene_enet_mdio_read;</span>
<span class="hl kwb">+	mdio_bus-&gt;write = xgene_enet_mdio_write;</span>
<span class="hl kwb">+	snprintf(mdio_bus-&gt;id, MII_BUS_ID_SIZE, &quot;%s-%s&quot;, &quot;xgene-mii&quot;,</span>
<span class="hl kwb">+		 ndev-&gt;name);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mdio_bus-&gt;irq = devm_kcalloc(dev, PHY_MAX_ADDR, sizeof(int),</span>
<span class="hl kwb">+				     GFP_KERNEL);</span>
<span class="hl kwb">+	if (!mdio_bus-&gt;irq) {</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mdio_bus-&gt;priv = pdata;</span>
<span class="hl kwb">+	mdio_bus-&gt;parent = &amp;ndev-&gt;dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = of_mdiobus_register(mdio_bus, mdio_np);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;Failed to register MDIO bus\n&quot;);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;mdio_bus = mdio_bus;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_phy_connect(ndev);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	xgene_gmac_phy_enable_scan_cycle(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+err:</span>
<span class="hl kwb">+	if (mdio_bus-&gt;irq)</span>
<span class="hl kwb">+		devm_kfree(dev, mdio_bus-&gt;irq);</span>
<span class="hl kwb">+	mdiobus_free(mdio_bus);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+int xgene_enet_mdio_remove(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct mii_bus *mdio_bus;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mdio_bus = pdata-&gt;mdio_bus;</span>
<span class="hl kwb">+	mdiobus_unregister(mdio_bus);</span>
<span class="hl kwb">+	mdiobus_free(mdio_bus);</span>
<span class="hl kwb">+	pdata-&gt;mdio_bus = NULL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h
new file mode 100644
index 0000000..934baca
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_hw.h</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,394 &#64;&#64;</span>
<span class="hl kwb">+/* Applied Micro X-Gene SoC Ethernet Driver</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (c) 2014, Applied Micro Circuits Corporation</span>
<span class="hl kwb">+ * Authors: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Ravi Patel &lt;rapatel&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute  it and/or modify it</span>
<span class="hl kwb">+ * under  the terms of  the GNU General  Public License as published by the</span>
<span class="hl kwb">+ * Free Software Foundation;  either version 2 of the  License, or (at your</span>
<span class="hl kwb">+ * option) any later version.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifndef __XGENE_ENET_HW_H__</span>
<span class="hl kwb">+#define __XGENE_ENET_HW_H__</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &quot;xgene_enet_main.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_pdata;</span>
<span class="hl kwb">+struct xgene_enet_stats;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* clears and then set bits */</span>
<span class="hl kwb">+static inline void xgene_set_bits(u32 *dst, u32 val, u32 start, u32 len)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 end = start + len - 1;</span>
<span class="hl kwb">+	u32 mask = GENMASK(end, start);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*dst &amp;= ~mask;</span>
<span class="hl kwb">+	*dst |= (val &lt;&lt; start) &amp; mask;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u32 xgene_get_bits(u32 val, u32 start, u32 end)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return (val &amp; GENMASK(end, start)) &gt;&gt; start;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define CSR_RING_ID		0x0008</span>
<span class="hl kwb">+#define OVERWRITE		BIT(31)</span>
<span class="hl kwb">+#define IS_BUFFER_POOL		BIT(20)</span>
<span class="hl kwb">+#define PREFETCH_BUF_EN		BIT(21)</span>
<span class="hl kwb">+#define CSR_RING_ID_BUF		0x000c</span>
<span class="hl kwb">+#define CSR_RING_NE_INT_MODE	0x017c</span>
<span class="hl kwb">+#define CSR_RING_CONFIG		0x006c</span>
<span class="hl kwb">+#define CSR_RING_WR_BASE	0x0070</span>
<span class="hl kwb">+#define NUM_RING_CONFIG		5</span>
<span class="hl kwb">+#define BUFPOOL_MODE		3</span>
<span class="hl kwb">+#define RM3			3</span>
<span class="hl kwb">+#define INC_DEC_CMD_ADDR	0x002c</span>
<span class="hl kwb">+#define UDP_HDR_SIZE		2</span>
<span class="hl kwb">+#define BUF_LEN_CODE_2K		0x5000</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define CREATE_MASK(pos, len)		GENMASK((pos)+(len)-1, (pos))</span>
<span class="hl kwb">+#define CREATE_MASK_ULL(pos, len)	GENMASK_ULL((pos)+(len)-1, (pos))</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* Empty slot soft signature */</span>
<span class="hl kwb">+#define EMPTY_SLOT_INDEX	1</span>
<span class="hl kwb">+#define EMPTY_SLOT		~0ULL</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define WORK_DESC_SIZE		32</span>
<span class="hl kwb">+#define BUFPOOL_DESC_SIZE	16</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define RING_OWNER_MASK		GENMASK(9, 6)</span>
<span class="hl kwb">+#define RING_BUFNUM_MASK	GENMASK(5, 0)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define SELTHRSH_POS		3</span>
<span class="hl kwb">+#define SELTHRSH_LEN		3</span>
<span class="hl kwb">+#define RINGADDRL_POS		5</span>
<span class="hl kwb">+#define RINGADDRL_LEN		27</span>
<span class="hl kwb">+#define RINGADDRH_POS		0</span>
<span class="hl kwb">+#define RINGADDRH_LEN		6</span>
<span class="hl kwb">+#define RINGSIZE_POS		23</span>
<span class="hl kwb">+#define RINGSIZE_LEN		3</span>
<span class="hl kwb">+#define RINGTYPE_POS		19</span>
<span class="hl kwb">+#define RINGTYPE_LEN		2</span>
<span class="hl kwb">+#define RINGMODE_POS		20</span>
<span class="hl kwb">+#define RINGMODE_LEN		3</span>
<span class="hl kwb">+#define RECOMTIMEOUTL_POS	28</span>
<span class="hl kwb">+#define RECOMTIMEOUTL_LEN	3</span>
<span class="hl kwb">+#define RECOMTIMEOUTH_POS	0</span>
<span class="hl kwb">+#define RECOMTIMEOUTH_LEN	2</span>
<span class="hl kwb">+#define NUMMSGSINQ_POS		1</span>
<span class="hl kwb">+#define NUMMSGSINQ_LEN		16</span>
<span class="hl kwb">+#define ACCEPTLERR		BIT(19)</span>
<span class="hl kwb">+#define QCOHERENT		BIT(4)</span>
<span class="hl kwb">+#define RECOMBBUF		BIT(27)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define BLOCK_ETH_CSR_OFFSET		0x2000</span>
<span class="hl kwb">+#define BLOCK_ETH_RING_IF_OFFSET	0x9000</span>
<span class="hl kwb">+#define BLOCK_ETH_CLKRST_CSR_OFFSET	0xC000</span>
<span class="hl kwb">+#define BLOCK_ETH_DIAG_CSR_OFFSET	0xD000</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define BLOCK_ETH_MAC_OFFSET		0x0000</span>
<span class="hl kwb">+#define BLOCK_ETH_STATS_OFFSET		0x0014</span>
<span class="hl kwb">+#define BLOCK_ETH_MAC_CSR_OFFSET	0x2800</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define MAC_ADDR_REG_OFFSET		0x00</span>
<span class="hl kwb">+#define MAC_COMMAND_REG_OFFSET		0x04</span>
<span class="hl kwb">+#define MAC_WRITE_REG_OFFSET		0x08</span>
<span class="hl kwb">+#define MAC_READ_REG_OFFSET		0x0c</span>
<span class="hl kwb">+#define MAC_COMMAND_DONE_REG_OFFSET	0x10</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define STAT_ADDR_REG_OFFSET		0x00</span>
<span class="hl kwb">+#define STAT_COMMAND_REG_OFFSET		0x04</span>
<span class="hl kwb">+#define STAT_WRITE_REG_OFFSET		0x08</span>
<span class="hl kwb">+#define STAT_READ_REG_OFFSET		0x0c</span>
<span class="hl kwb">+#define STAT_COMMAND_DONE_REG_OFFSET	0x10</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define MII_MGMT_CONFIG_ADDR		0x20</span>
<span class="hl kwb">+#define MII_MGMT_COMMAND_ADDR		0x24</span>
<span class="hl kwb">+#define MII_MGMT_ADDRESS_ADDR		0x28</span>
<span class="hl kwb">+#define MII_MGMT_CONTROL_ADDR		0x2c</span>
<span class="hl kwb">+#define MII_MGMT_STATUS_ADDR		0x30</span>
<span class="hl kwb">+#define MII_MGMT_INDICATORS_ADDR	0x34</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define BUSY_MASK			BIT(0)</span>
<span class="hl kwb">+#define READ_CYCLE_MASK			BIT(0)</span>
<span class="hl kwb">+#define PHY_CONTROL_SET(dst, val)	xgene_set_bits(dst, val, 0, 16)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ENET_SPARE_CFG_REG_ADDR		0x0750</span>
<span class="hl kwb">+#define RSIF_CONFIG_REG_ADDR		0x0010</span>
<span class="hl kwb">+#define RSIF_RAM_DBG_REG0_ADDR		0x0048</span>
<span class="hl kwb">+#define RGMII_REG_0_ADDR		0x07e0</span>
<span class="hl kwb">+#define CFG_LINK_AGGR_RESUME_0_ADDR	0x07c8</span>
<span class="hl kwb">+#define DEBUG_REG_ADDR			0x0700</span>
<span class="hl kwb">+#define CFG_BYPASS_ADDR			0x0294</span>
<span class="hl kwb">+#define CLE_BYPASS_REG0_0_ADDR		0x0490</span>
<span class="hl kwb">+#define CLE_BYPASS_REG1_0_ADDR		0x0494</span>
<span class="hl kwb">+#define CFG_RSIF_FPBUFF_TIMEOUT_EN	BIT(31)</span>
<span class="hl kwb">+#define RESUME_TX			BIT(0)</span>
<span class="hl kwb">+#define CFG_SPEED_1250			BIT(24)</span>
<span class="hl kwb">+#define TX_PORT0			BIT(0)</span>
<span class="hl kwb">+#define CFG_BYPASS_UNISEC_TX		BIT(2)</span>
<span class="hl kwb">+#define CFG_BYPASS_UNISEC_RX		BIT(1)</span>
<span class="hl kwb">+#define CFG_CLE_BYPASS_EN0		BIT(31)</span>
<span class="hl kwb">+#define CFG_TXCLK_MUXSEL0_SET(dst, val)	xgene_set_bits(dst, val, 29, 3)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define CFG_CLE_IP_PROTOCOL0_SET(dst, val)	xgene_set_bits(dst, val, 16, 2)</span>
<span class="hl kwb">+#define CFG_CLE_DSTQID0_SET(dst, val)		xgene_set_bits(dst, val, 0, 12)</span>
<span class="hl kwb">+#define CFG_CLE_FPSEL0_SET(dst, val)		xgene_set_bits(dst, val, 16, 4)</span>
<span class="hl kwb">+#define CFG_MACMODE_SET(dst, val)		xgene_set_bits(dst, val, 18, 2)</span>
<span class="hl kwb">+#define CFG_WAITASYNCRD_SET(dst, val)		xgene_set_bits(dst, val, 0, 16)</span>
<span class="hl kwb">+#define ICM_CONFIG0_REG_0_ADDR		0x0400</span>
<span class="hl kwb">+#define ICM_CONFIG2_REG_0_ADDR		0x0410</span>
<span class="hl kwb">+#define RX_DV_GATE_REG_0_ADDR		0x05fc</span>
<span class="hl kwb">+#define TX_DV_GATE_EN0			BIT(2)</span>
<span class="hl kwb">+#define RX_DV_GATE_EN0			BIT(1)</span>
<span class="hl kwb">+#define RESUME_RX0			BIT(0)</span>
<span class="hl kwb">+#define ENET_CFGSSQMIWQASSOC_ADDR		0xe0</span>
<span class="hl kwb">+#define ENET_CFGSSQMIFPQASSOC_ADDR		0xdc</span>
<span class="hl kwb">+#define ENET_CFGSSQMIQMLITEFPQASSOC_ADDR	0xf0</span>
<span class="hl kwb">+#define ENET_CFGSSQMIQMLITEWQASSOC_ADDR		0xf4</span>
<span class="hl kwb">+#define ENET_CFG_MEM_RAM_SHUTDOWN_ADDR		0x70</span>
<span class="hl kwb">+#define ENET_BLOCK_MEM_RDY_ADDR			0x74</span>
<span class="hl kwb">+#define MAC_CONFIG_1_ADDR			0x00</span>
<span class="hl kwb">+#define MAC_CONFIG_2_ADDR			0x04</span>
<span class="hl kwb">+#define MAX_FRAME_LEN_ADDR			0x10</span>
<span class="hl kwb">+#define INTERFACE_CONTROL_ADDR			0x38</span>
<span class="hl kwb">+#define STATION_ADDR0_ADDR			0x40</span>
<span class="hl kwb">+#define STATION_ADDR1_ADDR			0x44</span>
<span class="hl kwb">+#define SCAN_CYCLE_MASK_SET(dst, src)		xgene_set_bits(dst, val, 0, 1)</span>
<span class="hl kwb">+#define PHY_ADDR_SET(dst, val)			xgene_set_bits(dst, val, 8, 5)</span>
<span class="hl kwb">+#define REG_ADDR_SET(dst, val)			xgene_set_bits(dst, val, 0, 5)</span>
<span class="hl kwb">+#define ENET_INTERFACE_MODE2_SET(dst, val)	xgene_set_bits(dst, val, 8, 2)</span>
<span class="hl kwb">+#define MGMT_CLOCK_SEL_SET(dst, val)		xgene_set_bits(dst, val, 0, 3)</span>
<span class="hl kwb">+#define SOFT_RESET1			BIT(31)</span>
<span class="hl kwb">+#define TX_EN				BIT(0)</span>
<span class="hl kwb">+#define RX_EN				BIT(2)</span>
<span class="hl kwb">+#define ENET_LHD_MODE			BIT(25)</span>
<span class="hl kwb">+#define ENET_GHD_MODE			BIT(26)</span>
<span class="hl kwb">+#define FULL_DUPLEX2			BIT(0)</span>
<span class="hl kwb">+#define SCAN_AUTO_INCR			BIT(5)</span>
<span class="hl kwb">+#define TBYT_ADDR			0x38</span>
<span class="hl kwb">+#define TPKT_ADDR			0x39</span>
<span class="hl kwb">+#define TDRP_ADDR			0x45</span>
<span class="hl kwb">+#define TFCS_ADDR			0x47</span>
<span class="hl kwb">+#define TUND_ADDR			0x4a</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define TSO_IPPROTO_TCP			1</span>
<span class="hl kwb">+#define TSO_IPPROTO_UDP			0</span>
<span class="hl kwb">+#define	FULL_DUPLEX			2</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define USERINFO_POS			0</span>
<span class="hl kwb">+#define USERINFO_LEN			32</span>
<span class="hl kwb">+#define FPQNUM_POS			32</span>
<span class="hl kwb">+#define FPQNUM_LEN			12</span>
<span class="hl kwb">+#define LERR_POS			60</span>
<span class="hl kwb">+#define LERR_LEN			3</span>
<span class="hl kwb">+#define STASH_POS			52</span>
<span class="hl kwb">+#define STASH_LEN			2</span>
<span class="hl kwb">+#define BUFDATALEN_POS			48</span>
<span class="hl kwb">+#define BUFDATALEN_LEN			12</span>
<span class="hl kwb">+#define DATAADDR_POS			0</span>
<span class="hl kwb">+#define DATAADDR_LEN			42</span>
<span class="hl kwb">+#define COHERENT_POS			63</span>
<span class="hl kwb">+#define HENQNUM_POS			48</span>
<span class="hl kwb">+#define HENQNUM_LEN			12</span>
<span class="hl kwb">+#define TYPESEL_POS			44</span>
<span class="hl kwb">+#define TYPESEL_LEN			4</span>
<span class="hl kwb">+#define ETHHDR_POS			12</span>
<span class="hl kwb">+#define IC_POS				35	/* Insert CRC */</span>
<span class="hl kwb">+#define TCPHDR_POS			0</span>
<span class="hl kwb">+#define TCPHDR_LEN			6</span>
<span class="hl kwb">+#define IPHDR_POS			6</span>
<span class="hl kwb">+#define IPHDR_LEN			6</span>
<span class="hl kwb">+#define EC_POS				22	/* Enable checksum */</span>
<span class="hl kwb">+#define IS_POS				24	/* IP protocol select */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define DATAADDR_MASK		CREATE_MASK_ULL(DATAADDR_POS, DATAADDR_LEN)</span>
<span class="hl kwb">+#define BUFDATALEN_MASK		CREATE_MASK_ULL(BUFDATALEN_POS, BUFDATALEN_LEN)</span>
<span class="hl kwb">+#define USERINFO_MASK		CREATE_MASK_ULL(USERINFO_POS, USERINFO_LEN)</span>
<span class="hl kwb">+#define FPQNUM_MASK		CREATE_MASK_ULL(FPQNUM_POS, FPQNUM_LEN)</span>
<span class="hl kwb">+#define LERR_MASK		CREATE_MASK_ULL(LERR_POS, LERR_LEN)</span>
<span class="hl kwb">+#define STASHING_MASK		CREATE_MASK_ULL(STASH_POS, STASH_LEN)</span>
<span class="hl kwb">+#define COHERENT_MASK		BIT_ULL(COHERENT_POS)</span>
<span class="hl kwb">+#define HENQNUM_MASK		CREATE_MASK_ULL(HENQNUM_POS, HENQNUM_LEN)</span>
<span class="hl kwb">+#define TCPHDR_MASK		CREATE_MASK(TCPHDR_POS, TCPHDR_LEN)</span>
<span class="hl kwb">+#define IPHDR_MASK		CREATE_MASK(IPHDR_POS, IPHDR_LEN)</span>
<span class="hl kwb">+#define EC_MASK			BIT(EC_POS)</span>
<span class="hl kwb">+#define IS_MASK			BIT(IS_POS)</span>
<span class="hl kwb">+#define INSERT_CRC		BIT_ULL(IC_POS)</span>
<span class="hl kwb">+#define TYPE_ETH_WORK_MESSAGE	BIT_ULL(44)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_desc {</span>
<span class="hl kwb">+	dma_addr_t dataaddr;</span>
<span class="hl kwb">+	u16 bufdatalen;</span>
<span class="hl kwb">+	u32 userinfo;</span>
<span class="hl kwb">+	u64 hopinfo_lsb;</span>
<span class="hl kwb">+	u16 henqnum;</span>
<span class="hl kwb">+	u16 fpqnum;</span>
<span class="hl kwb">+	u8 stash;</span>
<span class="hl kwb">+	u8 status;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_raw_desc {</span>
<span class="hl kwb">+	u64 m0;</span>
<span class="hl kwb">+	u64 m1;</span>
<span class="hl kwb">+	u64 m2;</span>
<span class="hl kwb">+	u64 m3;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_raw_desc16 {</span>
<span class="hl kwb">+	u64 m0;</span>
<span class="hl kwb">+	u64 m1;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void xgene_enet_cpu_to_le64(void *desc_ptr, int count)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 *desc = desc_ptr;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; count; i++)</span>
<span class="hl kwb">+		desc[i] = cpu_to_le64(desc[i]);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void xgene_enet_le64_to_cpu(void *desc_ptr, int count)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 *desc = desc_ptr;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; count; i++)</span>
<span class="hl kwb">+		desc[i] = le64_to_cpu(desc[i]);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void xgene_enet_desc16_to_le64(void *desc_ptr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 *desc;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc = desc_ptr;</span>
<span class="hl kwb">+	desc[1] = cpu_to_le64(desc[1]);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void xgene_enet_le64_to_desc16(void *desc_ptr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 *desc;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc = desc_ptr;</span>
<span class="hl kwb">+	desc[1] = le64_to_cpu(desc[1]);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_enet_ring_cfgsize {</span>
<span class="hl kwb">+	RING_CFGSIZE_512B,</span>
<span class="hl kwb">+	RING_CFGSIZE_2KB,</span>
<span class="hl kwb">+	RING_CFGSIZE_16KB,</span>
<span class="hl kwb">+	RING_CFGSIZE_64KB,</span>
<span class="hl kwb">+	RING_CFGSIZE_512KB,</span>
<span class="hl kwb">+	RING_CFGSIZE_INVALID</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_enet_ring_type {</span>
<span class="hl kwb">+	RING_DISABLED,</span>
<span class="hl kwb">+	RING_REGULAR,</span>
<span class="hl kwb">+	RING_BUFPOOL</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_ring_owner {</span>
<span class="hl kwb">+	RING_OWNER_ETH0,</span>
<span class="hl kwb">+	RING_OWNER_CPU = 15,</span>
<span class="hl kwb">+	RING_OWNER_INVALID</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_enet_ring_bufnum {</span>
<span class="hl kwb">+	RING_BUFNUM_REGULAR = 0x0,</span>
<span class="hl kwb">+	RING_BUFNUM_BUFPOOL = 0x20,</span>
<span class="hl kwb">+	RING_BUFNUM_INVALID</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_enet_cmd {</span>
<span class="hl kwb">+	XGENE_ENET_WR_CMD = BIT(31),</span>
<span class="hl kwb">+	XGENE_ENET_RD_CMD = BIT(30)</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum xgene_enet_err_code {</span>
<span class="hl kwb">+	HBF_READ_DATA = 3,</span>
<span class="hl kwb">+	HBF_LL_READ = 4,</span>
<span class="hl kwb">+	BAD_WORK_MSG = 6,</span>
<span class="hl kwb">+	BUFPOOL_TIMEOUT = 15,</span>
<span class="hl kwb">+	INGRESS_CRC = 16,</span>
<span class="hl kwb">+	INGRESS_CHECKSUM = 17,</span>
<span class="hl kwb">+	INGRESS_TRUNC_FRAME = 18,</span>
<span class="hl kwb">+	INGRESS_PKT_LEN = 19,</span>
<span class="hl kwb">+	INGRESS_PKT_UNDER = 20,</span>
<span class="hl kwb">+	INGRESS_FIFO_OVERRUN = 21,</span>
<span class="hl kwb">+	INGRESS_CHECKSUM_COMPUTE = 26,</span>
<span class="hl kwb">+	ERR_CODE_INVALID</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline enum xgene_ring_owner xgene_enet_ring_owner(u16 id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return (id &amp; RING_OWNER_MASK) &gt;&gt; 6;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u8 xgene_enet_ring_bufnum(u16 id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return id &amp; RING_BUFNUM_MASK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline bool xgene_enet_is_bufpool(u16 id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return ((id &amp; RING_BUFNUM_MASK) &gt;= 0x20) ? true : false;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u16 xgene_enet_get_numslots(u16 id, u32 size)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	bool is_bufpool = xgene_enet_is_bufpool(id);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return (is_bufpool) ? size / BUFPOOL_DESC_SIZE :</span>
<span class="hl kwb">+		      size / WORK_DESC_SIZE;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct xgene_enet_desc_ring *xgene_enet_setup_ring(</span>
<span class="hl kwb">+		struct xgene_enet_desc_ring *ring);</span>
<span class="hl kwb">+void xgene_enet_clear_ring(struct xgene_enet_desc_ring *ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_set_tx_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+		       struct xgene_enet_raw_desc *raw_desc);</span>
<span class="hl kwb">+void xgene_get_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+		    struct xgene_enet_raw_desc *raw_desc);</span>
<span class="hl kwb">+void xgene_set_init_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				 struct xgene_enet_raw_desc16 *raw_desc);</span>
<span class="hl kwb">+void xgene_set_refill_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				   struct xgene_enet_raw_desc16 *raw_desc);</span>
<span class="hl kwb">+void xgene_get_bufpool_desc(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+			    struct xgene_enet_raw_desc16 *raw_desc);</span>
<span class="hl kwb">+u64 xgene_prepare_eth_work_msg(u8 l4hlen, u8 l3hlen, u8 ethhdr,</span>
<span class="hl kwb">+			       u8 csum_enable, u8 proto);</span>
<span class="hl kwb">+void xgene_enet_parse_error(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+			    struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			    enum xgene_enet_err_code status);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_reset(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_reset(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_init(struct xgene_enet_pdata *priv, int speed);</span>
<span class="hl kwb">+void xgene_gmac_tx_enable(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_rx_enable(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_tx_disable(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_rx_disable(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_set_mac_addr(struct xgene_enet_pdata *pdata);</span>
<span class="hl kwb">+void xgene_enet_cle_bypass(struct xgene_enet_pdata *pdata,</span>
<span class="hl kwb">+			   u32 dst_ring_num, u16 bufpool_id);</span>
<span class="hl kwb">+void xgene_gport_shutdown(struct xgene_enet_pdata *priv);</span>
<span class="hl kwb">+void xgene_gmac_get_tx_stats(struct xgene_enet_pdata *pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+int xgene_enet_mdio_config(struct xgene_enet_pdata *pdata);</span>
<span class="hl kwb">+int xgene_enet_mdio_remove(struct xgene_enet_pdata *pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#endif /* __XGENE_ENET_HW_H__ */</span>
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.c b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c
new file mode 100644
index 0000000..09881a0
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,939 &#64;&#64;</span>
<span class="hl kwb">+/* Applied Micro X-Gene SoC Ethernet Driver</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (c) 2014, Applied Micro Circuits Corporation</span>
<span class="hl kwb">+ * Authors: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Ravi Patel &lt;rapatel&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute  it and/or modify it</span>
<span class="hl kwb">+ * under  the terms of  the GNU General  Public License as published by the</span>
<span class="hl kwb">+ * Free Software Foundation;  either version 2 of the  License, or (at your</span>
<span class="hl kwb">+ * option) any later version.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &quot;xgene_enet_main.h&quot;</span>
<span class="hl kwb">+#include &quot;xgene_enet_hw.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_init_bufpool(struct xgene_enet_desc_ring *buf_pool)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_raw_desc16 *raw_desc;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; buf_pool-&gt;slots; i++) {</span>
<span class="hl kwb">+		raw_desc = &amp;buf_pool-&gt;raw_desc16[i];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		buf_pool-&gt;desc.userinfo = i;</span>
<span class="hl kwb">+		buf_pool-&gt;desc.fpqnum = buf_pool-&gt;dst_ring_num;</span>
<span class="hl kwb">+		buf_pool-&gt;desc.stash = 1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		xgene_set_init_bufpool_desc(buf_pool, raw_desc);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/* Hardware expects descriptor in little endian format */</span>
<span class="hl kwb">+		xgene_enet_cpu_to_le64(raw_desc, 4);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct device *ndev_to_dev(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_refill_bufpool(struct xgene_enet_desc_ring *buf_pool,</span>
<span class="hl kwb">+				     u32 nbuf)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct sk_buff *skb;</span>
<span class="hl kwb">+	struct xgene_enet_raw_desc16 *raw_desc;</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+	dma_addr_t dma_addr;</span>
<span class="hl kwb">+	u32 tail = buf_pool-&gt;tail;</span>
<span class="hl kwb">+	u32 slots = buf_pool-&gt;slots - 1;</span>
<span class="hl kwb">+	u16 bufdatalen, len;</span>
<span class="hl kwb">+	int i;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ndev = buf_pool-&gt;ndev;</span>
<span class="hl kwb">+	dev = ndev_to_dev(buf_pool-&gt;ndev);</span>
<span class="hl kwb">+	bufdatalen = BUF_LEN_CODE_2K | (SKB_BUFFER_SIZE &amp; GENMASK(11, 0));</span>
<span class="hl kwb">+	len = XGENE_ENET_MAX_MTU;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	for (i = 0; i &lt; nbuf; i++) {</span>
<span class="hl kwb">+		raw_desc = &amp;buf_pool-&gt;raw_desc16[tail];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		skb = netdev_alloc_skb_ip_align(ndev, len);</span>
<span class="hl kwb">+		if (unlikely(!skb))</span>
<span class="hl kwb">+			return -ENOMEM;</span>
<span class="hl kwb">+		buf_pool-&gt;rx_skb[tail] = skb;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		dma_addr = dma_map_single(dev, skb-&gt;data, len, DMA_FROM_DEVICE);</span>
<span class="hl kwb">+		if (dma_mapping_error(dev, dma_addr)) {</span>
<span class="hl kwb">+			netdev_err(ndev, &quot;DMA mapping error\n&quot;);</span>
<span class="hl kwb">+			dev_kfree_skb_any(skb);</span>
<span class="hl kwb">+			return -EINVAL;</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		buf_pool-&gt;desc.dataaddr = dma_addr;</span>
<span class="hl kwb">+		buf_pool-&gt;desc.bufdatalen = bufdatalen;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		xgene_set_refill_bufpool_desc(buf_pool, raw_desc);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		xgene_enet_desc16_to_le64(raw_desc);</span>
<span class="hl kwb">+		tail = (tail + 1) &amp; slots;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(nbuf, buf_pool-&gt;cmd);</span>
<span class="hl kwb">+	buf_pool-&gt;tail = tail;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u16 xgene_enet_dst_ring_num(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ring-&gt;ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ((u16)pdata-&gt;rm &lt;&lt; 10) | ring-&gt;num;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u8 xgene_enet_hdr_len(const void *data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	const struct ethhdr *eth = data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return (eth-&gt;h_proto == htons(ETH_P_8021Q)) ? VLAN_ETH_HLEN : ETH_HLEN;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u32 xgene_enet_ring_len(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 *cmd_base = ring-&gt;cmd_base;</span>
<span class="hl kwb">+	u32 ring_state, num_msgs;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring_state = ioread32(&amp;cmd_base[1]);</span>
<span class="hl kwb">+	num_msgs = ring_state &amp; CREATE_MASK(NUMMSGSINQ_POS, NUMMSGSINQ_LEN);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return num_msgs &gt;&gt; NUMMSGSINQ_POS;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_delete_bufpool(struct xgene_enet_desc_ring *buf_pool)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_raw_desc16 *raw_desc;</span>
<span class="hl kwb">+	u32 slots = buf_pool-&gt;slots - 1;</span>
<span class="hl kwb">+	u32 tail = buf_pool-&gt;tail;</span>
<span class="hl kwb">+	u32 userinfo;</span>
<span class="hl kwb">+	int i, len;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	len = xgene_enet_ring_len(buf_pool);</span>
<span class="hl kwb">+	for (i = 0; i &lt; len; i++) {</span>
<span class="hl kwb">+		tail = (tail - 1) &amp; slots;</span>
<span class="hl kwb">+		raw_desc = &amp;buf_pool-&gt;raw_desc16[tail];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/* Hardware stores descriptor in little endian format */</span>
<span class="hl kwb">+		xgene_enet_le64_to_desc16(raw_desc);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		xgene_get_bufpool_desc(buf_pool, raw_desc);</span>
<span class="hl kwb">+		userinfo = buf_pool-&gt;desc.userinfo;</span>
<span class="hl kwb">+		dev_kfree_skb_any(buf_pool-&gt;rx_skb[userinfo]);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(-len, buf_pool-&gt;cmd);</span>
<span class="hl kwb">+	buf_pool-&gt;tail = tail;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+irqreturn_t xgene_enet_rx_irq(const int irq, void *data)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *rx_ring = data;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (napi_schedule_prep(&amp;rx_ring-&gt;napi)) {</span>
<span class="hl kwb">+		disable_irq_nosync(irq);</span>
<span class="hl kwb">+		__napi_schedule(&amp;rx_ring-&gt;napi);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return IRQ_HANDLED;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_tx_completion(struct xgene_enet_desc_ring *cp_ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc *desc;</span>
<span class="hl kwb">+	struct sk_buff *skb;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+	u16 skb_index;</span>
<span class="hl kwb">+	int ret = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc = &amp;cp_ring-&gt;desc;</span>
<span class="hl kwb">+	skb_index = desc-&gt;userinfo;</span>
<span class="hl kwb">+	skb = cp_ring-&gt;cp_skb[skb_index];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	dev = ndev_to_dev(cp_ring-&gt;ndev);</span>
<span class="hl kwb">+	dma_unmap_single(dev, desc-&gt;dataaddr, desc-&gt;bufdatalen, DMA_TO_DEVICE);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Checking for error */</span>
<span class="hl kwb">+	if (unlikely(desc-&gt;status &gt; 2)) {</span>
<span class="hl kwb">+		xgene_enet_parse_error(cp_ring, netdev_priv(cp_ring-&gt;ndev),</span>
<span class="hl kwb">+				       desc-&gt;status);</span>
<span class="hl kwb">+		ret = -1;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (likely(skb)) {</span>
<span class="hl kwb">+		dev_kfree_skb_any(skb);</span>
<span class="hl kwb">+	} else {</span>
<span class="hl kwb">+		netdev_err(cp_ring-&gt;ndev, &quot;completion skb is NULL\n&quot;);</span>
<span class="hl kwb">+		ret = -1;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 xgene_enet_work_msg(struct sk_buff *skb)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct iphdr *iph;</span>
<span class="hl kwb">+	u8 l3hlen, l4hlen = 0;</span>
<span class="hl kwb">+	u8 csum_enable = 0;</span>
<span class="hl kwb">+	u8 proto = 0;</span>
<span class="hl kwb">+	u8 ethhdr;</span>
<span class="hl kwb">+	u64 hopinfo;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (unlikely(skb-&gt;protocol != htons(ETH_P_IP)) &amp;&amp;</span>
<span class="hl kwb">+	    unlikely(skb-&gt;protocol != htons(ETH_P_8021Q)))</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (unlikely(!(skb-&gt;dev-&gt;features &amp; NETIF_F_IP_CSUM)))</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iph = ip_hdr(skb);</span>
<span class="hl kwb">+	if (unlikely(iph-&gt;frag_off &amp; htons(IP_MF | IP_OFFSET)))</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (likely(iph-&gt;protocol == IPPROTO_TCP)) {</span>
<span class="hl kwb">+		l4hlen = tcp_hdrlen(skb) / 4;</span>
<span class="hl kwb">+		csum_enable = 1;</span>
<span class="hl kwb">+		proto = TSO_IPPROTO_TCP;</span>
<span class="hl kwb">+	} else if (iph-&gt;protocol == IPPROTO_UDP) {</span>
<span class="hl kwb">+		l4hlen = UDP_HDR_SIZE;</span>
<span class="hl kwb">+		csum_enable = 1;</span>
<span class="hl kwb">+		proto = TSO_IPPROTO_UDP;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	l3hlen = ip_hdrlen(skb) &gt;&gt; 2;</span>
<span class="hl kwb">+	ethhdr = xgene_enet_hdr_len(skb-&gt;data);</span>
<span class="hl kwb">+	hopinfo = xgene_prepare_eth_work_msg(l4hlen, l3hlen, ethhdr,</span>
<span class="hl kwb">+					     csum_enable, proto);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return hopinfo;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_setup_tx_desc(struct xgene_enet_desc_ring *tx_ring,</span>
<span class="hl kwb">+				    struct sk_buff *skb)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct device *dev = ndev_to_dev(tx_ring-&gt;ndev);</span>
<span class="hl kwb">+	struct xgene_enet_raw_desc *raw_desc;</span>
<span class="hl kwb">+	dma_addr_t dma_addr;</span>
<span class="hl kwb">+	u16 tail = tx_ring-&gt;tail;</span>
<span class="hl kwb">+	u64 hopinfo;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	raw_desc = &amp;tx_ring-&gt;raw_desc[tail];</span>
<span class="hl kwb">+	memset(raw_desc, 0, sizeof(struct xgene_enet_raw_desc));</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	dma_addr = dma_map_single(dev, skb-&gt;data, skb-&gt;len, DMA_TO_DEVICE);</span>
<span class="hl kwb">+	if (dma_mapping_error(dev, dma_addr)) {</span>
<span class="hl kwb">+		netdev_err(tx_ring-&gt;ndev, &quot;DMA mapping error\n&quot;);</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tx_ring-&gt;desc.dataaddr = dma_addr;</span>
<span class="hl kwb">+	tx_ring-&gt;desc.bufdatalen = skb-&gt;len;</span>
<span class="hl kwb">+	tx_ring-&gt;desc.henqnum = tx_ring-&gt;dst_ring_num;</span>
<span class="hl kwb">+	tx_ring-&gt;desc.userinfo = tail;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	hopinfo = xgene_enet_work_msg(skb);</span>
<span class="hl kwb">+	tx_ring-&gt;desc.hopinfo_lsb = hopinfo;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_set_tx_desc(tx_ring, raw_desc);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Hardware expects descriptor in little endian format */</span>
<span class="hl kwb">+	xgene_enet_cpu_to_le64(raw_desc, 4);</span>
<span class="hl kwb">+	tx_ring-&gt;cp_ring-&gt;cp_skb[tail] = skb;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static netdev_tx_t xgene_enet_start_xmit(struct sk_buff *skb,</span>
<span class="hl kwb">+					 struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *tx_ring = pdata-&gt;tx_ring;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *cp_ring = tx_ring-&gt;cp_ring;</span>
<span class="hl kwb">+	u32 tx_level, cq_level;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	tx_level = xgene_enet_ring_len(tx_ring);</span>
<span class="hl kwb">+	cq_level = xgene_enet_ring_len(cp_ring);</span>
<span class="hl kwb">+	if (unlikely(tx_level &gt; pdata-&gt;tx_qcnt_hi ||</span>
<span class="hl kwb">+		     cq_level &gt; pdata-&gt;cp_qcnt_hi)) {</span>
<span class="hl kwb">+		netif_stop_queue(ndev);</span>
<span class="hl kwb">+		return NETDEV_TX_BUSY;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (xgene_enet_setup_tx_desc(tx_ring, skb)) {</span>
<span class="hl kwb">+		dev_kfree_skb_any(skb);</span>
<span class="hl kwb">+		return NETDEV_TX_OK;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	iowrite32(1, tx_ring-&gt;cmd);</span>
<span class="hl kwb">+	skb_tx_timestamp(skb);</span>
<span class="hl kwb">+	tx_ring-&gt;tail = (tx_ring-&gt;tail + 1) &amp; (tx_ring-&gt;slots - 1);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;stats.tx_packets++;</span>
<span class="hl kwb">+	pdata-&gt;stats.tx_bytes += skb-&gt;len;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return NETDEV_TX_OK;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_skip_csum(struct sk_buff *skb)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct iphdr *iph = ip_hdr(skb);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (!(iph-&gt;frag_off &amp; htons(IP_MF | IP_OFFSET)) ||</span>
<span class="hl kwb">+	    (iph-&gt;protocol != IPPROTO_TCP &amp;&amp; iph-&gt;protocol != IPPROTO_UDP)) {</span>
<span class="hl kwb">+		skb-&gt;ip_summed = CHECKSUM_UNNECESSARY;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_rx_frame(struct xgene_enet_desc_ring *rx_ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *buf_pool;</span>
<span class="hl kwb">+	u32 datalen, skb_index;</span>
<span class="hl kwb">+	struct sk_buff *skb;</span>
<span class="hl kwb">+	struct xgene_enet_desc *desc;</span>
<span class="hl kwb">+	int ret = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ndev = rx_ring-&gt;ndev;</span>
<span class="hl kwb">+	pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	dev = ndev_to_dev(rx_ring-&gt;ndev);</span>
<span class="hl kwb">+	buf_pool = rx_ring-&gt;buf_pool;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	desc = &amp;rx_ring-&gt;desc;</span>
<span class="hl kwb">+	dma_unmap_single(dev, desc-&gt;dataaddr, XGENE_ENET_MAX_MTU,</span>
<span class="hl kwb">+			 DMA_FROM_DEVICE);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	skb_index = desc-&gt;userinfo;</span>
<span class="hl kwb">+	skb = buf_pool-&gt;rx_skb[skb_index];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* checking for error */</span>
<span class="hl kwb">+	if (unlikely(desc-&gt;status &gt; 2)) {</span>
<span class="hl kwb">+		dev_kfree_skb_any(skb);</span>
<span class="hl kwb">+		xgene_enet_parse_error(rx_ring, netdev_priv(rx_ring-&gt;ndev),</span>
<span class="hl kwb">+				       desc-&gt;status);</span>
<span class="hl kwb">+		pdata-&gt;stats.rx_dropped++;</span>
<span class="hl kwb">+		ret = -1;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* strip off CRC as HW isn&#39;t doing this */</span>
<span class="hl kwb">+	datalen = desc-&gt;bufdatalen;</span>
<span class="hl kwb">+	datalen -= 4;</span>
<span class="hl kwb">+	prefetch(skb-&gt;data - NET_IP_ALIGN);</span>
<span class="hl kwb">+	skb_put(skb, datalen);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	skb_checksum_none_assert(skb);</span>
<span class="hl kwb">+	skb-&gt;protocol = eth_type_trans(skb, ndev);</span>
<span class="hl kwb">+	if (likely((ndev-&gt;features &amp; NETIF_F_IP_CSUM) &amp;&amp;</span>
<span class="hl kwb">+		   skb-&gt;protocol == htons(ETH_P_IP))) {</span>
<span class="hl kwb">+		xgene_enet_skip_csum(skb);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;stats.rx_packets++;</span>
<span class="hl kwb">+	pdata-&gt;stats.rx_bytes += datalen;</span>
<span class="hl kwb">+	napi_gro_receive(&amp;rx_ring-&gt;napi, skb);</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	if (--rx_ring-&gt;nbufpool == 0) {</span>
<span class="hl kwb">+		ret = xgene_enet_refill_bufpool(buf_pool, NUM_BUFPOOL);</span>
<span class="hl kwb">+		rx_ring-&gt;nbufpool = NUM_BUFPOOL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_process_ring(struct xgene_enet_desc_ring *ring,</span>
<span class="hl kwb">+				   int budget)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ring-&gt;ndev);</span>
<span class="hl kwb">+	struct xgene_enet_raw_desc *raw_desc;</span>
<span class="hl kwb">+	u16 head = ring-&gt;head;</span>
<span class="hl kwb">+	u16 slots = ring-&gt;slots - 1;</span>
<span class="hl kwb">+	int ret, count = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	do {</span>
<span class="hl kwb">+		raw_desc = &amp;ring-&gt;raw_desc[head];</span>
<span class="hl kwb">+		if (unlikely(((u64 *)raw_desc)[EMPTY_SLOT_INDEX] == EMPTY_SLOT))</span>
<span class="hl kwb">+			break;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		/* Hardware stores descriptor in little endian format */</span>
<span class="hl kwb">+		xgene_enet_le64_to_cpu(raw_desc, 4);</span>
<span class="hl kwb">+		xgene_get_desc(ring, raw_desc);</span>
<span class="hl kwb">+		if (ring-&gt;desc.fpqnum)</span>
<span class="hl kwb">+			ret = xgene_enet_rx_frame(ring);</span>
<span class="hl kwb">+		else</span>
<span class="hl kwb">+			ret = xgene_enet_tx_completion(ring);</span>
<span class="hl kwb">+		((u64 *)raw_desc)[EMPTY_SLOT_INDEX] = EMPTY_SLOT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		head = (head + 1) &amp; slots;</span>
<span class="hl kwb">+		count++;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (ret)</span>
<span class="hl kwb">+			break;</span>
<span class="hl kwb">+	} while (--budget);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (likely(count)) {</span>
<span class="hl kwb">+		iowrite32(-count, ring-&gt;cmd);</span>
<span class="hl kwb">+		ring-&gt;head = head;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		if (netif_queue_stopped(ring-&gt;ndev)) {</span>
<span class="hl kwb">+			if (xgene_enet_ring_len(ring) &lt; pdata-&gt;cp_qcnt_low)</span>
<span class="hl kwb">+				netif_wake_queue(ring-&gt;ndev);</span>
<span class="hl kwb">+		}</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return budget;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_napi(struct napi_struct *napi, const int budget)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *ring;</span>
<span class="hl kwb">+	int processed;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring = container_of(napi, struct xgene_enet_desc_ring, napi);</span>
<span class="hl kwb">+	processed = xgene_enet_process_ring(ring, budget);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (processed != budget) {</span>
<span class="hl kwb">+		napi_complete(napi);</span>
<span class="hl kwb">+		enable_irq(ring-&gt;irq);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return processed;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_timeout(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_reset(pdata);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_register_irq(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = devm_request_irq(dev, pdata-&gt;rx_ring-&gt;irq, xgene_enet_rx_irq,</span>
<span class="hl kwb">+			       IRQF_SHARED, ndev-&gt;name, pdata-&gt;rx_ring);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;rx%d interrupt request failed\n&quot;,</span>
<span class="hl kwb">+			   pdata-&gt;rx_ring-&gt;irq);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_free_irq(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	devm_free_irq(dev, pdata-&gt;rx_ring-&gt;irq, pdata-&gt;rx_ring);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_open(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_tx_enable(pdata);</span>
<span class="hl kwb">+	xgene_gmac_rx_enable(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_register_irq(ndev);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+	napi_enable(&amp;pdata-&gt;rx_ring-&gt;napi);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pdata-&gt;phy_dev)</span>
<span class="hl kwb">+		phy_start(pdata-&gt;phy_dev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	netif_start_queue(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_close(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	netif_stop_queue(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pdata-&gt;phy_dev)</span>
<span class="hl kwb">+		phy_stop(pdata-&gt;phy_dev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	napi_disable(&amp;pdata-&gt;rx_ring-&gt;napi);</span>
<span class="hl kwb">+	xgene_enet_free_irq(ndev);</span>
<span class="hl kwb">+	xgene_enet_process_ring(pdata-&gt;rx_ring, -1);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_tx_disable(pdata);</span>
<span class="hl kwb">+	xgene_gmac_rx_disable(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_delete_ring(struct xgene_enet_desc_ring *ring)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata = netdev_priv(ring-&gt;ndev);</span>
<span class="hl kwb">+	dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_clear_ring(ring);</span>
<span class="hl kwb">+	dma_free_coherent(dev, ring-&gt;size, ring-&gt;desc_addr, ring-&gt;dma);</span>
<span class="hl kwb">+	devm_kfree(dev, ring);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void xgene_enet_delete_desc_rings(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *buf_pool;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pdata-&gt;tx_ring) {</span>
<span class="hl kwb">+		xgene_enet_delete_ring(pdata-&gt;tx_ring);</span>
<span class="hl kwb">+		pdata-&gt;tx_ring = NULL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (pdata-&gt;rx_ring) {</span>
<span class="hl kwb">+		buf_pool = pdata-&gt;rx_ring-&gt;buf_pool;</span>
<span class="hl kwb">+		xgene_enet_delete_bufpool(buf_pool);</span>
<span class="hl kwb">+		xgene_enet_delete_ring(buf_pool);</span>
<span class="hl kwb">+		devm_kfree(dev, buf_pool-&gt;rx_skb);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+		xgene_enet_delete_ring(pdata-&gt;rx_ring);</span>
<span class="hl kwb">+		pdata-&gt;rx_ring = NULL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_get_ring_size(struct device *dev,</span>
<span class="hl kwb">+				    enum xgene_enet_ring_cfgsize cfgsize)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int size = -EINVAL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	switch (cfgsize) {</span>
<span class="hl kwb">+	case RING_CFGSIZE_512B:</span>
<span class="hl kwb">+		size = 0x200;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case RING_CFGSIZE_2KB:</span>
<span class="hl kwb">+		size = 0x800;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case RING_CFGSIZE_16KB:</span>
<span class="hl kwb">+		size = 0x4000;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case RING_CFGSIZE_64KB:</span>
<span class="hl kwb">+		size = 0x10000;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	case RING_CFGSIZE_512KB:</span>
<span class="hl kwb">+		size = 0x80000;</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		dev_err(dev, &quot;Unsupported cfg ring size %d\n&quot;, cfgsize);</span>
<span class="hl kwb">+		break;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return size;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct xgene_enet_desc_ring *xgene_enet_create_desc_ring(</span>
<span class="hl kwb">+			struct net_device *ndev, u32 ring_num,</span>
<span class="hl kwb">+			enum xgene_enet_ring_cfgsize cfgsize, u32 ring_id)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *ring;</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	u32 size;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring = devm_kzalloc(dev, sizeof(struct xgene_enet_desc_ring),</span>
<span class="hl kwb">+			    GFP_KERNEL);</span>
<span class="hl kwb">+	if (!ring)</span>
<span class="hl kwb">+		return NULL;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring-&gt;ndev = ndev;</span>
<span class="hl kwb">+	ring-&gt;num = ring_num;</span>
<span class="hl kwb">+	ring-&gt;cfgsize = cfgsize;</span>
<span class="hl kwb">+	ring-&gt;id = ring_id;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	size = xgene_enet_get_ring_size(dev, cfgsize);</span>
<span class="hl kwb">+	ring-&gt;desc_addr = dma_zalloc_coherent(dev, size, &amp;ring-&gt;dma,</span>
<span class="hl kwb">+					      GFP_KERNEL);</span>
<span class="hl kwb">+	if (!ring-&gt;desc_addr)</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	ring-&gt;size = size;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ring-&gt;cmd_base = pdata-&gt;ring_cmd_addr + (ring-&gt;num &lt;&lt; 6);</span>
<span class="hl kwb">+	ring-&gt;cmd = ring-&gt;cmd_base + INC_DEC_CMD_ADDR;</span>
<span class="hl kwb">+	pdata-&gt;rm = RM3;</span>
<span class="hl kwb">+	ring = xgene_enet_setup_ring(ring);</span>
<span class="hl kwb">+	netdev_dbg(ndev, &quot;ring info: num=%d  size=%d  id=%d  slots=%d\n&quot;,</span>
<span class="hl kwb">+		   ring-&gt;num, ring-&gt;size, ring-&gt;id, ring-&gt;slots);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ring;</span>
<span class="hl kwb">+err:</span>
<span class="hl kwb">+	dma_free_coherent(dev, size, ring-&gt;desc_addr, ring-&gt;dma);</span>
<span class="hl kwb">+	devm_kfree(dev, ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return NULL;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u16 xgene_enet_get_ring_id(enum xgene_ring_owner owner, u8 bufnum)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return (owner &lt;&lt; 6) | (bufnum &amp; GENMASK(5, 0));</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_create_desc_rings(struct net_device *ndev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct device *dev = &amp;pdata-&gt;pdev-&gt;dev;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *rx_ring, *tx_ring, *cp_ring;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *buf_pool = NULL;</span>
<span class="hl kwb">+	u8 cpu_bufnum = 0, eth_bufnum = 0;</span>
<span class="hl kwb">+	u8 bp_bufnum = 0x20;</span>
<span class="hl kwb">+	u16 ring_id, ring_num = 0;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* allocate rx descriptor ring */</span>
<span class="hl kwb">+	ring_id = xgene_enet_get_ring_id(RING_OWNER_CPU, cpu_bufnum++);</span>
<span class="hl kwb">+	rx_ring = xgene_enet_create_desc_ring(ndev, ring_num++,</span>
<span class="hl kwb">+					      RING_CFGSIZE_16KB, ring_id);</span>
<span class="hl kwb">+	if (IS_ERR_OR_NULL(rx_ring)) {</span>
<span class="hl kwb">+		ret = PTR_ERR(rx_ring);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* allocate buffer pool for receiving packets */</span>
<span class="hl kwb">+	ring_id = xgene_enet_get_ring_id(RING_OWNER_ETH0, bp_bufnum++);</span>
<span class="hl kwb">+	buf_pool = xgene_enet_create_desc_ring(ndev, ring_num++,</span>
<span class="hl kwb">+					       RING_CFGSIZE_2KB, ring_id);</span>
<span class="hl kwb">+	if (IS_ERR_OR_NULL(buf_pool)) {</span>
<span class="hl kwb">+		ret = PTR_ERR(buf_pool);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	rx_ring-&gt;nbufpool = NUM_BUFPOOL;</span>
<span class="hl kwb">+	rx_ring-&gt;buf_pool = buf_pool;</span>
<span class="hl kwb">+	rx_ring-&gt;irq = pdata-&gt;rx_irq;</span>
<span class="hl kwb">+	buf_pool-&gt;rx_skb = devm_kcalloc(dev, buf_pool-&gt;slots,</span>
<span class="hl kwb">+				     sizeof(struct sk_buff *), GFP_KERNEL);</span>
<span class="hl kwb">+	if (!buf_pool-&gt;rx_skb) {</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	buf_pool-&gt;dst_ring_num = xgene_enet_dst_ring_num(buf_pool);</span>
<span class="hl kwb">+	rx_ring-&gt;buf_pool = buf_pool;</span>
<span class="hl kwb">+	pdata-&gt;rx_ring = rx_ring;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* allocate tx descriptor ring */</span>
<span class="hl kwb">+	ring_id = xgene_enet_get_ring_id(RING_OWNER_ETH0, eth_bufnum++);</span>
<span class="hl kwb">+	tx_ring = xgene_enet_create_desc_ring(ndev, ring_num++,</span>
<span class="hl kwb">+					      RING_CFGSIZE_16KB, ring_id);</span>
<span class="hl kwb">+	if (IS_ERR_OR_NULL(tx_ring)) {</span>
<span class="hl kwb">+		ret = PTR_ERR(tx_ring);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;tx_ring = tx_ring;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	cp_ring = pdata-&gt;rx_ring;</span>
<span class="hl kwb">+	cp_ring-&gt;cp_skb = devm_kcalloc(dev, tx_ring-&gt;slots,</span>
<span class="hl kwb">+				     sizeof(struct sk_buff *), GFP_KERNEL);</span>
<span class="hl kwb">+	if (!cp_ring-&gt;cp_skb) {</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;tx_ring-&gt;cp_ring = cp_ring;</span>
<span class="hl kwb">+	pdata-&gt;tx_ring-&gt;dst_ring_num = xgene_enet_dst_ring_num(cp_ring);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;tx_qcnt_hi = pdata-&gt;tx_ring-&gt;slots / 2;</span>
<span class="hl kwb">+	pdata-&gt;cp_qcnt_hi = pdata-&gt;rx_ring-&gt;slots / 2;</span>
<span class="hl kwb">+	pdata-&gt;cp_qcnt_low = pdata-&gt;cp_qcnt_hi / 2;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+err:</span>
<span class="hl kwb">+	xgene_enet_delete_desc_rings(pdata);</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct rtnl_link_stats64 *xgene_enet_get_stats64(</span>
<span class="hl kwb">+			struct net_device *ndev,</span>
<span class="hl kwb">+			struct rtnl_link_stats64 *storage)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	struct rtnl_link_stats64 *stats = &amp;pdata-&gt;stats;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	spin_lock(&amp;pdata-&gt;stats_lock);</span>
<span class="hl kwb">+	stats-&gt;rx_errors += stats-&gt;rx_length_errors +</span>
<span class="hl kwb">+			    stats-&gt;rx_crc_errors +</span>
<span class="hl kwb">+			    stats-&gt;rx_frame_errors +</span>
<span class="hl kwb">+			    stats-&gt;rx_fifo_errors;</span>
<span class="hl kwb">+	memcpy(storage, &amp;pdata-&gt;stats, sizeof(struct rtnl_link_stats64));</span>
<span class="hl kwb">+	spin_unlock(&amp;pdata-&gt;stats_lock);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return storage;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_set_mac_address(struct net_device *ndev, void *addr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = eth_mac_addr(ndev, addr);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+	xgene_gmac_set_mac_addr(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct net_device_ops xgene_ndev_ops = {</span>
<span class="hl kwb">+	.ndo_open = xgene_enet_open,</span>
<span class="hl kwb">+	.ndo_stop = xgene_enet_close,</span>
<span class="hl kwb">+	.ndo_start_xmit = xgene_enet_start_xmit,</span>
<span class="hl kwb">+	.ndo_tx_timeout = xgene_enet_timeout,</span>
<span class="hl kwb">+	.ndo_get_stats64 = xgene_enet_get_stats64,</span>
<span class="hl kwb">+	.ndo_change_mtu = eth_change_mtu,</span>
<span class="hl kwb">+	.ndo_set_mac_address = xgene_enet_set_mac_address,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_get_resources(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct platform_device *pdev;</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	struct device *dev;</span>
<span class="hl kwb">+	struct resource *res;</span>
<span class="hl kwb">+	void *base_addr;</span>
<span class="hl kwb">+	const char *mac;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdev = pdata-&gt;pdev;</span>
<span class="hl kwb">+	dev = &amp;pdev-&gt;dev;</span>
<span class="hl kwb">+	ndev = pdata-&gt;ndev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, &quot;enet_csr&quot;);</span>
<span class="hl kwb">+	if (!res) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Resource enet_csr not defined\n&quot;);</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;base_addr = devm_ioremap_resource(dev, res);</span>
<span class="hl kwb">+	if (IS_ERR(pdata-&gt;base_addr)) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Unable to retrieve ENET Port CSR region\n&quot;);</span>
<span class="hl kwb">+		return PTR_ERR(pdata-&gt;base_addr);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, &quot;ring_csr&quot;);</span>
<span class="hl kwb">+	if (!res) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Resource ring_csr not defined\n&quot;);</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;ring_csr_addr = devm_ioremap_resource(dev, res);</span>
<span class="hl kwb">+	if (IS_ERR(pdata-&gt;ring_csr_addr)) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Unable to retrieve ENET Ring CSR region\n&quot;);</span>
<span class="hl kwb">+		return PTR_ERR(pdata-&gt;ring_csr_addr);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	res = platform_get_resource_byname(pdev, IORESOURCE_MEM, &quot;ring_cmd&quot;);</span>
<span class="hl kwb">+	if (!res) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Resource ring_cmd not defined\n&quot;);</span>
<span class="hl kwb">+		return -ENODEV;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;ring_cmd_addr = devm_ioremap_resource(dev, res);</span>
<span class="hl kwb">+	if (IS_ERR(pdata-&gt;ring_cmd_addr)) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Unable to retrieve ENET Ring command region\n&quot;);</span>
<span class="hl kwb">+		return PTR_ERR(pdata-&gt;ring_cmd_addr);</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = platform_get_irq(pdev, 0);</span>
<span class="hl kwb">+	if (ret &lt;= 0) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Unable to get ENET Rx IRQ\n&quot;);</span>
<span class="hl kwb">+		ret = ret ? : -ENXIO;</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	pdata-&gt;rx_irq = ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	mac = of_get_mac_address(dev-&gt;of_node);</span>
<span class="hl kwb">+	if (mac)</span>
<span class="hl kwb">+		memcpy(ndev-&gt;dev_addr, mac, ndev-&gt;addr_len);</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		eth_hw_addr_random(ndev);</span>
<span class="hl kwb">+	memcpy(ndev-&gt;perm_addr, ndev-&gt;dev_addr, ndev-&gt;addr_len);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;phy_mode = of_get_phy_mode(pdev-&gt;dev.of_node);</span>
<span class="hl kwb">+	if (pdata-&gt;phy_mode &lt; 0) {</span>
<span class="hl kwb">+		dev_err(dev, &quot;Incorrect phy-connection-type in DTS\n&quot;);</span>
<span class="hl kwb">+		return -EINVAL;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;clk = devm_clk_get(&amp;pdev-&gt;dev, NULL);</span>
<span class="hl kwb">+	ret = IS_ERR(pdata-&gt;clk);</span>
<span class="hl kwb">+	if (IS_ERR(pdata-&gt;clk)) {</span>
<span class="hl kwb">+		dev_err(&amp;pdev-&gt;dev, &quot;can&#39;t get clock\n&quot;);</span>
<span class="hl kwb">+		ret = PTR_ERR(pdata-&gt;clk);</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	base_addr = pdata-&gt;base_addr;</span>
<span class="hl kwb">+	pdata-&gt;eth_csr_addr = base_addr + BLOCK_ETH_CSR_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;eth_ring_if_addr = base_addr + BLOCK_ETH_RING_IF_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;eth_diag_csr_addr = base_addr + BLOCK_ETH_DIAG_CSR_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;mcx_mac_addr = base_addr + BLOCK_ETH_MAC_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;mcx_stats_addr = base_addr + BLOCK_ETH_STATS_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;mcx_mac_csr_addr = base_addr + BLOCK_ETH_MAC_CSR_OFFSET;</span>
<span class="hl kwb">+	pdata-&gt;rx_buff_cnt = NUM_PKT_BUF;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_init_hw(struct xgene_enet_pdata *pdata)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct net_device *ndev = pdata-&gt;ndev;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *buf_pool;</span>
<span class="hl kwb">+	u16 dst_ring_num;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_tx_disable(pdata);</span>
<span class="hl kwb">+	xgene_gmac_rx_disable(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_create_desc_rings(ndev);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;Error in ring configuration\n&quot;);</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* setup buffer pool */</span>
<span class="hl kwb">+	buf_pool = pdata-&gt;rx_ring-&gt;buf_pool;</span>
<span class="hl kwb">+	xgene_enet_init_bufpool(buf_pool);</span>
<span class="hl kwb">+	ret = xgene_enet_refill_bufpool(buf_pool, pdata-&gt;rx_buff_cnt);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		return ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	dst_ring_num = xgene_enet_dst_ring_num(pdata-&gt;rx_ring);</span>
<span class="hl kwb">+	xgene_enet_cle_bypass(pdata, dst_ring_num, buf_pool-&gt;id);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_probe(struct platform_device *pdev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata;</span>
<span class="hl kwb">+	struct device *dev = &amp;pdev-&gt;dev;</span>
<span class="hl kwb">+	struct napi_struct *napi;</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ndev = alloc_etherdev(sizeof(struct xgene_enet_pdata));</span>
<span class="hl kwb">+	if (!ndev)</span>
<span class="hl kwb">+		return -ENOMEM;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata = netdev_priv(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata-&gt;pdev = pdev;</span>
<span class="hl kwb">+	pdata-&gt;ndev = ndev;</span>
<span class="hl kwb">+	SET_NETDEV_DEV(ndev, dev);</span>
<span class="hl kwb">+	platform_set_drvdata(pdev, pdata);</span>
<span class="hl kwb">+	ndev-&gt;netdev_ops = &amp;xgene_ndev_ops;</span>
<span class="hl kwb">+	xgene_enet_set_ethtool_ops(ndev);</span>
<span class="hl kwb">+	ndev-&gt;features |= NETIF_F_IP_CSUM |</span>
<span class="hl kwb">+			  NETIF_F_GSO |</span>
<span class="hl kwb">+			  NETIF_F_GRO;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_get_resources(pdata);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_enet_reset(pdata);</span>
<span class="hl kwb">+	xgene_gmac_init(pdata, SPEED_1000);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	spin_lock_init(&amp;pdata-&gt;stats_lock);</span>
<span class="hl kwb">+	ret = register_netdev(ndev);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;Failed to register netdev\n&quot;);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = dma_set_mask_and_coherent(dev, DMA_BIT_MASK(64));</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		netdev_err(ndev, &quot;No usable DMA configuration\n&quot;);</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = xgene_enet_init_hw(pdata);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		goto err;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	napi = &amp;pdata-&gt;rx_ring-&gt;napi;</span>
<span class="hl kwb">+	netif_napi_add(ndev, napi, xgene_enet_napi, NAPI_POLL_WEIGHT);</span>
<span class="hl kwb">+	ret = xgene_enet_mdio_config(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+err:</span>
<span class="hl kwb">+	free_netdev(ndev);</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int xgene_enet_remove(struct platform_device *pdev)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct xgene_enet_pdata *pdata;</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	pdata = platform_get_drvdata(pdev);</span>
<span class="hl kwb">+	ndev = pdata-&gt;ndev;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	xgene_gmac_rx_disable(pdata);</span>
<span class="hl kwb">+	xgene_gmac_tx_disable(pdata);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	netif_napi_del(&amp;pdata-&gt;rx_ring-&gt;napi);</span>
<span class="hl kwb">+	xgene_enet_mdio_remove(pdata);</span>
<span class="hl kwb">+	xgene_enet_delete_desc_rings(pdata);</span>
<span class="hl kwb">+	unregister_netdev(ndev);</span>
<span class="hl kwb">+	xgene_gport_shutdown(pdata);</span>
<span class="hl kwb">+	free_netdev(ndev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct of_device_id xgene_enet_match[] = {</span>
<span class="hl kwb">+	{.compatible = &quot;apm,xgene-enet&quot;,},</span>
<span class="hl kwb">+	{},</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+MODULE_DEVICE_TABLE(of, xgene_enet_match);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct platform_driver xgene_enet_driver = {</span>
<span class="hl kwb">+	.driver = {</span>
<span class="hl kwb">+		   .name = &quot;xgene-enet&quot;,</span>
<span class="hl kwb">+		   .owner = THIS_MODULE,</span>
<span class="hl kwb">+		   .of_match_table = xgene_enet_match,</span>
<span class="hl kwb">+		   },</span>
<span class="hl kwb">+	.probe = xgene_enet_probe,</span>
<span class="hl kwb">+	.remove = xgene_enet_remove,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+module_platform_driver(xgene_enet_driver);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+MODULE_DESCRIPTION(&quot;APM X-Gene SoC Ethernet driver&quot;);</span>
<span class="hl kwb">+MODULE_VERSION(XGENE_DRV_VERSION);</span>
<span class="hl kwb">+MODULE_AUTHOR(&quot;Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;&quot;);</span>
<span class="hl kwb">+MODULE_LICENSE(&quot;GPL&quot;);</span>
diff --git a/drivers/net/ethernet/apm/xgene/xgene_enet_main.h b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h
new file mode 100644
index 0000000..2d1bd85
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/net/ethernet/apm/xgene/xgene_enet_main.h</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,109 &#64;&#64;</span>
<span class="hl kwb">+/* Applied Micro X-Gene SoC Ethernet Driver</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (c) 2014, Applied Micro Circuits Corporation</span>
<span class="hl kwb">+ * Authors: Iyappan Subramanian &lt;isubramanian&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Ravi Patel &lt;rapatel&#64;apm.com&gt;</span>
<span class="hl kwb">+ *	    Keyur Chudgar &lt;kchudgar&#64;apm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute  it and/or modify it</span>
<span class="hl kwb">+ * under  the terms of  the GNU General  Public License as published by the</span>
<span class="hl kwb">+ * Free Software Foundation;  either version 2 of the  License, or (at your</span>
<span class="hl kwb">+ * option) any later version.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifndef __XGENE_ENET_MAIN_H__</span>
<span class="hl kwb">+#define __XGENE_ENET_MAIN_H__</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/clk.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_platform.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_net.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_mdio.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/module.h&gt;</span>
<span class="hl kwb">+#include &lt;net/ip.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/prefetch.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/if_vlan.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/phy.h&gt;</span>
<span class="hl kwb">+#include &quot;xgene_enet_hw.h&quot;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define XGENE_DRV_VERSION	&quot;v1.0&quot;</span>
<span class="hl kwb">+#define XGENE_ENET_MAX_MTU	1536</span>
<span class="hl kwb">+#define SKB_BUFFER_SIZE		(XGENE_ENET_MAX_MTU - NET_IP_ALIGN)</span>
<span class="hl kwb">+#define NUM_PKT_BUF	64</span>
<span class="hl kwb">+#define NUM_BUFPOOL	32</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* software context of a descriptor ring */</span>
<span class="hl kwb">+struct xgene_enet_desc_ring {</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	u16 id;</span>
<span class="hl kwb">+	u16 num;</span>
<span class="hl kwb">+	u16 head;</span>
<span class="hl kwb">+	u16 tail;</span>
<span class="hl kwb">+	u16 slots;</span>
<span class="hl kwb">+	u16 irq;</span>
<span class="hl kwb">+	u32 size;</span>
<span class="hl kwb">+	u32 state[NUM_RING_CONFIG];</span>
<span class="hl kwb">+	void __iomem *cmd_base;</span>
<span class="hl kwb">+	void __iomem *cmd;</span>
<span class="hl kwb">+	dma_addr_t dma;</span>
<span class="hl kwb">+	u16 dst_ring_num;</span>
<span class="hl kwb">+	u8 nbufpool;</span>
<span class="hl kwb">+	struct sk_buff *(*rx_skb);</span>
<span class="hl kwb">+	struct sk_buff *(*cp_skb);</span>
<span class="hl kwb">+	enum xgene_enet_ring_cfgsize cfgsize;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *cp_ring;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *buf_pool;</span>
<span class="hl kwb">+	struct napi_struct napi;</span>
<span class="hl kwb">+	struct xgene_enet_desc desc;</span>
<span class="hl kwb">+	union {</span>
<span class="hl kwb">+		void *desc_addr;</span>
<span class="hl kwb">+		struct xgene_enet_raw_desc *raw_desc;</span>
<span class="hl kwb">+		struct xgene_enet_raw_desc16 *raw_desc16;</span>
<span class="hl kwb">+	};</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* ethernet private data */</span>
<span class="hl kwb">+struct xgene_enet_pdata {</span>
<span class="hl kwb">+	struct net_device *ndev;</span>
<span class="hl kwb">+	struct mii_bus *mdio_bus;</span>
<span class="hl kwb">+	struct phy_device *phy_dev;</span>
<span class="hl kwb">+	int phy_link;</span>
<span class="hl kwb">+	int phy_speed;</span>
<span class="hl kwb">+	struct clk *clk;</span>
<span class="hl kwb">+	struct platform_device *pdev;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *tx_ring;</span>
<span class="hl kwb">+	struct xgene_enet_desc_ring *rx_ring;</span>
<span class="hl kwb">+	char *dev_name;</span>
<span class="hl kwb">+	u32 rx_buff_cnt;</span>
<span class="hl kwb">+	u32 tx_qcnt_hi;</span>
<span class="hl kwb">+	u32 cp_qcnt_hi;</span>
<span class="hl kwb">+	u32 cp_qcnt_low;</span>
<span class="hl kwb">+	u32 rx_irq;</span>
<span class="hl kwb">+	void __iomem *eth_csr_addr;</span>
<span class="hl kwb">+	void __iomem *eth_ring_if_addr;</span>
<span class="hl kwb">+	void __iomem *eth_diag_csr_addr;</span>
<span class="hl kwb">+	void __iomem *mcx_mac_addr;</span>
<span class="hl kwb">+	void __iomem *mcx_stats_addr;</span>
<span class="hl kwb">+	void __iomem *mcx_mac_csr_addr;</span>
<span class="hl kwb">+	void __iomem *base_addr;</span>
<span class="hl kwb">+	void __iomem *ring_csr_addr;</span>
<span class="hl kwb">+	void __iomem *ring_cmd_addr;</span>
<span class="hl kwb">+	u32 phy_addr;</span>
<span class="hl kwb">+	int phy_mode;</span>
<span class="hl kwb">+	u32 speed;</span>
<span class="hl kwb">+	u16 rm;</span>
<span class="hl kwb">+	struct rtnl_link_stats64 stats;</span>
<span class="hl kwb">+	/* statistics lock */</span>
<span class="hl kwb">+	spinlock_t stats_lock;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+void xgene_enet_set_ethtool_ops(struct net_device *netdev);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#endif /* __XGENE_ENET_MAIN_H__ */</span>
diff --git a/drivers/rtc/Kconfig b/drivers/rtc/Kconfig
index 0754f5c..4478a59 100644
<span class="hl kwa">--- a/drivers/rtc/Kconfig</span>
<span class="hl kwb">+++ b/drivers/rtc/Kconfig</span>
&#64;&#64; -789,7 +789,7 &#64;&#64; config RTC_DRV_DA9063
 
 config RTC_DRV_EFI
 	tristate &quot;EFI RTC&quot;
<span class="hl kwa">-	depends on IA64</span>
<span class="hl kwb">+	depends on EFI</span>
 	help
 	  If you say yes here you will get support for the EFI
 	  Real Time Clock.
diff --git a/drivers/rtc/Makefile b/drivers/rtc/Makefile
index 70347d0..f1dfc36 100644
<span class="hl kwa">--- a/drivers/rtc/Makefile</span>
<span class="hl kwb">+++ b/drivers/rtc/Makefile</span>
&#64;&#64; -10,6 +10,10 &#64;&#64; obj-$(CONFIG_RTC_SYSTOHC)	+= systohc.o
 obj-$(CONFIG_RTC_CLASS)		+= rtc-core.o
 rtc-core-y			:= class.o interface.o
 
<span class="hl kwb">+ifdef CONFIG_RTC_DRV_EFI</span>
<span class="hl kwb">+rtc-core-y			+= rtc-efi-platform.o</span>
<span class="hl kwb">+endif</span>
<span class="hl kwb">+</span>
 rtc-core-$(CONFIG_RTC_INTF_DEV)	+= rtc-dev.o
 rtc-core-$(CONFIG_RTC_INTF_PROC) += rtc-proc.o
 rtc-core-$(CONFIG_RTC_INTF_SYSFS) += rtc-sysfs.o
diff --git a/drivers/rtc/rtc-efi-platform.c b/drivers/rtc/rtc-efi-platform.c
new file mode 100644
index 0000000..1a7f890
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/drivers/rtc/rtc-efi-platform.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,30 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Moved from arch/ia64/kernel/time.c</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Copyright (C) 1998-2003 Hewlett-Packard Co</span>
<span class="hl kwb">+ *	Stephane Eranian &lt;eranian&#64;hpl.hp.com&gt;</span>
<span class="hl kwb">+ *	David Mosberger &lt;davidm&#64;hpl.hp.com&gt;</span>
<span class="hl kwb">+ * Copyright (C) 1999 Don Dugger &lt;don.dugger&#64;intel.com&gt;</span>
<span class="hl kwb">+ * Copyright (C) 1999-2000 VA Linux Systems</span>
<span class="hl kwb">+ * Copyright (C) 1999-2000 Walt Drummond &lt;drummond&#64;valinux.com&gt;</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#include &lt;linux/init.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kernel.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/module.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/efi.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/platform_device.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct platform_device rtc_efi_dev = {</span>
<span class="hl kwb">+	.name = &quot;rtc-efi&quot;,</span>
<span class="hl kwb">+	.id = -1,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static int __init rtc_init(void)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (platform_device_register(&amp;rtc_efi_dev) &lt; 0)</span>
<span class="hl kwb">+		pr_err(&quot;unable to register rtc device...\n&quot;);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* not necessarily an error */</span>
<span class="hl kwb">+	return 0;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+module_init(rtc_init);</span>
diff --git a/include/kvm/arm_vgic.h b/include/kvm/arm_vgic.h
index f27000f..35b0c12 100644
<span class="hl kwa">--- a/include/kvm/arm_vgic.h</span>
<span class="hl kwb">+++ b/include/kvm/arm_vgic.h</span>
<span class="hl kwd">&#64;&#64; -24,7 +24,6 &#64;&#64;</span>
 #include &lt;linux/irqreturn.h&gt;
 #include &lt;linux/spinlock.h&gt;
 #include &lt;linux/types.h&gt;
<span class="hl kwa">-#include &lt;linux/irqchip/arm-gic.h&gt;</span>
 
 #define VGIC_NR_IRQS		256
 #define VGIC_NR_SGIS		16
<span class="hl kwd">&#64;&#64; -32,7 +31,9 &#64;&#64;</span>
 #define VGIC_NR_PRIVATE_IRQS	(VGIC_NR_SGIS + VGIC_NR_PPIS)
 #define VGIC_NR_SHARED_IRQS	(VGIC_NR_IRQS - VGIC_NR_PRIVATE_IRQS)
 #define VGIC_MAX_CPUS		KVM_MAX_VCPUS
<span class="hl kwa">-#define VGIC_MAX_LRS		(1 &lt;&lt; 6)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define VGIC_V2_MAX_LRS		(1 &lt;&lt; 6)</span>
<span class="hl kwb">+#define VGIC_V3_MAX_LRS		16</span>
 
 /* Sanity checks... */
 #if (VGIC_MAX_CPUS &gt; 8)
&#64;&#64; -68,9 +69,62 &#64;&#64; struct vgic_bytemap {
 	u32 shared[VGIC_NR_SHARED_IRQS  / 4];
 };
 
<span class="hl kwb">+struct kvm_vcpu;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+enum vgic_type {</span>
<span class="hl kwb">+	VGIC_V2,		/* Good ol&#39; GICv2 */</span>
<span class="hl kwb">+	VGIC_V3,		/* New fancy GICv3 */</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define LR_STATE_PENDING	(1 &lt;&lt; 0)</span>
<span class="hl kwb">+#define LR_STATE_ACTIVE		(1 &lt;&lt; 1)</span>
<span class="hl kwb">+#define LR_STATE_MASK		(3 &lt;&lt; 0)</span>
<span class="hl kwb">+#define LR_EOI_INT		(1 &lt;&lt; 2)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct vgic_lr {</span>
<span class="hl kwb">+	u16	irq;</span>
<span class="hl kwb">+	u8	source;</span>
<span class="hl kwb">+	u8	state;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct vgic_vmcr {</span>
<span class="hl kwb">+	u32	ctlr;</span>
<span class="hl kwb">+	u32	abpr;</span>
<span class="hl kwb">+	u32	bpr;</span>
<span class="hl kwb">+	u32	pmr;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct vgic_ops {</span>
<span class="hl kwb">+	struct vgic_lr	(*get_lr)(const struct kvm_vcpu *, int);</span>
<span class="hl kwb">+	void	(*set_lr)(struct kvm_vcpu *, int, struct vgic_lr);</span>
<span class="hl kwb">+	void	(*sync_lr_elrsr)(struct kvm_vcpu *, int, struct vgic_lr);</span>
<span class="hl kwb">+	u64	(*get_elrsr)(const struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+	u64	(*get_eisr)(const struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+	u32	(*get_interrupt_status)(const struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+	void	(*enable_underflow)(struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+	void	(*disable_underflow)(struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+	void	(*get_vmcr)(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);</span>
<span class="hl kwb">+	void	(*set_vmcr)(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);</span>
<span class="hl kwb">+	void	(*enable)(struct kvm_vcpu *vcpu);</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct vgic_params {</span>
<span class="hl kwb">+	/* vgic type */</span>
<span class="hl kwb">+	enum vgic_type	type;</span>
<span class="hl kwb">+	/* Physical address of vgic virtual cpu interface */</span>
<span class="hl kwb">+	phys_addr_t	vcpu_base;</span>
<span class="hl kwb">+	/* Number of list registers */</span>
<span class="hl kwb">+	u32		nr_lr;</span>
<span class="hl kwb">+	/* Interrupt number */</span>
<span class="hl kwb">+	unsigned int	maint_irq;</span>
<span class="hl kwb">+	/* Virtual control interface base address */</span>
<span class="hl kwb">+	void __iomem	*vctrl_base;</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
 struct vgic_dist {
 #ifdef CONFIG_KVM_ARM_VGIC
 	spinlock_t		lock;
<span class="hl kwb">+	bool			in_kernel;</span>
 	bool			ready;
 
 	/* Virtual control interface mapping */
&#64;&#64; -110,6 +164,29 &#64;&#64; struct vgic_dist {
 #endif
 };
 
<span class="hl kwb">+struct vgic_v2_cpu_if {</span>
<span class="hl kwb">+	u32		vgic_hcr;</span>
<span class="hl kwb">+	u32		vgic_vmcr;</span>
<span class="hl kwb">+	u32		vgic_misr;	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_eisr[2];	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_elrsr[2];	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_apr;</span>
<span class="hl kwb">+	u32		vgic_lr[VGIC_V2_MAX_LRS];</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+struct vgic_v3_cpu_if {</span>
<span class="hl kwb">+#ifdef CONFIG_ARM_GIC_V3</span>
<span class="hl kwb">+	u32		vgic_hcr;</span>
<span class="hl kwb">+	u32		vgic_vmcr;</span>
<span class="hl kwb">+	u32		vgic_misr;	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_eisr;	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_elrsr;	/* Saved only */</span>
<span class="hl kwb">+	u32		vgic_ap0r[4];</span>
<span class="hl kwb">+	u32		vgic_ap1r[4];</span>
<span class="hl kwb">+	u64		vgic_lr[VGIC_V3_MAX_LRS];</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
 struct vgic_cpu {
 #ifdef CONFIG_KVM_ARM_VGIC
 	/* per IRQ to LR mapping */
&#64;&#64; -120,24 +197,24 &#64;&#64; struct vgic_cpu {
 	DECLARE_BITMAP(	pending_shared, VGIC_NR_SHARED_IRQS);
 
 	/* Bitmap of used/free list registers */
<span class="hl kwa">-	DECLARE_BITMAP(	lr_used, VGIC_MAX_LRS);</span>
<span class="hl kwb">+	DECLARE_BITMAP(	lr_used, VGIC_V2_MAX_LRS);</span>
 
 	/* Number of list registers on this CPU */
 	int		nr_lr;
 
 	/* CPU vif control registers for world switch */
<span class="hl kwa">-	u32		vgic_hcr;</span>
<span class="hl kwa">-	u32		vgic_vmcr;</span>
<span class="hl kwa">-	u32		vgic_misr;	/* Saved only */</span>
<span class="hl kwa">-	u32		vgic_eisr[2];	/* Saved only */</span>
<span class="hl kwa">-	u32		vgic_elrsr[2];	/* Saved only */</span>
<span class="hl kwa">-	u32		vgic_apr;</span>
<span class="hl kwa">-	u32		vgic_lr[VGIC_MAX_LRS];</span>
<span class="hl kwb">+	union {</span>
<span class="hl kwb">+		struct vgic_v2_cpu_if	vgic_v2;</span>
<span class="hl kwb">+		struct vgic_v3_cpu_if	vgic_v3;</span>
<span class="hl kwb">+	};</span>
 #endif
 };
 
 #define LR_EMPTY	0xff
 
<span class="hl kwb">+#define INT_STATUS_EOI		(1 &lt;&lt; 0)</span>
<span class="hl kwb">+#define INT_STATUS_UNDERFLOW	(1 &lt;&lt; 1)</span>
<span class="hl kwb">+</span>
 struct kvm;
 struct kvm_vcpu;
 struct kvm_run;
&#64;&#64; -157,9 +234,25 &#64;&#64; int kvm_vgic_vcpu_pending_irq(struct kvm_vcpu *vcpu);
 bool vgic_handle_mmio(struct kvm_vcpu *vcpu, struct kvm_run *run,
 		      struct kvm_exit_mmio *mmio);
 
<span class="hl kwa">-#define irqchip_in_kernel(k)	(!!((k)-&gt;arch.vgic.vctrl_base))</span>
<span class="hl kwb">+#define irqchip_in_kernel(k)	(!!((k)-&gt;arch.vgic.in_kernel))</span>
 #define vgic_initialized(k)	((k)-&gt;arch.vgic.ready)
 
<span class="hl kwb">+int vgic_v2_probe(struct device_node *vgic_node,</span>
<span class="hl kwb">+		  const struct vgic_ops **ops,</span>
<span class="hl kwb">+		  const struct vgic_params **params);</span>
<span class="hl kwb">+#ifdef CONFIG_ARM_GIC_V3</span>
<span class="hl kwb">+int vgic_v3_probe(struct device_node *vgic_node,</span>
<span class="hl kwb">+		  const struct vgic_ops **ops,</span>
<span class="hl kwb">+		  const struct vgic_params **params);</span>
<span class="hl kwb">+#else</span>
<span class="hl kwb">+static inline int vgic_v3_probe(struct device_node *vgic_node,</span>
<span class="hl kwb">+				const struct vgic_ops **ops,</span>
<span class="hl kwb">+				const struct vgic_params **params)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return -ENODEV;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+</span>
 #else
 static inline int kvm_vgic_hyp_init(void)
 {
diff --git a/include/linux/efi.h b/include/linux/efi.h
index 41bbf8b..b3fac7c 100644
<span class="hl kwa">--- a/include/linux/efi.h</span>
<span class="hl kwb">+++ b/include/linux/efi.h</span>
<span class="hl kwd">&#64;&#64; -20,6 +20,7 &#64;&#64;</span>
 #include &lt;linux/ioport.h&gt;
 #include &lt;linux/pfn.h&gt;
 #include &lt;linux/pstore.h&gt;
<span class="hl kwb">+#include &lt;linux/reboot.h&gt;</span>
 
 #include &lt;asm/page.h&gt;
 
&#64;&#64; -875,6 +876,9 &#64;&#64; extern void efi_reserve_boot_services(void);
 extern int efi_get_fdt_params(struct efi_fdt_params *params, int verbose);
 extern struct efi_memory_map memmap;
 
<span class="hl kwb">+extern int efi_reboot_quirk_mode;</span>
<span class="hl kwb">+extern bool efi_poweroff_required(void);</span>
<span class="hl kwb">+</span>
 /* Iterate through an efi_memory_map */
 #define for_each_efi_memory_desc(m, md)					   \
 	for ((md) = (m)-&gt;map;						   \
&#64;&#64; -926,11 +930,14 &#64;&#64; static inline bool efi_enabled(int feature)
 {
 	return test_bit(feature, &amp;efi.flags) != 0;
 }
<span class="hl kwb">+extern void efi_reboot(enum reboot_mode reboot_mode, const char *__unused);</span>
 #else
 static inline bool efi_enabled(int feature)
 {
 	return false;
 }
<span class="hl kwb">+static inline void</span>
<span class="hl kwb">+efi_reboot(enum reboot_mode reboot_mode, const char *__unused) {}</span>
 #endif
 
 /*
diff --git a/include/linux/irqchip/arm-gic-v3.h b/include/linux/irqchip/arm-gic-v3.h
new file mode 100644
index 0000000..9eac712
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/include/linux/irqchip/arm-gic-v3.h</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,193 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2013, 2014 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#ifndef __LINUX_IRQCHIP_ARM_GIC_V3_H</span>
<span class="hl kwb">+#define __LINUX_IRQCHIP_ARM_GIC_V3_H</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Distributor registers. We assume we&#39;re running non-secure, with ARE</span>
<span class="hl kwb">+ * being set. Secure-only and non-ARE registers are not described.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define GICD_CTLR			0x0000</span>
<span class="hl kwb">+#define GICD_TYPER			0x0004</span>
<span class="hl kwb">+#define GICD_IIDR			0x0008</span>
<span class="hl kwb">+#define GICD_STATUSR			0x0010</span>
<span class="hl kwb">+#define GICD_SETSPI_NSR			0x0040</span>
<span class="hl kwb">+#define GICD_CLRSPI_NSR			0x0048</span>
<span class="hl kwb">+#define GICD_SETSPI_SR			0x0050</span>
<span class="hl kwb">+#define GICD_CLRSPI_SR			0x0058</span>
<span class="hl kwb">+#define GICD_SEIR			0x0068</span>
<span class="hl kwb">+#define GICD_ISENABLER			0x0100</span>
<span class="hl kwb">+#define GICD_ICENABLER			0x0180</span>
<span class="hl kwb">+#define GICD_ISPENDR			0x0200</span>
<span class="hl kwb">+#define GICD_ICPENDR			0x0280</span>
<span class="hl kwb">+#define GICD_ISACTIVER			0x0300</span>
<span class="hl kwb">+#define GICD_ICACTIVER			0x0380</span>
<span class="hl kwb">+#define GICD_IPRIORITYR			0x0400</span>
<span class="hl kwb">+#define GICD_ICFGR			0x0C00</span>
<span class="hl kwb">+#define GICD_IROUTER			0x6000</span>
<span class="hl kwb">+#define GICD_PIDR2			0xFFE8</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define GICD_CTLR_RWP			(1U &lt;&lt; 31)</span>
<span class="hl kwb">+#define GICD_CTLR_ARE_NS		(1U &lt;&lt; 4)</span>
<span class="hl kwb">+#define GICD_CTLR_ENABLE_G1A		(1U &lt;&lt; 1)</span>
<span class="hl kwb">+#define GICD_CTLR_ENABLE_G1		(1U &lt;&lt; 0)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define GICD_IROUTER_SPI_MODE_ONE	(0U &lt;&lt; 31)</span>
<span class="hl kwb">+#define GICD_IROUTER_SPI_MODE_ANY	(1U &lt;&lt; 31)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define GIC_PIDR2_ARCH_MASK		0xf0</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Re-Distributor registers, offsets from RD_base</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define GICR_CTLR			GICD_CTLR</span>
<span class="hl kwb">+#define GICR_IIDR			0x0004</span>
<span class="hl kwb">+#define GICR_TYPER			0x0008</span>
<span class="hl kwb">+#define GICR_STATUSR			GICD_STATUSR</span>
<span class="hl kwb">+#define GICR_WAKER			0x0014</span>
<span class="hl kwb">+#define GICR_SETLPIR			0x0040</span>
<span class="hl kwb">+#define GICR_CLRLPIR			0x0048</span>
<span class="hl kwb">+#define GICR_SEIR			GICD_SEIR</span>
<span class="hl kwb">+#define GICR_PROPBASER			0x0070</span>
<span class="hl kwb">+#define GICR_PENDBASER			0x0078</span>
<span class="hl kwb">+#define GICR_INVLPIR			0x00A0</span>
<span class="hl kwb">+#define GICR_INVALLR			0x00B0</span>
<span class="hl kwb">+#define GICR_SYNCR			0x00C0</span>
<span class="hl kwb">+#define GICR_MOVLPIR			0x0100</span>
<span class="hl kwb">+#define GICR_MOVALLR			0x0110</span>
<span class="hl kwb">+#define GICR_PIDR2			GICD_PIDR2</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define GICR_WAKER_ProcessorSleep	(1U &lt;&lt; 1)</span>
<span class="hl kwb">+#define GICR_WAKER_ChildrenAsleep	(1U &lt;&lt; 2)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Re-Distributor registers, offsets from SGI_base</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define GICR_ISENABLER0			GICD_ISENABLER</span>
<span class="hl kwb">+#define GICR_ICENABLER0			GICD_ICENABLER</span>
<span class="hl kwb">+#define GICR_ISPENDR0			GICD_ISPENDR</span>
<span class="hl kwb">+#define GICR_ICPENDR0			GICD_ICPENDR</span>
<span class="hl kwb">+#define GICR_ISACTIVER0			GICD_ISACTIVER</span>
<span class="hl kwb">+#define GICR_ICACTIVER0			GICD_ICACTIVER</span>
<span class="hl kwb">+#define GICR_IPRIORITYR0		GICD_IPRIORITYR</span>
<span class="hl kwb">+#define GICR_ICFGR0			GICD_ICFGR</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define GICR_TYPER_VLPIS		(1U &lt;&lt; 1)</span>
<span class="hl kwb">+#define GICR_TYPER_LAST			(1U &lt;&lt; 4)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * CPU interface registers</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define ICC_CTLR_EL1_EOImode_drop_dir	(0U &lt;&lt; 1)</span>
<span class="hl kwb">+#define ICC_CTLR_EL1_EOImode_drop	(1U &lt;&lt; 1)</span>
<span class="hl kwb">+#define ICC_SRE_EL1_SRE			(1U &lt;&lt; 0)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Hypervisor interface registers (SRE only)</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define ICH_LR_VIRTUAL_ID_MASK		((1UL &lt;&lt; 32) - 1)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICH_LR_EOI			(1UL &lt;&lt; 41)</span>
<span class="hl kwb">+#define ICH_LR_GROUP			(1UL &lt;&lt; 60)</span>
<span class="hl kwb">+#define ICH_LR_STATE			(3UL &lt;&lt; 62)</span>
<span class="hl kwb">+#define ICH_LR_PENDING_BIT		(1UL &lt;&lt; 62)</span>
<span class="hl kwb">+#define ICH_LR_ACTIVE_BIT		(1UL &lt;&lt; 63)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICH_MISR_EOI			(1 &lt;&lt; 0)</span>
<span class="hl kwb">+#define ICH_MISR_U			(1 &lt;&lt; 1)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICH_HCR_EN			(1 &lt;&lt; 0)</span>
<span class="hl kwb">+#define ICH_HCR_UIE			(1 &lt;&lt; 1)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICH_VMCR_CTLR_SHIFT		0</span>
<span class="hl kwb">+#define ICH_VMCR_CTLR_MASK		(0x21f &lt;&lt; ICH_VMCR_CTLR_SHIFT)</span>
<span class="hl kwb">+#define ICH_VMCR_BPR1_SHIFT		18</span>
<span class="hl kwb">+#define ICH_VMCR_BPR1_MASK		(7 &lt;&lt; ICH_VMCR_BPR1_SHIFT)</span>
<span class="hl kwb">+#define ICH_VMCR_BPR0_SHIFT		21</span>
<span class="hl kwb">+#define ICH_VMCR_BPR0_MASK		(7 &lt;&lt; ICH_VMCR_BPR0_SHIFT)</span>
<span class="hl kwb">+#define ICH_VMCR_PMR_SHIFT		24</span>
<span class="hl kwb">+#define ICH_VMCR_PMR_MASK		(0xffUL &lt;&lt; ICH_VMCR_PMR_SHIFT)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICC_EOIR1_EL1			S3_0_C12_C12_1</span>
<span class="hl kwb">+#define ICC_IAR1_EL1			S3_0_C12_C12_0</span>
<span class="hl kwb">+#define ICC_SGI1R_EL1			S3_0_C12_C11_5</span>
<span class="hl kwb">+#define ICC_PMR_EL1			S3_0_C4_C6_0</span>
<span class="hl kwb">+#define ICC_CTLR_EL1			S3_0_C12_C12_4</span>
<span class="hl kwb">+#define ICC_SRE_EL1			S3_0_C12_C12_5</span>
<span class="hl kwb">+#define ICC_GRPEN1_EL1			S3_0_C12_C12_7</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICC_SRE_EL2			S3_4_C12_C9_5</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICC_SRE_EL2_ENABLE		(1 &lt;&lt; 3)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * System register definitions</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define ICH_VSEIR_EL2			S3_4_C12_C9_4</span>
<span class="hl kwb">+#define ICH_HCR_EL2			S3_4_C12_C11_0</span>
<span class="hl kwb">+#define ICH_VTR_EL2			S3_4_C12_C11_1</span>
<span class="hl kwb">+#define ICH_MISR_EL2			S3_4_C12_C11_2</span>
<span class="hl kwb">+#define ICH_EISR_EL2			S3_4_C12_C11_3</span>
<span class="hl kwb">+#define ICH_ELSR_EL2			S3_4_C12_C11_5</span>
<span class="hl kwb">+#define ICH_VMCR_EL2			S3_4_C12_C11_7</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define __LR0_EL2(x)			S3_4_C12_C12_ ## x</span>
<span class="hl kwb">+#define __LR8_EL2(x)			S3_4_C12_C13_ ## x</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define ICH_LR0_EL2			__LR0_EL2(0)</span>
<span class="hl kwb">+#define ICH_LR1_EL2			__LR0_EL2(1)</span>
<span class="hl kwb">+#define ICH_LR2_EL2			__LR0_EL2(2)</span>
<span class="hl kwb">+#define ICH_LR3_EL2			__LR0_EL2(3)</span>
<span class="hl kwb">+#define ICH_LR4_EL2			__LR0_EL2(4)</span>
<span class="hl kwb">+#define ICH_LR5_EL2			__LR0_EL2(5)</span>
<span class="hl kwb">+#define ICH_LR6_EL2			__LR0_EL2(6)</span>
<span class="hl kwb">+#define ICH_LR7_EL2			__LR0_EL2(7)</span>
<span class="hl kwb">+#define ICH_LR8_EL2			__LR8_EL2(0)</span>
<span class="hl kwb">+#define ICH_LR9_EL2			__LR8_EL2(1)</span>
<span class="hl kwb">+#define ICH_LR10_EL2			__LR8_EL2(2)</span>
<span class="hl kwb">+#define ICH_LR11_EL2			__LR8_EL2(3)</span>
<span class="hl kwb">+#define ICH_LR12_EL2			__LR8_EL2(4)</span>
<span class="hl kwb">+#define ICH_LR13_EL2			__LR8_EL2(5)</span>
<span class="hl kwb">+#define ICH_LR14_EL2			__LR8_EL2(6)</span>
<span class="hl kwb">+#define ICH_LR15_EL2			__LR8_EL2(7)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define __AP0Rx_EL2(x)			S3_4_C12_C8_ ## x</span>
<span class="hl kwb">+#define ICH_AP0R0_EL2			__AP0Rx_EL2(0)</span>
<span class="hl kwb">+#define ICH_AP0R1_EL2			__AP0Rx_EL2(1)</span>
<span class="hl kwb">+#define ICH_AP0R2_EL2			__AP0Rx_EL2(2)</span>
<span class="hl kwb">+#define ICH_AP0R3_EL2			__AP0Rx_EL2(3)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#define __AP1Rx_EL2(x)			S3_4_C12_C9_ ## x</span>
<span class="hl kwb">+#define ICH_AP1R0_EL2			__AP1Rx_EL2(0)</span>
<span class="hl kwb">+#define ICH_AP1R1_EL2			__AP1Rx_EL2(1)</span>
<span class="hl kwb">+#define ICH_AP1R2_EL2			__AP1Rx_EL2(2)</span>
<span class="hl kwb">+#define ICH_AP1R3_EL2			__AP1Rx_EL2(3)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#ifndef __ASSEMBLY__</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/stringify.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void gic_write_eoir(u64 irq)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	asm volatile(&quot;msr &quot; __stringify(ICC_EOIR1_EL1) &quot;, %0&quot; : : &quot;r&quot; (irq));</span>
<span class="hl kwb">+	isb();</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#endif</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#endif</span>
diff --git a/tools/perf/arch/arm64/include/perf_regs.h b/tools/perf/arch/arm64/include/perf_regs.h
index e9441b9..1d3f39c 100644
<span class="hl kwa">--- a/tools/perf/arch/arm64/include/perf_regs.h</span>
<span class="hl kwb">+++ b/tools/perf/arch/arm64/include/perf_regs.h</span>
<span class="hl kwd">&#64;&#64; -6,6 +6,8 &#64;&#64;</span>
 #include &lt;asm/perf_regs.h&gt;
 
 #define PERF_REGS_MASK	((1ULL &lt;&lt; PERF_REG_ARM64_MAX) - 1)
<span class="hl kwb">+#define PERF_REGS_MAX	PERF_REG_ARM64_MAX</span>
<span class="hl kwb">+</span>
 #define PERF_REG_IP	PERF_REG_ARM64_PC
 #define PERF_REG_SP	PERF_REG_ARM64_SP
 
diff --git a/virt/kvm/arm/vgic-v2.c b/virt/kvm/arm/vgic-v2.c
new file mode 100644
index 0000000..a55a9a4
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/virt/kvm/arm/vgic-v2.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,236 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2012,2013 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/cpu.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kvm.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kvm_host.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/interrupt.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/io.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_address.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_irq.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;asm/kvm_emulate.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_arm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_mmu.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct vgic_lr vgic_v2_get_lr(const struct kvm_vcpu *vcpu, int lr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct vgic_lr lr_desc;</span>
<span class="hl kwb">+	u32 val = vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_lr[lr];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	lr_desc.irq	= val &amp; GICH_LR_VIRTUALID;</span>
<span class="hl kwb">+	if (lr_desc.irq &lt;= 15)</span>
<span class="hl kwb">+		lr_desc.source	= (val &gt;&gt; GICH_LR_PHYSID_CPUID_SHIFT) &amp; 0x7;</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		lr_desc.source = 0;</span>
<span class="hl kwb">+	lr_desc.state	= 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (val &amp; GICH_LR_PENDING_BIT)</span>
<span class="hl kwb">+		lr_desc.state |= LR_STATE_PENDING;</span>
<span class="hl kwb">+	if (val &amp; GICH_LR_ACTIVE_BIT)</span>
<span class="hl kwb">+		lr_desc.state |= LR_STATE_ACTIVE;</span>
<span class="hl kwb">+	if (val &amp; GICH_LR_EOI)</span>
<span class="hl kwb">+		lr_desc.state |= LR_EOI_INT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return lr_desc;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * This also does some maintenance of ELRSR.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+static void vgic_v2_set_lr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+			   struct vgic_lr lr_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 lr_val = (lr_desc.source &lt;&lt; GICH_LR_PHYSID_CPUID_SHIFT) | lr_desc.irq;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_STATE_PENDING)</span>
<span class="hl kwb">+		lr_val |= GICH_LR_PENDING_BIT;</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_STATE_ACTIVE)</span>
<span class="hl kwb">+		lr_val |= GICH_LR_ACTIVE_BIT;</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_EOI_INT)</span>
<span class="hl kwb">+		lr_val |= GICH_LR_EOI;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_lr[lr] = lr_val;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+				  struct vgic_lr lr_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (!(lr_desc.state &amp; LR_STATE_MASK))</span>
<span class="hl kwb">+		set_bit(lr, (unsigned long *)vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_elrsr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 vgic_v2_get_elrsr(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	const u32 *elrsr = vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_elrsr;</span>
<span class="hl kwb">+	return *(u64 *)elrsr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 vgic_v2_get_eisr(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	const u32 *eisr = vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_eisr;</span>
<span class="hl kwb">+	return *(u64 *)eisr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u32 vgic_v2_get_interrupt_status(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 misr = vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_misr;</span>
<span class="hl kwb">+	u32 ret = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (misr &amp; GICH_MISR_EOI)</span>
<span class="hl kwb">+		ret |= INT_STATUS_EOI;</span>
<span class="hl kwb">+	if (misr &amp; GICH_MISR_U)</span>
<span class="hl kwb">+		ret |= INT_STATUS_UNDERFLOW;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_enable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_hcr |= GICH_HCR_UIE;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_disable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_hcr &amp;= ~GICH_HCR_UIE;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 vmcr = vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_vmcr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vmcrp-&gt;ctlr = (vmcr &amp; GICH_VMCR_CTRL_MASK) &gt;&gt; GICH_VMCR_CTRL_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;abpr = (vmcr &amp; GICH_VMCR_ALIAS_BINPOINT_MASK) &gt;&gt; GICH_VMCR_ALIAS_BINPOINT_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;bpr  = (vmcr &amp; GICH_VMCR_BINPOINT_MASK) &gt;&gt; GICH_VMCR_BINPOINT_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;pmr  = (vmcr &amp; GICH_VMCR_PRIMASK_MASK) &gt;&gt; GICH_VMCR_PRIMASK_SHIFT;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 vmcr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vmcr  = (vmcrp-&gt;ctlr &lt;&lt; GICH_VMCR_CTRL_SHIFT) &amp; GICH_VMCR_CTRL_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;abpr &lt;&lt; GICH_VMCR_ALIAS_BINPOINT_SHIFT) &amp; GICH_VMCR_ALIAS_BINPOINT_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;bpr &lt;&lt; GICH_VMCR_BINPOINT_SHIFT) &amp; GICH_VMCR_BINPOINT_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;pmr &lt;&lt; GICH_VMCR_PRIMASK_SHIFT) &amp; GICH_VMCR_PRIMASK_MASK;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_vmcr = vmcr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v2_enable(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * By forcing VMCR to zero, the GIC will restore the binary</span>
<span class="hl kwb">+	 * points to their reset values. Anything else resets to zero</span>
<span class="hl kwb">+	 * anyway.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_vmcr = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Get the show on the road... */</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v2.vgic_hcr = GICH_HCR_EN;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct vgic_ops vgic_v2_ops = {</span>
<span class="hl kwb">+	.get_lr			= vgic_v2_get_lr,</span>
<span class="hl kwb">+	.set_lr			= vgic_v2_set_lr,</span>
<span class="hl kwb">+	.sync_lr_elrsr		= vgic_v2_sync_lr_elrsr,</span>
<span class="hl kwb">+	.get_elrsr		= vgic_v2_get_elrsr,</span>
<span class="hl kwb">+	.get_eisr		= vgic_v2_get_eisr,</span>
<span class="hl kwb">+	.get_interrupt_status	= vgic_v2_get_interrupt_status,</span>
<span class="hl kwb">+	.enable_underflow	= vgic_v2_enable_underflow,</span>
<span class="hl kwb">+	.disable_underflow	= vgic_v2_disable_underflow,</span>
<span class="hl kwb">+	.get_vmcr		= vgic_v2_get_vmcr,</span>
<span class="hl kwb">+	.set_vmcr		= vgic_v2_set_vmcr,</span>
<span class="hl kwb">+	.enable			= vgic_v2_enable,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct vgic_params vgic_v2_params;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/**</span>
<span class="hl kwb">+ * vgic_v2_probe - probe for a GICv2 compatible interrupt controller in DT</span>
<span class="hl kwb">+ * &#64;node:	pointer to the DT node</span>
<span class="hl kwb">+ * &#64;ops: 	address of a pointer to the GICv2 operations</span>
<span class="hl kwb">+ * &#64;params:	address of a pointer to HW-specific parameters</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Returns 0 if a GICv2 has been found, with the low level operations</span>
<span class="hl kwb">+ * in *ops and the HW parameters in *params. Returns an error code</span>
<span class="hl kwb">+ * otherwise.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+int vgic_v2_probe(struct device_node *vgic_node,</span>
<span class="hl kwb">+		  const struct vgic_ops **ops,</span>
<span class="hl kwb">+		  const struct vgic_params **params)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int ret;</span>
<span class="hl kwb">+	struct resource vctrl_res;</span>
<span class="hl kwb">+	struct resource vcpu_res;</span>
<span class="hl kwb">+	struct vgic_params *vgic = &amp;vgic_v2_params;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic-&gt;maint_irq = irq_of_parse_and_map(vgic_node, 0);</span>
<span class="hl kwb">+	if (!vgic-&gt;maint_irq) {</span>
<span class="hl kwb">+		kvm_err(&quot;error getting vgic maintenance irq from DT\n&quot;);</span>
<span class="hl kwb">+		ret = -ENXIO;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = of_address_to_resource(vgic_node, 2, &amp;vctrl_res);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot obtain GICH resource\n&quot;);</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic-&gt;vctrl_base = of_iomap(vgic_node, 2);</span>
<span class="hl kwb">+	if (!vgic-&gt;vctrl_base) {</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot ioremap GICH\n&quot;);</span>
<span class="hl kwb">+		ret = -ENOMEM;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic-&gt;nr_lr = readl_relaxed(vgic-&gt;vctrl_base + GICH_VTR);</span>
<span class="hl kwb">+	vgic-&gt;nr_lr = (vgic-&gt;nr_lr &amp; 0x3f) + 1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ret = create_hyp_io_mappings(vgic-&gt;vctrl_base,</span>
<span class="hl kwb">+				     vgic-&gt;vctrl_base + resource_size(&amp;vctrl_res),</span>
<span class="hl kwb">+				     vctrl_res.start);</span>
<span class="hl kwb">+	if (ret) {</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot map VCTRL into hyp\n&quot;);</span>
<span class="hl kwb">+		goto out_unmap;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (of_address_to_resource(vgic_node, 3, &amp;vcpu_res)) {</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot obtain GICV resource\n&quot;);</span>
<span class="hl kwb">+		ret = -ENXIO;</span>
<span class="hl kwb">+		goto out_unmap;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	vgic-&gt;vcpu_base = vcpu_res.start;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	kvm_info(&quot;%s&#64;%llx IRQ%d\n&quot;, vgic_node-&gt;name,</span>
<span class="hl kwb">+		 vctrl_res.start, vgic-&gt;maint_irq);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic-&gt;type = VGIC_V2;</span>
<span class="hl kwb">+	*ops = &amp;vgic_v2_ops;</span>
<span class="hl kwb">+	*params = vgic;</span>
<span class="hl kwb">+	goto out;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+out_unmap:</span>
<span class="hl kwb">+	iounmap(vgic-&gt;vctrl_base);</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	of_node_put(vgic_node);</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
diff --git a/virt/kvm/arm/vgic-v3.c b/virt/kvm/arm/vgic-v3.c
new file mode 100644
index 0000000..f01d446
<span class="hl kwa">--- /dev/null</span>
<span class="hl kwb">+++ b/virt/kvm/arm/vgic-v3.c</span>
<span class="hl kwd">&#64;&#64; -0,0 +1,231 &#64;&#64;</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * Copyright (C) 2013 ARM Limited, All Rights Reserved.</span>
<span class="hl kwb">+ * Author: Marc Zyngier &lt;marc.zyngier&#64;arm.com&gt;</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is free software; you can redistribute it and/or modify</span>
<span class="hl kwb">+ * it under the terms of the GNU General Public License version 2 as</span>
<span class="hl kwb">+ * published by the Free Software Foundation.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * This program is distributed in the hope that it will be useful,</span>
<span class="hl kwb">+ * but WITHOUT ANY WARRANTY; without even the implied warranty of</span>
<span class="hl kwb">+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the</span>
<span class="hl kwb">+ * GNU General Public License for more details.</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * You should have received a copy of the GNU General Public License</span>
<span class="hl kwb">+ * along with this program.  If not, see &lt;http://www.gnu.org/licenses/&gt;.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/cpu.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kvm.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/kvm_host.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/interrupt.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/io.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_address.h&gt;</span>
<span class="hl kwb">+#include &lt;linux/of_irq.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;linux/irqchip/arm-gic-v3.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+#include &lt;asm/kvm_emulate.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_arm.h&gt;</span>
<span class="hl kwb">+#include &lt;asm/kvm_mmu.h&gt;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/* These are for GICv2 emulation only */</span>
<span class="hl kwb">+#define GICH_LR_VIRTUALID		(0x3ffUL &lt;&lt; 0)</span>
<span class="hl kwb">+#define GICH_LR_PHYSID_CPUID_SHIFT	(10)</span>
<span class="hl kwb">+#define GICH_LR_PHYSID_CPUID		(7UL &lt;&lt; GICH_LR_PHYSID_CPUID_SHIFT)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/*</span>
<span class="hl kwb">+ * LRs are stored in reverse order in memory. make sure we index them</span>
<span class="hl kwb">+ * correctly.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+#define LR_INDEX(lr)			(VGIC_V3_MAX_LRS - 1 - lr)</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u32 ich_vtr_el2;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct vgic_lr vgic_v3_get_lr(const struct kvm_vcpu *vcpu, int lr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct vgic_lr lr_desc;</span>
<span class="hl kwb">+	u64 val = vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_lr[LR_INDEX(lr)];</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	lr_desc.irq	= val &amp; GICH_LR_VIRTUALID;</span>
<span class="hl kwb">+	if (lr_desc.irq &lt;= 15)</span>
<span class="hl kwb">+		lr_desc.source	= (val &gt;&gt; GICH_LR_PHYSID_CPUID_SHIFT) &amp; 0x7;</span>
<span class="hl kwb">+	else</span>
<span class="hl kwb">+		lr_desc.source = 0;</span>
<span class="hl kwb">+	lr_desc.state	= 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (val &amp; ICH_LR_PENDING_BIT)</span>
<span class="hl kwb">+		lr_desc.state |= LR_STATE_PENDING;</span>
<span class="hl kwb">+	if (val &amp; ICH_LR_ACTIVE_BIT)</span>
<span class="hl kwb">+		lr_desc.state |= LR_STATE_ACTIVE;</span>
<span class="hl kwb">+	if (val &amp; ICH_LR_EOI)</span>
<span class="hl kwb">+		lr_desc.state |= LR_EOI_INT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return lr_desc;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_set_lr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+			   struct vgic_lr lr_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u64 lr_val = (((u32)lr_desc.source &lt;&lt; GICH_LR_PHYSID_CPUID_SHIFT) |</span>
<span class="hl kwb">+		      lr_desc.irq);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_STATE_PENDING)</span>
<span class="hl kwb">+		lr_val |= ICH_LR_PENDING_BIT;</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_STATE_ACTIVE)</span>
<span class="hl kwb">+		lr_val |= ICH_LR_ACTIVE_BIT;</span>
<span class="hl kwb">+	if (lr_desc.state &amp; LR_EOI_INT)</span>
<span class="hl kwb">+		lr_val |= ICH_LR_EOI;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_lr[LR_INDEX(lr)] = lr_val;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+				  struct vgic_lr lr_desc)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	if (!(lr_desc.state &amp; LR_STATE_MASK))</span>
<span class="hl kwb">+		vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_elrsr |= (1U &lt;&lt; lr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 vgic_v3_get_elrsr(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_elrsr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u64 vgic_v3_get_eisr(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_eisr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static u32 vgic_v3_get_interrupt_status(const struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 misr = vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_misr;</span>
<span class="hl kwb">+	u32 ret = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (misr &amp; ICH_MISR_EOI)</span>
<span class="hl kwb">+		ret |= INT_STATUS_EOI;</span>
<span class="hl kwb">+	if (misr &amp; ICH_MISR_U)</span>
<span class="hl kwb">+		ret |= INT_STATUS_UNDERFLOW;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 vmcr = vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_vmcr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vmcrp-&gt;ctlr = (vmcr &amp; ICH_VMCR_CTLR_MASK) &gt;&gt; ICH_VMCR_CTLR_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;abpr = (vmcr &amp; ICH_VMCR_BPR1_MASK) &gt;&gt; ICH_VMCR_BPR1_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;bpr  = (vmcr &amp; ICH_VMCR_BPR0_MASK) &gt;&gt; ICH_VMCR_BPR0_SHIFT;</span>
<span class="hl kwb">+	vmcrp-&gt;pmr  = (vmcr &amp; ICH_VMCR_PMR_MASK) &gt;&gt; ICH_VMCR_PMR_SHIFT;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_enable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_hcr |= ICH_HCR_UIE;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_disable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_hcr &amp;= ~ICH_HCR_UIE;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcrp)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	u32 vmcr;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vmcr  = (vmcrp-&gt;ctlr &lt;&lt; ICH_VMCR_CTLR_SHIFT) &amp; ICH_VMCR_CTLR_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;abpr &lt;&lt; ICH_VMCR_BPR1_SHIFT) &amp; ICH_VMCR_BPR1_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;bpr &lt;&lt; ICH_VMCR_BPR0_SHIFT) &amp; ICH_VMCR_BPR0_MASK;</span>
<span class="hl kwb">+	vmcr |= (vmcrp-&gt;pmr &lt;&lt; ICH_VMCR_PMR_SHIFT) &amp; ICH_VMCR_PMR_MASK;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_vmcr = vmcr;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_v3_enable(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * By forcing VMCR to zero, the GIC will restore the binary</span>
<span class="hl kwb">+	 * points to their reset values. Anything else resets to zero</span>
<span class="hl kwb">+	 * anyway.</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_vmcr = 0;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/* Get the show on the road... */</span>
<span class="hl kwb">+	vcpu-&gt;arch.vgic_cpu.vgic_v3.vgic_hcr = ICH_HCR_EN;</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static const struct vgic_ops vgic_v3_ops = {</span>
<span class="hl kwb">+	.get_lr			= vgic_v3_get_lr,</span>
<span class="hl kwb">+	.set_lr			= vgic_v3_set_lr,</span>
<span class="hl kwb">+	.sync_lr_elrsr		= vgic_v3_sync_lr_elrsr,</span>
<span class="hl kwb">+	.get_elrsr		= vgic_v3_get_elrsr,</span>
<span class="hl kwb">+	.get_eisr		= vgic_v3_get_eisr,</span>
<span class="hl kwb">+	.get_interrupt_status	= vgic_v3_get_interrupt_status,</span>
<span class="hl kwb">+	.enable_underflow	= vgic_v3_enable_underflow,</span>
<span class="hl kwb">+	.disable_underflow	= vgic_v3_disable_underflow,</span>
<span class="hl kwb">+	.get_vmcr		= vgic_v3_get_vmcr,</span>
<span class="hl kwb">+	.set_vmcr		= vgic_v3_set_vmcr,</span>
<span class="hl kwb">+	.enable			= vgic_v3_enable,</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static struct vgic_params vgic_v3_params;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+/**</span>
<span class="hl kwb">+ * vgic_v3_probe - probe for a GICv3 compatible interrupt controller in DT</span>
<span class="hl kwb">+ * &#64;node:	pointer to the DT node</span>
<span class="hl kwb">+ * &#64;ops: 	address of a pointer to the GICv3 operations</span>
<span class="hl kwb">+ * &#64;params:	address of a pointer to HW-specific parameters</span>
<span class="hl kwb">+ *</span>
<span class="hl kwb">+ * Returns 0 if a GICv3 has been found, with the low level operations</span>
<span class="hl kwb">+ * in *ops and the HW parameters in *params. Returns an error code</span>
<span class="hl kwb">+ * otherwise.</span>
<span class="hl kwb">+ */</span>
<span class="hl kwb">+int vgic_v3_probe(struct device_node *vgic_node,</span>
<span class="hl kwb">+		  const struct vgic_ops **ops,</span>
<span class="hl kwb">+		  const struct vgic_params **params)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	int ret = 0;</span>
<span class="hl kwb">+	u32 gicv_idx;</span>
<span class="hl kwb">+	struct resource vcpu_res;</span>
<span class="hl kwb">+	struct vgic_params *vgic = &amp;vgic_v3_params;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic-&gt;maint_irq = irq_of_parse_and_map(vgic_node, 0);</span>
<span class="hl kwb">+	if (!vgic-&gt;maint_irq) {</span>
<span class="hl kwb">+		kvm_err(&quot;error getting vgic maintenance irq from DT\n&quot;);</span>
<span class="hl kwb">+		ret = -ENXIO;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	ich_vtr_el2 = kvm_call_hyp(__vgic_v3_get_ich_vtr_el2);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	/*</span>
<span class="hl kwb">+	 * The ListRegs field is 5 bits, but there is a architectural</span>
<span class="hl kwb">+	 * maximum of 16 list registers. Just ignore bit 4...</span>
<span class="hl kwb">+	 */</span>
<span class="hl kwb">+	vgic-&gt;nr_lr = (ich_vtr_el2 &amp; 0xf) + 1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	if (of_property_read_u32(vgic_node, &quot;#redistributor-regions&quot;, &amp;gicv_idx))</span>
<span class="hl kwb">+		gicv_idx = 1;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	gicv_idx += 3; /* Also skip GICD, GICC, GICH */</span>
<span class="hl kwb">+	if (of_address_to_resource(vgic_node, gicv_idx, &amp;vcpu_res)) {</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot obtain GICV region\n&quot;);</span>
<span class="hl kwb">+		ret = -ENXIO;</span>
<span class="hl kwb">+		goto out;</span>
<span class="hl kwb">+	}</span>
<span class="hl kwb">+	vgic-&gt;vcpu_base = vcpu_res.start;</span>
<span class="hl kwb">+	vgic-&gt;vctrl_base = NULL;</span>
<span class="hl kwb">+	vgic-&gt;type = VGIC_V3;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	kvm_info(&quot;%s&#64;%llx IRQ%d\n&quot;, vgic_node-&gt;name,</span>
<span class="hl kwb">+		 vcpu_res.start, vgic-&gt;maint_irq);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	*ops = &amp;vgic_v3_ops;</span>
<span class="hl kwb">+	*params = vgic;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+out:</span>
<span class="hl kwb">+	of_node_put(vgic_node);</span>
<span class="hl kwb">+	return ret;</span>
<span class="hl kwb">+}</span>
diff --git a/virt/kvm/arm/vgic.c b/virt/kvm/arm/vgic.c
index 56ff9be..795ab48 100644
<span class="hl kwa">--- a/virt/kvm/arm/vgic.c</span>
<span class="hl kwb">+++ b/virt/kvm/arm/vgic.c</span>
<span class="hl kwd">&#64;&#64; -76,14 +76,6 &#64;&#64;</span>
 #define IMPLEMENTER_ARM		0x43b
 #define GICC_ARCH_VERSION_V2	0x2
 
<span class="hl kwa">-/* Physical address of vgic virtual cpu interface */</span>
<span class="hl kwa">-static phys_addr_t vgic_vcpu_base;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-/* Virtual control interface base address */</span>
<span class="hl kwa">-static void __iomem *vgic_vctrl_base;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-static struct device_node *vgic_node;</span>
<span class="hl kwa">-</span>
 #define ACCESS_READ_VALUE	(1 &lt;&lt; 0)
 #define ACCESS_READ_RAZ		(0 &lt;&lt; 0)
 #define ACCESS_READ_MASK(x)	((x) &amp; (1 &lt;&lt; 0))
&#64;&#64; -94,12 +86,17 &#64;&#64; static struct device_node *vgic_node;
 #define ACCESS_WRITE_MASK(x)	((x) &amp; (3 &lt;&lt; 1))
 
 static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu);
<span class="hl kwb">+static void vgic_retire_lr(int lr_nr, int irq, struct kvm_vcpu *vcpu);</span>
 static void vgic_update_state(struct kvm *kvm);
 static void vgic_kick_vcpus(struct kvm *kvm);
 static void vgic_dispatch_sgi(struct kvm_vcpu *vcpu, u32 reg);
<span class="hl kwa">-static u32 vgic_nr_lr;</span>
<span class="hl kwb">+static struct vgic_lr vgic_get_lr(const struct kvm_vcpu *vcpu, int lr);</span>
<span class="hl kwb">+static void vgic_set_lr(struct kvm_vcpu *vcpu, int lr, struct vgic_lr lr_desc);</span>
<span class="hl kwb">+static void vgic_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);</span>
<span class="hl kwb">+static void vgic_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr);</span>
 
<span class="hl kwa">-static unsigned int vgic_maint_irq;</span>
<span class="hl kwb">+static const struct vgic_ops *vgic_ops;</span>
<span class="hl kwb">+static const struct vgic_params *vgic;</span>
 
 static u32 *vgic_bitmap_get_reg(struct vgic_bitmap *x,
 				int cpuid, u32 offset)
&#64;&#64; -593,18 +590,6 &#64;&#64; static bool handle_mmio_sgi_reg(struct kvm_vcpu *vcpu,
 	return false;
 }
 
<span class="hl kwa">-#define LR_CPUID(lr)	\</span>
<span class="hl kwa">-	(((lr) &amp; GICH_LR_PHYSID_CPUID) &gt;&gt; GICH_LR_PHYSID_CPUID_SHIFT)</span>
<span class="hl kwa">-#define LR_IRQID(lr)	\</span>
<span class="hl kwa">-	((lr) &amp; GICH_LR_VIRTUALID)</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-static void vgic_retire_lr(int lr_nr, int irq, struct vgic_cpu *vgic_cpu)</span>
<span class="hl kwa">-{</span>
<span class="hl kwa">-	clear_bit(lr_nr, vgic_cpu-&gt;lr_used);</span>
<span class="hl kwa">-	vgic_cpu-&gt;vgic_lr[lr_nr] &amp;= ~GICH_LR_STATE;</span>
<span class="hl kwa">-	vgic_cpu-&gt;vgic_irq_lr_map[irq] = LR_EMPTY;</span>
<span class="hl kwa">-}</span>
<span class="hl kwa">-</span>
 /**
  * vgic_unqueue_irqs - move pending IRQs from LRs to the distributor
  * &#64;vgic_cpu: Pointer to the vgic_cpu struct holding the LRs
&#64;&#64; -622,13 +607,10 &#64;&#64; static void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
 	struct vgic_dist *dist = &amp;vcpu-&gt;kvm-&gt;arch.vgic;
 	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;
 	int vcpu_id = vcpu-&gt;vcpu_id;
<span class="hl kwa">-	int i, irq, source_cpu;</span>
<span class="hl kwa">-	u32 *lr;</span>
<span class="hl kwb">+	int i;</span>
 
 	for_each_set_bit(i, vgic_cpu-&gt;lr_used, vgic_cpu-&gt;nr_lr) {
<span class="hl kwa">-		lr = &amp;vgic_cpu-&gt;vgic_lr[i];</span>
<span class="hl kwa">-		irq = LR_IRQID(*lr);</span>
<span class="hl kwa">-		source_cpu = LR_CPUID(*lr);</span>
<span class="hl kwb">+		struct vgic_lr lr = vgic_get_lr(vcpu, i);</span>
 
 		/*
 		 * There are three options for the state bits:
&#64;&#64; -640,7 +622,7 &#64;&#64; static void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
 		 * If the LR holds only an active interrupt (not pending) then
 		 * just leave it alone.
 		 */
<span class="hl kwa">-		if ((*lr &amp; GICH_LR_STATE) == GICH_LR_ACTIVE_BIT)</span>
<span class="hl kwb">+		if ((lr.state &amp; LR_STATE_MASK) == LR_STATE_ACTIVE)</span>
 			continue;
 
 		/*
&#64;&#64; -649,18 +631,19 &#64;&#64; static void vgic_unqueue_irqs(struct kvm_vcpu *vcpu)
 		 * is fine, then we are only setting a few bits that were
 		 * already set.
 		 */
<span class="hl kwa">-		vgic_dist_irq_set(vcpu, irq);</span>
<span class="hl kwa">-		if (irq &lt; VGIC_NR_SGIS)</span>
<span class="hl kwa">-			dist-&gt;irq_sgi_sources[vcpu_id][irq] |= 1 &lt;&lt; source_cpu;</span>
<span class="hl kwa">-		*lr &amp;= ~GICH_LR_PENDING_BIT;</span>
<span class="hl kwb">+		vgic_dist_irq_set(vcpu, lr.irq);</span>
<span class="hl kwb">+		if (lr.irq &lt; VGIC_NR_SGIS)</span>
<span class="hl kwb">+			dist-&gt;irq_sgi_sources[vcpu_id][lr.irq] |= 1 &lt;&lt; lr.source;</span>
<span class="hl kwb">+		lr.state &amp;= ~LR_STATE_PENDING;</span>
<span class="hl kwb">+		vgic_set_lr(vcpu, i, lr);</span>
 
 		/*
 		 * If there&#39;s no state left on the LR (it could still be
 		 * active), then the LR does not hold any useful info and can
 		 * be marked as free for other use.
 		 */
<span class="hl kwa">-		if (!(*lr &amp; GICH_LR_STATE))</span>
<span class="hl kwa">-			vgic_retire_lr(i, irq, vgic_cpu);</span>
<span class="hl kwb">+		if (!(lr.state &amp; LR_STATE_MASK))</span>
<span class="hl kwb">+			vgic_retire_lr(i, lr.irq, vcpu);</span>
 
 		/* Finally update the VGIC state. */
 		vgic_update_state(vcpu-&gt;kvm);
&#64;&#64; -989,8 +972,73 &#64;&#64; static void vgic_update_state(struct kvm *kvm)
 	}
 }
 
<span class="hl kwa">-#define MK_LR_PEND(src, irq)	\</span>
<span class="hl kwa">-	(GICH_LR_PENDING_BIT | ((src) &lt;&lt; GICH_LR_PHYSID_CPUID_SHIFT) | (irq))</span>
<span class="hl kwb">+static struct vgic_lr vgic_get_lr(const struct kvm_vcpu *vcpu, int lr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vgic_ops-&gt;get_lr(vcpu, lr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_set_lr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+			       struct vgic_lr vlr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;set_lr(vcpu, lr, vlr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_sync_lr_elrsr(struct kvm_vcpu *vcpu, int lr,</span>
<span class="hl kwb">+			       struct vgic_lr vlr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;sync_lr_elrsr(vcpu, lr, vlr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u64 vgic_get_elrsr(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vgic_ops-&gt;get_elrsr(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u64 vgic_get_eisr(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vgic_ops-&gt;get_eisr(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline u32 vgic_get_interrupt_status(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	return vgic_ops-&gt;get_interrupt_status(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void vgic_enable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;enable_underflow(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void vgic_disable_underflow(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;disable_underflow(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void vgic_get_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;get_vmcr(vcpu, vmcr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_set_vmcr(struct kvm_vcpu *vcpu, struct vgic_vmcr *vmcr)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;set_vmcr(vcpu, vmcr);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static inline void vgic_enable(struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	vgic_ops-&gt;enable(vcpu);</span>
<span class="hl kwb">+}</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+static void vgic_retire_lr(int lr_nr, int irq, struct kvm_vcpu *vcpu)</span>
<span class="hl kwb">+{</span>
<span class="hl kwb">+	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;</span>
<span class="hl kwb">+	struct vgic_lr vlr = vgic_get_lr(vcpu, lr_nr);</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vlr.state = 0;</span>
<span class="hl kwb">+	vgic_set_lr(vcpu, lr_nr, vlr);</span>
<span class="hl kwb">+	clear_bit(lr_nr, vgic_cpu-&gt;lr_used);</span>
<span class="hl kwb">+	vgic_cpu-&gt;vgic_irq_lr_map[irq] = LR_EMPTY;</span>
<span class="hl kwb">+}</span>
 
 /*
  * An interrupt may have been disabled after being made pending on the
&#64;&#64; -1006,13 +1054,13 &#64;&#64; static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu)
 	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;
 	int lr;
 
<span class="hl kwa">-	for_each_set_bit(lr, vgic_cpu-&gt;lr_used, vgic_cpu-&gt;nr_lr) {</span>
<span class="hl kwa">-		int irq = vgic_cpu-&gt;vgic_lr[lr] &amp; GICH_LR_VIRTUALID;</span>
<span class="hl kwb">+	for_each_set_bit(lr, vgic_cpu-&gt;lr_used, vgic-&gt;nr_lr) {</span>
<span class="hl kwb">+		struct vgic_lr vlr = vgic_get_lr(vcpu, lr);</span>
 
<span class="hl kwa">-		if (!vgic_irq_is_enabled(vcpu, irq)) {</span>
<span class="hl kwa">-			vgic_retire_lr(lr, irq, vgic_cpu);</span>
<span class="hl kwa">-			if (vgic_irq_is_active(vcpu, irq))</span>
<span class="hl kwa">-				vgic_irq_clear_active(vcpu, irq);</span>
<span class="hl kwb">+		if (!vgic_irq_is_enabled(vcpu, vlr.irq)) {</span>
<span class="hl kwb">+			vgic_retire_lr(lr, vlr.irq, vcpu);</span>
<span class="hl kwb">+			if (vgic_irq_is_active(vcpu, vlr.irq))</span>
<span class="hl kwb">+				vgic_irq_clear_active(vcpu, vlr.irq);</span>
 		}
 	}
 }
&#64;&#64; -1024,6 +1072,7 &#64;&#64; static void vgic_retire_disabled_irqs(struct kvm_vcpu *vcpu)
 static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)
 {
 	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;
<span class="hl kwb">+	struct vgic_lr vlr;</span>
 	int lr;
 
 	/* Sanitize the input... */
&#64;&#64; -1036,28 +1085,34 &#64;&#64; static bool vgic_queue_irq(struct kvm_vcpu *vcpu, u8 sgi_source_id, int irq)
 	lr = vgic_cpu-&gt;vgic_irq_lr_map[irq];
 
 	/* Do we have an active interrupt for the same CPUID? */
<span class="hl kwa">-	if (lr != LR_EMPTY &amp;&amp;</span>
<span class="hl kwa">-	    (LR_CPUID(vgic_cpu-&gt;vgic_lr[lr]) == sgi_source_id)) {</span>
<span class="hl kwa">-		kvm_debug(&quot;LR%d piggyback for IRQ%d %x\n&quot;,</span>
<span class="hl kwa">-			  lr, irq, vgic_cpu-&gt;vgic_lr[lr]);</span>
<span class="hl kwa">-		BUG_ON(!test_bit(lr, vgic_cpu-&gt;lr_used));</span>
<span class="hl kwa">-		vgic_cpu-&gt;vgic_lr[lr] |= GICH_LR_PENDING_BIT;</span>
<span class="hl kwa">-		return true;</span>
<span class="hl kwb">+	if (lr != LR_EMPTY) {</span>
<span class="hl kwb">+		vlr = vgic_get_lr(vcpu, lr);</span>
<span class="hl kwb">+		if (vlr.source == sgi_source_id) {</span>
<span class="hl kwb">+			kvm_debug(&quot;LR%d piggyback for IRQ%d\n&quot;, lr, vlr.irq);</span>
<span class="hl kwb">+			BUG_ON(!test_bit(lr, vgic_cpu-&gt;lr_used));</span>
<span class="hl kwb">+			vlr.state |= LR_STATE_PENDING;</span>
<span class="hl kwb">+			vgic_set_lr(vcpu, lr, vlr);</span>
<span class="hl kwb">+			return true;</span>
<span class="hl kwb">+		}</span>
 	}
 
 	/* Try to use another LR for this interrupt */
 	lr = find_first_zero_bit((unsigned long *)vgic_cpu-&gt;lr_used,
<span class="hl kwa">-			       vgic_cpu-&gt;nr_lr);</span>
<span class="hl kwa">-	if (lr &gt;= vgic_cpu-&gt;nr_lr)</span>
<span class="hl kwb">+			       vgic-&gt;nr_lr);</span>
<span class="hl kwb">+	if (lr &gt;= vgic-&gt;nr_lr)</span>
 		return false;
 
 	kvm_debug(&quot;LR%d allocated for IRQ%d %x\n&quot;, lr, irq, sgi_source_id);
<span class="hl kwa">-	vgic_cpu-&gt;vgic_lr[lr] = MK_LR_PEND(sgi_source_id, irq);</span>
 	vgic_cpu-&gt;vgic_irq_lr_map[irq] = lr;
 	set_bit(lr, vgic_cpu-&gt;lr_used);
 
<span class="hl kwb">+	vlr.irq = irq;</span>
<span class="hl kwb">+	vlr.source = sgi_source_id;</span>
<span class="hl kwb">+	vlr.state = LR_STATE_PENDING;</span>
 	if (!vgic_irq_is_edge(vcpu, irq))
<span class="hl kwa">-		vgic_cpu-&gt;vgic_lr[lr] |= GICH_LR_EOI;</span>
<span class="hl kwb">+		vlr.state |= LR_EOI_INT;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic_set_lr(vcpu, lr, vlr);</span>
 
 	return true;
 }
&#64;&#64; -1155,9 +1210,9 &#64;&#64; static void __kvm_vgic_flush_hwstate(struct kvm_vcpu *vcpu)
 
 epilog:
 	if (overflow) {
<span class="hl kwa">-		vgic_cpu-&gt;vgic_hcr |= GICH_HCR_UIE;</span>
<span class="hl kwb">+		vgic_enable_underflow(vcpu);</span>
 	} else {
<span class="hl kwa">-		vgic_cpu-&gt;vgic_hcr &amp;= ~GICH_HCR_UIE;</span>
<span class="hl kwb">+		vgic_disable_underflow(vcpu);</span>
 		/*
 		 * We&#39;re about to run this VCPU, and we&#39;ve consumed
 		 * everything the distributor had in store for
&#64;&#64; -1170,44 +1225,46 &#64;&#64; epilog:
 
 static bool vgic_process_maintenance(struct kvm_vcpu *vcpu)
 {
<span class="hl kwa">-	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;</span>
<span class="hl kwb">+	u32 status = vgic_get_interrupt_status(vcpu);</span>
 	bool level_pending = false;
 
<span class="hl kwa">-	kvm_debug(&quot;MISR = %08x\n&quot;, vgic_cpu-&gt;vgic_misr);</span>
<span class="hl kwb">+	kvm_debug(&quot;STATUS = %08x\n&quot;, status);</span>
 
<span class="hl kwa">-	if (vgic_cpu-&gt;vgic_misr &amp; GICH_MISR_EOI) {</span>
<span class="hl kwb">+	if (status &amp; INT_STATUS_EOI) {</span>
 		/*
 		 * Some level interrupts have been EOIed. Clear their
 		 * active bit.
 		 */
<span class="hl kwa">-		int lr, irq;</span>
<span class="hl kwb">+		u64 eisr = vgic_get_eisr(vcpu);</span>
<span class="hl kwb">+		unsigned long *eisr_ptr = (unsigned long *)&amp;eisr;</span>
<span class="hl kwb">+		int lr;</span>
 
<span class="hl kwa">-		for_each_set_bit(lr, (unsigned long *)vgic_cpu-&gt;vgic_eisr,</span>
<span class="hl kwa">-				 vgic_cpu-&gt;nr_lr) {</span>
<span class="hl kwa">-			irq = vgic_cpu-&gt;vgic_lr[lr] &amp; GICH_LR_VIRTUALID;</span>
<span class="hl kwb">+		for_each_set_bit(lr, eisr_ptr, vgic-&gt;nr_lr) {</span>
<span class="hl kwb">+			struct vgic_lr vlr = vgic_get_lr(vcpu, lr);</span>
 
<span class="hl kwa">-			vgic_irq_clear_active(vcpu, irq);</span>
<span class="hl kwa">-			vgic_cpu-&gt;vgic_lr[lr] &amp;= ~GICH_LR_EOI;</span>
<span class="hl kwb">+			vgic_irq_clear_active(vcpu, vlr.irq);</span>
<span class="hl kwb">+			WARN_ON(vlr.state &amp; LR_STATE_MASK);</span>
<span class="hl kwb">+			vlr.state = 0;</span>
<span class="hl kwb">+			vgic_set_lr(vcpu, lr, vlr);</span>
 
 			/* Any additional pending interrupt? */
<span class="hl kwa">-			if (vgic_dist_irq_is_pending(vcpu, irq)) {</span>
<span class="hl kwa">-				vgic_cpu_irq_set(vcpu, irq);</span>
<span class="hl kwb">+			if (vgic_dist_irq_is_pending(vcpu, vlr.irq)) {</span>
<span class="hl kwb">+				vgic_cpu_irq_set(vcpu, vlr.irq);</span>
 				level_pending = true;
 			} else {
<span class="hl kwa">-				vgic_cpu_irq_clear(vcpu, irq);</span>
<span class="hl kwb">+				vgic_cpu_irq_clear(vcpu, vlr.irq);</span>
 			}
 
 			/*
 			 * Despite being EOIed, the LR may not have
 			 * been marked as empty.
 			 */
<span class="hl kwa">-			set_bit(lr, (unsigned long *)vgic_cpu-&gt;vgic_elrsr);</span>
<span class="hl kwa">-			vgic_cpu-&gt;vgic_lr[lr] &amp;= ~GICH_LR_ACTIVE_BIT;</span>
<span class="hl kwb">+			vgic_sync_lr_elrsr(vcpu, lr, vlr);</span>
 		}
 	}
 
<span class="hl kwa">-	if (vgic_cpu-&gt;vgic_misr &amp; GICH_MISR_U)</span>
<span class="hl kwa">-		vgic_cpu-&gt;vgic_hcr &amp;= ~GICH_HCR_UIE;</span>
<span class="hl kwb">+	if (status &amp; INT_STATUS_UNDERFLOW)</span>
<span class="hl kwb">+		vgic_disable_underflow(vcpu);</span>
 
 	return level_pending;
 }
&#64;&#64; -1220,29 +1277,31 &#64;&#64; static void __kvm_vgic_sync_hwstate(struct kvm_vcpu *vcpu)
 {
 	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;
 	struct vgic_dist *dist = &amp;vcpu-&gt;kvm-&gt;arch.vgic;
<span class="hl kwb">+	u64 elrsr;</span>
<span class="hl kwb">+	unsigned long *elrsr_ptr;</span>
 	int lr, pending;
 	bool level_pending;
 
 	level_pending = vgic_process_maintenance(vcpu);
<span class="hl kwb">+	elrsr = vgic_get_elrsr(vcpu);</span>
<span class="hl kwb">+	elrsr_ptr = (unsigned long *)&amp;elrsr;</span>
 
 	/* Clear mappings for empty LRs */
<span class="hl kwa">-	for_each_set_bit(lr, (unsigned long *)vgic_cpu-&gt;vgic_elrsr,</span>
<span class="hl kwa">-			 vgic_cpu-&gt;nr_lr) {</span>
<span class="hl kwa">-		int irq;</span>
<span class="hl kwb">+	for_each_set_bit(lr, elrsr_ptr, vgic-&gt;nr_lr) {</span>
<span class="hl kwb">+		struct vgic_lr vlr;</span>
 
 		if (!test_and_clear_bit(lr, vgic_cpu-&gt;lr_used))
 			continue;
 
<span class="hl kwa">-		irq = vgic_cpu-&gt;vgic_lr[lr] &amp; GICH_LR_VIRTUALID;</span>
<span class="hl kwb">+		vlr = vgic_get_lr(vcpu, lr);</span>
 
<span class="hl kwa">-		BUG_ON(irq &gt;= VGIC_NR_IRQS);</span>
<span class="hl kwa">-		vgic_cpu-&gt;vgic_irq_lr_map[irq] = LR_EMPTY;</span>
<span class="hl kwb">+		BUG_ON(vlr.irq &gt;= VGIC_NR_IRQS);</span>
<span class="hl kwb">+		vgic_cpu-&gt;vgic_irq_lr_map[vlr.irq] = LR_EMPTY;</span>
 	}
 
 	/* Check if we still have something up our sleeve... */
<span class="hl kwa">-	pending = find_first_zero_bit((unsigned long *)vgic_cpu-&gt;vgic_elrsr,</span>
<span class="hl kwa">-				      vgic_cpu-&gt;nr_lr);</span>
<span class="hl kwa">-	if (level_pending || pending &lt; vgic_cpu-&gt;nr_lr)</span>
<span class="hl kwb">+	pending = find_first_zero_bit(elrsr_ptr, vgic-&gt;nr_lr);</span>
<span class="hl kwb">+	if (level_pending || pending &lt; vgic-&gt;nr_lr)</span>
 		set_bit(vcpu-&gt;vcpu_id, &amp;dist-&gt;irq_pending_on_cpu);
 }
 
&#64;&#64; -1432,21 +1491,20 &#64;&#64; int kvm_vgic_vcpu_init(struct kvm_vcpu *vcpu)
 	}
 
 	/*
<span class="hl kwa">-	 * By forcing VMCR to zero, the GIC will restore the binary</span>
<span class="hl kwa">-	 * points to their reset values. Anything else resets to zero</span>
<span class="hl kwa">-	 * anyway.</span>
<span class="hl kwb">+	 * Store the number of LRs per vcpu, so we don&#39;t have to go</span>
<span class="hl kwb">+	 * all the way to the distributor structure to find out. Only</span>
<span class="hl kwb">+	 * assembly code should use this one.</span>
 	 */
<span class="hl kwa">-	vgic_cpu-&gt;vgic_vmcr = 0;</span>
<span class="hl kwb">+	vgic_cpu-&gt;nr_lr = vgic-&gt;nr_lr;</span>
 
<span class="hl kwa">-	vgic_cpu-&gt;nr_lr = vgic_nr_lr;</span>
<span class="hl kwa">-	vgic_cpu-&gt;vgic_hcr = GICH_HCR_EN; /* Get the show on the road... */</span>
<span class="hl kwb">+	vgic_enable(vcpu);</span>
 
 	return 0;
 }
 
 static void vgic_init_maintenance_interrupt(void *info)
 {
<span class="hl kwa">-	enable_percpu_irq(vgic_maint_irq, 0);</span>
<span class="hl kwb">+	enable_percpu_irq(vgic-&gt;maint_irq, 0);</span>
 }
 
 static int vgic_cpu_notify(struct notifier_block *self,
&#64;&#64; -1459,7 +1517,7 &#64;&#64; static int vgic_cpu_notify(struct notifier_block *self,
 		break;
 	case CPU_DYING:
 	case CPU_DYING_FROZEN:
<span class="hl kwa">-		disable_percpu_irq(vgic_maint_irq);</span>
<span class="hl kwb">+		disable_percpu_irq(vgic-&gt;maint_irq);</span>
 		break;
 	}
 
&#64;&#64; -1470,30 +1528,37 &#64;&#64; static struct notifier_block vgic_cpu_nb = {
 	.notifier_call = vgic_cpu_notify,
 };
 
<span class="hl kwb">+static const struct of_device_id vgic_ids[] = {</span>
<span class="hl kwb">+	{ .compatible = &quot;arm,cortex-a15-gic&quot;, .data = vgic_v2_probe, },</span>
<span class="hl kwb">+	{ .compatible = &quot;arm,gic-v3&quot;, .data = vgic_v3_probe, },</span>
<span class="hl kwb">+	{},</span>
<span class="hl kwb">+};</span>
<span class="hl kwb">+</span>
 int kvm_vgic_hyp_init(void)
 {
<span class="hl kwb">+	const struct of_device_id *matched_id;</span>
<span class="hl kwb">+	int (*vgic_probe)(struct device_node *,const struct vgic_ops **,</span>
<span class="hl kwb">+			  const struct vgic_params **);</span>
<span class="hl kwb">+	struct device_node *vgic_node;</span>
 	int ret;
<span class="hl kwa">-	struct resource vctrl_res;</span>
<span class="hl kwa">-	struct resource vcpu_res;</span>
 
<span class="hl kwa">-	vgic_node = of_find_compatible_node(NULL, NULL, &quot;arm,cortex-a15-gic&quot;);</span>
<span class="hl kwb">+	vgic_node = of_find_matching_node_and_match(NULL,</span>
<span class="hl kwb">+						    vgic_ids, &amp;matched_id);</span>
 	if (!vgic_node) {
<span class="hl kwa">-		kvm_err(&quot;error: no compatible vgic node in DT\n&quot;);</span>
<span class="hl kwb">+		kvm_err(&quot;error: no compatible GIC node found\n&quot;);</span>
 		return -ENODEV;
 	}
 
<span class="hl kwa">-	vgic_maint_irq = irq_of_parse_and_map(vgic_node, 0);</span>
<span class="hl kwa">-	if (!vgic_maint_irq) {</span>
<span class="hl kwa">-		kvm_err(&quot;error getting vgic maintenance irq from DT\n&quot;);</span>
<span class="hl kwa">-		ret = -ENXIO;</span>
<span class="hl kwa">-		goto out;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwb">+	vgic_probe = matched_id-&gt;data;</span>
<span class="hl kwb">+	ret = vgic_probe(vgic_node, &amp;vgic_ops, &amp;vgic);</span>
<span class="hl kwb">+	if (ret)</span>
<span class="hl kwb">+		return ret;</span>
 
<span class="hl kwa">-	ret = request_percpu_irq(vgic_maint_irq, vgic_maintenance_handler,</span>
<span class="hl kwb">+	ret = request_percpu_irq(vgic-&gt;maint_irq, vgic_maintenance_handler,</span>
 				 &quot;vgic&quot;, kvm_get_running_vcpus());
 	if (ret) {
<span class="hl kwa">-		kvm_err(&quot;Cannot register interrupt %d\n&quot;, vgic_maint_irq);</span>
<span class="hl kwa">-		goto out;</span>
<span class="hl kwb">+		kvm_err(&quot;Cannot register interrupt %d\n&quot;, vgic-&gt;maint_irq);</span>
<span class="hl kwb">+		return ret;</span>
 	}
 
 	ret = __register_cpu_notifier(&amp;vgic_cpu_nb);
&#64;&#64; -1502,49 +1567,15 &#64;&#64; int kvm_vgic_hyp_init(void)
 		goto out_free_irq;
 	}
 
<span class="hl kwa">-	ret = of_address_to_resource(vgic_node, 2, &amp;vctrl_res);</span>
<span class="hl kwa">-	if (ret) {</span>
<span class="hl kwa">-		kvm_err(&quot;Cannot obtain VCTRL resource\n&quot;);</span>
<span class="hl kwa">-		goto out_free_irq;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	vgic_vctrl_base = of_iomap(vgic_node, 2);</span>
<span class="hl kwa">-	if (!vgic_vctrl_base) {</span>
<span class="hl kwa">-		kvm_err(&quot;Cannot ioremap VCTRL\n&quot;);</span>
<span class="hl kwa">-		ret = -ENOMEM;</span>
<span class="hl kwa">-		goto out_free_irq;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	vgic_nr_lr = readl_relaxed(vgic_vctrl_base + GICH_VTR);</span>
<span class="hl kwa">-	vgic_nr_lr = (vgic_nr_lr &amp; 0x3f) + 1;</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	ret = create_hyp_io_mappings(vgic_vctrl_base,</span>
<span class="hl kwa">-				     vgic_vctrl_base + resource_size(&amp;vctrl_res),</span>
<span class="hl kwa">-				     vctrl_res.start);</span>
<span class="hl kwa">-	if (ret) {</span>
<span class="hl kwa">-		kvm_err(&quot;Cannot map VCTRL into hyp\n&quot;);</span>
<span class="hl kwa">-		goto out_unmap;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-</span>
<span class="hl kwa">-	kvm_info(&quot;%s&#64;%llx IRQ%d\n&quot;, vgic_node-&gt;name,</span>
<span class="hl kwa">-		 vctrl_res.start, vgic_maint_irq);</span>
 	on_each_cpu(vgic_init_maintenance_interrupt, NULL, 1);
 
<span class="hl kwa">-	if (of_address_to_resource(vgic_node, 3, &amp;vcpu_res)) {</span>
<span class="hl kwa">-		kvm_err(&quot;Cannot obtain VCPU resource\n&quot;);</span>
<span class="hl kwa">-		ret = -ENXIO;</span>
<span class="hl kwa">-		goto out_unmap;</span>
<span class="hl kwa">-	}</span>
<span class="hl kwa">-	vgic_vcpu_base = vcpu_res.start;</span>
<span class="hl kwb">+	/* Callback into for arch code for setup */</span>
<span class="hl kwb">+	vgic_arch_setup(vgic);</span>
 
<span class="hl kwa">-	goto out;</span>
<span class="hl kwb">+	return 0;</span>
 
<span class="hl kwa">-out_unmap:</span>
<span class="hl kwa">-	iounmap(vgic_vctrl_base);</span>
 out_free_irq:
<span class="hl kwa">-	free_percpu_irq(vgic_maint_irq, kvm_get_running_vcpus());</span>
<span class="hl kwa">-out:</span>
<span class="hl kwa">-	of_node_put(vgic_node);</span>
<span class="hl kwb">+	free_percpu_irq(vgic-&gt;maint_irq, kvm_get_running_vcpus());</span>
 	return ret;
 }
 
&#64;&#64; -1577,7 +1608,7 &#64;&#64; int kvm_vgic_init(struct kvm *kvm)
 	}
 
 	ret = kvm_phys_addr_ioremap(kvm, kvm-&gt;arch.vgic.vgic_cpu_base,
<span class="hl kwa">-				    vgic_vcpu_base, KVM_VGIC_V2_CPU_SIZE);</span>
<span class="hl kwb">+				    vgic-&gt;vcpu_base, KVM_VGIC_V2_CPU_SIZE);</span>
 	if (ret) {
 		kvm_err(&quot;Unable to remap VGIC CPU to VCPU\n&quot;);
 		goto out;
&#64;&#64; -1623,7 +1654,8 &#64;&#64; int kvm_vgic_create(struct kvm *kvm)
 	}
 
 	spin_lock_init(&amp;kvm-&gt;arch.vgic.lock);
<span class="hl kwa">-	kvm-&gt;arch.vgic.vctrl_base = vgic_vctrl_base;</span>
<span class="hl kwb">+	kvm-&gt;arch.vgic.in_kernel = true;</span>
<span class="hl kwb">+	kvm-&gt;arch.vgic.vctrl_base = vgic-&gt;vctrl_base;</span>
 	kvm-&gt;arch.vgic.vgic_dist_base = VGIC_ADDR_UNDEF;
 	kvm-&gt;arch.vgic.vgic_cpu_base = VGIC_ADDR_UNDEF;
 
&#64;&#64; -1722,39 +1754,40 &#64;&#64; int kvm_vgic_addr(struct kvm *kvm, unsigned long type, u64 *addr, bool write)
 static bool handle_cpu_mmio_misc(struct kvm_vcpu *vcpu,
 				 struct kvm_exit_mmio *mmio, phys_addr_t offset)
 {
<span class="hl kwa">-	struct vgic_cpu *vgic_cpu = &amp;vcpu-&gt;arch.vgic_cpu;</span>
<span class="hl kwa">-	u32 reg, mask = 0, shift = 0;</span>
 	bool updated = false;
<span class="hl kwb">+	struct vgic_vmcr vmcr;</span>
<span class="hl kwb">+	u32 *vmcr_field;</span>
<span class="hl kwb">+	u32 reg;</span>
<span class="hl kwb">+</span>
<span class="hl kwb">+	vgic_get_vmcr(vcpu, &amp;vmcr);</span>
 
 	switch (offset &amp; ~0x3) {
 	case GIC_CPU_CTRL:
<span class="hl kwa">-		mask = GICH_VMCR_CTRL_MASK;</span>
<span class="hl kwa">-		shift = GICH_VMCR_CTRL_SHIFT;</span>
<span class="hl kwb">+		vmcr_field = &amp;vmcr.ctlr;</span>
 		break;
 	case GIC_CPU_PRIMASK:
<span class="hl kwa">-		mask = GICH_VMCR_PRIMASK_MASK;</span>
<span class="hl kwa">-		shift = GICH_VMCR_PRIMASK_SHIFT;</span>
<span class="hl kwb">+		vmcr_field = &amp;vmcr.pmr;</span>
 		break;
 	case GIC_CPU_BINPOINT:
<span class="hl kwa">-		mask = GICH_VMCR_BINPOINT_MASK;</span>
<span class="hl kwa">-		shift = GICH_VMCR_BINPOINT_SHIFT;</span>
<span class="hl kwb">+		vmcr_field = &amp;vmcr.bpr;</span>
 		break;
 	case GIC_CPU_ALIAS_BINPOINT:
<span class="hl kwa">-		mask = GICH_VMCR_ALIAS_BINPOINT_MASK;</span>
<span class="hl kwa">-		shift = GICH_VMCR_ALIAS_BINPOINT_SHIFT;</span>
<span class="hl kwb">+		vmcr_field = &amp;vmcr.abpr;</span>
 		break;
<span class="hl kwb">+	default:</span>
<span class="hl kwb">+		BUG();</span>
 	}
 
 	if (!mmio-&gt;is_write) {
<span class="hl kwa">-		reg = (vgic_cpu-&gt;vgic_vmcr &amp; mask) &gt;&gt; shift;</span>
<span class="hl kwb">+		reg = *vmcr_field;</span>
 		mmio_data_write(mmio, ~0, reg);
 	} else {
 		reg = mmio_data_read(mmio, ~0);
<span class="hl kwa">-		reg = (reg &lt;&lt; shift) &amp; mask;</span>
<span class="hl kwa">-		if (reg != (vgic_cpu-&gt;vgic_vmcr &amp; mask))</span>
<span class="hl kwb">+		if (reg != *vmcr_field) {</span>
<span class="hl kwb">+			*vmcr_field = reg;</span>
<span class="hl kwb">+			vgic_set_vmcr(vcpu, &amp;vmcr);</span>
 			updated = true;
<span class="hl kwa">-		vgic_cpu-&gt;vgic_vmcr &amp;= ~mask;</span>
<span class="hl kwa">-		vgic_cpu-&gt;vgic_vmcr |= reg;</span>
<span class="hl kwb">+		}</span>
 	}
 	return updated;
 }
</code></pre></td></tr></table>
</div> <!-- class=content -->
<div class='footer'>generated by <a href='https://git.zx2c4.com/cgit/about/'>cgit </a> (<a href='https://git-scm.com/'>git 2.34.1</a>) at 2026-02-19 10:22:34 +0000</div>
</div> <!-- id=cgit -->
</body>
</html>
