From mboxrd@z Thu Jan 1 00:00:00 1970 X-Msuck: nntp://news.gmane.org/gmane.linux.lib.musl.general/8255 Path: news.gmane.org!not-for-mail From: Jens Gustedt Newsgroups: gmane.linux.lib.musl.general Subject: stdatomic library, v2 Date: Mon, 03 Aug 2015 13:47:49 +0200 Message-ID: <1438602469.2248.2.camel@inria.fr> References: <1437983501.757.4.camel@inria.fr> Reply-To: musl@lists.openwall.com NNTP-Posting-Host: plane.gmane.org Mime-Version: 1.0 Content-Type: multipart/signed; micalg="pgp-sha1"; protocol="application/pgp-signature"; boundary="=-9ytLh6UmV5Ig1MP2q2V/" X-Trace: ger.gmane.org 1438602512 16757 80.91.229.3 (3 Aug 2015 11:48:32 GMT) X-Complaints-To: usenet@ger.gmane.org NNTP-Posting-Date: Mon, 3 Aug 2015 11:48:32 +0000 (UTC) To: musl@lists.openwall.com Original-X-From: musl-return-8268-gllmg-musl=m.gmane.org@lists.openwall.com Mon Aug 03 13:48:19 2015 Return-path: Envelope-to: gllmg-musl@m.gmane.org Original-Received: from mother.openwall.net ([195.42.179.200]) by plane.gmane.org with smtp (Exim 4.69) (envelope-from ) id 1ZMEE6-0006tZ-4T for gllmg-musl@m.gmane.org; Mon, 03 Aug 2015 13:48:18 +0200 Original-Received: (qmail 3715 invoked by uid 550); 3 Aug 2015 11:48:14 -0000 Mailing-List: contact musl-help@lists.openwall.com; run by ezmlm Precedence: bulk List-Post: List-Help: List-Unsubscribe: List-Subscribe: Original-Received: (qmail 3652 invoked from network); 3 Aug 2015 11:48:04 -0000 X-IronPort-AV: E=Sophos;i="5.15,601,1432591200"; d="scan'";a="172510565" In-Reply-To: <1437983501.757.4.camel@inria.fr> Face: iVBORw0KGgoAAAANSUhEUgAAADAAAAAwCAYAAABXAvmHAAAABHNCSVQICAgIfAhkiAAAEb9JREFUaN7VmXuQ3lV5xz/n/O7v7333fffdW3azSTY3Qi6wGy4aEc0qWlGhWcAq7WiDrWNpO61paS29EpzWaevYpvfL2JK0VRBbBxQtg0U2BRGKhIAI4ZKwSTbZ+3u//G7nnP7BtGM7UyVAnfb56/xznuf7nXnOnOf5fuH/eYjXI8mDn/5k8ch90xNj+eKka8xkI1MTGmY6Rk/XpD5w091fPvnf7xz8sQ/sLTQ6k54SY2mW1mQY3DVX8Kdv/PvPnfyBE7hn797bxBPP3NBv28RAqgyzJqNgJIs5q7bhHW+94Yd+5/fuBrjj5l/cs/LUs/vNiVMTo5aNJQX9lks3iaivHqlt/9D7xs778Y/Uf6AE/uWa6x7wT52ZTDyLKEkoOHmW4oSaSDFxQmq7tHPuDJ5TUkv10iAGgSLvediZotf16HS6KG1RuXDT/g99/vO3vtLa8vUgELuCVAja0mVJKRaylGbgYnwP27bImYRcozkmKrWS53vYjosfhNSUIjXQUoq2K0ksRdZqTZ5Lbfs/Dl/66E/uSebmb8hF8URab48JS+IPDVJtto9uuHj8wKW//6lD/1OSznxtLEPRv2kdPH2MSBpkqlDGkLoOIgGkIWcEiTYsk1JSDpGUFAAcBzfRCKXxV+ql7/XWnn7uxcm3vOGS2rrR1UcLV+6pC4B//tjPjGdHjhwttFOEcMmMAgFeLkezWsOTkmigfyYZGTzYN7HtwFt u+rU6wJnprxQf/JvP7beffH5fBIwGIZqEutJUlCKSNoFjYbQiihOkFmih0FJgSUGIpGxstE6RwiLQmsyzcXZesO8N1773YOHKPfUv/uxP726ePjsVNVoT9WZjMq02kRpEKay9+UPXjQmAL1991UuDZ+fGQulSVQrpuqg4pWkkupSjVGshtGZJpzQ9DysfQqZIkgzR7 jAc+qAFrm2xTIRJJKnr0okTfCnQKLRlo9MUicGWL7dcnCnytoOTKTxpERpBv8moomm7AZFjEddb9EiHdhJhPJdYanQKUZrivmH7Pnlm+itFuVgdi7WkpSSJdFlqRwRugLAkQakXJQ06cAhcB0tnRI0mstOllKYEvk8qJJGj8IygID16hwZBGIzIsIXCRREq6DGSsu9RkBYBBldKbCFwbMnA2mH8wKIrbQrGY1WkKbQ6DFkWOQEicMks8JTEQRJI0LOLJbvxwosTMlMk0kYbjTCGci4gzrr0Sod0YQFHWiSuRTHMkbRaCCxMZlh2FLGQLEjBmHFIhUBrEI0OlgYnyNN0LFKliYxGeT69rouqtOjP5+lLEtxugosgOjNHj7ZRGmwjaDoGX9skKEQQIFptkAIjIWckCQIrE9ija8aOznk5wiwh9lw8aeMlMamUeEKis4wOFiaFRtpEYxBJSoQA4ZM4ksgSPG4E9Siibjt02xUaUQsnzFFfSZlPM4TRlPp7yQWCs/PzlMs53HrMRLGPt/f2UFYRbkOzbGm6JkPgYjAgbVo6I/Ntup0unuPgWAK0RaLVy//AfVe864lgcWkicz1yloNvoJMmpFLTsiCJNIFt0VERHdcnGyxPW5598BmlJo6tVPc9v1RB2CHdqMWOYpkLCwHnhyHVTHNcpTxUrVCp1rAtyYZ1w0i3SLFk89A3/g2UZH3O4ubL30RxsU5ldhkpDFJIbGFRE4rYSLQQRHGEJQQeFm7gYHaev98CuO6NF62q1hqTKktJlKarNW0JDZUgHA9dys/Y q4emnQ3Df3nxj7z7+t2f+pO/Ysv5U0dm525uKYty3wCetPjRdYNcjaaQabq1Oq1MkVOKkc1reGFhiWIuj7C6JGlKyZNsNor3n7eFStLlkcoKz61fvX/79u3T9cWliTBWvrQEHa0QQmIZgdIK27FQmaKVxIRbN+77z5/4sT/+1PjJEycmosWVmXJvP3YpZM3aNYyuWz dTuHLPf5lPrnr3VXtPnDp10HNDlIqROEwO9fG+VosXspQ7lyto3+fE8ln2rlpDfniQP332WRCCd75tB43jZ7jUDRlspTiugxAeR+I2960s0hBy3503fmT69FcfONian5uQliDIF+m2YyKlUUIRxRF968eOfuC+r+4851Hill//+PiRx79ztNrs0mm0KZaLZEnGWwsB725WOFRv8HAmSDodSo7D3oF+bMfirxbOYkKHQDhc5lusznxaaO6fO8O2fIE9vf1M0+Go0jM73nT55EcvGa8duedr+3S1si8v7VLnzDxRpkjCHGJ4aHr1utVT7/mzP6/b5wJ++v57izf9wi8dVNrHcT3yxQK27RJ3Y6zM0LI1b+0ZoFldIvFsxvsH6LMELQOpkST1GBVq3NIAvvC54ztPcTwRLOs2b+sf4u2RS5JFY1++5yt3XbXnvZPX3/n5W4FbH/nLA+ueuOeBG/zefG3ynW87+N3D3jkRuP3226fiVEwkOiV0bNIsJep28QOfqOAjl2DEElw1WCZKFGUtkK6h7fj4DpRKfURJjeGwSE/UJcJga4d6p0lHCoo64w1BkfsqtYnf/LVPHgSuAdh1476TwMsD3t9/9jUMc9pMSiGxJRgV0+22Wa7XqTfqHH7pON8u9/NE6BB5PnZPD42BkMe14IG4gVXIsVSvkijFU2fPIrOUraPrsD3Jlt4SnTQlsi2qtqLSarG0VJnaObHztu8HyTqX9vn6Aw/cMTw0TJpkeH6AhaIncCn3FkmFzWNzc3y7U+ObjTqPVJs8Vq1h1oScabdoV xWxyQg9l57BATZZDpuCgH5PMrVxM3G3g513WfNDW3liYRGsPN1ua2LHtq0zM6dOPfmqCDx15227/+ILd58EaNa717/00smp3bsvo7fcS3VpGTcAKV2q1QZJ3MVIC88JsFJN2c+xbrDM+aHPlqE+ji0vY7kWvaFhaaXJzs3nYaoNNq/tJ1/tsiwtnpEOtz/+HHNLMXG UkmYp7XarVKlWD53TQtO89+7iN//stoPWqdkpPx/Wur3F6WccZ+KFdnuskXNZaCVkiWJ++Qy+59EbuHi6y1t2XkL27Ak2CJssS6lHMYPCYDLDP/dJvj1fQ0qb+WoMqk3BzrFlYAidc5hZXAQnh9DQ6TbRQhF3U7Is4eZf+YWJj9308Se/5z7w3fH8s8fGnNOnp1ZJie52S+VOd2oIeJObo2Vs5i2JWZWn1e/TrjQZK/WSiyPCE2eImh1S12PJaEJtYbsCN81oL7eROPQVodVI6ZiA1MvxQhyhOxGWlcOkKUHg4aQOaaoQ0hDFXf7pi3dPAk+e00r56HuurubnzpZsY5NKiYMhwUagcY1CCINB0pACIQXLoaBHWdTbXbTwWHEhHwQE9SbVgRJ/Mz/Hi4sr7H3fOIuVJvc+OEsYFnG8AKETGs0WljBYtk2j3nkZmRDoqMPqdSNHHztyZOc5rZTpQHlfIh2MpdDSgAZbZ/hGgzRIaSEF9AiNLyWylRFbNh0bfKEZsCxkK2JxZJi/Pv0CJyornLd5DQ8++hxHv7NIEFg0W00ajRqNRh3XtciUot5okBlFZgzSssm04fjxExN/+kcHxs+JwOWHDh06u3bkQNV1a7ZSIDWehEQoUgEaQGtMlpHlLXp6XPLdjFyqwBMsAvfR5D4Z0fFKbNqwgWajgnQHWF6K8V0H35EIrQFodWKSzGAJQc63sS2JylKkZaO1ZnTNqplXpUo07727+NV/vPuAv3D2hrWpRtYaZJbEwmBlINf00144S35kgMZsxEpgc0zEfL3Spu 1LklihlU2u6NBtNZDaohXHIDKadYWRLsZkZFhgNCaLcB2XzECWalAZhR6v9vzx472v+BF/dxSu3FPf9cY3z0TNLgO+YFNfHzozJHFE4CvW1CPGBvtYabQ5YQuON+aI7YCqUTSX2hgTUeop025IstSiv1wiUQu4fkiz2SBTHaSQ9AQOaZqBk6MTdzFGYAnB0FAvWjD9 fVWJ7xUjI+XJ54/NMNeVLM3XMEZjWRYGzf2dWUp5kJZNmlmE+RDdaXHpznFOzc6xOL8AKIqlArVaTKdTQSvD4sIifb29KOOgshaOJal0UzSgjcQYyNKU4zMzXHTR+F2vSRdKOm3CnIvnO4QFn77ePL7vErVaqLhN4OUYcGHL+j7iVoeBoX5mT5+mtjzHeRtLDA2UWFqYx3c8Ot2MocE875y8iMCHLElIogytDVJKjFIYLUiiCKVihkeGD379Xx869JoICGHj2C4qU2ASFqsLNFptvMBj9ZoSlzgen7hiFz919QQDoWB+9gwqU4SFXk6eXGHN6kH6e21Wls7SX3Zot5t889HvUKlFL8ssJkOgAIXv2+gswqiYjRvHjv7qr+zb94qEre8Vnu/juRlKCTJlgQhBxdRaTVb1lNh7yRb41tOUR99G72Afza6h0e7gezZWOMzRY7NIZVHoyVOtxli2hSUEaarJlwLqOqOTaoTMYVmagXKOQnHk6O/+7u9MTl5xZf01D3NrR0dK7W58pe/naHS7SB1z7fg6fm58I2/OuRSencH2HIIffjNzLRhfv5ZGo85itU6aSRr1Jq6laEcJjcgwWA7YMOoS5B2WKx38oEAUJURRhko1nm9P/8EffvrK7wf+FbfQjT/zUwdzoTvTjVv4UlK0XHZs3UTZd1mbaqyiCwKc02d4v51ycW2Zy9Zvw+AQ5DxW9RcoFwRDZZ9VA2UAdu26iD3vupQLto5SrXSwpIPjKsbWr+aDH/zg/lcC/pzU6Y98eO/4iReem67WOyU/6KFdX2S kELLRU3y0d5Cg1aEZBqSxQJdtprXL5546guXm6QtCwmKOTrvC2NoSq8tw8fYSDx9t8tATVSqNOo16lzdech7Ndrz/a4e/9fqr05+57dCTW7edtz/fE2JIySyHlxqKr8+3OFXooykND8ocf1vwuD1WHO1G5AKPUi5EYVGpLeA4OcqhZtVASKtjkLZFpjM6nZjNG0dnN p63fepcwL8qf+BdV+x+YGmxNimRtNOUJI3Z1APX7NjBPxx5ntjLQRLTTBKGSz4jwz3UajWGhgap1uqcPFXh0ovX88zTz1Mo9tJNQdiF6d273zh1y29/un6ueM7ZH7hw24apfGDPJN02ri0phXlUaZi/e3qGSpziOgKjI8qhS73eQKuUIBAsLS3i+x5DQ0W6zRUyY1hpiNrAwND+PXve+6rAv2qH5rdv+dXxr933tbtWlqpj/cOjkAkWaosUHUW5UGBmYZF1AwM0WjUKvX2g25TLJZ56dh7Pztg5vmFm8vIL9udHLrtr6trrXxXw12wxTd9/b/ETt95y15lTC5Pbtu2gUVkgaTeItSJKDI4Fo6t66cZtbNuiUu8QlvpnVq0auuGzd3758P8Jl3L6/nuLf3Tg05OWEJOFfH4iiuLJOMlYXmnSrDURaIxJEFJzwYXb9x+640u38v8hPvazP717+5atZtvmrWbN6vVm9dBqc83VP7znf6OW/Xok+a2b941XG9HY7KmTE81me/Khww+P5XMFkszQiFIKPQEQTwF3/58zui+98IK9KA4W8gVOn10kF4Tk8z7SdWl2I6JWA0fE9A+VqdXq0x/+iQ/f8PM3/cbJ14vAa7JZr3rXFR+bn188aFk2veUCxXIPQeiDkdQbbXKuZP3qIju3rcVKm7z9su2TTxy+a+Yzn3z/La8XAevVXrzu2j3jBnlXrVonVSmtbpdms40AwlyeTGeEtk2r00HYLhdsXc/OrR4XbVaU/Mbkb930nqme0rrowUefffIHTuC6a/fsPfbM C3d0WolfKhTp6clRyhcg04xtGCHt1Dh/rExRamYWGyxXa7xn1yYuvkAwP7fClg0Zhx+qr/rM7d+Yesc73nHD5OW7Zh478tRzPxACH/iRa245duzkAdsJfMuy8aXm/FUFlpeWWOm2WZidI9WapaUlFIaTlQ4jfR6/vO9D2NE32LTeYnZOUmnA6PAohx9+qnTy1NnrP/ Cj15cu23XZI4/826Px/xqB37z547sPH374oOvnKTsOb+1zuCoImZARM8ZiLlKkXcWOcoFRJ+Do/CwFO4e2DEe+9Ti+ZXA8ny/cU+X4bMKRZxZIVEiqXI6/+NKuUzPHb7z40ovnX3zx+Ctuq38HyuqWG7Tu+A0AAAAASUVORK5CYII= X-Mailer: Evolution 3.12.9-1+b1 Xref: news.gmane.org gmane.linux.lib.musl.general:8255 Archived-At: --=-9ytLh6UmV5Ig1MP2q2V/ Content-Type: multipart/mixed; boundary="=-Fj0hkJOliWRpcFMbXhC3" --=-Fj0hkJOliWRpcFMbXhC3 Content-Type: text/plain; charset="UTF-8" Content-Transfer-Encoding: quoted-printable Hello, here is the second version of my stdatomic implementation. The main difference to the previous one, is a handcrafted lock. This lock is there for a very particular situation, namely critical sections that are extremely short. It is not yet clear if the same strategy could or should apply to other parts of musl, maybe in replacement of the __lock/__unlock pair. The situation is so special here, since every cycle counts. - On the fast-path, the shorter it gets, the less conflicts there are with other lockers. - On the mild-conflict path, we spin only once on average, so here also, the less cycles the less interaction with other lockers. This lock is already implemented with stdatomic semantics. First, because it is nicer and we finally have it, here :) More seriously, the assembler produced is much better than with the inline assembler macros, simply because the compiler can integrate everything more smoothly and take advantage of particular properties of the instructions. E.g on x86 the cmpxchg instruction already places the result of the operation in a flag, there is no need to retest the condition. And since, every cycle counts, see above, using stdatomic alone seems to have benefits over __lock/__unlock. The gain of this new lock is that on my machine my bench (list element allocations-insertions or removal-deallocation) goes from about 700000 up to about 1000000 per second. I also tried to benchmark the individual parts of the new algorithm to get a hand on where the problem spots are, but exact measurement doesn't seem possible due to Heisenberg effects. As before, please find the "implementation" part of my notes below, I also attach the full .org file of it. Jens * The implementation ** Requirements *** Compilers You should be able to compile this implementation with any version of modern gcc and clang. (Versions are hard to tell, gcc should work for 4.1) The quality of the resulting binary will depend on the implementation of atomic support by the compiler. There are three different implementations, for modern clang and gcc, and one for those compilers that only support the =3D__sync_=3D built-ins. They are only tested with clang and gcc, but might work with other compilers that implement one of the sets of built-ins and is otherwise compatible to some gcc extensions: - compound expressions with =3D({ })=3D - =3D__attribute__=3D with =3D__alias__=3D and =3D__unused__=3D - =3D__builtin_choose_expr=3D for the =3D__sync=3D version as a precursor= of C11's =3D_Generic=3D There are some heuristics in place to decide at compile time which case applies, namely =3D__clang__=3D to detect clang, =3D__ATOMIC_...=3D macros to detect the C11 versions of the built-ins. *** OS or C library support The library may work with different lock constructs, currently we implement one simple generic approach that only uses spinning, and a mixed approach that uses Linux' =3Dfutex=3D as an inactive sleep strategy as a last resort. The latter has been tested with the =3Dmusl=3D C library. This locking strategy can be a performance bottleneck for applications with a strong congestion on one particular atomic data, e.g code that would insert list elements through a centralized list head. If this list head can not be realized with a lock-free atomic, the critical section of modifying it is protected by our lock. Such code has very particular properties. - Since the critical section usually is really short compared to a scheduling interval of the OS, the probability that the lock can be taken immediately is high. So the fast path for taking the lock must be *really fast*. Our implementation essentially has an =3Datomic_compare_exchange_strong_explicit=3D, here. One memory instruction on the fast path must be enough. - If locking fails a the first try, still the probability is very high that it will succeed soon after. This is because only scheduled threads compete, here, so there are never more threads in play than we have processors. Therefore as a second strategy we spin for a while until we get the lock. In our experiments on average one single round of spinning was enough. - A third exceptional case may occur, when the thread that is holding the lock is descheduled in the middle of the critical section. The probability for that event is quite rare (0.1 % in our experiments) but still this case occurs. If it does, the world changes drastically, a herd of threads all have to wait for a long time (until the locker is rescheduled) to have any chance to obtain the lock. Active wait here is counterproductive. In the contrary, by going into an inactive OS sleep, the possibility for the locker to regain an execution slot increases. We implement this strategy a bit differently than classical locks with wait-counters would do. We just have a single =3Dunsigned=3D value that at the same time holds the lock bit (HO bit) and a counter. That counter is not viewed as a counter of the threads that are in a kernel wait, but just counts the number of threads inside the critical section. This has the following advantages: - An update to the counter part is relatively rare. So we save memory bandwidth, and we also avoid too much interaction between the different threads that compete for the lock. - The fast path occurs when the value is =3D0=3D, initially. It sets the HO bit (the lock bit) and the LO bit (for a counter of value =3D1=3D) in one go. The resulting value is =3DUINT_MAX/2u+2u=3D. - If the fast path fails, the counter is atomically incremented by one, and we enter a spin lock to set the HO bit as well. - After having spun for sometime, we suppose that we are in the bad situation and go into a =3Dfutex_wait=3D. Going into the =3Dfutex_wait= =3D may fail if the value changes. Since additional threads only change the counter when they arrive, this can't happen too often and the thread goes to sleep, eventually. - Unlocking is a very simple operation. The locker has contributed =3DUINT_MAX/2u+2u=3D to the value, and so just has to decrement the value atomically by that amount. By doing so, the thread also notices if other threads still are in the critical section and wakens one of them. ** Caveats *** Symbol renaming There is one important difficulty when compiling this. The original =3D__atomic=3D library interface was developed with C++ in mind and not C. Therefore it freely uses function overloading for the built-ins versus the library interface. Since we also use the library functions as fallbacks in the implementation of some of the =3D_X=3D variants this naming scheme is not supportable with a C compiler. We get away with it by using internal names, prefixed with =3D__impl_=3D for all functions. Then we rename symbols to the intended ones using =3Dobjcopy=3D. - The current integration into musl does this with a *script* that you have to run *manually* after compilation. - You then have to launch =3Dmake=3D a *second time* to do the final link= . This technique is certainly not ideal and subject to improvement. *** Support of 16 byte atomic instructions The main difference for modern processors that is relevant here is if it supports 16 byte atomic instructions or not. There is no difficulty to detect this at compile time, but if the library is used with code that is compiled with a different compiler or just different compiler options, incompatible binary code may be produced. My plan is to freeze that feature at compile time of the library and reflect the capacity in the =3D=3D that is provided. This then may result in code that is a bit less optimized than it could, but that is compatible. - If the library is *not* compiled with direct 16 byte support the application may not use it, and thus use a memory implementation for such operations. - If the library *is* compiled with direct 16 byte support but the application compiler doesn't support it, the user code should fallback to library calls, but which in turn use the atomic instructions. So such a variant would have a call overhead and would not be able to inline the atomics in the user binary. All of this is not yet, done, though. Be careful when using this preliminary version. ** Leftovers There are some leftovers that will hopefully disappear. - There are several hash functions and a instrumentation infrastructure for the hashes. I didn't have enough test cases yet to see what would be best, here. - There is optional instrumentation for the lock functions. Switching it on changes overall performance substantially, and thus I'd expect a noticeable Heisenberg effect. So these counter can give qualitative information about what happens, you shouldn't take the figures verbally. --=20 :: INRIA Nancy Grand Est ::: Camus ::::::: ICube/ICPS ::: :: ::::::::::::::: office Strasbourg : +33 368854536 :: :: :::::::::::::::::::::: gsm France : +33 651400183 :: :: ::::::::::::::: gsm international : +49 15737185122 :: :: http://icube-icps.unistra.fr/index.php/Jens_Gustedt :: --=-Fj0hkJOliWRpcFMbXhC3 Content-Disposition: attachment; filename="stdatomic-patch-v2.txt" Content-Type: text/plain; name="stdatomic-patch-v2.txt"; charset="UTF-8" Content-Transfer-Encoding: base64 ZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9hdG9taWNfY2xhbmdfYzExLmggYi9zcmMvaW50ZXJu YWwvYXRvbWljX2NsYW5nX2MxMS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAu LmJiMzYyOWQKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJuYWwvYXRvbWljX2NsYW5nX2Mx MS5oCkBAIC0wLDAgKzEsODIgQEAKKyNpZm5kZWYgX1NUREFUT01JQ19DTEFOR19DMTFfSF8KKyNk ZWZpbmUgX1NUREFUT01JQ19DTEFOR19DMTFfSF8gMQorCisjaW5jbHVkZSA8YXRvbWljX3N0dWIu aD4KKworI2RlZmluZSBBVE9NSUNfVkFSX0lOSVQoLi4uKSBfX1ZBX0FSR1NfXworI2RlZmluZSBh dG9taWNfaW5pdCBfX2MxMV9hdG9taWNfaW5pdAorCisvKiBNYXAgb3BlcmF0aW9ucyB0byB0aGUg c3BlY2lhbCBidWlsdGlucyB0aGF0IGNsYW5nIHByb3ZpZGVzLiAqLworCisvKiBNYXAgYWxsIG5v bi1leHBsaWNpdCBtYWNyb3MgdG8gdGhlIGJ1aWx0aW4gd2l0aCBmb3JjZWQgbWVtb3J5IG9yZGVy LiAqLworI2RlZmluZSBhdG9taWNfZmV0Y2hfYWRkKFgsIFkpICAgICAgICAgICAgICAgICAgX19j MTFfYXRvbWljX2ZldGNoX2FkZCgoWCksIChZKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVm aW5lIGF0b21pY19mZXRjaF9zdWIoWCwgWSkgICAgICAgICAgICAgICAgICBfX2MxMV9hdG9taWNf ZmV0Y2hfc3ViKChYKSwgKFkpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgYXRvbWlj X2ZldGNoX2FuZChYLCBZKSAgICAgICAgICAgICAgICAgIF9fYzExX2F0b21pY19mZXRjaF9hbmQo KFgpLCAoWSksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNfZmV0Y2hfb3Io WCwgWSkgICAgICAgICAgICAgICAgICAgX19jMTFfYXRvbWljX2ZldGNoX29yKChYKSwgKFkpLCBt ZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgYXRvbWljX2ZldGNoX3hvcihYLCBZKSAgICAg ICAgICAgICAgICAgIF9fYzExX2F0b21pY19mZXRjaF94b3IoKFgpLCAoWSksIG1lbW9yeV9vcmRl cl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNfbG9hZChYKSAgICAgICAgICAgICAgICAgICAgICAg ICAgX19jMTFfYXRvbWljX2xvYWQoKFgpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUg YXRvbWljX3N0b3JlKFgsIFYpICAgICAgICAgICAgICAgICAgICAgIF9fYzExX2F0b21pY19zdG9y ZSgoWCksIChWKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19leGNoYW5n ZShYLCBWKSAgICAgICAgICAgICAgICAgICBfX2MxMV9hdG9taWNfZXhjaGFuZ2UoKFgpLCAoViks IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93 ZWFrKFgsIEUsIFYpICAgX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhaygoWCksIChF KSwgKFYpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVm aW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZyhYLCBFLCBWKSBfX2MxMV9hdG9taWNf Y29tcGFyZV9leGNoYW5nZV9zdHJvbmcoKFgpLCAoRSksIChWKSwgbWVtb3J5X29yZGVyX3NlcV9j c3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorCisvKiBNYXAgYWxsZXhwbGljaXQgbWFjcm9zIHRv IHRoZSBjb3JyZXNwb25kaW5nIGJ1aWx0aW4uICovCisjZGVmaW5lIGF0b21pY19mZXRjaF9hZGRf ZXhwbGljaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jMTFfYXRvbWljX2Zl dGNoX2FkZAorI2RlZmluZSBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIF9fYzExX2F0b21pY19mZXRjaF9zdWIKKyNkZWZpbmUgYXRvbWlj X2ZldGNoX2FuZF9leHBsaWNpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBfX2Mx MV9hdG9taWNfZmV0Y2hfYW5kCisjZGVmaW5lIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jMTFfYXRvbWljX2ZldGNoX29yCisjZGVm aW5lIGF0b21pY19mZXRjaF94b3JfZXhwbGljaXQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgX19jMTFfYXRvbWljX2ZldGNoX3hvcgorI2RlZmluZSBhdG9taWNfbG9hZF9leHBsaWNp dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIF9fYzExX2F0b21pY19sb2Fk CisjZGVmaW5lIGF0b21pY19zdG9yZV9leHBsaWNpdCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgX19jMTFfYXRvbWljX3N0b3JlCisjZGVmaW5lIGF0b21pY19leGNoYW5nZV9l eHBsaWNpdCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgX19jMTFfYXRvbWljX2V4 Y2hhbmdlCisjZGVmaW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCAg ICAgICAgICAgICAgICAgICAgX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nCisj ZGVmaW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQgICAgICAgICAgICAg ICAgICAgICAgX19jMTFfYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2VhaworCisjZGVmaW5lIElO U1RBTlRJQVRFX1NUVUJfTEYoTiwgVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCitUIF9faW1wbF9mZXRjaF9hZGRfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3Qg X1YsIGludCBfbW8pIHsgICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfYWRk KF9YLCBfViwgX21vKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCitUIF9faW1wbF9mZXRjaF9zdWJfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1Ys IGludCBfbW8pIHsgICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfc3ViKF9Y LCBfViwgX21vKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CitUIF9faW1wbF9mZXRjaF9hbmRfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGlu dCBfbW8pIHsgICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfYW5kKF9YLCBf ViwgX21vKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitU IF9faW1wbF9mZXRjaF94b3JfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGludCBf bW8pIHsgICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfeG9yKF9YLCBfViwg X21vKTsgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9f aW1wbF9mZXRjaF9vcl8gIyMgTihfQXRvbWljKFQpKiBfWCwgVCBjb25zdCBfViwgaW50IF9tbykg eyAgICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfb3IoX1gsIF9WLCBfbW8p OyAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1w bF9hZGRfZmV0Y2hfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGludCBfbW8pIHsg ICAgICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfYWRkKF9YLCBfViwgX21vKSAr IF9WOyAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9z dWJfZmV0Y2hfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgICAg ICAgICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfc3ViKF9YLCBfViwgX21vKSAtIF9W OyAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9hbmRf ZmV0Y2hfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgICAgICAg ICBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfYW5kKF9YLCBfViwgX21vKSAmIF9WOyAg ICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF94b3JfZmV0 Y2hfICMjIE4oX0F0b21pYyhUKSogX1gsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgICAgICAgICBc CisgIHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfeG9yKF9YLCBfViwgX21vKSBeIF9WOyAgICAg ICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9vcl9mZXRjaF8g IyMgTihfQXRvbWljKFQpKiBfWCwgVCBjb25zdCBfViwgaW50IF9tbykgeyAgICAgICAgICBcCisg IHJldHVybiBfX2MxMV9hdG9taWNfZmV0Y2hfb3IoX1gsIF9WLCBfbW8pIHwgX1Y7ICAgICAgICAg ICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9sb2FkXyAjIyBOKF9B dG9taWMoVCkqIF9YLCBpbnQgX21vKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJl dHVybiBfX2MxMV9hdG9taWNfbG9hZChfWCwgX21vKTsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit2b2lkIF9faW1wbF9zdG9yZV8gIyMgTihf QXRvbWljKFQpKiBfWCwgVCBjb25zdCBfViwgaW50IF9tbykgeyAgICAgICAgICBcCisgIF9fYzEx X2F0b21pY19zdG9yZShfWCwgX1YsIF9tbyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9leGNoYW5nZV8gIyMgTihfQXRv bWljKFQpKiBfWCwgVCBjb25zdCBfViwgaW50IF9tbykgeyAgICAgICAgICBcCisgIHJldHVybiBf X2MxMV9hdG9taWNfZXhjaGFuZ2UoX1gsIF9WLCBfbW8pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCitfQm9vbCBfX2ltcGxfY29tcGFyZV9leGNoYW5nZV8g IyMgTihfQXRvbWljKFQpKiBfWCwgVCogX0UsIFQgY29uc3QgX1YsIGludCBfbW9zLCBpbnQgX21v ZikgeyBcCisgIHJldHVybiBfX2MxMV9hdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoX1gs IF9FLCBfViwgX21vcywgX21vZik7ICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgSU5TVEFOVElBVEVf U1RVQl9OQU5EKE4sIFQpCisKKyNkZWZpbmUgSU5TVEFOVElBVEVfU1RVQihOLCBUKSBJTlNUQU5U SUFURV9TVFVCXyAjIyBOKFQpCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVybmFsL2F0 b21pY19jb25zdGFudHMuaCBiL3NyYy9pbnRlcm5hbC9hdG9taWNfY29uc3RhbnRzLmgKbmV3IGZp bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMzI3MjQxYgotLS0gL2Rldi9udWxsCisrKyBi L3NyYy9pbnRlcm5hbC9hdG9taWNfY29uc3RhbnRzLmgKQEAgLTAsMCArMSwxNjIgQEAKKyNpZm5k ZWYgX1NUREFUT01JQ19BVE9NSUNfQ09OU1RBTlRTX0hfCisjZGVmaW5lIF9TVERBVE9NSUNfQVRP TUlDX0NPTlNUQU5UU19IXyAxCisKKyNpbmNsdWRlIDxzdGRpbnQuaD4KKworI2lmICFkZWZpbmVk KF9fR0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzEpIHx8IF9fR05VQ19fIDwgNAorIyBl cnJvciAidGhpcyBpbXBsZW1lbnRhdGlvbiBvZiBzdGRhdG9taWMgbmVlZCBzdXBwb3J0IHRoYXQg aXMgY29tcGF0aWJsZSB3aXRoIHRoZSBnY2MgQUJJIgorI2VuZGlmCisKKy8qIGdjYyA0LjcgYW5k IDQuOCBpbXBsZW1lbnQgYXRvbWljIG9wZXJhdGlvbnMgYnV0IG5vdCBhdG9taWMKKyAgIHR5cGVz LiBUaGlzIHRlc3QgaXMgbWVhbnQgdG8gc3RheSBzaW1wbGUsIHdlIGRvbid0IGtub3cgb2YgYW55 CisgICBvdGhlciBjb21waWxlciB0aGF0IGZha2VzIHRvIGJlIGdjYyA0Lls3OF0gb3IgNC5bNzhd LnggKi8KKyNpZiAhZGVmaW5lZChfX0FUT01JQ19SRUxBWEVEKSAmJiBfX0dOVUNfXyA9PSA0ICYm IF9fR05VQ19NSU5PUl9fIDwgNworI3VuZGVmIF9fQVRPTUlDX0ZPUkNFX1NZTkMKKyNkZWZpbmUg X19BVE9NSUNfRk9SQ0VfU1lOQyAxCisjZW5kaWYKKworI2lmZGVmIF9fU0laRU9GX0lOVDEyOF9f CisjIGRlZmluZSBfX1VJTlQxMjhfXyAxCit0eXBlZGVmIF9fdWludDEyOF90IF9faW1wbF91aW50 MTI4X3Q7CisjZWxzZQorIyBkZWZpbmUgX19VSU5UMTI4X18gMAordHlwZWRlZiBzdHJ1Y3QgeyB1 aW50NjRfdCBhWzJdOyB9IF9faW1wbF91aW50MTI4X3Q7CisjZW5kaWYKKworI2RlZmluZSBfX2F0 b21pY19hbGlnbihUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyhz aXplb2YoVCkgPT0gMSA/ICBfX2FsaWdub2ZfXyh1aW50OF90KSAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgOiAoc2l6ZW9mKFQpID09IDIgPyAgX19hbGlnbm9mX18odWludDE2X3QpICAgICAg ICAgICAgICAgICAgICAgXAorICAgIDogKHNpemVvZihUKSA9PSA0ID8gIF9fYWxpZ25vZl9fKHVp bnQzMl90KSAgICAgICAgICAgICAgICAgIFwKKyAgICAgICA6ICgoc2l6ZW9mKFQpID09IDgpID8g IF9fYWxpZ25vZl9fKHVpbnQ2NF90KSAgICAgICAgICAgICBcCisgICAgICAgICAgOiAoKHNpemVv ZihUKSA9PSAxNikgPyAgX19hbGlnbm9mX18oX19pbXBsX3VpbnQxMjhfdCkgXAorICAgICAgICAg ICAgIDogX19hbGlnbm9mX18oVCkpKSkpKQorCisjaWYgX19BVE9NSUNfRk9SQ0VfU1lOQworLyog VGhlcmUgaXMgbm8gY29tcGlsZXIgc3VwcG9ydCBmb3IgX0F0b21pYyB0eXBlIHF1YWxpZmljYXRp b24sIHNvIHdlCisgICB1c2UgdGhlIHR5cGUgc3BlY2lmaWVyIHZhcmlhbnQuIFRoZSBpZGVhIGlz IHRvIHVzZSBhIG9uZSBlbGVtZW50CisgICBhcnJheSB0byBlbnN1cmUgdGhhdCBzdWNoIGFuIF9B dG9taWMoc29tZXRoaW5nKSBjYW4gbmV2ZXIgYmUgdXNlZAorICAgaW4gb3BlcmF0b3JzLgorCisg ICBVbmRlcm5lYXRoIHdlIHdpbGwgdXNlIHVpbnRYWF90IGZvciBzcGVjaWFsIGNhc2VzLiBUbyBi ZSBzdXJlIHRoYXQKKyAgIG5vIGJhZCB0aGluZ3MgY2FuIGhhcHBlbiwgdGhlbiwgd2UgZW5zdXJl IHRoYXQgdGhlIGFsaWdubWVudCBmb3IKKyAgIHRoZXNlIHNwZWNpYWwgY2FzZXMgaXMgYXMgd2lk ZSBhcyBwb3NzaWJsZSwgbmFtZWx5IHNpemVvZiB0aGUKKyAgIHR5cGUuICovCisjZGVmaW5lIF9B dG9taWMoVCkgX190eXBlb2ZfXyhUIHZvbGF0aWxlWzFdKQorI2RlZmluZSBfQXRvbWljX2FsaWdu ZWQoVCkgX19hdHRyaWJ1dGVfXyAoKF9fYWxpZ25lZF9fKF9fYXRvbWljX2FsaWduKFQpKSkpIF9f dHlwZW9mX18oVFsxXSkKKyNlbmRpZgorCisjaWZuZGVmIF9fQVRPTUlDX1JFTEFYRUQKKyNkZWZp bmUgX19BVE9NSUNfUkVMQVhFRCAwCisjZW5kaWYKKyNpZm5kZWYgX19BVE9NSUNfQ09OU1VNRQor I2RlZmluZSBfX0FUT01JQ19DT05TVU1FIDEKKyNlbmRpZgorI2lmbmRlZiBfX0FUT01JQ19BQ1FV SVJFCisjZGVmaW5lIF9fQVRPTUlDX0FDUVVJUkUgMgorI2VuZGlmCisjaWZuZGVmIF9fQVRPTUlD X1JFTEVBU0UKKyNkZWZpbmUgX19BVE9NSUNfUkVMRUFTRSAzCisjZW5kaWYKKyNpZm5kZWYgX19B VE9NSUNfQUNRX1JFTAorI2RlZmluZSBfX0FUT01JQ19BQ1FfUkVMIDQKKyNlbmRpZgorI2lmbmRl ZiBfX0FUT01JQ19TRVFfQ1NUCisjZGVmaW5lIF9fQVRPTUlDX1NFUV9DU1QgNQorI2VuZGlmCisK K2VudW0gbWVtb3J5X29yZGVyIHsKKwltZW1vcnlfb3JkZXJfcmVsYXhlZCA9IF9fQVRPTUlDX1JF TEFYRUQsCisJbWVtb3J5X29yZGVyX2NvbnN1bWUgPSBfX0FUT01JQ19DT05TVU1FLAorCW1lbW9y eV9vcmRlcl9hY3F1aXJlID0gX19BVE9NSUNfQUNRVUlSRSwKKwltZW1vcnlfb3JkZXJfcmVsZWFz ZSA9IF9fQVRPTUlDX1JFTEVBU0UsCisJbWVtb3J5X29yZGVyX2FjcV9yZWwgPSBfX0FUT01JQ19B Q1FfUkVMLAorCW1lbW9yeV9vcmRlcl9zZXFfY3N0ID0gX19BVE9NSUNfU0VRX0NTVCwKK307Cit0 eXBlZGVmIGVudW0gbWVtb3J5X29yZGVyIG1lbW9yeV9vcmRlcjsKKworI2lmbmRlZiBfX0dDQ19B VE9NSUNfQk9PTF9MT0NLX0ZSRUUKKyNkZWZpbmUgX19HQ0NfQVRPTUlDX0JPT0xfTE9DS19GUkVF IDIKKyNkZWZpbmUgX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFIDIKKyNkZWZpbmUgX19HQ0Nf QVRPTUlDX1NIT1JUX1RfTE9DS19GUkVFIDIKKyMgaWYgZGVmaW5lZChfX0dDQ19IQVZFX1NZTkNf Q09NUEFSRV9BTkRfU1dBUF8xNikKKyMgZGVmaW5lIF9fR0NDX0FUT01JQ19JTlRfVF9MT0NLX0ZS RUUgMgorIyBkZWZpbmUgX19HQ0NfQVRPTUlDX0xPTkdfVF9MT0NLX0ZSRUUgMgorIyBkZWZpbmUg X19HQ0NfQVRPTUlDX0xMT05HX1RfTE9DS19GUkVFIDIKKyMgZGVmaW5lIF9fR0NDX0FUT01JQ19Q T0lOVEVSX1RfTE9DS19GUkVFIDIKKyMgZGVmaW5lIF9fR0NDX0FUT01JQ19DSEFSMTZfVF9MT0NL X0ZSRUUgMgorIyBkZWZpbmUgX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJFRSAyCisjIGRl ZmluZSBfX0dDQ19BVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgMgorIyBlbHNpZiBkZWZpbmVkKF9f R0NDX0hBVkVfU1lOQ19DT01QQVJFX0FORF9TV0FQXzgpCisjIGRlZmluZSBfX0dDQ19BVE9NSUNf SU5UX1RfTE9DS19GUkVFICgoVUlOVF9NQVggPD0gMHhGRkZGRkZGRkZGRkZGRkZGVSkgPyAyIDog MCkKKyMgZGVmaW5lIF9fR0NDX0FUT01JQ19MT05HX1RfTE9DS19GUkVFICgoVUxPTkdfTUFYIDw9 IDB4RkZGRkZGRkZGRkZGRkZGRlUpID8gMiA6IDApCisjIGRlZmluZSBfX0dDQ19BVE9NSUNfTExP TkdfVF9MT0NLX0ZSRUUgKChVTExPTkdfTUFYIDw9IDB4RkZGRkZGRkZGRkZGRkZGRlUpID8gMiA6 IDApCisjIGRlZmluZSBfX0dDQ19BVE9NSUNfUE9JTlRFUl9UX0xPQ0tfRlJFRSAoKFVJTlRQVFJf TUFYIDw9IDB4RkZGRkZGRkZGRkZGRkZGRlUpID8gMiA6IDApCisjIGRlZmluZSBfX0dDQ19BVE9N SUNfQ0hBUjE2X1RfTE9DS19GUkVFICgoVUlOVF9MRUFTVDE2X01BWCA8PSAweEZGRkZGRkZGRkZG RkZGRkZVKSA/IDIgOiAwKQorIyBkZWZpbmUgX19HQ0NfQVRPTUlDX0NIQVIzMl9UX0xPQ0tfRlJF RSAoKFVJTlRfTEVBU1QzMl9NQVggPD0gMHhGRkZGRkZGRkZGRkZGRkZGVSkgPyAyIDogMCkKKyMg ZGVmaW5lIF9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRSAoKFdDSEFSX01BWCA8PSAweEZG RkZGRkZGRkZGRkZGRkZVKSA/IDIgOiAwKQorIyBlbHNpZiBkZWZpbmVkKF9fR0NDX0hBVkVfU1lO Q19DT01QQVJFX0FORF9TV0FQXzQpCisjIGRlZmluZSBfX0dDQ19BVE9NSUNfSU5UX1RfTE9DS19G UkVFICgoVUlOVF9NQVggPD0gMHhGRkZGRkZGRlUpID8gMiA6IDApCisjIGRlZmluZSBfX0dDQ19B VE9NSUNfTE9OR19UX0xPQ0tfRlJFRSAoKFVMT05HX01BWCA8PSAweEZGRkZGRkZGVSkgPyAyIDog MCkKKyMgZGVmaW5lIF9fR0NDX0FUT01JQ19MTE9OR19UX0xPQ0tfRlJFRSAoKFVMTE9OR19NQVgg PD0gMHhGRkZGRkZGRlUpID8gMiA6IDApCisjIGRlZmluZSBfX0dDQ19BVE9NSUNfUE9JTlRFUl9U X0xPQ0tfRlJFRSAoKFVJTlRQVFJfTUFYIDw9IDB4RkZGRkZGRkZVKSA/IDIgOiAwKQorIyBkZWZp bmUgX19HQ0NfQVRPTUlDX0NIQVIxNl9UX0xPQ0tfRlJFRSAoKFVJTlRfTEVBU1QxNl9NQVggPD0g MHhGRkZGRkZGRlUpID8gMiA6IDApCisjIGRlZmluZSBfX0dDQ19BVE9NSUNfQ0hBUjMyX1RfTE9D S19GUkVFICgoVUlOVF9MRUFTVDMyX01BWCA8PSAweEZGRkZGRkZGVSkgPyAyIDogMCkKKyMgZGVm aW5lIF9fR0NDX0FUT01JQ19XQ0hBUl9UX0xPQ0tfRlJFRSAoKFdDSEFSX01BWCA8PSAweEZGRkZG RkZGVSkgPyAyIDogMCkKKyMgZW5kaWYKKyNlbmRpZgorCisKKyNkZWZpbmUgQVRPTUlDX0JPT0xf TE9DS19GUkVFICAgICAgIF9fR0NDX0FUT01JQ19CT09MX0xPQ0tfRlJFRQorI2RlZmluZSBBVE9N SUNfQ0hBUl9MT0NLX0ZSRUUgICAgICAgX19HQ0NfQVRPTUlDX0NIQVJfTE9DS19GUkVFCisjZGVm aW5lIEFUT01JQ19TSE9SVF9UX0xPQ0tfRlJFRSAgICBfX0dDQ19BVE9NSUNfU0hPUlRfVF9MT0NL X0ZSRUUKKyNkZWZpbmUgQVRPTUlDX0lOVF9UX0xPQ0tfRlJFRSAgICAgIF9fR0NDX0FUT01JQ19J TlRfVF9MT0NLX0ZSRUUKKyNkZWZpbmUgQVRPTUlDX0xPTkdfVF9MT0NLX0ZSRUUgICAgIF9fR0ND X0FUT01JQ19MT05HX1RfTE9DS19GUkVFCisjZGVmaW5lIEFUT01JQ19MTE9OR19UX0xPQ0tfRlJF RSAgICBfX0dDQ19BVE9NSUNfTExPTkdfVF9MT0NLX0ZSRUUKKworI2RlZmluZSBBVE9NSUNfUE9J TlRFUl9UX0xPQ0tfRlJFRSAgX19HQ0NfQVRPTUlDX1BPSU5URVJfVF9MT0NLX0ZSRUUKKworI2Rl ZmluZSBBVE9NSUNfQ0hBUjE2X1RfTE9DS19GUkVFICAgX19HQ0NfQVRPTUlDX0NIQVIxNl9UX0xP Q0tfRlJFRQorI2RlZmluZSBBVE9NSUNfQ0hBUjMyX1RfTE9DS19GUkVFICAgX19HQ0NfQVRPTUlD X0NIQVIzMl9UX0xPQ0tfRlJFRQorI2RlZmluZSBBVE9NSUNfV0NIQVJfVF9MT0NLX0ZSRUUgICAg X19HQ0NfQVRPTUlDX1dDSEFSX1RfTE9DS19GUkVFCisKKyNpZmRlZiBfX0dDQ19IQVZFX1NZTkNf Q09NUEFSRV9BTkRfU1dBUF8xCisjIGRlZmluZSBBVE9NSUNfVUlOVDhfTE9DS19GUkVFIDIKKyNl bHNlCisjIGRlZmluZSBBVE9NSUNfVUlOVDhfTE9DS19GUkVFIDAKKyNlbmRpZgorCisjaWZkZWYg X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMgorIyBkZWZpbmUgQVRPTUlDX1VJTlQx Nl9MT0NLX0ZSRUUgMgorI2Vsc2UKKyMgZGVmaW5lIEFUT01JQ19VSU5UMTZfTE9DS19GUkVFIDAK KyNlbmRpZgorCisjaWZkZWYgX19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfNAorIyBk ZWZpbmUgQVRPTUlDX1VJTlQzMl9MT0NLX0ZSRUUgMgorI2Vsc2UKKyMgZGVmaW5lIEFUT01JQ19V SU5UMzJfTE9DS19GUkVFIDAKKyNlbmRpZgorCisjaWZkZWYgX19HQ0NfSEFWRV9TWU5DX0NPTVBB UkVfQU5EX1NXQVBfOAorIyBkZWZpbmUgQVRPTUlDX1VJTlQ2NF9MT0NLX0ZSRUUgMgorI2Vsc2UK KyMgZGVmaW5lIEFUT01JQ19VSU5UNjRfTE9DS19GUkVFIDAKKyNlbmRpZgorCisjaWZkZWYgX19H Q0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMTYKKyMgZGVmaW5lIEFUT01JQ19VSU5UMTI4 X0xPQ0tfRlJFRSAyCisjZWxzZQorIyBkZWZpbmUgQVRPTUlDX1VJTlQxMjhfTE9DS19GUkVFIDAK KyNlbmRpZgorCisKKyNkZWZpbmUgYXRvbWljX2lzX2xvY2tfZnJlZShPKSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisoc2l6ZW9mKihPKSA9PSAxID8gQVRPTUlDX1VJTlQ4X0xP Q0tfRlJFRSAgICAgICAgICAgICAgICAgICAgICAgXAorIDogKHNpemVvZiooTykgPT0gMiA/IEFU T01JQ19VSU5UMTZfTE9DS19GUkVFICAgICAgICAgICAgICAgICAgIFwKKyAgICA6IChzaXplb2Yq KE8pID09IDQgPyBBVE9NSUNfVUlOVDMyX0xPQ0tfRlJFRSAgICAgICAgICAgICAgICBcCisgICAg ICAgOiAoKHNpemVvZiooTykgPT0gOCkgPyBBVE9NSUNfVUlOVDY0X0xPQ0tfRlJFRSAgICAgICAg ICAgXAorICAgICAgICAgIDogKChzaXplb2YqKE8pID09IDE2KSA/IEFUT01JQ19VSU5UMTI4X0xP Q0tfRlJFRSAgICAgIFwKKyAgICAgICAgICAgICA6IDApKSkpKQorCisKKyNlbmRpZgpkaWZmIC0t Z2l0IGEvc3JjL2ludGVybmFsL2F0b21pY19mZW5jZS5oIGIvc3JjL2ludGVybmFsL2F0b21pY19m ZW5jZS5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjE2MjUwN2EKLS0tIC9k ZXYvbnVsbAorKysgYi9zcmMvaW50ZXJuYWwvYXRvbWljX2ZlbmNlLmgKQEAgLTAsMCArMSwyOSBA QAorI2lmbmRlZiBfU1REQVRPTUlDX0FUT01JQ19GRU5DRV9IXworI2RlZmluZSBfU1REQVRPTUlD X0FUT01JQ19GRU5DRV9IXyAxCisKKyNpbmNsdWRlIDxhdG9taWNfY29uc3RhbnRzLmg+CisKKwor dm9pZCBhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlciBtbyk7CisKK3ZvaWQgYXRvbWlj X3NpZ25hbF9mZW5jZShtZW1vcnlfb3JkZXIgbW8pOworCisjZGVmaW5lIGtpbGxfZGVwZW5kZW5j eShYKSAgICAgICAgICAgICAgICAgICAgICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIHJlZ2lzdGVyIF9fdHlwZW9mX18oWCkga2lsbF9kZXBl bmRlbmN5ID0gKFgpOyBcCisgIGtpbGxfZGVwZW5kZW5jeTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgfSkKKworI2lmbmRlZiBfX0FUT01JQ19GT1JDRV9TWU5DCisjIGRlZmluZSBh dG9taWNfdGhyZWFkX2ZlbmNlKE1PKSBfX2F0b21pY190aHJlYWRfZmVuY2UoTU8pCisjIGRlZmlu ZSBhdG9taWNfc2lnbmFsX2ZlbmNlKE1PKSBfX2F0b21pY19zaWduYWxfZmVuY2UoTU8pCisjZWxz ZQorIyBkZWZpbmUgYXRvbWljX3RocmVhZF9mZW5jZShNTykgICAgICAgICAgICAgICAgICAgICAg ICBcCisoeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyAgaWYgKE1PICE9IG1lbW9yeV9vcmRlcl9yZWxheGVkKSBfX3N5bmNfc3luY2hyb25p emUoKTsgXAorICBlbHNlIF9fYXNtX18gdm9sYXRpbGUoIiMgcmVsYXhlZCBmZW5jZSIpOyAgICAg ICAgICAgICBcCisgfSkKKyNkZWZpbmUgYXRvbWljX3NpZ25hbF9mZW5jZShNTykgX19hc21fXyB2 b2xhdGlsZSgiIyBzaWduYWwgZmVuY2UiKQorI2VuZGlmCisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEv c3JjL2ludGVybmFsL2F0b21pY19mbGFnLmggYi9zcmMvaW50ZXJuYWwvYXRvbWljX2ZsYWcuaApu ZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4wZDMzNDRiCi0tLSAvZGV2L251bGwK KysrIGIvc3JjL2ludGVybmFsL2F0b21pY19mbGFnLmgKQEAgLTAsMCArMSw0NyBAQAorI2lmbmRl ZiBfU1REQVRPTUlDX0FUT01JQ19GTEFHX0hfCisjZGVmaW5lIF9TVERBVE9NSUNfQVRPTUlDX0ZM QUdfSF8gMQorCisjaW5jbHVkZSA8YXRvbWljX2NvbnN0YW50cy5oPgorCisjaWZuZGVmIF9fR0ND X0FUT01JQ19URVNUX0FORF9TRVRfVFJVRVZBTAorIyBkZWZpbmUgX19HQ0NfQVRPTUlDX1RFU1Rf QU5EX1NFVF9UUlVFVkFMIDEKKyNlbmRpZgorCit0eXBlZGVmIHN0cnVjdCBhdG9taWNfZmxhZyBh dG9taWNfZmxhZzsKK3N0cnVjdCBhdG9taWNfZmxhZyB7CisJX0Jvb2wgZjsKK307CisKK19Cb29s IGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldCh2b2xhdGlsZSBhdG9taWNfZmxhZyopOworX0Jvb2wg YXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KHZvbGF0aWxlIGF0b21pY19mbGFnKiwg bWVtb3J5X29yZGVyKTsKK3ZvaWQgYXRvbWljX2ZsYWdfY2xlYXIodm9sYXRpbGUgYXRvbWljX2Zs YWcqKTsKK3ZvaWQgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQodm9sYXRpbGUgYXRvbWljX2Zs YWcqLCBtZW1vcnlfb3JkZXIpOworCisjZGVmaW5lIEFUT01JQ19GTEFHX0lOSVQgeyAuZiA9IDAs IH0KKworI2RlZmluZSBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQoQSkgYXRvbWljX2ZsYWdfdGVz dF9hbmRfc2V0X2V4cGxpY2l0KChBKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0 b21pY19mbGFnX2NsZWFyKEEpIGF0b21pY19mbGFnX2NsZWFyX2V4cGxpY2l0KChBKSwgbWVtb3J5 X29yZGVyX3NlcV9jc3QpCisKKyNpZm5kZWYgX19BVE9NSUNfRk9SQ0VfU1lOQworIyBkZWZpbmUg YXRvbWljX2ZsYWdfdGVzdF9hbmRfc2V0X2V4cGxpY2l0KEEsIE1PKSAgKF9fYXRvbWljX3Rlc3Rf YW5kX3NldCgmKChBKS0+ZiksIE1PKSA9PSBfX0dDQ19BVE9NSUNfVEVTVF9BTkRfU0VUX1RSVUVW QUwpCisjIGRlZmluZSBhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChBLCBNTykgICAgICAgICAg X19hdG9taWNfY2xlYXIoJihBKS0+ZiwgTU8pCisjZWxzZQorIyBkZWZpbmUgYXRvbWljX2ZsYWdf dGVzdF9hbmRfc2V0X2V4cGxpY2l0KEEsIE8pICAgICAgICAgICAgICAgICAgICAgICAgXAorKHsg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICByZWdpc3RlciBfQm9vbCBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRf ZXhwbGljaXQgICAgICAgICAgICAgICAgICAgICAgXAorICAgID0gKF9fc3luY19sb2NrX3Rlc3Rf YW5kX3NldCgmKEEpLT5mLCBfX0dDQ19BVE9NSUNfVEVTVF9BTkRfU0VUX1RSVUVWQUwpID09IF9f R0NDX0FUT01JQ19URVNUX0FORF9TRVRfVFJVRVZBTCk7IFwKKyAgLyogZ2NjIGd1YXJhbnRlZXMg dGhhdCB0aGlzIHdhcyBhbiBhY3F1aXJlIG9wZXJhdGlvbi4gKi8gICAgICAgICAgICAgIFwKKyAg Lyogc3luY2hyb25pemUgZXZlbiBzdHJvbmdlciBpZiB3ZSBuZWVkIHRvICovICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgaWYgKChPKSA9PSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkgX19zeW5j X3N5bmNocm9uaXplKCk7ICAgICAgICAgICAgICAgIFwKKyAgYXRvbWljX2ZsYWdfdGVzdF9hbmRf c2V0X2V4cGxpY2l0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9KQor IyBkZWZpbmUgYXRvbWljX2ZsYWdfY2xlYXJfZXhwbGljaXQoQSwgTykgICAgICAgICAgICAgICAg ICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgIC8qIGdjYyBndWFyYW50ZWVzIHRoYXQgdGhpcyB3aWxsIGJl IGEgcmVsZWFzZSBvcGVyYXRpb24uICovICAgXAorICAvKiBzeW5jaHJvbml6ZSBldmVuIHN0cm9u Z2VyIGlmIHdlIG5lZWQgdG8gKi8gICAgICAgICAgICAgICAgIFwKKyAgaWYgKChPKSA9PSBtZW1v cnlfb3JkZXJfc2VxX2NzdCkgX19zeW5jX3N5bmNocm9uaXplKCk7ICAgICAgICBcCisgIF9fc3lu Y19sb2NrX3JlbGVhc2UoJihBKS0+Zik7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICAgIH0pCisjZW5kaWYKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJuYWwvYXRv bWljX2djY19hdG9taWMuaCBiL3NyYy9pbnRlcm5hbC9hdG9taWNfZ2NjX2F0b21pYy5oCm5ldyBm aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmUwMzBiODUKLS0tIC9kZXYvbnVsbAorKysg Yi9zcmMvaW50ZXJuYWwvYXRvbWljX2djY19hdG9taWMuaApAQCAtMCwwICsxLDEwNyBAQAorI2lm bmRlZiBfU1REQVRPTUlDX0dDQ19BVE9NSUNfSF8KKyNkZWZpbmUgX1NUREFUT01JQ19HQ0NfQVRP TUlDX0hfIDEKKworI2luY2x1ZGUgPGF0b21pY19zdHViLmg+CisKKyNkZWZpbmUgQVRPTUlDX1ZB Ul9JTklUKC4uLikgX19WQV9BUkdTX18KKyNkZWZpbmUgYXRvbWljX2luaXQoWCwgVikgKCh2b2lk KSgoKihYKSk9KFYpKSkKKworLyogTWFwIGFsbCBub24tZXhwbGljaXQgbWFjcm9zIHRvIHRoZSBl eHBsaWNpdCB2ZXJzaW9uLiAqLworI2RlZmluZSBhdG9taWNfZmV0Y2hfYWRkKFgsIFkpICAgICAg ICAgICAgICAgICAgYXRvbWljX2ZldGNoX2FkZF9leHBsaWNpdCgoWCksIChZKSwgbWVtb3J5X29y ZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19mZXRjaF9zdWIoWCwgWSkgICAgICAgICAgICAg ICAgICBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KChYKSwgKFkpLCBtZW1vcnlfb3JkZXJfc2Vx X2NzdCkKKyNkZWZpbmUgYXRvbWljX2ZldGNoX2FuZChYLCBZKSAgICAgICAgICAgICAgICAgIGF0 b21pY19mZXRjaF9hbmRfZXhwbGljaXQoKFgpLCAoWSksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQor I2RlZmluZSBhdG9taWNfZmV0Y2hfb3IoWCwgWSkgICAgICAgICAgICAgICAgICAgYXRvbWljX2Zl dGNoX29yX2V4cGxpY2l0KChYKSwgKFkpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUg YXRvbWljX2ZldGNoX3hvcihYLCBZKSAgICAgICAgICAgICAgICAgIGF0b21pY19mZXRjaF94b3Jf ZXhwbGljaXQoKFgpLCAoWSksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNf bG9hZChYKSAgICAgICAgICAgICAgICAgICAgICAgICAgYXRvbWljX2xvYWRfZXhwbGljaXQoKFgp LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgYXRvbWljX3N0b3JlKFgsIFYpICAgICAg ICAgICAgICAgICAgICAgIGF0b21pY19zdG9yZV9leHBsaWNpdCgoWCksIChWKSwgbWVtb3J5X29y ZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19leGNoYW5nZShYLCBWKSAgICAgICAgICAgICAg ICAgICBhdG9taWNfZXhjaGFuZ2VfZXhwbGljaXQoKFgpLCAoViksIG1lbW9yeV9vcmRlcl9zZXFf Y3N0KQorI2RlZmluZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV93ZWFrKFgsIEUsIFYpICAgYXRv bWljX2NvbXBhcmVfZXhjaGFuZ2Vfd2Vha19leHBsaWNpdCgoWCksIChFKSwgKFYpLCBtZW1vcnlf b3JkZXJfc2VxX2NzdCwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19jb21w YXJlX2V4Y2hhbmdlX3N0cm9uZyhYLCBFLCBWKSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJv bmdfZXhwbGljaXQoKFgpLCAoRSksIChWKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9v cmRlcl9zZXFfY3N0KQorCisvKiBNYXAgYWxsZXhwbGljaXQgbWFjcm9zIHRvIHRoZSBjb3JyZXNw b25kaW5nIGJ1aWx0aW4uICAgICAgICAgICovCisvKiBUaGUgYXJpdGhtZXRpYyBvcGVyYXRpb25z IGRvbid0IGhhdmUgdG8gdXNlIGEgbWVtb3J5IG9wZXJhbmQuICovCisjZGVmaW5lIGF0b21pY19m ZXRjaF9hZGRfZXhwbGljaXQoWCwgWSwgTU8pIF9fYXRvbWljX2ZldGNoX2FkZCgoWCksIChZKSwg KE1PKSkKKyNkZWZpbmUgYXRvbWljX2ZldGNoX3N1Yl9leHBsaWNpdChYLCBZLCBNTykgX19hdG9t aWNfZmV0Y2hfc3ViKChYKSwgKFkpLCAoTU8pKQorI2RlZmluZSBhdG9taWNfZmV0Y2hfYW5kX2V4 cGxpY2l0KFgsIFksIE1PKSBfX2F0b21pY19mZXRjaF9hbmQoKFgpLCAoWSksIChNTykpCisjZGVm aW5lIGF0b21pY19mZXRjaF9vcl9leHBsaWNpdChYLCBZLCBNTykgIF9fYXRvbWljX2ZldGNoX29y KChYKSwgKFkpLCAoTU8pKQorI2RlZmluZSBhdG9taWNfZmV0Y2hfeG9yX2V4cGxpY2l0KFgsIFks IE1PKSBfX2F0b21pY19mZXRjaF94b3IoKFgpLCAoWSksIChNTykpCisKKy8qIFRoZSBpbnRlcmZh Y2VzIGZvciB0aGUgdW5pdmVyc2FsIGZ1bmN0aW9ucyBuZWVkIHRvIG9wZXJhdGUgb24KKyAgIG1l bW9yeSBvcGVyYW5kcywgb25seS4gKi8KKworI2RlZmluZSBhdG9taWNfbG9hZF9leHBsaWNpdChY LCBNTykgICAgICAgICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICBfX2F0eXAoKlgpIF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICBfX2F0b21pY19sb2FkKChYKSwgX3IsIChNTykpOyAgICAgICAgICAgICAgICAg XAorICBfX2FyZXQoX3JbMF0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0p CisKKyNkZWZpbmUgYXRvbWljX3N0b3JlX2V4cGxpY2l0KFgsIFYsIE1PKSAgICAgICAgIFwKKyAg X19hdG9taWNfc3RvcmUoKFgpLCAmX19hdG1wKCpYLCBWKSwgKE1PKSkKKworI2RlZmluZSBhdG9t aWNfZXhjaGFuZ2VfZXhwbGljaXQoWCwgViwgTU8pICAgICAgICAgICAgICBcCisoeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19hdHlw KCpYKSBfcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2F0 b21pY19leGNoYW5nZSgoWCksICZfX2F0bXAoKlgsIFYpLCBfciwgKE1PKSk7ICAgICBcCisgIF9f YXJldChfclswXSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9 KQorCisjZGVmaW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWtfZXhwbGljaXQoWCwgRSwg ViwgTU9TLCBNT0YpICAgICAgICBcCisgIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2UoKFgpLCAo RSksICZfX2F0bXAoKihYKSwgKFYpKSwgMSwgKE1PUyksIChNT0YpKQorCisjZGVmaW5lIGF0b21p Y19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChYLCBFLCBWLCBNT1MsIE1PRikgICAg ICAgXAorICBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlKChYKSwgKEUpLCAmX19hdG1wKCooWCks IChWKSksIDAsIChNT1MpLCAoTU9GKSkKKworCisjZGVmaW5lIElOU1RBTlRJQVRFX1NUVUJfTEYo TiwgVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9m ZXRjaF9hZGRfICMjIE4oX0F0b21pYyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAg ICAgICBcCisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hZGQoWCwgViwgTSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRj aF9zdWJfICMjIE4oX0F0b21pYyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAg ICBcCisgIHJldHVybiBfX2F0b21pY19mZXRjaF9zdWIoWCwgViwgTSk7ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF9h bmRfICMjIE4oX0F0b21pYyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBc CisgIHJldHVybiBfX2F0b21pY19mZXRjaF9hbmQoWCwgViwgTSk7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF94b3Jf ICMjIE4oX0F0b21pYyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBcCisg IHJldHVybiBfX2F0b21pY19mZXRjaF94b3IoWCwgViwgTSk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF9uYW5kXyAj IyBOKF9BdG9taWMoVCkqIFgsIFQgY29uc3QgViwgaW50IE0pIHsgICAgICAgICAgICBcCisgIHJl dHVybiBfX2F0b21pY19mZXRjaF9uYW5kKFgsIFYsIE0pOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF9vcl8gIyMgTihf QXRvbWljKFQpKiBYLCBUIGNvbnN0IFYsIGludCBNKSB7ICAgICAgICAgICAgICBcCisgIHJldHVy biBfX2F0b21pY19mZXRjaF9vcihYLCBWLCBNKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9hZGRfZmV0Y2hfICMjIE4oX0F0 b21pYyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBcCisgIHJldHVybiBf X2F0b21pY19hZGRfZmV0Y2goWCwgViwgTSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9zdWJfZmV0Y2hfICMjIE4oX0F0b21p YyhUKSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0 b21pY19zdWJfZmV0Y2goWCwgViwgTSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9hbmRfZmV0Y2hfICMjIE4oX0F0b21pYyhU KSogWCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21p Y19hbmRfZmV0Y2goWCwgViwgTSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF94b3JfZmV0Y2hfICMjIE4oX0F0b21pYyhUKSog WCwgVCBjb25zdCBWLCBpbnQgTSkgeyAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21pY194 b3JfZmV0Y2goWCwgViwgTSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCitUIF9faW1wbF9uYW5kX2ZldGNoXyAjIyBOKF9BdG9taWMoVCkqIFgs IFQgY29uc3QgViwgaW50IE0pIHsgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21pY19uYW5k X2ZldGNoKFgsIFYsIE0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCitUIF9faW1wbF9vcl9mZXRjaF8gIyMgTihfQXRvbWljKFQpKiBYLCBUIGNv bnN0IFYsIGludCBNKSB7ICAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21pY19vcl9mZXRj aChYLCBWLCBNKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCitUIF9faW1wbF9sb2FkXyAjIyBOKF9BdG9taWMoVCkqIFgsIGludCBNKSB7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21pY19sb2FkX24oWCwg TSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCit2b2lkIF9faW1wbF9zdG9yZV8gIyMgTihfQXRvbWljKFQpKiBYLCBUIGNvbnN0IFYs IGludCBNKSB7ICAgICAgICAgICAgICBcCisgIF9fYXRvbWljX3N0b3JlX24oWCwgViwgTSk7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCitUIF9faW1wbF9leGNoYW5nZV8gIyMgTihfQXRvbWljKFQpKiBYLCBUIGNvbnN0IFYsIGlu dCBNKSB7ICAgICAgICAgICAgICBcCisgIHJldHVybiBfX2F0b21pY19leGNoYW5nZV9uKFgsIFYs IE0pOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CitfQm9vbCBfX2ltcGxfY29tcGFyZV9leGNoYW5nZV8gIyMgTihfQXRvbWljKFQpKiBYLCBUKiBF LCBUIGNvbnN0IFYsIGludCBNUywgaW50IE1GKSB7IFwKKyAgcmV0dXJuIF9fYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2VfbihYLCBFLCBWLCAwLCBNUywgTUYpOyAgICAgICAgICAgICAgIFwKK30KKwor CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9hdG9taWNfZ2NjX3N5bmMuaCBiL3Ny Yy9pbnRlcm5hbC9hdG9taWNfZ2NjX3N5bmMuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw MDAwMDAwLi4yZDQyYTU3Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL2ludGVybmFsL2F0b21pY19n Y2Nfc3luYy5oCkBAIC0wLDAgKzEsMjUwIEBACisjaWZuZGVmIF9TVERBVE9NSUNfR0NDX1NZTkNf SF8KKyNkZWZpbmUgX1NUREFUT01JQ19HQ0NfU1lOQ19IXyAxCisKKyNkZWZpbmUgQVRPTUlDX1ZB Ul9JTklUKC4uLikgeyBbMF0gPSBfX1ZBX0FSR1NfXywgfQorI2RlZmluZSBhdG9taWNfaW5pdChY LCBWKSAoKHZvaWQpKCgqKFgpKVswXT0oVikpKQorCisvKiBNYXAgYWxsIG5vbi1leHBsaWNpdCBt YWNyb3MgdG8gdGhlIGV4cGxpY2l0IHZlcnNpb24uICovCisjZGVmaW5lIGF0b21pY19mZXRjaF9h ZGQoWCwgWSkgICAgICAgICAgICAgICAgICBhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0KChYKSwg KFkpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgYXRvbWljX2ZldGNoX3N1YihYLCBZ KSAgICAgICAgICAgICAgICAgIGF0b21pY19mZXRjaF9zdWJfZXhwbGljaXQoKFgpLCAoWSksIG1l bW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNfZmV0Y2hfYW5kKFgsIFkpICAgICAg ICAgICAgICAgICAgYXRvbWljX2ZldGNoX2FuZF9leHBsaWNpdCgoWCksIChZKSwgbWVtb3J5X29y ZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19mZXRjaF9vcihYLCBZKSAgICAgICAgICAgICAg ICAgICBhdG9taWNfZmV0Y2hfb3JfZXhwbGljaXQoKFgpLCAoWSksIG1lbW9yeV9vcmRlcl9zZXFf Y3N0KQorI2RlZmluZSBhdG9taWNfZmV0Y2hfeG9yKFgsIFkpICAgICAgICAgICAgICAgICAgYXRv bWljX2ZldGNoX3hvcl9leHBsaWNpdCgoWCksIChZKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QpCisj ZGVmaW5lIGF0b21pY19sb2FkKFgpICAgICAgICAgICAgICAgICAgICAgICAgICBhdG9taWNfbG9h ZF9leHBsaWNpdCgoWCksIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2RlZmluZSBhdG9taWNfc3Rv cmUoWCwgVikgICAgICAgICAgICAgICAgICAgICAgYXRvbWljX3N0b3JlX2V4cGxpY2l0KChYKSwg KFYpLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKyNkZWZpbmUgYXRvbWljX2V4Y2hhbmdlKFgsIFYp ICAgICAgICAgICAgICAgICAgIGF0b21pY19leGNoYW5nZV9leHBsaWNpdCgoWCksIChWKSwgbWVt b3J5X29yZGVyX3NlcV9jc3QpCisjZGVmaW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dlYWso WCwgRSwgVikgICBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoKFgpLCAo RSksIChWKSwgbWVtb3J5X29yZGVyX3NlcV9jc3QsIG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorI2Rl ZmluZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmcoWCwgRSwgVikgYXRvbWljX2NvbXBh cmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KChYKSwgKEUpLCAoViksIG1lbW9yeV9vcmRlcl9z ZXFfY3N0LCBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKworLyogVGhlIGFyZ3VtZW50IFggaXMgc3Vw cG9zZWQgdG8gYmUgcG9pbnRlciB0byBhIG9uZSBlbGVtZW50IGFycmF5IG9mCisgICB0aGUgYmFz ZSB0eXBlLiBJbiBldmFsdWF0aW9uIGNvbnRleHQgYGAqKFgpJycgZGVjYXlzIHRvIGEgcG9pbnRl cgorICAgdG8gdGhlIGJhc2UgdHlwZS4gSW4gX190eXBlb2ZfXyBjb250ZXh0IHdlIGhhdmUgdG8g dXNlCisgICBgYCYoKihYKSlbMF0nJyBmb3IgdGhhdC4gKi8KKyNkZWZpbmUgYXRvbWljX2ZldGNo X2FkZF9leHBsaWNpdChYLCBZLCBNTykgX19zeW5jX2ZldGNoX2FuZF9hZGQoKihYKSwgKFkpKQor I2RlZmluZSBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KFgsIFksIE1PKSBfX3N5bmNfZmV0Y2hf YW5kX3N1YigqKFgpLCAoWSkpCisjZGVmaW5lIGF0b21pY19mZXRjaF9hbmRfZXhwbGljaXQoWCwg WSwgTU8pIF9fc3luY19mZXRjaF9hbmRfb3IoKihYKSwgKFkpKQorI2RlZmluZSBhdG9taWNfZmV0 Y2hfb3JfZXhwbGljaXQoWCwgWSwgTU8pIF9fc3luY19mZXRjaF9hbmRfYW5kKCooWCksIChZKSkK KyNkZWZpbmUgYXRvbWljX2ZldGNoX3hvcl9leHBsaWNpdChYLCBZLCBNTykgX19zeW5jX2ZldGNo X2FuZF94b3IoKihYKSwgKFkpKQorCisjZGVmaW5lIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3dl YWsoWCwgRSwgRCwgTU9TLCBNT0YpIGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZygoWCks IChFKSwgKFYpLCAoTU9TKSwgKE1PRikpCisKKyNkZWZpbmUgSU5TVEFOVElBVEVfU1RVQl9MRihO LCBUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX2Zl dGNoX2FkZF8gIyMgTihfX3R5cGVvZl9fKFQgdm9sYXRpbGVbMV0pKiBYLCBUIGNvbnN0IF9WLCBp bnQgX21vKSB7IFwKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYWRkKCYoKCpYKVswXSksIF9W KTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBs X2ZldGNoX3N1Yl8gIyMgTihfX3R5cGVvZl9fKFQgdm9sYXRpbGVbMV0pKiBYLCBUIGNvbnN0IF9W LCBpbnQgX21vKSB7IFwKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfc3ViKCYoKCpYKVswXSks IF9WKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19p bXBsX2ZldGNoX2FuZF8gIyMgTihfX3R5cGVvZl9fKFQgdm9sYXRpbGVbMV0pKiBYLCBUIGNvbnN0 IF9WLCBpbnQgX21vKSB7IFwKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfYW5kKCYoKCpYKVsw XSksIF9WKTsgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1Qg X19pbXBsX2ZldGNoX3hvcl8gIyMgTihfX3R5cGVvZl9fKFQgdm9sYXRpbGVbMV0pKiBYLCBUIGNv bnN0IF9WLCBpbnQgX21vKSB7IFwKKyAgcmV0dXJuIF9fc3luY19mZXRjaF9hbmRfeG9yKCYoKCpY KVswXSksIF9WLCBfbW8pOyAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwK K1QgX19pbXBsX2ZldGNoX29yXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGlsZVsxXSkqIFgsIFQg Y29uc3QgX1YsIGludCBfbW8pIHsgXAorICByZXR1cm4gX19zeW5jX2ZldGNoX2FuZF9vcigmKCgq WClbMF0pLCBfViwgX21vKTsgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorVCBfX2ltcGxfYWRkX2ZldGNoXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGlsZVsxXSkqIFgs IFQgY29uc3QgX1YsIGludCBfbW8pIHsgXAorICByZXR1cm4gX19zeW5jX2FkZF9hbmRfZmV0Y2go JigoKlgpWzBdKSwgX1YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorVCBfX2ltcGxfc3ViX2ZldGNoXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGlsZVsxXSkq IFgsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgXAorICByZXR1cm4gX19zeW5jX3N1Yl9hbmRfZmV0 Y2goJigoKlgpWzBdKSwgX1YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorVCBfX2ltcGxfYW5kX2ZldGNoXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGlsZVsx XSkqIFgsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgXAorICByZXR1cm4gX19zeW5jX2FuZF9hbmRf ZmV0Y2goJigoKlgpWzBdKSwgX1YpOyAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorVCBfX2ltcGxfeG9yX2ZldGNoXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGls ZVsxXSkqIFgsIFQgY29uc3QgX1YsIGludCBfbW8pIHsgXAorICByZXR1cm4gX19zeW5jX3hvcl9h bmRfZmV0Y2goJigoKlgpWzBdKSwgX1YsIF9tbyk7ICAgICAgICAgICAgICAgICAgICAgXAorfSAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorVCBfX2ltcGxfb3JfZmV0Y2hfICMjIE4oX190eXBlb2ZfXyhUIHZvbGF0 aWxlWzFdKSogWCwgVCBjb25zdCBfViwgaW50IF9tbykgeyBcCisgIHJldHVybiBfX3N5bmNfb3Jf YW5kX2ZldGNoKCYoKCpYKVswXSksIF9WLCBfbW8pOyAgICAgICAgICAgICAgICAgICAgICBcCit9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCitUIF9faW1wbF9sb2FkXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGls ZVsxXSkqIFgsIGludCBfbW8pIHsgICAgICAgICAgICBcCisgIHJldHVybiBfX3N5bmNfdmFsX2Nv bXBhcmVfYW5kX3N3YXAoJigoKlgpWzBdKSwgMCwgMCk7ICAgICAgICAgICAgICAgICBcCit9ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCitUIF9faW1wbF9leGNoYW5nZV8gIyMgTihfX3R5cGVvZl9fKFQgdm9sYXRp bGVbMV0pKiBYLCBUIGNvbnN0IF9WLCBpbnQgX21vKSB7IFwKKyAgVCBfciA9IF9WLCBfZTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAg ZG8geyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyAgICBfZSA9IF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgICBfciA9IF9fc3luY192YWxfY29t cGFyZV9hbmRfc3dhcCgmKCgqWClbMF0pLCBfZSwgX1YpOyAgICAgICAgICAgICAgIFwKKyAgfSB3 aGlsZSAoX3IgIT0gX2UpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgcmV0dXJuIF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK3ZvaWQgX19p bXBsX3N0b3JlXyAjIyBOKF9fdHlwZW9mX18oVCB2b2xhdGlsZVsxXSkqIFgsIFQgY29uc3QgX1Ys IGludCBfbW8pIHsgXAorICAodm9pZClfX2ltcGxfZXhjaGFuZ2VfICMjIE4oWCwgX1YsIF9tbyk7 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorX0Jvb2wg X19pbXBsX2NvbXBhcmVfZXhjaGFuZ2VfICMjIE4oX190eXBlb2ZfXyhUIHZvbGF0aWxlWzFdKSog WCwgVCogX0UsIFQgY29uc3QgX0QsIGludCBfbW9zLCBpbnQgX21vZikgeyBcCisgIFQgX3YgPSAq X0U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgIFQgX24gPSBfX3N5bmNfdmFsX2NvbXBhcmVfYW5kX3N3YXAoJigoKlgpWzBdKSwg X3YsIF9EKTsgICAgICAgICAgICAgICBcCisgIGlmIChfdiAhPSBfbikgeyAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgKl9FID0gX247 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgICAgcmV0dXJuIDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiAxOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc Cit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgSU5TVEFOVElBVEVfU1RVQl9OQU5EKE4sIFQpCisKKworI2Rl ZmluZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQoWCwgRSwgRCwgTU9T LCBNT0YpICAgICAgXAorKHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfQm9vbCByZXQ7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX3R5 cGVvZl9fKCgqWClbMF0pKiBfZSA9IChFKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICBfX3R5cGVvZl9fKCgqWClbMF0pIGNvbnN0IF9kID0gKEQpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBzd2l0Y2ggKHNpemVvZiBfZCkgeyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBjYXNlIDg6 IHJldCA9IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgodWludDY0X3QqKShYKSwgKl9lLCAo RCkpOyBicmVhazsgXAorICBjYXNlIDQ6IHJldCA9IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dh cCgodWludDMyX3QqKShYKSwgKl9lLCAoRCkpOyBicmVhazsgXAorICBjYXNlIDI6IHJldCA9IF9f c3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgodWludDE2X3QqKShYKSwgKl9lLCAoRCkpOyBicmVh azsgXAorICBjYXNlIDE6IHJldCA9IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgodWludDhf dCopKFgpLCAqX2UsIChEKSk7IGJyZWFrOyBcCisgIGRlZmF1bHQ6IHJldCA9IF9faW1wbF9jb21w YXJlX2V4Y2hhbmdlKHNpemVvZiAoKlgpLCAodm9pZCopKFgpLCBfZSwgJl9kLCBNT1MsIE1PUyk7 IFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgX19hcmV0KHJldCk7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9KQorCisjZGVmaW5lIF9f aW1wbF91bmlvbihULCBYKSB1bmlvbiB7IF9fdHlwZW9mX18oKihYKSkgeDsgVCB0OyB9CisjZGVm aW5lIF9faW1wbF91bmlvbjJUKFQsIFgpICgoKF9faW1wbF91bmlvbihULCBYKSl7IC54ID0gKCoo WCkpLCB9KS50KQorI2RlZmluZSBfX2ltcGxfdW5pb24yWChULCBYLCBWKSAoKChfX2ltcGxfdW5p b24oVCwgWCkpeyAudCA9IChWKSwgfSkueCkKKworI2RlZmluZSBfX2ltcGxfbG9hZF91bmlvbihU LCBYKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19faW1wbF91bmlv bjJYKFQsIFgsIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgoVCopWCwgMCwgMCkpCisKKyNk ZWZpbmUgX19pbXBsX2V4Y2hhbmdlX3VuaW9uKFQsIFgsIFYpICAgICAgICAgICAgICAgICAgXAor KHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIF9faW1wbF91bmlvbihULCBYKSBfViA9IHsgLnQgPSAoViksIH07ICAgICAgICAgICAgICAg IFwKKyAgVCBfciA9IF9WLnQsIF9lOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICBkbyB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgX2UgPSBfcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgICBfciA9IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgoVCopWCwgX2Us IF9WLnQpOyAgXAorICB9IHdoaWxlIChfciAhPSBfZSk7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIF9faW1wbF91bmlvbjJYKFQsIFgsIF9yKTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyB9KQorCisjZGVmaW5lIF9faW1wbF9zdG9yZV91bmlvbihULCBYLCBW KSAgICAgICAgICAgICAgICAgICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICBfX2ltcGxfdW5pb24oVCwgWCkgX1YgPSB7IC50 ID0gKFYpLCB9OyAgICAgICAgICAgICAgICBcCisgIFQgX3IgPSBfVi50LCBfZTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgZG8geyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgIF9lID0gX3I7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgX3IgPSBfX3N5bmNfdmFsX2Nv bXBhcmVfYW5kX3N3YXAoKFQqKVgsIF9lLCBfVi50KTsgIFwKKyAgfSB3aGlsZSAoX3IgIT0gX2Up OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0pCisKKyNkZWZpbmUgX19p bXBsX2NvbXBhcmVfZXhjaGFuZ2VfdW5pb24oVCwgWCwgRSwgVikgICAgICAgICAgICAgICAgICAg ICAgIFwKKyh7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX190eXBlb2ZfXygqRSkqIF9lID0gKEUpOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19pbXBsX3VuaW9u KFQsIFgpIF9WID0geyAueCA9IChWKSwgfTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg IFwKKyAgX19pbXBsX3VuaW9uKFQsIFgpIF9FID0geyAueCA9ICpfZSwgfTsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgIFwKKyAgX19pbXBsX3VuaW9uKFQsIFgpIF9SID0geyAudCA9IF9f c3luY192YWxfY29tcGFyZV9hbmRfc3dhcCgoVCopWCwgX0UudCwgX1YudCksIH07IFwKKyAgX0Jv b2wgX3IgPSAoX0UudCA9PSBfUi50KTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyAgaWYgKCFfcikgX0UueCA9IF9SLng7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX3I7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9KQorCisj ZGVmaW5lIGF0b21pY19sb2FkX2V4cGxpY2l0KFgsIE1PKSAgICAgICAgICAgICAgICAgICAgIFwK K19fYnVpbHRpbl9jaG9vc2VfZXhwciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgX19VSU5UMTI4X18gJiYgc2l6ZW9mKCpYKT09MTYsICAgICAgICAgICAgICAgICAgICAg ICAgIFwKKyBfX2ltcGxfbG9hZF91bmlvbihfX2ltcGxfdWludDEyOF90LCAmKCgqWClbMF0pKSwg ICAgICAgXAorX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyBzaXplb2YoKlgpPT04LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorIF9faW1wbF9sb2FkX3VuaW9uKHVpbnQ2NF90LCAmKCgqWClbMF0pKSwg ICAgICAgICAgICAgICBcCitfX2J1aWx0aW5fY2hvb3NlX2V4cHIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorIHNpemVvZigqWCk9PTQsICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX2xvYWRfdW5pb24odWludDMyX3QsICYoKCpY KVswXSkpLCAgICAgICAgICAgICAgIFwKKyBfX2J1aWx0aW5fY2hvb3NlX2V4cHIgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09MiwgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBfX2ltcGxfbG9hZF91bmlvbih1aW50MTZf dCwgJigoKlgpWzBdKSksICAgICAgICAgICAgICAgXAorIF9fYnVpbHRpbl9jaG9vc2VfZXhwciAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBzaXplb2YoKlgpPT0xLCAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9faW1wbF9sb2FkX3VuaW9u KHVpbnQ4X3QsICYoKCpYKVswXSkpLCAgICAgICAgICAgICAgICBcCisgKHsgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBfX3R5cGVvZl9fKCgq WClbMF0pIF9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9faW1wbF9sb2Fk KHNpemVvZiBfciwgKHZvaWQqKSgmKCgqWClbMF0pKSwgJl9yLCBNTyk7ICBcCisgX3I7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyB9KSkpKSkp CisKKyNkZWZpbmUgYXRvbWljX3N0b3JlX2V4cGxpY2l0KFgsIFYsIE1PKSAgICAgICAgICAgICAg ICAgXAorX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyBfX1VJTlQxMjhfXyAmJiBzaXplb2YoKlgpPT0xNiwgICAgICAgICAgICAgICAg ICAgICAgICAgXAorIF9faW1wbF9zdG9yZV91bmlvbihfX2ltcGxfdWludDEyOF90LCAmKCgqWClb MF0pLCAoVikpLCBcCitfX2J1aWx0aW5fY2hvb3NlX2V4cHIgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorIHNpemVvZigqWCk9PTgsICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgX19pbXBsX3N0b3JlX3VuaW9uKHVpbnQ2NF90LCAmKCgqWClb MF0pLCAoVikpLCAgICAgICAgIFwKK19fYnVpbHRpbl9jaG9vc2VfZXhwciAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09NCwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBfX2ltcGxfc3RvcmVfdW5pb24odWludDMyX3Qs ICYoKCpYKVswXSksIChWKSksICAgICAgICAgXAorIF9fYnVpbHRpbl9jaG9vc2VfZXhwciAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBzaXplb2YoKlgpPT0yLCAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9faW1wbF9zdG9yZV91bmlvbih1 aW50MTZfdCwgJigoKlgpWzBdKSwgKFYpKSwgICAgICAgICBcCisgX19idWlsdGluX2Nob29zZV9l eHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyggICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIHNpemVvZigqWCk9PTEs ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX3N0b3Jl X3VuaW9uKHVpbnQ4X3QsICYoKCpYKVswXSksIChWKSksICAgICAgICAgIFwKKyAoeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9fdHlwZW9m X18oKCpYKVswXSkgY29uc3QgX3YgPSAoVik7ICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBs X3N0b3JlKHNpemVvZiBfdiwgJigoKlgpWzBdKSwgJl92LCBNTyk7ICAgICAgICAgIFwKKyB9KSkp KSkpCisKKyNkZWZpbmUgYXRvbWljX2V4Y2hhbmdlX2V4cGxpY2l0KFgsIFYsIE1PKSAgICAgICAg ICAgICAgICAgICAgICBcCitfX2J1aWx0aW5fY2hvb3NlX2V4cHIgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBfX1VJTlQxMjhfXyAmJiBzaXpl b2YoKlgpPT0xNiwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX2V4 Y2hhbmdlX3VuaW9uKF9faW1wbF91aW50MTI4X3QsICYoKCooWCkpWzBdKSwgKFYpKSwgICAgXAor X19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09OCwgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9faW1wbF9leGNoYW5nZV91bmlvbih1aW50 NjRfdCwgJigoKihYKSlbMF0pLCAoVikpLCAgICAgICAgICAgIFwKK19fYnVpbHRpbl9jaG9vc2Vf ZXhwciAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorIHNpemVvZigqWCk9PTQsICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKKyBfX2ltcGxfZXhjaGFuZ2VfdW5pb24odWludDMyX3QsICYoKCooWCkpWzBd KSwgKFYpKSwgICAgICAgICAgICBcCisgX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyBzaXplb2YoKlgpPT0y LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX19p bXBsX2V4Y2hhbmdlX3VuaW9uKHVpbnQxNl90LCAmKCgqKFgpKVswXSksIChWKSksICAgICAgICAg ICAgXAorIF9fYnVpbHRpbl9jaG9vc2VfZXhwciAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKKyggICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09MSwgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9faW1wbF9leGNoYW5nZV91bmlv bih1aW50OF90LCAmKCgqKFgpKVswXSksIChWKSksICAgICAgICAgICAgIFwKKyAoeyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg X190eXBlb2ZfXygoKlgpWzBdKSBjb25zdCBfdiA9IChWKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorIF9fdHlwZW9mX18oKCpYKVswXSkgX3IgPSAoVik7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyBfX2ltcGxfZXhjaGFuZ2Uoc2l6ZW9mIF9yLCAoJigoKlgpWzBd KSksICZfciwgJl92LCBNTyk7ICAgICAgICBcCisgX3I7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIH0pKSkpKSkKKworI2RlZmlu ZSBhdG9taWNfY29tcGFyZV9leGNoYW5nZV9leHBsaWNpdChYLCBFLCBWLCBNT1MsIE1PRikgICAg ICAgICAgICAgXAorX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorKCAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorIF9fVUlOVDEy OF9fICYmIHNpemVvZigqWCk9PTE2LCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorIF9faW1wbF9jb21wYXJlX2V4Y2hhbmdlX3VuaW9uKF9faW1wbF91aW50MTI4X3Qs ICYoKCooWCkpWzBdKSwgKEUpLCAoVikpLCBcCitfX2J1aWx0aW5fY2hvb3NlX2V4cHIgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgc2l6ZW9mKCpYKT09OCwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2VfdW5pb24o dWludDY0X3QsICYoKCooWCkpWzBdKSwgKEUpLCAoVikpLCAgICAgICBcCitfX2J1aWx0aW5fY2hv b3NlX2V4cHIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09NCwgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX2NvbXBhcmVf ZXhjaGFuZ2VfdW5pb24odWludDMyX3QsICYoKCooWCkpWzBdKSwgKEUpLCAoVikpLCAgICAgICBc CisgX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgc2l6ZW9mKCpYKT09MiwgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg X19pbXBsX2NvbXBhcmVfZXhjaGFuZ2VfdW5pb24odWludDE2X3QsICYoKCooWCkpWzBdKSwgKEUp LCAoVikpLCAgICAgICBcCisgX19idWlsdGluX2Nob29zZV9leHByICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisoICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgc2l6 ZW9mKCpYKT09MSwgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2VfdW5pb24odWludDhfdCwgJigo KihYKSlbMF0pLCAoRSksIChWKSksICAgICAgICBcCisgKHsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX190eXBl b2ZfXygoKlgpWzBdKSogX2UgPSAoRSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgX190eXBlb2ZfXygoKlgpWzBdKSBjb25zdCBfdiA9IChWKTsgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2Uoc2l6 ZW9mIF9yLCAoJigoKlgpWzBdKSksIF9lLCAmX3YsIE1PUywgTU9GKTsgICBcCisgfSkpKSkpKQor CisjZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9hdG9taWNfZ2VuZXJpYy5oIGIvc3Jj L2ludGVybmFsL2F0b21pY19nZW5lcmljLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw MDAwMC4uNmVjNmJiOAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcm5hbC9hdG9taWNfZ2Vu ZXJpYy5oCkBAIC0wLDAgKzEsMTAgQEAKKyNpZm5kZWYgX1NUREFUT01JQ19BVE9NSUNfR0VORVJJ Q19IXworI2RlZmluZSBfU1REQVRPTUlDX0FUT01JQ19HRU5FUklDX0hfIDEKKwordm9pZCBfX2lt cGxfbG9hZCAoc2l6ZV90IHNpemUsIHZvaWQgdm9sYXRpbGUqIHB0ciwgdm9pZCB2b2xhdGlsZSog cmV0LCBpbnQgbW8pOwordm9pZCBfX2ltcGxfc3RvcmUgKHNpemVfdCBzaXplLCB2b2lkIHZvbGF0 aWxlKiBwdHIsIHZvaWQgY29uc3Qgdm9sYXRpbGUqIHZhbCwgaW50IG1vKTsKK3ZvaWQgX19pbXBs X2V4Y2hhbmdlIChzaXplX3Qgc2l6ZSwgdm9pZCB2b2xhdGlsZSpfX3Jlc3RyaWN0X18gcHRyLCB2 b2lkIGNvbnN0IHZvbGF0aWxlKiB2YWwsIHZvaWQgdm9sYXRpbGUqIHJldCwgaW50IG1vKTsKK19C b29sIF9faW1wbF9jb21wYXJlX2V4Y2hhbmdlIChzaXplX3Qgc2l6ZSwgdm9pZCB2b2xhdGlsZSog cHRyLCB2b2lkIHZvbGF0aWxlKiBleHBlY3RlZCwgdm9pZCBjb25zdCB2b2xhdGlsZSogZGVzaXJl ZCwgaW50IG1vcywgaW50IG1vZik7Cit2b2lkIF9faW1wbF9wcmludF9zdGF0KHZvaWQpOworCisj ZW5kaWYKZGlmZiAtLWdpdCBhL3NyYy9pbnRlcm5hbC9hdG9taWNfc3R1Yi5oIGIvc3JjL2ludGVy bmFsL2F0b21pY19zdHViLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzVl MzMyOQotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9pbnRlcm5hbC9hdG9taWNfc3R1Yi5oCkBAIC0w LDAgKzEsMjA4IEBACisjaWZuZGVmIF9TVERBVE9NSUNfU1RVQl9IXworI2RlZmluZSBfU1REQVRP TUlDX1NUVUJfSF8gMQorCisjaW5jbHVkZSA8YXRvbWljX2dlbmVyaWMuaD4KKworI2RlZmluZSBJ TlNUQU5USUFURV9TVFVCX0xDQShOLCBUKSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorVCBfX2ltcGxfZmV0Y2hfYWRkXyAjIyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQgY29u c3QgViwgaW50IE1PKSB7ICAgICAgICAgXAorICBUIEUgPSAwOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBUIFIgPSBWOyAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICBpbnQgbW9mID0gKE1PID09IG1lbW9yeV9vcmRlcl9yZWxheGVkICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgID8gbWVtb3J5X29yZGVyX3JlbGF4 ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDog bWVtb3J5X29yZGVyX2NvbnN1bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICB3aGlsZSAoIV9faW1wbF9jb21wYXJlX2V4Y2hhbmdlKE4sIFgsICZFLCAmUiwgTU8sIG1v ZikpeyAgICAgICAgICAgICAgXAorICAgIFIgPSBFICsgVjsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICByZXR1cm4gRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorVCBfX2ltcGxfZmV0Y2hfc3ViXyAj IyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQgY29uc3QgViwgaW50IE1PKSB7ICAgICAgICAgXAorICBU IEUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICBUIFIgPSAtVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQgbW9mID0gKE1PID09IG1lbW9y eV9vcmRlcl9yZWxheGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAg ICAgICAgID8gbWVtb3J5X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICAgICAgICAgICAgIDogbWVtb3J5X29yZGVyX2NvbnN1bWUpOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoIV9faW1wbF9jb21wYXJlX2V4 Y2hhbmdlKE4sIFgsICZFLCAmUiwgTU8sIG1vZikpeyAgICAgICAgICAgICAgXAorICAgIFIgPSBF IC0gVjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gRTsgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorVCBfX2ltcGxfZmV0Y2hfYW5kXyAjIyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQgY29uc3Qg ViwgaW50IE1PKSB7ICAgICAgICAgXAorICBUIEUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBUIFIgPSAwOyAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorICBpbnQgbW9mID0gKE1PID09IG1lbW9yeV9vcmRlcl9yZWxheGVkICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgID8gbWVtb3J5X29yZGVyX3JlbGF4ZWQg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogbWVt b3J5X29yZGVyX2NvbnN1bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICB3aGlsZSAoIV9faW1wbF9jb21wYXJlX2V4Y2hhbmdlKE4sIFgsICZFLCAmUiwgTU8sIG1vZikp eyAgICAgICAgICAgICAgXAorICAgIFIgPSBFICYgVjsgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBy ZXR1cm4gRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorVCBfX2ltcGxfZmV0Y2hfeG9yXyAjIyBO KHZvaWQgdm9sYXRpbGUqIFgsIFQgY29uc3QgViwgaW50IE1PKSB7ICAgICAgICAgXAorICBUIEUg PSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorICBUIFIgPSBWOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQgbW9mID0gKE1PID09IG1lbW9yeV9v cmRlcl9yZWxheGVkICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAg ICAgID8gbWVtb3J5X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgIDogbWVtb3J5X29yZGVyX2NvbnN1bWUpOyAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoIV9faW1wbF9jb21wYXJlX2V4Y2hh bmdlKE4sIFgsICZFLCAmUiwgTU8sIG1vZikpeyAgICAgICAgICAgICAgXAorICAgIFIgPSBFIF4g VjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgXAorICByZXR1cm4gRTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg XAorVCBfX2ltcGxfZmV0Y2hfb3JfICMjIE4odm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBWLCBp bnQgTU8pIHsgICAgICAgICAgXAorICBUIEUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBUIFIgPSBWOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAor ICBpbnQgbW9mID0gTU8gPT0gbWVtb3J5X29yZGVyX3JlbGF4ZWQgPyBtZW1vcnlfb3JkZXJfcmVs YXhlZCA6IG1lbW9yeV9vcmRlcl9jb25zdW1lOyBcCisgIHdoaWxlICghX19pbXBsX2NvbXBhcmVf ZXhjaGFuZ2UoTiwgWCwgJkUsICZSLCBNTywgbW9mKSl7ICAgICAgICAgICAgICBcCisgICAgUiA9 IEUgfCBWOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBFOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCitUIF9faW1wbF9hZGRfZmV0Y2hfICMjIE4odm9pZCB2b2xhdGlsZSogWCwgVCBjb25z dCBWLCBpbnQgTU8pIHsgICAgICAgICBcCisgIFQgRSA9IDA7ICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFQgUiA9IFY7ICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgIGludCBtb2YgPSAoTU8gPT0gbWVtb3J5X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBtZW1vcnlfb3JkZXJfcmVsYXhl ZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgOiBt ZW1vcnlfb3JkZXJfY29uc3VtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIHdoaWxlICghX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2UoTiwgWCwgJkUsICZSLCBNTywgbW9m KSl7ICAgICAgICAgICAgICBcCisgICAgUiA9IEUgKyBWOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IHJldHVybiBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9zdWJfZmV0Y2hfICMj IE4odm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBWLCBpbnQgTU8pIHsgICAgICAgICBcCisgIFQg RSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIFQgUiA9IC1WOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludCBtb2YgPSAoTU8gPT0gbWVtb3J5 X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAg ICAgICAgPyBtZW1vcnlfb3JkZXJfcmVsYXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgICAgICAgICAgICAgOiBtZW1vcnlfb3JkZXJfY29uc3VtZSk7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlICghX19pbXBsX2NvbXBhcmVfZXhj aGFuZ2UoTiwgWCwgJkUsICZSLCBNTywgbW9mKSl7ICAgICAgICAgICAgICBcCisgICAgUiA9IEUg LSBWOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBSOyAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCitUIF9faW1wbF9hbmRfZmV0Y2hfICMjIE4odm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBW LCBpbnQgTU8pIHsgICAgICAgICBcCisgIFQgRSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFQgUiA9IDA7ICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CisgIGludCBtb2YgPSAoTU8gPT0gbWVtb3J5X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgPyBtZW1vcnlfb3JkZXJfcmVsYXhlZCAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgOiBtZW1v cnlfb3JkZXJfY29uc3VtZSk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IHdoaWxlICghX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2UoTiwgWCwgJkUsICZSLCBNTywgbW9mKSl7 ICAgICAgICAgICAgICBcCisgICAgUiA9IEUgJiBWOyAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIH0gICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIHJl dHVybiBSOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF94b3JfZmV0Y2hfICMjIE4o dm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBWLCBpbnQgTU8pIHsgICAgICAgICBcCisgIFQgRSA9 IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgIFQgUiA9IFY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIGludCBtb2YgPSAoTU8gPT0gbWVtb3J5X29y ZGVyX3JlbGF4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAg ICAgPyBtZW1vcnlfb3JkZXJfcmVsYXhlZCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICBcCisgICAgICAgICAgICAgOiBtZW1vcnlfb3JkZXJfY29uc3VtZSk7ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCisgIHdoaWxlICghX19pbXBsX2NvbXBhcmVfZXhjaGFu Z2UoTiwgWCwgJkUsICZSLCBNTywgbW9mKSl7ICAgICAgICAgICAgICBcCisgICAgUiA9IEUgXiBW OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCisgIHJldHVybiBSOyAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBc CitUIF9faW1wbF9vcl9mZXRjaF8gIyMgTih2b2lkIHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYsIGlu dCBNTykgeyAgICAgICAgICBcCisgIFQgRSA9IDA7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisgIFQgUiA9IFY7ICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCisg IGludCBtb2YgPSBNTyA9PSBtZW1vcnlfb3JkZXJfcmVsYXhlZCA/IG1lbW9yeV9vcmRlcl9yZWxh eGVkIDogbWVtb3J5X29yZGVyX2NvbnN1bWU7IFwKKyAgd2hpbGUgKCFfX2ltcGxfY29tcGFyZV9l eGNoYW5nZShOLCBYLCAmRSwgJlIsIE1PLCBtb2YpKXsgICAgICAgICAgICAgIFwKKyAgICBSID0g RSB8IFY7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIFI7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmlu ZSBJTlNUQU5USUFURV9TVFVCX05BTkQoTiwgVCkgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgXAorVCBfX2ltcGxfZmV0Y2hfbmFuZF8gIyMgTih2b2lkIHZvbGF0aWxlKiBYLCBU IGNvbnN0IFYsIGludCBNTykgeyAgICAgICAgXAorICBUIEUgPSAwOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBUIFIgPSB+ MDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICBpbnQgbW9mID0gKE1PID09IG1lbW9yeV9vcmRlcl9yZWxheGVkICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgID8gbWVtb3J5X29yZGVyX3Jl bGF4ZWQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAg IDogbWVtb3J5X29yZGVyX2NvbnN1bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgXAorICB3aGlsZSAoIWF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgo X0F0b21pYyhUKSopWCwgJkUsIFIsIE1PLCBtb2YpKXsgXAorICAgIFIgPSB+KEUgJiBWKTsgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9 ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorICByZXR1cm4gRTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorfSAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorVCBfX2lt cGxfbmFuZF9mZXRjaF8gIyMgTih2b2lkIHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYsIGludCBNTykg eyAgICAgICAgXAorICBUIEUgPSAwOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBUIFIgPSB+RTsgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBpbnQgbW9m ID0gKE1PID09IG1lbW9yeV9vcmRlcl9yZWxheGVkICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgXAorICAgICAgICAgICAgID8gbWVtb3J5X29yZGVyX3JlbGF4ZWQgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorICAgICAgICAgICAgIDogbWVtb3J5X29yZGVyX2Nv bnN1bWUpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB3aGlsZSAoIWF0 b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdCgoX0F0b21pYyhUKSopWCwgJkUs IFIsIE1PLCBtb2YpKXsgXAorICAgIFIgPSB+KEUgJiBWKTsgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICB9ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorICBy ZXR1cm4gUjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgXAorfQorCisKKyNkZWZpbmUgSU5TVEFOVElBVEVfU1RVQl9MQ00oTiwgVCkg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX2xvYWRfICMj IE4odm9pZCB2b2xhdGlsZSogWCwgaW50IE1PKSB7ICAgICAgICAgICAgICAgICAgICAgICAgIFwK KyAgVCByZXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIFwKKyAgX19pbXBsX2xvYWQoTiwgWCwgJnJldCwgTU8pOyAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIHJldDsgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30g ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgIFwKK3ZvaWQgX19pbXBsX3N0b3JlXyAjIyBOKHZvaWQgdm9sYXRpbGUqIFgs IFQgY29uc3QgViwgaW50IE1PKSB7ICAgICAgICAgIFwKKyAgX19pbXBsX3N0b3JlKE4sIFgsICZW LCBNTyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgIFwKK1QgX19pbXBsX2V4Y2hhbmdlXyAjIyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQg Y29uc3QgViwgaW50IE1PKSB7ICAgICAgICAgIFwKKyAgVCByZXQ7ICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKKyAgX19pbXBs X2V4Y2hhbmdlKE4sIFgsICZWLCAmcmV0LCBNTyk7ICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgIFwKKyAgcmV0dXJuIHJldDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK19Cb29sIF9faW1w bF9jb21wYXJlX2V4Y2hhbmdlXyAjIyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQqIEUsIFQgY29uc3Qg ViwgaW50IE1PUywgaW50IE1PZikgeyBcCisgIHJldHVybiBfX2ltcGxfY29tcGFyZV9leGNoYW5n ZShOLCBYLCBFLCAmViwgTU9TLCBNT2YpOyAgICAgICAgICAgICAgICBcCit9ICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBcCisgSU5TVEFOVElBVEVfU1RVQl9OQU5EKE4sIFQpCisKKyNkZWZpbmUgSU5TVEFOVElBVEVf U1RVQl9MQyhOLCBUKSBJTlNUQU5USUFURV9TVFVCX0xDQShOLCBUKSBJTlNUQU5USUFURV9TVFVC X0xDTShOLCBUKQorCisKKyNkZWZpbmUgSU5TVEFOVElBVEVfU1lOQ0EoTiwgVCkgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX2ZldGNoX2FuZF9hZGRf ICMjIE4odm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBWKSB7ICAgICAgICAgICAgIFwKKyAgcmV0 dXJuIF9faW1wbF9mZXRjaF9hZGRfICMjIE4oKF9BdG9taWMoVCkqKVgsIFYsIG1lbW9yeV9vcmRl cl9zZXFfY3N0KTsgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgXAorVCBfX2ltcGxfZmV0Y2hfYW5kX3N1Yl8g IyMgTih2b2lkIHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYpIHsgICAgICAgICAgICAgXAorICByZXR1 cm4gX19pbXBsX2ZldGNoX3N1Yl8gIyMgTigoX0F0b21pYyhUKSopWCwgViwgbWVtb3J5X29yZGVy X3NlcV9jc3QpOyBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF9hbmRfYW5kXyAj IyBOKHZvaWQgdm9sYXRpbGUqIFgsIFQgY29uc3QgVikgeyAgICAgICAgICAgICBcCisgIHJldHVy biBfX2ltcGxfZmV0Y2hfYW5kXyAjIyBOKChfQXRvbWljKFQpKilYLCBWLCBtZW1vcnlfb3JkZXJf c2VxX2NzdCk7IFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX2ZldGNoX2FuZF9vcl8gIyMg Tih2b2lkIHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYpIHsgICAgICAgICAgICAgIFwKKyAgcmV0dXJu IF9faW1wbF9mZXRjaF9vcl8gIyMgTigoX0F0b21pYyhUKSopWCwgViwgbWVtb3J5X29yZGVyX3Nl cV9jc3QpOyBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9mZXRjaF9hbmRfeG9yXyAjIyBO KHZvaWQgdm9sYXRpbGUqIFgsIFQgY29uc3QgVikgeyAgICAgICAgICAgICBcCisgIHJldHVybiBf X2ltcGxfZmV0Y2hfeG9yXyAjIyBOKChfQXRvbWljKFQpKilYLCBWLCBtZW1vcnlfb3JkZXJfc2Vx X2NzdCk7IFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX2FkZF9hbmRfZmV0Y2hfICMjIE4o dm9pZCB2b2xhdGlsZSogWCwgVCBjb25zdCBWKSB7ICAgICAgICAgICAgIFwKKyAgcmV0dXJuIF9f aW1wbF9hZGRfZmV0Y2hfICMjIE4oKF9BdG9taWMoVCkqKVgsIFYsIG1lbW9yeV9vcmRlcl9zZXFf Y3N0KTsgXAorfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorVCBfX2ltcGxfc3ViX2FuZF9mZXRjaF8gIyMgTih2 b2lkIHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYpIHsgICAgICAgICAgICAgXAorICByZXR1cm4gX19p bXBsX3N1Yl9mZXRjaF8gIyMgTigoX0F0b21pYyhUKSopWCwgViwgbWVtb3J5X29yZGVyX3NlcV9j c3QpOyBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF9hbmRfYW5kX2ZldGNoXyAjIyBOKHZv aWQgdm9sYXRpbGUqIFgsIFQgY29uc3QgVikgeyAgICAgICAgICAgICBcCisgIHJldHVybiBfX2lt cGxfYW5kX2ZldGNoXyAjIyBOKChfQXRvbWljKFQpKilYLCBWLCBtZW1vcnlfb3JkZXJfc2VxX2Nz dCk7IFwKK30gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIFwKK1QgX19pbXBsX29yX2FuZF9mZXRjaF8gIyMgTih2b2lk IHZvbGF0aWxlKiBYLCBUIGNvbnN0IFYpIHsgICAgICAgICAgICAgIFwKKyAgcmV0dXJuIF9faW1w bF9vcl9mZXRjaF8gIyMgTigoX0F0b21pYyhUKSopWCwgViwgbWVtb3J5X29yZGVyX3NlcV9jc3Qp OyBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF94b3JfYW5kX2ZldGNoXyAjIyBOKHZvaWQg dm9sYXRpbGUqIFgsIFQgY29uc3QgVikgeyAgICAgICAgICAgICBcCisgIHJldHVybiBfX2ltcGxf eG9yX2ZldGNoXyAjIyBOKChfQXRvbWljKFQpKilYLCBWLCBtZW1vcnlfb3JkZXJfc2VxX2NzdCk7 IFwKK30KKworI2RlZmluZSBJTlNUQU5USUFURV9TWU5DTShOLCBUKSAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgXAorX0Jvb2wgX19pbXBsX2Jvb2xfY29tcGFyZV9hbmRf c3dhcF8gIyMgTih2b2lkIHZvbGF0aWxlKiBYLCBUIEUsIFQgY29uc3QgVikgeyBcCisgIFQgUiA9 IEU7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICBcCisgIHJldHVybiBfX2ltcGxfY29tcGFyZV9leGNoYW5nZV8gIyMgTigoX0F0b21p YyhUKSopWCwgJlIsIFYsICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICBtZW1vcnlfb3JkZXJfc2VxX2NzdCwgbWVtb3J5X29y ZGVyX3NlcV9jc3QpOyBcCit9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBcCitUIF9faW1wbF92YWxfY29tcGFyZV9h bmRfc3dhcF8gIyMgTih2b2lkIHZvbGF0aWxlKiBYLCBUIEUsIFQgY29uc3QgVikgeyBcCisgICBU IFIgPSBFOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICBcCisgIF9faW1wbF9jb21wYXJlX2V4Y2hhbmdlXyAjIyBOKChfQXRvbWljKFQp KilYLCAmUiwgViwgICAgICAgICAgICAgICAgICBcCisgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgIG1lbW9yeV9vcmRlcl9zZXFfY3N0LCBtZW1vcnlfb3JkZXJf c2VxX2NzdCk7IFwKKyAgcmV0dXJuIFI7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgIFwKK30KKworI2RlZmluZSBJTlNUQU5USUFURV9T WU5DKE4sIFQpIElOU1RBTlRJQVRFX1NZTkNBKE4sIFQpIElOU1RBTlRJQVRFX1NZTkNNKE4sIFQp CisKKyNlbmRpZgpkaWZmIC0tZ2l0IGEvc3JjL2ludGVybmFsL2F0b21pY190eXBlcy5oIGIvc3Jj L2ludGVybmFsL2F0b21pY190eXBlcy5oCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmU4NzNmMzUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJuYWwvYXRvbWljX3R5cGVz LmgKQEAgLTAsMCArMSw0NiBAQAorI2lmbmRlZiBfU1REQVRPTUlDX1RZUEVTX0hfCisjZGVmaW5l IF9TVERBVE9NSUNfVFlQRVNfIDEKKworI2luY2x1ZGUgPHdjaGFyLmg+CisjaW5jbHVkZSA8c3Rk ZGVmLmg+CisjaW5jbHVkZSA8c3RkaW50Lmg+CisKK3R5cGVkZWYgX0F0b21pYyhfQm9vbCkgICAg ICAgICAgICAgIGF0b21pY19ib29sOwordHlwZWRlZiBfQXRvbWljKGNoYXIpICAgICAgICAgICAg ICAgYXRvbWljX2NoYXI7Cit0eXBlZGVmIF9BdG9taWMoaW50KSAgICAgICAgICAgICAgICBhdG9t aWNfaW50OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0MTZfdCkgICAgICAgYXRvbWljX2ludF9m YXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfZmFzdDMyX3QpICAgICAgIGF0b21pY19pbnRf ZmFzdDMyX3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2Zhc3Q2NF90KSAgICAgICBhdG9taWNfaW50 X2Zhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9mYXN0OF90KSAgICAgICAgYXRvbWljX2lu dF9mYXN0OF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDE2X3QpICAgICAgYXRvbWljX2lu dF9sZWFzdDE2X3Q7Cit0eXBlZGVmIF9BdG9taWMoaW50X2xlYXN0MzJfdCkgICAgICBhdG9taWNf aW50X2xlYXN0MzJfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRfbGVhc3Q2NF90KSAgICAgIGF0b21p Y19pbnRfbGVhc3Q2NF90OwordHlwZWRlZiBfQXRvbWljKGludF9sZWFzdDhfdCkgICAgICAgYXRv bWljX2ludF9sZWFzdDhfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRtYXhfdCkgICAgICAgICAgIGF0 b21pY19pbnRtYXhfdDsKK3R5cGVkZWYgX0F0b21pYyhpbnRwdHJfdCkgICAgICAgICAgIGF0b21p Y19pbnRwdHJfdDsKK3R5cGVkZWYgX0F0b21pYyhsb25nIGxvbmcpICAgICAgICAgIGF0b21pY19s bG9uZzsKK3R5cGVkZWYgX0F0b21pYyhsb25nKSAgICAgICAgICAgICAgIGF0b21pY19sb25nOwor dHlwZWRlZiBfQXRvbWljKHB0cmRpZmZfdCkgICAgICAgICAgYXRvbWljX3B0cmRpZmZfdDsKK3R5 cGVkZWYgX0F0b21pYyhzaG9ydCkgICAgICAgICAgICAgIGF0b21pY19zaG9ydDsKK3R5cGVkZWYg X0F0b21pYyhzaWduZWQgY2hhcikgICAgICAgIGF0b21pY19zY2hhcjsKK3R5cGVkZWYgX0F0b21p YyhzaXplX3QpICAgICAgICAgICAgIGF0b21pY19zaXplX3Q7Cit0eXBlZGVmIF9BdG9taWModWlu dF9mYXN0MTZfdCkgICAgICBhdG9taWNfdWludF9mYXN0MTZfdDsKK3R5cGVkZWYgX0F0b21pYyh1 aW50X2Zhc3QzMl90KSAgICAgIGF0b21pY191aW50X2Zhc3QzMl90OwordHlwZWRlZiBfQXRvbWlj KHVpbnRfZmFzdDY0X3QpICAgICAgYXRvbWljX3VpbnRfZmFzdDY0X3Q7Cit0eXBlZGVmIF9BdG9t aWModWludF9mYXN0OF90KSAgICAgICBhdG9taWNfdWludF9mYXN0OF90OwordHlwZWRlZiBfQXRv bWljKHVpbnRfbGVhc3QxNl90KSAgICAgYXRvbWljX2NoYXIxNl90OwordHlwZWRlZiBfQXRvbWlj KHVpbnRfbGVhc3QxNl90KSAgICAgYXRvbWljX3VpbnRfbGVhc3QxNl90OwordHlwZWRlZiBfQXRv bWljKHVpbnRfbGVhc3QzMl90KSAgICAgYXRvbWljX2NoYXIzMl90OwordHlwZWRlZiBfQXRvbWlj KHVpbnRfbGVhc3QzMl90KSAgICAgYXRvbWljX3VpbnRfbGVhc3QzMl90OwordHlwZWRlZiBfQXRv bWljKHVpbnRfbGVhc3Q2NF90KSAgICAgYXRvbWljX3VpbnRfbGVhc3Q2NF90OwordHlwZWRlZiBf QXRvbWljKHVpbnRfbGVhc3Q4X3QpICAgICAgYXRvbWljX3VpbnRfbGVhc3Q4X3Q7Cit0eXBlZGVm IF9BdG9taWModWludG1heF90KSAgICAgICAgICBhdG9taWNfdWludG1heF90OwordHlwZWRlZiBf QXRvbWljKHVpbnRwdHJfdCkgICAgICAgICAgYXRvbWljX3VpbnRwdHJfdDsKK3R5cGVkZWYgX0F0 b21pYyh1bnNpZ25lZCBjaGFyKSAgICAgIGF0b21pY191Y2hhcjsKK3R5cGVkZWYgX0F0b21pYyh1 bnNpZ25lZCBpbnQpICAgICAgIGF0b21pY191aW50OwordHlwZWRlZiBfQXRvbWljKHVuc2lnbmVk IGxvbmcgbG9uZykgYXRvbWljX3VsbG9uZzsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBsb25n KSAgICAgIGF0b21pY191bG9uZzsKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCBzaG9ydCkgICAg IGF0b21pY191c2hvcnQ7Cit0eXBlZGVmIF9BdG9taWMod2NoYXJfdCkgICAgICAgICAgICBhdG9t aWNfd2NoYXJfdDsKKworI2VuZGlmCmRpZmYgLS1naXQgYS9zcmMvaW50ZXJuYWwvc3RkYXRvbWlj LWltcGwuaCBiL3NyYy9pbnRlcm5hbC9zdGRhdG9taWMtaW1wbC5oCm5ldyBmaWxlIG1vZGUgMTAw NjQ0CmluZGV4IDAwMDAwMDAuLjdhYWEwZDUKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvaW50ZXJu YWwvc3RkYXRvbWljLWltcGwuaApAQCAtMCwwICsxLDc1IEBACisjaWZuZGVmIF9TVERBVE9NSUNf SF8KKyNkZWZpbmUgX1NUREFUT01JQ19IXyAxCisKKy8qIENvcHlyaWdodCAyMDE1LCBKZW5zIEd1 c3RlZHQsIEZyYW5jZS4gKi8KKworLyoqCisgKiogQGZpbGUKKyAqKgorICoqIEBicmllZiBBbiBy ZWFsaXphdGlvbiBvZiB0aGUgc3RkYXRvbWljLmggaW50ZXJmYWNlIGJ5IG1lYW5zIG9mIGdjYwor ICoqIG9yIGNsYW5nIGNvbXBpbGVyIGV4dGVuc2lvbnMuCisgKioKKyAqKiBUaGlzIGhhcyB0aHJl ZSBkaWZmZXJlbnQgcmVhbGl6YXRpb25zLCB1c2luZyBpbnRyaW5zaWNzIGZvciBtb2Rlcm4KKyAq KiBjbGFuZyAoX19jMTFfYXRvbWljIC4uLiksIG1vZGVybiBnY2MgKF9fYXRvbWljIC4uLikgb3Ig Zm9yIHRoZSBvbGQKKyAqKiBnY2MgX19zeW5jIGludGVyZmFjZS4gVGhlIGxhdGVyIHNob3VsZCBi ZSBhdmFpbGFibGUgb24gYSBsb3Qgb2YKKyAqKiBwbGF0Zm9ybXMsIG1hbnkgb3RoZXIgY29tcGls ZXJzLCBpbmNsdWRpbmcgY2xhbmcgaW1wbGVtZW50IHRoZXNlCisgKiogaW50ZXJmYWNlcy4KKyAq KgorICoqIEZvciB0aGUgZmlyc3QgdHdvLCB1c2VyIGNvZGUgc2hvdWxkIGJlIGFibGUgdG8gdXNl IGFsbCBDMTEgYXRvbWljCisgKiogZmVhdHVyZXMgd2l0aG91dCBwcm9ibGVtcy4KKyAqKgorICoq IEZvciB0aGUgX19zeW5jIGludGVyZmFjZSwgd2UgY2FuJ3QgYXNzdW1lIHRoYXQgdGhlcmUgaXMg c3VwcG9ydAorICoqIGZvciBvcGVyYXRvcnMgb24gYXRvbWljcywgc28gc3VjaCBjb2RlIHNob3Vs ZCBzaW1wbHkgbm90IHVzZQorICoqIHRoZW0uIEJ1dCB0aGUgImZ1bmN0aW9uYWwiIGFwcHJvYWNo IHRvIGF0b21pY3Mgc2hvdWxkIHdvcmsgZXZlbgorICoqIHRoZW4uIFRoYXQgaXMgY29kZSB0aGF0 IHVzZXMgdGhlIF9BdG9taWMoKSB2YXJpYW50IHRvIGRlY2xhcmUKKyAqKiBhdG9taWMgb2JqZWN0 cyBhbmQgb25seSB1c2VzIHRoZSBhdG9taWNfLi4uIG1hY3JvcyBhcyBvZiB0aGUgQzExCisgKiog c3RhbmRhcmQgdG8gYWN0IHVwb24gdGhlc2Ugb2JqZWN0cyBzaG91bGQgd29yay4KKyAqKgorICoq IFRoZSBzeW5jIGNvZGUgYWxzbyBkZXBlbmRzIGEgbG90IG9mIG90aGVyIGdjYyBleHRlbnNpb25z IHRvIEM6CisgKioKKyAqKiAtIGNvbXBvdW5kIGV4cHJlc3Npb25zCisgKiogLSBfX3R5cGVvZl9f CisgKiogLSBfX2FsaWdub2ZfXworICoqIC0gX19hdHRyaWJ1dGVfXygoYWxpZ25lZChzb21ldGhp bmcpKSkKKyAqKi8KKworCisjaW5jbHVkZSA8YXRvbWljX2NvbnN0YW50cy5oPgorI2luY2x1ZGUg PGF0b21pY19mbGFnLmg+CisjaW5jbHVkZSA8YXRvbWljX2ZlbmNlLmg+CisjaW5jbHVkZSA8c3Rk aW50Lmg+CisjaW5jbHVkZSA8c3RkbGliLmg+CisjaW5jbHVkZSA8c3RkZGVmLmg+CisKKy8qIElu IHNvbWUgcGxhY2VzIHdlIG5lZWQgYSB0eXBlIHRoYXQgaXMgYWxtb3N0IHRoZSBzYW1lIGFzIGJh c2UgdHlwZQorICAgVCwgYnV0CisKKyAgIC0gcmV0dXJucyBhIHBvaW50ZXIgdG8gVCBpbiBldmFs dWF0aW9uIGNvbnRleHQKKyAgIC0gY2FuJ3QgYmUgYXNzaWduZWQgdG8KKworICAgVCBjYW4gYmUg YSB0eXBlIG9yIGFuIGV4cHJlc3Npb24uCisqLworI2RlZmluZSBfX2F0eXAoVCkgX190eXBlb2Zf XyhfX3R5cGVvZl9fKFQpWzFdKQorCisvKiBUbyBldmFsdWF0ZSBleHByZXNzaW9ucyB3ZSBzb21l dGltZXMgbmVlZCB0ZW1wb3JhcmllcyBvZiB0aGF0IHR5cGUKKyAgIHdpdGggYSBjZXJ0YWluIHZh bHVlLiAqLworI2RlZmluZSBfX2F0bXAoVCwgVikgKF9fYXR5cChUKSl7IFswXSA9IChWKSwgfQor CisvKiBXaGVuIGV2YWx1YXRpbmcgbHZhbHVlcyBpbiBnY2MncyBjb21wb3VuZCBleHByZXNzaW9u cyB0byByZXR1cm4gYQorICAgdmFsdWUsIHdlIHdhbnQgdG8gdGFrZSBjYXJlIHRoYXQgdGhlc2Ug bHZhbHVlcyBjYW4ndCBiZQorICAgYWNjaWRlbnRhbGx5IGJlIHN1YmplY3QgdG8gdGhlICYgb3Bl cmF0b3IuIEZvcmNlIGl0IHRvIGJlIGFuCisgICBydmFsdWUuICovCisjZGVmaW5lIF9fYXJldChW KSAoMSA/IChWKSA6IChWKSkKKworCisjaWZkZWYgX19BVE9NSUNfRk9SQ0VfU1lOQworI2luY2x1 ZGUgPGF0b21pY19nY2Nfc3luYy5oPgorI2VsaWYgZGVmaW5lZChfX2NsYW5nX18pCisjaW5jbHVk ZSA8YXRvbWljX2NsYW5nX2MxMS5oPgorI2Vsc2UKKyNpbmNsdWRlIDxhdG9taWNfZ2NjX2F0b21p Yy5oPgorI2VuZGlmCisKKyNpbmNsdWRlIDxhdG9taWNfdHlwZXMuaD4KKworI2VuZGlmCmRpZmYg LS1naXQgYS9zcmMvc3RkYXRvbWljL2F0b21pY19mZW5jZS5jIGIvc3JjL3N0ZGF0b21pYy9hdG9t aWNfZmVuY2UuYwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi45OTYyODZmCi0t LSAvZGV2L251bGwKKysrIGIvc3JjL3N0ZGF0b21pYy9hdG9taWNfZmVuY2UuYwpAQCAtMCwwICsx LDkgQEAKKyNpbmNsdWRlICJhdG9taWNfZmVuY2UuaCIKKwordm9pZCAoYXRvbWljX3RocmVhZF9m ZW5jZSkobWVtb3J5X29yZGVyIG1vKSB7CisJYXRvbWljX3RocmVhZF9mZW5jZShtbyk7Cit9CisK K3ZvaWQgKGF0b21pY19zaWduYWxfZmVuY2UpKG1lbW9yeV9vcmRlciBtbykgeworCWF0b21pY19z aWduYWxfZmVuY2UobW8pOworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0ZGF0b21pYy9hdG9taWNfZmxh Zy5jIGIvc3JjL3N0ZGF0b21pYy9hdG9taWNfZmxhZy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu ZGV4IDAwMDAwMDAuLmEyN2ZiZTMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RkYXRvbWljL2F0 b21pY19mbGFnLmMKQEAgLTAsMCArMSwxNyBAQAorI2luY2x1ZGUgImF0b21pY19mbGFnLmgiCisK K19Cb29sIChhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXQpKHZvbGF0aWxlIGF0b21pY19mbGFnKiBm KSB7CisJcmV0dXJuIGF0b21pY19mbGFnX3Rlc3RfYW5kX3NldChmKTsKK30KKworX0Jvb2wgKGF0 b21pY19mbGFnX3Rlc3RfYW5kX3NldF9leHBsaWNpdCkodm9sYXRpbGUgYXRvbWljX2ZsYWcqIGYs IG1lbW9yeV9vcmRlciBtbykgeworCXJldHVybiBhdG9taWNfZmxhZ190ZXN0X2FuZF9zZXRfZXhw bGljaXQoZiwgbW8pOworfQorCit2b2lkIChhdG9taWNfZmxhZ19jbGVhcikodm9sYXRpbGUgYXRv bWljX2ZsYWcqIGYpIHsKKwlhdG9taWNfZmxhZ19jbGVhcihmKTsKK30KKwordm9pZCAoYXRvbWlj X2ZsYWdfY2xlYXJfZXhwbGljaXQpKHZvbGF0aWxlIGF0b21pY19mbGFnKiBmLCBtZW1vcnlfb3Jk ZXIgbW8pIHsKKwlhdG9taWNfZmxhZ19jbGVhcl9leHBsaWNpdChmLCBtbyk7Cit9CmRpZmYgLS1n aXQgYS9zcmMvc3RkYXRvbWljL2F0b21pY19mdXRleF9sb2NrLmMgYi9zcmMvc3RkYXRvbWljL2F0 b21pY19mdXRleF9sb2NrLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGVk OWViMAotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGRhdG9taWMvYXRvbWljX2Z1dGV4X2xvY2su YwpAQCAtMCwwICsxLDg4IEBACisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgiCisjaW5jbHVkZSAi c3RkYXRvbWljLWltcGwuaCIKKworLyogVGhlIEhPIGJpdC4gKi8KK3N0YXRpYyB1bnNpZ25lZCBj b25zdCBsb2NrYml0ID0gKFVJTlRfTUFYLzJ1KSsxdTsKK3N0YXRpYyB1bnNpZ25lZCBjb25zdCBj b250cmliID0gKFVJTlRfTUFYLzJ1KSsydTsKKworc2l6ZV90IF9faW1wbF90b3RhbCA9IDA7Citz aXplX3QgX19pbXBsX2Zhc3QgPSAwOworc2l6ZV90IF9faW1wbF9zbG93ID0gMDsKK3NpemVfdCBf X2ltcGxfZnV0ZXggPSAwOworc2l6ZV90IF9faW1wbF9hZ2FpbiA9IDA7CitzaXplX3QgX19pbXBs X3NwaW4gPSAwOworCisjaWZkZWYgQkVOQ0gKKyMgZGVmaW5lIEFDQ09VTlQoWCwgVikgKFgpICs9 IChWKQorI2Vsc2UKKyMgZGVmaW5lIEFDQ09VTlQoWCwgVikgZG8geyB9IHdoaWxlKDApCisjZW5k aWYKKwordm9pZCBfX2ltcGxfbXV0X2xvY2tfc2xvdyhfQXRvbWljKHVuc2lnbmVkKSogbG9jKQor eworI2lmZGVmIEJFTkNICisgIHNpemVfdCBzbG93ID0gMDsKKyAgc2l6ZV90IGZ1dGV4ID0gMDsK KyAgc2l6ZV90IGFnYWluID0gMDsKKyAgc2l6ZV90IHNwaW4gPSAwOworI2VuZGlmCisgIHJlZ2lz dGVyIHVuc2lnbmVkIHNwaW5zID0gMDsKKyAgdW5zaWduZWQgdmFsID0gMSthdG9taWNfZmV0Y2hf YWRkX2V4cGxpY2l0KGxvYywgMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworICBpZiAoISh2YWwg JiBsb2NrYml0KSkgZ290byBCSVRfVU5TRVQ7CisgIC8qIFRoZSBsb2NrIGFjcXVpc2l0aW9uIGxv b3AuIFRoaXMgaGFzIGJlZW4gZGVzaWduZWQgc3VjaCB0aGF0IHRoZQorICAgICBvbmx5IHBvc3Np YmxlIGNoYW5nZSB0aGF0IGlzIGRvbmUgaW5zaWRlIHRoYXQgbG9vcCBpcyBzZXR0aW5nCisgICAg IHRoZSBsb2NrIGJpdC4gVGhpcyBoYXMgYSBkb3VibGUgb2JqZWN0aXZlLiBGaXJzdCBhbGwgYXRv bWljCisgICAgIG9wZXJhdGlvbnMgYXJlIGV4cGVuc2l2ZSBhbmQgZG9pbmcgYSBwYWlyIG9mICsr IGFuZCAtLSBpbnNpZGUKKyAgICAgdGhlIGxvb3Agd291bGQganVzdCB3YXN0ZSBtZW1vcnkgYmFu ZHdpZHRoLiBUaGVuLCBsZXNzIGNoYW5nZXMKKyAgICAgdG8gdGhlIGNvdW50LCBtZWFucyB0aGF0 IG90aGVyIHRocmVhZHMgdGhhdCBhcmUgaW5zaWRlIHRoaXMKKyAgICAgc2FtZSBsb29wIGFyZSBs ZXNzIHBlcnR1cmJlZC4gKi8KKyAgZm9yICg7OykgeworICAgIC8qIFRoZSBsb2NrIGJpdCBpcyBz ZXQgYnkgc29tZW9uZSBlbHNlLCB3YWl0IHVudGlsIGl0IGlzCisgICAgICAgdW5zZXQuICovCisg ICAgZm9yIChzcGlucyA9IDA7IHNwaW5zIDwgMTA7ICsrc3BpbnMpIHsKKyAgICAgIGFfc3Bpbigp OworICAgICAgLyogYmUgb3B0aW1pc3RpYyBhbmQgaG9wZSB0aGF0IHRoZSBsb2NrIGhhcyBiZWVu IHJlbGVhc2VkICovCisgICAgICByZWdpc3RlciB1bnNpZ25lZCBkZXMgPSB2YWwtMTsKKyAgICAg IHZhbCAtPSBjb250cmliOworICAgICAgaWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9u Z19leHBsaWNpdChsb2MsICZ2YWwsIGRlcywgbWVtb3J5X29yZGVyX2FjcV9yZWwsIG1lbW9yeV9v cmRlcl9jb25zdW1lKSkKKyAgICAgICAgZ290byBGSU5JU0g7CisgICAgICBpZiAoISh2YWwgJiBs b2NrYml0KSkgZ290byBCSVRfVU5TRVQ7CisgICAgfQorICAgIC8qIFRoZSBzYW1lIGlubmVyIGxv b3AgYXMgYmVmb3JlLCBidXQgd2l0aCBmdXRleCB3YWl0IGluc3RlYWQgb2YKKyAgICAgICBhX3Nw aW4uICovCisgICAgZm9yICg7OykgeworICAgICAgQUNDT1VOVChmdXRleCwgMSk7CisgICAgICBp ZiAoX19zeXNjYWxsKFNZU19mdXRleCwgbG9jLCBGVVRFWF9XQUlUfEZVVEVYX1BSSVZBVEUsIHZh bCwgMCkgPT0gLUVBR0FJTikKKyAgICAgICAgQUNDT1VOVChhZ2FpbiwgMSk7CisgICAgICAvKiBi ZSBvcHRpbWlzdGljIGFuZCBob3BlIHRoYXQgdGhlIGxvY2sgaGFzIGJlZW4gcmVsZWFzZWQgKi8K KyAgICAgIHJlZ2lzdGVyIHVuc2lnbmVkIGRlcyA9IHZhbC0xOworICAgICAgdmFsIC09IGNvbnRy aWI7CisgICAgICBpZiAoYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2Vfc3Ryb25nX2V4cGxpY2l0KGxv YywgJnZhbCwgZGVzLCBtZW1vcnlfb3JkZXJfYWNxX3JlbCwgbWVtb3J5X29yZGVyX2NvbnN1bWUp KQorICAgICAgICBnb3RvIEZJTklTSDsKKyAgICAgIGlmICghKHZhbCAmIGxvY2tiaXQpKSBnb3Rv IEJJVF9VTlNFVDsKKyAgICB9CisgICAgLyogVGhlIGxvY2sgYml0IGlzbid0IHNldCwgdHJ5IHRv IGFjcXVpcmUgaXQuICovCisgIEJJVF9VTlNFVDoKKyAgICBBQ0NPVU5UKHNwaW4sIHNwaW5zKTsK KyAgICBBQ0NPVU5UKHNsb3csIDEpOworICAgIGRvIHsKKyAgICAgIGFfc3BpbigpOworICAgICAg aWYgKGF0b21pY19jb21wYXJlX2V4Y2hhbmdlX3N0cm9uZ19leHBsaWNpdChsb2MsICZ2YWwsIHZh bHxsb2NrYml0LCBtZW1vcnlfb3JkZXJfYWNxX3JlbCwgbWVtb3J5X29yZGVyX2NvbnN1bWUpKQor ICAgICAgICBnb3RvIEZJTklTSDsKKyAgICB9IHdoaWxlICghKHZhbCAmIGxvY2tiaXQpKTsKKyAg fQorIEZJTklTSDoKKyNpZmRlZiBCRU5DSAorICBfX2ltcGxfdG90YWwgKz0gMTsKKyAgX19pbXBs X3Nsb3cgKz0gc2xvdzsKKyAgX19pbXBsX2Z1dGV4ICs9IGZ1dGV4OworICBfX2ltcGxfYWdhaW4g Kz0gYWdhaW47CisgIF9faW1wbF9zcGluICs9IHNwaW47CisjZW5kaWYKKyAgcmV0dXJuOworfQor Cit2b2lkIF9faW1wbF9tdXRfdW5sb2NrX3Nsb3coX0F0b21pYyh1bnNpZ25lZCkqIGxvYykKK3sK KyAgX19zeXNjYWxsKFNZU19mdXRleCwgbG9jLCBGVVRFWF9XQUtFfEZVVEVYX1BSSVZBVEUsIDEp OworfQpkaWZmIC0tZ2l0IGEvc3JjL3N0ZGF0b21pYy9hdG9taWNfZ2VuZXJpYy5jIGIvc3JjL3N0 ZGF0b21pYy9hdG9taWNfZ2VuZXJpYy5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAw MDAuLmM1MWU0ZGMKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RkYXRvbWljL2F0b21pY19nZW5l cmljLmMKQEAgLTAsMCArMSwyNDIgQEAKKyNpbmNsdWRlIDxsaW1pdHMuaD4KKyNpbmNsdWRlIDxz dHJpbmcuaD4KKyNpbmNsdWRlICJzdGRhdG9taWMtaW1wbC5oIgorI2luY2x1ZGUgImF0b21pY19n ZW5lcmljLmgiCisjaW5jbHVkZSAibGliYy5oIgorCisjaWZkZWYgSEFTSF9TVEFUCisjIGluY2x1 ZGUgPG1hdGguaD4KKyMgaW5jbHVkZSA8c3RkaW8uaD4KKyNlbmRpZgorCisvKiBUaGlzIGlzIGNv bXBhdGlibGUgd2l0aCBtdXNsJ3MgaW50ZXJuYWwgbG9ja3MuICovCisvKiBUaGUgbG9jayBpdHNl bGYgbXVzdCBiZSBsb2NrLWZyZWUsIHNvIGluIGdlbmVyYWwgdGhlIGNhbiBvbmx5IGJlIGFuCisg ICBhdG9taWNfZmxhZyBpZiB3ZSBrbm93IG5vdGhpbmcgZWxzZSBhYm91dCB0aGUgcGxhdGZvcm0u ICovCisKK3R5cGVkZWYgX0F0b21pYyh1bnNpZ25lZCkgX19pbXBsX2xvY2s7Cit2b2lkIF9faW1w bF9tdXRfbG9ja19zbG93KF9BdG9taWModW5zaWduZWQpKiBsb2MpOwordm9pZCBfX2ltcGxfbXV0 X3VubG9ja19zbG93KF9BdG9taWModW5zaWduZWQpKiBsb2MpOworCitzdGF0aWMgdW5zaWduZWQg Y29uc3QgY29udHJpYiA9ICgoVUlOVF9NQVgvMnUpKzJ1KTsKKworX19hdHRyaWJ1dGVfXygoX19h bHdheXNfaW5saW5lX18pKQorc3RhdGljIGlubGluZQordm9pZCBfX2ltcGxfbXV0X2xvY2soX0F0 b21pYyh1bnNpZ25lZCkqIGxvYykKK3sKKyAgaWYgKCFhdG9taWNfY29tcGFyZV9leGNoYW5nZV9z dHJvbmdfZXhwbGljaXQobG9jLCAodW5zaWduZWRbMV0peyAwIH0sIGNvbnRyaWIsIG1lbW9yeV9v cmRlcl9hY3FfcmVsLCBtZW1vcnlfb3JkZXJfY29uc3VtZSkpCisgICAgX19pbXBsX211dF9sb2Nr X3Nsb3cobG9jKTsKK30KKworX19hdHRyaWJ1dGVfXygoX19hbHdheXNfaW5saW5lX18pKQorc3Rh dGljIGlubGluZQordm9pZCBfX2ltcGxfbXV0X3VubG9jayhfQXRvbWljKHVuc2lnbmVkKSogbG9j KQoreworICBpZiAoY29udHJpYiAhPSBhdG9taWNfZmV0Y2hfc3ViX2V4cGxpY2l0KGxvYywgY29u dHJpYiwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpKQorICAgIF9faW1wbF9tdXRfdW5sb2NrX3Nsb3co bG9jKTsKK30KKworLyogdGhlIHNpemUgb2YgdGhpcyB0YWJsZSBoYXMgYSB0cmFkZSBvZmYgYmV0 d2VlbiB0aGUgcHJvYmFiaWxpdHkgb2YKKyAgIGNvbGxpc2lvbnMgKHRoZSBiaWdnZXIgdGhlIHRh YmxlLCB0aGUgYmV0dGVyKSBhbmQgdGhlIHdhc3RlIG9mCisgICBzcGFjZSAodGhlIHNtYWxsZXIs IHRoZSBiZXR0ZXIpLiAqLworCisjaWZuZGVmIEhCSVQKKyMgZGVmaW5lIEhCSVQgOAorI2VuZGlm CisvKiBsZW4gaXMgYSBwb3dlciBvZiB0d28gc3VjaCB0aGF0IHdlIGp1c3QgY2FuIG1hc2sgb3V0 IGhpZ2hlciBiaXRzICovCitlbnVtIHsgTEVOID0gMTw8SEJJVCwgfTsKK2VudW0geyBwdHJiaXQg PSBzaXplb2YodWludHB0cl90KSpDSEFSX0JJVCwgfTsKKworc3RhdGljIF9faW1wbF9sb2NrIHRh YmxlW0xFTl07CisKKyNpZmRlZiBIQVNIX1NUQVQKK3N0YXRpYyBfQXRvbWljKHNpemVfdCkgZHJh d1tMRU5dOworI2VuZGlmCisKKy8qIENob3NlIGEgbWVkaXVtIHNpemVkIHByaW1lIG51bWJlciBh cyBhIGZhY3Rvci4gVGhlIG11bHRpcGxpY2F0aW9uCisgICBieSBpdCBpcyBhIGJpamVjdGlvbiBt b2R1bG8gYW55IExFTi4gKi8KKyNkZWZpbmUgTUFHSUMgMTQ1MzAwMzlVCisKK19fYXR0cmlidXRl X18oKF9fdW51c2VkX18pKQorc3RhdGljCit1bnNpZ25lZCBfX2ltcGxfaGFzaCh2b2lkIHZvbGF0 aWxlIGNvbnN0KiBYKSB7CisJdWludHB0cl90IGNvbnN0IGxlbiA9IExFTjsKKwl1aW50cHRyX3Qg eCA9ICh1aW50cHRyX3QpWDsKKwl4ICo9IE1BR0lDOworCS8qIEJlIHN1cmUgdG8gdXNlIGFsbCBi aXRzIGluIHRoZSByZXN1bHQuICovCisJaWYgKHB0cmJpdCA+IDgqSEJJVCkgIHggXj0gKHggLyAo bGVuKmxlbipsZW4qbGVuKmxlbipsZW4qbGVuKmxlbikpOworCWlmIChwdHJiaXQgPiA0KkhCSVQp ICB4IF49ICh4IC8gKGxlbipsZW4qbGVuKmxlbikpOworCWlmIChwdHJiaXQgPiAyKkhCSVQpICB4 IF49ICh4IC8gKGxlbipsZW4pKTsKKwlpZiAocHRyYml0ID4gMSpIQklUKSAgeCBePSAoeCAvIGxl bik7CisJeCAlPSBsZW47CisjaWZkZWYgSEFTSF9TVEFUCisJYXRvbWljX2ZldGNoX2FkZF9leHBs aWNpdCgmZHJhd1t4XSwgMSwgbWVtb3J5X29yZGVyX3JlbGF4ZWQpOworI2VuZGlmCisJcmV0dXJu IHg7Cit9CisKK19fYXR0cmlidXRlX18oKF9fdW51c2VkX18pKQorc3RhdGljCit1bnNpZ25lZCBf X2ltcGxfamVua2luc19vbmVfYXRfYV90aW1lX2hhc2godm9pZCB2b2xhdGlsZSBjb25zdCogaykg eworCXVuaW9uIHsKKwkJdW5zaWduZWQgY2hhciBiW3NpemVvZiBrXTsKKwkJdWludHB0cl90IHY7 CisJCXZvaWQgdm9sYXRpbGUgY29uc3QqIGs7CisJfSBrZXkgPSB7IC5rID0gaywgfTsKKwl1aW50 cHRyX3QgaSwgeCA9IDA7CisJZm9yKGkgPSAwOyBpIDwgc2l6ZW9mKHVpbnRwdHJfdCk7ICsraSkg eworCQl4ICs9IGtleS5iW2ldOworCQl4ICs9ICh4IDw8IDEwKTsKKwkJeCBePSAoeCA+PiA2KTsK Kwl9CisJeCArPSAoeCA8PCAzKTsKKwl4IF49ICh4ID4+IDExKTsKKwl4ICs9ICh4IDw8IDE1KTsK Kwl4ICU9IExFTjsKKyNpZmRlZiBIQVNIX1NUQVQKKwlhdG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0 KCZkcmF3W3hdLCAxLCBtZW1vcnlfb3JkZXJfcmVsYXhlZCk7CisjZW5kaWYKKwlyZXR1cm4geDsK K30KKworX19hdHRyaWJ1dGVfXygoX191bnVzZWRfXykpCitzdGF0aWMKK3VpbnRwdHJfdCBfX2lt cGxfbWl4KHZvaWQgdm9sYXRpbGUgY29uc3QqIHgpIHsKKwl1aW50cHRyX3QgaCA9ICh1aW50cHRy X3QpeDsKKwloIF49IGggPj4gMTY7CisJaCAqPSAweDg1ZWJjYTZiOworCWggXj0gaCA+PiAxMzsK KwloICo9IDB4YzJiMmFlMzU7CisJaCBePSBoID4+IDE2OworCWggJT0gTEVOOworI2lmZGVmIEhB U0hfU1RBVAorCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQoJmRyYXdbaF0sIDEsIG1lbW9yeV9v cmRlcl9yZWxheGVkKTsKKyNlbmRpZgorCXJldHVybiBoOworfQorCitfX2F0dHJpYnV0ZV9fKChf X3VudXNlZF9fKSkKK3N0YXRpYwordWludHB0cl90IF9faW1wbF84KHZvaWQgdm9sYXRpbGUgY29u c3QqIHgpIHsKKwl1aW50cHRyX3QgaCA9ICh1aW50cHRyX3QpeDsKKwloIF49IChoID4+IDgpOwor CWggJT0gTEVOOworI2lmZGVmIEhBU0hfU1RBVAorCWF0b21pY19mZXRjaF9hZGRfZXhwbGljaXQo JmRyYXdbaF0sIDEsIG1lbW9yeV9vcmRlcl9yZWxheGVkKTsKKyNlbmRpZgorCXJldHVybiBoOwor fQorCisjaWZuZGVmIF9fQVRPTUlDX0hBU0gKKyMgZGVmaW5lIF9fQVRPTUlDX0hBU0ggX19pbXBs X2hhc2gKKyNlbmRpZgorI2RlZmluZSBoYXNoIF9fQVRPTUlDX0hBU0gKKworCit2b2lkIF9faW1w bF9sb2FkIChzaXplX3Qgc2l6ZSwgdm9pZCB2b2xhdGlsZSogcHRyLCB2b2lkIHZvbGF0aWxlKiBy ZXQsIGludCBtbykgeworCXVuc2lnbmVkIHBvcyA9IGhhc2gocHRyKTsKKwlfX2ltcGxfbXV0X2xv Y2soJnRhYmxlW3Bvc10pOworCWlmIChtbyA9PSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKwkJYXRv bWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisJbWVtY3B5KCh2b2lkKily ZXQsICh2b2lkKilwdHIsIHNpemUpOworCV9faW1wbF9tdXRfdW5sb2NrKCZ0YWJsZVtwb3NdKTsK K30KKwordm9pZCBfX2ltcGxfc3RvcmUgKHNpemVfdCBzaXplLCB2b2lkIHZvbGF0aWxlKiBwdHIs IHZvaWQgY29uc3Qgdm9sYXRpbGUqIHZhbCwgaW50IG1vKSB7CisJdW5zaWduZWQgcG9zID0gaGFz aChwdHIpOworCV9faW1wbF9tdXRfbG9jaygmdGFibGVbcG9zXSk7CisJbWVtY3B5KCh2b2lkKilw dHIsICh2b2lkKil2YWwsIHNpemUpOworCWlmIChtbyA9PSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkK KwkJYXRvbWljX3RocmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisJX19pbXBsX211 dF91bmxvY2soJnRhYmxlW3Bvc10pOworfQorCitzdGF0aWMKK3ZvaWQgYXRvbWljX2V4Y2hhbmdl X3Jlc3RyaWN0IChzaXplX3Qgc2l6ZSwgdm9pZCB2b2xhdGlsZSpfX3Jlc3RyaWN0X18gcHRyLCB2 b2lkIGNvbnN0IHZvbGF0aWxlKl9fcmVzdHJpY3RfXyB2YWwsIHZvaWQgdm9sYXRpbGUqX19yZXN0 cmljdF9fIHJldCwgaW50IG1vKSB7CisJdW5zaWduZWQgcG9zID0gaGFzaChwdHIpOworCV9faW1w bF9tdXRfbG9jaygmdGFibGVbcG9zXSk7CisJbWVtY3B5KCh2b2lkKilyZXQsICh2b2lkKilwdHIs IHNpemUpOworCWlmIChtbyA9PSBtZW1vcnlfb3JkZXJfc2VxX2NzdCkKKwkJYXRvbWljX3RocmVh ZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisJbWVtY3B5KCh2b2lkKilwdHIsICh2b2lk Kil2YWwsIHNpemUpOworCV9faW1wbF9tdXRfdW5sb2NrKCZ0YWJsZVtwb3NdKTsKK30KKwordm9p ZCBfX2ltcGxfZXhjaGFuZ2UgKHNpemVfdCBzaXplLCB2b2lkIHZvbGF0aWxlKl9fcmVzdHJpY3Rf XyBwdHIsIHZvaWQgY29uc3Qgdm9sYXRpbGUqIHZhbCwgdm9pZCB2b2xhdGlsZSogcmV0LCBpbnQg bW8pIHsKKwlpZiAodmFsID09IHJldCkgeworCQl1bnNpZ25lZCBjaGFyIGJ1ZmZlcltzaXplXTsK KwkJYXRvbWljX2V4Y2hhbmdlX3Jlc3RyaWN0KHNpemUsIHB0ciwgdmFsLCBidWZmZXIsIG1vKTsK KwkJbWVtY3B5KCh2b2lkKilyZXQsIGJ1ZmZlciwgc2l6ZSk7CisJfSBlbHNlIHsKKwkJYXRvbWlj X2V4Y2hhbmdlX3Jlc3RyaWN0KHNpemUsIHB0ciwgdmFsLCByZXQsIG1vKTsKKwl9Cit9CisKK19C b29sIF9faW1wbF9jb21wYXJlX2V4Y2hhbmdlIChzaXplX3Qgc2l6ZSwgdm9pZCB2b2xhdGlsZSog cHRyLCB2b2lkIHZvbGF0aWxlKiBleHBlY3RlZCwgdm9pZCBjb25zdCB2b2xhdGlsZSogZGVzaXJl ZCwgaW50IG1vcywgaW50IG1vZikgeworCXVuc2lnbmVkIHBvcyA9IGhhc2gocHRyKTsKKwlfX2lt cGxfbXV0X2xvY2soJnRhYmxlW3Bvc10pOworCV9Cb29sIHJldCA9ICFtZW1jbXAoKHZvaWQqKXB0 ciwgKHZvaWQqKWV4cGVjdGVkLCBzaXplKTsKKwlpZiAocmV0KSB7CisJCW1lbWNweSgodm9pZCop cHRyLCAodm9pZCopZGVzaXJlZCwgc2l6ZSk7CisJCWlmIChtb3MgPT0gbWVtb3J5X29yZGVyX3Nl cV9jc3QpCisJCQlhdG9taWNfdGhyZWFkX2ZlbmNlKG1lbW9yeV9vcmRlcl9zZXFfY3N0KTsKKwl9 IGVsc2UgeworCQlpZiAobW9mID09IG1lbW9yeV9vcmRlcl9zZXFfY3N0KQorCQkJYXRvbWljX3Ro cmVhZF9mZW5jZShtZW1vcnlfb3JkZXJfc2VxX2NzdCk7CisJCW1lbWNweSgodm9pZCopZXhwZWN0 ZWQsICh2b2lkKilwdHIsIHNpemUpOworCX0KKwlfX2ltcGxfbXV0X3VubG9jaygmdGFibGVbcG9z XSk7CisJLyogZnByaW50ZihzdGRlcnIsICJjYXMgZm9yICVwICglenUpIGF0IHBvcyAldSwgJXMs IGV4cCAlcCwgZGVzICVwXG4iLCAqLworCS8qICAgICAgICAgcHRyLCBzaXplLCBwb3MsIHJldCA/ ICJzdWNlZWRlZCIgOiAiZmFpbGVkIiwgKi8KKwkvKiAgICAgICAgIGV4cGVjdGVkLCBkZXNpcmVk KTsgKi8KKwlyZXR1cm4gcmV0OworfQorCisvKiBUbyBjb2xsZWN0IGhhc2ggc3RhdGlzdGljcyBh Ym91dCBhdG9taWNzLCBjb21waWxlIHdpdGgKKyAgIGBgSEFTSF9TVEFUJycgKi8KK3ZvaWQgX19p bXBsX3ByaW50X3N0YXQodm9pZCkgeworI2lmZGVmIEhBU0hfU1RBVAorCXNpemVfdCB4MSA9IDA7 CisJc2l6ZV90IHgyID0gMDsKKwlzaXplX3QgbWluID0gLTE7CisJc2l6ZV90IG1heCA9IDA7CisJ c2l6ZV90IGk7CisJZm9yIChpID0gMDsgaSA8IExFTjsgaSsrKSB7CisJCXNpemVfdCB2YWwgPSBh dG9taWNfbG9hZCgmZHJhd1tpXSk7CisJCWZwcmludGYoc3RkZXJyLCAiXHQlenUiLCB2YWwpOwor CQlpZiAoKGkgJSA4KSA9PSA3KSBmcHV0YygnXG4nLCBzdGRlcnIpOworCQl4MSArPSB2YWw7CisJ CXgyICs9IHZhbCp2YWw7CisJCWlmICh2YWwgPCBtaW4pIG1pbiA9IHZhbDsKKwkJaWYgKHZhbCA+ IG1heCkgbWF4ID0gdmFsOworCX0KKwlmcHV0YygnXG4nLCBzdGRlcnIpOworCWRvdWJsZSBhdmcx ID0gKHgxKzAuMCkvTEVOOworCWRvdWJsZSBhdmcyID0gKHgyKzAuMCkvTEVOOworCWRvdWJsZSB2 YXIgPSBhdmcyIC0gYXZnMSphdmcxOworCWZwcmludGYoc3RkZXJyLCAiaGFzaCB1dGlsaXNhdGlv biwgJWQgcG9zaXRpb25zLCAlenUgZHJhd3M6ICV6dSA8ICVlICgrJWUpIDwgJXp1XG4iLAorCSAg ICAgICAgTEVOLCB4MSwgbWluLCBhdmcxLCBzcXJ0KHZhciksIG1heCk7CisjZW5kaWYKK30KKwor LyogRm9yIHRoZSBmb3VyIGZ1bmN0aW9ucyBkZWZpbmVkIGhlcmUsIHdlIG5lZWQgdHdvIGVudHJp ZXMgaW4gdGhlCisgICBzeW1ib2wgdGFibGUuIE9uZSB3aWxsIGJlIHRoZSBmaW5hbCBsaW5rIG5h bWUgb2YgdGhlIHJlcGxhY2VtZW50CisgICBzdHViLCBzb21ldGhpbmcgbGlrZSBfX2F0b21pY19s b2FkLCBlLmcuIFRoZSBvdGhlciBvbmUgaXMgdGhlCisgICBfX2ltcGwgcHJlZml4ZWQgbmFtZS4g SXQgbWF5IGV2ZW50dWFsbHkgYmUgdXNlZCBieSB0aGUgZml4ZWQtc2l6ZWQKKyAgIHN0dWIgZnVu Y3Rpb25zLCBzaW5jZSB0aGVzZSBjYW4ndCB1c2UgdGhlIG5hbWUgdGhhdCBjb3JyZXNwb25kcyB0 bworICAgdGhlIGJ1aWx0aW4uCisKKyAgIFRoZSByZXBsYWNlbWVudCB0byB0aGUgZmluYWwgbmFt ZSBpcyBub3QgZG9uZSB3aXRoaW4gY29tcGlsaW5nLAorICAgc2luY2UgdGhlIG5hbWUgY2xhc2hl cyBjYW4gb25seSBjcmVhdGUgY29uZmxpY3RzIGZvciBhIEMKKyAgIGNvbXBpbGVyLiBJbnN0ZWFk LCB3ZSB1c2UgYW4gZXh0ZXJuYWwgdG9vbCAob2JqY29weSkgdGhhdCBkb2VzIHRoZQorICAgcmVu YW1pbmcuCisKKyAgIFdlIHdhbnQgdGhlc2UgdG8gYmUgc3Ryb25nIGFsaWFzZXMsIHNvIHRoZXkg Y2FuJ3QgYWNjaWRlbnRhbGx5IGJlCisgICByZXBsYWNlZC4gVGhlcmVmb3JlIHdlIGNhbid0IHVz ZSBtdXNsJ3Mgd2Vha19hbGlhcyBtYWNybyBidXQgY3JlYXRlCisgICBvbmUgb2Ygb3VyIG93bi4g Ki8KKworI2RlZmluZSBhbGlhcyhYLCBZKSBfX2F0dHJpYnV0ZV9fKChfX2FsaWFzX18oI1gpKSkg X190eXBlb2ZfXyhYKSBZCisKK2FsaWFzKF9faW1wbF9sb2FkLCBfX2ltcGxfbG9hZF9yZXBsYWNl KTsKK2FsaWFzKF9faW1wbF9zdG9yZSwgX19pbXBsX3N0b3JlX3JlcGxhY2UpOworYWxpYXMoX19p bXBsX2V4Y2hhbmdlLCBfX2ltcGxfZXhjaGFuZ2VfcmVwbGFjZSk7CithbGlhcyhfX2ltcGxfY29t cGFyZV9leGNoYW5nZSwgX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2VfcmVwbGFjZSk7CmRpZmYgLS1n aXQgYS9zcmMvc3RkYXRvbWljL2F0b21pY19nZW5lcmljXzEuYyBiL3NyYy9zdGRhdG9taWMvYXRv bWljX2dlbmVyaWNfMS5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjcyMjY1 N2IKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvc3RkYXRvbWljL2F0b21pY19nZW5lcmljXzEuYwpA QCAtMCwwICsxLDEwIEBACisKKyNpbmNsdWRlICJzdGRhdG9taWMtaW1wbC5oIgorCisjaWZkZWYg X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfMQorSU5TVEFOVElBVEVfU1RVQl9MRigx LCB1aW50OF90KQorI2Vsc2UKK0lOU1RBTlRJQVRFX1NUVUJfTEMoMSwgdWludDhfdCkKKyNlbmRp ZgorCitJTlNUQU5USUFURV9TWU5DKDEsIHVpbnQ4X3QpCmRpZmYgLS1naXQgYS9zcmMvc3RkYXRv bWljL2F0b21pY19nZW5lcmljXzE2LmMgYi9zcmMvc3RkYXRvbWljL2F0b21pY19nZW5lcmljXzE2 LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYWM1MTA1ZgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9zdGRhdG9taWMvYXRvbWljX2dlbmVyaWNfMTYuYwpAQCAtMCwwICsxLDE1 IEBACisKKyNpbmNsdWRlICJzdGRhdG9taWMtaW1wbC5oIgorCisjaWZkZWYgX19HQ0NfSEFWRV9T WU5DX0NPTVBBUkVfQU5EX1NXQVBfMTYKK0lOU1RBTlRJQVRFX1NUVUJfTEYoMTYsIF9faW1wbF91 aW50MTI4X3QpCitJTlNUQU5USUFURV9TWU5DKDE2LCBfX2ltcGxfdWludDEyOF90KQorI2Vsc2UK K0lOU1RBTlRJQVRFX1NUVUJfTENNKDE2LCBfX2ltcGxfdWludDEyOF90KQorSU5TVEFOVElBVEVf U1lOQ00oMTYsIF9faW1wbF91aW50MTI4X3QpCisjIGlmIF9fVUlOVDEyOF9fCitJTlNUQU5USUFU RV9TVFVCX0xDQSgxNiwgX19pbXBsX3VpbnQxMjhfdCkKK0lOU1RBTlRJQVRFX1NZTkNBKDE2LCBf X2ltcGxfdWludDEyOF90KQorIyBlbmRpZgorI2VuZGlmCisKZGlmZiAtLWdpdCBhL3NyYy9zdGRh dG9taWMvYXRvbWljX2dlbmVyaWNfMi5jIGIvc3JjL3N0ZGF0b21pYy9hdG9taWNfZ2VuZXJpY18y LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTgyNDRmMgotLS0gL2Rldi9u dWxsCisrKyBiL3NyYy9zdGRhdG9taWMvYXRvbWljX2dlbmVyaWNfMi5jCkBAIC0wLDAgKzEsMTAg QEAKKworI2luY2x1ZGUgInN0ZGF0b21pYy1pbXBsLmgiCisKKyNpZmRlZiBfX0dDQ19IQVZFX1NZ TkNfQ09NUEFSRV9BTkRfU1dBUF8yCitJTlNUQU5USUFURV9TVFVCX0xGKDIsIHVpbnQxNl90KQor I2Vsc2UKK0lOU1RBTlRJQVRFX1NUVUJfTEMoMiwgdWludDE2X3QpCisjZW5kaWYKKworSU5TVEFO VElBVEVfU1lOQygyLCB1aW50MTZfdCkKZGlmZiAtLWdpdCBhL3NyYy9zdGRhdG9taWMvYXRvbWlj X2dlbmVyaWNfNC5jIGIvc3JjL3N0ZGF0b21pYy9hdG9taWNfZ2VuZXJpY180LmMKbmV3IGZpbGUg bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uN2IxNjkzZgotLS0gL2Rldi9udWxsCisrKyBiL3Ny Yy9zdGRhdG9taWMvYXRvbWljX2dlbmVyaWNfNC5jCkBAIC0wLDAgKzEsMTAgQEAKKworI2luY2x1 ZGUgInN0ZGF0b21pYy1pbXBsLmgiCisKKyNpZmRlZiBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9B TkRfU1dBUF80CitJTlNUQU5USUFURV9TVFVCX0xGKDQsIHVpbnQzMl90KQorI2Vsc2UKK0lOU1RB TlRJQVRFX1NUVUJfTEMoNCwgdWludDMyX3QpCisjZW5kaWYKKworSU5TVEFOVElBVEVfU1lOQyg0 LCB1aW50MzJfdCkKZGlmZiAtLWdpdCBhL3NyYy9zdGRhdG9taWMvYXRvbWljX2dlbmVyaWNfOC5j IGIvc3JjL3N0ZGF0b21pYy9hdG9taWNfZ2VuZXJpY184LmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK aW5kZXggMDAwMDAwMC4uZDY1MjQ5NwotLS0gL2Rldi9udWxsCisrKyBiL3NyYy9zdGRhdG9taWMv YXRvbWljX2dlbmVyaWNfOC5jCkBAIC0wLDAgKzEsMTAgQEAKKworI2luY2x1ZGUgInN0ZGF0b21p Yy1pbXBsLmgiCisKKyNpZmRlZiBfX0dDQ19IQVZFX1NZTkNfQ09NUEFSRV9BTkRfU1dBUF84CitJ TlNUQU5USUFURV9TVFVCX0xGKDgsIHVpbnQ2NF90KQorI2Vsc2UKK0lOU1RBTlRJQVRFX1NUVUJf TEMoOCwgdWludDY0X3QpCisjZW5kaWYKKworSU5TVEFOVElBVEVfU1lOQyg4LCB1aW50NjRfdCkK ZGlmZiAtLWdpdCBhL3NyYy9zdGRhdG9taWMvcmVkZWZpbmVfc3ltcy5zaCBiL3NyYy9zdGRhdG9t aWMvcmVkZWZpbmVfc3ltcy5zaApuZXcgZmlsZSBtb2RlIDEwMDc1NQppbmRleCAwMDAwMDAwLi4z MTc0MGM1Ci0tLSAvZGV2L251bGwKKysrIGIvc3JjL3N0ZGF0b21pYy9yZWRlZmluZV9zeW1zLnNo CkBAIC0wLDAgKzEsMTAgQEAKKyMhL2Jpbi9zaAorCitvYmplY3RzPSQobHMgKi5vKQorCitmb3Ig b2JqIGluICR7b2JqZWN0c30gOyBkbworICAgIG9iamNvcHkgLS1yZWRlZmluZS1zeW1zPXJlZGVm aW5lX3N5bXMudHh0ICR7b2JqfSB0bXAubworICAgIG12IHRtcC5vICR7b2JqfQorICAgIG9iamNv cHkgLS1yZWRlZmluZS1zeW1zPXJlZGVmaW5lX3N5bXMudHh0ICR7b2JqJS5vfS5sbyB0bXAubwor ICAgIG12IHRtcC5vICR7b2JqJS5vfS5sbworZG9uZQpkaWZmIC0tZ2l0IGEvc3JjL3N0ZGF0b21p Yy9yZWRlZmluZV9zeW1zLnR4dCBiL3NyYy9zdGRhdG9taWMvcmVkZWZpbmVfc3ltcy50eHQKbmV3 IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNTE5N2E0OQotLS0gL2Rldi9udWxsCisr KyBiL3NyYy9zdGRhdG9taWMvcmVkZWZpbmVfc3ltcy50eHQKQEAgLTAsMCArMSwxNDQgQEAKK19f aW1wbF9sb2FkXzEgX19hdG9taWNfbG9hZF8xCitfX2ltcGxfc3RvcmVfMSBfX2F0b21pY19zdG9y ZV8xCitfX2ltcGxfZXhjaGFuZ2VfMSBfX2F0b21pY19leGNoYW5nZV8xCitfX2ltcGxfY29tcGFy ZV9leGNoYW5nZV8xIF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMQorX19pbXBsX2ZldGNoX2Fk ZF8xIF9fYXRvbWljX2ZldGNoX2FkZF8xCitfX2ltcGxfZmV0Y2hfc3ViXzEgX19hdG9taWNfZmV0 Y2hfc3ViXzEKK19faW1wbF9mZXRjaF9hbmRfMSBfX2F0b21pY19mZXRjaF9hbmRfMQorX19pbXBs X2ZldGNoX3hvcl8xIF9fYXRvbWljX2ZldGNoX3hvcl8xCitfX2ltcGxfZmV0Y2hfbmFuZF8xIF9f YXRvbWljX2ZldGNoX25hbmRfMQorX19pbXBsX2ZldGNoX29yXzEgX19hdG9taWNfZmV0Y2hfb3Jf MQorX19pbXBsX2FkZF9mZXRjaF8xIF9fYXRvbWljX2FkZF9mZXRjaF8xCitfX2ltcGxfc3ViX2Zl dGNoXzEgX19hdG9taWNfc3ViX2ZldGNoXzEKK19faW1wbF9hbmRfZmV0Y2hfMSBfX2F0b21pY19h bmRfZmV0Y2hfMQorX19pbXBsX3hvcl9mZXRjaF8xIF9fYXRvbWljX3hvcl9mZXRjaF8xCitfX2lt cGxfbmFuZF9mZXRjaF8xIF9fYXRvbWljX25hbmRfZmV0Y2hfMQorX19pbXBsX29yX2ZldGNoXzEg X19hdG9taWNfb3JfZmV0Y2hfMQorX19pbXBsX2xvYWRfMiBfX2F0b21pY19sb2FkXzIKK19faW1w bF9zdG9yZV8yIF9fYXRvbWljX3N0b3JlXzIKK19faW1wbF9leGNoYW5nZV8yIF9fYXRvbWljX2V4 Y2hhbmdlXzIKK19faW1wbF9jb21wYXJlX2V4Y2hhbmdlXzIgX19hdG9taWNfY29tcGFyZV9leGNo YW5nZV8yCitfX2ltcGxfZmV0Y2hfYWRkXzIgX19hdG9taWNfZmV0Y2hfYWRkXzIKK19faW1wbF9m ZXRjaF9zdWJfMiBfX2F0b21pY19mZXRjaF9zdWJfMgorX19pbXBsX2ZldGNoX2FuZF8yIF9fYXRv bWljX2ZldGNoX2FuZF8yCitfX2ltcGxfZmV0Y2hfeG9yXzIgX19hdG9taWNfZmV0Y2hfeG9yXzIK K19faW1wbF9mZXRjaF9uYW5kXzIgX19hdG9taWNfZmV0Y2hfbmFuZF8yCitfX2ltcGxfZmV0Y2hf b3JfMiBfX2F0b21pY19mZXRjaF9vcl8yCitfX2ltcGxfYWRkX2ZldGNoXzIgX19hdG9taWNfYWRk X2ZldGNoXzIKK19faW1wbF9zdWJfZmV0Y2hfMiBfX2F0b21pY19zdWJfZmV0Y2hfMgorX19pbXBs X2FuZF9mZXRjaF8yIF9fYXRvbWljX2FuZF9mZXRjaF8yCitfX2ltcGxfeG9yX2ZldGNoXzIgX19h dG9taWNfeG9yX2ZldGNoXzIKK19faW1wbF9uYW5kX2ZldGNoXzIgX19hdG9taWNfbmFuZF9mZXRj aF8yCitfX2ltcGxfb3JfZmV0Y2hfMiBfX2F0b21pY19vcl9mZXRjaF8yCitfX2ltcGxfbG9hZF80 IF9fYXRvbWljX2xvYWRfNAorX19pbXBsX3N0b3JlXzQgX19hdG9taWNfc3RvcmVfNAorX19pbXBs X2V4Y2hhbmdlXzQgX19hdG9taWNfZXhjaGFuZ2VfNAorX19pbXBsX2NvbXBhcmVfZXhjaGFuZ2Vf NCBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlXzQKK19faW1wbF9mZXRjaF9hZGRfNCBfX2F0b21p Y19mZXRjaF9hZGRfNAorX19pbXBsX2ZldGNoX3N1Yl80IF9fYXRvbWljX2ZldGNoX3N1Yl80Citf X2ltcGxfZmV0Y2hfYW5kXzQgX19hdG9taWNfZmV0Y2hfYW5kXzQKK19faW1wbF9mZXRjaF94b3Jf NCBfX2F0b21pY19mZXRjaF94b3JfNAorX19pbXBsX2ZldGNoX25hbmRfNCBfX2F0b21pY19mZXRj aF9uYW5kXzQKK19faW1wbF9mZXRjaF9vcl80IF9fYXRvbWljX2ZldGNoX29yXzQKK19faW1wbF9h ZGRfZmV0Y2hfNCBfX2F0b21pY19hZGRfZmV0Y2hfNAorX19pbXBsX3N1Yl9mZXRjaF80IF9fYXRv bWljX3N1Yl9mZXRjaF80CitfX2ltcGxfYW5kX2ZldGNoXzQgX19hdG9taWNfYW5kX2ZldGNoXzQK K19faW1wbF94b3JfZmV0Y2hfNCBfX2F0b21pY194b3JfZmV0Y2hfNAorX19pbXBsX25hbmRfZmV0 Y2hfNCBfX2F0b21pY19uYW5kX2ZldGNoXzQKK19faW1wbF9vcl9mZXRjaF80IF9fYXRvbWljX29y X2ZldGNoXzQKK19faW1wbF9sb2FkXzggX19hdG9taWNfbG9hZF84CitfX2ltcGxfc3RvcmVfOCBf X2F0b21pY19zdG9yZV84CitfX2ltcGxfZXhjaGFuZ2VfOCBfX2F0b21pY19leGNoYW5nZV84Citf X2ltcGxfY29tcGFyZV9leGNoYW5nZV84IF9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfOAorX19p bXBsX2ZldGNoX2FkZF84IF9fYXRvbWljX2ZldGNoX2FkZF84CitfX2ltcGxfZmV0Y2hfc3ViXzgg X19hdG9taWNfZmV0Y2hfc3ViXzgKK19faW1wbF9mZXRjaF9hbmRfOCBfX2F0b21pY19mZXRjaF9h bmRfOAorX19pbXBsX2ZldGNoX3hvcl84IF9fYXRvbWljX2ZldGNoX3hvcl84CitfX2ltcGxfZmV0 Y2hfbmFuZF84IF9fYXRvbWljX2ZldGNoX25hbmRfOAorX19pbXBsX2ZldGNoX29yXzggX19hdG9t aWNfZmV0Y2hfb3JfOAorX19pbXBsX2FkZF9mZXRjaF84IF9fYXRvbWljX2FkZF9mZXRjaF84Citf X2ltcGxfc3ViX2ZldGNoXzggX19hdG9taWNfc3ViX2ZldGNoXzgKK19faW1wbF9hbmRfZmV0Y2hf OCBfX2F0b21pY19hbmRfZmV0Y2hfOAorX19pbXBsX3hvcl9mZXRjaF84IF9fYXRvbWljX3hvcl9m ZXRjaF84CitfX2ltcGxfbmFuZF9mZXRjaF84IF9fYXRvbWljX25hbmRfZmV0Y2hfOAorX19pbXBs X29yX2ZldGNoXzggX19hdG9taWNfb3JfZmV0Y2hfOAorX19pbXBsX2xvYWRfMTYgX19hdG9taWNf bG9hZF8xNgorX19pbXBsX3N0b3JlXzE2IF9fYXRvbWljX3N0b3JlXzE2CitfX2ltcGxfZXhjaGFu Z2VfMTYgX19hdG9taWNfZXhjaGFuZ2VfMTYKK19faW1wbF9jb21wYXJlX2V4Y2hhbmdlXzE2IF9f YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2VfMTYKK19faW1wbF9mZXRjaF9hZGRfMTYgX19hdG9taWNf ZmV0Y2hfYWRkXzE2CitfX2ltcGxfZmV0Y2hfc3ViXzE2IF9fYXRvbWljX2ZldGNoX3N1Yl8xNgor X19pbXBsX2ZldGNoX2FuZF8xNiBfX2F0b21pY19mZXRjaF9hbmRfMTYKK19faW1wbF9mZXRjaF94 b3JfMTYgX19hdG9taWNfZmV0Y2hfeG9yXzE2CitfX2ltcGxfZmV0Y2hfbmFuZF8xNiBfX2F0b21p Y19mZXRjaF9uYW5kXzE2CitfX2ltcGxfZmV0Y2hfb3JfMTYgX19hdG9taWNfZmV0Y2hfb3JfMTYK K19faW1wbF9hZGRfZmV0Y2hfMTYgX19hdG9taWNfYWRkX2ZldGNoXzE2CitfX2ltcGxfc3ViX2Zl dGNoXzE2IF9fYXRvbWljX3N1Yl9mZXRjaF8xNgorX19pbXBsX2FuZF9mZXRjaF8xNiBfX2F0b21p Y19hbmRfZmV0Y2hfMTYKK19faW1wbF94b3JfZmV0Y2hfMTYgX19hdG9taWNfeG9yX2ZldGNoXzE2 CitfX2ltcGxfbmFuZF9mZXRjaF8xNiBfX2F0b21pY19uYW5kX2ZldGNoXzE2CitfX2ltcGxfb3Jf ZmV0Y2hfMTYgX19hdG9taWNfb3JfZmV0Y2hfMTYKK19faW1wbF9ib29sX2NvbXBhcmVfYW5kX3N3 YXBfMSBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzEKK19faW1wbF92YWxfY29tcGFyZV9h bmRfc3dhcF8xIF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF8xCitfX2ltcGxfZmV0Y2hfYW5k X2FkZF8xIF9fc3luY19mZXRjaF9hbmRfYWRkXzEKK19faW1wbF9mZXRjaF9hbmRfc3ViXzEgX19z eW5jX2ZldGNoX2FuZF9zdWJfMQorX19pbXBsX2ZldGNoX2FuZF9hbmRfMSBfX3N5bmNfZmV0Y2hf YW5kX2FuZF8xCitfX2ltcGxfZmV0Y2hfYW5kX3hvcl8xIF9fc3luY19mZXRjaF9hbmRfeG9yXzEK K19faW1wbF9mZXRjaF9hbmRfb3JfMSBfX3N5bmNfZmV0Y2hfYW5kX29yXzEKK19faW1wbF9hZGRf YW5kX2ZldGNoXzEgX19zeW5jX2FkZF9hbmRfZmV0Y2hfMQorX19pbXBsX3N1Yl9hbmRfZmV0Y2hf MSBfX3N5bmNfc3ViX2FuZF9mZXRjaF8xCitfX2ltcGxfYW5kX2FuZF9mZXRjaF8xIF9fc3luY19h bmRfYW5kX2ZldGNoXzEKK19faW1wbF94b3JfYW5kX2ZldGNoXzEgX19zeW5jX3hvcl9hbmRfZmV0 Y2hfMQorX19pbXBsX29yX2FuZF9mZXRjaF8xIF9fc3luY19vcl9hbmRfZmV0Y2hfMQorX19pbXBs X2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8yIF9fc3luY19ib29sX2NvbXBhcmVfYW5kX3N3YXBfMgor X19pbXBsX3ZhbF9jb21wYXJlX2FuZF9zd2FwXzIgX19zeW5jX3ZhbF9jb21wYXJlX2FuZF9zd2Fw XzIKK19faW1wbF9mZXRjaF9hbmRfYWRkXzIgX19zeW5jX2ZldGNoX2FuZF9hZGRfMgorX19pbXBs X2ZldGNoX2FuZF9zdWJfMiBfX3N5bmNfZmV0Y2hfYW5kX3N1Yl8yCitfX2ltcGxfZmV0Y2hfYW5k X2FuZF8yIF9fc3luY19mZXRjaF9hbmRfYW5kXzIKK19faW1wbF9mZXRjaF9hbmRfeG9yXzIgX19z eW5jX2ZldGNoX2FuZF94b3JfMgorX19pbXBsX2ZldGNoX2FuZF9vcl8yIF9fc3luY19mZXRjaF9h bmRfb3JfMgorX19pbXBsX2FkZF9hbmRfZmV0Y2hfMiBfX3N5bmNfYWRkX2FuZF9mZXRjaF8yCitf X2ltcGxfc3ViX2FuZF9mZXRjaF8yIF9fc3luY19zdWJfYW5kX2ZldGNoXzIKK19faW1wbF9hbmRf YW5kX2ZldGNoXzIgX19zeW5jX2FuZF9hbmRfZmV0Y2hfMgorX19pbXBsX3hvcl9hbmRfZmV0Y2hf MiBfX3N5bmNfeG9yX2FuZF9mZXRjaF8yCitfX2ltcGxfb3JfYW5kX2ZldGNoXzIgX19zeW5jX29y X2FuZF9mZXRjaF8yCitfX2ltcGxfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzQgX19zeW5jX2Jvb2xf Y29tcGFyZV9hbmRfc3dhcF80CitfX2ltcGxfdmFsX2NvbXBhcmVfYW5kX3N3YXBfNCBfX3N5bmNf dmFsX2NvbXBhcmVfYW5kX3N3YXBfNAorX19pbXBsX2ZldGNoX2FuZF9hZGRfNCBfX3N5bmNfZmV0 Y2hfYW5kX2FkZF80CitfX2ltcGxfZmV0Y2hfYW5kX3N1Yl80IF9fc3luY19mZXRjaF9hbmRfc3Vi XzQKK19faW1wbF9mZXRjaF9hbmRfYW5kXzQgX19zeW5jX2ZldGNoX2FuZF9hbmRfNAorX19pbXBs X2ZldGNoX2FuZF94b3JfNCBfX3N5bmNfZmV0Y2hfYW5kX3hvcl80CitfX2ltcGxfZmV0Y2hfYW5k X29yXzQgX19zeW5jX2ZldGNoX2FuZF9vcl80CitfX2ltcGxfYWRkX2FuZF9mZXRjaF80IF9fc3lu Y19hZGRfYW5kX2ZldGNoXzQKK19faW1wbF9zdWJfYW5kX2ZldGNoXzQgX19zeW5jX3N1Yl9hbmRf ZmV0Y2hfNAorX19pbXBsX2FuZF9hbmRfZmV0Y2hfNCBfX3N5bmNfYW5kX2FuZF9mZXRjaF80Citf X2ltcGxfeG9yX2FuZF9mZXRjaF80IF9fc3luY194b3JfYW5kX2ZldGNoXzQKK19faW1wbF9vcl9h bmRfZmV0Y2hfNCBfX3N5bmNfb3JfYW5kX2ZldGNoXzQKK19faW1wbF9ib29sX2NvbXBhcmVfYW5k X3N3YXBfOCBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2FwXzgKK19faW1wbF92YWxfY29tcGFy ZV9hbmRfc3dhcF84IF9fc3luY192YWxfY29tcGFyZV9hbmRfc3dhcF84CitfX2ltcGxfZmV0Y2hf YW5kX2FkZF84IF9fc3luY19mZXRjaF9hbmRfYWRkXzgKK19faW1wbF9mZXRjaF9hbmRfc3ViXzgg X19zeW5jX2ZldGNoX2FuZF9zdWJfOAorX19pbXBsX2ZldGNoX2FuZF9hbmRfOCBfX3N5bmNfZmV0 Y2hfYW5kX2FuZF84CitfX2ltcGxfZmV0Y2hfYW5kX3hvcl84IF9fc3luY19mZXRjaF9hbmRfeG9y XzgKK19faW1wbF9mZXRjaF9hbmRfb3JfOCBfX3N5bmNfZmV0Y2hfYW5kX29yXzgKK19faW1wbF9h ZGRfYW5kX2ZldGNoXzggX19zeW5jX2FkZF9hbmRfZmV0Y2hfOAorX19pbXBsX3N1Yl9hbmRfZmV0 Y2hfOCBfX3N5bmNfc3ViX2FuZF9mZXRjaF84CitfX2ltcGxfYW5kX2FuZF9mZXRjaF84IF9fc3lu Y19hbmRfYW5kX2ZldGNoXzgKK19faW1wbF94b3JfYW5kX2ZldGNoXzggX19zeW5jX3hvcl9hbmRf ZmV0Y2hfOAorX19pbXBsX29yX2FuZF9mZXRjaF84IF9fc3luY19vcl9hbmRfZmV0Y2hfOAorX19p bXBsX2Jvb2xfY29tcGFyZV9hbmRfc3dhcF8xNiBfX3N5bmNfYm9vbF9jb21wYXJlX2FuZF9zd2Fw XzE2CitfX2ltcGxfdmFsX2NvbXBhcmVfYW5kX3N3YXBfMTYgX19zeW5jX3ZhbF9jb21wYXJlX2Fu ZF9zd2FwXzE2CitfX2ltcGxfZmV0Y2hfYW5kX2FkZF8xNiBfX3N5bmNfZmV0Y2hfYW5kX2FkZF8x NgorX19pbXBsX2ZldGNoX2FuZF9zdWJfMTYgX19zeW5jX2ZldGNoX2FuZF9zdWJfMTYKK19faW1w bF9mZXRjaF9hbmRfYW5kXzE2IF9fc3luY19mZXRjaF9hbmRfYW5kXzE2CitfX2ltcGxfZmV0Y2hf YW5kX3hvcl8xNiBfX3N5bmNfZmV0Y2hfYW5kX3hvcl8xNgorX19pbXBsX2ZldGNoX2FuZF9vcl8x NiBfX3N5bmNfZmV0Y2hfYW5kX29yXzE2CitfX2ltcGxfYWRkX2FuZF9mZXRjaF8xNiBfX3N5bmNf YWRkX2FuZF9mZXRjaF8xNgorX19pbXBsX3N1Yl9hbmRfZmV0Y2hfMTYgX19zeW5jX3N1Yl9hbmRf ZmV0Y2hfMTYKK19faW1wbF9hbmRfYW5kX2ZldGNoXzE2IF9fc3luY19hbmRfYW5kX2ZldGNoXzE2 CitfX2ltcGxfeG9yX2FuZF9mZXRjaF8xNiBfX3N5bmNfeG9yX2FuZF9mZXRjaF8xNgorX19pbXBs X29yX2FuZF9mZXRjaF8xNiBfX3N5bmNfb3JfYW5kX2ZldGNoXzE2CitfX2ltcGxfbG9hZF9yZXBs YWNlIF9fYXRvbWljX2xvYWQKK19faW1wbF9zdG9yZV9yZXBsYWNlIF9fYXRvbWljX3N0b3JlCitf X2ltcGxfZXhjaGFuZ2VfcmVwbGFjZSBfX2F0b21pY19leGNoYW5nZQorX19pbXBsX2NvbXBhcmVf ZXhjaGFuZ2VfcmVwbGFjZSBfX2F0b21pY19jb21wYXJlX2V4Y2hhbmdlCmRpZmYgLS1naXQgYS9z cmMvdGhyZWFkL19fbG9jazEuYyBiL3NyYy90aHJlYWQvX19sb2NrMS5jCm5ldyBmaWxlIG1vZGUg MTAwNjQ0CmluZGV4IDAwMDAwMDAuLjFhNzEyM2QKLS0tIC9kZXYvbnVsbAorKysgYi9zcmMvdGhy ZWFkL19fbG9jazEuYwpAQCAtMCwwICsxLDc5IEBACisjaW5jbHVkZSAicHRocmVhZF9pbXBsLmgi CisKKyNpZiBJTlRfTUlOID09IC1JTlRfTUFYCisjIGVycm9yICJ0aGlzIGltcGxlbWVudGF0aW9u IHN1cHBvc2VzIHRoYXQgSU5UX01JTiBoYXMgb25seSB0aGUgSE8gYml0IHNldCBhbmQgYWxsIG90 aGVycyAwIgorI2VuZGlmCisKK2ludCB2b2xhdGlsZSBfX2NudF9zbG93ID0gMDsKK2ludCB2b2xh dGlsZSBfX2NudF9mdXRleCA9IDA7CitpbnQgdm9sYXRpbGUgX19jbnRfYWdhaW4gPSAwOworCisj aWZuZGVmIE5CRU5DSAorIyBkZWZpbmUgQUNDT1VOVChYKSBhX2luYygmKFgpKQorI2Vsc2UKKyMg ZGVmaW5lIEFDQ09VTlQoWCkgZG8geyB9IHdoaWxlKDApCisjZW5kaWYKKworLyogQSBsb2NrIGlz IGFuIGludCB0aGF0IGlzIGludGVycHJldGVkIHNwZWNpYWxseS4gVGhlIEhPIGJpdCB0ZWxscyBp ZgorICAgdGhlIGxvY2sgaXMgYWxyZWFkeSB0YWtlbiBieSBzb21lIHRocmVhZCBvciBub3QuIFRo ZSBvdGhlciBiaXRzIGFyZQorICAgYSBjb3VudGVyIGZvciB0aGUgbnVtYmVyIG9mIHRocmVhZHMg dGhhdCBhcmUgaW5zaWRlIHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCisgICBJZiBsb2MgaXMgbm9u LW5lZ2F0aXZlIGl0IGhvbGRzIHRoZSBudW1iZXIgb2YgdGhyZWFkcyB0aGF0IGVudGVyZWQKKyAg IHRoZSBjcml0aWNhbCBzZWN0aW9uLgorCisgICBJZiBsb2MgaXMgbmVnYXRpdmUgKHRoZSBsb2Nr IGlzIHRha2VuKSAqbG9jIC0gSU5UX01JTiBpcyB0aGUgbnVtYmVyCisgICBvZiB0cmVhZHMgaW4g dGhlIGNyaXRpY2FsIHNlY3Rpb24sIGluY2x1ZGluZyB0aGUgbG9jayBob2xkZXIuIE9yIGluCisg ICBvdGhlciB3b3JkcyB0aGUgbnVtYmVyIGlzICpsb2Mgd2hlcmUgdGhlIHNpZ24gYml0IGlzIHpl cm9lZC4gKi8KKwordm9pZCBfX2xvY2sxKGludCB2b2xhdGlsZSogbG9jKQoreworICBpZiAobGli Yy50aHJlYWRzX21pbnVzXzEpIHsKKyAgICBpbnQgc3BpbnM7CisgICAgLyogZmFzdCBwYXRoICov CisgICAgLyogLUlOVF9NQVggaXMgYmluYXJ5IDEwMDAw4oCmMDAwMDEgKi8KKyAgICBpbnQgdmFs ID0gYV9jYXMobG9jLCAwLCAtSU5UX01BWCk7CisgICAgaWYgKCF2YWwpIHJldHVybjsKKyAgICB2 YWwgPSAxK2FfZmV0Y2hfYWRkKGxvYywgMSk7CisgICAgLyogVGhlIGxvY2sgYWNxdWlzaXRpb24g bG9vcC4gVGhpcyBoYXMgYmVlbiBkZXNpZ25lZCBzdWNoIHRoYXQgdGhlCisgICAgICAgb25seSBw b3NzaWJsZSBjaGFuZ2UgdGhhdCBpcyBkb25lIGluc2lkZSB0aGF0IGxvb3AgaXMgc2V0dGluZwor ICAgICAgIHRoZSBsb2NrIGJpdC4gVGhpcyBoYXMgYSBkb3VibGUgb2JqZWN0aXZlLiBGaXJzdCBh bGwgYXRvbWljCisgICAgICAgb3BlcmF0aW9ucyBhcmUgZXhwZW5zaXZlIGFuZCBkb2luZyBhIHBh aXIgb2YgKysgYW5kIC0tIGluc2lkZQorICAgICAgIHRoZSBsb29wIHdvdWxkIGp1c3Qgd2FzdGUg bWVtb3J5IGJhbmR3aWR0aC4gVGhlbiwgbGVzcyBjaGFuZ2VzCisgICAgICAgdG8gdGhlIGNvdW50 LCBtZWFucyB0aGF0IG90aGVyIHRocmVhZHMgdGhhdCBhcmUgaW5zaWRlIHRoaXMKKyAgICAgICBz YW1lIGxvb3AgYXJlIGxlc3MgcGVydHVyYmVkLiAqLworICAgIGZvciAoOzspIHsKKyAgICAgIC8q IFRoZSBsb2NrIGJpdCBpc24ndCB5ZXQgc2V0LiAqLworICAgIE5PTE9DSzoKKyAgICAgIHdoaWxl ICh2YWwgPj0gMCkgeworICAgICAgICAvKiBUaGlzIGp1c3Qgc2V0cyB0aGUgc2lnbiBiaXQgd2l0 aG91dCBjYXVzaW5nIG92ZXJmbG93LiAqLworICAgICAgICBpbnQgb3RoZXIgPSAodmFsLUlOVF9N QVgpLTE7CisgICAgICAgIG90aGVyID0gYV9jYXMobG9jLCB2YWwsIG90aGVyKTsKKyAgICAgICAg aWYgKG90aGVyID09IHZhbCkgcmV0dXJuOworICAgICAgICBlbHNlIHZhbCA9IG90aGVyOworICAg ICAgfQorICAgICAgLyogVGhlIGxvY2sgYml0IGlzIHNldCBieSBzb21lb25lIGVsc2UuICovCisg ICAgICBBQ0NPVU5UKF9fY250X3Nsb3cpOworICAgICAgZm9yIChzcGlucyA9IDA7IHNwaW5zIDwg MTAwOyArK3NwaW5zKSB7CisgICAgICAgIGFfc3BpbigpOworICAgICAgICB2YWwgPSAqbG9jOwor ICAgICAgICBpZiAodmFsID49IDApIGdvdG8gTk9MT0NLOworICAgICAgfQorICAgICAgd2hpbGUg KHZhbCA8IDApIHsKKyAgICAgICAgQUNDT1VOVChfX2NudF9mdXRleCk7CisgICAgICAgIGlmIChf X3N5c2NhbGwoU1lTX2Z1dGV4LCBsb2MsIEZVVEVYX1dBSVR8RlVURVhfUFJJVkFURSwgdmFsLCAw KSA9PSAtRUFHQUlOKQorICAgICAgICAgIEFDQ09VTlQoX19jbnRfYWdhaW4pOworICAgICAgICB2 YWwgPSAqbG9jOworICAgICAgfQorICAgIH0KKyAgfQorfQorCit2b2lkIF9fdW5sb2NrMShpbnQg dm9sYXRpbGUqIGxvYykKK3sKKyAgaWYgKCpsb2MgPCAwKSB7CisgICAgLyoqICpsb2MgbXVzdCBi ZSBuZWdhdGl2ZSB3aGVuIHVubG9jazEgaXMgY2FsbGVkLCBzbyBJTlRfTUFYIGNhbgorICAgICAg ICBhbHdheXMgYmUgYWRkZWQgd2l0aG91dCBvdmVyZmxvdy4gKi8KKyAgICBpZiAoLUlOVF9NQVgg IT0gYV9mZXRjaF9hZGQobG9jLCBJTlRfTUFYKSkKKyAgICAgIF9fc3lzY2FsbChTWVNfZnV0ZXgs IGxvYywgRlVURVhfV0FLRXxGVVRFWF9QUklWQVRFLCAxKTsKKyAgfQorfQo= --=-Fj0hkJOliWRpcFMbXhC3 Content-Disposition: attachment; filename="README.org" Content-Type: text/plain; name="README.org"; charset="UTF-8" Content-Transfer-Encoding: base64 IytUSVRMRTogIEFuIGltcGxlbWVudGF0aW9uIG9mIHRoZSBDMTEgPTxzdGRhdG9taWMuaD49IGlu dGVyZmFjZQojK0FVVEhPUjogSmVucyBHdXN0ZWR0CiMrREFURTogSnVseSwgMjAxNQojK0xBVEVY X0hFQURFUjogXHVzZXBhY2thZ2V7Y29sb3J9CiMrTEFURVhfSEVBREVSOiBcdXNlcGFja2FnZXts aXN0aW5nc30KIytMQVRFWF9IRUFERVI6IFxsc3RzZXR7CiMrTEFURVhfSEVBREVSOiAgICAgICAg IGtleXdvcmRzdHlsZT1cY29sb3J7Ymx1ZX0sCiMrTEFURVhfSEVBREVSOiAgICAgICAgIGNvbW1l bnRzdHlsZT1cY29sb3J7cmVkfSwKIytMQVRFWF9IRUFERVI6ICAgICAgICAgc3RyaW5nc3R5bGU9 XGNvbG9ye2dyZWVufSwKIytMQVRFWF9IRUFERVI6ICAgICAgICAgYmFzaWNzdHlsZT1cdHRmYW1p bHlcc21hbGwsCiMrTEFURVhfSEVBREVSOiAgICAgICAgIGNvbHVtbnM9ZnVsbGZsZXhpYmxlLAoj K0xBVEVYX0hFQURFUjogICAgICAgICBmcmFtZT1zaW5nbGUsCiMrTEFURVhfSEVBREVSOiAgICAg ICAgIGJhc2V3aWR0aD17MC40ZW0sMC40ZW19LAojK0xBVEVYX0hFQURFUjogICAgICAgICB9Cgoq IFNob3J0IGRlc2NyaXB0aW9uCgogIFRoZSBpbXBsZW1lbnRhdGlvbiBvZiB0aGUgQzExIGF0b21p YyBpbnRlcmZhY2UgdHlwaWNhbGx5IHNpdHMKICBiZXR3ZWVuIHRoZSBpbXBsZW1lbnRhdGlvbiBv ZiB0aGUgY29yZSBsYW5ndWFnZSBieSB0aGUgQyBjb21waWxlcgogIGFuZCB0aGUgaW1wbGVtZW50 YXRpb24gb2YgdGhlIEMgbGlicmFyeS4gSXQgbmVlZHMgY29tcGlsZXIgc3VwcG9ydAogIGZvciB0 aGUgaW5kaXZpZHVhbCBhdG9taWMgb3BlcmF0aW9ucyBhbmQgbGlicmFyeSBzdXBwb3J0cyBmb3Ig dGhlCiAgY2FzZXMgd2hlcmUgbm8gbG93LWxldmVsIGF0b21pYyBpbnN0cnVjdGlvbiBpcyBhdmFp bGFibGUgYW5kIGEgbG9jawogIG11c3QgYmUgdGFrZW4uCgogIC0gVGhpcyBpbXBsZW1lbnRhdGlv biBidWlsZHMgZW50aXJlbHkgb24gdGhlIHR3byBnY2MgQUJJcyBmb3IKICAgIGF0b21pY3MuIEl0 IGRvZXNuJ3QgZXZlbiBhdHRlbXB0IHRvIGdvIGRvd24gdG8gYXNzZW1ibHkgbGV2ZWwgYnkKICAg IGl0c2VsZi4KCiAgLSBXZSBwcm92aWRlIGFsbCBmdW5jdGlvbiBpbnRlcmZhY2VzIHRoYXQgdGhl IHR3byBnY2MgQUJJcyBhbmQgdGhlCiAgICBDIHN0YW5kYXJkIG5lZWQuCgogIC0gRm9yIGNvbXBp bGVycyB0aGF0IGRvbid0IG9mZmVyIHRoZSBkaXJlY3QgbGFuZ3VhZ2Ugc3VwcG9ydCBmb3IKICAg IGF0b21pY3MgdGhpcyBwcm92aWRlcyBhIHJlZHVjZWQgYnV0IGZ1bGx5IGZ1bmN0aW9uYWwgYXBw cm9hY2ggdG8KICAgIGF0b21pYyBvcGVyYXRpb25zLgoKKiBJbXBsZW1lbnRlZCBsaWJyYXJ5IGZl YXR1cmVzCgogICBXZSBkaXN0aW5ndWlzaCBiZXR3ZWVuIHRoZSBpbXBsZW1lbnRhdGlvbiBvZiBs aWJyYXJ5IGZ1bmN0aW9ucyBhbmQKICAgdGhlID08c3RkYXRvbWljLmg+PSBoZWFkZXIgZmlsZS4K CiAgIFRoZSBsYXR0ZXIgYWxyZWFkeSBjb250YWlucyBhIGxvdCBvZiBpbnRlbGxpZ2VuY2UsIGJl Y2F1c2UgaXQgaGFzCiAgIHRvIGRvIHR5cGUgZ2VuZXJpYyBzdHVmZi4gVGhpcyBpcyBtb3JlIGlu dm9sdmVkIHRoYW4gdXN1YWwgQwogICBsaWJyYXJ5IGhlYWRlciBmaWxlcy4KCiAgIFRoZSBoZWFk ZXIgZmlsZSBpcyBvcHRpb25hbCwgdGhlIGNyZWF0ZWQgZnVuY3Rpb24gaW50ZXJmYWNlIHNob3Vs ZAogICBiZSBjb21wYXRpYmxlIHdpdGggdGhlIGhlYWRlciBmaWxlcyB0aGF0IGdjYyBhbmQgY2xh bmcgbWF5IHByb3ZpZGUuCgoqKiBUeXBlLCBjb25zdGFudHMgYW5kIGZ1bmN0aW9uIGludGVyZmFj ZXMKCiAgIFRoZXNlIGFyZSB0aGUgdHlwZXMgYW5kIHByb3BlciBmdW5jdGlvbnMgdGhhdCBhcmUg Zm9yZXNlZW4gYnkgdGhlCiAgIHN0YW5kYXJkOgoKICAgLSA9YXRvbWljX2ZsYWc9IGFuZCBpdHMg Zm91ciBmdW5jdGlvbnMKICAgLSB0aGUgPW1lbW9yeV9vcmRlcj0gZW51bWVyYXRpb24gdHlwZQog ICAtIGZlbmNlcwogICAtIG9iamVjdC1saWtlIG1hY3JvcyB0byB0ZXN0IGZvciBsb2NrLWZyZWVu ZXNzIGFuZCBzaW1pbGFyIHRoaW5ncwogICAtID10eXBlZGVmPSBmb3IgYXRvbWljIGludGVnZXIg YW5kIHBvaW50ZXIgdHlwZXMuCgogICBBbGwgb2YgdGhlc2UgYXJlIHByb3ZpZGVkIGluIGZvcm1z IHRoYXQgYXJlIGNvbXBhdGlibGUgd2l0aCBnY2MgYW5kCiAgIGNsYW5nLgoKKiogVHlwZSBnZW5l cmljIGZ1bmN0aW9ucwoKICAgVGhlc2UgYXJlIGFsbCBpbXBsZW1lbnRlZCBhcyBtYWNyb3MsIGFu ZCBzaG91bGQgaW4gbWFueSBjYXNlcwogICByZXN1bHQgaW4gb3B0aW1pemVkIGlubGluZWQgYXNz ZW1ibGVyIGluc3RydWN0aW9ucywgYW5kIG5vdCBpbgogICBsaWJyYXJ5IGNhbGxzLiBMaWJyYXJ5 IGNhbGxzIGFyZSBvbmx5IG5lZWRlZCBhcyBmYWxsIGJhY2ssIHdoZW4KICAgdGhlcmUgaXMgbm8g cmVhc29uYWJsZSBpbnN0cnVjdGlvbiBzZXQgYXZhaWxhYmxlLgoKICAgVGhpcyBpbXBsZW1lbnRh dGlvbiB1c2VzIHByZWRlZmluZWQgbWFjcm9zIG9mIHRoZSBmb3JtCgogICA9X19HQ0NfSEFWRV9T WU5DX0NPTVBBUkVfQU5EX1NXQVBfWD0KCiAgIHdoZXJlID1YPSBjYW4gYmUgb25lIG9mIDEsIDIs IDQsIDggb3IgMTYuIEFsbCB2ZXJzaW9ucyBvZiBnY2MgYW5kCiAgIGNsYW5nIHNpbmNlIGF0IGxl YXN0IHRlbiB5ZWFycyBpbXBsZW1lbnQgdGhlc2UgbWFjcm9zIGFuZCB0aGUKICAgdW5kZXJseWlu ZyBvcGVyYXRpb25zIGNvbnNpc3RlbnRseS4KCiAgIElmIHRoYXQgbWFjcm8gZXhpc3RzLCB3ZSBz dXBwb3NlIHRoYXQgdGhlIGNvbXBpbGVyIGlzIGFibGUgdG8KICAgc3ludGhlc2l6ZSBhbGwgY29y cmVzcG9uZGluZyBtZW1vcnkgZnVuY3Rpb25zIGZvciB0eXBlcyBvZiBzaXplID1YPQogICBhbmQg YWxsIG5lY2Vzc2FyeSBhcml0aG1ldGljIGZ1bmN0aW9uIGZvciBpbnRlZ2VyIHR5cGVzIG9mIHRo YXQKICAgc2l6ZSwgYXMgbG9jay1mcmVlICg9IHN0YXRlbGVzcykgaW5zdHJ1Y3Rpb25zLgoKICAg VGhpcyBkb2Vzbid0IG1lYW4gdGhhdCB0aGVyZSBhcmUgZGlyZWN0IGFzc2VtYmxlciBpbnN0cnVj dGlvbiBmb3IKICAgYWxsIHRoZXNlIG9wZXJhdGlvbnMuIFRoZXkgY2FuIHdlbGwgYmUgaW1wbGVt ZW50ZWQgYXMgYW4gdW5ib3VuZGVkCiAgIGxvb3AgdGhhdCB1c2VzIGEgPWNvbXBhcmVfYW5kX3N3 YXA9IChDQVMpIHByaW1pdGl2ZSBmb3IgYXRvbWljCiAgIGV4Y2hhbmdlLiBHY2MgdHlwaWNhbGx5 IGRvZXMgdGhpcyBmb3IgdGhlIGxlc3MgY29tbW9uIGF0b21pYwogICBhcml0aG1ldGljIGluc3Ry dWN0aW9ucyBzdWNoIGFzID1hdG9taWNfZmV0Y2hfYW5kPSwgZm9yCiAgIGV4YW1wbGUuIExvY2st ZnJlZSBkb2Vzbid0IG1lYW4gYSBib3VuZGVkIG51bWJlciBvZiBpbnN0cnVjdGlvbnMuCgogICBG b3IgdGhlIG9wZXJhdGlvbnMgdGhhdCBjYW5ub3QgYmUgbWFwcGVkIHRvIGFzc2VtYmxlciBpbnN0 cnVjdGlvbnMKICAgdGhlIGNvbXBpbGVyIGluc2VydHMgY2FsbHMgdG8gZXh0ZXJuYWwgZnVuY3Rp b25zLiBUaGUgbmFtZXMgZm9yCiAgIHRoZXNlIGZ1bmN0aW9ucyBhcmUgdHlwaWNhbGx5IGNvbXBv c2VkIG9mIHRoZSBvcGVyYXRpb24gYW5kCiAgIHByZWZpeGVkIGVpdGhlciBieSA9X19zeW5jXz0g KHRoZSBvbGRlciBnY2MgQUJJKSBvciA9X19hdG9taWNfPQogICAodGhlIG5ld2VyIGdjYyBBQkkp LiBUaGUgbmFtZXMgb2YgdGhlc2UgY2FsbHMgY2FuIGJlIHN1ZmZpeGVkIGJ5CiAgID1fWD0gZm9y ID1YPSBhcyBhYm92ZSBpZiB0aGlzIGNvbmNlcm5zIGFuIG9wZXJhdGlvbiBvbiBhIHR5cGUgb2YK ICAgdGhlIGNvcnJlc3BvbmRpbmcgd2lkdGguCgogICBBbGwgZXh0ZXJuYWwgZnVuY3Rpb25zIHRo YXQgdGhlIGdjYyBBQkkncyByZXF1aXJlIGFyZSBwcm92aWRlZC4KCioqKiBUaGUgPV9fYXRvbWlj Xz0gQUJJCgogICBpcyBhbHJlYWR5IGNsb3NlIHRvIHRoZSBDMTEgY2FsbCBpbnRlcmZhY2UuIFJl bGV2YW50IGZvciBDMTEgYXJlIDkKICAgb3BlcmF0aW9ucwogICAgIC0gPWZldGNoX2FkZD0gZm9y IGludGVnZXIgYWRkaXRpb24sIHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUKICAgICAtID1m ZXRjaF9zdWI9IGZvciBpbnRlZ2VyIHN1YnRyYWN0aW9uLCByZXR1cm5pbmcgdGhlIHByZXZpb3Vz IHZhbHVlCiAgICAgLSA9ZmV0Y2hfb3I9ICBmb3IgYml0d2lzZSBvciwgcmV0dXJuaW5nIHRoZSBw cmV2aW91cyB2YWx1ZQogICAgIC0gPWZldGNoX2FuZD0gZm9yIGJpdHdpc2UgYW5kLCByZXR1cm5p bmcgdGhlIHByZXZpb3VzIHZhbHVlCiAgICAgLSA9ZmV0Y2hfeG9yPSBmb3IgYml0d2lzZSB4b3Is IHJldHVybmluZyB0aGUgcHJldmlvdXMgdmFsdWUKICAgICAtID1sb2FkPSBmb3IgYW4gYXRvbWlj IGxvYWQgb3BlcmF0aW9uCiAgICAgLSA9c3RvcmU9IGZvciBhbiBhdG9taWMgc3RvcmUgb3BlcmF0 aW9uCiAgICAgLSA9ZXhjaGFuZ2U9IGZvciBhbiBhdG9taWMgZXhjaGFuZ2Ugb3BlcmF0aW9uLCBl cXVpdmFsZW50IHRvIGEKICAgICAgID1zdG9yZT0gdGhhdCByZXR1cm5zIHRoZSBwcmV2aW91cyB2 YWx1ZQogICAgIC0gPWNvbXBhcmVfZXhjaGFuZ2U9IGZvciBhbiBhdG9taWMgY29tcGFyZSBhbmQg ZXhjaGFuZ2UKICAgICAgIG9wZXJhdGlvbiwgZXF1aXZhbGVudCB0byBhIGNvbmRpdGlvbmFsID1z dG9yZT0gdGhhdCBhbHNvIHNhdmVzCiAgICAgICB0aGUgcHJldmlvdXMgdmFsdWUsIGFuZCByZXR1 cm5zID1mYWxzZT0gb3IgPXRydWU9IGFjY29yZGluZyB0bwogICAgICAgdGhlIHN1Y2Nlc3Mgb2Yg dGhlIGNvbmRpdGlvbi4KCiAgIEluIGFkZGl0aW9uIHRvIHRoZSBtb3JlIG9yIGxlc3Mgb2J2aW91 cyBvcGVyYW5kcywgdGhlIGJ1aWx0LWluCiAgIGZ1bmN0aW9ucyB0YWtlIG9uZSBvciB0d28gYWRk aXRpb25hbCBwYXJhbWV0ZXJzIHRoYXQgcmVmbGVjdCBhbgogICBldmVudHVhbCByZXF1aXJlbWVu dCBmb3IgdGhlID1tZW1vcnlfb3JkZXI9IG9mIHRoZSBvcGVyYXRpb24uIFNvCiAgIHRoZSBmdW5j dGlvbnMgcmVwcmVzZW50IHRoZSBDMTEgImV4cGxpY2l0IiBmZWF0dXJlcyBzdWNoIGFzCiAgID1h dG9taWNfZmV0Y2hfYWRkX2V4cGxpY2l0PS4KCiAgIE9ic2VydmUgdGhhdCB0aGUgYnVpbHQtaW4g ZnVuY3Rpb25zIG9ubHkgZm9yZXNlZSBvbmUgaW50ZXJmYWNlCiAgID1jb21wYXJlX2V4Y2hhbmdl PS4KCiAgICAgLSBUaGUgZGlzdGluY3Rpb24gYmV0d2VlbiAid2VhayIgYW5kICJzdHJvbmciIHZl cnNpb25zIG9mIHRoZXNlCiAgICAgICBidWlsdC1pbiBmdW5jdGlvbnMgYXJlIHJ1bGVkIHRocm91 Z2ggYW4gYWRkaXRpb25hbCBwYXJhbWV0ZXIsCiAgICAgICBub3QgdGhyb3VnaCBhIGRpZmZlcmVu dCBmdW5jdGlvbiBpbnRlcmZhY2UuCgogICAgIC0gVGhlIGZ1bmN0aW9uIHN5bWJvbCBmYWxsLWJh Y2sgPV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2U9CiAgICAgICBjb25mdXNpbmdseSBoYXMgYSBk aWZmZXJlbnQgc2VtYW50aWMgYW5kIHByb3RvdHlwZSB0aGFuIHRoZQogICAgICAgYnVpbHQtaW4g ZnVuY3Rpb24uIEl0IG1pc3NlcyB0aGUgcGFyYW1ldGVyIHRvIGNob3NlIGJldHdlZW4gdGhlCiAg ICAgICAid2VhayIgYW5kIHRoZSAic3Ryb25nIiB2ZXJzaW9uLCBhbmQgc29sZWx5IGNvcnJlc3Bv bmRzIHRvIHRoZQogICAgICAgQzExIG9wZXJhdGlvbgoKICAgICAgID1hdG9taWNfY29tcGFyZV9l eGNoYW5nZV9zdHJvbmdfZXhwbGljaXQ9CgogICBMb2FkLCBzdG9yZSBhbmQgY29tcGFyZSBvcGVy YXRpb25zIGhhdmUgL21lbW9yeS8gc2VtYW50aWNzLCB0aGF0IGlzCiAgIHRoZXkgYXJlIGVxdWl2 YWxlbnQgdG8gdGhlIHVzZSBvZiA9bWVtY3B5PSBhbmQgPW1lbWNtcD0gbGlicmFyeQogICBmdW5j dGlvbnMuIFRoZSBpbXBsZW1lbnRhdGlvbiBtYXkgdXNlID0gb3IgPT0gb3BlcmF0b3JzIGluIHNv bWUKICAgcGxhY2VzIGZvciBvcHRpbWl6YXRpb24sIGJ1dCBpdCB0aGVuIGRvZXMgc28gd2l0aCBv YmplY3RzIG9mCiAgID11aW50WFhfdD0sIHNvIGV2ZXJ5IGJpdCBpcyBhY2NvdW50ZWQgZm9yLiBG b3IgZGF0YSB0eXBlcyB3aGVyZQogICBtZW1vcnkgYW5kIHZhbHVlIGNvbXBhcmlzb24gYXJlIGRp ZmZlcmVudCwgdGhlIHJlc3VsdCBvZiBhbgogICA9YXRvbWljX2NvbXBhcmVfZXhjaGFuZ2U9IG9w ZXJhdGlvbiBjYW4gYmUgZGlmZmVyZW50IHRoYW4geW91J2QKICAgZXhwZWN0OgoKICAgICAtID1f Qm9vbD0gb2JqZWN0cyB3aGVyZSBvdGhlciBiaXRzIHRoYW4gdGhlIGxvd2VzdC1vcmRlciBiaXQg aGF2ZQogICAgICAgYmVlbiBwb2xsdXRlZCwgd2lsbCBub3QgY29tcGFyZSBlcXVhbCB0byA9ZmFs c2U9IG9yID10cnVlPS4KCiAgICAgLSBGbG9hdGluZyBwb2ludCB0eXBlcyBtYXkgY29tcGFyZSBk aWZmZXJlbnQgcmVwcmVzZW50YXRpb25zIG9mCiAgICAgICA9MD0gbm90IHRvIGJlIGVxdWFsLgoK ICAgICAtIFR3byBmbG9hdGluZyBwb2ludCA9TmFOPSBtYXkgY29tcGFyZSBlcXVhbCwgdGhvdWdo IGFzIHZhbHVlCiAgICAgICBjb21wYXJpc29uID1OYU49IG5ldmVyIGNvbXBhcmVzIGVxdWFsIHRv IGFueXRoaW5nLgoKICAgICAtIE9iamVjdHMgb2YgPXN0cnVjdD0gb3IgPXVuaW9uPSB0eXBlIG1h eSBiZSBjb25zaWRlcmVkIHVuZXF1YWwKICAgICAgIGJlY2F1c2UgdGhleSBkaWZmZXIgb24gc29t ZSBwYWRkaW5nIGJ5dGVzLgoKICAgVGhpcyBiZWhhdmlvciBpcyBpbiBhbGlnbm1lbnQgd2l0aCB0 aGUgaW50ZW5kZWQgaW50ZXJwcmV0YXRpb24gYnkKICAgdGhlIEMgYW5kIEMrKyBzdGFuZGFyZCdz IGNvbW1pdHRlZXMuCgogICBGdW5jdGlvbiBjYWxsIGludGVyZmFjZXMgZm9yIHRoZSBhcml0aG1l dGljIG9wZXJhdGlvbnMgYXJlIG9ubHkKICAgZ2VuZXJhdGVkIGlmIHdlIGNhbiBzdXBwb3NlIHRo YXQgYW4gaW50ZWdlciB0eXBlIGZvciB0aGUKICAgY29ycmVzcG9uZGluZyBzaXplIGV4aXN0cy4g V2UgY2FuIHJlYXNvbmFibHkgYXNzdW1lIHRoYXQgdGhlcmUgYXJlCiAgIGFsd2F5cyB0eXBlcyA9 dWludDhfdD0sID11aW50MTZfdD0sID11aW50MzJfdD0gYW5kID11aW50NjRfdD0sIHNvCiAgIHRo ZSB2YXJpYW50cyBmb3IgMSwgMiwgNCBhbmQgOCBjYW4gYWx3YXlzIGJlIGdlbmVyYXRlZC4KCiAg IEZvciBhIDEyOCBiaXQgdHlwZSB0aGVzZSBhcmUgb25seSBnZW5lcmF0ZWQgaWYgPV9fU0laRU9G X0lOVDEyOF9fPQogICBvciA9X19HQ0NfSEFWRV9TWU5DX0NPTVBBUkVfQU5EX1NXQVBfWD0gZXhp c3QuIElmIHNvLCB3ZSBhc3N1bWUKICAgdGhhdCA9X191aW50MTI4X3Q9IGlzIHN1Y2ggYW4gaW50 ZWdlciB0eXBlIGFuZCBrbm93biB0byB0aGUKICAgY29tcGlsZXIuCgogICBBcml0aG1ldGljIG9w ZXJhdGlvbnMgY2FuIHNhZmVseSB1c2UgdGhlc2UgPXVpbnRYWF90PSB0eXBlcwogICBpbnRlcm5h bGx5LCBzaW5jZSB0aGUgc3RhbmRhcmQgaW1wb3NlcyB0d28ncyBjb21wbGVtZW50CiAgIHJlcHJl c2VudGF0aW9uIGZvciBzaWduZWQgYXRvbWljIHR5cGVzIGFuZCBhbHNvIGVuZm9yY2VzIHRoYXQK ICAgYXRvbWljIG9wZXJhdGlvbnMgbWF5IG5vdCBwcm9kdWNlIHRyYXBzIG9uIG92ZXJmbG93LgoK ICAgQWRkaXRpb25hbGx5IHRvIHRoZSBvcGVyYXRpb25zIHRoYXQgaGF2ZSBnZW5lcmljIGZ1bmN0 aW9uCiAgIGludGVyZmFjZXMgaW4gdGhlIEMxMSBzdGFuZGFyZCwgZ2NjIGFkZGl0aW9uYWxseSBp bXBsZW1lbnRzIHNpeAogICBvdGhlciBidWlsdC1pbnMsIG5hbWVseQoKICAgICAtID1fX2F0b21p Y19hZGRfZmV0Y2g9IGZvciBpbnRlZ2VyIGFkZGl0aW9uLCByZXR1cm5pbmcgdGhlIHVwZGF0ZWQg dmFsdWUKICAgICAtID1fX2F0b21pY19zdWJfZmV0Y2g9IGZvciBpbnRlZ2VyIHN1YnRyYWN0aW9u LCByZXR1cm5pbmcgdGhlIHVwZGF0ZWQgdmFsdWUKICAgICAtID1fX2F0b21pY19vcl9mZXRjaD0g IGZvciBiaXR3aXNlIG9yLCByZXR1cm5pbmcgdGhlIHVwZGF0ZWQgdmFsdWUKICAgICAtID1fX2F0 b21pY19hbmRfZmV0Y2g9IGZvciBiaXR3aXNlIGFuZCwgcmV0dXJuaW5nIHRoZSB1cGRhdGVkIHZh bHVlCiAgICAgLSA9X19hdG9taWNfeG9yX2ZldGNoPSBmb3IgYml0d2lzZSB4b3IsIHJldHVybmlu ZyB0aGUgdXBkYXRlZCB2YWx1ZQogICAgIC0gPV9fYXRvbWljX2ZldGNoX25hbmQ9IGZvciBiaXR3 aXNlIG5hbmQgKD14ID0gfih4ICYgdik9KSwgcmV0dXJuaW5nIHRoZSBwcmV2aW91cyB2YWx1ZQog ICAgIC0gPV9fYXRvbWljX25hbmRfZmV0Y2g9IGZvciBiaXR3aXNlIG5hbmQgKD14ID0gfih4ICYg dik9KSwgcmV0dXJuaW5nIHRoZQogICAgICAgdXBkYXRlZCB2YWx1ZQoKICAgRm9yIHRoZSBjb21w bGV0ZW5lc3Mgb2YgdGhlIGxpYnJhcnkgaW50ZXJmYWNlIHdlIHN1cHBseSBhbmFsb2dvdXMKICAg ZnVuY3Rpb25zIHdpdGggdGhlID1fWD0gc3VmZml4IGZvciB0aGVzZS4gVGhleSBtaWdodCBiZSBj YWxsZWQgYnkKICAgdGhlIGNvbXBpbGVyIGlmIHRoZSB1c2VyIGNvZGUgdXNlcyBhc3NpZ24gYW5k IGFkZCBvciBzaW1pbGFyCiAgIG9wZXJhdG9ycyBvbiBhdG9taWMgaW50ZWdlcnMuICBUaGUgPV9f YXRvbWljX2FkZF9mZXRjaD0gYW5kCiAgID1fX2F0b21pY19zdWJfZmV0Y2g9IGZ1bmN0aW9ucyBt YXkgYWxzbyBldmVudHVhbGx5IGJlIHVzZWQgYnkgdGhlCiAgIGNvbXBpbGVyIHRvIGltcGxlbWVu dCBhbiBhdG9taWMgcHJlZml4IGluY3JlbWVudCBvciBkZWNyZW1lbnQKICAgb3BlcmF0aW9uICg9 Kyt4PSBhbmQgPS0teD0pLiBUaGlzIHdvdWxkIGUuZyBoYXBwZW4gaWYgPXg9IGlzIGFuCiAgIG9i amVjdCBvZiB0eXBlID1fX2ludDEyOF90PSBhbmQgdGhlIHBsYXRmb3JtIGRvZXNuJ3QgaW1wbGVt ZW50CiAgIGxvY2stZnJlZSBhdG9taWNzIGZvciB0eXBlcyBvZiBzaXplIDE2LgoKKioqIENsYW5n J3MgPV9fYzExX2F0b21pYz0gYnVpbHQtaW5zCgogICAgQ2xhbmcgaGFzIGdvbmUgYSBkaWZmZXJl bnQgcGF0aCBmb3IgdGhlIGJ1aWx0LWlucyB0aGF0IGltcGxlbWVudAogICAgQzExIGF0b21pY3Ms IHByZWZpeGVkIHdpdGggPV9fYzExX2F0b21pYz0uIFRoZXNlIGFyZSBhIGRpcmVjdGx5CiAgICBm ZWF0dXJlIGVxdWl2YWxlbnQgdG8gdGhlIEMxMSBnZW5lcmljIGZ1bmN0aW9ucyB0aGF0IGhhdmUK ICAgID1tZW1vcnlfb3JkZXI9IGFyZ3VtZW50cyAoPV9leHBsaWNpdD0gc3VmZml4KS4KCiAgICBG b3IgdGhlIGNhc2VzIHRoYXQgbm8gYXRvbWljIGluc3RydWN0aW9ucyBjYW4gYmUgc3ludGhlc2l6 ZWQsCiAgICBjbGFuZyBmYWxscyBiYWNrIHRvIHRoZSBzYW1lIGV4dGVybmFsIGNhbGxzIGFzIGRl c2NyaWJlZCBmb3IgZ2NjJ3MKICAgID1fX2F0b21pYz0gQUJJLgoKCioqKiBUaGUgPV9fc3luYz0g QUJJCgogICAgSXQgZGF0ZXMgYmFjayBsb25nIGJlZm9yZSB0aGUgQzExIGF0b21pYyBpbnRlcmZh Y2UgaGFkIGJlZW4KICAgIGRlc2lnbmVkIGFuZCB0aHVzIGNhbm5vdCBiZSBkaXJlY3RseSBjb25m b3JtaW5nIHRvIGl0LiBJdCBoYXMKICAgIGJhc2ljYWxseSB0aGUgc2FtZSBidWlsdC1pbnMgZm9y IGFyaXRobWV0aWMgdHlwZXMgYXMgYWJvdmUsIG9ubHkKICAgIHRoYXQKCiAgICAtIFRoZSBmdW5j dGlvbnMgYXJlIG5hbWVkIGEgYml0IGRpZmZlcmVudGx5LgogICAgLSBUaGV5IG9ubHkgaW1wbGVt ZW50IHNlcXVlbnRpYWwgY29uc2lzdGVuY3kuCiAgICAtIFRoZXJlIGFyZSBubyA9bG9hZD0sID1z dG9yZT0gb3IgPWV4Y2hhbmdlPSBmZWF0dXJlcy4KICAgIC0gVGhlID1uYW5kPSBvcGVyYXRpb25z IGNoYW5nZWQgdGhlaXIgbWVhbmluZyBmcm9tIHZlcnNpb24gNC40CiAgICAgIG9ud2FyZC4gVGhl cmVmb3JlIHRoaXMgb3BlcmF0aW9uIGNhbm5vdCBiZSB1c2VkIHBvcnRhYmx5IGluIGFuCiAgICAg IGVudmlyb25tZW50IHRoYXQgbWlnaHQgdXNlIGRpZmZlcmVudCB2ZXJzaW9ucyBvZiBjb21waWxl cnMuIFNvCiAgICAgIHdlIGRvbid0IGltcGxlbWVudCB0aGVzZSBmdW5jdGlvbiBpbnRlcmZhY2Vz IGFuZCB3ZSBkZXByZWNhdGUKICAgICAgdGhlIHVzZSBvZiB0aGlzIGJ1aWx0LWluLgoKICAgQWRk aXRpb25hbGx5IHRoaXMgaW50ZXJmYWNlIGFsc28gaW1wbGVtZW50cyBhID10ZXN0X2FuZF9zZXQ9 CiAgIGZ1bmN0aW9uYWxpdHkgdGhhdCBpcyB1c2VkIHRvIGltcGxlbWVudCB0aGUgPWF0b21pY19m bGFnPQogICBmdW5jdGlvbnMuIFRoaXMgYnVpbHQtaW4gaXMgZG9jdW1lbnRlZCB0byBoYXZlIGFj cXVpcmUtcmVsZWFzZQogICBjb25zaXN0ZW5jeS4gSWYgdXNlZCB3aXRoIHNlcXVlbnRpYWwgY29u c2lzdGVuY3ksIGFuIGFkZGl0aW9uYWwKICAgZmVuY2UgaXMgaW5zZXJ0ZWQgdG8gZW5zdXJlIHRo YXQuCgogICBUaGVzZSBmZWF0dXJlcyBhcmUgc3VmZmljaWVudCB0byBwcm92aWRlIGEgZGVjZW50 IGltcGxlbWVudGF0aW9uIG9mCiAgIEMxMSBhdG9taWNzLgoKKioqIFRoZSBsb2NrLWZ1bGwgZmFs bGJhY2sgZnVuY3Rpb25zCgogICAgSW4gYWJzZW5jZSBvZiBwcm9wZXIgYXJjaGl0ZWN0dXJlIHN1 cHBvcnQsIGFsbCBmYWxsYmFja3MgKGZvcgogICAgdGhlIHRocmVlIGJ1aWx0LWluIGZhbWlsaWVz KSB3aXRoID1fWD0gc3VmZml4IHVzZSB0aGUgb25lcyB3aXRob3V0CiAgICBzdWZmaXggdW5kZXJu ZWF0aC4gVGhlc2UgZXh0ZXJuYWwgaW50ZXJmYWNlcyByZWNlaXZlIHRoZSBzaXplIG9mCiAgICB0 aGUgZGF0YSB0eXBlIGFzIGFuIGFkZGl0aW9uYWwsIGxlYWRpbmcgcGFyYW1ldGVyOgoKICAgICAt ID1fX2F0b21pY19sb2FkPQogICAgIC0gPV9fYXRvbWljX3N0b3JlPQogICAgIC0gPV9fYXRvbWlj X2V4Y2hhbmdlPQogICAgIC0gPV9fYXRvbWljX2NvbXBhcmVfZXhjaGFuZ2U9CgogICBUaGV5IGhh dmUgcHVyZSBtZW1vcnkgc2VtYW50aWNzIGFuZCB0aGVpciBiYXNpYyBvcGVyYXRpb25zIGFyZQog ICA9bWVtY3B5PSBhbmQgPW1lbWNtcD0gZm9yIGxvYWQsIHN0b3JlIGFuZCBjb21wYXJpc29uLgoK ICAgVGhlc2UgZnVuY3Rpb25zICpjYW5ub3QgYmUgY2FsbGVkIGRpcmVjdGx5KiBmcm9tIHdpdGhp biB5b3VyIGNvZGUsCiAgIGJlY2F1c2UgdGhlIGNvbXBpbGVyIGNhbm5vdCBkaXN0aW5ndWlzaCB0 aGVtIGZyb20gdGhlIGdjYyBidWlsdC1pbnMsCiAgIC9hbmQvIHRoZXkgaGF2ZSBkaWZmZXJlbnQg cHJvdG90eXBlcyB0aGFuIHRoZXNlLgoKICAgV2UgaW1wbGVtZW50IHRoZXNlIGZ1bmN0aW9ucyBh cyBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFyZQogICBwcm90ZWN0ZWQgd2l0aCBhIGxvY2ssIHNp bWlsYXIgdG8gYSBtdXRleC4gVGhpcyBpbXBsZW1lbnRhdGlvbnMKICAgdXNlcyBhIHRhYmxlIG9m IGxvY2tzIGFuZCBhIGhhc2ggZnVuY3Rpb24gdG8gY2hvb3NlIG9uZSBvZiB0aGUKICAgZW50cmll cyB0aGF0IG9ubHkgZGVwZW5kcyBvbiB0aGUgYWRkcmVzcyBvZiB0aGUgYXRvbWljIG9iamVjdC4K CiAgIEF0IHRoZSBtb21lbnQsIHRoaXMgaW1wbGVtZW50YXRpb24gaGFzIHNldmVyYWwgYWRkcmVz cy1oYXNoCiAgIGZ1bmN0aW9ucyB0aGF0IGNhbiBiZSBjaG9zZW4gYSBsaWJyYXJ5LWNvbXBpbGUg dGltZS4gQW55IGZ1bmN0aW9uCiAgIHRoYXQgbWl4ZXMgdGhlIGJpdHMgb2YgdGhlIGFkZHJlc3Mg c2hvdWxkIHBlcmZvcm0gcmVhc29uYWJseSB3ZWxsLgoKICAgTW9yZSBpbXBvcnRhbnQgZm9yIHBl cmZvcm1hbmNlIGlzIHRoZSBjaG9pY2Ugb2YgdGhlIGxvY2suIFN1Y2ggYQogICBsb2NrIGNhbiBi ZSByZWxhdGl2ZWx5IHNpbXBsZSwgc2luY2UgQzExIGF0b21pY3MgdGhhdCBhcmUgbm90CiAgIGxv Y2stZnJlZSBkb24ndCBoYXZlIHRvIGJlIGFzeW5jaHJvbm91cyBzaWduYWwgc2FmZS4KCiAgIFRo ZXJlIGFyZSBzZXZlcmFsIHBvc3NpYmlsaXRpZXMsIGluIG9yZGVyIG9mIHByZWZlcmVuY2U6Cgog ICAgIC0gQW4gT1Mgc3BlY2lmaWMgbGlnaHQtd2VpZ2h0ZWQgbG9jayB3aXRoIG5vbi1hY3RpdmUg d2FpdHMuIFRoZQogICAgICAgaW50ZWdyYXRpb24gaW50byA9bXVzbD0gdXNlcyBMaW51eCcgPWZ1 dGV4PSB1bmRlcm5lYXRoIHRvIGRvIGFuCiAgICAgICBlZmZpY2llbnQgd2FpdC4gSWYgYnkgY29p bmNpZGVuY2UgdGhlc2UgYXJlIGNhbGxlZCBpbiBhbgogICAgICAgdW4tdGhyZWFkZWQgcHJvY2Vz cywgdGhleSBhcmUgY2xvc2UgdG8gbm9uLW9wcy4KCiAgICAgLSBDMTEncyA9bXR4X3Q9IHR5cGUg aGFzIGFuIHNoYWxsb3cgaW50ZXJmYWNlIHRoYXQgc2hvdWxkIGFsbG93CiAgICAgICBpdCB0byBi ZSBpbXBsZW1lbnRlZCBhIGJpdCBzaW1wbGVyIGFuZCBlZmZpY2llbnQgdGhhbiBPUwogICAgICAg c3BlY2lmaWMgbXV0ZXhlcyB0aGF0IGltcGxlbWVudCBhIGxvdCBvZiBmdW5jdGlvbmFsaXR5LiBU aGlzCiAgICAgICBzb2x1dGlvbiBzaG91bGQgYmUgcG9ydGFibGUgdG8gYWxsIHBsYXRmb3JtcyB0 aGF0IGltcGxlbWVudAogICAgICAgdGhpcyBwYXJ0IG9mIEMxMS4gSW4gYSByZWxhdGl2ZWx5IG5l YXIgZnV0dXJlIHRoZXNlIGNvdWxkIGJlCiAgICAgICBhbGwgUE9TSVggYW5kIFdpbmRvd3MgcGxh dGZvcm1zLiBUaGlzIGFwcHJvYWNoIGhhcyB0aGUKICAgICAgIGRpc2FkdmFudGFnZSB0aGF0IGEg dGFibGUgb2YgPW10eF90PSBtdXN0IGJlIGluaXRpYWxpemVkIGF0CiAgICAgICBwcm9jZXNzIHN0 YXJ0dXAgYmVjYXVzZSA9bXR4X3Q9IGRvZXNuJ3QgZ3VhcmFudGVlIHN0YXRpYwogICAgICAgaW5p dGlhbGl6YXRpb24uCgogICAgIC0gUE9TSVgnID1wdGhyZWFkX211dGV4X3Q9IGlzIGEgbGl0dGxl IGxlc3MgcG9ydGFibGUsIGJ1dCBhbGxvd3MKICAgICAgIGZvciBzdGF0aWMgaW5pdGlhbGl6YXRp b24uCgogICAgIC0gQSBzcGlubG9jayBzaW1pbGFyIHRvID1hdG9taWNfZmxhZz0uIFN1Y2ggYW4g YXBwcm9hY2ggaXMKICAgICAgIHBvcnRhYmxlIHRvIGFsbCBwbGF0Zm9ybXMgdGhhdCBpbXBsZW1l bnQgYXRvbWljcyBhbmQgYWxsb3dzIGZvcgogICAgICAgc3RhdGljIGluaXRpYWxpemF0aW9uLiBU aGlzIGlzIHRoZSBvbmx5IGNob2ljZSB3aGVuIGNvbXBpbGVkCiAgICAgICB3aXRob3V0IE9TIG9y IGxpYnJhcnkgc3VwcG9ydC4KCiAgICAgICBUaGUgd2FpdCBmdW5jdGlvbmFsaXR5IGlzIGFuIGFj dGl2ZSB3YWl0LCB0aGF0IGJ1cm5zIENQVSBjeWNsZXMKICAgICAgIGFuZCBtZW1vcnkgYmFuZHdp ZHRoLiBJbiBtYW55IGNpcmN1bXN0YW5jZXMgdGhpcyBzaG91bGQgZG8KICAgICAgIHdlbGwsIHRo ZSBjcml0aWNhbCBzZWN0aW9ucyB0aGF0IGFyZSBwcm90ZWN0ZWQgYnkgdGhpcyBhcmUgbmljZQog ICAgICAgYW5kIHNtYWxsLgoKKiBUaGUgPTxzdGRhdG9taWMuaD49IGhlYWRlciBmaWxlCgoqKiBG dWxsIEMxMSBzdXBwb3J0CgogIFZlcnNpb25zIG9mIGdjYyBhbmQgY2xhbmcgdGhhdCBmdWxseSBp bXBsZW1lbnQgdGhlIEMxMSBhdG9taWNzCiAgaW50ZXJmYWNlIHdpbGwgbm90IG5lZWQgYSBzcGVj aWFsIGhlYWRlciBmaWxlIGJ1dCBjYW4gdXNlIHRoZWlyIG93bgogIHRoYXQgaXMgc2hpcHBlZCB3 aXRoIHRoZSBjb21waWxlcjoKCiAgLSBnY2Mgc3RhcnRpbmcgd2l0aCB2ZXJzaW9uIDQuOQoKICAt IGNsYW5nIHN0YXJ0aW5nIHdpdGggdmVyc2lvbiAzLjYKCiAgVGhpcyBmdWxsIHN1cHBvcnQgb2Yg YXRvbWljcyBhbGxvd3MgdG8gdXNlIGF0b21pYyBvYmplY3RzIGp1c3QgYXMKICBvdGhlciBvYmpl Y3RzIGl0IHdoYXRldmVyIG9wZXJhdGlvbnMgdGhlIGJhc2UgdHlwZSBzdXBwb3J0cy4KCiAgVGhl c2UgZGVmYXVsdCBvcGVyYXRpb25zIG9uIGF0b21pY3MgdXNlIHNlcXVlbnRpYWwgY29uc2lzdGVu Y3kuIFRoYXQKICBpcywgZWFjaCBzdWNoIGFuIG9wZXJhdGlvbiB3aWxsIGVuZm9yY2UgYSBmdWxs IG1lbW9yeSB0cmFuc2ZlciBhbmQKICB0aGUgcGVyY2VpdmVkIGVmZmVjdCBpcyBhcyBpZiBhbGwg dGhlc2Ugb3BlcmF0aW9ucywgZXZlbiBpZiBpc3N1ZWQKICBpbiBkaWZmZXJlbnQgdGhyZWFkcywg aGF2ZSBiZWVuIGRvbmUgb25lIGFmdGVyIGFub3RoZXIuIFRodXMsIHRocmVhZAogIHBhcmFsbGVs aXNtIGNhbiBvbmx5IHBsYXkgYmV0d2VlbiBzdWNoIG9wZXJhdGlvbnM6CgojK0JFR0lOX0NFTlRF UgogICphdG9taWNzIG9wZXJhdGlvbnMgYXJlIGV4cGVuc2l2ZSoKIytFTkRfQ0VOVEVSCgogIFRo ZSBmdW5jdGlvbmFsIGludGVyZmFjZXMgd2l0aCBkaWZmZXJlbnQgPW1lbW9yeV9vcmRlcj0gYXJn dW1lbnRzCiAgKD1fZXhwbGljaXQ9IHN1ZmZpeCB0byB0aGUgbmFtZSkgdGhhdCB3ZSBkZXNjcmli ZWQgYWJvdmUgbWF5IGJlIHVzZWQKICB0byBtaWxkZXIgdGhlIG1lbW9yeSBlZmZlY3QgdGhhdCBh dG9taWMgb3BlcmF0aW9ucyBoYXZlLiBUaGUKICBwb3NzaWJsZSBnYWluIG9mIHN1Y2ggZGlmZmVy ZW50IG1lbW9yeSBjb25zaXN0ZW5jeSBtb2RlbHMgYXJlIHZlcnkKICBhcmNoaXRlY3R1cmUgZGVw ZW5kZW50LiBFLmcgb24gdGhlIHg4NiBwbGF0Zm9ybXMgdGhleSBvZmZlciBhbG1vc3QKICBubyBh ZHZhbnRhZ2UsIHdoZXJlYXMgb24gQVJNIHBsYXRmb3JtcyBhY3F1aXJlL3JlbGVhc2Ugc2VtYW50 aWNzIG1heQogIGJyaW5nIHNvbWUgbm90aWNlYWJsZSBnYWluLgoKICBCdXQgYmV3YXJlIHRoYXQg dGhpcyBnYWluIGlzIGJvdWdodCB3aXRoIGEgc2Vuc2libGUgY29tcGxleGlmaWNhdGlvbgogIG9m IHRoZSBjb2RlLiBPbmx5IHVzZSB0aGlzIGlmIHRoZSBhdG9taWMgb3BlcmF0aW9ucyBhcmUgYSBt ZWFzdXJhYmxlCiAgcGVyZm9ybWFuY2UgYm90dGxlbmVjayAvYW5kLyB5b3UgYWxyZWFkeSBoYXZl IHJlZHVjZWQgdGhlIG51bWJlciBvZgogIHRoZXNlIG9wZXJhdGlvbnMgdG8gYSBtaW5pbXVtLgoK KiogUGFydGlhbCBDMTEgYXRvbWljcyBzdXBwb3J0CgogIEEgc2VyaWVzIG9mIGNvbXBpbGVyIHZl cnNpb25zIG9mZmVycyBwYXJ0aWFsIGF0b21pY3Mgc3VwcG9ydCB0aGF0CiAgYWxyZWFkeSBpbXBs ZW1lbnRzIG1vc3Qgb2YgdGhlIEMxMSBzZW1hbnRpYzoKCiAgLSBnY2MgdmVyc2lvbnMgNC43IGFu ZCA0LjgKCiAgLSBjbGFuZyB2ZXJzaW9ucyAzLjIgdG8gMy41CgogIFRoZSB2ZXJzaW9ucyBwcm92 aWRlIHRoZSBidWlsdC1pbiBmdW5jdGlvbnMgYXMgZGVzY3JpYmVkIGFib3ZlIGJ1dAogIGxhY2sg ZnVsbCBjb21waWxlciBzdXBwb3J0IGZvciBhdG9taWMgdHlwZXMgYW5kIG9wZXJhdGlvbnMuCgog IFdpdGggdGhlID08c3RkYXRvbWljLmg+PSBoZWFkZXIgdGhhdCB3ZSBzdXBwbHkgZm9yIHRoZXNl IGNvbXBpbGVycywKICBhcHBsaWNhdGlvbiBjb2RlIGNhbiB1c2UgdGhlIGZ1bmN0aW9uYWwgaW50 ZXJmYWNlcy4gQSBtYWNybwogID1fQXRvbWljKFQpPSBpcyBwcm92aWRlZCB0aGF0IGNhbiBiZSB1 c2VkIHRvIGlzc3VlIGVtdWxhdGVkCiAgZGVjbGFyYXRpb25zIG9mIGF0b21pYyB0eXBlcyB0aGF0 IHNob3VsZCBiZSAqZm9yd2FyZCBjb21wYXRpYmxlKiB0bwogIHBsYXRmb3JtcyB3aXRoIGNvbXBs ZXRlIEMxMSBhdG9taWNzIHN1cHBvcnQuICBFeGFtcGxlOgoKIytiZWdpbl9zcmMgQwovLyBnbG9i YWwgdmFyaWFibGVzCl9BdG9taWMoc2l6ZV90KSB0aHJlYWRfaW5zaWRlX2NvdW50ID0gQVRPTUlD X1ZBUl9JTklUKDApOwpfQXRvbWljKHNpemVfdCkgdGhyZWFkX3RvdGFsX2NvdW50ID0gQVRPTUlD X1ZBUl9JTklUKDEpOwoKaW50IG15X3RocmVhZF9mdW5jdGlvbih2b2lkKiBhcmcpIHsKICAgYXRv bWljX2ZldGNoX2FkZCgmdGhyZWFkX2luc2lkZV9jb3VudCwgMSk7CiAgIGF0b21pY19mZXRjaF9h ZGQoJnRocmVhZF90b3RhbF9jb3VudCwgMSk7CgogICAvLyBkbyBzb21ldGhpbmcgY29tcGxpY2F0 ZWQgaGVyZQoKICAgLy8gYXQgdGhlIGVuZAogICBhdG9taWNfZmV0Y2hfc3ViKCZ0aHJlYWRfaW5z aWRlX2NvdW50LCAxKTsKfQojK2VuZF9zcmMKCiAgVW5kZXJuZWF0aCBzdWNoIGVtdWxhdGVkIGF0 b21pYyBvYmplY3RzIGFyZSBpbXBsZW1lbnRlZCBhcyBhcnJheXMgb2YKICA9dm9sYXRpbGU9IGJh c2UgdHlwZSBvZiBzaXplIDEuIFRoaXMgaGFzIHRoZSBmb2xsb3dpbmcgc291Z2h0CiAgZWZmZWN0 czoKCiAgLSBUaGV5IGNhbid0IGJlIGFzc2lnbmVkIHRvLgogIC0gVGhleSBldmFsdWF0ZSB0byBh IHBvaW50ZXIgaW4gYWxtb3N0IGFueSBjb250ZXh0LgogIC0gT3BlcmF0aW9ucyB3aXRoIHRoZW0g Y2Fubm90IGJlIHJlb3JkZXJlZCBieSB0aGUgY29tcGlsZXIuCgogIFNvIHlvdSBzaG91bGQgYmUg cmVsYXRpdmVseSBzYWZlIGZyb20gcHJvZ3JhbW1pbmcgZXJyb3JzIHRoYXQgd291bGQKICBhY2Nl c3Mgc3VjaCBvYmplY3RzIHdpdGhvdXQgcGFzc2luZyB0aHJvdWdoIHRoZSB0eXBlIGdlbmVyaWMg YXRvbWljCiAgZnVuY3Rpb25zLiBUaGUgY29tcGlsZXIgd2lsbCBlcnJvciBvdXQgb24gaW1wcm9w ZXIgdXNhZ2Ugb2Ygc3VjaAogIGF0b21pYyBvYmplY3RzLCBidXQgdGhlIGRpYWdub3N0aWNzIG1h eSBiZSBhIGJpdCBjcnVkZS4KCioqKiBJc3N1ZXMKCiAgICBTaW5jZSB0aGlzIGFwcHJvYWNoIG1h eSByZWludGVycHJldCBkYXRhIHRocm91Z2ggcG9pbnRlciBjYXN0cywgaXQKICAgIGNvdWxkIHBv dGVudGlhbGx5IGJlIGRhbmdlcm91cy4gU28gbGV0IHVzIGRpc2N1c3MgdGhlIHBvc3NpYmxlCiAg ICBpc3N1ZXMuCgogICAgLSBUaGUgZ2VuZXJpYyBmYWxsYmFja3MgZm9yIG1lbW9yeSBhY2Nlc3Mg b25seSB1c2UgPW1lbWNweT0gYW5kCiAgICAgID1tZW1jbXA9IHRvIGFjY2VzcyB0aGUgZGF0YSBp dHNlbGYuIFNvIHRoZSBhY2Nlc3Mgb2YgdGhlIGRhdGEgaXMKICAgICAgd2l0aGluIHRoZSBjb25z dHJhaW50cyBvZiB0aGUgc3RhbmRhcmQuCgogICAgLSBUaGUgZ2VuZXJpYyBmYWxsYmFja3MgZm9y IG1lbW9yeSBhY2Nlc3MgZW5zdXJlIHRoYXQgdGhlaXIKICAgICAgYXJndW1lbnRzIGhhdmUgY29t cGF0aWJsZSBiYXNlIHR5cGVzIChpZiBhIHBvaW50ZXIgaXMgcGFzc2VkIGluKQogICAgICBvciBh cmUgYXNzaWdubWVudCBjb21wYXRpYmxlIHdpdGggdGhlIGJhc2UgdHlwZSBvZiB0aGUgYXRvbWlj CiAgICAgIChpZiBhIHZhbHVlIGlzIHBhc3NlZCBpbikuIFNvIGRhdGEgdGhhdCBpcyBjb3BpZWQg YWNyb3NzIGNhbgogICAgICBuZXZlciBiZSBtaXNpbnRlcnByZXRlZCBhcyBiZWluZyBvZiBhIHdy b25nIHR5cGUgYmVjYXVzZSB0aGUgdHdvCiAgICAgIHRhcmdldCB0eXBlcyBhcmUgY29tcGF0aWJs ZS4KCiAgICAtIFRoZSBzcGVjaWFsaXplZCBmdW5jdGlvbnMgd2l0aCA9X1g9IHN1ZmZpeCBtYXkg cmVpbnRlcnByZXQgdGhlaXIKICAgICAgZGF0YSBhcyB0aGUgY29ycmVzcG9uZGluZyA9dWludFhY X3Q9IGZvciB0aGUgc2l6ZS4gQ29weWluZyBvcgogICAgICBjb21wYXJpbmcgc3VjaCBkYXRhIGlz IGFsd2F5cyBndWFyYW50ZWVkIHRvIHVzZSBhbGwgYml0cywgc28gaW4KICAgICAgdGhhdCBzZW5z ZSBpdCBpcyBlcXVpdmFsZW50IHRvID1tZW1jcHk9IGFuZCA9bWVtY21wPS4KCiAgICAtIFRoZSBh cml0aG1ldGljIG9wZXJhdGlvbnMgdGhhdCBhcmUgZXhlY3V0ZWQgdGhlbiBhcmUgb3BlcmF0aW9u cwogICAgICBvbiBhbiB1bnNpZ25lZCBpbnRlZ2VyIHR5cGUgdGhhdCBoYXMgbm8gcGFkZGluZyBi aXRzLiBUaGlzCiAgICAgIGFyaXRobWV0aWMgaXMgY29tcGF0aWJsZSBmb3IgYWxsIGludGVnZXIg dHlwZXMgdGhhdCBoYXZlIG5vCiAgICAgIHBhZGRpbmcgYml0cyBhbmQsIGZvciB0aGUgc2lnbmVk IHR5cGVzLCBhcmUgcmVwcmVzZW50ZWQgd2l0aAogICAgICB0d28ncyBjb21wbGVtZW50LgoKICAg IC0gQW4gZW11bGF0ZWQgYXRvbWljIHdpdGggdGhpcyBhcHByb2FjaCBpcyBpbXBsZW1lbnRlZCBh cyBhbiBhcnJheQogICAgICB0byB0aGUgYmFzZSB0eXBlLCBhbmQgc28gaW4gdGhlIHVzZXIgY29k ZSB0aGUgYmFzZSB0eXBlIG9mIHRoZQogICAgICBvYmplY3QgcmVtYWlucyB2aXNpYmxlIHRvIHRo ZSBjb21waWxlci4gQXMgYSBjb25zZXF1ZW5jZSB0aGlzCiAgICAgIGFwcHJvYWNoIGhhcyBubyBl ZmZlY3Qgb24gdGhlIGFsaWFzaW5nIHJ1bGVzLCB0aGUgY29tcGlsZXIKICAgICAgYWx3YXlzIGhh cyBjb21wbGV0ZSBpbmZvcm1hdGlvbiBhYm91dCB0aGUgdHlwZSBvZiBlYWNoIG9iamVjdC4KCiAg ICBUaGUgb25seSBwb3RlbnRpYWwgcHJvYmxlbSBmb3Igb3VyIGFwcHJvYWNoIHRoYXQgcmVtYWlu cyBpcwogICAgYWxpZ25tZW50LiBTaW5jZSB0aGUgc3R1YiBmdW5jdGlvbnMgdGhhdCBhcmUgcHJv dmlkZWQgbWF5IHVzZQogICAgY2FzdHMgdG8gPXVpbnRYWF90PSBvZiAiYXRvbWljIiBvYmplY3Rz IHlvdSBoYXZlIHRvIGVuc3VyZSB0aGF0CiAgICB0aGVzZSBvYmplY3RzIGFyZSBhdCBsZWFzdCBh bGlnbmVkIGFzIHRoZXNlIHR5cGVzIHdvdWxkIGJlLiBUaGlzCiAgICBzaG91bGQgbm90IGJlIGEg cHJvYmxlbSwgaWYgdGhlIGJhc2UgdHlwZSBpcyBhbiBpbnRlZ2VyIHR5cGUsCiAgICB0b28uIElu dGVnZXIgdHlwZXMgd2l0aCBzYW1lIHNpemUgc2hvdWxkIGhhdmUgdGhlIHNhbWUgYWxpZ25tZW50 LgoKICAgIElmIHlvdSBlbmNvdW50ZXIgcHJvYmxlbXMgd2l0aCBhIHVzZXIgZGVmaW5lZCB0eXBl IHRoYXQgaGFzIGEgc2l6ZQogICAgdGhhdCBpcyBhIHNtYWxsIHBvd2VyIG9mIHR3byB5b3UgY291 bGQgZm9yY2UgYWxpZ25tZW50CgojK2JlZ2luX3NyYyBDCl9BbGlnbmFzKHNpemVvZih0b3RvKSkg X0F0b21pYyh0b3RvKSB0b3RvMTsKX19hdHRyaWJ1dGVfXygoX19hbGlnbmVkX18oc2l6ZW9mKHRv dG8pKSkpIF9BdG9taWModG90bykgdG90bzI7CiMrZW5kX3NyYwoKICAgIHdpdGggd2hhdGV2ZXIg b2YgdGhlIHR3byBjb25zdHJ1Y3RzIHdvcmtzIGZvciB5b3UuCgogICAgSSBhbSBjdXJyZW50bHkg c3RydWdnbGluZyB0byBwcm92aWRlIGEgdmVyc2lvbiBvZiB0aGUgPV9BdG9taWMoVCk9CiAgICBt YWNybyB0aGF0IGVuc3VyZXMgdGhhdCBhdXRvbWF0aWNhbGx5LiBJdCBzZWVtcyB0byBiZSBwb3Nz aWJsZSBidXQKICAgIHByb2R1Y2VzIGEgbG90IG9mIG5vaXNlIGZvciBmdW5jdGlvbiBwYXJhbWV0 ZXJzIHRoYXQgYXJlIHBvaW50ZXJzCiAgICB0byBhdG9taWNzLgoKKiogQmFzaWMgYXRvbWljcyBz dXBwb3J0CgogICBFdmVuIG9sZGVyIHZlcnNpb25zIG9mIGdjYyBhbmQgY2xhbmcgaW1wbGVtZW50 IHRoZSA9X19zeW5jPSBidWlsdC1pbgogICBmdW5jdGlvbnMgYW5kIGNhbiB0aGVyZWJ5IG1hZGUg dG8gYWNjZXB0IHRoZSBzYW1lIDxzdGRhdG9taWMuaD4KICAgaGVhZGVyIGFzIGRpc2N1c3NlZCBh Ym92ZS4gU2luY2UsIGFzIHRoZWlyIG5hbWVzIGluZGljYXRlLCB0aGVzZQogICBidWlsdC1pbnMg b25seSBoYXZlIGZ1bGx5IHN5bmNocm9uaXppbmcgdmVyc2lvbnMsIHRoZXkgd2lsbCBub3QgYmUK ICAgYWJsZSB0byB0YWtlIGFkdmFudGFnZSBvZiB0aGUgZGlmZmVyZW50IGNvbnNpc3RlbmN5IG1v ZGVscy4gQnV0CiAgIGltcGxlbWVudGluZyBhdG9taWNzIHdpdGggc3Ryb25nZXIgY29uc2lzdGVu Y3kgdGhhbiByZXF1aXJlZCwgaGVyZQogICBzZXF1ZW50aWFsIGNvbnNpc3RlbmN5LCBvbmx5LCBp cyBjb25mb3JtaW5nIHRvIHRoZSBDIHN0YW5kYXJkLgoKKiBUaGUgaW1wbGVtZW50YXRpb24KCgoq KiBSZXF1aXJlbWVudHMKCioqKiBDb21waWxlcnMKCiAgWW91IHNob3VsZCBiZSBhYmxlIHRvIGNv bXBpbGUgdGhpcyBpbXBsZW1lbnRhdGlvbiB3aXRoIGFueSB2ZXJzaW9uCiAgb2YgbW9kZXJuIGdj YyBhbmQgY2xhbmcuIChWZXJzaW9ucyBhcmUgaGFyZCB0byB0ZWxsLCBnY2Mgc2hvdWxkIHdvcmsK ICBmb3IgNC4xKSBUaGUgcXVhbGl0eSBvZiB0aGUgcmVzdWx0aW5nIGJpbmFyeSB3aWxsIGRlcGVu ZCBvbiB0aGUKICBpbXBsZW1lbnRhdGlvbiBvZiBhdG9taWMgc3VwcG9ydCBieSB0aGUgY29tcGls ZXIuCgogIFRoZXJlIGFyZSB0aHJlZSBkaWZmZXJlbnQgaW1wbGVtZW50YXRpb25zLCBmb3IgbW9k ZXJuIGNsYW5nIGFuZCBnY2MsCiAgYW5kIG9uZSBmb3IgdGhvc2UgY29tcGlsZXJzIHRoYXQgb25s eSBzdXBwb3J0IHRoZSA9X19zeW5jXz0KICBidWlsdC1pbnMuIFRoZXkgYXJlIG9ubHkgdGVzdGVk IHdpdGggY2xhbmcgYW5kIGdjYywgYnV0IG1pZ2h0IHdvcmsKICB3aXRoIG90aGVyIGNvbXBpbGVy cyB0aGF0IGltcGxlbWVudCBvbmUgb2YgdGhlIHNldHMgb2YgYnVpbHQtaW5zIGFuZAogIGlzIG90 aGVyd2lzZSBjb21wYXRpYmxlIHRvIHNvbWUgZ2NjIGV4dGVuc2lvbnM6CgogIC0gY29tcG91bmQg ZXhwcmVzc2lvbnMgd2l0aCA9KHsgfSk9CiAgLSA9X19hdHRyaWJ1dGVfXz0gd2l0aCA9X19hbGlh c19fPSBhbmQgPV9fdW51c2VkX189CiAgLSA9X19idWlsdGluX2Nob29zZV9leHByPSBmb3IgdGhl ID1fX3N5bmM9IHZlcnNpb24gYXMgYSBwcmVjdXJzb3Igb2YKICAgIEMxMSdzID1fR2VuZXJpYz0K CiAgVGhlcmUgYXJlIHNvbWUgaGV1cmlzdGljcyBpbiBwbGFjZSB0byBkZWNpZGUgYXQgY29tcGls ZSB0aW1lIHdoaWNoCiAgY2FzZSBhcHBsaWVzLCBuYW1lbHkgPV9fY2xhbmdfXz0gdG8gZGV0ZWN0 IGNsYW5nLCA9X19BVE9NSUNfLi4uPQogIG1hY3JvcyB0byBkZXRlY3QgdGhlIEMxMSB2ZXJzaW9u cyBvZiB0aGUgYnVpbHQtaW5zLgoKKioqIE9TIG9yIEMgbGlicmFyeSBzdXBwb3J0CgogICAgVGhl IGxpYnJhcnkgbWF5IHdvcmsgd2l0aCBkaWZmZXJlbnQgbG9jayBjb25zdHJ1Y3RzLCBjdXJyZW50 bHkgd2UKICAgIGltcGxlbWVudCBvbmUgc2ltcGxlIGdlbmVyaWMgYXBwcm9hY2ggdGhhdCBvbmx5 IHVzZXMgc3Bpbm5pbmcsIGFuZAogICAgYSBtaXhlZCBhcHByb2FjaCB0aGF0IHVzZXMgTGludXgn ID1mdXRleD0gYXMgYW4gaW5hY3RpdmUgc2xlZXAKICAgIHN0cmF0ZWd5IGFzIGEgbGFzdCByZXNv cnQuIFRoZSBsYXR0ZXIgaGFzIGJlZW4gdGVzdGVkIHdpdGggdGhlCiAgICA9bXVzbD0gQyBsaWJy YXJ5LgoKICAgIFRoaXMgbG9ja2luZyBzdHJhdGVneSBjYW4gYmUgYSBwZXJmb3JtYW5jZSBib3R0 bGVuZWNrIGZvcgogICAgYXBwbGljYXRpb25zIHdpdGggYSBzdHJvbmcgY29uZ2VzdGlvbiBvbiBv bmUgcGFydGljdWxhciBhdG9taWMKICAgIGRhdGEsIGUuZyBjb2RlIHRoYXQgd291bGQgaW5zZXJ0 IGxpc3QgZWxlbWVudHMgdGhyb3VnaCBhCiAgICBjZW50cmFsaXplZCBsaXN0IGhlYWQuIElmIHRo aXMgbGlzdCBoZWFkIGNhbiBub3QgYmUgcmVhbGl6ZWQgd2l0aAogICAgYSBsb2NrLWZyZWUgYXRv bWljLCB0aGUgY3JpdGljYWwgc2VjdGlvbiBvZiBtb2RpZnlpbmcgaXQgaXMKICAgIHByb3RlY3Rl ZCBieSBvdXIgbG9jay4gU3VjaCBjb2RlIGhhcyB2ZXJ5IHBhcnRpY3VsYXIgcHJvcGVydGllcy4K CiAgICAtIFNpbmNlIHRoZSBjcml0aWNhbCBzZWN0aW9uIHVzdWFsbHkgaXMgcmVhbGx5IHNob3J0 IGNvbXBhcmVkIHRvIGEKICAgICAgc2NoZWR1bGluZyBpbnRlcnZhbCBvZiB0aGUgT1MsIHRoZSBw cm9iYWJpbGl0eSB0aGF0IHRoZSBsb2NrIGNhbgogICAgICBiZSB0YWtlbiBpbW1lZGlhdGVseSBp cyBoaWdoLiBTbyB0aGUgZmFzdCBwYXRoIGZvciB0YWtpbmcgdGhlCiAgICAgIGxvY2sgbXVzdCBi ZSAqcmVhbGx5IGZhc3QqLiBPdXIgaW1wbGVtZW50YXRpb24gZXNzZW50aWFsbHkgaGFzCiAgICAg IGFuID1hdG9taWNfY29tcGFyZV9leGNoYW5nZV9zdHJvbmdfZXhwbGljaXQ9LCBoZXJlLiBPbmUg bWVtb3J5CiAgICAgIGluc3RydWN0aW9uIG9uIHRoZSBmYXN0IHBhdGggbXVzdCBiZSBlbm91Z2gu CgogICAgLSBJZiBsb2NraW5nIGZhaWxzIGEgdGhlIGZpcnN0IHRyeSwgc3RpbGwgdGhlIHByb2Jh YmlsaXR5IGlzIHZlcnkKICAgICAgaGlnaCB0aGF0IGl0IHdpbGwgc3VjY2VlZCBzb29uIGFmdGVy LiBUaGlzIGlzIGJlY2F1c2Ugb25seQogICAgICBzY2hlZHVsZWQgdGhyZWFkcyBjb21wZXRlLCBo ZXJlLCBzbyB0aGVyZSBhcmUgbmV2ZXIgbW9yZSB0aHJlYWRzCiAgICAgIGluIHBsYXkgdGhhbiB3 ZSBoYXZlIHByb2Nlc3NvcnMuIFRoZXJlZm9yZSBhcyBhIHNlY29uZCBzdHJhdGVneQogICAgICB3 ZSBzcGluIGZvciBhIHdoaWxlIHVudGlsIHdlIGdldCB0aGUgbG9jay4gSW4gb3VyIGV4cGVyaW1l bnRzIG9uCiAgICAgIGF2ZXJhZ2Ugb25lIHNpbmdsZSByb3VuZCBvZiBzcGlubmluZyB3YXMgZW5v dWdoLgoKICAgIC0gQSB0aGlyZCBleGNlcHRpb25hbCBjYXNlIG1heSBvY2N1ciwgd2hlbiB0aGUg dGhyZWFkIHRoYXQgaXMKICAgICAgaG9sZGluZyB0aGUgbG9jayBpcyBkZXNjaGVkdWxlZCBpbiB0 aGUgbWlkZGxlIG9mIHRoZSBjcml0aWNhbAogICAgICBzZWN0aW9uLiBUaGUgcHJvYmFiaWxpdHkg Zm9yIHRoYXQgZXZlbnQgaXMgcXVpdGUgcmFyZSAoMC4xICUgaW4KICAgICAgb3VyIGV4cGVyaW1l bnRzKSBidXQgc3RpbGwgdGhpcyBjYXNlIG9jY3Vycy4gSWYgaXQgZG9lcywgdGhlCiAgICAgIHdv cmxkIGNoYW5nZXMgZHJhc3RpY2FsbHksIGEgaGVyZCBvZiB0aHJlYWRzIGFsbCBoYXZlIHRvIHdh aXQKICAgICAgZm9yIGEgbG9uZyB0aW1lICh1bnRpbCB0aGUgbG9ja2VyIGlzIHJlc2NoZWR1bGVk KSB0byBoYXZlIGFueQogICAgICBjaGFuY2UgdG8gb2J0YWluIHRoZSBsb2NrLiBBY3RpdmUgd2Fp dCBoZXJlIGlzCiAgICAgIGNvdW50ZXJwcm9kdWN0aXZlLiBJbiB0aGUgY29udHJhcnksIGJ5IGdv aW5nIGludG8gYW4gaW5hY3RpdmUgT1MKICAgICAgc2xlZXAsIHRoZSBwb3NzaWJpbGl0eSBmb3Ig dGhlIGxvY2tlciB0byByZWdhaW4gYW4gZXhlY3V0aW9uCiAgICAgIHNsb3QgaW5jcmVhc2VzLgoK ICAgV2UgaW1wbGVtZW50IHRoaXMgc3RyYXRlZ3kgYSBiaXQgZGlmZmVyZW50bHkgdGhhbiBjbGFz c2ljYWwgbG9ja3MKICAgd2l0aCB3YWl0LWNvdW50ZXJzIHdvdWxkIGRvLiBXZSBqdXN0IGhhdmUg YSBzaW5nbGUgPXVuc2lnbmVkPSB2YWx1ZQogICB0aGF0IGF0IHRoZSBzYW1lIHRpbWUgaG9sZHMg dGhlIGxvY2sgYml0IChITyBiaXQpIGFuZCBhCiAgIGNvdW50ZXIuIFRoYXQgY291bnRlciBpcyBu b3Qgdmlld2VkIGFzIGEgY291bnRlciBvZiB0aGUgdGhyZWFkcwogICB0aGF0IGFyZSBpbiBhIGtl cm5lbCB3YWl0LCBidXQganVzdCBjb3VudHMgdGhlIG51bWJlciBvZiB0aHJlYWRzCiAgIGluc2lk ZSB0aGUgY3JpdGljYWwgc2VjdGlvbi4gVGhpcyBoYXMgdGhlIGZvbGxvd2luZyBhZHZhbnRhZ2Vz OgoKICAgLSBBbiB1cGRhdGUgdG8gdGhlIGNvdW50ZXIgcGFydCBpcyByZWxhdGl2ZWx5IHJhcmUu IFNvIHdlIHNhdmUKICAgICBtZW1vcnkgYmFuZHdpZHRoLCBhbmQgd2UgYWxzbyBhdm9pZCB0b28g bXVjaCBpbnRlcmFjdGlvbiBiZXR3ZWVuCiAgICAgdGhlIGRpZmZlcmVudCB0aHJlYWRzIHRoYXQg Y29tcGV0ZSBmb3IgdGhlIGxvY2suCgogICAtIFRoZSBmYXN0IHBhdGggb2NjdXJzIHdoZW4gdGhl IHZhbHVlIGlzID0wPSwgaW5pdGlhbGx5LiBJdCBzZXRzCiAgICAgdGhlIEhPIGJpdCAodGhlIGxv Y2sgYml0KSBhbmQgdGhlIExPIGJpdCAoZm9yIGEgY291bnRlciBvZiB2YWx1ZQogICAgID0xPSkg aW4gb25lIGdvLiBUaGUgcmVzdWx0aW5nIHZhbHVlIGlzID1VSU5UX01BWC8ydSsydT0uCgogICAt IElmIHRoZSBmYXN0IHBhdGggZmFpbHMsIHRoZSBjb3VudGVyIGlzIGF0b21pY2FsbHkgaW5jcmVt ZW50ZWQgYnkKICAgICBvbmUsIGFuZCB3ZSBlbnRlciBhIHNwaW4gbG9jayB0byBzZXQgdGhlIEhP IGJpdCBhcyB3ZWxsLgoKICAgLSBBZnRlciBoYXZpbmcgc3B1biBmb3Igc29tZXRpbWUsIHdlIHN1 cHBvc2UgdGhhdCB3ZSBhcmUgaW4gdGhlIGJhZAogICAgIHNpdHVhdGlvbiBhbmQgZ28gaW50byBh ID1mdXRleF93YWl0PS4gR29pbmcgaW50byB0aGUgPWZ1dGV4X3dhaXQ9CiAgICAgbWF5IGZhaWwg aWYgdGhlIHZhbHVlIGNoYW5nZXMuIFNpbmNlIGFkZGl0aW9uYWwgdGhyZWFkcyBvbmx5CiAgICAg Y2hhbmdlIHRoZSBjb3VudGVyIHdoZW4gdGhleSBhcnJpdmUsIHRoaXMgY2FuJ3QgaGFwcGVuIHRv byBvZnRlbgogICAgIGFuZCB0aGUgdGhyZWFkIGdvZXMgdG8gc2xlZXAsIGV2ZW50dWFsbHkuCgog ICAtIFVubG9ja2luZyBpcyBhIHZlcnkgc2ltcGxlIG9wZXJhdGlvbi4gVGhlIGxvY2tlciBoYXMg Y29udHJpYnV0ZWQKICAgICA9VUlOVF9NQVgvMnUrMnU9IHRvIHRoZSB2YWx1ZSwgYW5kIHNvIGp1 c3QgaGFzIHRvIGRlY3JlbWVudCB0aGUKICAgICB2YWx1ZSBhdG9taWNhbGx5IGJ5IHRoYXQgYW1v dW50LiBCeSBkb2luZyBzbywgdGhlIHRocmVhZCBhbHNvCiAgICAgbm90aWNlcyBpZiBvdGhlciB0 aHJlYWRzIHN0aWxsIGFyZSBpbiB0aGUgY3JpdGljYWwgc2VjdGlvbiBhbmQKICAgICB3YWtlbnMg b25lIG9mIHRoZW0uCgoKKiogQ2F2ZWF0cwoKKioqIFN5bWJvbCByZW5hbWluZwoKICBUaGVyZSBp cyBvbmUgaW1wb3J0YW50IGRpZmZpY3VsdHkgd2hlbiBjb21waWxpbmcgdGhpcy4gVGhlIG9yaWdp bmFsCiAgPV9fYXRvbWljPSBsaWJyYXJ5IGludGVyZmFjZSB3YXMgZGV2ZWxvcGVkIHdpdGggQysr IGluIG1pbmQgYW5kIG5vdAogIEMuIFRoZXJlZm9yZSBpdCBmcmVlbHkgdXNlcyBmdW5jdGlvbiBv dmVybG9hZGluZyBmb3IgdGhlIGJ1aWx0LWlucwogIHZlcnN1cyB0aGUgbGlicmFyeSBpbnRlcmZh Y2UuIFNpbmNlIHdlIGFsc28gdXNlIHRoZSBsaWJyYXJ5CiAgZnVuY3Rpb25zIGFzIGZhbGxiYWNr cyBpbiB0aGUgaW1wbGVtZW50YXRpb24gb2Ygc29tZSBvZiB0aGUgPV9YPQogIHZhcmlhbnRzIHRo aXMgbmFtaW5nIHNjaGVtZSBpcyBub3Qgc3VwcG9ydGFibGUgd2l0aCBhIEMgY29tcGlsZXIuCgog IFdlIGdldCBhd2F5IHdpdGggaXQgYnkgdXNpbmcgaW50ZXJuYWwgbmFtZXMsIHByZWZpeGVkIHdp dGggPV9faW1wbF89CiAgZm9yIGFsbCBmdW5jdGlvbnMuIFRoZW4gd2UgcmVuYW1lIHN5bWJvbHMg dG8gdGhlIGludGVuZGVkIG9uZXMgdXNpbmcKICA9b2JqY29weT0uCgogIC0gVGhlIGN1cnJlbnQg aW50ZWdyYXRpb24gaW50byBtdXNsIGRvZXMgdGhpcyB3aXRoIGEgKnNjcmlwdCogdGhhdAogICAg eW91IGhhdmUgdG8gcnVuICptYW51YWxseSogYWZ0ZXIgY29tcGlsYXRpb24uCiAgLSBZb3UgdGhl biBoYXZlIHRvIGxhdW5jaCA9bWFrZT0gYSAqc2Vjb25kIHRpbWUqIHRvIGRvIHRoZSBmaW5hbCBs aW5rLgoKIFRoaXMgdGVjaG5pcXVlIGlzIGNlcnRhaW5seSBub3QgaWRlYWwgYW5kIHN1YmplY3Qg dG8gaW1wcm92ZW1lbnQuCgoqKiogU3VwcG9ydCBvZiAxNiBieXRlIGF0b21pYyBpbnN0cnVjdGlv bnMKCiAgICBUaGUgbWFpbiBkaWZmZXJlbmNlIGZvciBtb2Rlcm4gcHJvY2Vzc29ycyB0aGF0IGlz IHJlbGV2YW50IGhlcmUgaXMKICAgIGlmIGl0IHN1cHBvcnRzIDE2IGJ5dGUgYXRvbWljIGluc3Ry dWN0aW9ucyBvciBub3QuIFRoZXJlIGlzIG5vCiAgICBkaWZmaWN1bHR5IHRvIGRldGVjdCB0aGlz IGF0IGNvbXBpbGUgdGltZSwgYnV0IGlmIHRoZSBsaWJyYXJ5IGlzCiAgICB1c2VkIHdpdGggY29k ZSB0aGF0IGlzIGNvbXBpbGVkIHdpdGggYSBkaWZmZXJlbnQgY29tcGlsZXIgb3IganVzdAogICAg ZGlmZmVyZW50IGNvbXBpbGVyIG9wdGlvbnMsIGluY29tcGF0aWJsZSBiaW5hcnkgY29kZSBtYXkg YmUKICAgIHByb2R1Y2VkLgoKICAgIE15IHBsYW4gaXMgdG8gZnJlZXplIHRoYXQgZmVhdHVyZSBh dCBjb21waWxlIHRpbWUgb2YgdGhlIGxpYnJhcnkKICAgIGFuZCByZWZsZWN0IHRoZSBjYXBhY2l0 eSBpbiB0aGUgPTxzdGRhdG9taWMuaD49IHRoYXQgaXMKICAgIHByb3ZpZGVkLiBUaGlzIHRoZW4g bWF5IHJlc3VsdCBpbiBjb2RlIHRoYXQgaXMgYSBiaXQgbGVzcwogICAgb3B0aW1pemVkIHRoYW4g aXQgY291bGQsIGJ1dCB0aGF0IGlzIGNvbXBhdGlibGUuCgogICAgLSBJZiB0aGUgbGlicmFyeSBp cyAqbm90KiBjb21waWxlZCB3aXRoIGRpcmVjdCAxNiBieXRlIHN1cHBvcnQgdGhlCiAgICAgIGFw cGxpY2F0aW9uIG1heSBub3QgdXNlIGl0LCBhbmQgdGh1cyB1c2UgYSBtZW1vcnkgaW1wbGVtZW50 YXRpb24KICAgICAgZm9yIHN1Y2ggb3BlcmF0aW9ucy4KCiAgICAtIElmIHRoZSBsaWJyYXJ5ICpp cyogY29tcGlsZWQgd2l0aCBkaXJlY3QgMTYgYnl0ZSBzdXBwb3J0IGJ1dCB0aGUKICAgICAgYXBw bGljYXRpb24gY29tcGlsZXIgZG9lc24ndCBzdXBwb3J0IGl0LCB0aGUgdXNlciBjb2RlIHNob3Vs ZAogICAgICBmYWxsYmFjayB0byBsaWJyYXJ5IGNhbGxzLCBidXQgd2hpY2ggaW4gdHVybiB1c2Ug dGhlIGF0b21pYwogICAgICBpbnN0cnVjdGlvbnMuIFNvIHN1Y2ggYSB2YXJpYW50IHdvdWxkIGhh dmUgYSBjYWxsIG92ZXJoZWFkIGFuZAogICAgICB3b3VsZCBub3QgYmUgYWJsZSB0byBpbmxpbmUg dGhlIGF0b21pY3MgaW4gdGhlIHVzZXIgYmluYXJ5LgoKICAgIEFsbCBvZiB0aGlzIGlzIG5vdCB5 ZXQsIGRvbmUsIHRob3VnaC4gQmUgY2FyZWZ1bCB3aGVuIHVzaW5nIHRoaXMKICAgIHByZWxpbWlu YXJ5IHZlcnNpb24uCgoKKiogTGVmdG92ZXJzCgogICBUaGVyZSBhcmUgc29tZSBsZWZ0b3ZlcnMg dGhhdCB3aWxsIGhvcGVmdWxseSBkaXNhcHBlYXIuCgogICAtIFRoZXJlIGFyZSBzZXZlcmFsIGhh c2ggZnVuY3Rpb25zIGFuZCBhIGluc3RydW1lbnRhdGlvbgogICAgIGluZnJhc3RydWN0dXJlIGZv ciB0aGUgaGFzaGVzLiBJIGRpZG4ndCBoYXZlIGVub3VnaCB0ZXN0IGNhc2VzCiAgICAgeWV0IHRv IHNlZSB3aGF0IHdvdWxkIGJlIGJlc3QsIGhlcmUuCgogICAtIFRoZXJlIGlzIG9wdGlvbmFsIGlu c3RydW1lbnRhdGlvbiBmb3IgdGhlIGxvY2sKICAgICBmdW5jdGlvbnMuIFN3aXRjaGluZyBpdCBv biBjaGFuZ2VzIG92ZXJhbGwgcGVyZm9ybWFuY2UKICAgICBzdWJzdGFudGlhbGx5LCBhbmQgdGh1 cyBJJ2QgZXhwZWN0IGEgbm90aWNlYWJsZSBIZWlzZW5iZXJnCiAgICAgZWZmZWN0LiBTbyB0aGVz ZSBjb3VudGVyIGNhbiBnaXZlIHF1YWxpdGF0aXZlIGluZm9ybWF0aW9uIGFib3V0CiAgICAgd2hh dCBoYXBwZW5zLCB5b3Ugc2hvdWxkbid0IHRha2UgdGhlIGZpZ3VyZXMgdmVyYmFsbHkuCm== --=-Fj0hkJOliWRpcFMbXhC3-- --=-9ytLh6UmV5Ig1MP2q2V/ Content-Type: application/pgp-signature; name="signature.asc" Content-Description: This is a digitally signed message part Content-Transfer-Encoding: 7bit -----BEGIN PGP SIGNATURE----- Version: GnuPG v2 iEYEABECAAYFAlW/VOYACgkQD9PoadrVN+KTvwCeLevdSNlrZ5hok7UHFUM46hwU ogIAn2fAalaUslWRLxcEesdCkr8xFpZy =tfF/ -----END PGP SIGNATURE----- --=-9ytLh6UmV5Ig1MP2q2V/--