<?xml version="1.0" encoding="UTF-8" standalone="yes" ?>
<!DOCTYPE bugzilla SYSTEM "https://bugs.webkit.org/page.cgi?id=bugzilla.dtd">

<bugzilla version="5.0.4.1"
          urlbase="https://bugs.webkit.org/"
          
          maintainer="admin@webkit.org"
>

    <bug>
          <bug_id>24986</bug_id>
          
          <creation_ts>2009-04-01 06:55:58 -0700</creation_ts>
          <short_desc>[multi-patch] ARM JIT port</short_desc>
          <delta_ts>2009-08-12 22:58:46 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>PC</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Enhancement</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Gabor Loki">loki</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          <cc>akiss</cc>
    
    <cc>barraclough</cc>
    
    <cc>ddkilzer</cc>
    
    <cc>emacemac7</cc>
    
    <cc>gyuyoung</cc>
    
    <cc>hausmann</cc>
    
    <cc>ismail</cc>
    
    <cc>kbalazs</cc>
    
    <cc>kenneth</cc>
    
    <cc>laszlo.gombos</cc>
    
    <cc>mh+webkit</cc>
    
    <cc>mike</cc>
    
    <cc>mrowe</cc>
    
    <cc>oliver</cc>
    
    <cc>ossy</cc>
    
    <cc>sriram.neelakandan</cc>
    
    <cc>tonikitoo</cc>
    
    <cc>yael</cc>
    
    <cc>yong.li.webkit</cc>
    
    <cc>zherczeg</cc>
    
    <cc>zoltan</cc>
    
    <cc>zuh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>116163</commentid>
    <comment_count>0</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-04-01 06:55:58 -0700</bug_when>
    <thetext>The ARM JIT port can be downloaded from:
 - git clone git://code.staikos.net/webkit &amp;&amp; git checkout loki/arm-port
 - or http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=loki/arm-port

Any feedback is welcome!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116210</commentid>
    <comment_count>1</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-01 13:02:13 -0700</bug_when>
    <thetext>a number of the new files appear to have taken large chunks of logic from existing jit files (just replacing a few x86 asm statements with arm equivalents), so should include appropriate copyright info from the original files.  The patch also does not appear to use the macro assembler in any way which we see as problematic.

There also appears to be a large number of unnecessary function renames that do nothing but cloud the patch itself.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116218</commentid>
    <comment_count>2</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-04-01 14:07:19 -0700</bug_when>
    <thetext>The implementation is started at early of January, and the repository has been reorganized many times since that (there was a merge, which took 3 days, because many things were moved and renamed). We decided to focus on the functionality first, and will do the renamings later.

From now on, we can discuss the syntax. We think the two jit ports have many things in common, but the architecture specific optimizations are different. ARMCompiler and AssemblerBuffer have similar purpose, except the ArmCompiler does some post processing, that is why we decided to put under the jit directory (and AssemberBuffer was not exists in that time)

We don&apos;t see any problem with the copyright information as long as it compatible with bsd or lgpl (our supporters don&apos;t like gpl for some reasons).

By the way, do you like our work? :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116219</commentid>
    <comment_count>3</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-01 14:10:42 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; We don&apos;t see any problem with the copyright information as long as it
&gt; compatible with bsd or lgpl (our supporters don&apos;t like gpl for some reasons).
The specific issue is that you appear to have copy/pasted logic from the existing jit files so should be including the appropriate copyrights from those files, eg. Apple and Cameron

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116266</commentid>
    <comment_count>4</comment_count>
    <who name="Akos Kiss">akiss</who>
    <bug_when>2009-04-02 03:10:03 -0700</bug_when>
    <thetext>(In reply to comment #3)

Hi Oliver,

Now, I try to present our view on the issue. There were two main modules of JSC we had to modify, the assembler and the JIT.


To the assembler, we added two new files:

ARMAssembler.h: This contains only C++ functions that deal with the ARM instruction set. This code is ours for sure.

MacroAsseblerARM.h: This contains a simple class wrapping pointers. Here, we could not reuse the AbstractMacroAssembler for ARM since it is quite x86-focused.


In the jit module, there are 7 new files:

CommonJIT.h: This file contains platform-specific macros that are required because of the differences in the x86 and ARM JITs.

ARMCompiler{.h,.cpp}: Basically, this is where the generated machine code instructions are stored. In your implementation, this functionality is implemented in the AssemblerBuffer. However, we go further than simply storing the instructions. We maintain a constant pool and post-optimize branches. Moreover, because of the pecularities of ARM, labels and branches are built and stored in a different manner than done for x86. The x86 jit has no element of similar functionality.

ARMJIT{.h,.cpp}: This converts byte code to machine instructions. The high-level approach is similar to that used in x86, but this is defined/fixed by the interface we had to implement. We did not want to diverge from that. However, on the low-level, the logic of the implementation is ARM-specific. The x86 JIT was not reusable at that level. Where we do resemble that code is the name of the functions.

ARMJITStubFunctions.cpp: This is our own idea. x86 JIT contains nothing alike.

ARMJITPropertyAccess.cpp: This is the place where you might be right. This code resembles the most to the origial JITPropertyAccess. This contains the least ARM-specific optimizations. Here, we are ready to add Apple copyrights.


Additionally, we added an extra file into wtf as well:

WTF/Tape.h: This is an auxiliary data structure. Idea and implementation is ours alone.


Basically, I do not think that implementing an interface implies copyrights on the implementation for the owner of the interface, do you? So, now you see our perspective. May I ask you to point our where you do not agree with our explanations above?


Regards,
Akos, Gabor, and Zoltan

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116349</commentid>
    <comment_count>5</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-04-02 14:27:21 -0700</bug_when>
    <thetext>(In reply to comment #4)
The issue isn&apos;t implementing an interface, it&apos;s things like the privateCompileGetByIdChainList, etc methods which are duplicates of the existing macroassembler versions (which you should be using) where the only change is replacing the macroassembler instructions with arm instructions, or ARMJIT.h which is clearly a modified copy of the x86 version.

However these are really minor issues that we shouldn&apos;t tunnel vision on, the more significant barrier to being included in trunk is that you should be using the macroassembler, rather than just duplicating large amounts of logic for the ARM.  Effectively you&apos;re making a completely distinct jit so any new opcodes will have to be written twice: once for ARM and once for every other port.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116360</commentid>
    <comment_count>6</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-04-02 15:26:59 -0700</bug_when>
    <thetext>Hi Akos, Gabor, Zoltan,

Congratulations on getting this working!, great job.

As Oliver says (and as I&apos;m sure is clear from the changes that have been going into the repository over the last months) we have been abstracting out the major architectural differences in the JIT through use of the MacroAssembler interface with a very clear direction of allowing the core of the JIT to remain as common code shared across architectures.  Our main concern with having the functionality of the JIT duplicated (and effectively forked) will be that engine changes we make will be prone to break the ARM JIT, which we will not be in a position to maintain.  As such, if the JIT is to be forked it would seem to make most sense for it to exist in a fork of WebKit, so we are not continually breaking you?

However, if you are interested in landing this into trunk, from the limited chance I&apos;ve had to look at your code I&apos;d say your port looks structurally similar enough to the existing JIT that it should be quite possible to merge the two back together.  I see no obvious barriers to moving your code over to using a MacroAssembler interface matching that of the existing JIT.  If then the names of a few internal functions are brought into line with each other (accessing virtual registers, etc), then the two pieces of code should start looking rather similar.  I&apos;d also suggest that porting WREC may help here, since the code generation is very simple, and almost entirely abstracted through the MacroAssembler interface.  Once you have implemented the MacroAssembler class (which should be a fairly trivial wrapper on your ArmAssembler) there are only three very short calling-convention functions in WREC that should need any modification.

thanks &amp; good luck,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116413</commentid>
    <comment_count>7</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-04-03 05:38:19 -0700</bug_when>
    <thetext>It would be good for us as well if the MacroAssembler were the only module which had to be rewritten, but unfortunately that is not the case here.

We have some barriers which have to be solved to generate machine code on ARM:

1. Constant pool:
On ARM, only those constants can be fit into an instruction which can be produced from a 8 bits long number rotated twice by a 4 bit unsigned integer. For example 257 (0x101) does not fit. This implies that the constant pool is needed. There are two possible solutions. (1) Leave the constant on CallFrame, or (2) insert them into the machine code. The first solution is not satisfactory, because on ARM the space is limited (12 bit) to represent an offset from the base. If the offset does not fit, more instructions are needed to access the address. In the second solution, we have to put extra code which jumps through the constant pool. This case is still better than the first one, because it generates much less machine code. Additionally we have to generate other constants as well, like addresses of stub and CTI functions, far jumps, etc. So, those extra constants have to be stored in the constant pool too (not on CallFrame).

2. Branch optimization:
There is an option to use faster and more predictable branches. Initially, we
generate all branches with PC relative load which uses one constant address and one machine instruction. After the JIT code generation is finished, we can replace the PC relative load with a simple branch instruction if the address fits in the instruction. This replace saves space and times as well. All the above implies that the compilation should have a second phase to do the replacing.

3. Exception handling:
On ARM, we cannot follow the strategy of the exception handling used on x86. We
cannot regenerate identical instructions sequences when an exception happens, because relative calls and constants in the pool are not necessarily the same (as described above, see items 1 and 2). The return address manipulation is solved through stub functions.

4. Conditional field:
All ARM instructions are conditionally executed. So, we can avoid short jumps
(cmp and jmp combo). See a really small example at &apos;op_construct_verify&apos;. On ARM, we can combine the two jumps using the conditional field.

5. Dynamically generated stub functions:
We eliminated all inline assembly codes from the source code and replaced them with dynamically generated JIT codes. We generate the following code snipets dynamically: ABI switch (trampoline in your terminology), return address manipulation for exception handling, and soft math instructions. The most interesting part is the stub functions for return address manipulation. Because of exception handling, we cannot address some CTI functions directly. For those functions, stub functions are generated where we can solve the return address manipulation.

6. Bigger patterns worsen performance:
At last, if we generate machine code through MacroAssembler we will miss more target specific optimizations. Using a general function of MacroAssembler to generate an operation can often generate useless code. This is similar issue like at super-instructions.

I would be the happiest person if we could use MacroAssembler as you said, but I think it is hard task (and it would lead to performance degradation on ARM). Additionally, if we would request an interface change necessary for ARM that would cause performance regression on x86, it would be rejected. :-) However, I am open to make our points of view converge. The truth must lie somewhere inbetween our approaches.

Feel free to comment or ask!

Regards,
Gabor
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116470</commentid>
    <comment_count>8</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-04-03 12:55:07 -0700</bug_when>
    <thetext>&gt; Congratulations on getting this working!, great job.

Thank you for your encouraging words!

I probably mentioned some time ago, that we have already tried to put nanojit (Tamarin jit engine) under JavaScriptCore. That does exactly the same thing as your MacroAssembler: it has a LIR (low-level intermediate language), and generates machine code from that language. At first sight it looks great, only we have to generate lir, and nanojit will do the rest of the work. Unfortunately, the results were disappointing. Why? Because that common low-level language totally misses platform specific optimizations. Even x86 and x86-64 has major differences. ARM is something totally different, because the instruction size is constant: 1 word (4 bytes).

We must sacrifice either the easly maintanable code or great performance. We chose the second one, we want a fast jit. We hope we can maintain the arm port in the future, and we can implement all the neccessary changes, new byte-codes, etc. But we see your points as well. We had actually talked a lot about them.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116475</commentid>
    <comment_count>9</comment_count>
    <who name="Mike Hommey">mh+webkit</who>
    <bug_when>2009-04-03 13:35:40 -0700</bug_when>
    <thetext>One small question: which ARM ABI does this code target ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>116524</commentid>
    <comment_count>10</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-04-03 21:46:14 -0700</bug_when>
    <thetext>(In reply to comment #9)
&gt; One small question: which ARM ABI does this code target ?

Which is used by gcc, its major version number is 2

r0-r3: temporary registers
  - parameter passing
  - r0-r1: return value
r4-r12: preserved or not used
r13: stack pointer
r14: link register

stack is aligned to 8 bytes

see http://infocenter.arm.com/help/topic/com.arm.doc.ihi0042c/IHI0042C_aapcs.pdf</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118640</commentid>
    <comment_count>11</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-04-24 03:40:14 -0700</bug_when>
    <thetext>We have added WREC support for ARM.

See at loki/arm-port branch on staikos.


The current results are the following:
Performance:
  SunSpider: 1.2x as fast
  V8: 1.6x as fast
  WindScorpion: 1.05 as fast

Binary:
  Shared &apos;jsc&apos; file has grown by 14%.

Memory:
  RSS has grown by 3-4%.

The results were measured on a N810 device with shared Qt-4.5.0 library.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>118652</commentid>
    <comment_count>12</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-04-24 07:04:48 -0700</bug_when>
    <thetext>(In reply to comment #11)
&gt; Performance:
&gt;   SunSpider: 1.2x as fast
&gt;   V8: 1.6x as fast
&gt;   WindScorpion: 1.05 as fast

We have noticed if &apos;-falign-function=32&apos; option is passed to the compiler, the port produces better performance results.

SunSpider: 1.4x fast
V8: 1.65x as fast
WindScorpion: 1.06x as fast

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120252</commentid>
    <comment_count>13</comment_count>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2009-05-07 01:35:20 -0700</bug_when>
    <thetext>There was a short discussion earlier why we do not use MacroAssembler for
generating JIT code. Although our position did not change &amp;#8211; i.e., we still
think that JIT has to be as fast as possible &amp;#8211; we have implemented WREC for
ARM using MacroAssembler. You can check the code at:
http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=ossy/arm-port-MacroAssember_WREC 

Here is the result. All values are compared to our ARM port, where WREC generates hand-optimized JIT code.

Performance:
SunSpider is almost the same (~1.01x as slow).
RexExpDNA is 1.05x as slow.

MacroAssembler-based WREC generates 20% bigger JIT code. 
&apos;JSC&apos; binary size is 2% bigger.
RSS is almost the same (~ 0.5% bigger).

Well, the numbers say that the MacroAssembler-based WREC is both slower and
bigger than the hand-optimized one. The results definitely come from the
pattern-driven machine code generation. Here is an example (from
&apos;generatePatternCharacterPair&apos;):

using MacroAssembler:
	...
	int pair = ch1 | (ch2 &lt;&lt; 16);
	failures.append(branch32(NotEqual, character, Imm32(pair)));
	...
	mov	r0, #97 ; 0x61
	orr	r0, r0, #6750208
	cmp	r2, r0
	bne	0x426be0bc

hand-optimized:
	...
	if ((ch1 &gt;&gt; 8) || (ch2 &gt;&gt; 8)) {
		...
	} else {
		m_assembler.sub_r(tmpReg, character, m_assembler.imm(ch2 &lt;&lt;16));
		m_assembler.cmp_r(tmpReg, m_assembler.imm(ch1));
	}
	failures.append(m_compiler.emitBranch(&amp;m_assembler, ARMAssembler::NE));
	...
	sub	r0, r2, #6750208
	cmp	r0, #97
	bne	0x426be0bc

This is a typical example how hard is to optimize inside a pattern. While
MacroAssembler works with an &apos;Imm32&apos; data that hides an optimization
opportunity, the hand-optimized version can use the fast case (because initial 
conditions are well known at that point). Well, this optimization could be implemented in &apos; branch32&apos; (splitting the input, checking the upper bytes, etc.), but this kind of &apos;Imm32&apos; data occurs mostly in a RegExp. So, in other cases this would lead to JIT generation overhead.

Implementing MacroAssembler-based WREC was not a hard task because WREC uses
very simple JIT constructions. In contrast, the SquirrelFish bytecode uses more
diversified JIT constructions (like calls, loops, math operators, etc.) . 
Although in WREC there is very little space for optimizing the machine code, 
the performance gain of the hand-written JIT is about 5%. What would be then the difference between a MacroAssembler-based and the hand-optimized version of the
JavaScript JIT?

We see that the uniform JIT is pretty and well maintainable, but is this a good
reason not to go for a 1, 2, 5, or 10% performance gain?

Regards,
Gabor and Csaba</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>120263</commentid>
    <comment_count>14</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-05-07 04:20:27 -0700</bug_when>
    <thetext>Since you have the MacroAssembler up and running, you may find it interesting to give Yarr (our new regex engine) a try (this should largely just be a question of porting the function entry/exit routines, which are fairly similar to those in WREC).

Yarr is still work-in-progress, but last time I measured I believe it was considerably more than 2x faster then WREC at running the larger v8 regular expression benchmark.  We intend to expand the code generation to more completely cover the full regex language, which we expect to further extend the gain of using Yarr over WREC (which must fall back to PCRE for expresions that are not supported).  For your information, WREC is currently unused in tip-of-tree, and the code is likely to be removed fairly soon.  The advantage using the MacroAssembler interface if that such developments in JSC should be able to become available for ARM with a fairly low overhead to get them up and running.  (Alternatively you are of course welcome to port Yarr&apos;s code generation to hand generated assembler, though I shan&apos;t make any promises at this point as to how long it&apos;ll be until it is ripped out and replaced by yet another regular expression engine! ;-) ).

The interface to the MacroAssembler is certainly not set in stone, and where there are limitations that degrade the ability to generate code we would be happy to look at how we can better accommodate code generation on all architectures.  Looking at the example you&apos;ve given, I&apos;d suggest that considering the ranges of immediates supported on Arm, having the MacroAssembler perform some examination of Imm32 values to attempt to generate the optimal branch form (from the hand coded example) where it is possible to do so could be hugely beneficial.  Though it is clearly more work to implement such a mechanism than it is to simply code the assembler for the idiom in one specific place, there is also a greater benefit to be reaped from the invested effort.  For example, any time an integer or pointer in being embedded into the JIT code, and its bit pattern happened to have the required property it would also benefit from this optimization.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>122614</commentid>
    <comment_count>15</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-05-22 01:48:29 -0700</bug_when>
    <thetext>We have decided to implement an ARM port based on MacroAssember as you requested. Now, we have released an initial revision of it at staikos (http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=loki/ma-arm-port). The patch is still incomplete - Yarr and FPU are not yet supported -, but finally all regression tests are successfully passed. The patch is based on r43818 (May 18).

We will post the performance progression later as well.
Please, take a look at the patch, and give us any feedback about it.

Regards,
Gabor, Zoltan
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124125</commentid>
    <comment_count>16</comment_count>
      <attachid>30897</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-03 03:12:05 -0700</bug_when>
    <thetext>Created attachment 30897
comparison between interpreter and MacroAssembler based ARM JIT

Here is the result of MacroAssembler based ARM JIT. Measured on N810.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124126</commentid>
    <comment_count>17</comment_count>
      <attachid>30898</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-03 03:12:11 -0700</bug_when>
    <thetext>Created attachment 30898
comparison between MacroAssembler based and from the scratch ARM JIT

Here is the comparison between MacroAssembler based and from the scratch ARM JIT. Measured on N810.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124127</commentid>
    <comment_count>18</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-03 03:13:56 -0700</bug_when>
    <thetext>Finally, we have rebased both ARM JIT port to r43818 and measured the results on N810. See the attached results above.

Now, we are interested in your opinion about both ARM JIT. What do you think of them?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124610</commentid>
    <comment_count>19</comment_count>
    <who name="Gyuyoung Kim">gyuyoung</who>
    <bug_when>2009-06-05 19:33:55 -0700</bug_when>
    <thetext>Can I ask a question? I would like to run the arm-port. However, I don&apos;t know how to compile only SFX on maemo scratchbox. I wonder how do you compile SFX.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>124619</commentid>
    <comment_count>20</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-06 00:03:26 -0700</bug_when>
    <thetext>&gt; I don&apos;t know how to compile only SFX on maemo scratchbox.
1.set up a scratchbox environment (I recommend scratchbox2)
2.build Qt (4.5.x) (if it is necessary) and set QTDIR
3.get ARM port from staikos
4.if you want to build only a command line &apos;jsc&apos; tool, remove all SUBDIRS entries
  except the &apos;JavaScriptCore/jsc.pro&apos; from WebKit.pro
5.build WebKit with the standard &apos;build-webkit &amp;#8211;qt&apos; script 
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125110</commentid>
    <comment_count>21</comment_count>
      <attachid>31125</attachid>
    <who name="Csaba Osztrogonác">ossy</who>
    <bug_when>2009-06-10 01:43:26 -0700</bug_when>
    <thetext>Created attachment 31125
comparison between interpreter and MacroAssembler based ARM JIT+YARR

YARR support implemented in out ARM port based on MacroAssembler. You can find it on Staikos: (http://code.staikos.net/cgi-bin/gitweb.cgi?p=webkit;a=shortlog;h=loki/ma-arm-port).

SunsSpider results are:
1.34x as fast (trunk-r43818 -&gt; ARM JIT with MacroAssembler)
1.48x as fast (trunk-r43818 -&gt; ARM JIT with MacroAssembler + YARR)

No significant change on V8 and WindScorpion.

br,
Csaba</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125287</commentid>
    <comment_count>22</comment_count>
      <attachid>31155</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-11 02:47:29 -0700</bug_when>
    <thetext>Created attachment 31155
Updated version of generic ARM JIT port

We are eagerly await your review.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125319</commentid>
    <comment_count>23</comment_count>
      <attachid>31155</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-11 09:58:08 -0700</bug_when>
    <thetext>Comment on attachment 31155
Updated version of generic ARM JIT port

I&apos;m not sure why you have made the changes to AssemblerBuffer.h -- they&apos;re not needed for the v7 assembler.  I think those changes make the patch larger than they need to be which masks the actual meaningful changes.

The changes to codeblock seems worrisome as well -- exception information is very large (in the order of megs per page) which is why we create the information lazily -- while i realise you are making unique constants in the codestream is it not possible to generate the same *sized* instructions?  Regenerating the code to create exception information merely requires the offsets be the same, not that the code be absolutely identical.  If you can make such a guarantee then you should be able to reduce memory usage, and further reduce the number of changes needed to non-arm code (in general we are trying to move to less ifdefs rather than more).

I&apos;m not really happy with the changes to JITPropertyAccess as neither x86, x86-64, nor ARMv7 required these changes, why do we need them in &lt;v7 ARM?

I&apos;m not entirely sure what Tape is -- it looks like a less generic, but iterable version of SegmentedVector, is this a correct assessment?  Can you not just make SegmentedVector be iterable?

I&apos;m going to hold off r- for now (pending your response to these questions) but i&apos;ll need gavin to review the assembler proper</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125347</commentid>
    <comment_count>24</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-11 11:15:06 -0700</bug_when>
    <thetext>Hi!

&gt; (From update of attachment 31155 [review])
&gt; I&apos;m not sure why you have made the changes to AssemblerBuffer.h -- they&apos;re not
&gt; needed for the v7 assembler.  I think those changes make the patch larger than
&gt; they need to be which masks the actual meaningful changes.

The answer is: Constant pool. Since ARM is a RISC CPU, immediates are limited to rotated 8 bit values. Generating 4 instructions for each load immediate values is a waste of memory space and slower than a pc relative load. I fear you will also need a constant pool later if you would like to extend the 16M limit of your ARMv7. You can read more about it here:
http://webkit.sed.hu/node/17

&gt; The changes to codeblock seems worrisome as well -- exception information is
&gt; very large (in the order of megs per page) which is why we create the
&gt; information lazily -- while i realise you are making unique constants in the
&gt; codestream is it not possible to generate the same *sized* instructions? 

We always keep the m_callReturnIndexVector after the code is generated, its size is not that big. Otherwise, we didn&apos;t modify the lazy exception information generation.

&gt; Regenerating the code to create exception information merely requires the
&gt; offsets be the same, not that the code be absolutely identical.  If you can
&gt; make such a guarantee then you should be able to reduce memory usage, and
&gt; further reduce the number of changes needed to non-arm code (in general we are
&gt; trying to move to less ifdefs rather than more).

Load immediates (pointers) always cause trouble. Depending on where they are in the memory, the generated code looks different. And I am totally agree about ifdefs.

&gt; I&apos;m not really happy with the changes to JITPropertyAccess as neither x86,
&gt; x86-64, nor ARMv7 required these changes, why do we need them in &lt;v7 ARM?

Constant pools again. We must ensure that a constant pool will not break the instruction list. Otherwise the hard coded offsets become useless. Alternatively, we could kill those constants and put labels everywhere when an offset needs to be stored. The extra memory cost is minimal, and the whole thing looks much portable.

&gt; I&apos;m not entirely sure what Tape is -- it looks like a less generic, but
&gt; iterable version of SegmentedVector, is this a correct assessment?  Can you not
&gt; just make SegmentedVector be iterable?

Why SegmentedVector is not in the /wtf directory if it is intended for generic use? Perhaps the advantages of the two can be merged together. You could also replace several Vectors with Tape. It is faster since it doesn&apos;t need to reallocate the segments all the time.

&gt; I&apos;m going to hold off r- for now (pending your response to these questions) but
&gt; i&apos;ll need gavin to review the assembler proper

I hope I could answer for your questions. This is actually the fastest version we could squeeze from macro assembler.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125350</commentid>
    <comment_count>25</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-11 11:20:42 -0700</bug_when>
    <thetext>&gt; Why SegmentedVector is not in the /wtf directory if it is intended for generic
&gt; use? Perhaps the advantages of the two can be merged together. You could also
&gt; replace several Vectors with Tape. It is faster since it doesn&apos;t need to
&gt; reallocate the segments all the time.

I&apos;d consider it an error that SegmentedVector is not in wtf -- and it sounds perfectly reasonable that segmentedvector and tape are merged</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125592</commentid>
    <comment_count>26</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-12 20:59:51 -0700</bug_when>
    <thetext>We really like to try to keep the sizes of individual changes down, and this patch is really doing two separate things – enabling ARM JIT support on YARR, and enabling the JS JIT on ARM (in the case of the latter we have also landed this in stages - first landing the JIT with optimizations disabled, and then separate patches to enable the optimizations).  We would much prefer to land these changes separately, since it both makes it much easier to properly review the code, and more importantly if we ever discover a bug or performance problem has been introduced, then it is a nightmare if we end up tracking it back to a huge changeset.

So I&apos;d really like to see a first patch that just enables YARR_JIT on ARM – we can follow up immediately after with the rest of the JS changes.  This means basically reverting everything in the JIT, interpreter, bytecode directories for now, and raising a second patch as soon as this has landed.


Looking at the changes to the AssemblerBuffer changes, I think the restructuring here isn&apos;t really working yet – which I think is somewhat reflected by the fact that you (presumably) needed to have a mix of ARMAssembler and AssemblerBufferARM methods within AssemblerBufferARM.cpp (and keeping the functions that need inspect the generated code closely tied in with the assembler does make sense to me).  We will want a constant pool available on all platforms, but we will want a single, generic implementation of the core infrastructure, shared on all architectures.  I&apos;m not going to suggest that you need to refactor that out before you can land this patch since that may be a significant task, but we will need to do this soon since other platforms will likely need constant pools, and we don&apos;t want duplicated implementations.

I&apos;d suggest that the best thing to do right now to prevent forking the AssemblerBuffer (which is not ultimately what we want to do) without causing you too much work, would be to simply look at temporarily moving the constant-pool related functionality back up into ARMAssembler (perhaps move the new fields added to AssemblerBufferARM into a new ARMConstantPool class for now, rather than adding the functionality into the existing class).  We can then as a separate change work out how we design a common constant pool mechanism across all platforms without having to hold this patch up.  What are your thoughts?

Also in the AssemblerBuffer, we really want to keep the cache flushing code all in one place, which is in ExecutableAllocator::cacheFlush.  We also need the repatch methods to use the ExecutableAllocator::makeWritable / ExecutableAllocator::MakeExecutable / the ExecutableAllocator::MakeWritable class for cache-flushing new code and repatching, as the other assemblers do.  This will mean that the ARM JIT will work with the ASSEMBLER_WX_EXCLUSIVE mechanism on platforms where this is required or desired for security reasons.  Also we intend to modify the way in which we repatch code so that we can coalesce protection changes and cache flushes, so it is important that the assemblers all use the same interfaces so we can keep the changes in sync.


The #defines are also going to need a little cleaning up.  We shouldn&apos;t be defining macros beginning with __ - we treat these as being reserved for compilers to define.  You could just rename __ARM_ARCH__ to ARM_ARCH_VERSION to fix this, though I&apos;d suggest if could be nice to define a macro like HAS_ARM_ARCH(N) to perform the check too.  PLATFORM(ARM) is also defined on ARM-v7 builds, so any code specific to the v6 &amp; earlier ARM JIT will need to check something like (PLATFORM(ARM) &amp;&amp; ! PLATFORM(ARM_V7)) or (PLATFORM(ARM) &amp;&amp; (ARM_ARCH_VERSION &lt; 7)), or (PLATFORM(ARM) &amp;&amp; !HAS_ARM_ARCH(7)) – or maybe have a new PLATFORM(ARM_PRE_v7) defined in Platform.h.  I&apos;m open to suggestions here.


I&apos;m a little concerned at having bkpt be a nop on pre-ARM-v5 platforms.  If the instruction doesn&apos;t exist, I think you really should remove it from the ARMAssembler interface (exactly as you have for clz_r).  I&apos;d suggest that on pre-v5 ARMs we really want to do something to stop execution from simply ploughing on through breakpoint()s.  A simple suggestion would be to implement MacroAssemblerARM::breakpoint() to plant a store to address 0 (I don&apos;t know ARM memory maps, but most platforms will leave this page unmapped to catch errors).  Alternatively you could plant a supervisor mode instruction which should cause a trap, or just infinite loop.


You may want to think about modifying the behavior of MacroAssemblerARM::ret().  You&apos;ve adhered to the same behavior as x86, but I&apos;m afraid we haven&apos;t been as well behaved on ARMv7, and you may want to consider copying.  It is clearly not ideal to have the behavior of MacroAssemblerARM::ret() differ between platforms, but it is also clearly not ideal to require all other platforms to mimic x86 behavior, and to push the return value on the stack.  We&apos;ve certainly not come up with the best and final solution here yet – the best solution may be to say that function entry and exit simply can&apos;t be described well by the MacroAssembler, and to remove ret() from the intergface &amp; call m_assembler.ret() directly.  Another solution for some cases may be to provide a higher level interface to describe function entry and exit to the MacroAssembler.


Finally there are a bunch of little code-style issues.  We do stick to full names for variable naming, so cpool should be constantPool, CPool should be ConstantPool.  We prefer inline methods to macro where possible, so ARM_COND_FIELD should be an inline method armConditionField.  In &apos;emitInst&apos; there is an extra space between the ASSERT and open paren.  In Platform.h there should not be a space between the # and the define/undef.  We don&apos;t prefix constants with a &apos;k&apos; – I&apos;m not sure we have an entirely consistent style on constants, but for values like this I&apos;d say we tend to stick to CAPS_AND_UNDERBARS (weinig/bdash/darin, I don&apos;t know if you want to chip in here, you normally point out my style errors :-) ).

I&apos;m going to r- for now, but don&apos;t worry - this is not as harsh as it sounds.
This is a perfectly normal stage in the inclusion of a set of changes of this size.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125849</commentid>
    <comment_count>27</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-14 17:07:30 -0700</bug_when>
    <thetext>In my eagerness to respond quickly to this patch I may have been a little hasty, I&apos;m not sure whether it will be sensible to move forwards without first addressing the design issues in the constant pools.

The real problem here is that by design the Assembler interface is intended to exactly match the targeted platform&apos;s instruction set. The MacroAssembler is where the constant pool should live.  This interface is designed to provide a higher level API to programmers developing the JIT, providing a common interface to machine code generation across architectures, masking the differences in capabilities of platforms and breaking down operations into multiple machine instructions where there is not a one-to-one mapping available.

This really should probably be implemented and landed independently of (and in advance of if required by) a new port of the JIT.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125917</commentid>
    <comment_count>28</comment_count>
      <attachid>31285</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-15 03:18:21 -0700</bug_when>
    <thetext>Created attachment 31285
Move Segmented vector to wtf sub-directory

First small patch: Tape and Segmented vector are merged together and moved to wtf sub-directory. I hope everybody will like this merged code.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>125943</commentid>
    <comment_count>29</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-06-15 08:13:54 -0700</bug_when>
    <thetext>I would do the move in one commit and the &quot;extend it with pre-increment iterator support&quot;.

Right now it is very difficult seeing what you extended.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126148</commentid>
    <comment_count>30</comment_count>
    <who name="Gyuyoung Kim">gyuyoung</who>
    <bug_when>2009-06-15 23:38:17 -0700</bug_when>
    <thetext>(In reply to comment #20)
&gt; &gt; I don&apos;t know how to compile only SFX on maemo scratchbox.
&gt; 1.set up a scratchbox environment (I recommend scratchbox2)
&gt; 2.build Qt (4.5.x) (if it is necessary) and set QTDIR
&gt; 3.get ARM port from staikos
&gt; 4.if you want to build only a command line &apos;jsc&apos; tool, remove all SUBDIRS
&gt; entries
&gt;   except the &apos;JavaScriptCore/jsc.pro&apos; from WebKit.pro
&gt; 5.build WebKit with the standard &apos;build-webkit &amp;#8211;qt&apos; script 

Thank you for your advice. However, I couldn&apos;t only build SFX using your instruction. I don&apos;t know the reason. Anyway, I was only able to build SFX after modifying GNUmakefile.am.

Can I ask one more question? When I executed SFX shell which includes your ARM port on my ARM target, the SFX came to crash with &quot;Illegal instruction&quot; message.(But, the SFX shell was executed on N810 well.) I got a backtrace from coredump.

(gdb) bt
#0  clear_cache (begin=0x40c41000 &quot;&quot;, end=0x40c41014 &quot;&quot;)
    at JavaScriptCore/jit/ARMCompiler.h:256
#1  0x0014e654 in JSC::ARMCompiler::compile (this=0xbeabf6b0, 
    executableAllocator=@0x246b58, codeBlock=0x0)
    at JavaScriptCore/jit/ARMCompiler.cpp:332
#2  0x0014570c in JSC::JIT::detectStorePCDelta ()
    at JavaScriptCore/jit/ARMJIT.cpp:326
#3  0x001458f4 in JIT (this=0xbeac0150, globalData=0x2473e8, codeBlock=0x0)
    at JavaScriptCore/jit/ARMJIT.cpp:65
#4  0x0013a278 in JSC::JIT::compileCTIMachineTrampolines (globalData=0x2473e8, 
    executablePool=0x247860, ctiArrayLengthTrampoline=0x247864, 
    ctiStringLengthTrampoline=0x247868, ctiVirtualCallPreLink=0x24786c, 
    ctiVirtualCallLink=0x247870, ctiVirtualCall=0x247874)
    at JavaScriptCore/jit/ARMJIT.h:161
#5  0x001320c8 in JITStubs (this=0x247860, globalData=0x2473e8)
    at JavaScriptCore/jit/JITStubs.cpp:83
#6  0x0001d074 in JSGlobalData (this=0x2473e8, isShared=false, 
    vptrSet=@0xbeac0c80) at JavaScriptCore/runtime/JSGlobalData.cpp:141
#7  0x0001d8d0 in JSC::JSGlobalData::create (isShared=false)
    at JavaScriptCore/runtime/JSGlobalData.cpp:191
#8  0x000137f8 in main (argc=1, argv=0xbeac0e14) at JavaScriptCore/jsc.cpp:314

My ARM target has 32-bit Marvell PXA310 624 MHz, which is ARM v5 architecture, AFAIK.
Do you know why the SFX comes to crash? If I need to create new bug for this issue, please let me know.


I hope that this arm port will be merged to webkit main trunk. :)

Thank you.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126155</commentid>
    <comment_count>31</comment_count>
      <attachid>31336</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-16 00:12:02 -0700</bug_when>
    <thetext>Created attachment 31336
Only move Segmented vector to wtf sub-directory</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126157</commentid>
    <comment_count>32</comment_count>
      <attachid>31337</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-16 00:12:40 -0700</bug_when>
    <thetext>Created attachment 31337
Add an Iterator to SegmentedVector</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126160</commentid>
    <comment_count>33</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-16 00:22:59 -0700</bug_when>
    <thetext>(In reply to comment #30)
&gt; Thank you for your advice. However, I couldn&apos;t only build SFX using your
&gt; instruction. I don&apos;t know the reason. Anyway, I was only able to build SFX
&gt; after modifying GNUmakefile.am.

I wrote that &apos;guide&apos; for Qt build not for Gtk.

&gt; on my ARM target, the SFX came to crash with &quot;Illegal instruction&quot;
&gt; message.(But, the SFX shell was executed on N810 well.)

First of all, at JavaScriptCore/jit/ARMCompiler.h:256
there is no asm instruction. What does your last &apos;git log&apos;
say?

If your (cross)GCC version is greater than 3.4.6, the
compilation produces a call for &apos;__clear_cache&apos; built-in
function. What is your GCC version?

&gt; I hope that this arm port will be merged to webkit main trunk. :)

You should try MacroAssembler based ARM JIT. The variant which
you use probably never be landed.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126164</commentid>
    <comment_count>34</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-16 00:44:43 -0700</bug_when>
    <thetext>Gavin, first of all, thanks for your comment. As you can see, we have started splitting the patch into separate smaller changes. We have added the first patch here in this bug report. Is it good solution for you to place every patch here in this bug report? Or should we create separate bug reports for each changes which blocks this bug entry?

The first - and I think is the most important - design issue is the constant pool. Correct me if I am wrong, but I feel that you does not catch the meaning of our constant pool design. At AssemblerBufferARM the constant pool contains addresses which could be changed during runtime. So practically the constant pool does not contain only constant values. Its name comes from GCC terminology. Its behavior looks like more an address pool rather than a constant pool such as
in RegisterFile.

The usage of constant pool is implicated by the ARM machine code itself. If a MacroAssembler asks to do something with an Address, the target architecture will have to place the address in a machine instruction or in a register in order to be able to work with them. On a generic ARM platform every 32 bits value can be produced by maximum 4 arithmetic instructions. This solution is not rewarding in every situation (see more at http://webkit.sed.hu/node/17). So, sometimes we
have to use a PC relative load in order to access a data. A group of values which are accessed by PC relative loads is a constant pool (in our view). The limitation of the constant pool is determined by the addressable distance of a PC relative load. In practice this means that we are collecting the constants during instruction appending until the distance of the first constant and its usage reach the maximum distance. After collecting the constant pool have to be flushed and separated from executable code. This kind of mechanism is not necessary for every architecture. I hope it was clear, and sorry if you have known it already.

We can abstract constant pool if you like, but there a design issue which have to discussed: where should the constant pool implementation should live.

1.- CP should live within a separate AssemberBuffer.
There will be an AssemblerBuffer without CP feature, and a other one (AssemblerBufferWithCP) with CP. This solution is very simple. Each architecture can decide which solution is suitable for them. The problem is here that the functionality of AssemblerBuffer is repeated in AssemblerBufferWithCP as well (code duplication, copy&amp;paste code, etc.)

2.- CP should live in {ARCH}Assembler.
Each architecture can implement its own constant pool. I think this is a bad solution, because there will be many code duplication (more than in case 1.), and the assembler have to be tightly coupled with AssemblerBuffer.

3.- CP should live in MacroAssembler{ARCH}
IMHO, there is no need to know anything about CP in this abstraction level. In order to be able to decide when to flush, the MacroAssembler have to be tightly coupled with AssemblerBuffer as well. This case is inconceivable, because the MacroAssembler does not know anything about how many bytes are written to the buffer when a function of the Assembler is called.

4.- CP should live in a separate file (derived from AssemblerBuffer)
This solution is very similar to the case 1). CP lives in a separate file (AssemblerBufferWithCP) where the constant pool interface have been implemented, and this class is derived from AssemblerBuffer. In this case the pubic interface of AssemblerBufferWithCP calls AssemblerBuffer interface considering the flushing.

What do you think about them?
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126165</commentid>
    <comment_count>35</comment_count>
      <attachid>31337</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-16 00:48:04 -0700</bug_when>
    <thetext>Comment on attachment 31337
Add an Iterator to SegmentedVector

r=me, i can&apos;t land these two patches right now because of the state of my tree -- i may do later if no one else has</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126168</commentid>
    <comment_count>36</comment_count>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2009-06-16 00:50:42 -0700</bug_when>
    <thetext>(In reply to comment #34)
&gt; Gavin, first of all, thanks for your comment. As you can see, we have started
&gt; splitting the patch into separate smaller changes. We have added the first
&gt; patch here in this bug report. Is it good solution for you to place every patch
&gt; here in this bug report? Or should we create separate bug reports for each
&gt; changes which blocks this bug entry?

In general we like things like the segmentedvector move and update to be in a separate bug as it makes it easier to do the r+-&gt;land-&gt;close pattern, but that&apos;s not a hard rule and we have far worse violations of that concept in bugs.w.o at the moment anyway :D
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126409</commentid>
    <comment_count>37</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-17 00:28:56 -0700</bug_when>
    <thetext>Zoltan,

There are three reasons that currently envisage we may require a constant pool on other platforms:

(1) For immediate values that cannot be represented within instruction operands.  For example, floating-point and vector values on x86 (&amp; x86-64, ARMv7).
(2) For values that can be (and currently are being) encoded in the instruction stream, but that might be more efficient if accessed via a constant pool.  E.g. on x86-64 it *might* be more efficient to place some pointer immediates in a constant pool (these are currently loaded via second move immediate instruction), and on arm-v7 32-bit immediate values are loaded with a 2 instruction sequence, again in some cases it may make sense to switch this to a data load.
(3) Moving values that are patched out of the instruction stream will remove the need to i-cache flush on modification, and by organizing constant-pool into page sized units we may be able to avoid changing protections when running with NX support.  This may be useful at some point in the future.

&gt; 3.- CP should live in MacroAssembler{ARCH}
&gt; IMHO, there is no need to know anything about CP in this abstraction level.

This way.  This is exactly the kind of thing that the macro assembler is intended to abstract. :-)  The idea of the assembler classes is that they very simply provide an interface to encode the machine instructions that are available on the target processor.  We do not want to intermingle the instruction formatting mechanism with an instruction selection policy – the latter should be layered upon the former.  The assembler is, of course, in many ways on its own a little unhelpful, due to the limitations of the instruction set - be it the inability to load an arbitrary 32-bit immediate value on ARM, or the inability to shift by any register on x86, etc, etc.  The MacroAssembler wraps the architecture specific assembler in a common higher level interface, providing the facilities as necessary to support its full API, and providing a richer programming interface.  It is already the case the the MacroAssembler must handle situations in which an immediate operand to an instruction may not fit within the range of values supported on a given platform, and in these situations it will load the value into a register.  Currently it&apos;s only option for doing so is to use immediate moves, but having the option of utilizing a constant pool also available here would be entirely complementary to existing mechanisms.

The parts of the implementation that can be shared across platforms (such as data-structures mapping the constant pool loads to immediate values to be added to the constant pool) may well fit nicely into the AbstractMacroAssembler layer to make them available across platforms.

&gt; In
&gt; order to be able to decide when to flush, the MacroAssembler have to be tightly
&gt; coupled with AssemblerBuffer as well.

I&apos;m not sure I would use the term tightly-coupled.  The AbstractMacroAssembler already has a size() method to check how much has currently been written to the buffer, it should just be able to use this to check how much code has been planted since a previous point.  Adding additional calls to check used space will not be a problem if necessary.

&gt; This case is inconceivable, because the
&gt; MacroAssembler does not know anything about how many bytes are written to the
&gt; buffer when a function of the Assembler is called.

Sure it does!  There should be a one-to-one mapping between calls to the Assembler and instructions planted, and as such the assembler can assume that the number of bytes written by an assembler call will be whatever the maximum instruction width is for that platform (4, in the case of ARM).
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126428</commentid>
    <comment_count>38</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-17 02:13:36 -0700</bug_when>
    <thetext>On ARM, every immediate values are limited. Constant values are 8 bit values shifted by an even number, memory adresses must be at maximum 4095 bytes away from a base register, the relative offset of branches are limited to +-32 Mbytes and so on. We do not store addresses in the constant pool by convenience, we do this because there is no other (reasonable) way. An independent constant pool which is not embedded into the code is limited to 8 kbytes because of the addressing limitations. Even if they are independent, we still need a way to load their base offset into a register, and we need to prepare multiple constant pools. External constant pools require too much efforts, and this is not the ARM way. ARM constants pools are embedded into the code, and protected by a branch instruction from execution.

What we store in the constant pool
 - immediates, if they cannot be encoded as at most two instructions
 - branch/call targets, since we don&apos;t know the target is within +-32Mbytes in advance. Although it might be unusual to generate bigger JIT code than 32 MBytes, it would be a security hole to do it any other way.
 - addresses which will be patched later. Same reason as before: we don&apos;t know the immediate will fit into data processing instructions.

If we want to know the size of an instruction in advance, we must always generate the worst case scenario. I.e: let&apos;s assume there is a macro assembler instruction which can be encoded as 1 (90%), 2 (7%) or 3(3%) instructions. If we insist to keep the code size fixed, we have to generate 3 instructions all the time, because of that 3%. From this viewpoint, x86 CISC looks more fixed-size than ARM.

From assembler viewpoint we have 3 kinds of instruction:
  - normal instruction
  - instruction with constant (if the constant is already in the pool, we can reuse its address)
  - instruction with unique constant (branches and other values patched later)

Something has to maintain state of the constant pool, and push it when necessary.
  - It can be done on MacroAssembler level, but in that case MacroAssembler must know which type of instruction (see above) is given.
  - It can be done on formatter level, in that case macro assembler knows nothing about the constant pool.

I doubt it is possible to maintain the constant pool without information about the instruction types.

I know the current assembler model is not prepared for variable length instructions, but it is essential on RISC architectures, where the generated code size depend on both the arguments and the current environment (state of the constant pool). On ARM, even a simple &quot;mov(reg, reg)&quot; may take 4 from 4096+4 bytes. The only barrier I saw to support variable length instruction is those patchOffsets used by property accesses. Are they really that important? Can we have a define to enable variable length instructions and put extra labels during code generation? In this case we could keep the advantages of both approach.

Besides, Gabor wrote the post you answered :)
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126643</commentid>
    <comment_count>39</comment_count>
    <who name="Gyuyoung Kim">gyuyoung</who>
    <bug_when>2009-06-17 19:25:56 -0700</bug_when>
    <thetext>(In reply to comment #33)

Sorry, I replied you lately.

&gt; First of all, at JavaScriptCore/jit/ARMCompiler.h:256
&gt; there is no asm instruction. What does your last &apos;git log&apos;
&gt; say?
I had used the branch of loki/arm-port with &quot;initial version of ARM port&quot; log.

&gt; If your (cross)GCC version is greater than 3.4.6, the
&gt; compilation produces a call for &apos;__clear_cache&apos; built-in
&gt; function. What is your GCC version?
I am using the maemo chinook scratchbox. GCC version of chinook is 3.4.4.
Fortunately, I succeeded to run arm-port using below source code,
  
         const int syscall = 0xf0002;
             __asm __volatile (
                    &quot;mov     r0, %0\n&quot;
                    &quot;mov     r1, %1\n&quot;
                    &quot;mov     r7, %2\n&quot;
                    &quot;mov     r2, #0x0\n&quot;
                    &quot;swi     0x00000000\n&quot;
                : 
                :   &quot;r&quot; (begin), &quot;r&quot; (end), &quot;r&quot; (syscall)
                :   &quot;r0&quot;, &quot;r1&quot;, &quot;r7&quot;
        );

&gt; &gt; I hope that this arm port will be merged to webkit main trunk. :)
&gt; You should try MacroAssembler based ARM JIT. The variant which
&gt; you use probably never be landed.

Yes, I start to use MacroAssembler based ARM JIT on the branch of loki/ma-arm-port.
Thank you.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126644</commentid>
    <comment_count>40</comment_count>
    <who name="Mark Rowe (bdash)">mrowe</who>
    <bug_when>2009-06-17 19:29:58 -0700</bug_when>
    <thetext>This bug isn&apos;t a good place to discuss how to build from the related git branch.  It only obfuscates the discussion about making progress on the JIT.  If you need assistance in building the git branch, I would suggest taking that discussion to email.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126917</commentid>
    <comment_count>41</comment_count>
      <attachid>31537</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-19 02:20:00 -0700</bug_when>
    <thetext>Created attachment 31537
Reorganize ARM architecture specific macros

This patch adds PLATFORM_ARM_ARCH macro which can be used to determine the minimum required ARM architecture version.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>126972</commentid>
    <comment_count>42</comment_count>
      <attachid>31537</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-19 11:30:48 -0700</bug_when>
    <thetext>Comment on attachment 31537
Reorganize ARM architecture specific macros

Looks good, armv7 is presently has a build problem in ToT, I will land this later today when I can test on that platform.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127046</commentid>
    <comment_count>43</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-19 15:07:43 -0700</bug_when>
    <thetext>Hi Zoltan, Gabor,

&gt; Besides, Gabor wrote the post you answered :)

Bah, sorry guys, easy to get confused between posts on a large bug like this. :o)

Okay, so to be clear, I do completely understand what a constant pool is, why one is required on arm (and on other platforms, too) and the fact that for certain operations it is necessary to generate multiple machine instructions.  And functionally, the way you have implemented this all looks great.  The place that I think your patch is somewhat at conflict with the design of the JIT is just in the layering, and I think that if we don&apos;t bring the interfaces into line with each other then we will find it more difficult to share code across platforms, and to avoid changes we make from breaking the arm port of the JIT as we go forwards.

I&apos;ve not done a good job anywhere of trying to describe the layers in the architecture, so let me do a better job now.  The abstract code generation layer (MacroAssembler interface down) is layered like a traditional compiler.  In a traditional compiler, it is common to have an assembler layer completely independent of the compiler (often a separate application).  The compiler takes a source code file, compiles it, and produces an output file of assembly code.  The interface to the assembler is largely made up of a set of assembly code mnemonics from which there is typically a one-to-one mapping to machine instructions (additionally there are assembler directives).

Let&apos;s look at an example:

arith.c: (compiled will gcc 4.0 -O3 -march=armv6)

     int sub(int x)
    {
        return x - 12345678;
    }

     int mul(int x)
    {
         return x * 12345678;
    }

arith.s:  (With some .globl &amp; .align directives stripped out to make it more readable.)

    _sub:
        sub	r0, r0, #12320768
        sub	r0, r0, #24832
        sub	r0, r0, #78
        bx	lr

    _mul:
        ldr	r3, L5
        mul	r0, r0, r3
        bx	lr

    L5:
        .long	12345678

In the case of the subtract, since the immediate does not fit within an immediate field of a subtract instruction, the C compiler has emitted multiple subtract instructions.  In the case of the multiply, the compiler has chosen to store the constant in a constant pool (labelled L5), and has planted a load instruction to load the constant from the pool.  These are two different instruction selection strategies, and a compiler may choose (as it has here) to use a mixture of both.  The constant-pool is not a mechanism implemented within the assembler, but instead is a one of a number of techniques available to the compiler during instruction selection when generating code for which a single assembly operation is not available.  The assembler is not aware of the structure or semantics of the constant pool - it only sees a PC relative load instruction.

Layering the compiler on top of an assembler in this fashion provides a number of benefits.  For the compiler developer, layering the compiler on the assembler separates the instruction selection from the minutiae of machine instruction encoding.  For clients of the compiler providing a well defined language for machine instruction generation is useful if the compiler provides facilities to bypass the higher level language, and directly emit a specific sequence of machine instructions (commonly though use of inline &apos;asm&apos; statements in C code, and in our JIT through direct use of &apos;m_assembler&apos;).

The assembler interface within the JIT is designed to closely mimic that of the assembler layer in a traditional compiler, providing an interface largely made up of the set of assembler mnemonics of the host architecture, with a one-to-one mapping from calls to these functions, to machine instructions being planted.  All instruction selection is performed within the MacroAssembler layer.  The MacroAssembler is a very simple compiler, mapping from one (generic) assembly like language to another (concrete, machine-specific) assembly language.  We refer to it as a MacroAssembler since the capabilities are presently very limited, simply remapping mnemonic names (e.g. addPtr -&gt; addq_rr), and expanding single MacroAssembler calls to multiple assembler operations (facilities typically within the capabilities of traditional macro-assembler languages).  However we certainly expect the sophistication of the MacroAssembler layer to increase as necessary – and we tend to be conservative in our naming, bear in mind that we initially labelled the entire JIT as just a context-threaded-interpreter, a much simpler form of dynamic code generation engine (and we still have the acronym &apos;cti&apos; scattered through the code as a reminder!).


The key difference from the ARM port as it currently stands, and the description above of the design of the layering in the JIT (and in a traditional compiler stack) is that the constant pool mechanism is below the assembler interface.  It seems that correcting this so that it falls within the MacroAssembler layer (from where we can look at how we can generalize to code to share implementation where possible and minimize unnecessary duplication when we introduce constant pools on other platforms) should only require a relatively minor restructuring of your code – it should not require you to change the code your JIT generates, and it should not significantly change the implementation of the constant pool, just shuffle a few methods between files, and change the classes upon which a few variables are declared.

Obviously how you fix this is entirely up to you, but here would be one way to do it, which is basically just a bit of copying and pasting, and a bunch of renames:

(1) Move the new methods and variables implementing the constant pool that you have added to AssemblerBuffer up into ARMAssembler, so that AssemblerBuffer is just a simple data container.
(2) Create a new class called ARMInstructionEncoder that contains an member variable that is an AssemblerBuffer, and passes all AssemblerBuffer methods through.  Replace the AssemblerBuffer member variable in ARMAssembler with a member of type ARMInstructionEncoder.
(3) Move all the methods from ARMAssembler that format up machine instructions onto ARMInstructionEncoder.  ARMInstructionEncoder should end up with one method for every mnemonic in the ARM instruction set, each of which emits one machine instruction.
(4) Rename the class ARMAssembler to MacroAssemblerARMInternals.
(5) Rename the class ARMInstructionEncoder to ARMAssembler.
(6) Move the class MacroAssemblerARMInternals into the file MacroAssemblerARM.h.

This would put the constant-pool implementation and instruction selection on the right side of the assembler interface.  Of course you may want to achieve this refactoring through a completely different route than the one I&apos;ve described. The important thing is the result, this is where we really need to get the code to so that we can look at refactoring out the constant pool so that it can be shared across platforms, and so that we can bring the assembler interfaces in line with each other so that changes we make do not break the ARM JIT.

cheers,
G.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127088</commentid>
    <comment_count>44</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-19 18:07:37 -0700</bug_when>
    <thetext>Macro changes landed in r44886.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127107</commentid>
    <comment_count>45</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-19 22:34:40 -0700</bug_when>
    <thetext>(In reply to comment #44)
&gt; Macro changes landed in r44886.

Could you commit the other two patches as well? </thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127132</commentid>
    <comment_count>46</comment_count>
      <attachid>31537</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-20 05:32:01 -0700</bug_when>
    <thetext>Comment on attachment 31537
Reorganize ARM architecture specific macros

(In reply to comment #44)
&gt; Macro changes landed in r44886.

Clearing review+ flag since this patch landed.

http://trac.webkit.org/changeset/44886</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127135</commentid>
    <comment_count>47</comment_count>
      <attachid>31336</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-20 06:16:40 -0700</bug_when>
    <thetext>Comment on attachment 31336
Only move Segmented vector to wtf sub-directory

Clearing review+ flag after landing:

$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
        R       JavaScriptCore/bytecompiler/SegmentedVector.h =&gt; JavaScriptCore/wtf/SegmentedVector.h
        M       JavaScriptCore/ChangeLog
        M       JavaScriptCore/GNUmakefile.am
        M       JavaScriptCore/JavaScriptCore.order
        M       JavaScriptCore/JavaScriptCore.vcproj/JavaScriptCore/JavaScriptCore.vcproj
        M       JavaScriptCore/JavaScriptCore.vcproj/WTF/WTF.vcproj
        M       JavaScriptCore/JavaScriptCore.xcodeproj/project.pbxproj
        M       JavaScriptCore/bytecompiler/BytecodeGenerator.h
        M       JavaScriptCore/parser/Lexer.h
Committed r44897

http://trac.webkit.org/changeset/44897</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127140</commentid>
    <comment_count>48</comment_count>
      <attachid>31337</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-20 06:28:38 -0700</bug_when>
    <thetext>Comment on attachment 31337
Add an Iterator to SegmentedVector

Clearing review+ flag after landing:

$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       JavaScriptCore/ChangeLog
        M       JavaScriptCore/wtf/SegmentedVector.h
Committed r44899

http://trac.webkit.org/changeset/44899</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127294</commentid>
    <comment_count>49</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-21 23:44:01 -0700</bug_when>
    <thetext>Thank you for the landings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127326</commentid>
    <comment_count>50</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-22 01:26:48 -0700</bug_when>
    <thetext>Hi Gavin,

it seems I misunderstood the concept of MacroAssembler. I thougt it is a pseudo assembly language, which resembles the syntax of x86 machines, and its backends translate the instructions of this virtual assembler to machine code.

I try to summarize your new arm layout concept:

   AssemblerBuffer
        (no changes)
        |
   ARMAssembler
        (format and push all possible ARM instructions, or push a 32 bit word)
        |
   MacroAssemblerARM
        (contains &quot;MacroAssemblerARMInternals&quot; = &quot;original ARMAssembler&quot; - 
                                                 &quot;current ARMAssembler&quot;
             Hence, it contains utility functions)
        (MacroAssemblerARM supports constant pool handling)

Our main issue with this approach is that we need to check the state of the constant pool manually before every instruction: 
   CheckConstPool(sizeOfNextInstruction); ARMAssembler.mov_r();
   CheckConstPool(sizeOfNextInstruction); ARMAssembler.branch();
   ...
We cannot avoid this manual check, since ARMAssembler is not able to call CheckConstPool(), since it is defined in MacroAssemblerARM level. ARMAssembler cannot include MacroAssemblerARM, since MacroAssemblerARM already includes ARMAssembler, and adding the first relation would cause a circular reference. Although we can do this manual check before every instruction, it would not be a nice coding stlye (and may cause crashes if we forget to put it before every individual instruction).

We are still thinking about keeping the constant pool in somewhat lower level:

   AssemblerBuffer
        (no changes)
        |
   AssemblerBufferWithConstantPool
        (constant pool handling)
        |
   ARMAssembler
        (same as abouve)
        |
   MacroAssemblerARM
        (contains MacroAssemblerARMInternals = same as above)

AssemblerBufferWithConstantPool is a machine independent constant pool template, which can push both instructions and constants. Of coures, this template class is optional depending on the architecture. 3 template arguments are enough to specialze this class:
   - the max size of the constant pool
   - the size of the barrier jump (protect the constant pool from execution)
   - a callback(?) function which inserts the jump and does machine dependent post processing
In this way we can avoid the mentioned manual checks.

Which one you choose? We can implement either one.

&gt; The constant-pool is not a mechanism implemented within
&gt; the assembler, but instead is a one of a number of techniques available to the
&gt; compiler during instruction selection when generating code for which a single
&gt; assembly operation is not available.  The assembler is not aware of the
&gt; structure or semantics of the constant pool - it only sees a PC relative load
&gt; instruction.

Although the compilers tend to keep the constant pool generation for themselves, most assemblers support constant pools with help of &quot;ldr reg, =value&quot; pseudo instruction and &quot;.ltorg&quot; assembler directive.

Regards,
Zoltan
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>127897</commentid>
    <comment_count>51</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-24 05:57:21 -0700</bug_when>
    <thetext>Any thoughts?

By the way, we have started to work on the generalized constant pool (2nd method), and it seems we can make it quite platform independent.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128147</commentid>
    <comment_count>52</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-06-25 02:44:27 -0700</bug_when>
    <thetext>Hi Zoltan, terribly sorry for the slow response, busy week.

It&apos;s really great to hear that that you can generalize your constant pool, and I can buy your argument for keeping it at a lower level.  All sounds good to me!

As a quick comment on the MacroAssembler syntax, the goal is not necessarily to stick to x86 syntax, the idea is really that it is generally often much easier to break down richer semantic operations into a sequence of instructions than it is to spot sequences of more primitive atoms from a more minimalist interface that can be combined to form complex operations (which is not to say that peephole optimizations that can coalesce instructions would not be a potentially useful thing to have, just that to do so well is hard, and that we don&apos;t want to pass up on an easy opportunity to provide richer semantic information that a MacroAssembler implementation might be able to make use of).

The syntax of the MacroAssembler is of course very heavily influenced by the fact that the JIT was first developed on x86, and the fact that the majority of browsing takes place on x86 platforms would likely seem to be a good reason for it to continue to have some bearing on the design.  Also, since the goal of the interface is to be semantically rich (but within reason – we want to stick to something that is relatively straightforward to generate on all platforms), and since x86 is of the richer instruction sets we&apos;re likely to port the JIT to, it would seem likely to me that there is a good chance it will continue to look fairly close to x86 in some aspects.

That said, we are certainly open to reasonable changes that expand the interface to allow us to take advantage of other architectures.  An obvious example on ARM would be conditional execution, and I would imagine that we should be able to find ways that we could allow the MacroAssemblerARM to take advantage of that without it being overly burdensome for other architectures.  For example, we could add method to plant a short forwards branch, which could be linked like a regular Jump/Label on architectures other than ARM.  On ARM you could omit to plant the branch and inversely predicate instructions until the branch was linked.  We could potentially make it an interface requirement that within such a construct certain operations (other branches, &apos;set&apos; operations, etc) could not be used, if this were required to make the pattern useful.

At some point we will likely also want to switch the interface for arithmetic operations from two operand to three operand, to better support architectures that can make use of this.  I believe ARMv6 is mostly 2 operand like x86? - in these cases the MacroAssemblers will need be able to generate a extra move where the register to contain the result is not the same as one of the operands.  This may also open up more code generation options on ARM, for example where an immediate operand to an add must be loaded from a constant pool, and the result register is not the same as the operand register, it may be more optimal to load directly into the result register and then add onto that value.

Hope this all makes sense &amp; helps clarify our thinking!

G.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128805</commentid>
    <comment_count>53</comment_count>
      <attachid>32007</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-29 06:00:16 -0700</bug_when>
    <thetext>Created attachment 32007
Remove unnecessary references to AssemblerBuffer</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128806</commentid>
    <comment_count>54</comment_count>
      <attachid>32008</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-29 06:03:16 -0700</bug_when>
    <thetext>Created attachment 32008
Constant pool for AssemblerBuffer

This patch adds a platform independent constant pool handling mechanism.
The AssemblerBufferWithCP contains a brief summary of itself as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128808</commentid>
    <comment_count>55</comment_count>
      <attachid>32009</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-29 06:30:20 -0700</bug_when>
    <thetext>Created attachment 32009
Add YARR support for generic ARM platforms

This patch adds YARR support for generic ARM platforms (disabled by default).

The ARMAssembler contains more functionality than minimum required in YARR. This could help the reviewer to get a deeper view of the constant pool mechanism as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>128925</commentid>
    <comment_count>56</comment_count>
      <attachid>32007</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2009-06-29 17:39:57 -0700</bug_when>
    <thetext>Comment on attachment 32007
Remove unnecessary references to AssemblerBuffer

Tabs in the ChangeLog, but otherwise fine. r=me.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129010</commentid>
    <comment_count>57</comment_count>
      <attachid>32007</attachid>
    <who name="David Kilzer (:ddkilzer)">ddkilzer</who>
    <bug_when>2009-06-30 02:56:22 -0700</bug_when>
    <thetext>Comment on attachment 32007
Remove unnecessary references to AssemblerBuffer

Clearing the review+ flag after landing:

$ git svn dcommit
Committing to http://svn.webkit.org/repository/webkit/trunk ...
        M       JavaScriptCore/ChangeLog
        M       JavaScriptCore/interpreter/Interpreter.cpp
        M       JavaScriptCore/interpreter/Interpreter.h
Committed r45370

http://trac.webkit.org/changeset/45370</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129021</commentid>
    <comment_count>58</comment_count>
      <attachid>32046</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-30 03:22:28 -0700</bug_when>
    <thetext>Created attachment 32046
Constant pool for AssemblerBuffer (v2)

This patch adds a platform independent constant pool handling mechanism.
The AssemblerBufferWithCP contains a brief summary of itself as well.

(In this version an alignment bug have been fixed)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129022</commentid>
    <comment_count>59</comment_count>
      <attachid>32047</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-06-30 03:24:04 -0700</bug_when>
    <thetext>Created attachment 32047
Add YARR support for generic ARM platforms (v2)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129062</commentid>
    <comment_count>60</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-06-30 06:55:50 -0700</bug_when>
    <thetext>Hi Gavin,

we have successfully implemented the platform independent constant pool, only some template parameters and platform dependent callbacks are required. We can put 32 or 64 bit constants into the pool which is enough to hold any int, pointer or double constant. It makes the implementation much easier than variable constant size, and it is enough for most purposes. The pools are aligned to 64 bit. The machine instructions are not needed to be aligned. We hope this implementation is suitable for any generic uses.

We also posted the yarr patch, but we feel you may find it too big. Unfortunately, we have no idea how to break it into smaller, working parts.

We have not yet posted, but we have a jit enabled, all optimizations disabled patch as well. Furthermore, we have implemented the floating point instructions, and ENABLE_JIT_OPTIMIZE_ARITHMETIC can now be turned on (another patch). We decided to wait for your opinion about the constant pool patch before we post the other patches.

I know you are busy since you usually do the coding and reviewing in JavaScriptCore alone, so if we can help you in any way just ask us.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129281</commentid>
    <comment_count>61</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-01 02:14:19 -0700</bug_when>
    <thetext>We were wondering about renaming PLATFORM_ARM_ARCH(7) to PLATFORM(THUMB2) - similar to PLATFORM(X86) and PLATFORM(X86_64). It would clarify things when the generic ARM will be landed, because others might not know the difference between the two imlementation. We can send a simple patch for you if you like this idea.

Our next step is property caching. Because of the constant pool we had issues with fixed instruction offsets. Since the pool can be flushed after any instruction, the instruction offsets are not known in advance. We had implemented a check before, which flush the constant pool if the pool might break a tightly coupled instruction sequence. Only the length of the sequence and the number of constans are required for this check. However, this check is an extra line in the source code and not looks portable at all. To make it portable, we decided to use an enum and an inline function in JIT.h.

enum {
  getByIdFastCase,
  getByIdSlowCase,
  ...
} InstructionSequenceTypes;

inline JIT::ensureSpaceFor(InstructionSequenceTypes type)
{
#if PLATFORM(ARM)
    switch (type) {
    case getByIdFastCase: m_assembler.ensureSpace(48 /* Length */, 4/* NumberOfConstants */);
    ...
    }
#else
    UNUSED_PARAM(type);
#endif
}

We can put ensureSpaceFor(getByIdFastCase) calls into the compiler.
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129389</commentid>
    <comment_count>62</comment_count>
      <attachid>32046</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-01 15:24:52 -0700</bug_when>
    <thetext>Comment on attachment 32046
Constant pool for AssemblerBuffer (v2)

&gt; Constant pool for AssemblerBuffer (v2)

This basically looks fine as is, r- for a handful of small fixes, but no big issues at all.

The comment on the class states that the constant pool can store 4 or 8 bytes values, however the code currently appears to be very 32-bit specific, only handling entries of size (sizeof(uint32_t)) - so unless I&apos;m missing something the comment is currently a little misleading.  It may be good to fix this to say that the pool can hold 32-bit values, and that we intend to extend the class to be able to hold 64-bit values in the pool too, at some point in the future.

When you align the pool, I&apos;d suggest you may want to consider replacing the magic number &apos;0x0badf00d&apos; with a value that will be interpreted as a breakpoint, or illegal instruction on ARM (just as an extra guard against an erroneously linked branch jumping into the padding.  To make this effective you would also have to reverse the order in which it checks &amp; plants the alignment (byte, then short, then int) in order that the int value is 32-bit aligned.  On x86 we use HLTs to pad (we use these since they&apos;re illegal in user space, cause a trap, and as such clearly indicate an error case), and we&apos;d probably want to do the same in the constant pool too.  At minimum I&apos;d suggest you should move these values into the Assembler (AssemblerType::padForAlign8, 16, 32) so that these values can be provided in a platform-specific fashion (we also try to avoid &quot;magic numbers&quot; inline in the code, and prefer defining constant values or declaring static const variables – making this change would fix this problem too).  I think it could be even nicer if you just called AssemblerType::align(int) to do the alignment ... except I imagine that could be problematic (since you would end up recursing, at Assembler::align tried to plant a byte, caused a recursive flush, called Assembler::align, tried to plant a byte ... etc.).  You could of course add a new specific method to Assembler to alignConstantPool(int), and then provide methods to put the pad values directly to the assembler buffer.  But then you have a danger that these methods could be misused.  I&apos;d probably ignore this last suggestion myself.  I&apos;d probably just add a set of constants to Assembler (AssemblerType::padForAlign8, 16, 32).

&gt; if (10 * m_numConsts &gt; 6 * maxPoolSize / sizeof(uint32_t))
I think this check is prone to overflow.  It is probably not a practical concern right now, since m_pool is allocated with a single malloc, so a huge value for maxPoolSize would not be sensible anyway.  However in order to support large constant pools on x86[_64], the obvious thing to do will probably be to replace these arrays with some form of vector, and when we do so this test would become potentially unsafe.  &apos;maxPoolSize&apos; is defined as a signed int, so if (maxPoolSize &gt; 0x15555555) then (6 * maxPoolSize) will overflow to a negative walue, and the test will always pass.  Due to the first multiply (* 10) there are also boundary condition problems that could cause the left had side of this compare to overflow, too.  If you enforce that maxPoolSize is no larger than 0x15555555 then the limit (6 * maxPoolSize) could be 0x7FFFFFFE, however as m_numConsts rolls over from 0x0CCCCCCC -&gt; 0x0CCCCCCD (m_numConsts * 10) goes from 0x7FFFFFF8 -&gt; 0x80000002, which, again interpreted as signed values are both less than 0x7FFFFFFE, so the limit being exceeded will not be detected.  I&apos;d suggest adding an &quot;ASSERT(maxPoolSize &lt; 0x10000000);&quot; above this line to make sure we stay well away from any potential overflow issues here would be a good idea.

Finally, a quick find &amp; replace code style issue – it is not WebKit coding style to use abbreviations, we use full words.  AssemblerBufferWithCP is certainly against style, placeConstPoolBarrier etc really should probably be placeConstantPoolBarrier - but I leave it at your discretion as to exactly how you change these names to bring these names in line with coding style.

But other than these little style issues, the mechanism looks great, and yes, looks like it should be fairly straightforward to take this and roll it out to the other platforms when we hit a point that we need to add constant-pool support, which is really good news.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129420</commentid>
    <comment_count>63</comment_count>
      <attachid>32047</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-01 17:06:04 -0700</bug_when>
    <thetext>Comment on attachment 32047
Add YARR support for generic ARM platforms (v2)

This all looks really great, couple of small comments.

In the MacroAssembler, we normally try to only use UNUSED_PARAM if a parameter is only not use on some (ifdef&apos;ed) code paths, so we&apos;d normally write:

void mulDouble(Address src, FPRegisterID dest)
{
    UNUSED_PARAM(src);
    UNUSED_PARAM(dest);
    ASSERT_NOT_REACHED();
}

as:

void mulDouble(Address, FPRegisterID)
{
    ASSERT_NOT_REACHED();
}

But if you prefer to leave this unchanged, this would be okay.

In Platform.h:

 546 #elif PLATFORM(ARM)
 547     /* Under development, temporarily disabled. */
 548     #define ENABLE_JIT 0
 549     #define ENABLE_JIT_OPTIMIZE_NATIVE_CALL 0

This should really be added as a part of the JIT patch, let&apos;s revert this for now (it really doesn&apos;t make a lot of sense without the rest of the JIT changes :o) ).  Also...

 596  || (!defined(ENABLE_YARR_JIT) &amp;&amp; PLATFORM(ARM) &amp;&amp; 0) \

We will only want to enable YARR &amp; the ARM JIT on operating systems it has been tested on.  What OS are you testing on?  Linux?  GTK or KDE?  Or other?  Also, if Linux, this may also be the wrong place to be enabling them.  On Linux I believe the platform specific settings are configured in configure.ac (GTK?) and JavaScriptCore/JavaScriptCore.pri (KDE?) – and I believe this is where YARR is enabled on x86-Linux.  (Personally, I find the fact that we configure these things in different places on different OSes a little odd, but given that we do, it certainly seems that it would be more correct to keep the way we do things on ARM-Linux in line with the way we work on x86-Linux - again, assuming that it is Linux you&apos;re targeting).

The rest of the patch all looks great.  r-ing while the Platform.h questions are answered, but otherwise this all looks good to land.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129430</commentid>
    <comment_count>64</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-01 17:50:36 -0700</bug_when>
    <thetext>Hi Zoltan, hi Gabor,

Sorry for the delay in getting these reviewed, and yes, things are as busy as ever!  You&apos;ll see I&apos;ve reviewed the patches, both are r-s, but they&apos;re both 99.9% of the way there now, just a few very small issues to clear up.

&gt; I know you are busy since you usually do the coding and reviewing in
&gt; JavaScriptCore alone, so if we can help you in any way just ask us.

I should probably make sure that the rest of the team get the credit due to them – you may well have seen me committing a bit more to the JIT in ToT over the last few weeks, but the other guys are still very busy working on the nitro-extreme branch, and fixing bugs across JSC.

&gt; We also posted the yarr patch, but we feel you may find it too big.
&gt; Unfortunately, we have no idea how to break it into smaller, working parts.

No, you&apos;re absolutely right here, this wasn&apos;t too big at all.  While clearly not a small patch, I don&apos;t think you could have sensibly broken this down any further, this patch was absolutely fine as it was.

&gt; Our next step is property caching. Because of the constant pool we had issues
&gt; with fixed instruction offsets. Since the pool can be flushed after any
&gt; instruction, the instruction offsets are not known in advance. We had
&gt; implemented a check before, ...
&gt;
&gt; We can put ensureSpaceFor(getByIdFastCase) calls into the compiler.

Yes, totally!  I was going to suggest something like this too, to make the code a little less fragile.

I&apos;d suggest you may want to consider having a pre &amp; post method, say, beginUninterruptedCodeSequence(getByIdFastCaseCodeSize) , endUninterruptedCodeSequence(getByIdFastCaseCodeSize), (hmmm, not sure these are good function names - not meaning to not use your function name here, just that &apos;ensureSpaceFor&apos; doesn&apos;t read right with pre- &amp; post- prefix added).

This way, on #ifndef NDEBUG builds you could record (to a member variable on the JIT) a label() of where the block of code begins, and in the &apos;post&apos; method you could ASSERT that the difference between a the label() recorded in the &apos;pre&apos; method, and a label() here, is equal to the argument passed in - just to help catch cases where someone changes the code, but does not update the constant (and in non-debug builds the &apos;post&apos; method would do nothing).

Just a thought, in case it is helpful.

cheers,
G.

</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129478</commentid>
    <comment_count>65</comment_count>
      <attachid>32175</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-02 03:04:48 -0700</bug_when>
    <thetext>Created attachment 32175
Constant pool for AssemblerBuffer (v3)

Reformatted as suggested in comment #62.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129479</commentid>
    <comment_count>66</comment_count>
      <attachid>32176</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-02 03:08:54 -0700</bug_when>
    <thetext>Created attachment 32176
Add YARR support for generic ARM platforms (v3)

Reformatted as suggested in comment #63.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129480</commentid>
    <comment_count>67</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-02 04:08:17 -0700</bug_when>
    <thetext>Hi Gavin,

thank you for the review!

The constant pool is designed to hold both 32 and 64 bit values. However, since we don&apos;t need 64 bit values yet, we decided to omit their helper functions for now. Of course it is clear for us that supporting constants which size are longer than the instructions, require special handling. We realized a simple greedy algorithm is enough for this issue. The size of a new constant is assigned to m_lastConstDelta, and decreased by the size of the following instructions until it reaches zero. When a new constant is pushed to the pool and m_lastConstDelta is non-zero, we use its value to decrease the maximum allowed difference (also a counter, called m_maxDistance).

For aligning, we chose the padForAlign solution. The other one looks too complicated (at least for us).

Regarding the &quot;if (10 * m_numConsts &gt; 6 * maxPoolSize / sizeof(uint32_t))&quot; expression, we divided to constants by 2. However, we still think these multiplies are not an issue, since we don&apos;t plan to support pools bigger than 809 Mbytes. Actually, we feel the size of the pool should not be bigger than 16 Kbytes. Since maxPoolSize is a template argument, a compiler assert to ensure this maximum allowed size would be a good idea.

We have renamed all functions with abbreviations.

It seems gcc yields several warnings without the UNUSED_PARAM directives. We hope these unused params will not be in the mainline too long, since we have already implemented them and post the patch soon into bugzilla. We feel split the code here is good for a reviewer viewpoint, but we can combine the two patches if you wish.

We have also removed all our auto-enabling code in &quot;Platform.h&quot;. So all ports can decide whether they want to enable ARM-JIT or not.

We have considered several methods for uninterrupted code sequences. We also thought about the OpenGL way (begin / endUninterruptedCodeSequence). However, since we need an extra buffer in this case, we feel the code will become too complex (and slow). We chose the ensureSpaceFor(getByIdFastCase) method, since we already have to calculate the patch offsets, so calculating the total size is only one extra step further (adding the last instruction size to the last patch offset). And the resulting code is fast as well, since an inlined switch with a constant argument is automatically evaluated by gcc (we have tested it on a small program).

Thank you again.
Zoltan
</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129493</commentid>
    <comment_count>68</comment_count>
      <attachid>32181</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-02 05:28:09 -0700</bug_when>
    <thetext>Created attachment 32181
Add generic ARM-JIT support using ARMAssembler</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>129494</commentid>
    <comment_count>69</comment_count>
      <attachid>32182</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-02 05:51:51 -0700</bug_when>
    <thetext>Created attachment 32182
Floating point support for ARM. Looks like we double the number of patches each day :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132698</commentid>
    <comment_count>70</comment_count>
      <attachid>32175</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-17 14:19:48 -0700</bug_when>
    <thetext>Comment on attachment 32175
Constant pool for AssemblerBuffer (v3)

Landed in r46057.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132719</commentid>
    <comment_count>71</comment_count>
      <attachid>32176</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-17 14:58:40 -0700</bug_when>
    <thetext>Comment on attachment 32176
Add YARR support for generic ARM platforms (v3)

Landed in r46059.

Sorry for the delay in getting back to these, will start looking at the new patches at the start of next week.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>132850</commentid>
    <comment_count>72</comment_count>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-17 22:17:18 -0700</bug_when>
    <thetext>(In reply to comment #70)
&gt; (From update of attachment 32175 [details])
&gt; Landed in r46057.

Many, many, many thanks to you Gavin!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133103</commentid>
    <comment_count>73</comment_count>
      <attachid>32175</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-20 03:18:29 -0700</bug_when>
    <thetext>Comment on attachment 32175
Constant pool for AssemblerBuffer (v3)

Clearing the review+ flag after landing (r46057).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>133104</commentid>
    <comment_count>74</comment_count>
      <attachid>32176</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-20 03:19:36 -0700</bug_when>
    <thetext>Comment on attachment 32176
Add YARR support for generic ARM platforms (v3)

Clearing the review+ flag after landing (r46059).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134414</commentid>
    <comment_count>75</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-24 00:26:40 -0700</bug_when>
    <thetext>Gavin,
could you review the last two patches?

BTW, we have two more patches - which are not posted yet - for a fully functional ARM JIT. :-)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134424</commentid>
    <comment_count>76</comment_count>
    <who name="Ismail Donmez">ismail</who>
    <bug_when>2009-07-24 00:43:02 -0700</bug_when>
    <thetext>Just wondering; will the ARM JIT work on ARMv4I types CPUs?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134434</commentid>
    <comment_count>77</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-24 00:54:12 -0700</bug_when>
    <thetext>&gt; Just wondering; will the ARM JIT work on ARMv4I types CPUs?

The short answer is: yes.
If you like, test it on your hw and send us your feedback.

Currently the trunk supports YARR on ARM if you set ENABLE_YARR=1 ENABLE_YARR_JIT=1 for the compilation.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>134436</commentid>
    <comment_count>78</comment_count>
    <who name="Ismail Donmez">ismail</who>
    <bug_when>2009-07-24 00:56:40 -0700</bug_when>
    <thetext>(In reply to comment #77)
&gt; The short answer is: yes.
&gt; If you like, test it on your hw and send us your feedback.
&gt; 
&gt; Currently the trunk supports YARR on ARM if you set ENABLE_YARR=1
&gt; ENABLE_YARR_JIT=1 for the compilation.

Thanks for the answer. I am using it via Qt so I&apos;ll have to wait for Qt guys to pick it up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135151</commentid>
    <comment_count>79</comment_count>
      <attachid>33609</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-28 03:22:36 -0700</bug_when>
    <thetext>Created attachment 33609
Add generic ARM-JIT support using ARMAssembler v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135152</commentid>
    <comment_count>80</comment_count>
      <attachid>33610</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-07-28 03:23:25 -0700</bug_when>
    <thetext>Created attachment 33610
Floating point support for ARM v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135153</commentid>
    <comment_count>81</comment_count>
      <attachid>33611</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-28 03:26:07 -0700</bug_when>
    <thetext>Created attachment 33611
Add optimize call support for ARM JIT

This patch adds support for ENABLE_JIT_OPTIMIZE_CALL and ENABLE_JIT_OPTIMIZE_NATIVE_CALL optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135154</commentid>
    <comment_count>82</comment_count>
      <attachid>33612</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-07-28 03:27:47 -0700</bug_when>
    <thetext>Created attachment 33612
Add property access support for ARM JIT

This patch adds support for ENABLE_JIT_OPTIMIZE_PROPERTY_ACCESS and ENABLE_JIT_OPTIMIZE_METHOD_CALLS optimizations.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>135782</commentid>
    <comment_count>83</comment_count>
      <attachid>33609</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-29 21:01:45 -0700</bug_when>
    <thetext>Comment on attachment 33609
Add generic ARM-JIT support using ARMAssembler v2

(1) The CodeBlock changes.

Having divergent behaviour outside of the JIT is really undesirable – while these differences look fairly harmless right now, as we changes the way the JIT works over time, they could become problematic.  This approch also seems suboptimal on ARM platforms, since ARM is typically used in embedded products with limited memory availability, and carrying around all bytecode from all functions is a large memory burden (particularly on complex sites using large JS libraries).  I&apos;d suggest that there is a much better solution, that isolates the issue to the MacroAssembler, and will overall significantly reduce the memory footprint of the JIT on ARM.

I&apos;m assuming that you&apos;re running into a problem that we also ran into on ARMv7, that sometimes a pointer value will be representable as an instruction immediate?  On ARMv7, when a ImmPtr is converted to an Imm32 we set a flag in the Imm32 indicating that it is wrapping a pointer value - Imm32::m_isPointer.  You could just change the #if wrapping this to PLATFORM(ARM).  In fact, having one extra field passed in Imm32 is highly unlikely to seriously impact JIT performance (most methods using this are inline to the extra value should just fold away in the compiler), so with a quick performance check you could probably just remove the #if altogether.

In MacroAssemblerARMv7, when emitting an instruction with an Imm32 operand, we force all immediate operands for which this flag is set to be generated in a manner that could represent a full 32-bit value (i.e., in your case, that would mean generating the value into the constant pool).  Whilst this clearly this means occasionally adopting a slightly less optimal representation for a few pointer values scattered in the code, when balanced against the memory saving of not retaining the bytecode it seems to be a clear huge win.


(2) JIT generating the trampolines.

Again, I&apos;m really not keen on this, specifically because it differs from the way other platforms work, and having randomly differing implementations makes the JIT unnecessarily complex for a new developer to start working on (and JITs tend not to be the simplest pieces of code under the best of circumstances).  I actually much prefer your way of doing things here - I&apos;d much prefer if we could JIT generate these trampolines on all platforms.  However we tested this on x86, and when we did we measured a repeatable performance regression (I&apos;m presuming this is because it changes a well predicted relative call instruction to a memory-indirected poorly predicted call).  So my question would be, is there any significant benefit to ARM from this?  If there is not a clear benefit from doing so, then introducing unnecessary inconsistencies would be highly undesirable.


&gt; +#if PLATFORM(ARM) &amp;&amp; !PLATFORM_ARM_ARCH(7)
&gt; +    Jump jumpToCtiVMThrowTrampoline = jump();
&gt; +#else
&gt; +    move(ImmPtr(reinterpret_cast&lt;void*&gt;(ctiVMThrowTrampoline)), regT2);
&gt;      restoreReturnAddressBeforeReturn(regT2);
&gt;      ret();
&gt; -    
&gt; +#endif

The JIT is currently making a jump to the ctiVMThrowTrampoline in a really weird way here, but it doesn&apos;t seem like a great idea to only fix this on ARM – and it having this code unnecessarily platform specific would be undesirable.  We really should just switch this to a jump on all platforms. 


&gt;              return JSValue::decode(ctiTrampoline(
&gt;  #if PLATFORM(X86_64)
&gt;                  0, 0, 0, 0, 0, 0,
&gt; +#elif PLATFORM(ARM)
&gt; +                // For both ARM and ARMv7
&gt; +                0, 0, 0, 0,
&gt;  #endif
&gt;                  m_ref.m_code.executableAddress(), registerFile, callFrame, exception, Profiler::enabledProfilerReference(), globalData));

It looks from the comment like this was a deliberate change to ARMv7 – if so (and I apologize if I&apos;m misinterpreting here), please don&apos;t make speculative changes to platforms you aren&apos;t testing (a bug report would of course be hugely appreciated if you think you spot a bug), this &apos;fix&apos; will actually break ARMv7.  On ARMv7 the trampoline accepts arguments in registers, spilling those that need be preserved to the stack.  This both seems somewhat cleaner (rather than relying on the &apos;magic&apos; behavior of passing extra arguments), and also allows us to chose not to spill those arguments that we do not need to preserve (e.g. the entry code pointer).  We have a long standing bug open to change x64-64 to work this way too, and I&apos;d suggest you may want to consider the same for ARM - though that is purely optional, just switching to &apos;PLATFORM(ARM) &amp;&amp; !PLATFORM_ARM_ARCH(7)&apos; would be a valid fix here.


&gt; +#if PLATFORM(ARM)
&gt; +    typedef EncodedJSValue (*ctiTrampolineFunctionPtr)(void*, void*, void*, void*,
&gt; +            void* code, RegisterFile*, CallFrame*, JSValue* exception, Profiler**, JSGlobalData*);
&gt; +    extern ctiTrampolineFunctionPtr ctiTrampoline;
&gt; +    extern void* ctiVMThrowTrampoline;
&gt; +    extern void* ctiOpThrowNotCaught;
&gt; +#else

This should be &apos;PLATFORM(ARM) &amp;&amp; !PLATFORM_ARM_ARCH(7)&apos;


&gt; -#if PLATFORM(ARM)
&gt; +#if PLATFORM_ARM_ARCH(7)
&gt;  #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 1
&gt;  #else
&gt;  #define ENABLE_ASSEMBLER_WX_EXCLUSIVE 0

This was probably really on the wrong #ifdef already, so if we&apos;re going to change it, then it should probably really go to #if PLATFORM(IPHONE).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>136103</commentid>
    <comment_count>84</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-07-30 22:40:18 -0700</bug_when>
    <thetext>FYI the bug I mentioned to change the calling convention ro the x86-64 trampoline was https://bugs.webkit.org/show_bug.cgi?id=22910 , it turned out I had a patch sat in my inbox from another engineer that fixed it, so I&apos;ve landed this in r 46621.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137290</commentid>
    <comment_count>85</comment_count>
      <attachid>34127</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-08-05 04:42:34 -0700</bug_when>
    <thetext>Created attachment 34127
Add generic ARM-JIT support using ARMAssembler v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137291</commentid>
    <comment_count>86</comment_count>
      <attachid>34128</attachid>
    <who name="Zoltan Herczeg">zherczeg</who>
    <bug_when>2009-08-05 04:43:15 -0700</bug_when>
    <thetext>Created attachment 34128
Floating point support for ARM v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137292</commentid>
    <comment_count>87</comment_count>
      <attachid>34129</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-05 04:44:39 -0700</bug_when>
    <thetext>Created attachment 34129
Add optimize call support for ARM JIT v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137293</commentid>
    <comment_count>88</comment_count>
      <attachid>34130</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-05 04:45:35 -0700</bug_when>
    <thetext>Created attachment 34130
Add property access support for ARM JIT v3</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137294</commentid>
    <comment_count>89</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-05 04:56:24 -0700</bug_when>
    <thetext>Gavin,
we did your suggestions about trampolines and calling convention. The changes do not introduce any significant performance progression or regression either. I hope it is fine for you as well.

BTW, the current code works with JSVALUE32 (as ARMv7).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137393</commentid>
    <comment_count>90</comment_count>
      <attachid>34127</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 12:56:52 -0700</bug_when>
    <thetext>Comment on attachment 34127
Add generic ARM-JIT support using ARMAssembler v3

Zoltan, did I see you get commit rights to svn?
Leaving this for you to land, if I&apos;m wrong &amp; you need this landing for you then ping me &amp; will be happy to do so.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137409</commentid>
    <comment_count>91</comment_count>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-05 13:21:41 -0700</bug_when>
    <thetext>(In reply to comment #90)
&gt; Zoltan, did I see you get commit rights to svn?

Not yet. You mistake him for Zoltan Horvath.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137412</commentid>
    <comment_count>92</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 13:25:07 -0700</bug_when>
    <thetext>cheers Gabor, Akos also pointer out my mistake, I&apos;ll get this landed for you guys later today.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137471</commentid>
    <comment_count>93</comment_count>
      <attachid>34129</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 16:18:18 -0700</bug_when>
    <thetext>Comment on attachment 34129
Add optimize call support for ARM JIT v3

(1) ensureSpaceFor

The basic design of this I&apos;m happy with, the idea of enumerating the sequences seems nice and clean, but I do have two small concerns.  First is the method name - I think it could be clearer, and more explicit.  The method name makes sense in the context of ARM, where you have a constant pool, but for developers on other platforms it is unclear as to the purpose of the call.I&apos;d suggest a better name would include something like UninterruptedInstructionSequence, which would be more descriptive of *why* this is being called.   Also, I&apos;m uncomfortable with the use of magic constants that are unchecked (note that all the &apos;patchOffset&apos; constants in the JIT are guarded by ASSERTs).  If someone changes the code generation in a way that could break on ARM, why should have an automatic way of detecting this.  I&apos;d suggest that you can fix this by having &apos;begin&apos; and &apos;end&apos; methods in the MacroAssemberARM, and #ifndef NDEBUG check that the values passed are correct.

I&apos;d suggest something like this (with MacroAssemblerARM::beginUninterruptedInstructionSequence replacing MacroAssemblerARM::ensureSpace, and MacroAssemblerARM::endUninterruptedInstructionSequence called at the end of the sequence as appropriate - both method names just suggestions, I&apos;m open to improvements), would both be more explicitly named, and would provide checking of at least one of the magic constants:

    void beginUninterruptedInstructionSequence(int insnSpace, int constSpace)
    {
#ifndef NDEBUG
        m_uninterruptedInstructionsBegin = label();
        m_uninterruptedInstructionSpace = insnSpace;
#endif
        m_assembler.ensureSpace(insnSpace, constSpace);
    }

    void endUninterruptedInstructionSequence()
    {
        ASSERT(differenceBetween(m_uninterruptedInstructionsBegin, label()) == m_uninterruptedInstructionSpace);
    }

#ifndef NDEBUG
    Label m_uninterruptedInstructionsBegin;
    int m_uninterruptedInstructionSpace;
#endif

If you could also preserve and test &apos;constSpace&apos; in a similar fashion (could you record the number of entries in the pool in &apos;begin&apos;, and again check the difference in &apos;end&apos;?), then that would be even better.

(2) enableLatePatch

This seems to be tied to an assembler specific internal optimization, I don&apos;t think that explicitly exposing this in common code in this fashion is the right API here.  The purpose of this flag appears to be to force calls to be generated using a constant pool entry, rather than as a relative branch.  A simple short-term solution would seem to replace the &apos;m_latePatch&apos; bit with a flag indicating whether the JmpSrc is a jump or a call, and to only plant relative branches for jumps.  With this change the calls to enableLatePatch() should be unnecessary - all calls can be repatched.

(As a note on a longer term direction, we expect at some point to be able to move the Label, Jump, Call, etc classes out of AbstractMacroAssembler and into their own header, then push these types down into the assemblers so that each assembler does not need define its own JmpSrc &amp; JmpDst types - so in the long run I think we&apos;d expect to be able to distinguish between jumps &amp; calls anyway).

This suggested change is based on the assumption that the ability to link branches without a constant pool entry is an optimization that only really benefits jumps, not calls.  I&apos;d be resistant to introduce any additional API unless there is a demonstrable benefit here.  If there is a measurable performance benefit from doing so, then I&apos;d suggest the right place to add API would be in LinkBuffer::link(Call, FunctionPtr).  Ultimately this is not about the call instruction itself being different, but the way that the link will be performed being different.  I&apos;d suggest adding a third argument to this method - &quot;, bool isFinal = false&quot; (I&apos;ve inverted the logic from &apos;enable&apos; here - I&apos;d suggest the default behaviour should be to allow the call to be relinked, and if we do need to do so we should explicitly specify cases where optimization can take place).  For calls that are *not* currently being marked as &apos;enableLatePatch&apos;, you could instead pass isFinal as true when linking, which should result in exactly the same code generation from the ARM JIT as you are presently producing.  But I&apos;d like to see performance numbers to back up any API change, since I do expect that the benefit is really coming from planting relative branches for jumps rather than calls.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137477</commentid>
    <comment_count>94</comment_count>
      <attachid>34130</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 16:23:39 -0700</bug_when>
    <thetext>Comment on attachment 34130
Add property access support for ARM JIT v3

This patch is dependent on the call patch that I&apos;ve just reviewed &amp; asked for changes.  I have no objections to this patch and expect this patch to be a simple r+ as soon as the call patch gets okayed.

But since this is blocked on the other patch, and since I think you&apos;re going to need a new version of this to update some behaviour here (re the comments on the call patch), I&apos;m going to r- for now to take this out of the review queue.

G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137517</commentid>
    <comment_count>95</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 22:23:19 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/assembler/ARMAssembler.cpp
Sending        JavaScriptCore/assembler/AbstractMacroAssembler.h
Sending        JavaScriptCore/assembler/MacroAssemblerARM.h
Sending        JavaScriptCore/bytecode/CodeBlock.h
Sending        JavaScriptCore/jit/JIT.h
Sending        JavaScriptCore/jit/JITInlineMethods.h
Sending        JavaScriptCore/jit/JITOpcodes.cpp
Sending        JavaScriptCore/jit/JITStubs.cpp
Sending        JavaScriptCore/jit/JITStubs.h
Sending        JavaScriptCore/wtf/Platform.h
Transmitting file data ...........
Committed revision 46831.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>137518</commentid>
    <comment_count>96</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-05 22:33:40 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/assembler/ARMAssembler.cpp
Sending        JavaScriptCore/assembler/ARMAssembler.h
Sending        JavaScriptCore/assembler/MacroAssemblerARM.h
Sending        JavaScriptCore/jit/JIT.h
Transmitting file data .....
Committed revision 46832.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138961</commentid>
    <comment_count>97</comment_count>
      <attachid>34558</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-11 07:59:28 -0700</bug_when>
    <thetext>Created attachment 34558
a</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>138970</commentid>
    <comment_count>98</comment_count>
      <attachid>34560</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-11 08:22:20 -0700</bug_when>
    <thetext>Created attachment 34560
Add optimize call and property access support for ARM JIT

I have done the requested changes from comment #93.

- The &apos;latePatch&apos; method is removed.
    It looks like that forcing the address of calls on constant pool does not hurt much. Wash on SunSpider (slightly slower but not statistically significant).

- The {BEGIN,END}_UNINTERRUPTED_SEQUENCE macros have been introduced for tightly coupled sequences.
    I try to keep the code as platform independent as possible.

- The optimize call and property access patches are combined.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139000</commentid>
    <comment_count>99</comment_count>
    <who name="Kenneth Rohde Christiansen">kenneth</who>
    <bug_when>2009-08-11 09:52:12 -0700</bug_when>
    <thetext>Aint the two r+ patches already committed? If so, please clear the flag.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139266</commentid>
    <comment_count>100</comment_count>
      <attachid>34560</attachid>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-11 23:30:58 -0700</bug_when>
    <thetext>Comment on attachment 34560
Add optimize call and property access support for ARM JIT

&gt; #define WTF_USE_CONSTANT_POOL 1

Gah, I&apos;m really sorry, but I&apos;m going to have to pick you up on an annoying technicality.

We should not be defining WTF_USE_ macros outside of Platform.h (there is another example of this being done, but it&apos;s a bug.  you&apos;ll see that ENABLE_, WTF_PLATFORM_, etc are only defined in Platform.h).  The problem generally with defining these values in other headers is that the macros allow the value no to be defined, which could lead to unexpected behaviour.  Consider, for example, if &apos;#define ENABLE_JIT 1&apos; was defined in JIT.h, rather than Platform.h.  For any .cpp files that include JIT.h the expression &apos;ENABLE(JIT)&apos; will be true, but for any files that happen not to include JIT.h this will evaluate to false.

Whilst there is no bug in the way you&apos;ve used this, or any clear way that it could lead to a bug in this case, I think we want to keep the design rule that the USE() etc marco are only used with values defined in Platform.h.

The way that you&apos;ve structured the macros (defining the value in AssemblerBufferWithConstantPool.h) seems perfectly sensible, so rather than trying to move this up into Platform.h I&apos;d suggest you may just want to consider a quick rename &amp; stop using the USE macro in this case - just switch &apos;#define WTF_USE_CONSTANT_POOL 1&apos; to something like &apos;#define ASSEMBLER_HAS_CONSTANT_POOL 1&apos; and replace &apos;USE(CONSTANT_POOL)&apos; with &apos;defined(ASSEMBLER_HAS_CONSTANT_POOL)&apos;.

I&apos;m going to call this an r+-with-changes, since everything else looks good.  If you update a new patch with the macro name fixed one way or another I&apos;ll get it landed for you.

BTW, I&apos;m guessing this may be your intention already, but let&apos;s make this the last change on this über-bug - from now on I think all future patch should get a bug of their own, as per normal process.

cheers,
G.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139271</commentid>
    <comment_count>101</comment_count>
      <attachid>34641</attachid>
    <who name="Gabor Loki">loki</who>
    <bug_when>2009-08-12 00:25:49 -0700</bug_when>
    <thetext>Created attachment 34641
Add optimize call and property access support for ARM JIT v2

I have did the requested changes from comment #100 :-), and marked the attachment 34560 with obsolete flag which was r+-with-changes.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139587</commentid>
    <comment_count>102</comment_count>
      <attachid>34560</attachid>
    <who name="Eric Seidel (no email)">eric</who>
    <bug_when>2009-08-12 15:15:44 -0700</bug_when>
    <thetext>Comment on attachment 34560
Add optimize call and property access support for ARM JIT

Clearing review flag since a new patch has been posted.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>139735</commentid>
    <comment_count>103</comment_count>
    <who name="Gavin Barraclough">barraclough</who>
    <bug_when>2009-08-12 22:58:46 -0700</bug_when>
    <thetext>Sending        JavaScriptCore/ChangeLog
Sending        JavaScriptCore/assembler/ARMAssembler.cpp
Sending        JavaScriptCore/assembler/ARMAssembler.h
Sending        JavaScriptCore/assembler/ARMv7Assembler.h
Sending        JavaScriptCore/assembler/AbstractMacroAssembler.h
Sending        JavaScriptCore/assembler/AssemblerBufferWithConstantPool.h
Sending        JavaScriptCore/assembler/MacroAssemblerARM.h
Sending        JavaScriptCore/assembler/X86Assembler.h
Sending        JavaScriptCore/jit/JIT.h
Sending        JavaScriptCore/jit/JITCall.cpp
Sending        JavaScriptCore/jit/JITInlineMethods.h
Sending        JavaScriptCore/jit/JITPropertyAccess.cpp
Transmitting file data ............
Committed revision 47186.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30897</attachid>
            <date>2009-06-03 03:12:05 -0700</date>
            <delta_ts>2009-06-03 03:12:05 -0700</delta_ts>
            <desc>comparison between interpreter and MacroAssembler based ARM JIT</desc>
            <filename>int-ma.txt</filename>
            <type>text/plain</type>
            <size>6599</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbTogdHJ1bmsgLSByNDM4MTgKVG86IEFSTSBKSVQgd2l0aCBNYWNyb0Fzc2VtYmxlcgoKU3Vu
U3BpZGVyOgoKClRFU1QgICAgICAgICAgICAgICAgICAgQ09NUEFSSVNPTiAgICAgICAgICAgIEZS
T00gICAgICAgICAgICAgICAgIFRPICAgICAgICAgICAgIERFVEFJTFMKCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CgoqKiBUT1RBTCAqKjogICAgICAgICAgIDEuMzR4IGFzIGZhc3QgICAgIDU2NDc3LjNt
cyArLy0gMy42JSAgIDQyMjI1LjhtcyArLy0gMi41JSAgICAgc2lnbmlmaWNhbnQKCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09CgogIDNkOiAgICAgICAgICAgICAgICAgIDEuMzZ4IGFzIGZhc3QgICAgIDEw
NTA1LjBtcyArLy0gNC41JSAgICA3NzQ4LjVtcyArLy0gMy42JSAgICAgc2lnbmlmaWNhbnQKICAg
IGN1YmU6ICAgICAgICAgICAgICAxLjEyNHggYXMgZmFzdCAgICAgMzAxNC41bXMgKy8tIDMuMSUg
ICAgMjY4MS41bXMgKy8tIDIuNCUgICAgIHNpZ25pZmljYW50CiAgICBtb3JwaDogICAgICAgICAg
ICAgMS41NnggYXMgZmFzdCAgICAgIDM5ODEuM21zICsvLSAyLjklICAgIDI1NTMuMG1zICsvLSA2
LjclICAgICBzaWduaWZpY2FudAogICAgcmF5dHJhY2U6ICAgICAgICAgIDEuNDB4IGFzIGZhc3Qg
ICAgICAzNTA5LjNtcyArLy0gOC4zJSAgICAyNTE0LjBtcyArLy0gMi4xJSAgICAgc2lnbmlmaWNh
bnQKCiAgYWNjZXNzOiAgICAgICAgICAgICAgMS42OHggYXMgZmFzdCAgICAgIDc0NjQuNW1zICsv
LSA0LjQlICAgIDQ0NDEuOG1zICsvLSA1LjglICAgICBzaWduaWZpY2FudAogICAgYmluYXJ5LXRy
ZWVzOiAgICAgIDEuNjV4IGFzIGZhc3QgICAgICAgNDg3LjhtcyArLy0gMTEuOSUgICAgIDI5Ni4z
bXMgKy8tIDAuOSUgICAgIHNpZ25pZmljYW50CiAgICBmYW5ua3VjaDogICAgICAgICAgMy4wN3gg
YXMgZmFzdCAgICAgIDEwMDEuM21zICsvLSAwLjglICAgICAzMjYuMG1zICsvLSAwLjAlICAgICBz
aWduaWZpY2FudAogICAgbmJvZHk6ICAgICAgICAgICAgIDEuNTR4IGFzIGZhc3QgICAgICA1NTU5
LjBtcyArLy0gNS4xJSAgICAzNjE0LjhtcyArLy0gNy4yJSAgICAgc2lnbmlmaWNhbnQKICAgIG5z
aWV2ZTogICAgICAgICAgICAyLjAzeCBhcyBmYXN0ICAgICAgIDQxNi41bXMgKy8tIDEuMCUgICAg
IDIwNC44bXMgKy8tIDEuMyUgICAgIHNpZ25pZmljYW50CgogIGJpdG9wczogICAgICAgICAgICAg
IDIuMjB4IGFzIGZhc3QgICAgICAyMzEyLjBtcyArLy0gMS45JSAgICAxMDUxLjBtcyArLy0gNS42
JSAgICAgc2lnbmlmaWNhbnQKICAgIDNiaXQtYml0cy1pbi1ieXRlOiAzLjI1eCBhcyBmYXN0ICAg
ICAgIDMxMi4wbXMgKy8tIDEuMCUgICAgICA5Ni4wbXMgKy8tIDAuMCUgICAgIHNpZ25pZmljYW50
CiAgICBiaXRzLWluLWJ5dGU6ICAgICAgMy4yOXggYXMgZmFzdCAgICAgICA0MDguM21zICsvLSA0
LjElICAgICAxMjQuMG1zICsvLSAxLjAlICAgICBzaWduaWZpY2FudAogICAgYml0d2lzZS1hbmQ6
ICAgICAgIDIuODR4IGFzIGZhc3QgICAgICAgMzU1LjNtcyArLy0gMS4wJSAgICAgMTI1LjNtcyAr
Ly0gMi40JSAgICAgc2lnbmlmaWNhbnQKICAgIG5zaWV2ZS1iaXRzOiAgICAgICAxLjc1eCBhcyBm
YXN0ICAgICAgMTIzNi41bXMgKy8tIDMuOSUgICAgIDcwNS44bXMgKy8tIDcuOCUgICAgIHNpZ25p
ZmljYW50CgogIGNvbnRyb2xmbG93OiAgICAgICAgIDQuNTh4IGFzIGZhc3QgICAgICAgMzY5LjVt
cyArLy0gMi44JSAgICAgIDgwLjhtcyArLy0gMS4wJSAgICAgc2lnbmlmaWNhbnQKICAgIHJlY3Vy
c2l2ZTogICAgICAgICA0LjU4eCBhcyBmYXN0ICAgICAgIDM2OS41bXMgKy8tIDIuOCUgICAgICA4
MC44bXMgKy8tIDEuMCUgICAgIHNpZ25pZmljYW50CgogIGNyeXB0bzogICAgICAgICAgICAgIDEu
NDl4IGFzIGZhc3QgICAgICAzMzY5LjBtcyArLy0gNy40JSAgICAyMjY3LjBtcyArLy0gMy4zJSAg
ICAgc2lnbmlmaWNhbnQKICAgIGFlczogICAgICAgICAgICAgICAxLjM1eCBhcyBmYXN0ICAgICAg
IDg1Ny41bXMgKy8tIDQuMyUgICAgIDYzNi44bXMgKy8tIDEuOSUgICAgIHNpZ25pZmljYW50CiAg
ICBtZDU6ICAgICAgICAgICAgICAgMS41NnggYXMgZmFzdCAgICAgIDEyNTcuNW1zICsvLSAxMS4y
JSAgICAgODA0LjNtcyArLy0gMi42JSAgICAgc2lnbmlmaWNhbnQKICAgIHNoYTE6ICAgICAgICAg
ICAgICAxLjUyeCBhcyBmYXN0ICAgICAgMTI1NC4wbXMgKy8tIDYuMCUgICAgIDgyNi4wbXMgKy8t
IDYuOSUgICAgIHNpZ25pZmljYW50CgogIGRhdGU6ICAgICAgICAgICAgICAgIDEuMDU4eCBhcyBm
YXN0ICAgICA0OTAyLjhtcyArLy0gNC4yJSAgICA0NjM0LjVtcyArLy0gMS42JSAgICAgc2lnbmlm
aWNhbnQKICAgIGZvcm1hdC10b2Z0ZTogICAgICAxLjAzOHggYXMgZmFzdCAgICAgMTkwMS4zbXMg
Ky8tIDIuOCUgICAgMTgzMi4wbXMgKy8tIDQuMCUgICAgIHNpZ25pZmljYW50CiAgICBmb3JtYXQt
eHBhcmI6ICAgICAgMS4wNzF4IGFzIGZhc3QgICAgIDMwMDEuNW1zICsvLSA1LjQlICAgIDI4MDIu
NW1zICsvLSAwLjUlICAgICBzaWduaWZpY2FudAoKICBtYXRoOiAgICAgICAgICAgICAgICAxLjUz
eCBhcyBmYXN0ICAgICAxMDA3MS4zbXMgKy8tIDMuMCUgICAgNjU4MC4wbXMgKy8tIDguOCUgICAg
IHNpZ25pZmljYW50CiAgICBjb3JkaWM6ICAgICAgICAgICAgMS42MXggYXMgZmFzdCAgICAgIDM1
MDIuMG1zICsvLSA1LjMlICAgIDIxNzQuM21zICsvLSA5LjYlICAgICBzaWduaWZpY2FudAogICAg
cGFydGlhbC1zdW1zOiAgICAgIDEuNDZ4IGFzIGZhc3QgICAgICA0NTMxLjNtcyArLy0gNy44JSAg
ICAzMDk5LjBtcyArLy0gMTEuNSUgICAgIHNpZ25pZmljYW50CiAgICBzcGVjdHJhbC1ub3JtOiAg
ICAgMS41NnggYXMgZmFzdCAgICAgIDIwMzguMG1zICsvLSA2LjYlICAgIDEzMDYuOG1zICsvLSAy
OC4wJSAgICAgc2lnbmlmaWNhbnQKCiAgcmVnZXhwOiAgICAgICAgICAgICAgKjEuMDAzeCBhcyBz
bG93KiAgIDM5MTIuM21zICsvLSAwLjElICAgIDM5MjUuNW1zICsvLSAwLjIlICAgICBzaWduaWZp
Y2FudAogICAgZG5hOiAgICAgICAgICAgICAgICoxLjAwM3ggYXMgc2xvdyogICAzOTEyLjNtcyAr
Ly0gMC4xJSAgICAzOTI1LjVtcyArLy0gMC4yJSAgICAgc2lnbmlmaWNhbnQKCiAgc3RyaW5nOiAg
ICAgICAgICAgICAgMS4xODB4IGFzIGZhc3QgICAgMTM1NzEuMG1zICsvLSA3LjMlICAgMTE0OTYu
OG1zICsvLSAyLjclICAgICBzaWduaWZpY2FudAogICAgYmFzZTY0OiAgICAgICAgICAgIDEuMjN4
IGFzIGZhc3QgICAgICAxNzQxLjVtcyArLy0gOC4xJSAgICAxNDE1LjVtcyArLy0gMy44JSAgICAg
c2lnbmlmaWNhbnQKICAgIGZhc3RhOiAgICAgICAgICAgICAxLjIyeCBhcyBmYXN0ICAgICAgMzQ4
Ny4zbXMgKy8tIDkuMiUgICAgMjg0Ny4wbXMgKy8tIDIuOSUgICAgIHNpZ25pZmljYW50CiAgICB0
YWdjbG91ZDogICAgICAgICAgMS4xMTV4IGFzIGZhc3QgICAgIDE5NTguNW1zICsvLSA1LjclICAg
IDE3NTYuM21zICsvLSAyLjAlICAgICBzaWduaWZpY2FudAogICAgdW5wYWNrLWNvZGU6ICAgICAg
IDEuMTQ3eCBhcyBmYXN0ICAgICA0MDQ0LjBtcyArLy0gNy42JSAgICAzNTI0LjNtcyArLy0gNC41
JSAgICAgc2lnbmlmaWNhbnQKICAgIHZhbGlkYXRlLWlucHV0OiAgICAxLjE5OHggYXMgZmFzdCAg
ICAgMjMzOS44bXMgKy8tIDcuOCUgICAgMTk1My44bXMgKy8tIDMuNCUgICAgIHNpZ25pZmljYW50
CgoKVjg6CgpURVNUICAgICAgICAgICAgICBDT01QQVJJU09OICAgICAgICAgICAgRlJPTSAgICAg
ICAgICAgICAgICAgVE8gICAgICAgICAgICAgREVUQUlMUwoKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
CioqIFRPVEFMICoqOiAgICAgIDIuMDN4IGFzIGZhc3QgICAgIDE2OTI0OC41bXMgKy8tIDMuMCUg
ICA4MzUwNC4zbXMgKy8tIDIuMyUgICAgIHNpZ25pZmljYW50Cgo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQoKICB2ODogICAgICAgICAgICAgMi4wM3ggYXMgZmFzdCAgICAgMTY5MjQ4LjVtcyArLy0gMy4w
JSAgIDgzNTA0LjNtcyArLy0gMi4zJSAgICAgc2lnbmlmaWNhbnQKICAgIGNyeXB0bzogICAgICAg
Mi45NnggYXMgZmFzdCAgICAgIDIxODY4LjhtcyArLy0gMS43JSAgICA3Mzg4LjNtcyArLy0gMC42
JSAgICAgc2lnbmlmaWNhbnQKICAgIGRlbHRhYmx1ZTogICAgMS45MXggYXMgZmFzdCAgICAgIDU0
MzE4LjNtcyArLy0gNC4zJSAgIDI4NDU4LjVtcyArLy0gNi4wJSAgICAgc2lnbmlmaWNhbnQKICAg
IGVhcmxleS1ib3llcjogMS4yOXggYXMgZmFzdCAgICAgIDE4NzMyLjBtcyArLy0gMi4wJSAgIDE0
NTM3LjNtcyArLy0gMi4xJSAgICAgc2lnbmlmaWNhbnQKICAgIHJheXRyYWNlOiAgICAgMS4xODV4
IGFzIGZhc3QgICAgIDIxNDI1LjVtcyArLy0gNy40JSAgIDE4MDgwLjNtcyArLy0gMS4xJSAgICAg
c2lnbmlmaWNhbnQKICAgIHJpY2hhcmRzOiAgICAgMy41MnggYXMgZmFzdCAgICAgIDUyOTA0LjBt
cyArLy0gNy4yJSAgIDE1MDQwLjBtcyArLy0gMy45JSAgICAgc2lnbmlmaWNhbnQKCgpXaW5kU2Nv
cnBpb246CgpURVNUICAgICAgICAgICAgICBDT01QQVJJU09OICAgICAgICAgICAgRlJPTSAgICAg
ICAgICAgICAgICAgVE8gICAgICAgICAgICAgREVUQUlMUwoKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
CioqIFRPVEFMICoqOiAgICAgIDEuMTI4eCBhcyBmYXN0ICAgIDU0NTgwNi4wbXMgKy8tIDYuNiUg
ICA0ODM3NjMuMG1zICsvLSAxMC44JSAgICAgc2lnbmlmaWNhbnQKCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09CgogIFdTOiAgICAgICAgICAgICAxLjEyOHggYXMgZmFzdCAgICA1NDU4MDYuMG1zICsvLSA2
LjYlICAgNDgzNzYzLjBtcyArLy0gMTAuOCUgICAgIHNpZ25pZmljYW50CiAgICBidWJibGVTb3J0
OiAgIDMuMDR4IGFzIGZhc3QgICAgICAyMjgzMy4wbXMgKy8tIDAuMSUgICAgIDc1MTguMG1zICsv
LSAyLjAlICAgICBzaWduaWZpY2FudAogICAgZGVzOiAgICAgICAgICAxLjE5M3ggYXMgZmFzdCAg
ICAgNTI5ODQuN21zICsvLSAyLjMlICAgIDQ0NDE3LjVtcyArLy0gNDAuMSUgICAgIHNpZ25pZmlj
YW50CiAgICBkaWNlUG9rZXI6ICAgID8/ICAgICAgICAgICAgICAgICAyMjg0OS4zbXMgKy8tIDQu
NSUgICAgMjQyMzYuNW1zICsvLSAzMi4wJSAgICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICox
LjA2MXggYXMgc2xvdyoKICAgIGVtYWlsOiAgICAgICAgMS4xMzV4IGFzIGZhc3QgICAgIDQxMDY2
LjNtcyArLy0gNi42JSAgICAzNjE3Ny41bXMgKy8tIDkuMCUgICAgIHNpZ25pZmljYW50CiAgICBm
YWN0b3I6ICAgICAgICozLjA3eCBhcyBzbG93KiAgICAyMDMzOC43bXMgKy8tIDAuMyUgICAgNjI0
MDIuMG1zICsvLSAxMjIuMSUgICAgIHNpZ25pZmljYW50CiAgICBmbG95ZDogICAgICAgIDEuMzl4
IGFzIGZhc3QgICAgICA0MjUzOC4wbXMgKy8tIDEwLjYlICAgIDMwNTE3LjVtcyArLy0gMTQuMSUg
ICAgIHNpZ25pZmljYW50CiAgICBmb3JtYXROdW1iZXI6IDEuMTcweCBhcyBmYXN0ICAgICA0MDEx
Ni43bXMgKy8tIDUuMSUgICAgMzQyOTYuNW1zICsvLSA3LjclICAgICBzaWduaWZpY2FudAogICAg
Z2VuZXRpYzogICAgICAxLjMweCBhcyBmYXN0ICAgICAgNDg5NzcuM21zICsvLSAyLjUlICAgIDM3
NjQyLjVtcyArLy0gMi4xJSAgICAgc2lnbmlmaWNhbnQKICAgIGh1ZmZtYW46ICAgICAgMi4xOHgg
YXMgZmFzdCAgICAgIDI1MDIyLjdtcyArLy0gMjAuMyUgICAgMTE1MDAuMG1zICsvLSA0Ni4wJSAg
ICAgc2lnbmlmaWNhbnQKICAgIElFRUU3NTRDb252OiAgLSAgICAgICAgICAgICAgICAgIDU3Nzk1
LjdtcyArLy0gMTIuOSUgICAgNTM3MzIuMG1zICsvLSAyMi44JSAKICAgIGxvbmdGYWN0OiAgICAg
LSAgICAgICAgICAgICAgICAgIDQ5MDIyLjNtcyArLy0gMTIuNyUgICAgNDQyMTkuMG1zICsvLSAy
MC41JSAKICAgIHF1aWNrU29ydDogICAgMS44MHggYXMgZmFzdCAgICAgIDEyNTg5LjBtcyArLy0g
MTYuMCUgICAgIDY5ODMuMG1zICsvLSA1NS45JSAgICAgc2lnbmlmaWNhbnQKICAgIHJlZEJsYWNr
VHJlZTogMS4zM3ggYXMgZmFzdCAgICAgIDI4OTk2LjNtcyArLy0gMC44JSAgICAyMTcyOS41bXMg
Ky8tIDE2LjclICAgICBzaWduaWZpY2FudAogICAgc29sdmU6ICAgICAgICAxLjMxeCBhcyBmYXN0
ICAgICAgNTI2MDkuM21zICsvLSA0LjUlICAgIDQwMTYzLjBtcyArLy0gMjEuNCUgICAgIHNpZ25p
ZmljYW50CiAgICB4bWxQYXJzZXI6ICAgICoxLjAwNnggYXMgc2xvdyogICAyODA2Ni43bXMgKy8t
IDAuMyUgICAgMjgyMjguNW1zICsvLSAwLjclICAgICBzaWduaWZpY2FudAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>30898</attachid>
            <date>2009-06-03 03:12:11 -0700</date>
            <delta_ts>2009-06-03 03:12:11 -0700</delta_ts>
            <desc>comparison between MacroAssembler based and from the scratch ARM JIT</desc>
            <filename>ma-jit.txt</filename>
            <type>text/plain</type>
            <size>6544</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RlJPTTogQVJNIEpJVCB3aXRoIE1hY3JvQXNzZW1ibGVyClRPOiBBUk0gSklUIGZyb20gdGhlIHNj
cmF0Y2gKClN1blNwaWRlcjoKClRFU1QgICAgICAgICAgICAgICAgICAgQ09NUEFSSVNPTiAgICAg
ICAgICAgIEZST00gICAgICAgICAgICAgICAgIFRPICAgICAgICAgICAgIERFVEFJTFMKCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CgoqKiBUT1RBTCAqKjogICAgICAgICAgIDEuMDM2eCBhcyBmYXN0ICAg
IDQyMjI1LjhtcyArLy0gMi41JSAgIDQwNzc0LjBtcyArLy0gMS42JSAgICAgc2lnbmlmaWNhbnQK
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09CgogIDNkOiAgICAgICAgICAgICAgICAgIC0gICAgICAgICAg
ICAgICAgICA3NzQ4LjVtcyArLy0gMy42JSAgICA3NjE3LjhtcyArLy0gMS40JSAKICAgIGN1YmU6
ICAgICAgICAgICAgICAxLjAzMXggYXMgZmFzdCAgICAgMjY4MS41bXMgKy8tIDIuNCUgICAgMjYw
MS44bXMgKy8tIDEuOSUgICAgIHNpZ25pZmljYW50CiAgICBtb3JwaDogICAgICAgICAgICAgKjEu
MDY1eCBhcyBzbG93KiAgIDI1NTMuMG1zICsvLSA2LjclICAgIDI3MTguNW1zICsvLSAxLjElICAg
ICBzaWduaWZpY2FudAogICAgcmF5dHJhY2U6ICAgICAgICAgIDEuMDk0eCBhcyBmYXN0ICAgICAy
NTE0LjBtcyArLy0gMi4xJSAgICAyMjk3LjVtcyArLy0gMS44JSAgICAgc2lnbmlmaWNhbnQKCiAg
YWNjZXNzOiAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgIDQ0NDEuOG1zICsvLSA1Ljgl
ICAgIDQyMzAuM21zICsvLSAxLjIlIAogICAgYmluYXJ5LXRyZWVzOiAgICAgIDEuNzN4IGFzIGZh
c3QgICAgICAgMjk2LjNtcyArLy0gMC45JSAgICAgMTcxLjVtcyArLy0gMC41JSAgICAgc2lnbmlm
aWNhbnQKICAgIGZhbm5rdWNoOiAgICAgICAgICAqMS4wOTB4IGFzIHNsb3cqICAgIDMyNi4wbXMg
Ky8tIDAuMCUgICAgIDM1NS4zbXMgKy8tIDAuNyUgICAgIHNpZ25pZmljYW50CiAgICBuYm9keTog
ICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgIDM2MTQuOG1zICsvLSA3LjIlICAgIDM0NTgu
M21zICsvLSAxLjUlIAogICAgbnNpZXZlOiAgICAgICAgICAgICoxLjE5OHggYXMgc2xvdyogICAg
MjA0LjhtcyArLy0gMS4zJSAgICAgMjQ1LjNtcyArLy0gMC4zJSAgICAgc2lnbmlmaWNhbnQKCiAg
Yml0b3BzOiAgICAgICAgICAgICAgLSAgICAgICAgICAgICAgICAgIDEwNTEuMG1zICsvLSA1LjYl
ICAgIDEwMTguM21zICsvLSAxLjglIAogICAgM2JpdC1iaXRzLWluLWJ5dGU6IDEuMDEzeCBhcyBm
YXN0ICAgICAgIDk2LjBtcyArLy0gMC4wJSAgICAgIDk0LjhtcyArLy0gMC44JSAgICAgc2lnbmlm
aWNhbnQKICAgIGJpdHMtaW4tYnl0ZTogICAgICAqMS4wMjZ4IGFzIHNsb3cqICAgIDEyNC4wbXMg
Ky8tIDEuMCUgICAgIDEyNy4zbXMgKy8tIDEuNiUgICAgIHNpZ25pZmljYW50CiAgICBiaXR3aXNl
LWFuZDogICAgICAgMS4wNTN4IGFzIGZhc3QgICAgICAxMjUuM21zICsvLSAyLjQlICAgICAxMTku
MG1zICsvLSAxLjElICAgICBzaWduaWZpY2FudAogICAgbnNpZXZlLWJpdHM6ICAgICAgIC0gICAg
ICAgICAgICAgICAgICAgNzA1LjhtcyArLy0gNy44JSAgICAgNjc3LjNtcyArLy0gMi4yJSAKCiAg
Y29udHJvbGZsb3c6ICAgICAgICAgMS4wNjN4IGFzIGZhc3QgICAgICAgODAuOG1zICsvLSAxLjAl
ICAgICAgNzYuMG1zICsvLSAxLjclICAgICBzaWduaWZpY2FudAogICAgcmVjdXJzaXZlOiAgICAg
ICAgIDEuMDYzeCBhcyBmYXN0ICAgICAgIDgwLjhtcyArLy0gMS4wJSAgICAgIDc2LjBtcyArLy0g
MS43JSAgICAgc2lnbmlmaWNhbnQKCiAgY3J5cHRvOiAgICAgICAgICAgICAgKjEuMDQ5eCBhcyBz
bG93KiAgIDIyNjcuMG1zICsvLSAzLjMlICAgIDIzNzcuNW1zICsvLSAyLjMlICAgICBzaWduaWZp
Y2FudAogICAgYWVzOiAgICAgICAgICAgICAgIC0gICAgICAgICAgICAgICAgICAgNjM2LjhtcyAr
Ly0gMS45JSAgICAgNjI3LjNtcyArLy0gMi4xJSAKICAgIG1kNTogICAgICAgICAgICAgICAqMS4x
MDB4IGFzIHNsb3cqICAgIDgwNC4zbXMgKy8tIDIuNiUgICAgIDg4NC41bXMgKy8tIDMuNiUgICAg
IHNpZ25pZmljYW50CiAgICBzaGExOiAgICAgICAgICAgICAgPz8gICAgICAgICAgICAgICAgICA4
MjYuMG1zICsvLSA2LjklICAgICA4NjUuOG1zICsvLSA0LjQlICAgICBub3QgY29uY2x1c2l2ZTog
bWlnaHQgYmUgKjEuMDQ4eCBhcyBzbG93KgoKICBkYXRlOiAgICAgICAgICAgICAgICAxLjA1Mngg
YXMgZmFzdCAgICAgNDYzNC41bXMgKy8tIDEuNiUgICAgNDQwNS41bXMgKy8tIDMuNSUgICAgIHNp
Z25pZmljYW50CiAgICBmb3JtYXQtdG9mdGU6ICAgICAgMS4wNTl4IGFzIGZhc3QgICAgIDE4MzIu
MG1zICsvLSA0LjAlICAgIDE3MzAuOG1zICsvLSAyLjglICAgICBzaWduaWZpY2FudAogICAgZm9y
bWF0LXhwYXJiOiAgICAgIDEuMDQ4eCBhcyBmYXN0ICAgICAyODAyLjVtcyArLy0gMC41JSAgICAy
Njc0LjhtcyArLy0gNC4zJSAgICAgc2lnbmlmaWNhbnQKCiAgbWF0aDogICAgICAgICAgICAgICAg
LSAgICAgICAgICAgICAgICAgIDY1ODAuMG1zICsvLSA4LjglICAgIDYyNzQuM21zICsvLSAzLjQl
IAogICAgY29yZGljOiAgICAgICAgICAgID8/ICAgICAgICAgICAgICAgICAyMTc0LjNtcyArLy0g
OS42JSAgICAyMjM0LjhtcyArLy0gMi45JSAgICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICox
LjAyOHggYXMgc2xvdyoKICAgIHBhcnRpYWwtc3VtczogICAgICAxLjEyNXggYXMgZmFzdCAgICAg
MzA5OS4wbXMgKy8tIDExLjUlICAgIDI3NTQuOG1zICsvLSA3LjAlICAgICBzaWduaWZpY2FudAog
ICAgc3BlY3RyYWwtbm9ybTogICAgIC0gICAgICAgICAgICAgICAgICAxMzA2LjhtcyArLy0gMjgu
MCUgICAgMTI4NC44bXMgKy8tIDIuOCUgCgogIHJlZ2V4cDogICAgICAgICAgICAgIDEuMDExeCBh
cyBmYXN0ICAgICAzOTI1LjVtcyArLy0gMC4yJSAgICAzODgxLjBtcyArLy0gMC4zJSAgICAgc2ln
bmlmaWNhbnQKICAgIGRuYTogICAgICAgICAgICAgICAxLjAxMXggYXMgZmFzdCAgICAgMzkyNS41
bXMgKy8tIDAuMiUgICAgMzg4MS4wbXMgKy8tIDAuMyUgICAgIHNpZ25pZmljYW50CgogIHN0cmlu
ZzogICAgICAgICAgICAgIDEuMDU1eCBhcyBmYXN0ICAgIDExNDk2LjhtcyArLy0gMi43JSAgIDEw
ODkzLjVtcyArLy0gMi40JSAgICAgc2lnbmlmaWNhbnQKICAgIGJhc2U2NDogICAgICAgICAgICAx
LjA0N3ggYXMgZmFzdCAgICAgMTQxNS41bXMgKy8tIDMuOCUgICAgMTM1MS41bXMgKy8tIDEuMyUg
ICAgIHNpZ25pZmljYW50CiAgICBmYXN0YTogICAgICAgICAgICAgMS4wNjV4IGFzIGZhc3QgICAg
IDI4NDcuMG1zICsvLSAyLjklICAgIDI2NzQuMG1zICsvLSA0LjAlICAgICBzaWduaWZpY2FudAog
ICAgdGFnY2xvdWQ6ICAgICAgICAgIDEuMDUweCBhcyBmYXN0ICAgICAxNzU2LjNtcyArLy0gMi4w
JSAgICAxNjcyLjBtcyArLy0gMS44JSAgICAgc2lnbmlmaWNhbnQKICAgIHVucGFjay1jb2RlOiAg
ICAgICAtICAgICAgICAgICAgICAgICAgMzUyNC4zbXMgKy8tIDQuNSUgICAgMzM2NS4wbXMgKy8t
IDMuOSUgCiAgICB2YWxpZGF0ZS1pbnB1dDogICAgMS4wNjd4IGFzIGZhc3QgICAgIDE5NTMuOG1z
ICsvLSAzLjQlICAgIDE4MzEuMG1zICsvLSAzLjIlICAgICBzaWduaWZpY2FudAoKClY4OgoKVEVT
VCAgICAgICAgICAgICAgQ09NUEFSSVNPTiAgICAgICAgICAgIEZST00gICAgICAgICAgICAgICAg
IFRPICAgICAgICAgICAgIERFVEFJTFMKCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09CgoqKiBUT1RBTCAq
KjogICAgICAxLjA0MHggYXMgZmFzdCAgICA4MzUwNC4zbXMgKy8tIDIuMyUgICA4MDI4NC4ybXMg
Ky8tIDEuNCUgICAgIHNpZ25pZmljYW50Cgo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQoKICB2ODogICAg
ICAgICAgICAgMS4wNDB4IGFzIGZhc3QgICAgODM1MDQuM21zICsvLSAyLjMlICAgODAyODQuMm1z
ICsvLSAxLjQlICAgICBzaWduaWZpY2FudAogICAgY3J5cHRvOiAgICAgICAxLjAyM3ggYXMgZmFz
dCAgICAgNzM4OC4zbXMgKy8tIDAuNiUgICAgNzIyMy40bXMgKy8tIDAuMiUgICAgIHNpZ25pZmlj
YW50CiAgICBkZWx0YWJsdWU6ICAgID8/ICAgICAgICAgICAgICAgIDI4NDU4LjVtcyArLy0gNi4w
JSAgIDI4OTgyLjhtcyArLy0gMS4yJSAgICAgbm90IGNvbmNsdXNpdmU6IG1pZ2h0IGJlICoxLjAx
OHggYXMgc2xvdyoKICAgIGVhcmxleS1ib3llcjogMS4zMXggYXMgZmFzdCAgICAgMTQ1MzcuM21z
ICsvLSAyLjElICAgMTExMDYuOG1zICsvLSAyLjYlICAgICBzaWduaWZpY2FudAogICAgcmF5dHJh
Y2U6ICAgICAxLjEzM3ggYXMgZmFzdCAgICAxODA4MC4zbXMgKy8tIDEuMSUgICAxNTk1Mi41bXMg
Ky8tIDEuOCUgICAgIHNpZ25pZmljYW50CiAgICByaWNoYXJkczogICAgICoxLjEzMnggYXMgc2xv
dyogIDE1MDQwLjBtcyArLy0gMy45JSAgIDE3MDE4LjdtcyArLy0gNC4xJSAgICAgc2lnbmlmaWNh
bnQKCgpXaW5kU2NvcnBpb246CgpURVNUICAgICAgICAgICAgICBDT01QQVJJU09OICAgICAgICAg
ICAgRlJPTSAgICAgICAgICAgICAgICAgVE8gICAgICAgICAgICAgREVUQUlMUwoKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KCioqIFRPVEFMICoqOiAgICAgIDEuMDg4eCBhcyBmYXN0ICAgIDQ4Mzc2My4w
bXMgKy8tIDEwLjglICAgNDQ0NTk0LjBtcyArLy0gOC4xJSAgICAgc2lnbmlmaWNhbnQKCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09CgogIFdTOiAgICAgICAgICAgICAxLjA4OHggYXMgZmFzdCAgICA0ODM3
NjMuMG1zICsvLSAxMC44JSAgIDQ0NDU5NC4wbXMgKy8tIDguMSUgICAgIHNpZ25pZmljYW50CiAg
ICBidWJibGVTb3J0OiAgIDEuMDQxeCBhcyBmYXN0ICAgICAgNzUxOC4wbXMgKy8tIDIuMCUgICAg
IDcyMjMuMG1zICsvLSA0LjQlICAgICBzaWduaWZpY2FudAogICAgZGVzOiAgICAgICAgICA/PyAg
ICAgICAgICAgICAgICAgNDQ0MTcuNW1zICsvLSA0MC4xJSAgICA0NjUzNy4wbXMgKy8tIDUuNCUg
ICAgIG5vdCBjb25jbHVzaXZlOiBtaWdodCBiZSAqMS4wNDh4IGFzIHNsb3cqCiAgICBkaWNlUG9r
ZXI6ICAgIDEuMjN4IGFzIGZhc3QgICAgICAyNDIzNi41bXMgKy8tIDMyLjAlICAgIDE5NjQ4LjBt
cyArLy0gMzAuMCUgICAgIHNpZ25pZmljYW50CiAgICBlbWFpbDogICAgICAgIDEuMTAxeCBhcyBm
YXN0ICAgICAzNjE3Ny41bXMgKy8tIDkuMCUgICAgMzI4NzEuMG1zICsvLSAxMS41JSAgICAgc2ln
bmlmaWNhbnQKICAgIGZhY3RvcjogICAgICAgLSAgICAgICAgICAgICAgICAgIDYyNDAyLjBtcyAr
Ly0gMTIyLjElICAgIDUzMzgwLjVtcyArLy0gMi43JSAKICAgIGZsb3lkOiAgICAgICAgMS4yMXgg
YXMgZmFzdCAgICAgIDMwNTE3LjVtcyArLy0gMTQuMSUgICAgMjUxNTAuNW1zICsvLSA1MS44JSAg
ICAgc2lnbmlmaWNhbnQKICAgIGZvcm1hdE51bWJlcjogPz8gICAgICAgICAgICAgICAgIDM0Mjk2
LjVtcyArLy0gNy43JSAgICAzNTc3My4wbXMgKy8tIDEzLjMlICAgICBub3QgY29uY2x1c2l2ZTog
bWlnaHQgYmUgKjEuMDQzeCBhcyBzbG93KgogICAgZ2VuZXRpYzogICAgICAxLjA2OHggYXMgZmFz
dCAgICAgMzc2NDIuNW1zICsvLSAyLjElICAgIDM1MjM5LjVtcyArLy0gMjIuMiUgICAgIHNpZ25p
ZmljYW50CiAgICBodWZmbWFuOiAgICAgIC0gICAgICAgICAgICAgICAgICAxMTUwMC4wbXMgKy8t
IDQ2LjAlICAgIDExNDM1LjVtcyArLy0gNy43JSAKICAgIElFRUU3NTRDb252OiAgMS4xNTJ4IGFz
IGZhc3QgICAgIDUzNzMyLjBtcyArLy0gMjIuOCUgICAgNDY2NDkuMG1zICsvLSA0Ny45JSAgICAg
c2lnbmlmaWNhbnQKICAgIGxvbmdGYWN0OiAgICAgMS4xNDN4IGFzIGZhc3QgICAgIDQ0MjE5LjBt
cyArLy0gMjAuNSUgICAgMzg2ODUuNW1zICsvLSAyNy4wJSAgICAgc2lnbmlmaWNhbnQKICAgIHF1
aWNrU29ydDogICAgLSAgICAgICAgICAgICAgICAgICA2OTgzLjBtcyArLy0gNTUuOSUgICAgIDU4
NTYuMG1zICsvLSA3MS4yJSAKICAgIHJlZEJsYWNrVHJlZTogLSAgICAgICAgICAgICAgICAgIDIx
NzI5LjVtcyArLy0gMTYuNyUgICAgMjAyNDIuNW1zICsvLSAxMy4yJSAKICAgIHNvbHZlOiAgICAg
ICAgLSAgICAgICAgICAgICAgICAgIDQwMTYzLjBtcyArLy0gMjEuNCUgICAgMzgzNTAuNW1zICsv
LSAxNy4yJSAKICAgIHhtbFBhcnNlcjogICAgMS4wMjV4IGFzIGZhc3QgICAgIDI4MjI4LjVtcyAr
Ly0gMC43JSAgICAyNzU1Mi41bXMgKy8tIDIuMiUgICAgIHNpZ25pZmljYW50Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="0"
              isprivate="0"
          >
            <attachid>31125</attachid>
            <date>2009-06-10 01:43:26 -0700</date>
            <delta_ts>2009-06-10 01:43:26 -0700</delta_ts>
            <desc>comparison between interpreter and MacroAssembler based ARM JIT+YARR</desc>
            <filename>ss-trunk_vs_yarr-MA.txt</filename>
            <type>text/plain</type>
            <size>3809</size>
            <attacher name="Csaba Osztrogonác">ossy</attacher>
            
              <data encoding="base64">RnJvbTogdHJ1bmsgLSByNDM4MTgKVG86IEFSTSBKSVQgd2l0aCBNYWNyb0Fzc2VtYmxlciArIFlB
UlIKClRFU1QgICAgICAgICAgICAgICAgICAgQ09NUEFSSVNPTiAgICAgICAgICAgIEZST00gICAg
ICAgICAgICAgICAgIFRPICAgICAgICAgICAgIERFVEFJTFMKCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
CgoqKiBUT1RBTCAqKjogICAgICAgICAgIDEuNDh4IGFzIGZhc3QgICAgIDU1NjQ0LjJtcyArLy0g
Mi41JSAgIDM3NDczLjhtcyArLy0gMi42JSAgICAgc2lnbmlmaWNhbnQKCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09CgogIDNkOiAgICAgICAgICAgICAgICAgIDEuNDF4IGFzIGZhc3QgICAgIDEwODIxLjBt
cyArLy0gMy41JSAgICA3NjkyLjFtcyArLy0gMi44JSAgICAgc2lnbmlmaWNhbnQKICAgIGN1YmU6
ICAgICAgICAgICAgICAxLjI1eCBhcyBmYXN0ICAgICAgMzA5My45bXMgKy8tIDQuMiUgICAgMjQ4
MC44bXMgKy8tIDAuNyUgICAgIHNpZ25pZmljYW50CiAgICBtb3JwaDogICAgICAgICAgICAgMS41
MnggYXMgZmFzdCAgICAgIDQyMTEuMG1zICsvLSAzLjElICAgIDI3NjMuOG1zICsvLSAzLjglICAg
ICBzaWduaWZpY2FudAogICAgcmF5dHJhY2U6ICAgICAgICAgIDEuNDR4IGFzIGZhc3QgICAgICAz
NTE2LjFtcyArLy0gMy45JSAgICAyNDQ3LjVtcyArLy0gMy45JSAgICAgc2lnbmlmaWNhbnQKCiAg
YWNjZXNzOiAgICAgICAgICAgICAgMS42MXggYXMgZmFzdCAgICAgIDY5NDYuOG1zICsvLSAyLjgl
ICAgIDQzMDQuOW1zICsvLSA2LjAlICAgICBzaWduaWZpY2FudAogICAgYmluYXJ5LXRyZWVzOiAg
ICAgIDEuNDR4IGFzIGZhc3QgICAgICAgNDg1LjdtcyArLy0gMy44JSAgICAgMzM4LjRtcyArLy0g
Mi44JSAgICAgc2lnbmlmaWNhbnQKICAgIGZhbm5rdWNoOiAgICAgICAgICAzLjA2eCBhcyBmYXN0
ICAgICAgIDk5NC4wbXMgKy8tIDAuNyUgICAgIDMyNS4xbXMgKy8tIDAuMyUgICAgIHNpZ25pZmlj
YW50CiAgICBuYm9keTogICAgICAgICAgICAgMS40N3ggYXMgZmFzdCAgICAgIDUwNTUuNm1zICsv
LSAzLjclICAgIDM0MzYuNW1zICsvLSA3LjYlICAgICBzaWduaWZpY2FudAogICAgbnNpZXZlOiAg
ICAgICAgICAgIDIuMDF4IGFzIGZhc3QgICAgICAgNDExLjVtcyArLy0gMC41JSAgICAgMjA0Ljlt
cyArLy0gMC4xJSAgICAgc2lnbmlmaWNhbnQKCiAgYml0b3BzOiAgICAgICAgICAgICAgMi4zMXgg
YXMgZmFzdCAgICAgIDIzMjQuMG1zICsvLSAwLjklICAgIDEwMDcuOG1zICsvLSAzLjUlICAgICBz
aWduaWZpY2FudAogICAgM2JpdC1iaXRzLWluLWJ5dGU6IDMuMzF4IGFzIGZhc3QgICAgICAgMzE3
LjhtcyArLy0gMS4xJSAgICAgIDk2LjBtcyArLy0gMC4wJSAgICAgc2lnbmlmaWNhbnQKICAgIGJp
dHMtaW4tYnl0ZTogICAgICAzLjMxeCBhcyBmYXN0ICAgICAgIDQwNy44bXMgKy8tIDAuNiUgICAg
IDEyMy4zbXMgKy8tIDAuNCUgICAgIHNpZ25pZmljYW50CiAgICBiaXR3aXNlLWFuZDogICAgICAg
Mi44NHggYXMgZmFzdCAgICAgICAzNTIuNG1zICsvLSAwLjMlICAgICAxMjQuMm1zICsvLSAwLjIl
ICAgICBzaWduaWZpY2FudAogICAgbnNpZXZlLWJpdHM6ICAgICAgIDEuODh4IGFzIGZhc3QgICAg
ICAxMjQ2LjBtcyArLy0gMS45JSAgICAgNjY0LjNtcyArLy0gNS40JSAgICAgc2lnbmlmaWNhbnQK
CiAgY29udHJvbGZsb3c6ICAgICAgICAgNC42MnggYXMgZmFzdCAgICAgICAzNzIuNW1zICsvLSAx
LjUlICAgICAgODAuNm1zICsvLSAwLjYlICAgICBzaWduaWZpY2FudAogICAgcmVjdXJzaXZlOiAg
ICAgICAgIDQuNjJ4IGFzIGZhc3QgICAgICAgMzcyLjVtcyArLy0gMS41JSAgICAgIDgwLjZtcyAr
Ly0gMC42JSAgICAgc2lnbmlmaWNhbnQKCiAgY3J5cHRvOiAgICAgICAgICAgICAgMS40NXggYXMg
ZmFzdCAgICAgIDM0MDkuNm1zICsvLSAyLjIlICAgIDIzNTMuNG1zICsvLSAzLjglICAgICBzaWdu
aWZpY2FudAogICAgYWVzOiAgICAgICAgICAgICAgIDEuMzN4IGFzIGZhc3QgICAgICAgODUxLjRt
cyArLy0gMS44JSAgICAgNjQxLjBtcyArLy0gMS40JSAgICAgc2lnbmlmaWNhbnQKICAgIG1kNTog
ICAgICAgICAgICAgICAxLjQ1eCBhcyBmYXN0ICAgICAgMTI1NS4zbXMgKy8tIDMuNSUgICAgIDg2
Mi45bXMgKy8tIDMuMCUgICAgIHNpZ25pZmljYW50CiAgICBzaGExOiAgICAgICAgICAgICAgMS41
M3ggYXMgZmFzdCAgICAgIDEzMDIuOW1zICsvLSAzLjAlICAgICA4NDkuNW1zICsvLSA2LjclICAg
ICBzaWduaWZpY2FudAoKICBkYXRlOiAgICAgICAgICAgICAgICAxLjA3N3ggYXMgZmFzdCAgICAg
NDgxMi45bXMgKy8tIDIuMSUgICAgNDQ2OC42bXMgKy8tIDAuOCUgICAgIHNpZ25pZmljYW50CiAg
ICBmb3JtYXQtdG9mdGU6ICAgICAgMS4wNzl4IGFzIGZhc3QgICAgIDE4ODkuOW1zICsvLSAyLjYl
ICAgIDE3NTEuOW1zICsvLSAxLjElICAgICBzaWduaWZpY2FudAogICAgZm9ybWF0LXhwYXJiOiAg
ICAgIDEuMDc2eCBhcyBmYXN0ICAgICAyOTIzLjBtcyArLy0gMi4wJSAgICAyNzE2LjdtcyArLy0g
MS4xJSAgICAgc2lnbmlmaWNhbnQKCiAgbWF0aDogICAgICAgICAgICAgICAgMS41MXggYXMgZmFz
dCAgICAgMTAwNDcuN21zICsvLSAzLjYlICAgIDY2NTYuNW1zICsvLSA0LjYlICAgICBzaWduaWZp
Y2FudAogICAgY29yZGljOiAgICAgICAgICAgIDEuNDJ4IGFzIGZhc3QgICAgICAzNTY0LjJtcyAr
Ly0gNy4yJSAgICAyNTA5LjVtcyArLy0gNC41JSAgICAgc2lnbmlmaWNhbnQKICAgIHBhcnRpYWwt
c3VtczogICAgICAxLjQ4eCBhcyBmYXN0ICAgICAgNDQyNy4xbXMgKy8tIDMuMCUgICAgMjk4Mi4y
bXMgKy8tIDQuOSUgICAgIHNpZ25pZmljYW50CiAgICBzcGVjdHJhbC1ub3JtOiAgICAgMS43N3gg
YXMgZmFzdCAgICAgIDIwNTYuNG1zICsvLSAyLjklICAgIDExNjQuOG1zICsvLSA2LjMlICAgICBz
aWduaWZpY2FudAoKICByZWdleHA6ICAgICAgICAgICAgICA4LjI3eCBhcyBmYXN0ICAgICAgMzkx
NS41bXMgKy8tIDAuMSUgICAgIDQ3My42bXMgKy8tIDAuNSUgICAgIHNpZ25pZmljYW50CiAgICBk
bmE6ICAgICAgICAgICAgICAgOC4yN3ggYXMgZmFzdCAgICAgIDM5MTUuNW1zICsvLSAwLjElICAg
ICA0NzMuNm1zICsvLSAwLjUlICAgICBzaWduaWZpY2FudAoKICBzdHJpbmc6ICAgICAgICAgICAg
ICAxLjI1eCBhcyBmYXN0ICAgICAxMjk5NC4ybXMgKy8tIDMuMyUgICAxMDQzNi4zbXMgKy8tIDEu
OCUgICAgIHNpZ25pZmljYW50CiAgICBiYXNlNjQ6ICAgICAgICAgICAgMS4yNHggYXMgZmFzdCAg
ICAgIDE2NTcuNm1zICsvLSAzLjIlICAgIDEzNDEuNW1zICsvLSAxLjclICAgICBzaWduaWZpY2Fu
dAogICAgZmFzdGE6ICAgICAgICAgICAgIDEuMjZ4IGFzIGZhc3QgICAgICAzNDA3LjNtcyArLy0g
NC42JSAgICAyNjk5LjZtcyArLy0gNC44JSAgICAgc2lnbmlmaWNhbnQKICAgIHRhZ2Nsb3VkOiAg
ICAgICAgICAxLjI3eCBhcyBmYXN0ICAgICAgMTkyMC4ybXMgKy8tIDIuMyUgICAgMTUwOC4zbXMg
Ky8tIDEuNiUgICAgIHNpZ25pZmljYW50CiAgICB1bnBhY2stY29kZTogICAgICAgMS4xNzl4IGFz
IGZhc3QgICAgIDM3NDAuNG1zICsvLSAzLjIlICAgIDMxNzMuMG1zICsvLSAyLjMlICAgICBzaWdu
aWZpY2FudAogICAgdmFsaWRhdGUtaW5wdXQ6ICAgIDEuMzJ4IGFzIGZhc3QgICAgICAyMjY4Ljdt
cyArLy0gMy42JSAgICAxNzEzLjltcyArLy0gMS45JSAgICAgc2lnbmlmaWNhbnQ=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31155</attachid>
            <date>2009-06-11 02:47:29 -0700</date>
            <delta_ts>2009-06-20 05:31:08 -0700</delta_ts>
            <desc>Updated version of generic ARM JIT port</desc>
            <filename>Updated-version-of-generic-ARM-port.patch</filename>
            <type>text/plain</type>
            <size>131970</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA3MzJlNWEzZDJjODlhNjI3YzdhNTY5ZDVmZDkyNDRmMjgzMDE5MjQ3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVGh1LCAxMSBKdW4gMjAwOSAxMTozODo1MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFVwZGF0
ZWQgdmVyc2lvbiBvZiBnZW5lcmljIEFSTSBwb3J0CgpTaWduZWQtb2ZmLWJ5OiBab2x0YW4gSGVy
Y3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgpTaWduZWQtb2ZmLWJ5OiBHYWJvciBMb2tp
IDxsb2tpQGluZi51LXN6ZWdlZC5odT4KU2lnbmVkLW9mZi1ieTogQ3NhYmEgT3N6dHJvZ29uYWMg
PG9zemlAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgMjc1ICsrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9KYXZh
U2NyaXB0Q29yZS5wcmkgICAgICAgICAgICAgICAgIHwgICAgMiArCiBKYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggICAgICAgICAgIHwgIDY2MSArKysrKysrKysrKysrKysr
KysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIHwg
ICAzNCArCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmggICAgICAg
IHwgIDEzMyArLS0tLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlckFS
TS5jcHAgICB8ICA2MTMgKysrKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJBUk0uaCAgICAgfCAgMjcyICsrKysrKysrCiBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyWDg2LmggICAgIHwgIDE2MiArKysrKwogSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggICAgICAgICB8ICAgIDQgKwogSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggICAgICB8ICA3MzMgKysr
KysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmggICAgICAgICAgIHwgICAgNCArCiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwICAgICAgICAgICAgIHwgICAgNCArLQogSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmggICAgICAgICAgICAgICB8ICAgMTMgKy0KIEphdmFTY3JpcHRDb3JlL2ludGVycHJldGVy
L0ludGVycHJldGVyLmggICAgICAgICAgfCAgICAxIC0KIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmggICAgICAgICAgfCAgICAzICsKIEphdmFTY3JpcHRDb3JlL2ppdC9K
SVQuY3BwICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTI2ICsrKystCiBKYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MSArKwogSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwICAgICAgICAgICAgICAgICAgICB8ICAgIDUgKy0KIEphdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggICAgICAgICAgICAgICAgICAgICAgfCAgICAyICsKIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAgICAgICAgICAgfCAgIDIzICst
CiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwICAgICAgICAgIHwgICAx
MSArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YkNhbGwuaCAgICAgICAgICAgICAgICAgIHwg
ICAgMSArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwICAgICAgICAgICAgICAgICAg
IHwgICAgNiArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCAgICAgICAgICAgICAgICAg
ICAgIHwgICAzMCArCiBKYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCAgICAgICAgICAgICAg
ICAgICAgIHwgICAyNSArCiBKYXZhU2NyaXB0Q29yZS93dGYvVGFwZS5oICAgICAgICAgICAgICAg
ICAgICAgICAgIHwgIDE5MiArKysrKysKIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3Bw
ICAgICAgICAgICAgICAgICAgfCAgIDIzICsKIDI3IGZpbGVzIGNoYW5nZWQsIDMyNjkgaW5zZXJ0
aW9ucygrKSwgMTQwIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJBUk0uY3BwCiBjcmVhdGUgbW9kZSAxMDA2
NDQgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlckFSTS5oCiBjcmVhdGUg
bW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlclg4Ni5o
CiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29yZS93dGYvVGFwZS5oCgpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCmluZGV4IGYxYTg5NmYuLjEyMTM3M2MgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyNzgg
QEAKKzIwMDktMDYtMTEgIEdhYm9yIExva2kgIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworCVVwZGF0ZWQgdmVyc2lvbiBvZiBn
ZW5lcmljIEFSTSBwb3J0CisKKyAgICAgICAgQnVnIDI0OTg2OiBBUk0gSklUIHBvcnQKKwk8aHR0
cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2PgorCisJTUFTTStKSVQ6
CisJICBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgorCSAgR2Fib3Ig
TG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+LAorCVlBUlI6CisJICBDc2FiYSBPc3p0cm9nb25h
YyA8b3N6aUBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5wcmk6
CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpT
Qzo6QVJNOjopOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkFSTUFzc2VtYmxlcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjplbWl0SW5zdCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YW5kX3IpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFuZHNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6ZW9yX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmVvcnNfcik6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6c3ViX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OnN1YnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cnNiX3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OnJzYnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
YWRkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFkZHNfcik6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6YWRjX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFk
Y3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6c2JjX3IpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OnNiY3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cnNj
X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJzY3Nfcik6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6dHN0X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnRlcV9y
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpjbXBfcik6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6b3JyX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om9ycnNfcik6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bW92X3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6Om1vdnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmljX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJpY3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6bXZuX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om12bnNfcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bXVsX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6Om11bHNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bXVsbF9yKToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsZHJfaW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpsZHJfdW5faW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpkdHJfdSk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX3VyKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpkdHJfZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX2RyKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsZHJoX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmxkcmhfZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGRyaF91KToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzdHJoX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OnB1c2hfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cG9wX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBva2Vfcik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6cGVla19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpjbHpfcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmtwdCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6bHNsKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsc3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmFzcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bHNs
X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Omxzcl9yKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjphc3Jfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2V0TGRy
SW1tQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGlua0p1bXApOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxpbmtDYWxsKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpyZWxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyZWxpbmtD
YWxsKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsYWJlbCk6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6am1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzaXplKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlNDOjpB
Uk1Bc3NlbWJsZXI6OmdldENhbGxSZXR1cm5PZmZzZXQpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6OnBhdGNoQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YWxpZ24p
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBhdGNoSW1tZWRpYXRlKToKKyAgICAgICAg
KEpTQzo6QVJNQXNzZW1ibGVyOjpwYXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6OnJlcGF0Y2hJbnQzMik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cmVwYXRj
aFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBhdGNoSnVtcCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cmVwYXRjaExvYWRQdHJUb0xFQSk6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6Uk0pOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OlJTKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpSRCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6Uk4pOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkNhbGw6OmVuYWJsZUxhdGVQ
YXRjaCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1bXA6OmVuYWJs
ZUxhdGVQYXRjaCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OlBhdGNo
QnVmZmVyOjpsb2NhdGlvbk9mKToKKyAgICAgICAgKEpTQzo6QWJzdHJhY3RNYWNyb0Fzc2VtYmxl
cjo6UGF0Y2hCdWZmZXI6OmxvY2F0aW9uT2ZOZWFyQ2FsbCk6CisgICAgICAgIChKU0M6OkFic3Ry
YWN0TWFjcm9Bc3NlbWJsZXI6OlBhdGNoQnVmZmVyOjpsb2NhdGlvbk9mSnVtcCk6CisgICAgICAg
IChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OnByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9u
TGlzdCk6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oOgorICAgICAgICAq
IGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJBUk0uY3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6
bWF4RGlmZmVyZW5jZSk6CisgICAgICAgIChKU0M6OmlzQnJhbmNoVGFyZ2V0KToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjpBc3NlbWJsZXJCdWZmZXJBUk0pOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06On5Bc3NlbWJsZXJCdWZmZXJBUk0pOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06OnBhdGNoUENSZWwpOgorICAgICAgICAoSlNDOjpBc3Nl
bWJsZXJCdWZmZXJBUk06OmV4ZWN1dGFibGVDb3B5KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVy
QnVmZmVyQVJNOjphbGxvY1BhZ2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06
OnB1c2hDUG9vbCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlckFSTTo6cHVzaFBlbmRp
bmdJbnN0cnVjdGlvbik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2V0T3AyKToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRPcDJCeXRlKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpsaW5rQnJhbmNoKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpwYXRj
aFBvaW50ZXJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2VuSW50KToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRJbW0pOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmdldEludkltbSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bW92ZUlt
bSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZGF0YVRyYW5zZmVyMzIpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyMzIpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OmNhbGwzMik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cHJl
cGFyZUNhbGwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnByZXBhcmVVbmJyb2tlbklu
c3RydWN0aW9uTGlzdCk6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlckFSTS5o
OiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjpjbGVhcl9jYWNoZSk6
CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlckFSTTo6Sm1wRHN0OjpKbXBEc3QpOgorICAg
ICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06OkptcERzdDo6aXNVc2VkKToKKyAgICAgICAg
KEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjpKbXBEc3Q6OnVzZWQpOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXJBUk06OkptcFNyYzo6Sm1wU3JjKToKKyAgICAgICAgKEpTQzo6QXNzZW1i
bGVyQnVmZmVyQVJNOjpKbXBTcmM6OmVuYWJsZUxhdGVQYXRjaCk6CisgICAgICAgIChKU0M6OkFz
c2VtYmxlckJ1ZmZlckFSTTo6Sm1wU3JjOjppc1BhdGNoT25jZSk6CisgICAgICAgIChKU0M6OkFz
c2VtYmxlckJ1ZmZlckFSTTo6ZW5zdXJlU3BhY2UpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJC
dWZmZXJBUk06OmlzQWxpZ25lZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlckFSTTo6
YWRkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjphZGRDb25zdCk6CisgICAg
ICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlckFSTTo6YWRkVW5pcXVlQ29uc3QpOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06OnNpemUpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJC
dWZmZXJBUk06OmxhYmVsKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjphbGxv
Y0luc3QpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06OmdldExhYmVsQWRkcmVz
cyk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlckFSTTo6Y3JlYXRlSm1wRHN0KToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyQVJNOjpjcmVhdGVKbXBTcmMpOgorICAgICAgICAo
SlNDOjpBc3NlbWJsZXJCdWZmZXJBUk06Oik6CisgICAgICAgICogYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlclg4Ni5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyWDg2OjpB
c3NlbWJsZXJCdWZmZXJYODYpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJYODY6On5B
c3NlbWJsZXJCdWZmZXJYODYpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJYODY6OmVu
c3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyWDg2Ojppc0FsaWduZWQp
OgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJYODY6OnB1dEJ5dGVVbmNoZWNrZWQpOgor
ICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXJYODY6OnB1dEJ5dGUpOgorICAgICAgICAoSlND
OjpBc3NlbWJsZXJCdWZmZXJYODY6OnB1dFNob3J0VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6
QXNzZW1ibGVyQnVmZmVyWDg2OjpwdXRTaG9ydCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1
ZmZlclg4Njo6cHV0SW50VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVy
WDg2OjpwdXRJbnQ2NFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlclg4
Njo6cHV0SW50KToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyWDg2OjpkYXRhKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyWDg2OjpzaXplKToKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibGVyQnVmZmVyWDg2OjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgIChKU0M6OkFzc2VtYmxl
ckJ1ZmZlclg4Njo6Z3Jvdyk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmg6
CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6IEFkZGVkLgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjphZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
OjphbmQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsc2hpZnQzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptdWwzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjpub3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
OjpvcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJzaGlmdDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OnhvcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OmxvYWQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzJXaXRoQWRk
cmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxvYWRQ
dHJXaXRoUGF0Y2hUb0xFQSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2Fk
MTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmUzMldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmUzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpwb3ApOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6cHVzaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
Ojptb3ZlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN3YXApOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2lnbkV4dGVuZDMyVG9QdHIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6emVyb0V4dGVuZDMyVG9QdHIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJh
bmNoVGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Omp1bXApOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoQWRkMzIpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6bXVsbDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmJyYW5jaE11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJy
YW5jaFN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyZWFrcG9pbnQp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bmVhckNhbGwpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpyZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2V0MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2V0VGVzdDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06Om1ha2VUYWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjptb3ZlV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk06OmJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpzdG9yZVB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN0
b3JlRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmFkZERvdWJsZSk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdWJEb3VibGUpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bXVsRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk06OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk06OmJyYW5jaERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTo6QVJNQ29uZGl0aW9uKToKKyAgICAgICAgKiBhc3NlbWJsZXIvWDg2QXNzZW1i
bGVyLmg6CisgICAgICAgIChKU0M6Olg4NkFzc2VtYmxlcjo6Sm1wU3JjOjplbmFibGVMYXRlUGF0
Y2gpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5jcHA6CisgICAgICAgIChKU0M6OkNv
ZGVCbG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeSk6CisgICAgICAgICog
Ynl0ZWNvZGUvQ29kZUJsb2NrLmg6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Z2V0Qnl0ZWNv
ZGVJbmRleCk6CisgICAgICAgIChKU0M6OkNvZGVCbG9jazo6Y2FsbFJldHVybkluZGV4VmVjdG9y
KToKKyAgICAgICAgKiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorICAgICAgICAqIGppdC9F
eGVjdXRhYmxlQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6
OmNhY2hlRmx1c2gpOgorICAgICAgICAqIGppdC9KSVQuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6
OnByaXZhdGVDb21waWxlKToKKyAgICAgICAgKEpTQzo6SklUOjpwcml2YXRlQ29tcGlsZUNUSU1h
Y2hpbmVUcmFtcG9saW5lcyk6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAqIGppdC9K
SVRDYWxsLmNwcDoKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlT3BDYWxsKToKKyAgICAgICAg
KEpTQzo6SklUOjpjb21waWxlT3BDYWxsU2xvd0Nhc2UpOgorICAgICAgICAqIGppdC9KSVRDb2Rl
Lmg6CisgICAgICAgIChKU0M6OkpJVENvZGU6OmV4ZWN1dGUpOgorICAgICAgICAqIGppdC9KSVRJ
bmxpbmVNZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6Y3VzdG9tUmV0dXJuKToKKyAgICAg
ICAgKEpTQzo6SklUOjpwcmV2ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwpOgorICAgICAgICAo
SlNDOjpKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKToKKyAgICAgICAgKiBq
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbWV0
aG9kX2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgor
ICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlND
OjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19v
cF9wdXRfYnlfaWQpOgorICAgICAgICAqIGppdC9KSVRTdHViQ2FsbC5oOgorICAgICAgICAoSlND
OjpKSVRTdHViQ2FsbDo6Y2FsbCk6CisgICAgICAgICogaml0L0pJVFN0dWJzLmNwcDoKKyAgICAg
ICAgKiBqaXQvSklUU3R1YnMuaDoKKyAgICAgICAgKEpTQzo6SklUU3RhY2tGcmFtZTo6cmV0dXJu
QWRkcmVzc1Nsb3QpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHd0Zi9U
YXBlLmg6IEFkZGVkLgorICAgICAgICAoV1RGOjpUYXBlSXRlcmF0b3I6On5UYXBlSXRlcmF0b3Ip
OgorICAgICAgICAoV1RGOjpUYXBlSXRlcmF0b3I6Om9wZXJhdG9yKik6CisgICAgICAgIChXVEY6
OlRhcGVJdGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OlRhcGVJdGVyYXRvcjo6
b3BlcmF0b3IrKyk6CisgICAgICAgIChXVEY6OlRhcGVJdGVyYXRvcjo6b3BlcmF0b3I9PSk6Cisg
ICAgICAgIChXVEY6OlRhcGVJdGVyYXRvcjo6b3BlcmF0b3IhPSk6CisgICAgICAgIChXVEY6OlRh
cGVJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6VGFwZUl0ZXJhdG9yOjpUYXBl
SXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpUYXBlOjpUYXBlKToKKyAgICAgICAgKFdURjo6VGFw
ZTo6flRhcGUpOgorICAgICAgICAoV1RGOjpUYXBlOjphcHBlbmQpOgorICAgICAgICAoV1RGOjpU
YXBlOjphbGxvYyk6CisgICAgICAgIChXVEY6OlRhcGU6OmJlZ2luKToKKyAgICAgICAgKFdURjo6
VGFwZTo6ZW5kKToKKyAgICAgICAgKFdURjo6VGFwZTo6c2l6ZSk6CisgICAgICAgIChXVEY6OlRh
cGU6OmNsZWFyKToKKyAgICAgICAgKFdURjo6VGFwZTo6YWxsb2NQYWdlKToKKyAgICAgICAgKiB5
YXJyL1JlZ2V4SklULmNwcDoKKyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6Omdl
bmVyYXRlRW50ZXIpOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJh
dGVSZXR1cm4pOgorCiAyMDA5LTA2LTA5ICBHYXZpbiBCYXJyYWNsb3VnaCAgPGJhcnJhY2xvdWdo
QGFwcGxlLmNvbT4KIAogICAgICAgICBSdWJiZXIgU3RhbXBlZCBieSBNYXJrIFJvd2UuCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkgYi9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5wcmkKaW5kZXggZmJjNGYwMi4uODgxZmVlYSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCisrKyBiL0phdmFTY3JpcHRDb3JlL0ph
dmFTY3JpcHRDb3JlLnByaQpAQCAtNjksNiArNjksNyBAQCBpbmNsdWRlKHBjcmUvcGNyZS5wcmkp
CiAKIExVVF9GSUxFUyArPSBcCiAgICAgcnVudGltZS9EYXRlUHJvdG90eXBlLmNwcCBcCisgICAg
cnVudGltZS9KU09OT2JqZWN0LmNwcCBcCiAgICAgcnVudGltZS9OdW1iZXJDb25zdHJ1Y3Rvci5j
cHAgXAogICAgIHJ1bnRpbWUvU3RyaW5nUHJvdG90eXBlLmNwcCBcCiAgICAgcnVudGltZS9BcnJh
eVByb3RvdHlwZS5jcHAgXApAQCAtMTE2LDYgKzExNyw3IEBAIFNPVVJDRVMgKz0gXAogICAgIGJ5
dGVjb2RlL0NvZGVCbG9jay5jcHAgXAogICAgIGJ5dGVjb2RlL1N0cnVjdHVyZVN0dWJJbmZvLmNw
cCBcCiAgICAgYnl0ZWNvZGUvSnVtcFRhYmxlLmNwcCBcCisgICAgYXNzZW1ibGVyL0Fzc2VtYmxl
ckJ1ZmZlckFSTS5jcHAgXAogICAgIGppdC9KSVQuY3BwIFwKICAgICBqaXQvSklUQ2FsbC5jcHAg
XAogICAgIGppdC9KSVRBcml0aG1ldGljLmNwcCBcCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uMWU4N2EyYwot
LS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIu
aApAQCAtMCwwICsxLDY2MSBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBVbml2ZXJzaXR5
IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAq
IG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcg
Y29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2Ug
Y29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMg
bGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBB
TkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQg
Tk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJ
TElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJ
TUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgorICogQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisg
KiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9U
IExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQVJNQXNzZW1ibGVyX2gK
KyNkZWZpbmUgQVJNQXNzZW1ibGVyX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisj
aWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oQVJNKQorCisjaW5jbHVkZSAiQXNzZW1i
bGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKK25hbWVzcGFjZSBBUk0geworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIHIwID0g
MCwKKyAgICAgICAgcjEsCisgICAgICAgIHIyLAorICAgICAgICByMywKKyAgICAgICAgUzAgPSBy
MywKKyAgICAgICAgcjQsCisgICAgICAgIHI1LAorICAgICAgICByNiwKKyAgICAgICAgcjcsCisg
ICAgICAgIHI4LAorICAgICAgICBTMSA9IHI4LAorICAgICAgICByOSwKKyAgICAgICAgcjEwLAor
ICAgICAgICByMTEsCisgICAgICAgIHIxMiwKKyAgICAgICAgcjEzLAorICAgICAgICBzcCA9IHIx
MywKKyAgICAgICAgcjE0LAorICAgICAgICBsciA9IHIxNCwKKyAgICAgICAgcjE1LAorICAgICAg
ICBwYyA9IHIxNQorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAg
ICAgIGZwMCAvL0ZJWE1FCisgICAgfSBGUFJlZ2lzdGVySUQ7Cit9IC8vIG5hbWVzcGFjZSBBUk0K
KworI2RlZmluZSBBUk1fQ09ORF9GSUVMRChpKSAoaSAmIDB4ZjAwMDAwMDApCisKKyAgICBjbGFz
cyBBUk1Bc3NlbWJsZXIgeworICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBBUk06OlJlZ2lz
dGVySUQgUmVnaXN0ZXJJRDsKKyAgICAgICAgdHlwZWRlZiBBUk06OkZQUmVnaXN0ZXJJRCBGUFJl
Z2lzdGVySUQ7CisgICAgICAgIHR5cGVkZWYgQXNzZW1ibGVyQnVmZmVyOjpKbXBTcmMgSm1wU3Jj
OworICAgICAgICB0eXBlZGVmIEFzc2VtYmxlckJ1ZmZlcjo6Sm1wRHN0IEptcERzdDsKKworICAg
ICAgICBBUk1Bc3NlbWJsZXIoKSB7IH0KKworICAgICAgICAvLyBBUk0gY29uZGl0aW9uYWwgY29u
c3RhbnRzCisgICAgICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgICAgICBFUSA9IDB4MDAwMDAw
MDAsIC8vIFplcm8KKyAgICAgICAgICAgIE5FID0gMHgxMDAwMDAwMCwgLy8gTm9uLXplcm8KKyAg
ICAgICAgICAgIENTID0gMHgyMDAwMDAwMCwKKyAgICAgICAgICAgIENDID0gMHgzMDAwMDAwMCwK
KyAgICAgICAgICAgIE1JID0gMHg0MDAwMDAwMCwKKyAgICAgICAgICAgIFBMID0gMHg1MDAwMDAw
MCwKKyAgICAgICAgICAgIFZTID0gMHg2MDAwMDAwMCwKKyAgICAgICAgICAgIFZDID0gMHg3MDAw
MDAwMCwKKyAgICAgICAgICAgIEhJID0gMHg4MDAwMDAwMCwKKyAgICAgICAgICAgIExTID0gMHg5
MDAwMDAwMCwKKyAgICAgICAgICAgIEdFID0gMHhhMDAwMDAwMCwKKyAgICAgICAgICAgIExUID0g
MHhiMDAwMDAwMCwKKyAgICAgICAgICAgIEdUID0gMHhjMDAwMDAwMCwKKyAgICAgICAgICAgIExF
ID0gMHhkMDAwMDAwMCwKKyAgICAgICAgICAgIEFMID0gMHhlMDAwMDAwMAorICAgICAgICB9IENv
bmRpdGlvbjsKKworICAgICAgICAvLyBBUk0gaW5zdHJ1Y3Rpb24gY29uc3RhbnRzCisgICAgICAg
IGVudW0geworICAgICAgICAgICAgQU5EID0gKDB4MCA8PCAyMSksCisgICAgICAgICAgICBFT1Ig
PSAoMHgxIDw8IDIxKSwKKyAgICAgICAgICAgIFNVQiA9ICgweDIgPDwgMjEpLAorICAgICAgICAg
ICAgUlNCID0gKDB4MyA8PCAyMSksCisgICAgICAgICAgICBBREQgPSAoMHg0IDw8IDIxKSwKKyAg
ICAgICAgICAgIEFEQyA9ICgweDUgPDwgMjEpLAorICAgICAgICAgICAgU0JDID0gKDB4NiA8PCAy
MSksCisgICAgICAgICAgICBSU0MgPSAoMHg3IDw8IDIxKSwKKyAgICAgICAgICAgIFRTVCA9ICgw
eDggPDwgMjEpLAorICAgICAgICAgICAgVEVRID0gKDB4OSA8PCAyMSksCisgICAgICAgICAgICBD
TVAgPSAoMHhhIDw8IDIxKSwKKyAgICAgICAgICAgIENNTiA9ICgweGIgPDwgMjEpLAorICAgICAg
ICAgICAgT1JSID0gKDB4YyA8PCAyMSksCisgICAgICAgICAgICBNT1YgPSAoMHhkIDw8IDIxKSwK
KyAgICAgICAgICAgIEJJQyA9ICgweGUgPDwgMjEpLAorICAgICAgICAgICAgTVZOID0gKDB4ZiA8
PCAyMSksCisgICAgICAgICAgICBNVUwgPSAweDAwMDAwMDkwLAorICAgICAgICAgICAgTVVMTCA9
IDB4MDBjMDAwOTAsCisgICAgICAgICAgICBEVFIgPSAweDA1MDAwMDAwLAorICAgICAgICAgICAg
TERSSCA9IDB4MDAxMDAwOTAsCisgICAgICAgICAgICBTVFJIID0gMHgwMDAwMDA5MCwKKyAgICAg
ICAgICAgIFNUTURCID0gMHgwOTIwMDAwMCwKKyAgICAgICAgICAgIExETUlBID0gMHgwOGIwMDAw
MCwKKyAgICAgICAgICAgIEIgPSAweDBhMDAwMDAwLAorICAgICAgICAgICAgQkwgPSAweDBiMDAw
MDAwLAorI2lmIF9fQVJNX0FSQ0hfXyA+PSA1CisgICAgICAgICAgICBDTFogPSAweDAxNmYwZjEw
LAorICAgICAgICAgICAgQktQVCA9IDB4ZTEyMDA3MCwKKyNlbmRpZgorICAgICAgICB9OworCisg
ICAgICAgIGVudW0geworICAgICAgICAgICAgT1AyX0lNTSA9ICgxIDw8IDI1KSwKKyAgICAgICAg
ICAgIE9QMl9JTU1oID0gKDEgPDwgMjIpLAorICAgICAgICAgICAgT1AyX0lOVl9JTU0gPSAoMSA8
PCAyNiksCisgICAgICAgICAgICBTRVRfQ0MgPSAoMSA8PCAyMCksCisgICAgICAgICAgICBPUDJf
T0ZTUkVHID0gKDEgPDwgMjUpLAorICAgICAgICAgICAgRFRfVVAgPSAoMSA8PCAyMyksCisgICAg
ICAgICAgICBEVF9XQiA9ICgxIDw8IDIxKSwKKyAgICAgICAgICAgIC8vIFRoaXMgZmxhZyBpcyBp
bmxjdWRlZCBpbiBMRFIgYW5kIFNUUgorICAgICAgICAgICAgRFRfUFJFID0gKDEgPDwgMjQpLAor
ICAgICAgICAgICAgSERUX1VIID0gKDEgPDwgNSksCisgICAgICAgICAgICBEVF9MT0FEID0gKDEg
PDwgMjApLAorICAgICAgICB9OworCisgICAgICAgIC8vIE1hc2tzIG9mIEFSTSBpbnN0cnVjdGlv
bnMKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBCUkFOQ0hfTUFTSyA9IDB4MDBmZmZmZmYs
CisgICAgICAgICAgICBOT05BUk0gPSAweGYwMDAwMDAwLAorICAgICAgICAgICAgU0RUX01BU0sg
PSAweDBjMDAwMDAwLAorICAgICAgICAgICAgU0RUX09GRlNFVF9NQVNLID0gMHhmZmMsCisgICAg
ICAgIH07CisKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBCT0ZGU0VUX01JTiA9IC0weDAw
ODAwMDAwLAorICAgICAgICAgICAgQk9GRlNFVF9NQVggPSAweDAwN2ZmZmZmLAorICAgICAgICAg
ICAgU0RUID0gMHgwNDAwMDAwMCwKKyAgICAgICAgfTsKKworICAgICAgICB2b2lkIGVtaXRJbnN0
KEFSTUluc3Qgb3AsIGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMikKKyAgICAgICAgeworICAg
ICAgICAgICAgQVNTRVJUICggKChvcDIgJiB+T1AyX0lNTSkgPD0gMHhmZmYpIHx8ICgoKG9wMiAm
IH5PUDJfSU1NaCkgPD0gMHhmZmYpKSApOworICAgICAgICAgICAgbV9idWZmZXIuYWRkKG9wIHwg
Uk4ocm4pIHwgUkQocmQpIHwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFSTSBpbnN0
cnVjdGlvbnMKKworICAgICAgICB2b2lkIGFuZF9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9w
MiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0
YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IEFORCwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisK
KyAgICAgICAgdm9pZCBhbmRzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8
QVJNSW5zdD4oY2MpIHwgQU5EIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGVvcl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9u
IGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFS
TUluc3Q+KGNjKSB8IEVPUiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBlb3JzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkK
KyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2Mp
IHwgRU9SIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHN1Yl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8
IFNVQiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdWJzX3IoaW50
IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgU1VCIHwgU0VU
X0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJzYl9yKGludCBy
ZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IFJTQiwgcmQsIHJu
LCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2JzX3IoaW50IHJkLCBpbnQgcm4s
IEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgUlNCIHwgU0VUX0NDLCByZCwgcm4s
IG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZF9yKGludCByZCwgaW50IHJuLCBB
Uk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVt
aXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IEFERCwgcmQsIHJuLCBvcDIpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3Ay
LCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3Rh
dGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgQUREIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFkY19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRp
Y19jYXN0PEFSTUluc3Q+KGNjKSB8IEFEQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBhZGNzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24g
Y2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJN
SW5zdD4oY2MpIHwgQURDIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNiY19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNj
ID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUlu
c3Q+KGNjKSB8IFNCQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
YmNzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwg
U0JDIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJz
Y19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IFJT
QywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2NzX3IoaW50IHJk
LCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgUlNDIHwgU0VUX0ND
LCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRzdF9yKGludCBybiwg
QVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBl
bWl0SW5zdChzdGF0aWNfY2FzdDxBUk1JbnN0PihjYykgfCBUU1QgfCBTRVRfQ0MsIDAsIHJuLCBv
cDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0ZXFfcihpbnQgcm4sIEFSTVdvcmQgb3Ay
LCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3Rh
dGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgVEVRIHwgU0VUX0NDLCAwLCBybiwgb3AyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgY21wX3IoaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9u
IGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFS
TUluc3Q+KGNjKSB8IENNUCB8IFNFVF9DQywgMCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIG9ycl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNj
ID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUlu
c3Q+KGNjKSB8IE9SUiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBv
cnJzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwg
T1JSIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG1v
dl9yKGludCByZCwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1JbnN0PihjYykgfCBNT1YsIHJkLCBB
Uk06OnIwLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtb3ZzX3IoaW50IHJkLCBB
Uk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVt
aXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IE1PViB8IFNFVF9DQywgcmQsIEFSTTo6
cjAsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGJpY19yKGludCByZCwgaW50IHJu
LCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IEJJQywgcmQsIHJuLCBvcDIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBiaWNzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQg
b3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qo
c3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgQklDIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIG12bl9yKGludCByZCwgQVJNV29yZCBvcDIsIENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2Fz
dDxBUk1JbnN0PihjYykgfCBNVk4sIHJkLCBBUk06OnIwLCBvcDIpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBtdm5zX3IoaW50IHJkLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNj
KSB8IE1WTiB8IFNFVF9DQywgcmQsIEFSTTo6cjAsIG9wMik7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG11bF9yKGludCByZCwgaW50IHJuLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQor
ICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5hZGQoc3RhdGljX2Nhc3Q8QVJNSW5zdD4o
Y2MpIHwgTVVMIHwgUk4ocmQpIHwgUlMocm4pIHwgUk0ocm0pKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgbXVsc19yKGludCByZCwgaW50IHJuLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFM
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5hZGQoc3RhdGljX2Nhc3Q8QVJNSW5z
dD4oY2MpIHwgTVVMIHwgU0VUX0NDIHwgUk4ocmQpIHwgUlMocm4pIHwgUk0ocm0pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgbXVsbF9yKGludCByZGhpLCBpbnQgcmRsbywgaW50IHJuLCBp
bnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZl
ci5hZGQoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgTVVMTCB8IFJOKHJkaGkpIHwgUkQocmRs
bykgfCBSUyhybikgfCBSTShybSkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJfaW1t
KGludCByZCwgQVJNV29yZCBpbW0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2J1ZmZlci5hZGRDb25zdChzdGF0aWNfY2FzdDxBUk1JbnN0PihjYykgfCBEVFIg
fCBEVF9MT0FEIHwgRFRfVVAgfCBSTihBUk06OnBjKSB8IFJEKHJkKSwgaW1tKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgbGRyX3VuX2ltbShpbnQgcmQsIEFSTVdvcmQgaW1tLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIuYWRkVW5pcXVlQ29u
c3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgRFRSIHwgRFRfTE9BRCB8IERUX1VQIHwgUk4o
QVJNOjpwYykgfCBSRChyZCksIGltbSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR0cl91
KGJvb2wgaXNMb2FkLCBpbnQgcmQsIGludCByYiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9
IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1JbnN0
PihjYykgfCBEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApIHwgRFRfVVAsIHJkLCByYiwgb3Ay
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHRyX3VyKGJvb2wgaXNMb2FkLCBpbnQgcmQs
IGludCByYiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgRFRSIHwgKGlzTG9hZCA/IERU
X0xPQUQgOiAwKSB8IERUX1VQIHwgT1AyX09GU1JFRywgcmQsIHJiLCBybSk7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGR0cl9kKGJvb2wgaXNMb2FkLCBpbnQgcmQsIGludCByYiwgQVJNV29y
ZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5z
dChzdGF0aWNfY2FzdDxBUk1JbnN0PihjYykgfCBEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDAp
LCByZCwgcmIsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR0cl9kcihib29sIGlz
TG9hZCwgaW50IHJkLCBpbnQgcmIsIGludCBybSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTUluc3Q+KGNjKSB8IERUUiB8
IChpc0xvYWQgPyBEVF9MT0FEIDogMCkgfCBPUDJfT0ZTUkVHLCByZCwgcmIsIHJtKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgbGRyaF9yKGludCByZCwgaW50IHJuLCBpbnQgcm0sIENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2Fz
dDxBUk1JbnN0PihjYykgfCBMRFJIIHwgSERUX1VIIHwgRFRfVVAgfCBEVF9QUkUsIHJkLCBybiwg
cm0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJoX2QoaW50IHJkLCBpbnQgcmIsIEFS
TVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1p
dEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgTERSSCB8IEhEVF9VSCB8IERUX1BSRSwg
cmQsIHJiLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJoX3UoaW50IHJkLCBp
bnQgcmIsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAg
ICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgTERSSCB8IEhEVF9VSCB8
IERUX1VQIHwgRFRfUFJFLCByZCwgcmIsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHN0cmhfcihpbnQgcm4sIGludCBybSwgaW50IHJkLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgU1RS
SCB8IEhEVF9VSCB8IERUX1VQIHwgRFRfUFJFLCByZCwgcm4sIHJtKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcHVzaF9yKGludCByZWcsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQoQVJNV29yZChyZWcpIDw9IDB4Zik7CisgICAgICAgICAgICBt
X2J1ZmZlci5hZGQoY2MgfCBEVFIgfCBEVF9XQiB8IFJOKEFSTTo6c3ApIHwgUkQocmVnKSB8IDB4
NCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBvcF9yKGludCByZWcsIENvbmRpdGlvbiBj
YyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoQVJNV29yZChyZWcpIDw9IDB4
Zik7CisgICAgICAgICAgICBtX2J1ZmZlci5hZGQoY2MgfCAoRFRSIF4gRFRfUFJFKSB8IERUX0xP
QUQgfCBEVF9VUCB8IFJOKEFSTTo6c3ApIHwgUkQocmVnKSB8IDB4NCk7CisgICAgICAgIH0KKwor
ICAgICAgICBpbmxpbmUgdm9pZCBwb2tlX3IoaW50IHJlZywgQ29uZGl0aW9uIGNjID0gQUwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGR0cl9kKGZhbHNlLCBBUk06OnNwLCAwLCByZWcsIGNjKTsK
KyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB2b2lkIHBlZWtfcihpbnQgcmVnLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZHRyX3UodHJ1ZSwgcmVnLCBBUk06
OnNwLCAwLCBjYyk7CisgICAgICAgIH0KKworI2lmIF9fQVJNX0FSQ0hfXyA+PSA1CisgICAgICAg
IHZvaWQgY2x6X3IoaW50IHJkLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2J1ZmZlci5hZGQoc3RhdGljX2Nhc3Q8QVJNSW5zdD4oY2MpIHwgQ0xa
IHwgUkQocmQpIHwgUk0ocm0pKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgdm9pZCBi
a3B0KEFSTVdvcmQgdmFsdWUpCisgICAgICAgIHsKKyNpZiBfX0FSTV9BUkNIX18gPj0gNQorICAg
ICAgICAgICAgbV9idWZmZXIuYWRkKEJLUFQgfCAoKHZhbHVlICYgMHhmZjApIDw8IDQpIHwgKHZh
bHVlICYgMHhmKSk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1Xb3Jk
IGxzbChpbnQgcmVnLCBBUk1Xb3JkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDB4MWYpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZyB8ICh2YWx1ZSA8PCA3KSB8IDB4MDA7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgQVJNV29yZCBsc3IoaW50IHJlZywgQVJNV29yZCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZSA8PSAweDFmKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAodmFsdWUg
PDwgNykgfCAweDIwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgYXNyKGlu
dCByZWcsIEFSTVdvcmQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcg
PD0gQVJNOjpwYyk7CisgICAgICAgICAgICBBU1NFUlQodmFsdWUgPD0gMHgxZik7CisgICAgICAg
ICAgICByZXR1cm4gcmVnIHwgKHZhbHVlIDw8IDcpIHwgMHg0MDsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyBBUk1Xb3JkIGxzbF9yKGludCByZWcsIGludCBzaGlmdFJlZykKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIEFTU0VS
VChzaGlmdFJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAoc2hpZnRS
ZWcgPDwgOCkgfCAweDEwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgbHNy
X3IoaW50IHJlZywgaW50IHNoaWZ0UmVnKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
cmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHNoaWZ0UmVnIDw9IEFSTTo6cGMp
OworICAgICAgICAgICAgcmV0dXJuIHJlZyB8IChzaGlmdFJlZyA8PCA4KSB8IDB4MzA7CisgICAg
ICAgIH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBhc3JfcihpbnQgcmVnLCBpbnQgc2hpZnRS
ZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAg
ICAgICAgICBBU1NFUlQoc2hpZnRSZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1cm4g
cmVnIHwgKHNoaWZ0UmVnIDw8IDgpIHwgMHg1MDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyBBUk1Xb3JkKiBnZXRMZHJJbW1BZGRyZXNzKEFSTUluc3QqIGluc3QpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIC8vIE11c3QgYmUgYW4gbGRyIC4uLiwgW3BjICsvLSBpbW1dCisgICAgICAgICAg
IEFTU0VSVCgoKmluc3QgJiAweDBmN2YwMDAzKSA9PSAweDA1MWYwMDAwKTsKKworICAgICAgICAg
ICBBUk1Xb3JkIGFkZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGluc3QpOworICAgICAg
ICAgICBhZGRyICs9IDIgKiBzaXplb2YoaW50cHRyX3QpOworICAgICAgICAgICBpZiAoKmluc3Qg
JiBBUk1Bc3NlbWJsZXI6OkRUX1VQKQorICAgICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QVJNV29yZCo+KGFkZHIgKyAoKmluc3QgJiBBUk1Bc3NlbWJsZXI6OlNEVF9PRkZTRVRf
TUFTSykpOworICAgICAgICAgICBlbHNlCisgICAgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oYWRkciAtICgqaW5zdCAmIEFSTUFzc2VtYmxlcjo6U0RUX09GRlNF
VF9NQVNLKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtKdW1wKEptcFNyYyBmcm9t
LCBKbXBEc3QgdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0by5tX2ptcERzdC0+
bV9vZmZzZXQgIT0gLTEpOworICAgICAgICAgICAgQVNTRVJUKGZyb20ubV9qbXBTcmMtPm1fb2Zm
c2V0ICE9IC0xKTsKKyAgICAgICAgICAgIGZyb20ubV9qbXBTcmMtPm1fdGFyZ2V0ID0gdG8ubV9q
bXBEc3Q7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxpbmtDYWxsKEptcFNyYyBmcm9tLCBK
bXBEc3QgdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCh0by5tX2ptcERzdC0+bV9v
ZmZzZXQgIT0gLTEpOworICAgICAgICAgICAgQVNTRVJUKGZyb20ubV9qbXBTcmMtPm1fb2Zmc2V0
ICE9IC0xKTsKKyAgICAgICAgICAgIGZyb20ubV9qbXBTcmMtPm1fdGFyZ2V0ID0gdG8ubV9qbXBE
c3Q7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQqIGZy
b20sIHZvaWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAtIHNpemVvZihBUk1JbnN0KSwgdG8p
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lkKiBmcm9t
LCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcmVsaW5rSnVtcChmcm9tLCB0byk7
CisgICAgICAgIH0KKworICAgICAgICBKbXBEc3QgbGFiZWwoKQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gbV9idWZmZXIubGFiZWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIEptcFNy
YyBqbXAoQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzID0g
c2l6ZSgpOworICAgICAgICAgICAgbGRyX3VuX2ltbShBUk06OnBjLCAwLCBjYyk7CisgICAgICAg
ICAgICByZXR1cm4gSm1wU3JjKG1fYnVmZmVyLmNyZWF0ZUptcFNyYyhzLCB0cnVlKSk7CisgICAg
ICAgIH0KKworICAgICAgICBpbnQgc2l6ZSgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVy
biBtX2J1ZmZlci5zaXplKCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBleGVjdXRhYmxl
Q29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgICAgICB7CisgICAgICAgICAgICBy
ZXR1cm4gbV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNy
YyBqdW1wKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoanVtcC5tX2ptcFNyYy0+bV9v
ZmZzZXQgIT0gLTEpOworCisgICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lk
Kj4ocmVpbnRlcnByZXRfY2FzdDxBUk1JbnN0Kj4oY29kZSkgKyBqdW1wLm1fam1wU3JjLT5tX29m
ZnNldCArIDEpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRl
ZEFkZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQobGFiZWwubV9qbXBEc3QtPm1fb2Zmc2V0ICE9IC0xKTsKKworICAgICAgICAgICAg
cmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8QVJNSW5zdCo+
KGNvZGUpICsgbGFiZWwubV9qbXBEc3QtPm1fb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAgICAg
IHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wRHN0
IGRzdCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNyYy5tX2ptcERzdCAmJiBkc3Qu
bV9qbXBEc3QpOworICAgICAgICAgICAgcmV0dXJuIChkc3QubV9qbXBEc3QtPm1fb2Zmc2V0IC0g
c3JjLm1fam1wRHN0LT5tX29mZnNldCkgPDwgMjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IHNyYywgSm1wU3JjIGRzdCkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNyYy5tX2ptcERzdCAmJiBkc3QubV9qbXBT
cmMpOworICAgICAgICAgICAgcmV0dXJuICgoZHN0Lm1fam1wU3JjLT5tX29mZnNldCArIDEpIC0g
c3JjLm1fam1wRHN0LT5tX29mZnNldCkgPDwgMjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wU3JjIHNyYywgSm1wRHN0IGRzdCkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNyYy5tX2ptcFNyYyAmJiBkc3QubV9qbXBE
c3QpOworICAgICAgICAgICAgcmV0dXJuIChkc3QubV9qbXBEc3QtPm1fb2Zmc2V0IC0gKHNyYy5t
X2ptcFNyYy0+bV9vZmZzZXQgKyAxKSkgPDwgMjsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRp
YyB1bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgICAgICB7Cisg
ICAgICAgICAgICBBU1NFUlQoY2FsbC5tX2ptcFNyYyAmJiBjYWxsLm1fam1wU3JjLT5tX29mZnNl
dCA+PSAwKTsKKyAgICAgICAgICAgIHJldHVybiAoY2FsbC5tX2ptcFNyYy0+bV9vZmZzZXQgKyAx
KSA8PCAyOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hBZGRyZXNzKHZv
aWQqIGNvZGUsIEptcERzdCBwb3NpdGlvbiwgdm9pZCogdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChwb3NpdGlvbi5tX2ptcERzdCYmIHBvc2l0aW9uLm1fam1wRHN0LT5tX29m
ZnNldCA+PSAwKTsKKworICAgICAgICAgICAgcGF0Y2hQb2ludGVySW50ZXJuYWwocmVpbnRlcnBy
ZXRfY2FzdDxpbnRwdHJfdD4ocmVpbnRlcnByZXRfY2FzdDxBUk1JbnN0Kj4oY29kZSkgKyBwb3Np
dGlvbi5tX2ptcERzdC0+bV9vZmZzZXQpLCB2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBK
bXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUg
KCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KSkKKyAgICAgICAgICAgICAgICBtb3ZfcihB
Uk06OnIwLCBBUk06OnIwKTsKKworICAgICAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJv
bSwgdm9pZCogdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbmtCcmFuY2goY29kZSwgZnJv
bSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCog
Y29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBsaW5r
QnJhbmNoKGNvZGUsIGZyb20sIHRvKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lk
IHBhdGNoSW1tZWRpYXRlKGludHB0cl90IHdoZXJlLCBpbnQzMl90IHZhbHVlKQorICAgICAgICB7
CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5hbCh3aGVyZSwgcmVpbnRlcnByZXRfY2Fz
dDx2b2lkKj4odmFsdWUpKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHBhdGNo
UG9pbnRlcihpbnRwdHJfdCB3aGVyZSwgaW50cHRyX3QgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHdoZXJlLCByZWludGVycHJldF9jYXN0PHZvaWQq
Pih2YWx1ZSkpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVy
KHZvaWQqIGNvZGUsIEptcERzdCB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCh3aGVyZS5tX2ptcERzdCAmJiB3aGVyZS5tX2ptcERzdC0+bV9vZmZzZXQg
Pj0gMCk7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5hbChyZWludGVycHJldF9jYXN0
PGludHB0cl90Pihjb2RlKSArIHdoZXJlLm1fam1wRHN0LT5tX29mZnNldCAqIHNpemVvZihBUk1J
bnN0KSwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVwYXRjaElu
dDMyKHZvaWQqIHdoZXJlLCBpbnQzMl90IHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBw
YXRjaFBvaW50ZXJJbnRlcm5hbChyZWludGVycHJldF9jYXN0PGludHB0cl90Pih3aGVyZSksIHJl
aW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHZhbHVlKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgdm9pZCByZXBhdGNoUG9pbnRlcih2b2lkKiB3aGVyZSwgdm9pZCogdmFsdWUpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8aW50
cHRyX3Q+KHdoZXJlKSwgdmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQg
cGF0Y2hKdW1wKGludHB0cl90IHdoZXJlLCB2b2lkKiBkZXN0aW5hdGlvbikKKyAgICAgICAgewor
ICAgICAgICAgICAgcGF0Y2hQb2ludGVySW50ZXJuYWwod2hlcmUgLSBzaXplb2YoQVJNV29yZCks
IGRlc3RpbmF0aW9uKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hM
b2FkUHRyVG9MRUEodm9pZCogd2hlcmUpCisgICAgICAgIHsKKyAgICAgICAgICAgIC8vIE9uIGFy
bSwgdGhpcyBpcyBhIHBhdGNoIGZyb20gTERSIHRvIEFERC4gSXQgaXMgcmVzdHJpY3RlZCBjb252
ZXJzaW9uLAorICAgICAgICAgICAgLy8gZnJvbSBzcGVjaWFsIGNhc2UgdG8gc3BlY2lhbCBjYXNl
LCBhbHRvdWdoIGVub3VnaCBmb3IgaXRzIHB1cnBvc2UKKyAgICAgICAgICAgIEFSTUluc3QqIGlu
c3QgPSByZWludGVycHJldF9jYXN0PEFSTUluc3QqPih3aGVyZSk7CisgICAgICAgICAgICBBU1NF
UlQoKCppbnN0ICYgMHgwZmYwMGYwMCkgPT0gMHgwNTkwMDAwMCk7CisgICAgICAgICAgICAqaW5z
dCA9ICgqaW5zdCAmIDB4ZjAwZmYwZmYpIHwgMHgwMjgwMDAwMDsKKyAgICAgICAgICAgIEFzc2Vt
YmxlckJ1ZmZlckFSTTo6Y2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5zdCks
IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGluc3QgKyAxKSk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgQVJNV29yZCBnZXRPcDIoQVJNV29yZCBpbW0pOworICAgICAgICBzdGF0aWMgQVJN
V29yZCBnZXRPcDJCeXRlKEFSTVdvcmQgaW1tKTsKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0Jy
YW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8sIGJvb2wgY2xlYXJDYWNoZSA9
IHRydWUpOworICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXJJbnRlcm5hbChpbnRwdHJf
dCB3aGVyZSwgdm9pZCogdmFsdWUpOworCisgICAgICAgIEFSTVdvcmQgZ2V0SW1tKEFSTVdvcmQg
aW1tLCBpbnQgdG1wUmVnKTsKKyAgICAgICAgQVJNV29yZCBnZXRJbnZJbW0oQVJNV29yZCBpbW0s
IGludCB0bXBSZWcpOworICAgICAgICB2b2lkIG1vdmVJbW0oQVJNV29yZCBpbW0sIGludCBkZXN0
KTsKKworICAgICAgICBpbnQgZ2VuSW50KGludCByZWcsIEFSTVdvcmQgaW1tLCBib29sIHBvc2l0
aXZlKTsKKyAgICAgICAgLy8gZGF0YVRyYW5zZmVyMzIgbWlnaHQgZGVzdHJveSBBUk06OlMwIHJl
Z2lzdGVyCisgICAgICAgIHZvaWQgZGF0YVRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVy
SUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zmc2V0KTsKKyAgICAgICAgLy8g
YmFzZUluZGV4VHJhbnNmZXIzMiBtaWdodCBkZXN0cm95IEFSTTo6UzAgcmVnaXN0ZXIKKyAgICAg
ICAgdm9pZCBiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0Rz
dCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qg
b2Zmc2V0KTsKKyAgICAgICAgLy8gZGF0YVRyYW5zZmVyMzIgbWlnaHQgZGVzdHJveSBBUk06OlMw
IGFuZCBBUk06OlMxIHJlZ2lzdGVyCisgICAgICAgIHZvaWQgY2FsbDMyKFJlZ2lzdGVySUQgYmFz
ZSwgaW50MzJfdCBvZmZzZXQpOworICAgICAgICAvLyBkYXRhVHJhbnNmZXIzMiBtaWdodCBkZXN0
cm95IEFSTTo6UzEgcmVnaXN0ZXIKKyAgICAgICAgdm9pZCBwcmVwYXJlQ2FsbCgpOworICAgICAg
ICB2b2lkIHByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdChpbnQgbm9JbnN0cnVjdGlvbnMs
IGludCBub0NvbnN0YW50cyk7CisKKyAgICBwcml2YXRlOgorICAgICAgICBBUk1Xb3JkIFJNKGlu
dCByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7Cisg
ICAgICAgICAgICByZXR1cm4gcmVnOworICAgICAgICB9OworCisgICAgICAgIEFSTVdvcmQgUlMo
aW50IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsK
KyAgICAgICAgICAgIHJldHVybiByZWcgPDwgODsKKyAgICAgICAgfTsKKworICAgICAgICBBUk1X
b3JkIFJEKGludCByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJN
OjpwYyk7CisgICAgICAgICAgICByZXR1cm4gcmVnIDw8IDEyOworICAgICAgICB9OworCisgICAg
ICAgIEFSTVdvcmQgUk4oaW50IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJl
ZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgPDwgMTY7CisgICAgICAgIH07
CisKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyIG1fYnVmZmVyOworICAgIH07CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oQVJN
KQorCisjZW5kaWYgLy8gQVJNQXNzZW1ibGVyX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IDc0NjAwMjkuLmFlNTAyMmEgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIu
aApAQCAtMzI4LDYgKzMyOCwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gQ2FsbChq
dW1wLm1fam1wLCBMaW5rYWJsZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxh
dGVQYXRjaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgp
OworICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAg
ICAgIEZsYWdzIG1fZmxhZ3M7CkBAIC0zNjQsNiArMzY5LDExIEBAIHB1YmxpYzoKICAgICAgICAg
ICAgIG1hc20tPm1fYXNzZW1ibGVyLmxpbmtKdW1wKG1fam1wLCBsYWJlbC5tX2xhYmVsKTsKICAg
ICAgICAgfQogCisgICAgICAgIHZvaWQgZW5hYmxlTGF0ZVBhdGNoKCkKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9qbXAuZW5hYmxlTGF0ZVBhdGNoKCk7CisgICAgICAgIH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIEptcFNyYyBtX2ptcDsKICAgICB9OwpAQCAtODI0LDYgKzgzNCw5IEBAIHB1
YmxpYzoKIAogICAgICAgICBDb2RlTG9jYXRpb25DYWxsIGxvY2F0aW9uT2YoQ2FsbCBjYWxsKQog
ICAgICAgICB7CisjaWYgUExBVEZPUk0oQVJNKQorICAgICAgICAgICAgQVNTRVJUKCFjYWxsLm1f
am1wLmlzUGF0Y2hPbmNlKCkpOworI2VuZGlmCiAgICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0Zs
YWdTZXQoQ2FsbDo6TGlua2FibGUpKTsKICAgICAgICAgICAgIEFTU0VSVCghY2FsbC5pc0ZsYWdT
ZXQoQ2FsbDo6TmVhcikpOwogICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkNhbGwoQXNz
ZW1ibGVyVHlwZTo6Z2V0UmVsb2NhdGVkQWRkcmVzcyhjb2RlKCksIGNhbGwubV9qbXApKTsKQEAg
LTgzMSwxMSArODQ0LDIyIEBAIHB1YmxpYzoKIAogICAgICAgICBDb2RlTG9jYXRpb25OZWFyQ2Fs
bCBsb2NhdGlvbk9mTmVhckNhbGwoQ2FsbCBjYWxsKQogICAgICAgICB7CisjaWYgUExBVEZPUk0o
QVJNKQorICAgICAgICAgICAgQVNTRVJUKCFjYWxsLm1fam1wLmlzUGF0Y2hPbmNlKCkpOworI2Vu
ZGlmCiAgICAgICAgICAgICBBU1NFUlQoY2FsbC5pc0ZsYWdTZXQoQ2FsbDo6TGlua2FibGUpKTsK
ICAgICAgICAgICAgIEFTU0VSVChjYWxsLmlzRmxhZ1NldChDYWxsOjpOZWFyKSk7CiAgICAgICAg
ICAgICByZXR1cm4gQ29kZUxvY2F0aW9uTmVhckNhbGwoQXNzZW1ibGVyVHlwZTo6Z2V0UmVsb2Nh
dGVkQWRkcmVzcyhjb2RlKCksIGNhbGwubV9qbXApKTsKICAgICAgICAgfQogCisgICAgICAgIENv
ZGVMb2NhdGlvbkp1bXAgbG9jYXRpb25PZkp1bXAoSnVtcCBqdW1wKQorICAgICAgICB7CisjaWYg
UExBVEZPUk0oQVJNKQorICAgICAgICAgICAgQVNTRVJUKCFqdW1wLm1fam1wLmlzUGF0Y2hPbmNl
KCkpOworI2VuZGlmCisgICAgICAgICAgICByZXR1cm4gQ29kZUxvY2F0aW9uSnVtcChBc3NlbWJs
ZXJUeXBlOjpnZXRSZWxvY2F0ZWRBZGRyZXNzKGNvZGUoKSwganVtcC5tX2ptcCkpOworICAgICAg
ICB9CisKICAgICAgICAgQ29kZUxvY2F0aW9uTGFiZWwgbG9jYXRpb25PZihMYWJlbCBsYWJlbCkK
ICAgICAgICAgewogICAgICAgICAgICAgcmV0dXJuIENvZGVMb2NhdGlvbkxhYmVsKEFzc2VtYmxl
clR5cGU6OmdldFJlbG9jYXRlZEFkZHJlc3MoY29kZSgpLCBsYWJlbC5tX2xhYmVsKSk7CkBAIC05
MjAsNiArOTQ0LDE2IEBAIHB1YmxpYzoKICAgICAgICAgcmV0dXJuIExhYmVsKHRoaXMpOwogICAg
IH0KIAorICAgIHZvaWQgcHJlcGFyZVVuYnJva2VuSW5zdHJ1Y3Rpb25MaXN0KGludCBub0luc3Ry
dWN0aW9ucywgaW50IG5vQ29uc3RhbnRzKQorICAgIHsKKyNpZiBQTEFURk9STShBUk0pCisgICAg
ICAgIG1fYXNzZW1ibGVyLnByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdChub0luc3RydWN0
aW9ucywgbm9Db25zdGFudHMpOworI2Vsc2UKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vSW5zdHJ1
Y3Rpb25zKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKG5vQ29uc3RhbnRzKTsKKyNlbmRpZgorICAg
IH0KKwogICAgIHB0cmRpZmZfdCBkaWZmZXJlbmNlQmV0d2VlbihMYWJlbCBmcm9tLCBKdW1wIHRv
KQogICAgIHsKICAgICAgICAgcmV0dXJuIEFzc2VtYmxlclR5cGU6OmdldERpZmZlcmVuY2VCZXR3
ZWVuTGFiZWxzKGZyb20ubV9sYWJlbCwgdG8ubV9qbXApOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fzc2VtYmxlckJ1ZmZlci5oCmluZGV4IDdhNWE4ZDMuLmUyMTExODQgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKQEAgLTMwLDEzMiArMzAsMTcgQEAK
IAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKLSNpbmNsdWRlICJzdGRpbnQuaCIKLSNpbmNsdWRl
IDxzdHJpbmcuaD4KLSNpbmNsdWRlIDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgotI2luY2x1
ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+Ci0jaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpZiBQ
TEFURk9STShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkgfHwgUExBVEZPUk0oQVJNX1Y3KQorI2lu
Y2x1ZGUgIkFzc2VtYmxlckJ1ZmZlclg4Ni5oIgorbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgQXNz
ZW1ibGVyQnVmZmVyWDg2IEFzc2VtYmxlckJ1ZmZlcjsgfTsKIAotbmFtZXNwYWNlIEpTQyB7Cisj
ZWxpZiBQTEFURk9STShBUk0pCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyQVJNLmgiCituYW1l
c3BhY2UgSlNDIHsgdHlwZWRlZiBBc3NlbWJsZXJCdWZmZXJBUk0gQXNzZW1ibGVyQnVmZmVyOyB9
OwogCi0gICAgY2xhc3MgQXNzZW1ibGVyQnVmZmVyIHsKLSAgICAgICAgc3RhdGljIGNvbnN0IGlu
dCBpbmxpbmVDYXBhY2l0eSA9IDI1NjsKLSAgICBwdWJsaWM6Ci0gICAgICAgIEFzc2VtYmxlckJ1
ZmZlcigpCi0gICAgICAgICAgICA6IG1fYnVmZmVyKG1faW5saW5lQnVmZmVyKQotICAgICAgICAg
ICAgLCBtX2NhcGFjaXR5KGlubGluZUNhcGFjaXR5KQotICAgICAgICAgICAgLCBtX3NpemUoMCkK
LSAgICAgICAgewotICAgICAgICB9Ci0KLSAgICAgICAgfkFzc2VtYmxlckJ1ZmZlcigpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmIChtX2J1ZmZlciAhPSBtX2lubGluZUJ1ZmZlcikKLSAgICAg
ICAgICAgICAgICBmYXN0RnJlZShtX2J1ZmZlcik7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IGVuc3VyZVNwYWNlKGludCBzcGFjZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fc2l6
ZSA+IG1fY2FwYWNpdHkgLSBzcGFjZSkKLSAgICAgICAgICAgICAgICBncm93KCk7Ci0gICAgICAg
IH0KLQotICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KSBjb25zdAotICAgICAg
ICB7Ci0gICAgICAgICAgICByZXR1cm4gIShtX3NpemUgJiAoYWxpZ25tZW50IC0gMSkpOwotICAg
ICAgICB9Ci0KLSAgICAgICAgdm9pZCBwdXRCeXRlVW5jaGVja2VkKGludCB2YWx1ZSkKLSAgICAg
ICAgewotICAgICAgICAgICAgQVNTRVJUKCEobV9zaXplID4gbV9jYXBhY2l0eSAtIDQpKTsKLSAg
ICAgICAgICAgIG1fYnVmZmVyW21fc2l6ZV0gPSB2YWx1ZTsKLSAgICAgICAgICAgIG1fc2l6ZSsr
OwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBwdXRCeXRlKGludCB2YWx1ZSkKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSA0KQotICAgICAgICAgICAg
ICAgIGdyb3coKTsKLSAgICAgICAgICAgIHB1dEJ5dGVVbmNoZWNrZWQodmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCBwdXRTaG9ydFVuY2hlY2tlZChpbnQgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIEFTU0VSVCghKG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSA0KSk7Ci0gICAg
ICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxzaG9ydCo+KCZtX2J1ZmZlclttX3NpemVdKSA9IHZh
bHVlOwotICAgICAgICAgICAgbV9zaXplICs9IDI7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lk
IHB1dFNob3J0KGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgaWYgKG1fc2l6ZSA+
IG1fY2FwYWNpdHkgLSA0KQotICAgICAgICAgICAgICAgIGdyb3coKTsKLSAgICAgICAgICAgIHB1
dFNob3J0VW5jaGVja2VkKHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHV0SW50
VW5jaGVja2VkKGludCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgKnJlaW50ZXJwcmV0
X2Nhc3Q8aW50Kj4oJm1fYnVmZmVyW21fc2l6ZV0pID0gdmFsdWU7Ci0gICAgICAgICAgICBtX3Np
emUgKz0gNDsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcHV0SW50NjRVbmNoZWNrZWQoaW50
NjRfdCB2YWx1ZSkKLSAgICAgICAgewotICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50
NjRfdCo+KCZtX2J1ZmZlclttX3NpemVdKSA9IHZhbHVlOwotICAgICAgICAgICAgbV9zaXplICs9
IDg7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIHB1dEludChpbnQgdmFsdWUpCi0gICAgICAg
IHsKLSAgICAgICAgICAgIGlmIChtX3NpemUgPiBtX2NhcGFjaXR5IC0gNCkKLSAgICAgICAgICAg
ICAgICBncm93KCk7Ci0gICAgICAgICAgICBwdXRJbnRVbmNoZWNrZWQodmFsdWUpOwotICAgICAg
ICB9Ci0KLSAgICAgICAgdm9pZCogZGF0YSgpIGNvbnN0Ci0gICAgICAgIHsKLSAgICAgICAgICAg
IHJldHVybiBtX2J1ZmZlcjsKLSAgICAgICAgfQotCi0gICAgICAgIGludCBzaXplKCkgY29uc3QK
LSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKLSAgICAgICAgfQotCi0gICAg
ICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghbV9zaXplKQotICAgICAgICAgICAgICAgIHJldHVybiAw
OwotCi0gICAgICAgICAgICB2b2lkKiByZXN1bHQgPSBhbGxvY2F0b3ItPmFsbG9jKG1fc2l6ZSk7
Ci0KLSAgICAgICAgICAgIGlmICghcmVzdWx0KQotICAgICAgICAgICAgICAgIHJldHVybiAwOwot
Ci0gICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9yOjptYWtlV3JpdGFibGUocmVzdWx0LCBt
X3NpemUpOwotCi0gICAgICAgICAgICByZXR1cm4gbWVtY3B5KHJlc3VsdCwgbV9idWZmZXIsIG1f
c2l6ZSk7Ci0gICAgICAgIH0KLQotICAgIHByaXZhdGU6Ci0gICAgICAgIHZvaWQgZ3JvdygpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIG1fY2FwYWNpdHkgKz0gbV9jYXBhY2l0eSAvIDI7Ci0KLSAg
ICAgICAgICAgIGlmIChtX2J1ZmZlciA9PSBtX2lubGluZUJ1ZmZlcikgewotICAgICAgICAgICAg
ICAgIGNoYXIqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2Fw
YWNpdHkpKTsKLSAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPiht
ZW1jcHkobmV3QnVmZmVyLCBtX2J1ZmZlciwgbV9zaXplKSk7Ci0gICAgICAgICAgICB9IGVsc2UK
LSAgICAgICAgICAgICAgICBtX2J1ZmZlciA9IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0UmVhbGxv
YyhtX2J1ZmZlciwgbV9jYXBhY2l0eSkpOwotICAgICAgICB9Ci0KLSAgICAgICAgY2hhciBtX2lu
bGluZUJ1ZmZlcltpbmxpbmVDYXBhY2l0eV07Ci0gICAgICAgIGNoYXIqIG1fYnVmZmVyOwotICAg
ICAgICBpbnQgbV9jYXBhY2l0eTsKLSAgICAgICAgaW50IG1fc2l6ZTsKLSAgICB9OwotCi19IC8v
IG5hbWVzcGFjZSBKU0MKKyNlbHNlCisjZXJyb3IgIlRoZSBBc3NlbWJsZXJCdWZmZXIgaXMgbm90
IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKKyNlbmRpZgogCiAjZW5kaWYgLy8gRU5BQkxF
KEFTU0VNQkxFUikKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2Vt
YmxlckJ1ZmZlckFSTS5jcHAgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVm
ZmVyQVJNLmNwcApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi44MjEyMmE0Ci0t
LSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZl
ckFSTS5jcHAKQEAgLTAsMCArMSw2MTMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBw
bGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBM
SUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElN
UExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFS
VElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQ
UExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElO
RElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5U
SUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1F
TlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9S
CisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFO
RCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNU
UklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhF
UldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZU
V0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4K
KyAqLworCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVS
KSAmJiBQTEFURk9STShBUk0pCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXJBUk0uaCIKKyNp
bmNsdWRlICJBUk1Bc3NlbWJsZXIuaCIKKworbmFtZXNwYWNlIEpTQyB7CisKK0FMV0FZU19JTkxJ
TkUgaW50IG1heERpZmZlcmVuY2UoaW50IG1heERpZmYpCit7CisgICAgcmV0dXJuIChtYXhEaWZm
ID4+IDIpOworfQorCitBTFdBWVNfSU5MSU5FIGJvb2wgaXNCcmFuY2hUYXJnZXQoaW50MzJfdCBv
ZmZzZXQpCit7CisgICAgcmV0dXJuIChvZmZzZXQgPD0gQVJNQXNzZW1ibGVyOjpCT0ZGU0VUX01B
WCAmJiBvZmZzZXQgPj0gQVJNQXNzZW1ibGVyOjpCT0ZGU0VUX01JTik7Cit9CisKK0Fzc2VtYmxl
ckJ1ZmZlckFSTTo6QXNzZW1ibGVyQnVmZmVyQVJNKCkKKyAgICA6IG1fc2l6ZSgwKQorICAgICwg
bV9sYXN0TGFiZWwoMCkKKyAgICAsIG1fbGFzdEJyYW5jaCgwKQorICAgICwgbV9jcG9vbERpZmYo
a0ludmFsaWREaWZmKQorICAgICwgbV9jcG9vbFNpemUoMCkKKyAgICAsIG1fcGVuZGluZ1R5cGUo
Tm90aGluZykKKyAgICAsIG1fcGVuZGluZ0luc3QoMCkKKyAgICAsIG1fcGVuZGluZ0ltbWVkaWF0
ZSgwKQorICAgICwgbV9jb2RlKDApCit7CisgICAgbV9maXJzdFBhZ2UgPSBuZXcgUGFnZTsKKyAg
ICBtX2xhc3RQYWdlID0gbV9maXJzdFBhZ2U7CisgICAgbV9maXJzdFBhZ2UtPm5leHQgPSBOVUxM
OworICAgIG1fZmlyc3RQYWdlLT5zaXplID0gMDsKK30KKworQXNzZW1ibGVyQnVmZmVyQVJNOjp+
QXNzZW1ibGVyQnVmZmVyQVJNKCkKK3sKKyAgICBQYWdlKiBjdXJyID0gbV9maXJzdFBhZ2U7Cisg
ICAgUGFnZSogbmV4dDsKKworICAgIHdoaWxlIChjdXJyKSB7CisgICAgICAgIG5leHQgPSBjdXJy
LT5uZXh0OworICAgICAgICBkZWxldGUgY3VycjsKKyAgICAgICAgY3VyciA9IG5leHQ7CisgICAg
fQorfQorCit2b2lkIEFzc2VtYmxlckJ1ZmZlckFSTTo6cGF0Y2hQQ1JlbChBUk1JbnN0KiBwYXRj
aFBDRnJvbSwgQVJNSW5zdCogY29kZVB0ciwgQVJNSW5zdCogY29uc3RQb29sKQoreworICAgIEFT
U0VSVChjb2RlUHRyICsgMSA+PSBjb25zdFBvb2wpOworCisgICAgd2hpbGUgKHBhdGNoUENGcm9t
IDwgY29kZVB0cikgeworICAgICAgICBpZiAoKCpwYXRjaFBDRnJvbSAmIChBUk1Bc3NlbWJsZXI6
OlNEVF9NQVNLIHwgQVJNOjpwYyA8PCAxNikpID09IChBUk1Bc3NlbWJsZXI6OlNEVCB8IEFSTTo6
cGMgPDwgMTYpKSB7CisgICAgICAgICAgICBBUk1Xb3JkIGRpZmYgPSBjb25zdFBvb2wgLSBwYXRj
aFBDRnJvbTsKKyAgICAgICAgICAgIEFSTVdvcmQgaW5kZXggPSAqcGF0Y2hQQ0Zyb20gJiAweGZm
ZjsKKworICAgICAgICAgICAgQVNTRVJUKGRpZmYgPj0gMSk7CisgICAgICAgICAgICBpZiAoZGlm
ZiA+PSAyIHx8IGluZGV4ID4gMCkgeworICAgICAgICAgICAgICAgIGRpZmYgPSAoZGlmZiArIGlu
ZGV4IC0gMikgPDwgMjsKKyAgICAgICAgICAgICAgICBBU1NFUlQoZGlmZiA8PSAweGZmZik7Cisg
ICAgICAgICAgICAgICAgKnBhdGNoUENGcm9tID0gKCpwYXRjaFBDRnJvbSAmIH4weGZmZikgfCBk
aWZmOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAgICAgICpw
YXRjaFBDRnJvbSA9ICgqcGF0Y2hQQ0Zyb20gJiB+KDB4ZmZmIHwgQVJNQXNzZW1ibGVyOjpEVF9V
UCkpIHwgMHgwMDQ7CisgICAgICAgIH0KKyAgICAgICAgKytwYXRjaFBDRnJvbTsKKyAgICB9Cit9
CisKK3ZvaWQqIEFzc2VtYmxlckJ1ZmZlckFSTTo6ZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBv
b2wqIGFsbG9jYXRvcikKK3sKKyAgICBpbnQgdG90YWxTaXplID0gc2l6ZSgpICsgbV9jcG9vbFNp
emU7CisgICAgQVJNSW5zdCogY29kZVB0cjsKKyAgICBBUk1JbnN0KiBidWZQdHI7CisgICAgQVJN
SW5zdCogYnVmRW5kOworICAgIEFSTUluc3QqIHBhdGNoUENGcm9tOworICAgIFBhZ2UqIHBhZ2U7
CisgICAgaW50IGN1cnJlbnRTaXplOworICAgIGludCBjb3B5OworICAgIFdURjo6VGFwZTxKbXBT
cmNJbnRlcm5hbCwga0JyYW5jaFNpemU+OjpJdGVyYXRvciBicmFuY2ggPSBtX2JyYW5jaGVzLmJl
Z2luKCk7CisgICAgV1RGOjpUYXBlPEptcFNyY0ludGVybmFsLCBrQnJhbmNoU2l6ZT46Okl0ZXJh
dG9yIGJyYW5jaEVuZCA9IG1fYnJhbmNoZXMuZW5kKCk7CisKKyAgICBtX2NvZGUgPSByZWludGVy
cHJldF9jYXN0PEFSTUluc3QqPihhbGxvY2F0b3ItPmFsbG9jKHRvdGFsU2l6ZSAqIHNpemVvZihB
Uk1JbnN0KSkpOworICAgIGNvZGVQdHIgPSBtX2NvZGU7CisKKyAgICBwYWdlID0gbV9maXJzdFBh
Z2U7CisgICAgY29weSA9IDA7CisgICAgcGF0Y2hQQ0Zyb20gPSBtX2NvZGU7CisgICAgY3VycmVu
dFNpemUgPSAwOworICAgIGRvIHsKKyAgICAgICAgYnVmUHRyID0gcGFnZS0+aW5zbnM7CisgICAg
ICAgIGJ1ZkVuZCA9IGJ1ZlB0ciArIHBhZ2UtPnNpemU7CisgICAgICAgIHdoaWxlIChidWZQdHIg
PCBidWZFbmQpIHsKKyAgICAgICAgICAgIGlmIChjb3B5ID4gMCkgeworICAgICAgICAgICAgICAg
ICpjb2RlUHRyKysgPSAqYnVmUHRyKys7CisgICAgICAgICAgICAgICAgLS1jb3B5OworICAgICAg
ICAgICAgICAgIGlmIChjb3B5ID09IDApCisgICAgICAgICAgICAgICAgICAgIHBhdGNoUENGcm9t
ID0gY29kZVB0cjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2UgaWYgKCgqYnVmUHRy
ICYgQVJNQXNzZW1ibGVyOjpOT05BUk0pICE9IEFSTUFzc2VtYmxlcjo6Tk9OQVJNKQorICAgICAg
ICAgICAgICAgICpjb2RlUHRyKysgPSAqYnVmUHRyKys7CisgICAgICAgICAgICBlbHNlIHsKKyAg
ICAgICAgICAgICAgICBjb3B5ID0gKmJ1ZlB0cisrICYgKH5BUk1Bc3NlbWJsZXI6Ok5PTkFSTSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKGNvcHkgPiAwKTsKKyAgICAgICAgICAgICAgICBwYXRj
aFBDUmVsKHBhdGNoUENGcm9tLCBjb2RlUHRyLCBjb2RlUHRyICsgMSk7CisgICAgICAgICAgICAg
ICAgKmNvZGVQdHIrKyA9IEFSTUFzc2VtYmxlcjo6QUwgfCBBUk1Bc3NlbWJsZXI6OkIgfCAoKDEg
KyBjb3B5IC0gMikgJiBBUk1Bc3NlbWJsZXI6OkJSQU5DSF9NQVNLKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgICsrY3VycmVudFNpemU7CisgICAgICAgIH0KKyAgICAgICAgcGFnZSA9IHBh
Z2UtPm5leHQ7CisgICAgfSB3aGlsZSAocGFnZSk7CisKKyAgICBBU1NFUlQoY29weSA9PSAwKTsK
KworICAgIGlmIChtX2Nwb29sU2l6ZSA+IDApIHsKKyAgICAgICAgcGF0Y2hQQ1JlbChwYXRjaFBD
RnJvbSwgY29kZVB0ciwgY29kZVB0cik7CisgICAgICAgIG1lbWNweShjb2RlUHRyLCBtX2Nwb29s
LCBtX2Nwb29sU2l6ZSAqIHNpemVvZihBUk1Xb3JkKSk7CisgICAgICAgIGNvZGVQdHIgKz0gbV9j
cG9vbFNpemU7CisgICAgfQorCisgICAgZm9yIChicmFuY2ggPSBtX2JyYW5jaGVzLmJlZ2luKCk7
IGJyYW5jaCAhPSBicmFuY2hFbmQ7ICsrYnJhbmNoKQorICAgICAgICBpZiAoYnJhbmNoLT5tX3Rh
cmdldCkgeworICAgICAgICAgICAgSm1wU3JjSW50ZXJuYWwgam1wU3JjRGF0YSA9ICpicmFuY2g7
CisgICAgICAgICAgICB2b2lkKiB0byA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNSW5zdCo+KG1fY29k
ZSkgKyBqbXBTcmNEYXRhLm1fdGFyZ2V0LT5tX29mZnNldDsKKyAgICAgICAgICAgIEFSTUFzc2Vt
Ymxlcjo6bGlua0JyYW5jaChtX2NvZGUsIEptcFNyYygmam1wU3JjRGF0YSksIHRvLCBmYWxzZSk7
CisgICAgICAgIH0KKworICAgIEFTU0VSVChjb2RlUHRyIDw9IG1fY29kZSArIHRvdGFsU2l6ZSk7
CisKKyAgICAvKiBTeXNjYWxsIGZvciBfX0FSTV9OUl9jYWNoZWZsdXNoLiAgKi8KKyAgICBjbGVh
cl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihtX2NvZGUpLCByZWludGVycHJldF9jYXN0
PGNoYXIqPihjb2RlUHRyKSk7CisKKyAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
bV9jb2RlKTsKK30KKworQVJNSW5zdCogQXNzZW1ibGVyQnVmZmVyQVJNOjphbGxvY1BhZ2UoKQor
eworICAgIG1fbGFzdFBhZ2UtPm5leHQgPSBuZXcgUGFnZTsKKyAgICBtX2xhc3RQYWdlID0gbV9s
YXN0UGFnZS0+bmV4dDsKKworICAgIG1fbGFzdFBhZ2UtPm5leHQgPSAwOworICAgIG1fbGFzdFBh
Z2UtPnNpemUgPSAxOworICAgIHJldHVybiAmbV9sYXN0UGFnZS0+aW5zbnNbMF07Cit9CisKK3Zv
aWQgQXNzZW1ibGVyQnVmZmVyQVJNOjpwdXNoQ1Bvb2woKQoreworICAgIEFSTVdvcmQqIHB0cjsK
KyAgICBBUk1Xb3JkKiBwdHJFbmQ7CisKKyAgICBBU1NFUlQobV9jcG9vbFNpemUgPiAwICYmIG1f
Y3Bvb2xTaXplIDw9IGtDb25zdFBvb2xNYXhTaXplKTsKKworICAgIGlmIChtX2xhc3RMYWJlbCAm
JiBtX2xhc3RMYWJlbC0+bV9vZmZzZXQgPT0gbV9zaXplKQorICAgICAgICBtX2xhc3RMYWJlbC0+
bV9vZmZzZXQgKz0gbV9jcG9vbFNpemUgKyAxOworICAgIGlmIChtX2xhc3RCcmFuY2ggJiYgbV9s
YXN0QnJhbmNoLT5tX29mZnNldCA9PSBtX3NpemUpCisgICAgICAgIG1fbGFzdEJyYW5jaC0+bV9v
ZmZzZXQgKz0gbV9jcG9vbFNpemUgKyAxOworCisgICAgKmFsbG9jSW5zdCgpID0gQVJNQXNzZW1i
bGVyOjpOT05BUk0gfCBtX2Nwb29sU2l6ZTsKKworICAgIHB0ciA9IG1fY3Bvb2w7CisgICAgcHRy
RW5kID0gcHRyICsgbV9jcG9vbFNpemU7CisgICAgZG8geworICAgICAgICAqYWxsb2NJbnN0KCkg
PSAqcHRyKys7CisgICAgfSB3aGlsZSAocHRyIDwgcHRyRW5kKTsKKworICAgIG1fY3Bvb2xEaWZm
ID0ga0ludmFsaWREaWZmOworICAgIG1fY3Bvb2xTaXplID0gMDsKK30KKwordm9pZCBBc3NlbWJs
ZXJCdWZmZXJBUk06OnB1c2hQZW5kaW5nSW5zdHJ1Y3Rpb24oKQoreworICAgIGlmIChtX3BlbmRp
bmdUeXBlID09IEluc3RydWN0aW9uKSB7CisgICAgICAgIGlmIChtX2Nwb29sRGlmZiAhPSBrSW52
YWxpZERpZmYgJiYgbV9zaXplIC0gbV9jcG9vbERpZmYgPj0gbWF4RGlmZmVyZW5jZSg0MDkyKSkK
KyAgICAgICAgICAgIHB1c2hDUG9vbCgpOworCisgICAgICAgICphbGxvY0luc3QoKSA9IG1fcGVu
ZGluZ0luc3Q7CisKKyAgICAgICAgbV9wZW5kaW5nVHlwZSA9IE5vdGhpbmc7CisgICAgfQorICAg
IGVsc2UgaWYgKG1fcGVuZGluZ1R5cGUgPT0gSW5zdHJ1Y3Rpb25XaXRoQ29uc3QgfHwgbV9wZW5k
aW5nVHlwZSA9PSBJbnN0cnVjdGlvbldpdGhVbmlxdWVDb25zdCkgeworICAgICAgICBpbnQgaW5k
ZXggPSBrQ29uc3RQb29sTWF4U2l6ZTsKKworICAgICAgICBpZiAobV9jcG9vbERpZmYgIT0ga0lu
dmFsaWREaWZmICYmIG1fc2l6ZSAtIG1fY3Bvb2xEaWZmID49IG1heERpZmZlcmVuY2UoNDA5Mikp
CisgICAgICAgICAgICBwdXNoQ1Bvb2woKTsKKyAgICAgICAgZWxzZSBpZiAobV9wZW5kaW5nVHlw
ZSA9PSBJbnN0cnVjdGlvbldpdGhDb25zdCAmJiBtX2Nwb29sU2l6ZSA+IDApIHsKKyAgICAgICAg
ICAgIGZvciAodWludDMyX3QgaSA9IDA7IGkgPCBtX2Nwb29sU2l6ZTsgKytpKQorICAgICAgICAg
ICAgICAgIGlmIChtX2Nwb29sW2ldID09IG1fcGVuZGluZ0ltbWVkaWF0ZSAmJiAhbV9jcG9vbElz
VW5pcXVlW2ldKSB7CisgICAgICAgICAgICAgICAgICAgIGluZGV4ID0gaTsKKyAgICAgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAgICAg
aWYgKGluZGV4ID09IGtDb25zdFBvb2xNYXhTaXplKSB7CisgICAgICAgICAgICBpZiAobV9jcG9v
bFNpemUgPCBrQ29uc3RQb29sTWF4U2l6ZSkgeworICAgICAgICAgICAgICAgIGluZGV4ID0gbV9j
cG9vbFNpemU7CisgICAgICAgICAgICAgICAgKyttX2Nwb29sU2l6ZTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIHB1c2hDUG9vbCgpOworICAgICAg
ICAgICAgICAgIGluZGV4ID0gMDsKKyAgICAgICAgICAgICAgICBtX2Nwb29sU2l6ZSA9IDE7Cisg
ICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBtX2Nwb29sW2luZGV4XSA9IG1fcGVu
ZGluZ0ltbWVkaWF0ZTsKKyAgICAgICAgbV9jcG9vbElzVW5pcXVlW2luZGV4XSA9IChtX3BlbmRp
bmdUeXBlID09IEluc3RydWN0aW9uV2l0aFVuaXF1ZUNvbnN0KTsKKyAgICAgICAgQVNTRVJUKCht
X3BlbmRpbmdJbnN0ICYgMHhmZmYpID09IDApOworICAgICAgICAqYWxsb2NJbnN0KCkgPSBtX3Bl
bmRpbmdJbnN0IHwgaW5kZXg7CisKKyAgICAgICAgaWYgKG1fY3Bvb2xEaWZmID09IGtJbnZhbGlk
RGlmZikKKyAgICAgICAgICAgIG1fY3Bvb2xEaWZmID0gbV9zaXplOworCisgICAgICAgIG1fcGVu
ZGluZ1R5cGUgPSBOb3RoaW5nOworICAgIH0KK30KKworLyoKKyAqIFByaXZhdGUgaGVscGVyIGZ1
bmN0aW9ucyBmcm9tIEFSTUFzc2VtYmxlci5oCisgKi8KKworQVJNV29yZCBBUk1Bc3NlbWJsZXI6
OmdldE9wMihBUk1Xb3JkIGltbSkKK3sKKyAgICBpbnQgcm9sOworCisgICAgaWYgKGltbSA8PSAw
eGZmKQorICAgICAgICByZXR1cm4gQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgaW1tOworCisgICAg
aWYgKChpbW0gJiAweGZmMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gODsKKyAgICAg
ICAgcm9sID0gODsKKyAgICB9CisgICAgZWxzZSB7CisgICAgICAgIGltbSA9IChpbW0gPDwgMjQp
IHwgKGltbSA+PiA4KTsKKyAgICAgICAgcm9sID0gMDsKKyAgICB9CisKKyAgICBpZiAoKGltbSAm
IDB4ZmYwMDAwMDApID09IDApIHsKKyAgICAgICAgaW1tIDw8PSA4OworICAgICAgICByb2wgKz0g
NDsKKyAgICB9CisKKyAgICBpZiAoKGltbSAmIDB4ZjAwMDAwMDApID09IDApIHsKKyAgICAgICAg
aW1tIDw8PSA0OworICAgICAgICByb2wgKz0gMjsKKyAgICB9CisKKyAgICBpZiAoKGltbSAmIDB4
YzAwMDAwMDApID09IDApIHsKKyAgICAgICAgaW1tIDw8PSAyOworICAgICAgICByb2wgKz0gMTsK
KyAgICB9CisKKyAgICBpZiAoKGltbSAmIDB4MDBmZmZmZmYpID09IDApCisgICAgICAgIHJldHVy
biBBUk1Bc3NlbWJsZXI6Ok9QMl9JTU0gfCAoaW1tID4+IDI0KSB8IChyb2wgPDwgOCk7CisKKyAg
ICByZXR1cm4gMDsKK30KKworQVJNV29yZCBBUk1Bc3NlbWJsZXI6OmdldE9wMkJ5dGUoQVJNV29y
ZCBpbW0pCit7CisgICAgQVNTRVJUKGltbSA8PSAweGZmKTsKKyAgICByZXR1cm4gQVJNQXNzZW1i
bGVyOjpPUDJfSU1NaCB8IChpbW0gJiAweDBmKSB8ICgoaW1tICYgMHhmMCkgPDwgNCkgOworfQor
Cit2b2lkIEFSTUFzc2VtYmxlcjo6bGlua0JyYW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8sIGJvb2wgY2xlYXJDYWNoZSkKK3sKKyAgICBBU1NFUlQoZnJvbS5tX2ptcFNyYy0+
bV9vZmZzZXQgIT0gLTEpOworCisgICAgQVJNSW5zdCogaW5zdCA9IHJlaW50ZXJwcmV0X2Nhc3Q8
QVJNSW5zdCo+KGNvZGUpICsgZnJvbS5tX2ptcFNyYy0+bV9vZmZzZXQ7CisKKyAgICBpZiAoIWZy
b20ubV9qbXBTcmMtPm1fcGF0Y2hPbmNlKSB7CisgICAgICAgICpnZXRMZHJJbW1BZGRyZXNzKGlu
c3QpID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPih0byk7CisgICAgICAgIHJldHVybjsKKyAg
ICB9CisKKyAgICBpbnRwdHJfdCBkaWZmID0gKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KHRv
KSAtIHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+KGluc3QgKyAyKSkgPj4gMjsKKworICAgIGlm
ICgoZGlmZiA8PSBBUk1Bc3NlbWJsZXI6OkJPRkZTRVRfTUFYICYmIGRpZmYgPj0gQVJNQXNzZW1i
bGVyOjpCT0ZGU0VUX01JTikpIHsKKyAgICAgICAgKmluc3QgPSBBUk1Bc3NlbWJsZXI6OkIgfCBB
Uk1fQ09ORF9GSUVMRCgqaW5zdCkgfCAoZGlmZiAmIEFSTUFzc2VtYmxlcjo6QlJBTkNIX01BU0sp
OworCisgICAgICAgIGlmIChjbGVhckNhY2hlKQorICAgICAgICAgICAgQXNzZW1ibGVyQnVmZmVy
OjpjbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihpbnN0KSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oaW5zdCArIDEpKTsKKyAgICB9IGVsc2UKKyAgICAgICAgKmdldExkckltbUFk
ZHJlc3MoaW5zdCkgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KHRvKTsKK30KKwordm9pZCBB
Uk1Bc3NlbWJsZXI6OnBhdGNoUG9pbnRlckludGVybmFsKGludHB0cl90IHdoZXJlLCB2b2lkKiB2
YWx1ZSkKK3sKKyAgICBBUk1JbnN0KiBpbnN0ID0gcmVpbnRlcnByZXRfY2FzdDxBUk1JbnN0Kj4o
d2hlcmUpOworICAgICpnZXRMZHJJbW1BZGRyZXNzKGluc3QpID0gcmVpbnRlcnByZXRfY2FzdDxB
Uk1Xb3JkPih2YWx1ZSk7CisgICAgQXNzZW1ibGVyQnVmZmVyOjpjbGVhcl9jYWNoZShyZWludGVy
cHJldF9jYXN0PGNoYXIqPihpbnN0KSwgcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oaW5zdCArIDEp
KTsKK30KKworaW50IEFSTUFzc2VtYmxlcjo6Z2VuSW50KGludCByZWcsIEFSTVdvcmQgaW1tLCBi
b29sIHBvc2l0aXZlKQoreworICAgIC8vIFN0ZXAxOiBTZWFyY2ggYSBub24taW1tZWRpYXRlIHBh
cnQKKyAgICBBUk1Xb3JkIG1hc2s7CisgICAgQVJNV29yZCBpbW0xOworICAgIEFSTVdvcmQgaW1t
MjsKKyAgICBpbnQgcm9sOworCisgICAgbWFzayA9IDB4ZmYwMDAwMDA7CisgICAgcm9sID0gODsK
KyAgICB3aGlsZSgxKSB7CisgICAgICAgIGlmICgoaW1tICYgbWFzaykgPT0gMCkgeworICAgICAg
ICAgICAgaW1tID0gKGltbSA8PCByb2wpIHwgKGltbSA+PiAoMzIgLSByb2wpKTsKKyAgICAgICAg
ICAgIHJvbCA9IDQgKyAocm9sID4+IDEpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0K
KyAgICAgICAgcm9sICs9IDI7CisgICAgICAgIG1hc2sgPj49IDI7CisgICAgICAgIGlmIChtYXNr
ICYgMHgzKSB7CisgICAgICAgICAgICAvLyByb2wgOAorICAgICAgICAgICAgaW1tID0gKGltbSA8
PCA4KSB8IChpbW0gPj4gMjQpOworICAgICAgICAgICAgbWFzayA9IDB4ZmYwMDsKKyAgICAgICAg
ICAgIHJvbCA9IDI0OworICAgICAgICAgICAgd2hpbGUgKDEpIHsKKyAgICAgICAgICAgICAgICBp
ZiAoKGltbSAmIG1hc2spID09IDApIHsKKyAgICAgICAgICAgICAgICAgICAgaW1tID0gKGltbSA8
PCByb2wpIHwgKGltbSA+PiAoMzIgLSByb2wpKTsKKyAgICAgICAgICAgICAgICAgICAgcm9sID0g
KHJvbCA+PiAxKSAtIDg7CisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
ICAgIH0KKyAgICAgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgICAgICAgICBtYXNrID4+
PSAyOworICAgICAgICAgICAgICAgIGlmIChtYXNrICYgMHgzKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9
CisgICAgfQorCisgICAgQVNTRVJUKChpbW0gJiAweGZmKSA9PSAwKTsKKworICAgIGlmICgoaW1t
ICYgMHhmZjAwMDAwMCkgPT0gMCkgeworICAgICAgICBpbW0xID0gQVJNQXNzZW1ibGVyOjpPUDJf
SU1NIHwgKChpbW0gPj4gMTYpICYgMHhmZikgfCAoKChyb2wgKyA0KSAmIDB4ZikgPDwgOCk7Cisg
ICAgICAgIGltbTIgPSBBUk1Bc3NlbWJsZXI6Ok9QMl9JTU0gfCAoKGltbSA+PiA4KSAmIDB4ZmYp
IHwgKCgocm9sICsgOCkgJiAweGYpIDw8IDgpOworICAgIH0KKyAgICBlbHNlIGlmIChpbW0gJiAw
eGMwMDAwMDAwKSB7CisgICAgICAgIGltbTEgPSBBUk1Bc3NlbWJsZXI6Ok9QMl9JTU0gfCAoKGlt
bSA+PiAyNCkgJiAweGZmKSB8ICgocm9sICYgMHhmKSA8PCA4KTsKKyAgICAgICAgaW1tIDw8PSA4
OworICAgICAgICByb2wgKz0gNDsKKworICAgICAgICBpZiAoKGltbSAmIDB4ZmYwMDAwMDApID09
IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAgICAgIHJvbCArPSA0OworICAg
ICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAwKSB7CisgICAgICAg
ICAgICBpbW0gPDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgfQorCisgICAg
ICAgIGlmICgoaW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAgICAgaW1tIDw8PSAy
OworICAgICAgICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGltbSAm
IDB4MDBmZmZmZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0gQVJNQXNzZW1ibGVyOjpPUDJf
SU1NIHwgKGltbSA+PiAyNCkgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisgICAgICAgIGVsc2UKKyAg
ICAgICAgICAgIHJldHVybiAwOworICAgIH0KKyAgICBlbHNlIHsKKyAgICAgICAgaWYgKChpbW0g
JiAweGYwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgICAgICBpbW0gPDw9IDQ7CisgICAgICAgICAg
ICByb2wgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoaW1tICYgMHhjMDAwMDAwMCkg
PT0gMCkgeworICAgICAgICAgICAgaW1tIDw8PSAyOworICAgICAgICAgICAgcm9sICs9IDE7Cisg
ICAgICAgIH0KKworICAgICAgICBpbW0xID0gQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgKChpbW0g
Pj4gMjQpICYgMHhmZikgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisgICAgICAgIGltbSA8PD0gODsK
KyAgICAgICAgcm9sICs9IDQ7CisKKyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAw
KSB7CisgICAgICAgICAgICBpbW0gPDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgoaW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAg
ICAgaW1tIDw8PSAyOworICAgICAgICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoKGltbSAmIDB4MDBmZmZmZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0gQVJNQXNz
ZW1ibGVyOjpPUDJfSU1NIHwgKGltbSA+PiAyNCkgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChwb3NpdGl2
ZSkgeworICAgICAgICBtb3ZfcihyZWcsIGltbTEpOworICAgICAgICBvcnJfcihyZWcsIHJlZywg
aW1tMik7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBtdm5fcihyZWcsIGltbTEpOworICAg
ICAgICBiaWNfcihyZWcsIHJlZywgaW1tMik7CisgICAgfQorCisgICAgcmV0dXJuIDE7Cit9CisK
K0FSTVdvcmQgQVJNQXNzZW1ibGVyOjpnZXRJbW0oQVJNV29yZCBpbW0sIGludCB0bXBSZWcpCit7
CisgICAgQVJNV29yZCB0bXA7CisKKyAgICAvLyBEbyBpdCBieSAxIGluc3RydWN0aW9uCisgICAg
dG1wID0gZ2V0T3AyKGltbSk7CisgICAgaWYgKHRtcCkKKyAgICAgICAgcmV0dXJuIHRtcDsKKwor
ICAgIHRtcCA9IGdldE9wMih+aW1tKTsKKyAgICBpZiAodG1wKSB7CisgICAgICAgIG12bl9yKHRt
cFJlZywgdG1wKTsKKyAgICAgICAgcmV0dXJuIHRtcFJlZzsKKyAgICB9CisKKyAgICAvLyBEbyBp
dCBieSAyIGluc3RydWN0aW9uCisgICAgaWYgKGdlbkludCh0bXBSZWcsIGltbSwgdHJ1ZSkpCisg
ICAgICAgIHJldHVybiB0bXBSZWc7CisgICAgaWYgKGdlbkludCh0bXBSZWcsIH5pbW0sIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIHRtcFJlZzsKKworICAgIGxkcl9pbW0odG1wUmVnLCBpbW0pOwor
ICAgIHJldHVybiB0bXBSZWc7Cit9CisKK0FSTVdvcmQgQVJNQXNzZW1ibGVyOjpnZXRJbnZJbW0o
QVJNV29yZCBpbW0sIGludCB0bXBSZWcpCit7CisgICAgQVJNV29yZCB0bXA7CisKKyAgICAvLyBE
byBpdCBieSAxIGluc3RydWN0aW9uCisgICAgdG1wID0gZ2V0T3AyKGltbSk7CisgICAgaWYgKHRt
cCkKKyAgICAgICAgcmV0dXJuIHRtcDsKKworICAgIHRtcCA9IGdldE9wMih+aW1tKTsKKyAgICBp
ZiAodG1wKQorICAgICAgICByZXR1cm4gdG1wIHwgT1AyX0lOVl9JTU07CisKKyAgICAvLyBEbyBp
dCBieSAyIGluc3RydWN0aW9uCisgICAgaWYgKGdlbkludCh0bXBSZWcsIGltbSwgdHJ1ZSkpCisg
ICAgICAgIHJldHVybiB0bXBSZWc7CisgICAgaWYgKGdlbkludCh0bXBSZWcsIH5pbW0sIGZhbHNl
KSkKKyAgICAgICAgcmV0dXJuIHRtcFJlZzsKKworICAgIGxkcl9pbW0odG1wUmVnLCBpbW0pOwor
ICAgIHJldHVybiB0bXBSZWc7Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdv
cmQgaW1tLCBpbnQgZGVzdCkKK3sKKyAgICBBUk1Xb3JkIHRtcDsKKworICAgIC8vIERvIGl0IGJ5
IDEgaW5zdHJ1Y3Rpb24KKyAgICB0bXAgPSBnZXRPcDIoaW1tKTsKKyAgICBpZiAodG1wKSB7Cisg
ICAgICAgIG1vdl9yKGRlc3QsIHRtcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0
bXAgPSBnZXRPcDIofmltbSk7CisgICAgaWYgKHRtcCkgeworICAgICAgICBtdm5fcihkZXN0LCB0
bXApOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLy8gRG8gaXQgYnkgMiBpbnN0cnVj
dGlvbgorICAgIGlmIChnZW5JbnQoZGVzdCwgaW1tLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuOwor
ICAgIGlmIChnZW5JbnQoZGVzdCwgfmltbSwgZmFsc2UpKQorICAgICAgICByZXR1cm47CisKKyAg
ICBsZHJfaW1tKGRlc3QsIGltbSk7Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjpkYXRhVHJhbnNm
ZXIzMihib29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgaW50
MzJfdCBvZmZzZXQpCit7CisgICAgaWYgKG9mZnNldCA+PSAwKSB7CisgICAgICAgIGlmIChvZmZz
ZXQgPD0gMHhmZmYpCisgICAgICAgICAgICBkdHJfdShpc0xvYWQsIHNyY0RzdCwgYmFzZSwgb2Zm
c2V0KTsKKyAgICAgICAgZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmYpIHsKKyAgICAgICAgICAg
IGFkZF9yKEFSTTo6UzAsIGJhc2UsIEFSTUFzc2VtYmxlcjo6T1AyX0lNTSB8IChvZmZzZXQgPj4g
MTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06
OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBUk1X
b3JkIHJlZyA9IGdldEltbShvZmZzZXQsIEFSTTo6UzApOworICAgICAgICAgICAgZHRyX3VyKGlz
TG9hZCwgc3JjRHN0LCBiYXNlLCByZWcpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweGZmZikKKyAgICAg
ICAgICAgIGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBvZmZzZXQpOworICAgICAgICBlbHNl
IGlmIChvZmZzZXQgPD0gMHhmZmZmZikgeworICAgICAgICAgICAgc3ViX3IoQVJNOjpTMCwgYmFz
ZSwgQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgKG9mZnNldCA+PiAxMikgfCAoMTAgPDwgOCkpOwor
ICAgICAgICAgICAgZHRyX2QoaXNMb2FkLCBzcmNEc3QsIEFSTTo6UzAsIG9mZnNldCAmIDB4ZmZm
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFSTVdvcmQgcmVnID0gZ2V0SW1tKG9m
ZnNldCwgQVJNOjpTMCk7CisgICAgICAgICAgICBkdHJfZHIoaXNMb2FkLCBzcmNEc3QsIGJhc2Us
IHJlZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjpiYXNlSW5k
ZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBi
YXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0KQoreworICAg
IEFSTVdvcmQgb3AyOworCisgICAgQVNTRVJUKHNjYWxlID49IDAgJiYgc2NhbGUgPD0gMyk7Cisg
ICAgb3AyID0gbHNsKGluZGV4LCBzY2FsZSk7CisKKyAgICBpZiAob2Zmc2V0ID49IDAgJiYgb2Zm
c2V0IDw9IDB4ZmZmKSB7CisgICAgICAgIGFkZF9yKEFSTTo6UzAsIGJhc2UsIG9wMik7CisgICAg
ICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCBvZmZzZXQpOworICAgICAgICByZXR1
cm47CisgICAgfQorICAgIGlmIChvZmZzZXQgPD0gMCAmJiBvZmZzZXQgPj0gLTB4ZmZmKSB7Cisg
ICAgICAgIGFkZF9yKEFSTTo6UzAsIGJhc2UsIG9wMik7CisgICAgICAgIGR0cl9kKGlzTG9hZCwg
c3JjRHN0LCBBUk06OlMwLCAtb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IG1vdmVJbW0ob2Zmc2V0LCBBUk06OlMwKTsKKyAgICBhZGRfcihBUk06OlMwLCBBUk06OlMwLCBv
cDIpOworICAgIGR0cl91cihpc0xvYWQsIHNyY0RzdCwgYmFzZSwgQVJNOjpTMCk7Cit9CisKK3Zv
aWQgQVJNQXNzZW1ibGVyOjpjYWxsMzIoUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCkK
K3sKKyAgICBpZiAoYmFzZSA9PSBBUk06OnNwKQorICAgICAgICBvZmZzZXQgKz0gNDsKKworICAg
IGlmIChvZmZzZXQgPj0gMCkgeworICAgICAgICBpZiAob2Zmc2V0IDw9IDB4ZmZmKSB7CisgICAg
ICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAgICAgICAgICAgZHRyX3UodHJ1ZSwgQVJNOjpwYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgfSBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmZikgewor
ICAgICAgICAgICAgYWRkX3IoQVJNOjpTMCwgYmFzZSwgQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwg
KG9mZnNldCA+PiAxMikgfCAoMTAgPDwgOCkpOworICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsK
KyAgICAgICAgICAgIGR0cl91KHRydWUsIEFSTTo6cGMsIEFSTTo6UzAsIG9mZnNldCAmIDB4ZmZm
KTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFSTVdvcmQgcmVnID0gZ2V0SW1tKG9m
ZnNldCwgQVJNOjpTMCk7CisgICAgICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAgICAgICAgICAg
ZHRyX3VyKHRydWUsIEFSTTo6cGMsIGJhc2UsIHJlZyk7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
IHsKKyAgICAgICAgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweGZm
ZikgeworICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgIGR0cl9kKHRydWUs
IEFSTTo6cGMsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4
ZmZmZmYpIHsKKyAgICAgICAgICAgIHN1Yl9yKEFSTTo6UzAsIGJhc2UsIEFSTUFzc2VtYmxlcjo6
T1AyX0lNTSB8IChvZmZzZXQgPj4gMTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgIHByZXBh
cmVDYWxsKCk7CisgICAgICAgICAgICBkdHJfZCh0cnVlLCBBUk06OnBjLCBBUk06OlMwLCBvZmZz
ZXQgJiAweGZmZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBUk1Xb3JkIHJlZyA9
IGdldEltbShvZmZzZXQsIEFSTTo6UzApOworICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAg
ICAgICAgICAgIGR0cl9kcih0cnVlLCBBUk06OnBjLCBiYXNlLCByZWcpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIEFSTUFzc2VtYmxlcjo6cHJlcGFyZUNhbGwoKQoreworICAgIHByZXBh
cmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdCgzLCAxKTsKKworICAgIC8vIFMwIG1pZ2h0IGJlIHVz
ZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nCisgICAgYWRkX3IoQVJNOjpTMSwgQVJNOjpwYywgT1Ay
X0lNTSB8IDB4NCk7CisgICAgcHVzaF9yKEFSTTo6UzEpOworfQorCit2b2lkIEFSTUFzc2VtYmxl
cjo6cHJlcGFyZVVuYnJva2VuSW5zdHJ1Y3Rpb25MaXN0KGludCBub0luc3RydWN0aW9ucywgaW50
IG5vQ29uc3RhbnRzKQoreworICAgIG1fYnVmZmVyLnB1c2hQZW5kaW5nSW5zdHJ1Y3Rpb24oKTsK
KworICAgIG5vSW5zdHJ1Y3Rpb25zIDw8PSAyOworICAgIGlmIChtX2J1ZmZlci5tX2Nwb29sRGlm
ZiAhPSBBc3NlbWJsZXJCdWZmZXI6OmtJbnZhbGlkRGlmZiAmJiBtX2J1ZmZlci5tX3NpemUgLSBt
X2J1ZmZlci5tX2Nwb29sRGlmZiA+PSBtYXhEaWZmZXJlbmNlKDQwOTIgLSBub0luc3RydWN0aW9u
cykpCisgICAgICAgIG1fYnVmZmVyLnB1c2hDUG9vbCgpOworICAgIGVsc2UgaWYgKHN0YXRpY19j
YXN0PGludD4obV9idWZmZXIubV9jcG9vbFNpemUpID49IEFzc2VtYmxlckJ1ZmZlcjo6a0NvbnN0
UG9vbE1heFNpemUgLSBub0NvbnN0YW50cykKKyAgICAgICAgbV9idWZmZXIucHVzaENQb29sKCk7
Cit9CisKK30KKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJBUk0u
aCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJBUk0uaApuZXcgZmls
ZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi41NjNkODljCi0tLSAvZGV2L251bGwKKysrIGIv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlckFSTS5oCkBAIC0wLDAgKzEs
MjcyIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdo
dCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4K
KyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1z
LCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRl
ZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlz
dHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0
CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5n
IGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2Yg
Y29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9j
dW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3Ry
aWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4g
YGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNM
VURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0Yg
TUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0Ug
QVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05U
UklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwg
U1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09P
RFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVT
SU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICog
T0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBU
T1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFO
WSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBBc3Nl
bWJsZXJCdWZmZXJBUk1faAorI2RlZmluZSBBc3NlbWJsZXJCdWZmZXJBUk1faAorCisjaW5jbHVk
ZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShB
Uk0pCisKKyNpbmNsdWRlICJzdGRpbnQuaCIKKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRl
IDxqaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oPgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+
CisjaW5jbHVkZSA8d3RmL0Zhc3RNYWxsb2MuaD4KKyNpbmNsdWRlIDx3dGYvVGFwZS5oPgorI2lu
Y2x1ZGUgPHd0Zi9VbnVzZWRQYXJhbS5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIHR5cGVk
ZWYgdWludDMyX3QgQVJNV29yZDsKKyAgICB0eXBlZGVmIHVpbnQzMl90IEFSTUluc3Q7CisgICAg
Y2xhc3MgQVJNQXNzZW1ibGVyOworCisgICAgY2xhc3MgQXNzZW1ibGVyQnVmZmVyQVJNIHsKKyAg
ICAgICAgZnJpZW5kIGNsYXNzIEFSTUFzc2VtYmxlcjsKKyAgICBwcml2YXRlOgorICAgICAgICBz
dGF0aWMgaW5saW5lIHZvaWQgY2xlYXJfY2FjaGUoY2hhciogYmVnaW4sIGNoYXIqIGVuZCkKKyAg
ICAgICAgeworI2lmIENPTVBJTEVSKEdDQykgJiYgKEdDQ19WRVJTSU9OID49IDMwNDA2KQorICAg
ICAgICAgICAgX19jbGVhcl9jYWNoZSgoYmVnaW4pLCAoZW5kKSk7CisjZWxzZQorICAgICAgICAg
ICAgcmVnaXN0ZXIgY2hhciogX2JlZyBfX2FzbSAoImExIikgPSBiZWdpbjsKKyAgICAgICAgICAg
IHJlZ2lzdGVyIGNoYXIqIF9lbmQgX19hc20gKCJhMiIpID0gZW5kOworICAgICAgICAgICAgcmVn
aXN0ZXIgdW5zaWduZWQgbG9uZyBfZmxnIF9fYXNtICgiYTMiKSA9IDA7CisgICAgICAgICAgICBf
X2FzbSBfX3ZvbGF0aWxlX18gKCJzd2kgMHg5ZjAwMDIiIDogOiAiciIgKF9iZWcpLCAiciIgKF9l
bmQpLCAiciIgKF9mbGcpKTsKKyNlbmRpZiAvLyBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVSU0lP
TiA+PSAzMDQwNikKKyAgICAgICAgfQorCisgICAgcHVibGljOgorCisgICAgICAgIHN0cnVjdCBK
bXBEc3RJbnRlcm5hbCB7CisgICAgICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAg
ICAgIGJvb2wgbV91c2VkIDogMTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBKbXBEc3Qg
eworICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEFSTUFzc2VtYmxlcjsKKyAgICAgICAgICAgIGZy
aWVuZCBjbGFzcyBBc3NlbWJsZXJCdWZmZXJBUk07CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAg
ICAgIEptcERzdCgpCisgICAgICAgICAgICAgICAgOiBtX2ptcERzdCgwKQorICAgICAgICAgICAg
eworICAgICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0CisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRyX3Q+
KG1fam1wRHN0KSA8PSAweDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PGludHB0cl90PihtX2ptcERzdCk7CisgICAgICAgICAgICAgICAgcmV0dXJuIG1fam1w
RHN0LT5tX3VzZWQ7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgdXNlZCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgaWYgKHJlaW50ZXJwcmV0X2Nhc3Q8aW50cHRy
X3Q+KG1fam1wRHN0KSA8PSAweDEpCisgICAgICAgICAgICAgICAgICAgIG1fam1wRHN0ID0gcmVp
bnRlcnByZXRfY2FzdDxKbXBEc3RJbnRlcm5hbCo+KDB4MSk7CisgICAgICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgICAgICBtX2ptcERzdC0+bV91c2VkID0gdHJ1ZTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSm1wRHN0KEptcERzdEludGVy
bmFsKiBqbXBEc3QpCisgICAgICAgICAgICAgICAgOiBtX2ptcERzdChqbXBEc3QpCisgICAgICAg
ICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIEptcERzdEludGVybmFsKiBtX2pt
cERzdDsKKyAgICAgICAgfTsKKworICAgICAgICBzdHJ1Y3QgSm1wU3JjSW50ZXJuYWwgeworICAg
ICAgICAgICAgSm1wRHN0SW50ZXJuYWwqIG1fdGFyZ2V0OworICAgICAgICAgICAgaW50IG1fb2Zm
c2V0IDogMzE7CisgICAgICAgICAgICBib29sIG1fcGF0Y2hPbmNlIDogMTsKKyAgICAgICAgfTsK
KworICAgICAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEFSTUFz
c2VtYmxlcjsKKyAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBBc3NlbWJsZXJCdWZmZXJBUk07Cisg
ICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICAgICAgOiBt
X2ptcFNyYygwKQorICAgICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2
b2lkIGVuYWJsZUxhdGVQYXRjaCgpCisgICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNT
RVJUKG1fam1wU3JjKTsKKyAgICAgICAgICAgICAgICBtX2ptcFNyYy0+bV9wYXRjaE9uY2UgPSBm
YWxzZTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBpc1BhdGNoT25jZSgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fam1wU3JjKTsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gbV9qbXBTcmMtPm1fcGF0Y2hPbmNlOworICAgICAgICAgICAgfQorCisg
ICAgICAgIHByaXZhdGU6CisgICAgICAgICAgICBKbXBTcmMoSm1wU3JjSW50ZXJuYWwqIGptcFNy
YykKKyAgICAgICAgICAgICAgICA6IG1fam1wU3JjKGptcFNyYykKKyAgICAgICAgICAgIHsKKyAg
ICAgICAgICAgIH0KKworICAgICAgICAgICAgSm1wU3JjSW50ZXJuYWwqIG1fam1wU3JjOworICAg
ICAgICB9OworCisgICAgICAgIEFzc2VtYmxlckJ1ZmZlckFSTSgpOworICAgICAgICB+QXNzZW1i
bGVyQnVmZmVyQVJNKCk7CisKKyAgICAgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgc3BhY2UpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIFVOVVNFRF9QQVJBTShzcGFjZSk7CisgICAgICAgIH0KKwor
ICAgICAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KQorICAgICAgICB7CisgICAgICAg
ICAgICByZXR1cm4gKHNpemUoKSAmIChhbGlnbm1lbnQgLSAxKSkgPT0gMDsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgYWRkKEFSTUluc3QgaW5zdCkKKyAgICAgICAgeworICAgICAgICAgICAg
cHVzaFBlbmRpbmdJbnN0cnVjdGlvbigpOworICAgICAgICAgICAgbV9wZW5kaW5nVHlwZSA9IElu
c3RydWN0aW9uOworICAgICAgICAgICAgbV9wZW5kaW5nSW5zdCA9IGluc3Q7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIGFkZENvbnN0KEFSTUluc3QgaW5zdCwgQVJNV29yZCBpbW1lZGlhdGUp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHB1c2hQZW5kaW5nSW5zdHJ1Y3Rpb24oKTsKKyAgICAg
ICAgICAgIG1fcGVuZGluZ1R5cGUgPSBJbnN0cnVjdGlvbldpdGhDb25zdDsKKyAgICAgICAgICAg
IG1fcGVuZGluZ0luc3QgPSBpbnN0OworICAgICAgICAgICAgbV9wZW5kaW5nSW1tZWRpYXRlID0g
aW1tZWRpYXRlOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRVbmlxdWVDb25zdChBUk1J
bnN0IGluc3QsIEFSTVdvcmQgaW1tZWRpYXRlKQorICAgICAgICB7CisgICAgICAgICAgICBwdXNo
UGVuZGluZ0luc3RydWN0aW9uKCk7CisgICAgICAgICAgICBtX3BlbmRpbmdUeXBlID0gSW5zdHJ1
Y3Rpb25XaXRoVW5pcXVlQ29uc3Q7CisgICAgICAgICAgICBtX3BlbmRpbmdJbnN0ID0gaW5zdDsK
KyAgICAgICAgICAgIG1fcGVuZGluZ0ltbWVkaWF0ZSA9IGltbWVkaWF0ZTsKKyAgICAgICAgfQor
CisgICAgICAgIGludCBzaXplKCkKKyAgICAgICAgeworICAgICAgICAgICAgcHVzaFBlbmRpbmdJ
bnN0cnVjdGlvbigpOworICAgICAgICAgICAgcmV0dXJuIG1fc2l6ZTsKKyAgICAgICAgfQorCisg
ICAgICAgIEptcERzdCBsYWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKbXBE
c3QoY3JlYXRlSm1wRHN0KCkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogZXhlY3V0YWJs
ZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcik7CisKKyAgICBwcml2YXRlOgorICAgICAg
ICBBUk1JbnN0KiBhbGxvY0luc3QoKQorICAgICAgICB7CisgICAgICAgICAgICArK21fc2l6ZTsK
KyAgICAgICAgICAgIGlmIChtX2xhc3RQYWdlLT5zaXplIDwga1BhZ2VTaXplKQorICAgICAgICAg
ICAgICAgIHJldHVybiAmbV9sYXN0UGFnZS0+aW5zbnNbbV9sYXN0UGFnZS0+c2l6ZSsrXTsKKyAg
ICAgICAgICAgIHJldHVybiBhbGxvY1BhZ2UoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQq
IGdldExhYmVsQWRkcmVzcyhKbXBEc3QqIGxhYmVsKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQobV9jb2RlKTsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJldF9jYXN0PHZvaWQq
PihtX2NvZGUgKyBsYWJlbC0+bV9qbXBEc3QtPm1fb2Zmc2V0KTsKKyAgICAgICAgfQorCisgICAg
ICAgIEptcERzdEludGVybmFsKiBjcmVhdGVKbXBEc3QoKQorICAgICAgICB7CisgICAgICAgICAg
ICBKbXBEc3RJbnRlcm5hbCogam1wRHN0ID0gbV9sYWJlbHMuYWxsb2MoKTsKKyAgICAgICAgICAg
IGptcERzdC0+bV9vZmZzZXQgPSBzaXplKCk7CisgICAgICAgICAgICBqbXBEc3QtPm1fdXNlZCA9
IGZhbHNlOworICAgICAgICAgICAgbV9sYXN0TGFiZWwgPSBqbXBEc3Q7CisgICAgICAgICAgICBy
ZXR1cm4gam1wRHN0OworICAgICAgICB9CisKKyAgICAgICAgSm1wU3JjSW50ZXJuYWwqIGNyZWF0
ZUptcFNyYyhpbnQgb2Zmc2V0LCBib29sIHBhdGNoT25jZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgSm1wU3JjSW50ZXJuYWwqIGptcFNyYyA9IG1fYnJhbmNoZXMuYWxsb2MoKTsKKyAgICAgICAg
ICAgIGptcFNyYy0+bV90YXJnZXQgPSAwOworICAgICAgICAgICAgam1wU3JjLT5tX29mZnNldCA9
IG9mZnNldDsKKyAgICAgICAgICAgIGptcFNyYy0+bV9wYXRjaE9uY2UgPSBwYXRjaE9uY2U7Cisg
ICAgICAgICAgICBtX2xhc3RCcmFuY2ggPSBqbXBTcmM7CisgICAgICAgICAgICByZXR1cm4gam1w
U3JjOworICAgICAgICB9CisKKyAgICAgICAgQVJNSW5zdCogYWxsb2NQYWdlKCk7CisgICAgICAg
IHZvaWQgcHVzaENQb29sKCk7CisgICAgICAgIHZvaWQgcHVzaFBlbmRpbmdJbnN0cnVjdGlvbigp
OworICAgICAgICB2b2lkIHBhdGNoUENSZWwoQVJNSW5zdCogcGF0Y2hQQ0Zyb20sIEFSTUluc3Qq
IGNvZGVQdHIsIEFSTUluc3QqIGNvbnN0UG9vbCk7CisKKyAgICAgICAgZW51bSB7CisgICAgICAg
ICAgICBrQ29uc3RQb29sTWF4U2l6ZSA9IDUxMiwKKyAgICAgICAgICAgIGtQYWdlU2l6ZSA9IDEw
MjQgLSAyLAorICAgICAgICAgICAga0JyYW5jaFNpemUgPSAzMiwKKyAgICAgICAgICAgIGtJbnZh
bGlkRGlmZiA9IC0xLAorICAgICAgICB9OworCisgICAgICAgIHR5cGVkZWYgZW51bSB7CisgICAg
ICAgICAgICBOb3RoaW5nLAorICAgICAgICAgICAgSW5zdHJ1Y3Rpb24sCisgICAgICAgICAgICBJ
bnN0cnVjdGlvbldpdGhDb25zdCwKKyAgICAgICAgICAgIEluc3RydWN0aW9uV2l0aFVuaXF1ZUNv
bnN0LAorICAgICAgICB9IFBlbmRpbmdJbnN0cnVjdGlvblR5cGU7CisKKyAgICAgICAgc3RydWN0
IFBhZ2UgeworICAgICAgICAgICAgUGFnZSogbmV4dDsKKyAgICAgICAgICAgIEFSTVdvcmQgc2l6
ZTsKKyAgICAgICAgICAgIEFSTVdvcmQgaW5zbnNba1BhZ2VTaXplXTsKKyAgICAgICAgfTsKKwor
ICAgICAgICBpbnQgbV9zaXplOworICAgICAgICBQYWdlKiBtX2ZpcnN0UGFnZTsKKyAgICAgICAg
UGFnZSogbV9sYXN0UGFnZTsKKyAgICAgICAgV1RGOjpUYXBlPEptcERzdEludGVybmFsLCBrQnJh
bmNoU2l6ZT4gbV9sYWJlbHM7CisgICAgICAgIFdURjo6VGFwZTxKbXBTcmNJbnRlcm5hbCwga0Jy
YW5jaFNpemU+IG1fYnJhbmNoZXM7CisgICAgICAgIEptcERzdEludGVybmFsKiBtX2xhc3RMYWJl
bDsKKyAgICAgICAgSm1wU3JjSW50ZXJuYWwqIG1fbGFzdEJyYW5jaDsKKworICAgICAgICBBUk1X
b3JkIG1fY3Bvb2xba0NvbnN0UG9vbE1heFNpemVdOworICAgICAgICBib29sIG1fY3Bvb2xJc1Vu
aXF1ZVtrQ29uc3RQb29sTWF4U2l6ZV07CisgICAgICAgIGludCBtX2Nwb29sRGlmZjsKKyAgICAg
ICAgdWludDMyX3QgbV9jcG9vbFNpemU7CisKKyAgICAgICAgUGVuZGluZ0luc3RydWN0aW9uVHlw
ZSBtX3BlbmRpbmdUeXBlOworICAgICAgICBBUk1JbnN0IG1fcGVuZGluZ0luc3Q7CisgICAgICAg
IEFSTUluc3QgbV9wZW5kaW5nSW1tZWRpYXRlOworCisgICAgICAgIEFSTUluc3QqIG1fY29kZTsK
KyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJM
RVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2VuZGlmIC8vIEFzc2VtYmxlckJ1ZmZlckFSTV9oCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyWDg2Lmgg
Yi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyWDg2LmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjk4YTdlZgotLS0gL2Rldi9udWxsCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJYODYuaApAQCAtMCwwICsxLDE2
MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBM
RSBJTkMuIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQ
VVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgSU5DLiBPUgor
ICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lE
RU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAo
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElU
VVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7
IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVP
UlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElU
WSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lO
RyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElG
IEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5k
ZWYgQXNzZW1ibGVyQnVmZmVyWDg2X2gKKyNkZWZpbmUgQXNzZW1ibGVyQnVmZmVyWDg2X2gKKwor
I2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworI2lu
Y2x1ZGUgInN0ZGludC5oIgorI2luY2x1ZGUgPHN0cmluZy5oPgorI2luY2x1ZGUgPGppdC9FeGVj
dXRhYmxlQWxsb2NhdG9yLmg+CisjaW5jbHVkZSA8d3RmL0Fzc2VydGlvbnMuaD4KKyNpbmNsdWRl
IDx3dGYvRmFzdE1hbGxvYy5oPgorCituYW1lc3BhY2UgSlNDIHsKKworICAgIGNsYXNzIEFzc2Vt
YmxlckJ1ZmZlclg4NiB7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgaW5saW5lQ2FwYWNpdHkg
PSAyNTY7CisgICAgcHVibGljOgorICAgICAgICBBc3NlbWJsZXJCdWZmZXJYODYoKQorICAgICAg
ICAgICAgOiBtX2J1ZmZlcihtX2lubGluZUJ1ZmZlcikKKyAgICAgICAgICAgICwgbV9jYXBhY2l0
eShpbmxpbmVDYXBhY2l0eSkKKyAgICAgICAgICAgICwgbV9zaXplKDApCisgICAgICAgIHsKKyAg
ICAgICAgfQorCisgICAgICAgIH5Bc3NlbWJsZXJCdWZmZXJYODYoKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAobV9idWZmZXIgIT0gbV9pbmxpbmVCdWZmZXIpCisgICAgICAgICAgICAgICAg
ZmFzdEZyZWUobV9idWZmZXIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbnN1cmVTcGFj
ZShpbnQgc3BhY2UpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3NpemUgPiBtX2NhcGFj
aXR5IC0gc3BhY2UpCisgICAgICAgICAgICAgICAgZ3JvdygpOworICAgICAgICB9CisKKyAgICAg
ICAgYm9vbCBpc0FsaWduZWQoaW50IGFsaWdubWVudCkgY29uc3QKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuICEobV9zaXplICYgKGFsaWdubWVudCAtIDEpKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgcHV0Qnl0ZVVuY2hlY2tlZChpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVCghKG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSA0KSk7CisgICAgICAgICAgICBt
X2J1ZmZlclttX3NpemVdID0gdmFsdWU7CisgICAgICAgICAgICBtX3NpemUrKzsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgcHV0Qnl0ZShpbnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3NpemUgPiBtX2NhcGFjaXR5IC0gNCkKKyAgICAgICAgICAgICAgICBncm93KCk7
CisgICAgICAgICAgICBwdXRCeXRlVW5jaGVja2VkKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBBU1NFUlQoIShtX3NpemUgPiBtX2NhcGFjaXR5IC0gNCkpOworICAgICAgICAgICAgKnJl
aW50ZXJwcmV0X2Nhc3Q8c2hvcnQqPigmbV9idWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKKyAgICAg
ICAgICAgIG1fc2l6ZSArPSAyOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBwdXRTaG9ydChp
bnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3NpemUgPiBtX2NhcGFjaXR5
IC0gNCkKKyAgICAgICAgICAgICAgICBncm93KCk7CisgICAgICAgICAgICBwdXRTaG9ydFVuY2hl
Y2tlZCh2YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1dEludFVuY2hlY2tlZChp
bnQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludCo+
KCZtX2J1ZmZlclttX3NpemVdKSA9IHZhbHVlOworICAgICAgICAgICAgbV9zaXplICs9IDQ7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIHB1dEludDY0VW5jaGVja2VkKGludDY0X3QgdmFsdWUp
CisgICAgICAgIHsKKyAgICAgICAgICAgICpyZWludGVycHJldF9jYXN0PGludDY0X3QqPigmbV9i
dWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKKyAgICAgICAgICAgIG1fc2l6ZSArPSA4OworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBwdXRJbnQoaW50IHZhbHVlKQorICAgICAgICB7CisgICAgICAg
ICAgICBpZiAobV9zaXplID4gbV9jYXBhY2l0eSAtIDQpCisgICAgICAgICAgICAgICAgZ3Jvdygp
OworICAgICAgICAgICAgcHV0SW50VW5jaGVja2VkKHZhbHVlKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQqIGRhdGEoKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9i
dWZmZXI7CisgICAgICAgIH0KKworICAgICAgICBpbnQgc2l6ZSgpIGNvbnN0CisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBtX3NpemU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkKiBl
eGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQorICAgICAgICB7CisgICAg
ICAgICAgICBpZiAoIW1fc2l6ZSkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAg
ICAgICAgdm9pZCogcmVzdWx0ID0gYWxsb2NhdG9yLT5hbGxvYyhtX3NpemUpOworCisgICAgICAg
ICAgICBpZiAoIXJlc3VsdCkKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKworICAgICAgICAg
ICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6bWFrZVdyaXRhYmxlKHJlc3VsdCwgbV9zaXplKTsKKwor
ICAgICAgICAgICAgcmV0dXJuIG1lbWNweShyZXN1bHQsIG1fYnVmZmVyLCBtX3NpemUpOworICAg
ICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB2b2lkIGdyb3coKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2NhcGFjaXR5ICs9IG1fY2FwYWNpdHkgLyAyOworCisgICAgICAgICAgICBp
ZiAobV9idWZmZXIgPT0gbV9pbmxpbmVCdWZmZXIpIHsKKyAgICAgICAgICAgICAgICBjaGFyKiBu
ZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtX2NhcGFjaXR5KSk7Cisg
ICAgICAgICAgICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4obWVtY3B5KG5ld0J1
ZmZlciwgbV9idWZmZXIsIG1fc2l6ZSkpOworICAgICAgICAgICAgfSBlbHNlCisgICAgICAgICAg
ICAgICAgbV9idWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdFJlYWxsb2MobV9idWZmZXIs
IG1fY2FwYWNpdHkpKTsKKyAgICAgICAgfQorCisgICAgICAgIGNoYXIgbV9pbmxpbmVCdWZmZXJb
aW5saW5lQ2FwYWNpdHldOworICAgICAgICBjaGFyKiBtX2J1ZmZlcjsKKyAgICAgICAgaW50IG1f
Y2FwYWNpdHk7CisgICAgICAgIGludCBtX3NpemU7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2Ug
SlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKQorCisjZW5kaWYgLy8gQXNzZW1ibGVy
QnVmZmVyWDg2X2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fz
c2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5k
ZXggYzk3NDlhMC4uZDQwYzFiNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyLmgKQEAgLTQyLDYgKzQyLDEwIEBAIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3Jv
QXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKICNpbmNsdWRlICJNYWNyb0Fzc2Vt
Ymxlclg4Nl82NC5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODZf
NjQgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwogCisjZWxpZiBQTEFURk9STShBUk0pCisjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJBUk0uaCIKK25hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNz
ZW1ibGVyQVJNIE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKKwogI2Vsc2UKICNlcnJvciAiVGhlIE1h
Y3JvQXNzZW1ibGVyIGlzIG5vdCBzdXBwb3J0ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5kaWYK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
IGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKbmV3IGZpbGUg
bW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYzkyYmIyNwotLS0gL2Rldi9udWxsCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCkBAIC0wLDAgKzEsNzMz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAo
QykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAq
CisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3
aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0
aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJp
YnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0Cisg
KiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRp
c2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29u
ZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1l
bnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1
dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBB
UyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJF
IERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklC
VVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BF
Q0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcs
IEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMg
T1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5F
U1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0Yg
TElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JU
CisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBX
QVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBP
RiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYWNyb0Fz
c2VtYmxlckFSTV9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyQVJNX2gKKworI2luY2x1ZGUgPHd0
Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oQVJNKQor
CisjaW5jbHVkZSAiQVJNQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2Vt
Ymxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk0gOiBw
dWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk1Bc3NlbWJsZXI+IHsKK3B1YmxpYzoKKyAg
ICBlbnVtIENvbmRpdGlvbiB7CisgICAgICAgIEVxdWFsID0gQVJNQXNzZW1ibGVyOjpFUSwKKyAg
ICAgICAgTm90RXF1YWwgPSBBUk1Bc3NlbWJsZXI6Ok5FLAorICAgICAgICBBYm92ZSA9IEFSTUFz
c2VtYmxlcjo6SEksCisgICAgICAgIEFib3ZlT3JFcXVhbCA9IEFSTUFzc2VtYmxlcjo6Q1MsCisg
ICAgICAgIEJlbG93ID0gQVJNQXNzZW1ibGVyOjpDQywKKyAgICAgICAgQmVsb3dPckVxdWFsID0g
QVJNQXNzZW1ibGVyOjpMUywKKyAgICAgICAgR3JlYXRlclRoYW4gPSBBUk1Bc3NlbWJsZXI6OkdU
LAorICAgICAgICBHcmVhdGVyVGhhbk9yRXF1YWwgPSBBUk1Bc3NlbWJsZXI6OkdFLAorICAgICAg
ICBMZXNzVGhhbiA9IEFSTUFzc2VtYmxlcjo6TFQsCisgICAgICAgIExlc3NUaGFuT3JFcXVhbCA9
IEFSTUFzc2VtYmxlcjo6TEUsCisgICAgICAgIE92ZXJmbG93ID0gQVJNQXNzZW1ibGVyOjpWUywK
KyAgICAgICAgU2lnbmVkID0gQVJNQXNzZW1ibGVyOjpNSSwKKyAgICAgICAgWmVybyA9IEFSTUFz
c2VtYmxlcjo6RVEsCisgICAgICAgIE5vblplcm8gPSBBUk1Bc3NlbWJsZXI6Ok5FCisgICAgfTsK
KworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAgRG91YmxlRXF1YWwsIC8vRklY
TUUKKyAgICAgICAgRG91YmxlTm90RXF1YWwsIC8vRklYTUUKKyAgICAgICAgRG91YmxlR3JlYXRl
clRoYW4sIC8vRklYTUUKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCAvL0ZJWE1F
CisgICAgICAgIERvdWJsZUxlc3NUaGFuLCAvL0ZJWE1FCisgICAgICAgIERvdWJsZUxlc3NUaGFu
T3JFcXVhbCwgLy9GSVhNRQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBz
dGFja1BvaW50ZXJSZWdpc3RlciA9IEFSTTo6c3A7CisKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUg
U2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2ludCgp
IGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9vbCBz
dXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkc19yKGRlc3QsIGRlc3Qs
IHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIEFkZHJlc3MgYWRkcmVz
cykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBBUk06OlMxKTsKKyAgICAgICAgYWRk
MzIoaW1tLCBBUk06OlMxKTsKKyAgICAgICAgc3RvcmUzMihBUk06OlMxLCBhZGRyZXNzKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYWRkc19yKGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVyLmdldElt
bShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoQWRkcmVz
cyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIEFSTTo6
UzEpOworICAgICAgICBhZGQzMihBUk06OlMxLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIGFu
ZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hbmRzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFuZDMy
KEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVJNV29yZCB3ID0g
bV9hc3NlbWJsZXIuZ2V0SW52SW1tKGltbS5tX3ZhbHVlLCBBUk06OlMwKTsKKyAgICAgICAgaWYg
KHcgJiBBUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIu
Ymljc19yKGRlc3QsIGRlc3QsIHcgJiB+QVJNQXNzZW1ibGVyOjpPUDJfSU5WX0lNTSk7CisgICAg
ICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFuZHNfcihkZXN0LCBkZXN0LCB3KTsK
KyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92c19yKGRlc3QsIG1fYXNzZW1ibGVyLmxzbChk
ZXN0LCBpbW0ubV92YWx1ZSAmIDB4MWYpKTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKFJl
Z2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJsZXIubHNsX3IoZGVzdCwgc2hpZnRfYW1v
dW50KSk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyA9PSBkZXN0KSB7CisgICAgICAgICAgICBt
b3ZlKHNyYywgQVJNOjpTMCk7CisgICAgICAgICAgICBzcmMgPSBBUk06OlMwOworICAgICAgICB9
CisgICAgICAgIG1fYXNzZW1ibGVyLm11bHNfcihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKwor
ICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxl
ci5tdWxzX3IoZGVzdCwgc3JjLCBBUk06OlMwKTsKKyAgICB9CisKKyAgICB2b2lkIG5vdDMyKFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm12bnNfcihkZXN0LCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycnNfcihkZXN0LCBkZXN0LCBzcmMp
OworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycnNfcihkZXN0LCBkZXN0LCBtX2Fzc2VtYmxlci5n
ZXRJbW0oaW1tLm1fdmFsdWUsIEFSTTo6UzApKTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMy
KFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJsZXIuYXNyX3IoZGVzdCwgc2hpZnRf
YW1vdW50KSk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQzMihJbW0zMiBpbW0sIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdnNfcihkZXN0LCBtX2Fzc2Vt
Ymxlci5hc3IoZGVzdCwgaW1tLm1fdmFsdWUgJiAweDFmKSk7CisgICAgfQorCisgICAgdm9pZCBz
dWIzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuc3Vic19yKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBzdWIz
MihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LnN1YnNfcihkZXN0LCBkZXN0LCBtX2Fzc2VtYmxlci5nZXRJbW0oaW1tLm1fdmFsdWUsIEFSTTo6
UzApKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICBzdWIz
MihpbW0sIEFSTTo6UzEpOworICAgICAgICBzdG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAg
IH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIGxvYWQzMihzcmMsIEFSTTo6UzEpOworICAgICAgICBzdWIzMihBUk06OlMxLCBk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3JzX3IoZGVzdCwgZGVzdCwgc3Jj
KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yc19yKGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVy
LmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMy
KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5kYXRhVHJhbnNmZXIzMih0cnVlLCBkZXN0LCBhZGRyZXNzLmJhc2UsIGFk
ZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMihCYXNlSW5kZXggYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmFzZUluZGV4
VHJhbnNmZXIzMih0cnVlLCBkZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIHN0YXRp
Y19jYXN0PGludD4oYWRkcmVzcy5zY2FsZSksIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAg
ICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKEFkZHJlc3MgYWRkcmVz
cywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgRGF0YUxhYmVsMzIgZGF0YUxhYmVs
KHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHJfdW5faW1tKEFSTTo6UzAsIDApOworICAg
ICAgICBtX2Fzc2VtYmxlci5kdHJfdXIodHJ1ZSwgZGVzdCwgYWRkcmVzcy5iYXNlLCBBUk06OlMw
KTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBMYWJlbCBsb2FkUHRy
V2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIGRlc3Qp
OworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisgICAgdm9pZCBsb2FkMTYoQmFzZUlu
ZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
LmFkZF9yKEFSTTo6UzAsIGFkZHJlc3MuYmFzZSwgbV9hc3NlbWJsZXIubHNsKGFkZHJlc3MuaW5k
ZXgsIGFkZHJlc3Muc2NhbGUpKTsKKyAgICAgICAgaWYgKGFkZHJlc3Mub2Zmc2V0Pj0wKQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIubGRyaF91KGRlc3QsIEFSTTo6UzAsIEFSTUFzc2VtYmxlcjo6
Z2V0T3AyQnl0ZShhZGRyZXNzLm9mZnNldCkpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBt
X2Fzc2VtYmxlci5sZHJoX2QoZGVzdCwgQVJNOjpTMCwgQVJNQXNzZW1ibGVyOjpnZXRPcDJCeXRl
KC1hZGRyZXNzLm9mZnNldCkpOworICAgIH0KKworICAgIERhdGFMYWJlbDMyIHN0b3JlMzJXaXRo
QWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmxkcl91bl9pbW0oQVJNOjpTMCwgMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91cihm
YWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIEFSTTo6UzApOworICAgICAgICByZXR1cm4gZGF0YUxh
YmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgSW1wbGljaXRB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kYXRhVHJhbnNmZXIz
MihmYWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAg
ICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJbmRleCBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuYmFzZUluZGV4VHJhbnNmZXIzMihmYWxzZSwgc3JjLCBhZGRy
ZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIHN0YXRpY19jYXN0PGludD4oYWRkcmVzcy5zY2FsZSks
IGFkZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCBJ
bXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBBUk06OlMx
KTsKKyAgICAgICAgc3RvcmUzMihBUk06OlMxLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lk
IHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJlc3MpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcyksIEFS
TTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShmYWxzZSwgc3JjLCBBUk06OlMwLCAw
KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1tLCB2b2lkKiBhZGRyZXNzKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9jYXN0PEFSTVdv
cmQ+KGFkZHJlc3MpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShpbW0u
bV92YWx1ZSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KGZhbHNlLCBBUk06
OlMxLCBBUk06OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHBvcChSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wb3BfcihkZXN0KTsKKyAgICB9CisKKyAgICB2
b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wdXNo
X3Ioc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICBwdXNoKEFSTTo6UzEp
OworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0pCisgICAgeworICAgICAgICBtb3Zl
KGltbSwgQVJNOjpTMCk7CisgICAgICAgIHB1c2goQVJNOjpTMCk7CisgICAgfQorCisgICAgdm9p
ZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92ZUltbShpbW0ubV92YWx1ZSwgZGVzdCk7CisgICAgfQorCisgICAgdm9pZCBtb3Zl
KFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2Vt
Ymxlci5tb3ZfcihkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbW92ZShJbW1QdHIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0
LCBtX2Fzc2VtYmxlci5nZXRJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihpbW0ubV92YWx1
ZSksIEFSTTo6UzApKTsKKyAgICB9CisKKyAgICB2b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBS
ZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihBUk06OlMw
LCByZWcxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3IocmVnMSwgcmVnMik7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdl9yKHJlZzIsIEFSTTo6UzApOworICAgIH0KKworICAgIHZvaWQgc2ln
bkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7Cisg
ICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQzMlRvUHRyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9IGRlc3QpCisgICAgICAgICAgICBt
b3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29u
ZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuY21wX3IobGVmdCwgcmlnaHQpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKGxlZnQsIG1fYXNzZW1ibGVyLmdldEltbShyaWdodC5t
X3ZhbHVlLCBBUk06OlMwKSk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChB
Uk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlv
biBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCisgICAgeworICAgICAgICBs
b2FkMzIocmlnaHQsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgbGVm
dCwgQVJNOjpTMSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxl
ZnQsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNOjpTMSwgcmln
aHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
bGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgQVJNOjpTMSk7
CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7CisgICAgfQor
CisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMy
IHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIEFSTTo6UzEpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNOjpTMSwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOworICAgICAgICBVTlVTRURfUEFS
QU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganVtcCgpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBsZWZ0LCBJbW0zMiByaWdodCkKKyAg
ICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBBUk06OlMwKTsKKyAgICAgICAgbW92ZShyaWdodCwg
QVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKEFSTTo6UzAsIEFSTTo6UzEpOwor
ICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVn
LCBSZWdpc3RlcklEIG1hc2spCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gWmVybykg
fHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBtX2Fzc2VtYmxlci50c3RfcihyZWcsIG1h
c2spOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNv
bmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIFJl
Z2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgQVNT
RVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgQVJNV29y
ZCB3ID0gbV9hc3NlbWJsZXIuZ2V0SW52SW1tKG1hc2subV92YWx1ZSwgQVJNOjpTMCk7CisgICAg
ICAgIGlmICh3ICYgQVJNQXNzZW1ibGVyOjpPUDJfSU5WX0lNTSkKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmJpY3NfcihBUk06OlMwLCByZWcsIHcgJiB+QVJNQXNzZW1ibGVyOjpPUDJfSU5WX0lN
TSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRzdF9yKHJlZywgdyk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkp
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAgICAgbG9hZDMy
KGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMyKGNvbmQsIEFS
TTo6UzEsIG1hc2spOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBj
b25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFzayA9IEltbTMyKC0xKSkKKyAgICB7Cisg
ICAgICAgIGxvYWQzMihhZGRyZXNzLCBBUk06OlMxKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaFRl
c3QzMihjb25kLCBBUk06OlMxLCBtYXNrKTsKKyAgICB9CisKKyAgICBKdW1wIGp1bXAoKQorICAg
IHsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKCkpOworICAgIH0KKworICAg
IHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAgICB7CisgICAgICAgIG1vdmUodGFyZ2V0
LCBBUk06OnBjKTsKKyAgICB9CisKKyAgICB2b2lkIGp1bXAoQWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6cGMpOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09
IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAo
QVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hBZGQzMihDb25k
aXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBB
U1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0g
WmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBhZGQzMihpbW0sIGRlc3QpOwor
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7
CisgICAgfQorCisgICAgdm9pZCBtdWxsMzIoUmVnaXN0ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNy
YzIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMxID09IGRlc3QpIHsK
KyAgICAgICAgICAgIG1vdmUoc3JjMSwgQVJNOjpTMCk7CisgICAgICAgICAgICBzcmMxID0gQVJN
OjpTMDsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2VtYmxlci5tdWxsX3IoQVJNOjpTMSwgZGVz
dCwgc3JjMiwgc3JjMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKEFSTTo6UzEsIG1fYXNz
ZW1ibGVyLmFzcihkZXN0LCAzMSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29uZCA9PSBP
dmVyZmxvdykgeworICAgICAgICAgICAgbXVsbDMyKHNyYywgZGVzdCwgZGVzdCk7CisgICAgICAg
ICAgICBjb25kID0gTm9uWmVybzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAg
ICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAo
QVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25k
aXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWdu
ZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgaWYg
KGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAgIG1vdmUoaW1tLCBBUk06OlMwKTsKKyAg
ICAgICAgICAgIG11bGwzMihBUk06OlMwLCBzcmMsIGRlc3QpOworICAgICAgICAgICAgY29uZCA9
IE5vblplcm87CisgICAgICAgIH0KKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbXVsMzIoaW1t
LCBzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29u
ZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hTdWIzMihDb25kaXRpb24g
Y29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFT
U0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBa
ZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIHN1YjMyKHNyYywgZGVzdCk7Cisg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxv
dykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25a
ZXJvKSk7CisgICAgICAgIHN1YjMyKGltbSwgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1f
YXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICB2b2lkIGJy
ZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmtwdCgwKTsKKyAgICB9CisK
KyAgICBDYWxsIG5lYXJDYWxsKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnByZXBhcmVD
YWxsKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcCgpLCBDYWxsOjpMaW5r
YWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklEIHRhcmdldCkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnByZXBhcmVDYWxsKCk7CisgICAgICAgIG1vdmUoQVJN
OjpwYywgdGFyZ2V0KTsKKyAgICAgICAgSm1wU3JjIGptcFNyYzsKKyAgICAgICAgcmV0dXJuIENh
bGwoam1wU3JjLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGwoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY2FsbDMyKGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAg
IHBvcChBUk06OnBjKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBS
ZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIoMCkpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6OmdldE9wMigxKSwgQVJNQ29uZGl0aW9u
KGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3Rl
cklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBfcihsZWZ0LCBtX2Fzc2VtYmxlci5nZXRJbW0ocmlnaHQubV92YWx1ZSwg
QVJNOjpTMCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6
OmdldE9wMigwKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxl
cjo6Z2V0T3AyKDEpLCBBUk1Db25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgc2V0
VGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBBUk06OlMxKTsKKyAg
ICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNt
cF9yKDAsIEFSTTo6UzEpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci50
c3RfcihBUk06OlMxLCBtX2Fzc2VtYmxlci5nZXRJbW0obWFzay5tX3ZhbHVlLCBBUk06OlMwKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDAp
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIo
MSksIEFSTUNvbmRpdGlvbihjb25kKSk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBp
bW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5hZGRfcihkZXN0LCBzcmMsIG1fYXNzZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwg
QVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFk
ZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRl
cnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1fcHRyKSwgQVJNOjpTMSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmR0cl91KHRydWUsIEFSTTo6UzEsIEFSTTo6UzEsIDApOworICAgICAgICBhZGQz
MihpbW0sIEFSTTo6UzEpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0
X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5kdHJfdShmYWxzZSwgQVJNOjpTMSwgQVJNOjpTMCwgMCk7CisgICAgfQorCisgICAgdm9p
ZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3Mu
bV9wdHIpLCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UodHJ1ZSwgQVJNOjpT
MSwgQVJNOjpTMSwgMCk7CisgICAgICAgIHN1YjMyKGltbSwgQVJNOjpTMSk7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1fcHRy
KSwgQVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KGZhbHNlLCBBUk06OlMxLCBB
Uk06OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQzMih2b2lkKiBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcyksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxl
ci5kdHJfdSh0cnVlLCBkZXN0LCBBUk06OlMwLCAwKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0Lm1fcHRyLCBBUk06OlMxKTsKKyAgICAgICAg
cmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTTo6UzEsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1w
IGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFkZHJlc3MgbGVmdCwgSW1tMzIgcmln
aHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgQVJNOjpTMSk7CisgICAgICAg
IHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7CisgICAgfQorCisgICAgQ2Fs
bCBjYWxsKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnByZXBhcmVDYWxsKCk7CisgICAg
ICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcCgpLCBDYWxsOjpMaW5rYWJsZSk7CisgICAg
fQorCisgICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgpCisgICAgeworICAgICAgICByZXR1cm4g
Q2FsbDo6ZnJvbVRhaWxKdW1wKGp1bXAoKSk7CisgICAgfQorCisgICAgQ2FsbCBtYWtlVGFpbFJl
Y3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGw6OmZy
b21UYWlsSnVtcChvbGRKdW1wKTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgbW92ZVdpdGhQ
YXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAg
ICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHJf
dW5faW1tKGRlc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oaW5pdGlhbFZhbHVlLm1fdmFs
dWUpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBEYXRhTGFiZWxQ
dHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQorICAg
IHsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwg
QVJNOjpTMSk7CisgICAgICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNvbmQsIGxlZnQsIEFSTTo6
UzEpOworICAgICAgICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICByZXR1cm4ganVt
cDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwg
QWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdo
dFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIEFSTTo6UzEp
OworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxSaWdodFZhbHVlLCBB
Uk06OlMwKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29uZCwgQVJNOjpTMCwgQVJN
OjpTMSk7CisgICAgICAgIGp1bXAuZW5hYmxlTGF0ZVBhdGNoKCk7CisgICAgICAgIHJldHVybiBq
dW1wOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIg
aW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIERh
dGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRpYWxWYWx1ZSwgQVJNOjpT
MSk7CisgICAgICAgIHN0b3JlMzIoQVJNOjpTMSwgYWRkcmVzcyk7CisgICAgICAgIHJldHVybiBk
YXRhTGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0aFBhdGNoKElt
cGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0b3JlUHRyV2l0
aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7CisgICAgfQorCisgICAgLyogRlAgKi8KKyAgICB2
b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOworICAgICAgICBVTlVTRURf
UEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAg
IHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGFkZHJlc3MpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAg
ICB2b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVz
dCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgYWRk
RG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVO
VVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0
ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAg
IFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
fQorCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAg
ICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAg
ICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGNvbnZlcnRJbnQz
MlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAg
ICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoRG91Ymxl
KERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklEIHJp
Z2h0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOworICAgICAgICBVTlVTRURf
UEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7CisgICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganVtcCgpOworICAgIH0KKworICAgIC8v
IFRydW5jYXRlcyAnc3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2VzIHRoZSByZXN1bHRpbmcg
J2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJlc2VudGFibGUgYXMgYSAz
MiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAvLyBNYXkgYWxzbyBicmFuY2ggZm9yIHNvbWUgdmFs
dWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUgaW4gMzIgYml0cworICAgIC8vIChzcGVjaWZpY2Fs
bHksIGluIHRoaXMgY2FzZSwgSU5UX01JTikuCisgICAgSnVtcCBicmFuY2hUcnVuY2F0ZURvdWJs
ZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgfQor
Citwcm90ZWN0ZWQ6CisgICAgQVJNQXNzZW1ibGVyOjpDb25kaXRpb24gQVJNQ29uZGl0aW9uKENv
bmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFSTUFzc2Vt
Ymxlcjo6Q29uZGl0aW9uPihjb25kKTsKKyAgICB9Cit9OworCit9CisKKyNlbmRpZgorCisjZW5k
aWYgLy8gTWFjcm9Bc3NlbWJsZXJBUk1faApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL1g4NkFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oCmluZGV4IDdhOGI1OGQuLjVmMjg4N2IgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgKQEAgLTIyNiw2ICsyMjYsMTAgQEAgcHVibGljOgogICAgICAgICB7CiAg
ICAgICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpCisgICAgICAgIHsKKyAg
ICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCiAgICAg
ICAgICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2su
Y3BwCmluZGV4IGQyYjEyMmEuLmU3YWMzMzEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcApAQCAtMTQ3MCw3ICsxNDcwLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlcGFyc2VGb3JF
eGNlcHRpb25JbmZvSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgICAg
ICBBU1NFUlQobmV3Q29kZUJsb2NrLm1fZXhjZXB0aW9uSW5mbyk7CiAgICAgICAgICAgICBBU1NF
UlQobmV3Q29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25Db3VudCA9PSBtX2luc3RydWN0aW9uQ291bnQp
OwogCi0jaWYgRU5BQkxFKEpJVCkKKyNpZiBFTkFCTEUoSklUKSAmJiAhUExBVEZPUk0oQVJNKQog
ICAgICAgICAgICAgSklUOjpjb21waWxlKG1fZ2xvYmFsRGF0YSwgJm5ld0NvZGVCbG9jayk7CiAg
ICAgICAgICAgICBBU1NFUlQobmV3RnVuY3Rpb25Cb2R5LT5nZW5lcmF0ZWRKSVRDb2RlKCkuc2l6
ZSgpID09IG93bmVyTm9kZSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCkuc2l6ZSgpKTsKICNlbmRpZgpA
QCAtMTQ5MSw3ICsxNDkxLDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlcGFyc2VGb3JFeGNlcHRpb25J
bmZvSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAgICAgICAgICBBU1NFUlQo
bmV3Q29kZUJsb2NrLm1fZXhjZXB0aW9uSW5mbyk7CiAgICAgICAgICAgICBBU1NFUlQobmV3Q29k
ZUJsb2NrLm1faW5zdHJ1Y3Rpb25Db3VudCA9PSBtX2luc3RydWN0aW9uQ291bnQpOwogCi0jaWYg
RU5BQkxFKEpJVCkKKyNpZiBFTkFCTEUoSklUKSAmJiAhUExBVEZPUk0oQVJNKQogICAgICAgICAg
ICAgSklUOjpjb21waWxlKG1fZ2xvYmFsRGF0YSwgJm5ld0NvZGVCbG9jayk7CiAgICAgICAgICAg
ICBBU1NFUlQobmV3RXZhbEJvZHktPmdlbmVyYXRlZEpJVENvZGUoKS5zaXplKCkgPT0gb3duZXJO
b2RlKCktPmdlbmVyYXRlZEpJVENvZGUoKS5zaXplKCkpOwogI2VuZGlmCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCmluZGV4IGFjMjljNmMuLjE1YTUxMWUgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVj
b2RlL0NvZGVCbG9jay5oCkBAIC0zMDUsNyArMzA1LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQ2FsbEZyYW1lKiBjYWxsRnJhbWUsIHZvaWQq
IG5hdGl2ZVBDKQogICAgICAgICB7CiAgICAgICAgICAgICByZXBhcnNlRm9yRXhjZXB0aW9uSW5m
b0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gYmluYXJ5Q2hvcDxD
YWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9m
ZnNldD4obV9leGNlcHRpb25JbmZvLT5tX2NhbGxSZXR1cm5JbmRleFZlY3Rvci5iZWdpbigpLCBt
X2V4Y2VwdGlvbkluZm8tPm1fY2FsbFJldHVybkluZGV4VmVjdG9yLnNpemUoKSwgb3duZXJOb2Rl
KCktPmdlbmVyYXRlZEpJVENvZGUoKS5vZmZzZXRPZihuYXRpdmVQQykpLT5ieXRlY29kZUluZGV4
OworICAgICAgICAgICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KGNhbGxSZXR1cm5JbmRleFZl
Y3RvcigpLmJlZ2luKCksIGNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnNpemUoKSwgb3duZXJOb2Rl
KCktPmdlbmVyYXRlZEpJVENvZGUoKS5vZmZzZXRPZihuYXRpdmVQQykpLT5ieXRlY29kZUluZGV4
OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGZ1bmN0aW9uUmVnaXN0ZXJGb3JC
eXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBmdW5jdGlvblJlZ2lz
dGVySW5kZXgpOwpAQCAtMzg4LDggKzM4OCwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
TGluZUluZm8mIGxhc3RMaW5lSW5mbygpIHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVy
biBtX2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8ubGFzdCgpOyB9CiAKICNpZiBFTkFCTEUoSklU
KQorI2lmIFBMQVRGT1JNKEFSTSkKKyAgICAgICAgLy8gT24gQVJNLCB3ZSBjYW5ub3QgcmVjcmVh
dGUgdGhlIHNhbWUgaW5zdHVyY3Rpb24gc2VxdWVuY2UsIGJlY2F1c2UgdGhlIHJlbGF0aXZlIGNh
bGxzCisgICAgICAgIC8vIGFuZCBjb25zdGFudHMgYXJlIG5vdCBuZWNlc3NhcnkgdGhlIHNhbWUg
KHRodXMsIHRoZSBpbnN0cnVjdGlvbiBzZXF1ZW5jZSBtYXkgY2hhbmdlKQorICAgICAgICBWZWN0
b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVJbmRleD4mIGNhbGxSZXR1cm5JbmRleFZlY3Rv
cigpIHsgcmV0dXJuIG1fY2FsbFJldHVybkluZGV4VmVjdG9yOyB9CisjZWxzZQogICAgICAgICBW
ZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVJbmRleD4mIGNhbGxSZXR1cm5JbmRleFZl
Y3RvcigpIHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVybiBtX2V4Y2VwdGlvbkluZm8t
Pm1fY2FsbFJldHVybkluZGV4VmVjdG9yOyB9CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgICAgIC8v
IENvbnN0YW50IFBvb2wKIApAQCAtNTA2LDExICs1MTIsMTQgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgICAgICBWZWN0b3I8TGluZUluZm8+IG1fbGluZUluZm87CiAgICAgICAgICAgICBWZWN0
b3I8R2V0QnlJZEV4Y2VwdGlvbkluZm8+IG1fZ2V0QnlJZEV4Y2VwdGlvbkluZm87CiAKLSNpZiBF
TkFCTEUoSklUKQorI2lmIEVOQUJMRShKSVQpICYmICFQTEFURk9STShBUk0pCiAgICAgICAgICAg
ICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVJbmRleD4gbV9jYWxsUmV0dXJuSW5k
ZXhWZWN0b3I7CiAjZW5kaWYKICAgICAgICAgfTsKICAgICAgICAgT3duUHRyPEV4Y2VwdGlvbklu
Zm8+IG1fZXhjZXB0aW9uSW5mbzsKKyNpZiBFTkFCTEUoSklUKSAmJiBQTEFURk9STShBUk0pCisg
ICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4PiBtX2NhbGxSZXR1
cm5JbmRleFZlY3RvcjsKKyNlbmRpZgogCiAgICAgICAgIHN0cnVjdCBSYXJlRGF0YSB7CiAgICAg
ICAgICAgICBWZWN0b3I8SGFuZGxlckluZm8+IG1fZXhjZXB0aW9uSGFuZGxlcnM7CmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oIGIvSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAppbmRleCA3Y2FiMjU0Li5mN2NkYmRjIDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmgKQEAgLTQ1LDcgKzQ1LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgY2xhc3MgRnVuY3Rpb25Cb2R5Tm9kZTsKICAgICBjbGFz
cyBJbnN0cnVjdGlvbjsKICAgICBjbGFzcyBJbnRlcm5hbEZ1bmN0aW9uOwotICAgIGNsYXNzIEFz
c2VtYmxlckJ1ZmZlcjsKICAgICBjbGFzcyBKU0Z1bmN0aW9uOwogICAgIGNsYXNzIEpTR2xvYmFs
T2JqZWN0OwogICAgIGNsYXNzIFByb2dyYW1Ob2RlOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmgKaW5kZXggYTU0NWIwYy4uOWExNWI2MyAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCkBAIC0yMTMsNiArMjEzLDkgQEAgcHJpdmF0ZToKICNl
bGlmIFBMQVRGT1JNKEFSTV9WNykgJiYgUExBVEZPUk0oSVBIT05FKQogICAgICAgICBzeXNfZGNh
Y2hlX2ZsdXNoKGNvZGUsIHNpemUpOwogICAgICAgICBzeXNfaWNhY2hlX2ludmFsaWRhdGUoY29k
ZSwgc2l6ZSk7CisjZWxpZiBQTEFURk9STShBUk0pCisgICAgICAgIFVOVVNFRF9QQVJBTShjb2Rl
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNpemUpOwogI2Vsc2UKICNlcnJvciAiRXhlY3V0YWJs
ZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaCBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4i
CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuY3BwIGIvSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5jcHAKaW5kZXggMGNmYjUzNS4uOGY2YjYzOSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5j
cHAKQEAgLTQ2NiwxMSArNDY2LDE2IEBAIHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZSgpCiAgICAg
ICAgICAgICBwYXRjaEJ1ZmZlci5saW5rKGl0ZXItPmZyb20sIEZ1bmN0aW9uUHRyKGl0ZXItPnRv
KSk7CiAgICAgfQogCisjaWYgUExBVEZPUk0oQVJNKQorICAgIGZvciAoVmVjdG9yPENhbGxSZWNv
cmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5k
KCk7ICsraXRlcikKKyAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3Rvcigp
LmFwcGVuZChDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4KHBhdGNoQnVmZmVyLnJldHVy
bkFkZHJlc3NPZmZzZXQoaXRlci0+ZnJvbSksIGl0ZXItPmJ5dGVjb2RlSW5kZXgpKTsKKyNlbHNl
CiAgICAgaWYgKG1fY29kZUJsb2NrLT5oYXNFeGNlcHRpb25JbmZvKCkpIHsKICAgICAgICAgbV9j
b2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShtX2NhbGxz
LnNpemUoKSk7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVy
ID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikKICAgICAg
ICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJl
dHVybk9mZnNldFRvQnl0ZWNvZGVJbmRleChwYXRjaEJ1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0
KGl0ZXItPmZyb20pLCBpdGVyLT5ieXRlY29kZUluZGV4KSk7CiAgICAgfQorI2VuZGlmCiAKICAg
ICAvLyBMaW5rIGFic29sdXRlIGFkZHJlc3NlcyBmb3IganNyCiAgICAgZm9yIChWZWN0b3I8SlNS
SW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzclNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JT
aXRlcy5lbmQoKTsgKytpdGVyKQpAQCAtNTA1LDYgKzUxMCw2MyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGUoKQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGlu
ZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSog
Z2xvYmFsRGF0YSwgQ29kZVB0ciogY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBj
dGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2FsbFByZUxpbmss
IENvZGVQdHIqIGN0aVZpcnR1YWxDYWxsTGluaywgQ29kZVB0ciogY3RpVmlydHVhbENhbGwsIENv
ZGVQdHIqIGN0aU5hdGl2ZUNhbGxUaHVuaykKIHsKKyNpZiBQTEFURk9STShBUk0pCisgICAgLy8g
eDg2IHJldHVybgorICAgIGFsaWduKCk7CisgICAgcmV0KCk7CisKKyAgICAvLyBjdGlUcmFtcG9s
aW5lCisgICAgTGFiZWwgY3RpVHJhbXBvbGluZUJlZ2luID0gbGFiZWwoKTsKKworICAgIHB1c2go
cmVnTGluayk7CisgICAgcHVzaChyZWdTMSk7CisgICAgcHVzaChyZWdUMyk7CisgICAgcHVzaChj
dGlSZXR1cm5SZWdpc3Rlcik7CisgICAgcHVzaCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CisgICAg
cHVzaChjYWxsRnJhbWVSZWdpc3Rlcik7CisKKyAgICAvLyBUaGUgZm9sbG93aW5nIHR3byBpbnN0
cnVjdGlvbnMgaGF2ZSB0byBwb2ludCB0byB0aGUgY3RpQ3VzdG9tUmV0dXJuQmVnaW4gYWRkcmVz
cyEKKyAgICBtb3ZlKEFSTTo6cGMsIGN0aVJldHVyblJlZ2lzdGVyKTsKKyAgICBzdWIzMihJbW0z
MigzNiksIGN0aVJldHVyblJlZ2lzdGVyKTsKKworICAgIHN1YjMyKEltbTMyKDI4KSwgcmVnU3Rh
Y2tQdHIpOworCisgICAgbG9hZDMyKEFkZHJlc3MocmVnU3RhY2tQdHIsIDYwKSwgY2FsbEZyYW1l
UmVnaXN0ZXIpOworICAgIG1vdmUoSW1tMzIoNTEyKSwgdGltZW91dENoZWNrUmVnaXN0ZXIpOwor
CisgICAgY2FsbChBZGRyZXNzKHJlZ1N0YWNrUHRyLCA1MikpOworCisgICAgYWRkMzIoSW1tMzIo
MjgpLCByZWdTdGFja1B0cik7CisgICAgcG9wKGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBwb3Ao
dGltZW91dENoZWNrUmVnaXN0ZXIpOworICAgIHBvcChjdGlSZXR1cm5SZWdpc3Rlcik7CisgICAg
cG9wKHJlZ1QzKTsKKyAgICBwb3AocmVnUzEpOworCisgICAgcmV0KCk7CisKKyAgICAvLyBjdGlW
TVRocm93VHJhbXBvbGluZQorICAgIExhYmVsIGN0aVZNVGhyb3dUcmFtcG9saW5lQmVnaW4gPSBs
YWJlbCgpOworCisgICAgbW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgZmlyc3RBcmd1bWVudFJl
Z2lzdGVyKTsKKyAgICBjdXN0b21SZXR1cm4oKTsKKyAgICBDYWxsIGNhbGxDdGlWTVRocm93ID0g
bmVhckNhbGwoKTsKKworICAgIC8vIG5vIGJyZWFrCisgICAgLy8gY3RpT3BUaHJvd05vdENhdWdo
dAorICAgIExhYmVsIGN0aU9wVGhyb3dOb3RDYXVnaHRCZWdpbiA9IGxhYmVsKCk7CisKKyAgICBh
ZGQzMihJbW0zMigyOCksIHJlZ1N0YWNrUHRyKTsKKyAgICBwb3AoY2FsbEZyYW1lUmVnaXN0ZXIp
OworICAgIHBvcCh0aW1lb3V0Q2hlY2tSZWdpc3Rlcik7CisgICAgcG9wKGN0aVJldHVyblJlZ2lz
dGVyKTsKKyAgICBwb3AocmVnVDMpOworICAgIHBvcChyZWdTMSk7CisKKyAgICByZXQoKTsKKwor
I2VuZGlmCisKICNpZiBFTkFCTEUoSklUX09QVElNSVpFX1BST1BFUlRZX0FDQ0VTUykKICAgICAv
LyAoMSkgVGhlIGZpcnN0IGZ1bmN0aW9uIHByb3ZpZGVzIGZhc3QgcHJvcGVydHkgYWNjZXNzIGZv
ciBhcnJheSBsZW5ndGgKICAgICBMYWJlbCBhcnJheUxlbmd0aEJlZ2luID0gYWxpZ24oKTsKQEAg
LTU1Niw2ICs2MTgsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIEp1bXAgaXNOYXRp
dmVGdW5jMSA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDApOwogICAgIHByZXZlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7CisgICAgY3VzdG9tUmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxsSlNGdW5jdGlvbjEgPSBjYWxs
KCk7CiAgICAgZW1pdEdldEpJVFN0dWJBcmcoMSwgcmVnVDIpOwogICAgIGVtaXRHZXRKSVRTdHVi
QXJnKDMsIHJlZ1QxKTsKQEAgLTU2OCw2ICs2MzEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZQogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAyKTsKICAgICBlbWl0UHV0SklUU3R1YkFy
ZyhyZWdUMCwgNCk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgY3VzdG9t
UmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjazEgPSBjYWxsKCk7CiAgICAgbW92ZShy
ZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGVtaXRHZXRKSVRTdHViQXJnKDEsIHJlZ1Qy
KTsKQEAgLTU4MSw2ICs2NDUsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5l
VHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIHByZXZl
cnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgZW1pdFB1dEpJVFN0dWJBcmco
cmVnVDMsIDIpOwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZSgpOworICAgIGN1c3RvbVJl
dHVybigpOwogICAgIENhbGwgY2FsbERvbnRMYXp5TGlua0NhbGwgPSBjYWxsKCk7CiAgICAgZW1p
dEdldEpJVFN0dWJBcmcoMSwgcmVnVDIpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3Jl
UmV0dXJuKHJlZ1QzKTsKQEAgLTU5OCw2ICs2NjMsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZQogICAgIEp1bXAgaXNOYXRpdmVGdW5jMiA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDAp
OwogICAgIHByZXZlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgcmVzdG9y
ZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgY3VzdG9tUmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxs
SlNGdW5jdGlvbjIgPSBjYWxsKCk7CiAgICAgZW1pdEdldEpJVFN0dWJBcmcoMSwgcmVnVDIpOwog
ICAgIGVtaXRHZXRKSVRTdHViQXJnKDMsIHJlZ1QxKTsKQEAgLTYxMCw2ICs2NzYsNyBAQCB2b2lk
IEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFi
bGVQb29sPiogZXhlY3V0YWJsZQogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAyKTsKICAg
ICBlbWl0UHV0SklUU3R1YkFyZyhyZWdUMCwgNCk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJl
bmNlKCk7CisgICAgY3VzdG9tUmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjazIgPSBj
YWxsKCk7CiAgICAgbW92ZShyZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGVtaXRHZXRK
SVRTdHViQXJnKDEsIHJlZ1QyKTsKQEAgLTYyMyw2ICs2OTAsNyBAQCB2b2lkIEpJVDo6cHJpdmF0
ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhl
Y3V0YWJsZQogICAgIHByZXZlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAg
ZW1pdFB1dEpJVFN0dWJBcmcocmVnVDMsIDIpOwogICAgIHJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZSgpOworICAgIGN1c3RvbVJldHVybigpOwogICAgIENhbGwgY2FsbExhenlMaW5rQ2FsbCA9IGNh
bGwoKTsKICAgICByZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihyZWdUMyk7CiAKQEAg
LTYzOSw2ICs3MDcsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIEp1bXAgaXNOYXRp
dmVGdW5jMyA9IGJyYW5jaFRlc3RQdHIoTm9uWmVybywgcmVnVDApOwogICAgIHByZXZlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChyZWdUMyk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNl
KCk7CisgICAgY3VzdG9tUmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxsSlNGdW5jdGlvbjMgPSBjYWxs
KCk7CiAgICAgZW1pdEdldEpJVFN0dWJBcmcoMSwgcmVnVDIpOwogICAgIGVtaXRHZXRKSVRTdHVi
QXJnKDMsIHJlZ1QxKTsKQEAgLTY1Miw2ICs3MjEsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBp
bGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJs
ZQogICAgIGVtaXRQdXRKSVRTdHViQXJnKHJlZ1QzLCAyKTsKICAgICBlbWl0UHV0SklUU3R1YkFy
ZyhyZWdUMCwgNCk7CiAgICAgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CisgICAgY3VzdG9t
UmV0dXJuKCk7CiAgICAgQ2FsbCBjYWxsQXJpdHlDaGVjazMgPSBjYWxsKCk7CiAgICAgbW92ZShy
ZWdUMSwgY2FsbEZyYW1lUmVnaXN0ZXIpOwogICAgIGVtaXRHZXRKSVRTdHViQXJnKDEsIHJlZ1Qy
KTsKQEAgLTcxNCw2ICs3ODQsNDYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGlu
ZVRyYW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKICAgICBjYWxs
KEFkZHJlc3MoWDg2Ojplc2ksIEZJRUxEX09GRlNFVChKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CiAg
ICAgCiAgICAgYWRkUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lz
dGVyKTsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRl
cjMyKFJlZ2lzdGVyRmlsZTo6QXJndW1lbnRDb3VudCwgcmVnVDApOworCisgICAgLy8gQWxsb2Nh
dGUgc3RhY2sgc3BhY2UgZm9yIG91ciBhcmdsaXN0CisgICAgQ09NUElMRV9BU1NFUlQoKHNpemVv
ZihBcmdMaXN0KSAmIDB4NykgPT0gMCwgQXJnTGlzdF9zaG91bGRfYnlfOGJ5dGVfYWxpZ25lZCk7
CisgICAgc3ViUHRyKEltbTMyKHNpemVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVy
KTsKKworICAgIC8vIFNldCB1cCBhcmd1bWVudHMKKyAgICBzdWJQdHIoSW1tMzIoMSksIHJlZ1Qw
KTsgLy8gRG9uJ3QgaW5jbHVkZSAndGhpcycgaW4gYXJnY291bnQKKworICAgIC8vIFB1c2ggYXJn
Y291bnQKKyAgICBzdG9yZVB0cihyZWdUMCwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rlciwg
RklFTERfT0ZGU0VUKEFyZ0xpc3QsIG1fYXJnQ291bnQpKSk7CisKKyAgICAvLyBDYWxjdWxhdGUg
dGhlIHN0YXJ0IG9mIHRoZSBjYWxsZnJhbWUgaGVhZGVyLCBhbmQgc3RvcmUgaW4gcmVnVDEKKyAg
ICBtb3ZlKGNhbGxGcmFtZVJlZ2lzdGVyLCByZWdUMSk7CisgICAgc3ViMzIoSW1tMzIoUmVnaXN0
ZXJGaWxlOjpDYWxsRnJhbWVIZWFkZXJTaXplICogKGludDMyX3Qpc2l6ZW9mKFJlZ2lzdGVyKSks
IHJlZ1QxKTsKKworICAgIC8vIENhbGN1bGF0ZSBzdGFydCBvZiBhcmd1bWVudHMgYXMgY2FsbGZy
YW1lIGhlYWRlciAtIHNpemVvZihSZWdpc3RlcikgKiBhcmdjb3VudCAocmVnVDEpCisgICAgbXVs
MzIoSW1tMzIoc2l6ZW9mKFJlZ2lzdGVyKSksIHJlZ1QwLCByZWdUMCk7CisgICAgc3ViUHRyKHJl
Z1QwLCByZWdUMSk7CisKKyAgICAvLyBwdXNoIHBvaW50ZXIgdG8gYXJndW1lbnRzCisgICAgc3Rv
cmVQdHIocmVnVDEsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEZJRUxEX09GRlNFVChB
cmdMaXN0LCBtX2FyZ3MpKSk7CisKKyAgICAvLyBTZXR1cCBhcmczOiByZWdUMSBjdXJyZW50bHkg
cG9pbnRzIHRvIHRoZSBmaXJzdCBhcmd1bWVudCwgcmVnVDEtc2l6ZW9mKFJlZ2lzdGVyKSBwb2lu
dHMgdG8gJ3RoaXMnCisgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludDMyX3Qpc2l6ZW9m
KFJlZ2lzdGVyKSksIHJlZ1QyKTsKKworICAgIC8vIFNldHVwIGFyZzI6CisgICAgZW1pdEdldEZy
b21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZWUsIHJlZ1QxKTsKKworICAg
IC8vIFNldHVwIGFyZzE6CisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDApOworCisg
ICAgLy8gU2V0dXAgYXJnNDogVGhpcyBpcyBhIHBsYWluIGhhY2sKKyAgICBtb3ZlKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBBUk06OlMwKTsKKworICAgIGN1c3RvbVJldHVybigpOworICAgIGNhbGwo
QWRkcmVzcyhyZWdUMSwgRklFTERfT0ZGU0VUKEpTRnVuY3Rpb24sIG1fZGF0YSkpKTsKKworICAg
IGFkZFB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAj
ZWxpZiBQTEFURk9STShYODYpCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihSZWdp
c3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKIApAQCAtNzc4LDYgKzg4OCw3IEBAIHZv
aWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0
YWJsZVBvb2w+KiBleGVjdXRhYmxlCiAgICAgbG9hZFB0cihBZGRyZXNzKHJlZ1QxLCAtKGludClz
aXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEpOwogICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHN0
YWNrUG9pbnRlclJlZ2lzdGVyLCBGSUVMRF9PRkZTRVQoTmF0aXZlQ2FsbEZyYW1lU3RydWN0dXJl
LCB0aGlzVmFsdWUpKSk7CiAKKyNpZiBQTEFURk9STShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkK
ICNpZiBDT01QSUxFUihNU1ZDKSB8fCBQTEFURk9STShMSU5VWCkKICAgICAvLyBBcmdMaXN0IGlz
IHBhc3NlZCBieSByZWZlcmVuY2Ugc28gaXMgc3RhY2tQb2ludGVyUmVnaXN0ZXIgKyA0ICogc2l6
ZW9mKFJlZ2lzdGVyKQogICAgIGFkZFB0cihJbW0zMihGSUVMRF9PRkZTRVQoTmF0aXZlQ2FsbEZy
YW1lU3RydWN0dXJlLCByZXN1bHQpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIsIFg4Njo6ZWN4KTsK
QEAgLTgxMSw2ICs5MjIsNyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJh
bXBvbGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogI2Vsc2UKICAgICBi
cmVha3BvaW50KCk7CiAjZW5kaWYKKyNlbmRpZgogCiAgICAgLy8gQ2hlY2sgZm9yIGFuIGV4Y2Vw
dGlvbgogICAgIGxvYWRQdHIoJihnbG9iYWxEYXRhLT5leGNlcHRpb24pLCByZWdUMik7CkBAIC04
MzIsMTIgKzk0NCwxNSBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6UmV0dXJuUEMsIHJlZ1QxKTsKICAgICBt
b3ZlKEltbVB0cigmZ2xvYmFsRGF0YS0+ZXhjZXB0aW9uTG9jYXRpb24pLCByZWdUMik7CiAgICAg
c3RvcmVQdHIocmVnVDEsIHJlZ1QyKTsKLSAgICBtb3ZlKEltbVB0cihyZWludGVycHJldF9jYXN0
PHZvaWQqPihjdGlWTVRocm93VHJhbXBvbGluZSkpLCByZWdUMik7CiAgICAgZW1pdEdldEZyb21D
YWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJGaWxlOjpDYWxsZXJGcmFtZSwgY2FsbEZyYW1lUmVn
aXN0ZXIpOwogICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0ZXIsIG9mZnNldG9mKHN0cnVjdCBKSVRT
dGFja0ZyYW1lLCBjYWxsRnJhbWUpIC8gc2l6ZW9mICh2b2lkKikpOworI2lmIFBMQVRGT1JNKEFS
TSkKKyAgICBKdW1wIGp1bXBUb0N0aVZNVGhyb3dUcmFtcG9saW5lID0ganVtcCgpOworI2Vsc2UK
KyAgICBtb3ZlKEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihjdGlWTVRocm93VHJhbXBv
bGluZSkpLCByZWdUMik7CiAgICAgcmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4ocmVn
VDIpOwogICAgIHJldCgpOwotICAgIAorI2VuZGlmCiAKICNpZiBFTkFCTEUoSklUX09QVElNSVpF
X1BST1BFUlRZX0FDQ0VTUykKICAgICBDYWxsIGFycmF5X2ZhaWx1cmVDYXNlczFDYWxsID0gbWFr
ZVRhaWxSZWN1cnNpdmVDYWxsKGFycmF5X2ZhaWx1cmVDYXNlczEpOwpAQCAtODgyLDYgKzk5Nywx
MyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIFVOVVNFRF9QQVJBTShjdGlBcnJheUxl
bmd0aFRyYW1wb2xpbmUpOwogICAgIFVOVVNFRF9QQVJBTShjdGlTdHJpbmdMZW5ndGhUcmFtcG9s
aW5lKTsKICNlbmRpZgorI2lmIFBMQVRGT1JNKEFSTSkKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGNh
bGxDdGlWTVRocm93LCBGdW5jdGlvblB0cihKSVRTdHViczo6Y3RpX3ZtX3Rocm93KSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhqdW1wVG9DdGlWTVRocm93VHJhbXBvbGluZSwgcGF0Y2hCdWZmZXIu
bG9jYXRpb25PZihjdGlWTVRocm93VHJhbXBvbGluZUJlZ2luKSk7CisgICAgY3RpVHJhbXBvbGlu
ZSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y3RpVHJhbXBvbGluZUZ1bmN0aW9uUHRyPih0cmFtcG9saW5l
QXQoZmluYWxDb2RlLCBjdGlUcmFtcG9saW5lQmVnaW4pLmV4ZWN1dGFibGVBZGRyZXNzKCkpOwor
ICAgIGN0aVZNVGhyb3dUcmFtcG9saW5lID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgY3RpVk1U
aHJvd1RyYW1wb2xpbmVCZWdpbikuZXhlY3V0YWJsZUFkZHJlc3MoKTsKKyAgICBjdGlPcFRocm93
Tm90Q2F1Z2h0ID0gdHJhbXBvbGluZUF0KGZpbmFsQ29kZSwgY3RpT3BUaHJvd05vdENhdWdodEJl
Z2luKS5leGVjdXRhYmxlQWRkcmVzcygpOworI2VuZGlmCiB9CiAKIHZvaWQgSklUOjplbWl0R2V0
VmFyaWFibGVPYmplY3RSZWdpc3RlcihSZWdpc3RlcklEIHZhcmlhYmxlT2JqZWN0LCBpbnQgaW5k
ZXgsIFJlZ2lzdGVySUQgZHN0KQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDgxZjgwNGEuLmI2MDBjYzEgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTI0NCw2ICsyNDQsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMCA9IEFSTTo6ZDA7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTTo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTTo6ZDI7CisjZWxpZiBQTEFURk9STShBUk0pCisg
ICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBBUk06
OnIwOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3Rl
ciA9IEFSTTo6cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1l
bnRSZWdpc3RlciA9IEFSTTo6cjA7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
dGltZW91dENoZWNrUmVnaXN0ZXIgPSBBUk06OnI1OworICAgICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBjYWxsRnJhbWVSZWdpc3RlciA9IEFSTTo6cjQ7CisgICAgICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIGN0aVJldHVyblJlZ2lzdGVyID0gQVJNOjpyNjsKKworICAgICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTTo6cjA7CisgICAgICAgIHN0YXRpYyBjb25z
dCBSZWdpc3RlcklEIHJlZ1QxID0gQVJNOjpyMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgcmVnVDIgPSBBUk06OnIyOworICAgICAgICAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAg
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gQVJNOjpyNzsKKworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdTMCA9IEFSTTo6UzA7CisgICAgICAgIC8vIENhbGxl
ZSBwcmVzZXJ2ZWQKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnUzEgPSBBUk06
OlMxOworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1N0YWNrUHRyID0gQVJN
OjpzcDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnTGluayA9IEFSTTo6bHI7
CisKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gQVJNOjpmcDA7
IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFS
TTo6ZnAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVn
VDIgPSBBUk06OmZwMDsgLy8gRklYTUUKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBv
cnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpAQCAtMzI2LDYgKzM1MSwzMSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9PYmogPSAxODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA0NjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkK
KyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRv
IGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA0OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2Owor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9
IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxM
b2FkUHJlZml4ID0gMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5
SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDIwOworICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUg
c3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQg
b24gb3BfZ2V0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0
QnlJZFN0cnVjdHVyZSA9IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZCA9IDQ7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hMZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkUHJlZml4ID0gMDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9
IDIwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3Vs
dCA9IDI4OworI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgICNlcnJvciAiT1BD
T0RFX1NBTVBMSU5HIGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgorI2Vsc2UKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAzNjsKKyNlbmRpZgor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BDYWxsQ29tcGFyZVRvSnVtcCA9
IDEyOworCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1By
b3RvT2JqID0gMTI7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RD
aGVja1Byb3RvU3RydWN0ID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZz
ZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMzI7CiAjZW5kaWYKIAogICAgIHB1YmxpYzoKQEAg
LTY1NSw2ICs3MDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGVtaXRUYWdB
c0Jvb2xJbW1lZGlhdGUoUmVnaXN0ZXJJRCByZWcpOwogCisgICAgICAgIHZvaWQgY3VzdG9tUmV0
dXJuKCk7CiAgICAgICAgIHZvaWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCk7CiAgICAgICAg
IHZvaWQgcmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlRm9yVHJhbXBvbGluZSgpOwogCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAKaW5kZXggY2Y4NTJiZS4uMmQ0OWNiNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNw
cApAQCAtMjE4LDYgKzIxOCw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9w
Y29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2lnbmVkIGNhCiAgICAgLy8gVGhp
cyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlvbiB2YWx1ZSwgc28gd2UgY2Fu
IHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCiAgICAgLy8gVGhpcyBkZWxpYmVyYXRl
bHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUgc3Rh
Y2sgZnJhbWUgYmVsb3cKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDIp
OworICAgIHByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdCgyLCAyKTsKICAgICBEYXRhTGFi
ZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBKdW1wIGp1bXBUb1Nsb3cg
PSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QyLCBhZGRyZXNzT2ZMaW5rZWRGdW5j
dGlvbkNoZWNrLCBJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKICAgICBhZGRT
bG93Q2FzZShqdW1wVG9TbG93KTsKQEAgLTI1MCw3ICsyNTEsOCBAQCB2b2lkIEpJVDo6Y29tcGls
ZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCB1bnNp
Z25lZCBjYQogCiAgICAgLy8gQ2FsbCB0byB0aGUgY2FsbGVlCiAgICAgbV9jYWxsU3RydWN0dXJl
U3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0aE90aGVyID0gZW1p
dE5ha2VkQ2FsbCgpOwotICAgIAorICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbklu
Zm9bY2FsbExpbmtJbmZvSW5kZXhdLmhvdFBhdGhPdGhlci5lbmFibGVMYXRlUGF0Y2goKTsKKwog
ICAgIGlmIChvcGNvZGVJRCA9PSBvcF9jYWxsX2V2YWwpCiAgICAgICAgIHdhc0V2YWwubGluayh0
aGlzKTsKIApAQCAtMjkzLDYgKzI5NSw3IEBAIHZvaWQgSklUOjpjb21waWxlT3BDYWxsU2xvd0Nh
c2UoSW5zdHJ1Y3Rpb24qIGluc3RydWN0aW9uLCBWZWN0b3I8U2xvd0Nhc2VFbnRyeT46CiAKICAg
ICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2NhbGxMaW5rSW5mb0luZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPQogICAgICAgICBlbWl0TmFrZWRDYWxsKG1fZ2xvYmFsRGF0YS0+
aml0U3R1YnMuY3RpVmlydHVhbENhbGxQcmVMaW5rKCkpOworICAgIG1fY2FsbFN0cnVjdHVyZVN0
dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZvSW5kZXhdLmNhbGxSZXR1cm5Mb2NhdGlvbi5l
bmFibGVMYXRlUGF0Y2goKTsKIAogICAgIEp1bXAgc3RvcmVSZXN1bHRGb3JGaXJzdFJ1biA9IGp1
bXAoKTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaCBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRDb2RlLmgKaW5kZXggN2VlNjQ0Yi4uZGY4NjdiZiAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ29kZS5oCkBAIC03OSw2ICs3OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAg
cmV0dXJuIEpTVmFsdWU6OmRlY29kZShjdGlUcmFtcG9saW5lKAogI2lmIFBMQVRGT1JNKFg4Nl82
NCkKICAgICAgICAgICAgICAgICAwLCAwLCAwLCAwLCAwLCAwLAorI2VsaWYgUExBVEZPUk0oQVJN
KQorICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsCiAjZW5kaWYKICAgICAgICAgICAgICAgICBt
X3JlZi5tX2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUs
IGV4Y2VwdGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxE
YXRhKSk7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4
IGIzZGM0MTguLmFlMjQxYTEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxp
bmVNZXRob2RzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaApA
QCAtMTg2LDM4ICsxODYsNDUgQEAgQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFr
ZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24pCiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAotI2lm
IFBMQVRGT1JNKFg4NikgfHwgUExBVEZPUk0oWDg2XzY0KQorQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6Y3VzdG9tUmV0dXJuKCkKK3sKKyNpZiBQTEFURk9STShBUk0pCisgICAgbW92ZShjdGlSZXR1
cm5SZWdpc3RlciwgQVJNOjpscik7CisjZW5kaWYKK30KKworI2lmIFBMQVRGT1JNKEFSTV9WNykK
IAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJldmVydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxs
KFJlZ2lzdGVySUQgcmVnKQogewotICAgIHBvcChyZWcpOworICAgIG1vdmUobGlua1JlZ2lzdGVy
LCByZWcpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVz
c0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykKIHsKLSAgICBwdXNoKHJlZyk7CisgICAgbW92
ZShyZWcsIGxpbmtSZWdpc3Rlcik7CiB9CiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3Rv
cmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFkZHJlc3MgYWRkcmVzcykKIHsKLSAgICBwdXNo
KGFkZHJlc3MpOworICAgIGxvYWRQdHIoYWRkcmVzcywgbGlua1JlZ2lzdGVyKTsKIH0KIAotI2Vs
aWYgUExBVEZPUk0oQVJNX1Y3KQorI2Vsc2UKIAogQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cHJl
dmVydmVSZXR1cm5BZGRyZXNzQWZ0ZXJDYWxsKFJlZ2lzdGVySUQgcmVnKQogewotICAgIG1vdmUo
bGlua1JlZ2lzdGVyLCByZWcpOworICAgIHBvcChyZWcpOwogfQogCiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpyZXN0b3JlUmV0dXJuQWRkcmVzc0JlZm9yZVJldHVybihSZWdpc3RlcklEIHJlZykK
IHsKLSAgICBtb3ZlKHJlZywgbGlua1JlZ2lzdGVyKTsKKyAgICBwdXNoKHJlZyk7CiB9CiAKIEFM
V0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJuKEFk
ZHJlc3MgYWRkcmVzcykKIHsKLSAgICBsb2FkUHRyKGFkZHJlc3MsIGxpbmtSZWdpc3Rlcik7Cisg
ICAgcHVzaChhZGRyZXNzKTsKIH0KIAogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAppbmRleCAzYTZmOWIzLi40OGM2YzZjIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTIxMiw2ICsyMTIsNyBAQCB2b2lkIEpJVDo6ZW1p
dF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICBt
X21ldGhvZENhbGxDb21waWxhdGlvbkluZm8uYXBwZW5kKE1ldGhvZENhbGxDb21waWxhdGlvbklu
Zm8obV9wcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXgpKTsKICAgICBNZXRob2RDYWxsQ29t
cGlsYXRpb25JbmZvJiBpbmZvID0gbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmxhc3QoKTsK
ICAgICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKKyAgICBwcmVw
YXJlVW5icm9rZW5JbnN0cnVjdGlvbkxpc3QoMTAsIDYpOwogICAgIEp1bXAgc3RydWN0dXJlQ2hl
Y2sgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDAsIEZJRUxEX09G
RlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIGluZm8uc3RydWN0dXJlVG9Db21wYXJlLCBJbW1Q
dHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVyZSkp
KTsKICAgICBEYXRhTGFiZWxQdHIgcHJvdG9TdHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3RvT2JqID0g
bW92ZVdpdGhQYXRjaChJbW1QdHIoMCksIHJlZ1QxKTsKICAgICBKdW1wIHByb3RvU3RydWN0dXJl
Q2hlY2sgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIEFkZHJlc3MocmVnVDEsIEZJRUxE
X09GRlNFVChKU0NlbGwsIG1fc3RydWN0dXJlKSksIHByb3RvU3RydWN0dXJlVG9Db21wYXJlLCBJ
bW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocGF0Y2hHZXRCeUlkRGVmYXVsdFN0cnVjdHVy
ZSkpKTsKQEAgLTI4Miw2ICsyODMsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRo
KGludCwgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiwgdW5zaWduZWQgcHJvcGVydAogICAgIGVt
aXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgTGFiZWwg
aG90UGF0aEJlZ2luKHRoaXMpOworICAgIHByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdCg3
LCAzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNz
SW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwogCiAgICAgRGF0
YUxhYmVsUHRyIHN0cnVjdHVyZVRvQ29tcGFyZTsKQEAgLTMyNSwxMCArMzI3LDE3IEBAIHZvaWQg
SklUOjpjb21waWxlR2V0QnlJZFNsb3dDYXNlKGludCByZXN1bHRWUmVnLCBpbnQgYmFzZVZSZWcs
IElkZW50aWZpZXIqIGlkZW50CiAjaWZuZGVmIE5ERUJVRwogICAgIExhYmVsIGNvbGRQYXRoQmVn
aW4odGhpcyk7CiAjZW5kaWYKKyAgICBwcmVwYXJlVW5icm9rZW5JbnN0cnVjdGlvbkxpc3QoOSwg
Mik7CiAgICAgSklUU3R1YkNhbGwgc3R1YkNhbGwodGhpcywgaXNNZXRob2RDaGVjayA/IEpJVFN0
dWJzOjpjdGlfb3BfZ2V0X2J5X2lkX21ldGhvZF9jaGVjayA6IEpJVFN0dWJzOjpjdGlfb3BfZ2V0
X2J5X2lkKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CisjaWYgUExBVEZPUk0o
QVJNKQorICAgIG1vdmVXaXRoUGF0Y2goSW1tUHRyKGlkZW50KSwgcmVnVDApOworICAgIHN0dWJD
YWxsLmFkZEFyZ3VtZW50KHJlZ1QwKTsKKyNlbHNlCiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQo
SW1tUHRyKGlkZW50KSk7CisjZW5kaWYKICAgICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJl
c3VsdFZSZWcpOworICAgIGNhbGwuZW5hYmxlTGF0ZVBhdGNoKCk7CiAKICAgICBBU1NFUlQoZGlm
ZmVyZW5jZUJldHdlZW4oY29sZFBhdGhCZWdpbiwgY2FsbCkgPT0gcGF0Y2hPZmZzZXRHZXRCeUlk
U2xvd0Nhc2VDYWxsKTsKIApAQCAtMzUzLDYgKzM2Miw3IEBAIHZvaWQgSklUOjplbWl0X29wX3B1
dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIGVtaXRKdW1wU2xv
d0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCiAgICAgTGFiZWwgaG90UGF0aEJl
Z2luKHRoaXMpOworICAgIHByZXBhcmVVbmJyb2tlbkluc3RydWN0aW9uTGlzdCg3LCAzKTsKICAg
ICBtX3Byb3BlcnR5QWNjZXNzQ29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rp
b25JbmRleF0uaG90UGF0aEJlZ2luID0gaG90UGF0aEJlZ2luOwogCiAgICAgLy8gSXQgaXMgaW1w
b3J0YW50IHRoYXQgdGhlIGZvbGxvd2luZyBpbnN0cnVjdGlvbiBwbGFudHMgYSAzMmJpdCBpbW1l
ZGlhdGUsIGluIG9yZGVyIHRoYXQgaXQgY2FuIGJlIHBhdGNoZWQgb3Zlci4KQEAgLTM4NSw2ICsz
OTUsNyBAQCB2b2lkIEpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24sIFZlY3RvcjxTbG93Q2FzZQogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50
KEltbVB0cihpZGVudCkpOwogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJlZ1QxKTsKICAgICBD
YWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKCk7CisgICAgY2FsbC5lbmFibGVMYXRlUGF0Y2goKTsK
IAogICAgIC8vIFRyYWNrIHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVz
ZWQgdG8gcmVjb3ZlciBwYXRjaCBpbmZvcm1hdGlvbi4KICAgICBtX3Byb3BlcnR5QWNjZXNzQ29t
cGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uY2FsbFJldHVybkxv
Y2F0aW9uID0gY2FsbDsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHViQ2Fs
bC5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmgKaW5kZXggNmM5Y2NjMS4uMWFk
MzZkYSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJDYWxsLmgKQEAgLTExNCw2ICsxMTQsNyBAQCBuYW1l
c3BhY2UgSlNDIHsKICNlbmRpZgogCiAgICAgICAgICAgICBtX2ppdC0+cmVzdG9yZUFyZ3VtZW50
UmVmZXJlbmNlKCk7CisgICAgICAgICAgICBtX2ppdC0+Y3VzdG9tUmV0dXJuKCk7CiAgICAgICAg
ICAgICBKSVQ6OkNhbGwgY2FsbCA9IG1faml0LT5jYWxsKCk7CiAgICAgICAgICAgICBtX2ppdC0+
bV9jYWxscy5hcHBlbmQoQ2FsbFJlY29yZChjYWxsLCBtX2ppdC0+bV9ieXRlY29kZUluZGV4LCBt
X3N0dWIpKTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggYTQwZDFiYS4uM2VkMTU1NyAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0zMDcsNiArMzA3LDEyIEBAIGV4dGVybiAiQyIg
ewogICAgIH0KIH0KIAorI2VsaWYgUExBVEZPUk0oQVJNKQorCitjdGlUcmFtcG9saW5lRnVuY3Rp
b25QdHIgY3RpVHJhbXBvbGluZSA9IDA7Cit2b2lkKiBjdGlWTVRocm93VHJhbXBvbGluZSA9IDA7
Cit2b2lkKiBjdGlPcFRocm93Tm90Q2F1Z2h0ID0gMDsKKwogI2VuZGlmCiAKICNpZiBFTkFCTEUo
T1BDT0RFX1NBTVBMSU5HKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJz
LmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCA4ZTgxYWRlLi5jMDIyZWRi
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuaApAQCAtMTE1LDYgKzExNSwyOCBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgLy8gV2hlbiBKSVQgY29kZSBtYWtlcyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMg
cmV0dXJuIGFkZHJlc3MganVzdCBiZWxvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2suCiAgICAgICAg
IHZvaWQqKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCoqPih0aGlzKSAtIDE7IH0KICAgICB9OworI2VsaWYgUExBVEZPUk0oQVJNKQorICAgIHN0cnVj
dCBKSVRTdGFja0ZyYW1lIHsKKyAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVc2VkIGJ5
IEpJVF9TVFVCX0FSR1VNRU5UX1NUQUNLIHN0dWIgZnVuY3Rpb24gY2FsbGluZyBjb252ZW50aW9u
CisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2b2lkKiBzYXZlZFI0Owor
ICAgICAgICB2b2lkKiBzYXZlZFI1OworICAgICAgICB2b2lkKiBzYXZlZFI2OworICAgICAgICB2
b2lkKiBzYXZlZFI3OworICAgICAgICB2b2lkKiBzYXZlZFI4OworICAgICAgICB2b2lkKiBzYXZl
ZExpbms7CisKKyAgICAgICAgdm9pZCogY29kZTsKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVl
KiBleGNlcHRpb247CisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
OworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgLy8gV2hlbiBK
SVQgY29kZSBtYWtlcyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBi
ZWxvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2suCisgICAgICAgIHZvaWQqKiByZXR1cm5BZGRyZXNz
U2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCoqPih0aGlzKSAtIDE7IH0KKyAg
ICB9OwogI2VsaWYgUExBVEZPUk0oQVJNX1Y3KQogICAgIHN0cnVjdCBKSVRTdGFja0ZyYW1lIHsK
ICAgICAgICAgSklUU3R1YkFyZyBwYWRkaW5nOyAvLyBVbnVzZWQKQEAgLTE4MSw2ICsyMDMsMTMg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgI2RlZmluZSBSRVRVUk5fUE9JTlRFUl9QQUlSKGEsYikg
Vm9pZFB0clBhaXJVbmlvbiBwYWlyID0ge3sgYSwgYiB9fTsgcmV0dXJuIHBhaXIuaQogI2VuZGlm
CiAKKyNpZiBQTEFURk9STShBUk0pCisgICAgdHlwZWRlZiBFbmNvZGVkSlNWYWx1ZSAoKmN0aVRy
YW1wb2xpbmVGdW5jdGlvblB0cikodm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosCisgICAgICAg
ICAgICB2b2lkKiBjb2RlLCBSZWdpc3RlckZpbGUqLCBDYWxsRnJhbWUqLCBKU1ZhbHVlKiBleGNl
cHRpb24sIFByb2ZpbGVyKiosIEpTR2xvYmFsRGF0YSopOworICAgIGV4dGVybiBjdGlUcmFtcG9s
aW5lRnVuY3Rpb25QdHIgY3RpVHJhbXBvbGluZTsKKyAgICBleHRlcm4gdm9pZCogY3RpVk1UaHJv
d1RyYW1wb2xpbmU7CisgICAgZXh0ZXJuIHZvaWQqIGN0aU9wVGhyb3dOb3RDYXVnaHQ7CisjZWxz
ZQogICAgIGV4dGVybiAiQyIgdm9pZCBjdGlWTVRocm93VHJhbXBvbGluZSgpOwogICAgIGV4dGVy
biAiQyIgdm9pZCBjdGlPcFRocm93Tm90Q2F1Z2h0KCk7CiAgICAgZXh0ZXJuICJDIiBFbmNvZGVk
SlNWYWx1ZSBjdGlUcmFtcG9saW5lKApAQCAtMTkwLDYgKzIxOSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICAgICAgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwK
ICNlbmRpZgogICAgICAgICAgICAgdm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1l
KiwgSlNWYWx1ZSogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKTsKKyNlbmRp
ZgogCiAgICAgY2xhc3MgSklUVGh1bmtzIHsKICAgICBwdWJsaWM6CmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CmluZGV4IGFlNjIwY2IuLmU0ODFmMWMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9Q
bGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC0yMjcsNyAr
MjI3LDI4IEBACiAjaWYgIWRlZmluZWQoX19BUk1fRUFCSV9fKQogI2RlZmluZSBXVEZfUExBVEZP
Uk1fRk9SQ0VfUEFDSyAxCiAjZW5kaWYKKyNkZWZpbmUgX19BUk1fQVJDSF9fIDMKKworI2lmIGRl
ZmluZWQoX19BUk1fQVJDSF80X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF80VF9fKQorIyB1bmRl
ZiBfX0FSTV9BUkNIX18KKyMgZGVmaW5lIF9fQVJNX0FSQ0hfXyA0CisjZW5kaWYKKworI2lmIGRl
ZmluZWQoX19BUk1fQVJDSF81X18pIHx8IGRlZmluZWQoX19BUk1fQVJDSF81VF9fKSBcCisgICAg
ICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF81RV9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNVRF
X18pIFwKKyAgICAgICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzVURUpfXykKKyMgdW5kZWYgX19B
Uk1fQVJDSF9fCisjIGRlZmluZSBfX0FSTV9BUkNIX18gNQorI2VuZGlmCisKKyNpZiBkZWZpbmVk
KF9fQVJNX0FSQ0hfNl9fKSB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNkpfXykgXAorICAgICB8fCBk
ZWZpbmVkKF9fQVJNX0FSQ0hfNktfXykgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZaX18pIFwKKyAg
ICAgfHwgZGVmaW5lZChfX0FSTV9BUkNIXzZaS19fKQorIyB1bmRlZiBfX0FSTV9BUkNIX18KKyMg
ZGVmaW5lIF9fQVJNX0FSQ0hfXyA2CisjZW5kaWYKICNlbmRpZgorCiAjaWYgZGVmaW5lZChfX0FS
TV9BUkNIXzdBX18pCiAjZGVmaW5lIFdURl9QTEFURk9STV9BUk1fVjcgMQogI2VuZGlmCkBAIC0y
OTEsNiArMzEyLDcgQEAKIC8qIC0tZ251IG9wdGlvbiBvZiB0aGUgUlZDVCBjb21waWxlciBhbHNv
IGRlZmluZXMgX19HTlVDX18gKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhQ09NUElMRVIo
UlZDVCkKICNkZWZpbmUgV1RGX0NPTVBJTEVSX0dDQyAxCisjZGVmaW5lIEdDQ19WRVJTSU9OIChf
X0dOVUNfXyAqIDEwMDAwICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZF
TF9fKQogI2VuZGlmCiAKIC8qIENPTVBJTEVSKE1JTkdXKSAqLwpAQCAtNTI2LDYgKzU0OCw4IEBA
CiAvKiBUaGUgSklUIGlzIHRlc3RlZCAmIHdvcmtpbmcgb24geDg2IFdpbmRvd3MgKi8KICNlbGlm
IFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKQogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAx
CisjZWxpZiBQTEFURk9STShBUk0pCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDEKICNlbmRpZgog
I2VuZGlmCiAKQEAgLTU3MCw2ICs1OTQsNyBAQAogIC8qIFVuZGVyIGRldmVsb3BtZW50LCB0ZW1w
b3JhcmlseSBkaXNhYmxlZCB1bnRpbCAxNk1iIGxpbmsgcmFuZ2UgbGltaXQgaW4gYXNzZW1ibGVy
IGlzIGZpeGVkLiAqLyBcCiAgfHwgKCFkZWZpbmVkKEVOQUJMRV9ZQVJSX0pJVCkgJiYgUExBVEZP
Uk0oQVJNX1Y3KSAmJiBQTEFURk9STShJUEhPTkUpICYmIDApIFwKICB8fCAoIWRlZmluZWQoRU5B
QkxFX1lBUlJfSklUKSAmJiBQTEFURk9STShYODYpICYmIFBMQVRGT1JNKFdJTikpCisgfHwgKCFk
ZWZpbmVkKEVOQUJMRV9ZQVJSX0pJVCkgJiYgUExBVEZPUk0oQVJNKSApCiAjZGVmaW5lIEVOQUJM
RV9ZQVJSIDEKICNkZWZpbmUgRU5BQkxFX1lBUlJfSklUIDEKICNlbmRpZgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvd3RmL1RhcGUuaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXBlLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGQ5MzdhYwotLS0gL2Rldi9udWxsCisr
KyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9UYXBlLmgKQEAgLTAsMCArMSwxOTIgQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMDkgVW5pdmVyc2l0eSBvZiBTemVnZWQKKyAqIEFsbCByaWdodHMgcmVz
ZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFy
eSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQg
cHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKiAx
LiBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZv
bGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gUmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3Jt
IG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAq
ICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRo
ZSBkaXN0cmlidXRpb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBVTklW
RVJTSVRZIE9GIFNaRUdFRCBgYEFTIElTJycgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVE
IFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJ
RUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElD
VUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1FRC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExF
IElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElS
RUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFM
IERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQg
T0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisg
KiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBP
TiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklD
VCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJ
U0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FS
RSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAq
LworCisjaWZuZGVmIFdURl9UYXBlX2gKKyNkZWZpbmUgV1RGX1RhcGVfaAorCituYW1lc3BhY2Ug
V1RGIHsKKworICAgIC8vIFQgbXVzdCBiZSBhIHByaW1pdGl2ZSB0eXBlIG9yIGEgc3RydWN0dXJl
CisgICAgdGVtcGxhdGU8dHlwZW5hbWUgVCwgaW50IHBhZ2VTaXplPiBzdHJ1Y3QgVGFwZVBhZ2Ug
eworICAgICAgICBUIHN0b3JhZ2VbcGFnZVNpemVdOyAvLyBBbGlnbmVkIHN0cnVjdHVyZQorICAg
ICAgICBUYXBlUGFnZTxULCBwYWdlU2l6ZT4qIG5leHQ7CisgICAgfTsKKworICAgIHRlbXBsYXRl
PHR5cGVuYW1lIFQsIGludCBwYWdlU2l6ZT4gY2xhc3MgVGFwZTsKKworICAgIHRlbXBsYXRlPHR5
cGVuYW1lIFQsIGludCBwYWdlU2l6ZT4gY2xhc3MgVGFwZUl0ZXJhdG9yIHsKKyAgICBwcml2YXRl
OgorICAgICAgICBmcmllbmQgY2xhc3MgVGFwZTxULCBwYWdlU2l6ZT47CisgICAgcHVibGljOgor
ICAgICAgICB0eXBlZGVmIFRhcGVJdGVyYXRvcjxULCBwYWdlU2l6ZT4gSXRlcmF0b3I7CisgICAg
ICAgIHR5cGVkZWYgVGFwZVBhZ2U8VCwgcGFnZVNpemU+IFBhZ2U7CisKKyAgICAgICAgflRhcGVJ
dGVyYXRvcigpIHt9CisKKyAgICAgICAgVCYgb3BlcmF0b3IqKCkgY29uc3QgeyBBU1NFUlQobV9w
YWdlKTsgcmV0dXJuIG1fcGFnZS0+c3RvcmFnZVttX2luZGV4XTsgfQorICAgICAgICBUKiBvcGVy
YXRvci0+KCkgY29uc3QgeyBBU1NFUlQobV9wYWdlKTsgcmV0dXJuICZtX3BhZ2UtPnN0b3JhZ2Vb
bV9pbmRleF07IH0KKworICAgICAgICAvLyBPbmx5IHByZWZpeCArKyBvcGVyYXRvciBzdXBwb3J0
ZWQKKyAgICAgICAgSXRlcmF0b3ImIG9wZXJhdG9yKysoKQorICAgICAgICB7CisgICAgICAgICAg
ICBBU1NFUlQobV9wYWdlKTsKKyAgICAgICAgICAgIGlmIChtX2luZGV4IDwgcGFnZVNpemUgLSAx
KQorICAgICAgICAgICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIGVsc2UgaWYgKG1fcGFn
ZS0+bmV4dCkgeworICAgICAgICAgICAgICAgIG1fcGFnZSA9IG1fcGFnZS0+bmV4dDsKKyAgICAg
ICAgICAgICAgICBtX2luZGV4ID0gMDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGVsc2Ug
eworICAgICAgICAgICAgICAgIC8vIFBvaW50cyB0byB0aGUgImVuZCIgc3ltYm9sCisgICAgICAg
ICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gcGFnZVNpemUpOworICAgICAgICAgICAgICAgICsr
bV9pbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHJldHVybiAqdGhpczsKKyAgICAg
ICAgfQorCisgICAgICAgIGJvb2wgb3BlcmF0b3I9PShjb25zdCBJdGVyYXRvciYgb3RoZXIpIGNv
bnN0CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiAobV9wYWdlID09IG90aGVyLm1fcGFn
ZSAmJiBtX2luZGV4ID09IG90aGVyLm1faW5kZXgpOworICAgICAgICB9CisKKyAgICAgICAgYm9v
bCBvcGVyYXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAg
ICAgICAgICAgcmV0dXJuIChtX3BhZ2UgIT0gb3RoZXIubV9wYWdlIHx8IG1faW5kZXggIT0gb3Ro
ZXIubV9pbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBUYXBlSXRlcmF0b3ImIG9wZXJhdG9y
PShjb25zdCBUYXBlSXRlcmF0b3I8VCwgcGFnZVNpemU+JiBvdGhlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbV9wYWdlID0gb3RoZXIubV9wYWdlOworICAgICAgICAgICAgbV9pbmRleCA9IG90
aGVyLm1faW5kZXg7CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAg
IHByaXZhdGU6CisgICAgICAgIFRhcGVJdGVyYXRvcihQYWdlKiBwYWdlLCBpbnQgaW5kZXgpCisg
ICAgICAgICAgICA6IG1fcGFnZShwYWdlKQorICAgICAgICAgICAgLCBtX2luZGV4KGluZGV4KQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBQYWdlKiBtX3BhZ2U7CisgICAgICAgIGlu
dCBtX2luZGV4OworICAgIH07CisKKyAgICB0ZW1wbGF0ZTx0eXBlbmFtZSBULCBpbnQgcGFnZVNp
emU+IGNsYXNzIFRhcGUgeworICAgICAgICBmcmllbmQgY2xhc3MgVGFwZUl0ZXJhdG9yPFQsIHBh
Z2VTaXplPjsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgVGFwZUl0ZXJhdG9yPFQsIHBh
Z2VTaXplPiBJdGVyYXRvcjsKKyAgICAgICAgdHlwZWRlZiBUYXBlUGFnZTxULCBwYWdlU2l6ZT4g
UGFnZTsKKworICAgICAgICBUYXBlKCkKKyAgICAgICAgICAgIDogZmlyc3RQYWdlKDApCisgICAg
ICAgICAgICAsIGxhc3RQYWdlKDApCisgICAgICAgICAgICAsIG1fc2l6ZSgwKQorICAgICAgICAg
ICAgLCBtX2xhc3RVc2VkRW50cnkocGFnZVNpemUpCisgICAgICAgIHsKKyAgICAgICAgfQorCisg
ICAgICAgIH5UYXBlKCkKKyAgICAgICAgeworICAgICAgICAgICAgUGFnZSogcGFnZSA9IGZpcnN0
UGFnZTsKKyAgICAgICAgICAgIHdoaWxlIChwYWdlKSB7CisgICAgICAgICAgICAgICBQYWdlKiBu
ZXh0ID0gcGFnZS0+bmV4dDsKKyAgICAgICAgICAgICAgIGRlbGV0ZSBwYWdlOworICAgICAgICAg
ICAgICAgcGFnZSA9IG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgIH0KKworICAgICAgICBp
bmxpbmUgdm9pZCBhcHBlbmQoY29uc3QgVCYgdCkKKyAgICAgICAgeworICAgICAgICAgICAgKytt
X3NpemU7CisgICAgICAgICAgICBpZiAobV9sYXN0VXNlZEVudHJ5IDwgcGFnZVNpemUpCisgICAg
ICAgICAgICAgICAgbGFzdFBhZ2UtPnN0b3JhZ2VbbV9sYXN0VXNlZEVudHJ5KytdID0gdDsKKyAg
ICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIGFsbG9jUGFnZSgpOworICAgICAgICAg
ICAgICAgIGxhc3RQYWdlLT5zdG9yYWdlWzBdID0gdDsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
fQorCisgICAgICAgIGlubGluZSBUKiBhbGxvYygpCisgICAgICAgIHsKKyAgICAgICAgICAgICsr
bV9zaXplOworICAgICAgICAgICAgaWYgKG1fbGFzdFVzZWRFbnRyeSA8IHBhZ2VTaXplKQorICAg
ICAgICAgICAgICAgIHJldHVybiAmbGFzdFBhZ2UtPnN0b3JhZ2VbbV9sYXN0VXNlZEVudHJ5Kytd
OworICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgYWxsb2NQYWdlKCk7CisgICAg
ICAgICAgICAgICAgcmV0dXJuICZsYXN0UGFnZS0+c3RvcmFnZVswXTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorCisgICAgICAgIGlubGluZSBJdGVyYXRvciBiZWdpbigpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBJdGVyYXRvcihmaXJzdFBhZ2UsIGZpcnN0UGFnZSA/IDAgOiBw
YWdlU2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgSXRlcmF0b3IgZW5kKCkKKyAg
ICAgICAgeworICAgICAgICAgICAgcmV0dXJuIEl0ZXJhdG9yKGxhc3RQYWdlLCBtX2xhc3RVc2Vk
RW50cnkpOworICAgICAgICB9CisKKyAgICAgICAgaW50IHNpemUoKSB7IHJldHVybiBtX3NpemU7
IH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgUGFnZSog
cGFnZSA9IGZpcnN0UGFnZTsKKyAgICAgICAgICAgIHdoaWxlIChwYWdlKSB7CisgICAgICAgICAg
ICAgICBQYWdlKiBuZXh0ID0gcGFnZS0+bmV4dDsKKyAgICAgICAgICAgICAgIGRlbGV0ZSBwYWdl
OworICAgICAgICAgICAgICAgcGFnZSA9IG5leHQ7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBmaXJzdFBhZ2UgPSAwOworICAgICAgICAgICAgbGFzdFBhZ2UgPSAwOworICAgICAgICAgICAg
bV9zaXplID0gMDsKKyAgICAgICAgICAgIG1fbGFzdFVzZWRFbnRyeSA9IHBhZ2VTaXplOworICAg
ICAgICB9CisgICAgcHJpdmF0ZToKKyAgICAgICAgUGFnZSogZmlyc3RQYWdlOworICAgICAgICBQ
YWdlKiBsYXN0UGFnZTsKKyAgICAgICAgaW50IG1fc2l6ZTsKKyAgICAgICAgaW50IG1fbGFzdFVz
ZWRFbnRyeTsKKworICAgICAgICB2b2lkIGFsbG9jUGFnZSgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChmaXJzdFBhZ2UpIHsKKyAgICAgICAgICAgICAgICBsYXN0UGFnZS0+bmV4dCA9IG5l
dyBQYWdlOworICAgICAgICAgICAgICAgIGxhc3RQYWdlID0gbGFzdFBhZ2UtPm5leHQ7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBmaXJzdFBhZ2Ug
PSBuZXcgUGFnZTsKKyAgICAgICAgICAgICAgICBsYXN0UGFnZSA9IGZpcnN0UGFnZTsKKyAgICAg
ICAgICAgIH0KKyAgICAgICAgICAgIGxhc3RQYWdlLT5uZXh0ID0gTlVMTDsKKyAgICAgICAgICAg
IG1fbGFzdFVzZWRFbnRyeSA9IDE7CisgICAgICAgIH0KKyAgICB9OworCit9IC8vIG5hbWVzcGFj
ZSBXVEYKKworI2VuZGlmIC8vIFdURl9UYXBlX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L3lhcnIvUmVnZXhKSVQuY3BwIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKaW5k
ZXggODRiODI1NC4uMGZjNDA3MSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdl
eEpJVC5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAKQEAgLTc2LDYg
Kzc2LDE5IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7
CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IFg4Njo6ZWF4
OwogI2VuZGlmCisjaWYgUExBVEZPUk0oQVJNKQorICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGlucHV0ID0gQVJNOjpyMDsKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IEFS
TTo6cjE7CisgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNOjpyMjsKKyAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBvdXRwdXQgPSBBUk06OnI2OworCisgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmVnVDAgPSBBUk06OnI0OworICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIHJlZ1QxID0gQVJNOjpyNTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
dHVyblJlZ2lzdGVyID0gQVJNOjpyMDsKKyNlbmRpZgorCisKIAogICAgIHZvaWQgb3B0aW1pemVB
bHRlcm5hdGl2ZShQYXR0ZXJuQWx0ZXJuYXRpdmUqIGFsdGVybmF0aXZlKQogICAgIHsKQEAgLTEz
MTMsNiArMTMyNiwxMiBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3Nl
bWJsZXIgewogICAgICAgICBwdXNoKEFSTTo6cjUpOwogICAgICAgICBwdXNoKEFSTTo6cjYpOwog
ICAgICAgICBtb3ZlKEFSTTo6cjMsIG91dHB1dCk7CisjZWxpZiBQTEFURk9STShBUk0pCisgICAg
ICAgIHB1c2goQVJNOjpscik7CisgICAgICAgIHB1c2goQVJNOjpyNCk7CisgICAgICAgIHB1c2go
QVJNOjpyNSk7CisgICAgICAgIHB1c2goQVJNOjpyNik7CisgICAgICAgIG1vdmUoQVJNOjpyMyxB
Uk06OnI2KTsKICNlbmRpZgogICAgIH0KIApAQCAtMTMyOSw2ICsxMzQ4LDEwIEBAIGNsYXNzIFJl
Z2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChBUk06
OnI2KTsKICAgICAgICAgcG9wKEFSTTo6cjUpOwogICAgICAgICBwb3AoQVJNOjpyNCk7CisjZWxp
ZiBQTEFURk9STShBUk0pCisgICAgICAgIHBvcChBUk06OnI2KTsKKyAgICAgICAgcG9wKEFSTTo6
cjUpOworICAgICAgICBwb3AoQVJNOjpyNCk7CiAjZW5kaWYKICAgICAgICAgcmV0KCk7CiAgICAg
fQotLSAKMS42LjAuNAoK
</data>
<flag name="review"
          id="15882"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31285</attachid>
            <date>2009-06-15 03:18:21 -0700</date>
            <delta_ts>2009-06-16 00:23:49 -0700</delta_ts>
            <desc>Move Segmented vector to wtf sub-directory</desc>
            <filename>SegmentedVector.patch</filename>
            <type>text/plain</type>
            <size>19159</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBkZGFlODE5MDE2YzRmMmIyMDczMTBjMTVmYjg0ZGM3OTZlNWZlN2VmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBNb24sIDE1IEp1biAyMDA5IDExOjUwOjU2ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gU2VnbWVudGVkIHZlY3RvcgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJj
emVnQGluZi51LXN6ZWdlZC5odT4KLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgICAgICAg
ICAgICAgICAgICAgICAgICB8ICAgNDIgKysrKwogSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVy
L0J5dGVjb2RlR2VuZXJhdG9yLmggfCAgIDEyICstCiBKYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvU2VnbWVudGVkVmVjdG9yLmggICB8ICAxNzAgLS0tLS0tLS0tLS0tLS0tCiBKYXZhU2NyaXB0
Q29yZS9wYXJzZXIvTGV4ZXIuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQgKy0KIEphdmFTY3Jp
cHRDb3JlL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaCAgICAgICAgICAgIHwgIDI1MiArKysrKysrKysr
KysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAzMDIgaW5zZXJ0aW9ucygrKSwgMTc4IGRl
bGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL2J5dGVjb21waWxl
ci9TZWdtZW50ZWRWZWN0b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL3d0
Zi9TZWdtZW50ZWRWZWN0b3IuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBkMGU0OTBlLi4zMmI1N2U3IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hh
bmdlTG9nCkBAIC0xLDMgKzEsNDUgQEAKKzIwMDktMDYtMTUgIFpvbHRhbiBIZXJjemVnICA8emhl
cmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIE1vdmUgU2VnbWVudGVkVmVjdG9yIHRvIC93dGYgYW5kIGV4dGVuZCBp
dAorICAgICAgICB3aXRoIHByZS1pbmNyZW1lbnQgaXRlcmF0b3Igc3VwcG9ydAorCisgICAgICAg
IEJ1ZyAyNDk4NjogQVJNIEpJVCBwb3J0CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODY+CisKKyAgICAgICAgKiBieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmg6
IFJlbW92ZWQuCisgICAgICAgICogcGFyc2VyL0xleGVyLmg6CisgICAgICAgICogd3RmL1NlZ21l
bnRlZFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9ySXRlcmF0
b3I6On5TZWdtZW50ZWRWZWN0b3JJdGVyYXRvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZl
Y3Rvckl0ZXJhdG9yOjpvcGVyYXRvciopOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3JJ
dGVyYXRvcjo6b3BlcmF0b3ItPik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvckl0ZXJh
dG9yOjpvcGVyYXRvcisrKToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9ySXRlcmF0b3I6
Om9wZXJhdG9yPT0pOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjo6b3Bl
cmF0b3IhPSk6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRv
cj0pOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjo6U2VnbWVudGVkVmVj
dG9ySXRlcmF0b3IpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OlNlZ21lbnRlZFZl
Y3Rvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6flNlZ21lbnRlZFZlY3Rvcik6
CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6c2l6ZSk6CisgICAgICAgIChXVEY6OlNl
Z21lbnRlZFZlY3Rvcjo6YXQpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6Om9wZXJh
dG9yW10pOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6Omxhc3QpOgorICAgICAgICAo
V1RGOjpTZWdtZW50ZWRWZWN0b3I6OmFwcGVuZCk6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZl
Y3Rvcjo6YWxsb2MpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OnJlbW92ZUxhc3Qp
OgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6Omdyb3cpOgorICAgICAgICAoV1RGOjpT
ZWdtZW50ZWRWZWN0b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjpi
ZWdpbik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6ZW5kKToKKyAgICAgICAgKFdU
Rjo6U2VnbWVudGVkVmVjdG9yOjpkZWxldGVBbGxTZWdtZW50cyk6CisgICAgICAgIChXVEY6OlNl
Z21lbnRlZFZlY3Rvcjo6c2VnbWVudEV4aXN0c0Zvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRl
ZFZlY3Rvcjo6c2VnbWVudEZvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6c3Vi
c2NyaXB0Rm9yKToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjplbnN1cmVTZWdtZW50
c0Zvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6ZW5zdXJlU2VnbWVudCk6CisK
IDIwMDktMDYtMTIgIERhdmUgSHlhdHQgIDxoeWF0dEBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGls
ZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA2ODEzZDY5Li43NDVlZDk4IDEwMDY0NAotLS0g
YS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaApAQCAtMzcsMTIg
KzM3LDEyIEBACiAjaW5jbHVkZSAiTGFiZWxTY29wZS5oIgogI2luY2x1ZGUgIkludGVycHJldGVy
LmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJJRC5oIgotI2luY2x1ZGUgIlNlZ21lbnRlZFZlY3Rvci5o
IgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5jbHVkZSAiRGVidWdnZXIuaCIKICNpbmNs
dWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNl
IEpTQyB7CiAKQEAgLTQ0OSwxMSArNDQ5LDExIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBS
ZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwogICAgICAgICBSZWdpc3RlcklEIG1fYXJndW1lbnRz
UmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2FjdGl2YXRpb25SZWdpc3RlckluZGV4OwotICAgICAg
ICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOwotICAg
ICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fcGFyYW1ldGVyczsKLSAgICAg
ICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMyPiBtX2dsb2JhbHM7Ci0gICAgICAgIFNl
Z21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOwotICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8TGFiZWxTY29wZSwgOD4gbV9sYWJlbFNjb3BlczsKKyAgICAgICAgV1RGOjpTZWdtZW50ZWRW
ZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVnaXN0ZXJzOworICAgICAgICBXVEY6OlNl
Z21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9wYXJhbWV0ZXJzOworICAgICAgICBXVEY6
OlNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9nbG9iYWxzOworICAgICAgICBXVEY6
OlNlZ21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxzOworICAgICAgICBXVEY6OlNlZ21l
bnRlZFZlY3RvcjxMYWJlbFNjb3BlLCA4PiBtX2xhYmVsU2NvcGVzOwogICAgICAgICBSZWZQdHI8
UmVnaXN0ZXJJRD4gbV9sYXN0Q29uc3RhbnQ7CiAgICAgICAgIGludCBtX2ZpbmFsbHlEZXB0aDsK
ICAgICAgICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0
Q29yZS9ieXRlY29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmggYi9KYXZhU2NyaXB0Q29yZS9ieXRl
Y29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmgKZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IGJiYWIwNGYuLjAwMDAwMDAKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL1NlZ21l
bnRlZFZlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEsMTcwICswLDAgQEAKLS8qCi0gKiBDb3B5
cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgotICoKLSAqIFJl
ZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Ig
d2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhl
IGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1
dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAotICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXBy
b2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNv
bmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKLSAqICAgICBkb2N1
bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJp
YnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUgb2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4g
KCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAgICBpdHMgY29udHJpYnV0b3JzIG1heSBi
ZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9kdWN0cyBkZXJpdmVkCi0gKiAgICAgZnJv
bSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMgcHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9u
LgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05U
UklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElF
UywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECi0gKiBXQVJSQU5U
SUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBP
U0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVO
VEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUwotICogKElO
Q0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZ
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgotICovCi0KLSNpZm5kZWYgU2Vn
bWVudGVkVmVjdG9yX2gKLSNkZWZpbmUgU2VnbWVudGVkVmVjdG9yX2gKLQotI2luY2x1ZGUgPHd0
Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0KLSAgICAvLyBTZWdtZW50ZWRWZWN0b3Ig
aXMganVzdCBsaWtlIFZlY3RvciwgYnV0IGl0IGRvZXNuJ3QgbW92ZSB0aGUgdmFsdWVzCi0gICAg
Ly8gc3RvcmVkIGluIGl0cyBidWZmZXIgd2hlbiBpdCBncm93cy4gVGhlcmVmb3JlLCBpdCBpcyBz
YWZlIHRvIGtlZXAKLSAgICAvLyBwb2ludGVycyBpbnRvIGEgU2VnbWVudGVkVmVjdG9yLgotICAg
IHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNpemU+IGNsYXNzIFNlZ21lbnRl
ZFZlY3RvciB7Ci0gICAgcHVibGljOgotICAgICAgICBTZWdtZW50ZWRWZWN0b3IoKQotICAgICAg
ICAgICAgOiBtX3NpemUoMCkKLSAgICAgICAgewotICAgICAgICAgICAgbV9zZWdtZW50cy5hcHBl
bmQoJm1faW5saW5lU2VnbWVudCk7Ci0gICAgICAgIH0KLQotICAgICAgICB+U2VnbWVudGVkVmVj
dG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgZGVsZXRlQWxsU2VnbWVudHMoKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29uc3QgeyByZXR1cm4gbV9zaXplOyB9Ci0K
LSAgICAgICAgVCYgYXQoc2l6ZV90IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBpZiAo
aW5kZXggPCBTZWdtZW50U2l6ZSkKLSAgICAgICAgICAgICAgICByZXR1cm4gbV9pbmxpbmVTZWdt
ZW50W2luZGV4XTsKLSAgICAgICAgICAgIHJldHVybiBzZWdtZW50Rm9yKGluZGV4KS0+YXQoc3Vi
c2NyaXB0Rm9yKGluZGV4KSk7Ci0gICAgICAgIH0KLQotICAgICAgICBUJiBvcGVyYXRvcltdKHNp
emVfdCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAgICAgcmV0dXJuIGF0KGluZGV4KTsKLSAg
ICAgICAgfQotCi0gICAgICAgIFQmIGxhc3QoKQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1
cm4gYXQoc2l6ZSgpIC0gMSk7Ci0gICAgICAgIH0KLQotICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5h
bWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSYgdmFsdWUpCi0gICAgICAgIHsKLSAgICAgICAgICAg
ICsrbV9zaXplOwotCi0gICAgICAgICAgICBpZiAobV9zaXplIDw9IFNlZ21lbnRTaXplKSB7Ci0g
ICAgICAgICAgICAgICAgbV9pbmxpbmVTZWdtZW50LnVuY2hlY2tlZEFwcGVuZCh2YWx1ZSk7Ci0g
ICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAgICAgfQotCi0gICAgICAgICAgICBpZiAo
IXNlZ21lbnRFeGlzdHNGb3IobV9zaXplIC0gMSkpCi0gICAgICAgICAgICAgICAgbV9zZWdtZW50
cy5hcHBlbmQobmV3IFNlZ21lbnQpOwotICAgICAgICAgICAgc2VnbWVudEZvcihtX3NpemUgLSAx
KS0+dW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgcmVt
b3ZlTGFzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGlmIChtX3NpemUgPD0gU2VnbWVudFNp
emUpCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTZWdtZW50LnJlbW92ZUxhc3QoKTsKLSAgICAg
ICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT5yZW1v
dmVMYXN0KCk7Ci0gICAgICAgICAgICAtLW1fc2l6ZTsKLSAgICAgICAgfQotCi0gICAgICAgIHZv
aWQgZ3JvdyhzaXplX3Qgc2l6ZSkKLSAgICAgICAgewotICAgICAgICAgICAgQVNTRVJUKHNpemUg
PiBtX3NpemUpOwotICAgICAgICAgICAgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZSk7Ci0gICAgICAg
ICAgICBtX3NpemUgPSBzaXplOwotICAgICAgICB9Ci0KLSAgICAgICAgdm9pZCBjbGVhcigpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFNlZ21lbnRzKCk7Ci0gICAgICAgICAgICBt
X3NlZ21lbnRzLnJlc2l6ZSgxKTsKLSAgICAgICAgICAgIG1faW5saW5lU2VnbWVudC5jbGVhcigp
OwotICAgICAgICAgICAgbV9zaXplID0gMDsKLSAgICAgICAgfQotCi0gICAgcHJpdmF0ZToKLSAg
ICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgU2VnbWVudFNpemU+IFNlZ21lbnQ7Ci0gICAgICAgIAot
ICAgICAgICB2b2lkIGRlbGV0ZUFsbFNlZ21lbnRzKCkKLSAgICAgICAgewotICAgICAgICAgICAg
Ly8gU2tpcCB0aGUgZmlyc3Qgc2VnbWVudCwgYmVjYXVzZSBpdCdzIG91ciBpbmxpbmUgc2VnbWVu
dCwgd2hpY2ggd2FzCi0gICAgICAgICAgICAvLyBub3QgY3JlYXRlZCBieSBuZXcuCi0gICAgICAg
ICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspCi0gICAg
ICAgICAgICAgICAgZGVsZXRlIG1fc2VnbWVudHNbaV07Ci0gICAgICAgIH0KLSAgICAgICAgCi0g
ICAgICAgIGJvb2wgc2VnbWVudEV4aXN0c0ZvcihzaXplX3QgaW5kZXgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRTaXplIDwgbV9zZWdtZW50cy5zaXplKCk7
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNlZ21lbnQqIHNlZ21lbnRGb3Ioc2l6ZV90
IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gbV9zZWdtZW50c1tpbmRleCAv
IFNlZ21lbnRTaXplXTsKLSAgICAgICAgfQotICAgICAgICAKLSAgICAgICAgc2l6ZV90IHN1YnNj
cmlwdEZvcihzaXplX3QgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRl
eCAlIFNlZ21lbnRTaXplOwotICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICB2b2lkIGVuc3Vy
ZVNlZ21lbnRzRm9yKHNpemVfdCBzaXplKQotICAgICAgICB7Ci0gICAgICAgICAgICBzaXplX3Qg
c2VnbWVudENvdW50ID0gbV9zaXplIC8gU2VnbWVudFNpemU7Ci0gICAgICAgICAgICBpZiAobV9z
aXplICUgU2VnbWVudFNpemUpCi0gICAgICAgICAgICAgICAgKytzZWdtZW50Q291bnQ7Ci0gICAg
ICAgICAgICBzZWdtZW50Q291bnQgPSBzdGQ6Om1heDxzaXplX3Q+KHNlZ21lbnRDb3VudCwgMSk7
IC8vIFdlIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG91ciBpbmxpbmUgc2VnbWVudC4KLQotICAgICAg
ICAgICAgc2l6ZV90IG5lZWRlZFNlZ21lbnRDb3VudCA9IHNpemUgLyBTZWdtZW50U2l6ZTsKLSAg
ICAgICAgICAgIGlmIChzaXplICUgU2VnbWVudFNpemUpCi0gICAgICAgICAgICAgICAgKytuZWVk
ZWRTZWdtZW50Q291bnQ7Ci0KLSAgICAgICAgICAgIC8vIEZpbGwgdXAgdG8gTiAtIDEgc2VnbWVu
dHMuCi0gICAgICAgICAgICBzaXplX3QgZW5kID0gbmVlZGVkU2VnbWVudENvdW50IC0gMTsKLSAg
ICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzZWdtZW50Q291bnQgLSAxOyBpIDwgZW5kOyArK2kp
Ci0gICAgICAgICAgICAgICAgZW5zdXJlU2VnbWVudChpLCBTZWdtZW50U2l6ZSk7Ci0gICAgICAg
ICAgICAKLSAgICAgICAgICAgIC8vIEdyb3cgc2VnbWVudCBOIHRvIGFjY29tb2RhdGUgdGhlIHJl
bWFpbmRlci4KLSAgICAgICAgICAgIGVuc3VyZVNlZ21lbnQoZW5kLCBzdWJzY3JpcHRGb3Ioc2l6
ZSAtIDEpICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAgICB2b2lkIGVuc3VyZVNlZ21lbnQoc2l6
ZV90IHNlZ21lbnRJbmRleCwgc2l6ZV90IHNpemUpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFT
U0VSVChzZWdtZW50SW5kZXggPD0gbV9zZWdtZW50cy5zaXplKCkpOwotICAgICAgICAgICAgaWYg
KHNlZ21lbnRJbmRleCA9PSBtX3NlZ21lbnRzLnNpemUoKSkKLSAgICAgICAgICAgICAgICBtX3Nl
Z21lbnRzLmFwcGVuZChuZXcgU2VnbWVudCk7Ci0gICAgICAgICAgICBtX3NlZ21lbnRzW3NlZ21l
bnRJbmRleF0tPmdyb3coc2l6ZSk7Ci0gICAgICAgIH0KLQotICAgICAgICBzaXplX3QgbV9zaXpl
OwotICAgICAgICBTZWdtZW50IG1faW5saW5lU2VnbWVudDsKLSAgICAgICAgVmVjdG9yPFNlZ21l
bnQqLCAzMj4gbV9zZWdtZW50czsKLSAgICB9OwotCi19IC8vIG5hbWVzcGFjZSBKU0MKLQotI2Vu
ZGlmIC8vIFNlZ21lbnRlZFZlY3Rvcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9wYXJz
ZXIvTGV4ZXIuaCBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCmluZGV4IDljMjJhOWMu
Ljk4YjgyZjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCkBAIC0yMywxMCArMjMsMTAgQEAKICNkZWZp
bmUgTGV4ZXJfaAogCiAjaW5jbHVkZSAiTG9va3VwLmgiCi0jaW5jbHVkZSAiU2VnbWVudGVkVmVj
dG9yLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0
b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmljb2RlLmg+CiAKIG5hbWVzcGFjZSBKU0Mg
ewpAQCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgbV9uZXh0
MjsKICAgICAgICAgaW50IG1fbmV4dDM7CiAgICAgICAgIAotICAgICAgICBTZWdtZW50ZWRWZWN0
b3I8SlNDOjpJZGVudGlmaWVyLCBpbml0aWFsSWRlbnRpZmllclRhYmxlQ2FwYWNpdHk+IG1faWRl
bnRpZmllcnM7CisgICAgICAgIFdURjo6U2VnbWVudGVkVmVjdG9yPEpTQzo6SWRlbnRpZmllciwg
aW5pdGlhbElkZW50aWZpZXJUYWJsZUNhcGFjaXR5PiBtX2lkZW50aWZpZXJzOwogCiAgICAgICAg
IEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvU2VnbWVudGVkVmVjdG9yLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVj
dG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNWU0OGE3YwotLS0gL2Rl
di9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaApAQCAtMCww
ICsxLDI1MiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdo
dHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRpb24gYW5kIHVzZSBpbiBzb3VyY2UgYW5k
IGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0CisgKiBtb2RpZmljYXRpb24sIGFyZSBwZXJt
aXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6
CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0
aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorICogMi4gIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90aGVyIG1hdGVyaWFscyBw
cm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisgKiAzLiAgTmVpdGhlciB0aGUgbmFtZSBv
ZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikgbm9yIHRoZSBuYW1lcyBvZgorICogICAg
IGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8gZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1
Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29mdHdhcmUgd2l0aG91dCBzcGVjaWZpYyBw
cmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURF
RCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5U
IFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyAqIERJ
UkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VR
VUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFBST0NV
UkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7CisgKiBMT1NTIE9GIFVTRSwg
REFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNF
RCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNU
LCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1Ig
T1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UgT0YKKyAqIFRISVMg
U09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCisgKi8KKworI2lmbmRlZiBTZWdtZW50ZWRWZWN0b3JfaAorI2RlZmluZSBTZWdtZW50ZWRW
ZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorCituYW1lc3BhY2UgV1RGIHsKKwor
ICAgIC8vIEluIGl0ZXJhdG9yIGZvciBTZWdtZW50ZWRWZWN0b3IuIEl0IHN1cHBvcnRzIG9ubHkg
dGhlIHByZSArKyBvcGVyYXRvcgorICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2Vn
bWVudFNpemU+IGNsYXNzIFNlZ21lbnRlZFZlY3RvcjsKKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUg
VCwgc2l6ZV90IFNlZ21lbnRTaXplPiBjbGFzcyBTZWdtZW50ZWRWZWN0b3JJdGVyYXRvciB7Cisg
ICAgcHJpdmF0ZToKKyAgICAgICAgZnJpZW5kIGNsYXNzIFNlZ21lbnRlZFZlY3RvcjxULCBTZWdt
ZW50U2l6ZT47CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVmIFNlZ21lbnRlZFZlY3Rvckl0
ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKworICAgICAgICB+U2VnbWVudGVkVmVj
dG9ySXRlcmF0b3IoKSB7IH0KKworICAgICAgICBUJiBvcGVyYXRvciooKSBjb25zdCB7IHJldHVy
biBtX3ZlY3Rvci5tX3NlZ21lbnRzLmF0KG1fc2VnbWVudCktPmF0KG1faW5kZXgpOyB9CisgICAg
ICAgIFQqIG9wZXJhdG9yLT4oKSBjb25zdCB7IHJldHVybiAmbV92ZWN0b3IubV9zZWdtZW50cy5h
dChtX3NlZ21lbnQpLT5hdChtX2luZGV4KTsgfQorCisgICAgICAgIC8vIE9ubHkgcHJlZml4ICsr
IG9wZXJhdG9yIHN1cHBvcnRlZAorICAgICAgICBJdGVyYXRvciYgb3BlcmF0b3IrKygpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChtX2luZGV4ICE9IFNlZ21lbnRTaXplKTsKKyAgICAg
ICAgICAgICsrbV9pbmRleDsKKyAgICAgICAgICAgIGlmIChtX2luZGV4ID49IG1fdmVjdG9yLm1f
c2VnbWVudHMuYXQobV9zZWdtZW50KS0+c2l6ZSgpKSAgeworICAgICAgICAgICAgICAgIGlmICht
X3NlZ21lbnQgKyAxIDwgbV92ZWN0b3IubV9zZWdtZW50cy5zaXplKCkpIHsKKyAgICAgICAgICAg
ICAgICAgICAgQVNTRVJUKG1fdmVjdG9yLm1fc2VnbWVudHMuYXQobV9zZWdtZW50KS0+c2l6ZSgp
ID4gMCk7CisgICAgICAgICAgICAgICAgICAgICsrbV9zZWdtZW50OworICAgICAgICAgICAgICAg
ICAgICBtX2luZGV4ID0gMDsKKyAgICAgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICAgICAgICAvLyBQb2ludHMgdG8gdGhlICJlbmQiIHN5bWJvbAorICAgICAgICAgICAgICAgICAg
ICBtX3NlZ21lbnQgPSAwOworICAgICAgICAgICAgICAgICAgICBtX2luZGV4ID0gU2VnbWVudFNp
emU7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJu
ICp0aGlzOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVyYXRvcj09KGNvbnN0IEl0ZXJh
dG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIChtX2luZGV4
ID09IG90aGVyLm1faW5kZXggJiYgbV9zZWdtZW50ID0gb3RoZXIubV9zZWdtZW50ICYmICZtX3Zl
Y3RvciA9PSAmb3RoZXIubV92ZWN0b3IpOworICAgICAgICB9CisKKyAgICAgICAgYm9vbCBvcGVy
YXRvciE9KGNvbnN0IEl0ZXJhdG9yJiBvdGhlcikgY29uc3QKKyAgICAgICAgeworICAgICAgICAg
ICAgcmV0dXJuIChtX2luZGV4ICE9IG90aGVyLm1faW5kZXggfHwgbV9zZWdtZW50ICE9IG90aGVy
Lm1fc2VnbWVudCB8fCAmbV92ZWN0b3IgIT0gJm90aGVyLm1fdmVjdG9yKTsKKyAgICAgICAgfQor
CisgICAgICAgIFNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yJiBvcGVyYXRvcj0oY29uc3QgU2VnbWVu
dGVkVmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+JiBvdGhlcikKKyAgICAgICAgeworICAg
ICAgICAgICAgbV92ZWN0b3IgPSBvdGhlci5tX3ZlY3RvcjsKKyAgICAgICAgICAgIG1fc2VnbWVu
dCA9IG90aGVyLm1fc2VnbWVudDsKKyAgICAgICAgICAgIG1faW5kZXggPSBvdGhlci5tX2luZGV4
OworICAgICAgICAgICAgcmV0dXJuICp0aGlzOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgor
ICAgICAgICBTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcihTZWdtZW50ZWRWZWN0b3I8VCwgU2VnbWVu
dFNpemU+JiB2ZWN0b3IsIHNpemVfdCBzZWdtZW50LCBzaXplX3QgaW5kZXgpCisgICAgICAgICAg
ICA6IG1fdmVjdG9yKHZlY3RvcikKKyAgICAgICAgICAgICwgbV9zZWdtZW50KHNlZ21lbnQpCisg
ICAgICAgICAgICAsIG1faW5kZXgoaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgfQorCisgICAg
ICAgIFNlZ21lbnRlZFZlY3RvcjxULCBTZWdtZW50U2l6ZT4mIG1fdmVjdG9yOworICAgICAgICBz
aXplX3QgbV9zZWdtZW50OworICAgICAgICBzaXplX3QgbV9pbmRleDsKKyAgICB9OworCisgICAg
Ly8gU2VnbWVudGVkVmVjdG9yIGlzIGp1c3QgbGlrZSBWZWN0b3IsIGJ1dCBpdCBkb2Vzbid0IG1v
dmUgdGhlIHZhbHVlcworICAgIC8vIHN0b3JlZCBpbiBpdHMgYnVmZmVyIHdoZW4gaXQgZ3Jvd3Mu
IFRoZXJlZm9yZSwgaXQgaXMgc2FmZSB0byBrZWVwCisgICAgLy8gcG9pbnRlcnMgaW50byBhIFNl
Z21lbnRlZFZlY3Rvci4KKyAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVCwgc2l6ZV90IFNlZ21lbnRT
aXplPiBjbGFzcyBTZWdtZW50ZWRWZWN0b3IgeworICAgICAgICBmcmllbmQgY2xhc3MgU2VnbWVu
dGVkVmVjdG9ySXRlcmF0b3I8VCwgU2VnbWVudFNpemU+OworICAgIHB1YmxpYzoKKyAgICAgICAg
dHlwZWRlZiBTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4gSXRlcmF0b3I7
CisKKyAgICAgICAgU2VnbWVudGVkVmVjdG9yKCkKKyAgICAgICAgICAgIDogbV9zaXplKDApCisg
ICAgICAgIHsKKyAgICAgICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKCZtX2lubGluZVNlZ21lbnQp
OworICAgICAgICB9CisKKyAgICAgICAgflNlZ21lbnRlZFZlY3RvcigpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGRlbGV0ZUFsbFNlZ21lbnRzKCk7CisgICAgICAgIH0KKworICAgICAgICBzaXpl
X3Qgc2l6ZSgpIGNvbnN0IHsgcmV0dXJuIG1fc2l6ZTsgfQorCisgICAgICAgIFQmIGF0KHNpemVf
dCBpbmRleCkKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKGluZGV4IDwgU2VnbWVudFNpemUp
CisgICAgICAgICAgICAgICAgcmV0dXJuIG1faW5saW5lU2VnbWVudFtpbmRleF07CisgICAgICAg
ICAgICByZXR1cm4gc2VnbWVudEZvcihpbmRleCktPmF0KHN1YnNjcmlwdEZvcihpbmRleCkpOwor
ICAgICAgICB9CisKKyAgICAgICAgVCYgb3BlcmF0b3JbXShzaXplX3QgaW5kZXgpCisgICAgICAg
IHsKKyAgICAgICAgICAgIHJldHVybiBhdChpbmRleCk7CisgICAgICAgIH0KKworICAgICAgICBU
JiBsYXN0KCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGF0KHNpemUoKSAtIDEpOwor
ICAgICAgICB9CisKKyAgICAgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFU+IHZvaWQgYXBwZW5kKGNv
bnN0IFUmIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICArK21fc2l6ZTsKKworICAgICAg
ICAgICAgaWYgKG1fc2l6ZSA8PSBTZWdtZW50U2l6ZSkgeworICAgICAgICAgICAgICAgIG1faW5s
aW5lU2VnbWVudC51bmNoZWNrZWRBcHBlbmQodmFsdWUpOworICAgICAgICAgICAgICAgIHJldHVy
bjsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaWYgKCFzZWdtZW50RXhpc3RzRm9yKG1f
c2l6ZSAtIDEpKQorICAgICAgICAgICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKG5ldyBTZWdtZW50
KTsKKyAgICAgICAgICAgIHNlZ21lbnRGb3IobV9zaXplIC0gMSktPnVuY2hlY2tlZEFwcGVuZCh2
YWx1ZSk7CisgICAgICAgIH0KKworICAgICAgICBUJiBhbGxvYygpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGFwcGVuZDxUPihUKCkpOworICAgICAgICAgICAgcmV0dXJuIGF0KG1fc2l6ZSAtIDEp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZW1vdmVMYXN0KCkKKyAgICAgICAgeworICAg
ICAgICAgICAgaWYgKG1fc2l6ZSA8PSBTZWdtZW50U2l6ZSkKKyAgICAgICAgICAgICAgICBtX2lu
bGluZVNlZ21lbnQucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgZWxzZQorICAgICAgICAgICAg
ICAgIHNlZ21lbnRGb3IobV9zaXplIC0gMSktPnJlbW92ZUxhc3QoKTsKKyAgICAgICAgICAgIC0t
bV9zaXplOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBncm93KHNpemVfdCBzaXplKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZSA+IG1fc2l6ZSk7CisgICAgICAgICAgICBl
bnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSA9IHNpemU7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgeworICAgICAgICAgICAgZGVs
ZXRlQWxsU2VnbWVudHMoKTsKKyAgICAgICAgICAgIG1fc2VnbWVudHMucmVzaXplKDEpOworICAg
ICAgICAgICAgbV9pbmxpbmVTZWdtZW50LmNsZWFyKCk7CisgICAgICAgICAgICBtX3NpemUgPSAw
OworICAgICAgICB9CisKKyAgICAgICAgSXRlcmF0b3IgYmVnaW4oKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDAsIG1fc2l6ZSA/IDAgOiBTZWdtZW50U2l6
ZSk7CisgICAgICAgIH0KKworICAgICAgICBJdGVyYXRvciBlbmQoKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDAsIFNlZ21lbnRTaXplKTsKKyAgICAgICAg
fQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgU2VnbWVudFNpemU+
IFNlZ21lbnQ7CisKKyAgICAgICAgdm9pZCBkZWxldGVBbGxTZWdtZW50cygpCisgICAgICAgIHsK
KyAgICAgICAgICAgIC8vIFNraXAgdGhlIGZpcnN0IHNlZ21lbnQsIGJlY2F1c2UgaXQncyBvdXIg
aW5saW5lIHNlZ21lbnQsIHdoaWNoIHdhcworICAgICAgICAgICAgLy8gbm90IGNyZWF0ZWQgYnkg
bmV3LgorICAgICAgICAgICAgZm9yIChzaXplX3QgaSA9IDE7IGkgPCBtX3NlZ21lbnRzLnNpemUo
KTsgaSsrKQorICAgICAgICAgICAgICAgIGRlbGV0ZSBtX3NlZ21lbnRzW2ldOworICAgICAgICB9
CisKKyAgICAgICAgYm9vbCBzZWdtZW50RXhpc3RzRm9yKHNpemVfdCBpbmRleCkKKyAgICAgICAg
eworICAgICAgICAgICAgcmV0dXJuIGluZGV4IC8gU2VnbWVudFNpemUgPCBtX3NlZ21lbnRzLnNp
emUoKTsKKyAgICAgICAgfQorCisgICAgICAgIFNlZ21lbnQqIHNlZ21lbnRGb3Ioc2l6ZV90IGlu
ZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9zZWdtZW50c1tpbmRleCAvIFNl
Z21lbnRTaXplXTsKKyAgICAgICAgfQorCisgICAgICAgIHNpemVfdCBzdWJzY3JpcHRGb3Ioc2l6
ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW5kZXggJSBTZWdtZW50
U2l6ZTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW5zdXJlU2VnbWVudHNGb3Ioc2l6ZV90
IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIHNpemVfdCBzZWdtZW50Q291bnQgPSBtX3Np
emUgLyBTZWdtZW50U2l6ZTsKKyAgICAgICAgICAgIGlmIChtX3NpemUgJSBTZWdtZW50U2l6ZSkK
KyAgICAgICAgICAgICAgICArK3NlZ21lbnRDb3VudDsKKyAgICAgICAgICAgIHNlZ21lbnRDb3Vu
dCA9IHN0ZDo6bWF4PHNpemVfdD4oc2VnbWVudENvdW50LCAxKTsgLy8gV2UgYWx3YXlzIGhhdmUg
YXQgbGVhc3Qgb3VyIGlubGluZSBzZWdtZW50LgorCisgICAgICAgICAgICBzaXplX3QgbmVlZGVk
U2VnbWVudENvdW50ID0gc2l6ZSAvIFNlZ21lbnRTaXplOworICAgICAgICAgICAgaWYgKHNpemUg
JSBTZWdtZW50U2l6ZSkKKyAgICAgICAgICAgICAgICArK25lZWRlZFNlZ21lbnRDb3VudDsKKwor
ICAgICAgICAgICAgLy8gRmlsbCB1cCB0byBOIC0gMSBzZWdtZW50cy4KKyAgICAgICAgICAgIHNp
emVfdCBlbmQgPSBuZWVkZWRTZWdtZW50Q291bnQgLSAxOworICAgICAgICAgICAgZm9yIChzaXpl
X3QgaSA9IHNlZ21lbnRDb3VudCAtIDE7IGkgPCBlbmQ7ICsraSkKKyAgICAgICAgICAgICAgICBl
bnN1cmVTZWdtZW50KGksIFNlZ21lbnRTaXplKTsKKworICAgICAgICAgICAgLy8gR3JvdyBzZWdt
ZW50IE4gdG8gYWNjb21vZGF0ZSB0aGUgcmVtYWluZGVyLgorICAgICAgICAgICAgZW5zdXJlU2Vn
bWVudChlbmQsIHN1YnNjcmlwdEZvcihzaXplIC0gMSkgKyAxKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZW5zdXJlU2VnbWVudChzaXplX3Qgc2VnbWVudEluZGV4LCBzaXplX3Qgc2l6ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHNlZ21lbnRJbmRleCA8PSBtX3NlZ21lbnRz
LnNpemUoKSk7CisgICAgICAgICAgICBpZiAoc2VnbWVudEluZGV4ID09IG1fc2VnbWVudHMuc2l6
ZSgpKQorICAgICAgICAgICAgICAgIG1fc2VnbWVudHMuYXBwZW5kKG5ldyBTZWdtZW50KTsKKyAg
ICAgICAgICAgIG1fc2VnbWVudHNbc2VnbWVudEluZGV4XS0+Z3JvdyhzaXplKTsKKyAgICAgICAg
fQorCisgICAgICAgIHNpemVfdCBtX3NpemU7CisgICAgICAgIFNlZ21lbnQgbV9pbmxpbmVTZWdt
ZW50OworICAgICAgICBWZWN0b3I8U2VnbWVudCosIDMyPiBtX3NlZ21lbnRzOworICAgIH07CisK
K30gLy8gbmFtZXNwYWNlIEpTQworCisjZW5kaWYgLy8gU2VnbWVudGVkVmVjdG9yX2gKLS0gCjEu
Ni4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31336</attachid>
            <date>2009-06-16 00:12:02 -0700</date>
            <delta_ts>2009-06-20 06:16:40 -0700</delta_ts>
            <desc>Only move Segmented vector to wtf sub-directory</desc>
            <filename>0001-Move-SegmentedVector.patch</filename>
            <type>text/plain</type>
            <size>15879</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBlNDIyZTFlOTBkYTFjNzk3ZThmNzA4MGEzODE5OTY4NjYyMDZjMjBmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDE2IEp1biAyMDA5IDA4OjU1OjQ1ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gTW92ZSBTZWdtZW50ZWRWZWN0b3IKClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6
aGVyY3plZ0BpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAg
ICAgICAgICAgICAgICAgICAgICAgfCAgIDMxICsrKysKIEphdmFTY3JpcHRDb3JlL2J5dGVjb21w
aWxlci9CeXRlY29kZUdlbmVyYXRvci5oIHwgICAxMiArLQogSmF2YVNjcmlwdENvcmUvYnl0ZWNv
bXBpbGVyL1NlZ21lbnRlZFZlY3Rvci5oICAgfCAgMTcwIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCAgICAgICAgICAgICAgICAgICB8ICAgIDQg
Ky0KIEphdmFTY3JpcHRDb3JlL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaCAgICAgICAgICAgIHwgIDE3
MCArKysrKysrKysrKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCAyMDkgaW5zZXJ0aW9u
cygrKSwgMTc4IGRlbGV0aW9ucygtKQogZGVsZXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9TZWdtZW50ZWRWZWN0b3IuaAogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFT
Y3JpcHRDb3JlL3d0Zi9TZWdtZW50ZWRWZWN0b3IuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBkMGU0OTBlLi4x
MDM2ZDgwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDYtMTUgIFpvbHRhbiBI
ZXJjemVnICA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5
IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1vdmUgU2VnbWVudGVkVmVjdG9yIHRvIC93dGYg
c3ViZGlyZWN0b3J5CisgICAgICAgIGFuZCBjaGFuZ2UgIm5hbWVzcGFjZSBKU0MiIHRvICJuYW1l
c3BhY2UgV1RGIgorCisgICAgICAgIEJ1ZyAyNDk4NjogQVJNIEpJVCBwb3J0CisgICAgICAgIDxo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODY+CisKKyAgICAgICAg
KiBieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaDoKKyAgICAgICAgKiBieXRlY29tcGls
ZXIvU2VnbWVudGVkVmVjdG9yLmg6IFJlbW92ZWQuCisgICAgICAgICogcGFyc2VyL0xleGVyLmg6
CisgICAgICAgICogd3RmL1NlZ21lbnRlZFZlY3Rvci5oOiBBZGRlZC4KKyAgICAgICAgKFdURjo6
U2VnbWVudGVkVmVjdG9yOjpTZWdtZW50ZWRWZWN0b3IpOgorICAgICAgICAoV1RGOjpTZWdtZW50
ZWRWZWN0b3I6On5TZWdtZW50ZWRWZWN0b3IpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0
b3I6OnNpemUpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OmF0KToKKyAgICAgICAg
KFdURjo6U2VnbWVudGVkVmVjdG9yOjpvcGVyYXRvcltdKToKKyAgICAgICAgKFdURjo6U2VnbWVu
dGVkVmVjdG9yOjpsYXN0KToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjphcHBlbmQp
OgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OnJlbW92ZUxhc3QpOgorICAgICAgICAo
V1RGOjpTZWdtZW50ZWRWZWN0b3I6Omdyb3cpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0
b3I6OmNsZWFyKToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9yOjpkZWxldGVBbGxTZWdt
ZW50cyk6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6c2VnbWVudEV4aXN0c0Zvcik6
CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvcjo6c2VnbWVudEZvcik6CisgICAgICAgIChX
VEY6OlNlZ21lbnRlZFZlY3Rvcjo6c3Vic2NyaXB0Rm9yKToKKyAgICAgICAgKFdURjo6U2VnbWVu
dGVkVmVjdG9yOjplbnN1cmVTZWdtZW50c0Zvcik6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZl
Y3Rvcjo6ZW5zdXJlU2VnbWVudCk6CisKIDIwMDktMDYtMTIgIERhdmUgSHlhdHQgIDxoeWF0dEBh
cHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgQW5kZXJzIENhcmxzc29uLgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNvbXBpbGVyL0J5dGVjb2RlR2VuZXJhdG9yLmggYi9K
YXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNvZGVHZW5lcmF0b3IuaAppbmRleCA2ODEz
ZDY5Li43NDVlZDk4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0
ZWNvZGVHZW5lcmF0b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQnl0ZWNv
ZGVHZW5lcmF0b3IuaApAQCAtMzcsMTIgKzM3LDEyIEBACiAjaW5jbHVkZSAiTGFiZWxTY29wZS5o
IgogI2luY2x1ZGUgIkludGVycHJldGVyLmgiCiAjaW5jbHVkZSAiUmVnaXN0ZXJJRC5oIgotI2lu
Y2x1ZGUgIlNlZ21lbnRlZFZlY3Rvci5oIgogI2luY2x1ZGUgIlN5bWJvbFRhYmxlLmgiCiAjaW5j
bHVkZSAiRGVidWdnZXIuaCIKICNpbmNsdWRlICJOb2Rlcy5oIgogI2luY2x1ZGUgPHd0Zi9QYXNz
UmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KIAogbmFtZXNwYWNlIEpTQyB7CiAKQEAgLTQ0OSwxMSArNDQ5LDExIEBAIG5h
bWVzcGFjZSBKU0MgewogICAgICAgICBSZWdpc3RlcklEIG1fdGhpc1JlZ2lzdGVyOwogICAgICAg
ICBSZWdpc3RlcklEIG1fYXJndW1lbnRzUmVnaXN0ZXI7CiAgICAgICAgIGludCBtX2FjdGl2YXRp
b25SZWdpc3RlckluZGV4OwotICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+
IG1fY2FsbGVlUmVnaXN0ZXJzOwotICAgICAgICBTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwg
MzI+IG1fcGFyYW1ldGVyczsKLSAgICAgICAgU2VnbWVudGVkVmVjdG9yPFJlZ2lzdGVySUQsIDMy
PiBtX2dsb2JhbHM7Ci0gICAgICAgIFNlZ21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFiZWxz
OwotICAgICAgICBTZWdtZW50ZWRWZWN0b3I8TGFiZWxTY29wZSwgOD4gbV9sYWJlbFNjb3BlczsK
KyAgICAgICAgV1RGOjpTZWdtZW50ZWRWZWN0b3I8UmVnaXN0ZXJJRCwgMzI+IG1fY2FsbGVlUmVn
aXN0ZXJzOworICAgICAgICBXVEY6OlNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4gbV9w
YXJhbWV0ZXJzOworICAgICAgICBXVEY6OlNlZ21lbnRlZFZlY3RvcjxSZWdpc3RlcklELCAzMj4g
bV9nbG9iYWxzOworICAgICAgICBXVEY6OlNlZ21lbnRlZFZlY3RvcjxMYWJlbCwgMzI+IG1fbGFi
ZWxzOworICAgICAgICBXVEY6OlNlZ21lbnRlZFZlY3RvcjxMYWJlbFNjb3BlLCA4PiBtX2xhYmVs
U2NvcGVzOwogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gbV9sYXN0Q29uc3RhbnQ7CiAgICAg
ICAgIGludCBtX2ZpbmFsbHlEZXB0aDsKICAgICAgICAgaW50IG1fZHluYW1pY1Njb3BlRGVwdGg7
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvU2VnbWVudGVkVmVjdG9y
LmggYi9KYXZhU2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvU2VnbWVudGVkVmVjdG9yLmgKZGVsZXRl
ZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IGJiYWIwNGYuLjAwMDAwMDAKLS0tIGEvSmF2YVNjcmlw
dENvcmUvYnl0ZWNvbXBpbGVyL1NlZ21lbnRlZFZlY3Rvci5oCisrKyAvZGV2L251bGwKQEAgLTEs
MTcwICswLDAgQEAKLS8qCi0gKiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLiBBbGwgcmln
aHRzIHJlc2VydmVkLgotICoKLSAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFu
ZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAotICogbW9kaWZpY2F0aW9uLCBhcmUgcGVy
bWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCi0gKiBhcmUgbWV0
OgotICoKLSAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4g
dGhlIGFib3ZlIGNvcHlyaWdodAotICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KLSAqIDIuICBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAotICogICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lciBpbiB0aGUKLSAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgotICogMy4gIE5laXRoZXIgdGhlIG5hbWUg
b2YgQXBwbGUgQ29tcHV0ZXIsIEluYy4gKCJBcHBsZSIpIG5vciB0aGUgbmFtZXMgb2YKLSAqICAg
ICBpdHMgY29udHJpYnV0b3JzIG1heSBiZSB1c2VkIHRvIGVuZG9yc2Ugb3IgcHJvbW90ZSBwcm9k
dWN0cyBkZXJpdmVkCi0gKiAgICAgZnJvbSB0aGlzIHNvZnR3YXJlIHdpdGhvdXQgc3BlY2lmaWMg
cHJpb3Igd3JpdHRlbiBwZXJtaXNzaW9uLgotICoKLSAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklE
RUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCi0gKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRSBJTVBMSUVECi0gKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCi0gKiBESVNDTEFJTUVELiBJTiBOTyBFVkVO
VCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCi0gKiBE
SVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNF
UVVFTlRJQUwgREFNQUdFUwotICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9D
VVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwotICogTE9TUyBPRiBVU0Us
IERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVT
RUQgQU5ECi0gKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFD
VCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAotICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9S
IE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCi0gKiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgotICovCi0KLSNpZm5kZWYgU2VnbWVudGVkVmVjdG9yX2gKLSNkZWZpbmUgU2VnbWVudGVk
VmVjdG9yX2gKLQotI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KLQotbmFtZXNwYWNlIEpTQyB7Ci0K
LSAgICAvLyBTZWdtZW50ZWRWZWN0b3IgaXMganVzdCBsaWtlIFZlY3RvciwgYnV0IGl0IGRvZXNu
J3QgbW92ZSB0aGUgdmFsdWVzCi0gICAgLy8gc3RvcmVkIGluIGl0cyBidWZmZXIgd2hlbiBpdCBn
cm93cy4gVGhlcmVmb3JlLCBpdCBpcyBzYWZlIHRvIGtlZXAKLSAgICAvLyBwb2ludGVycyBpbnRv
IGEgU2VnbWVudGVkVmVjdG9yLgotICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2Vn
bWVudFNpemU+IGNsYXNzIFNlZ21lbnRlZFZlY3RvciB7Ci0gICAgcHVibGljOgotICAgICAgICBT
ZWdtZW50ZWRWZWN0b3IoKQotICAgICAgICAgICAgOiBtX3NpemUoMCkKLSAgICAgICAgewotICAg
ICAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQoJm1faW5saW5lU2VnbWVudCk7Ci0gICAgICAgIH0K
LQotICAgICAgICB+U2VnbWVudGVkVmVjdG9yKCkKLSAgICAgICAgewotICAgICAgICAgICAgZGVs
ZXRlQWxsU2VnbWVudHMoKTsKLSAgICAgICAgfQotCi0gICAgICAgIHNpemVfdCBzaXplKCkgY29u
c3QgeyByZXR1cm4gbV9zaXplOyB9Ci0KLSAgICAgICAgVCYgYXQoc2l6ZV90IGluZGV4KQotICAg
ICAgICB7Ci0gICAgICAgICAgICBpZiAoaW5kZXggPCBTZWdtZW50U2l6ZSkKLSAgICAgICAgICAg
ICAgICByZXR1cm4gbV9pbmxpbmVTZWdtZW50W2luZGV4XTsKLSAgICAgICAgICAgIHJldHVybiBz
ZWdtZW50Rm9yKGluZGV4KS0+YXQoc3Vic2NyaXB0Rm9yKGluZGV4KSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICBUJiBvcGVyYXRvcltdKHNpemVfdCBpbmRleCkKLSAgICAgICAgewotICAgICAgICAg
ICAgcmV0dXJuIGF0KGluZGV4KTsKLSAgICAgICAgfQotCi0gICAgICAgIFQmIGxhc3QoKQotICAg
ICAgICB7Ci0gICAgICAgICAgICByZXR1cm4gYXQoc2l6ZSgpIC0gMSk7Ci0gICAgICAgIH0KLQot
ICAgICAgICB0ZW1wbGF0ZSA8dHlwZW5hbWUgVT4gdm9pZCBhcHBlbmQoY29uc3QgVSYgdmFsdWUp
Ci0gICAgICAgIHsKLSAgICAgICAgICAgICsrbV9zaXplOwotCi0gICAgICAgICAgICBpZiAobV9z
aXplIDw9IFNlZ21lbnRTaXplKSB7Ci0gICAgICAgICAgICAgICAgbV9pbmxpbmVTZWdtZW50LnVu
Y2hlY2tlZEFwcGVuZCh2YWx1ZSk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotCi0gICAgICAgICAgICBpZiAoIXNlZ21lbnRFeGlzdHNGb3IobV9zaXplIC0gMSkpCi0g
ICAgICAgICAgICAgICAgbV9zZWdtZW50cy5hcHBlbmQobmV3IFNlZ21lbnQpOwotICAgICAgICAg
ICAgc2VnbWVudEZvcihtX3NpemUgLSAxKS0+dW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKLSAgICAg
ICAgfQotCi0gICAgICAgIHZvaWQgcmVtb3ZlTGFzdCgpCi0gICAgICAgIHsKLSAgICAgICAgICAg
IGlmIChtX3NpemUgPD0gU2VnbWVudFNpemUpCi0gICAgICAgICAgICAgICAgbV9pbmxpbmVTZWdt
ZW50LnJlbW92ZUxhc3QoKTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzZWdt
ZW50Rm9yKG1fc2l6ZSAtIDEpLT5yZW1vdmVMYXN0KCk7Ci0gICAgICAgICAgICAtLW1fc2l6ZTsK
LSAgICAgICAgfQotCi0gICAgICAgIHZvaWQgZ3JvdyhzaXplX3Qgc2l6ZSkKLSAgICAgICAgewot
ICAgICAgICAgICAgQVNTRVJUKHNpemUgPiBtX3NpemUpOwotICAgICAgICAgICAgZW5zdXJlU2Vn
bWVudHNGb3Ioc2l6ZSk7Ci0gICAgICAgICAgICBtX3NpemUgPSBzaXplOwotICAgICAgICB9Ci0K
LSAgICAgICAgdm9pZCBjbGVhcigpCi0gICAgICAgIHsKLSAgICAgICAgICAgIGRlbGV0ZUFsbFNl
Z21lbnRzKCk7Ci0gICAgICAgICAgICBtX3NlZ21lbnRzLnJlc2l6ZSgxKTsKLSAgICAgICAgICAg
IG1faW5saW5lU2VnbWVudC5jbGVhcigpOwotICAgICAgICAgICAgbV9zaXplID0gMDsKLSAgICAg
ICAgfQotCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgU2VnbWVudFNp
emU+IFNlZ21lbnQ7Ci0gICAgICAgIAotICAgICAgICB2b2lkIGRlbGV0ZUFsbFNlZ21lbnRzKCkK
LSAgICAgICAgewotICAgICAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qgc2VnbWVudCwgYmVjYXVz
ZSBpdCdzIG91ciBpbmxpbmUgc2VnbWVudCwgd2hpY2ggd2FzCi0gICAgICAgICAgICAvLyBub3Qg
Y3JlYXRlZCBieSBuZXcuCi0gICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gMTsgaSA8IG1fc2Vn
bWVudHMuc2l6ZSgpOyBpKyspCi0gICAgICAgICAgICAgICAgZGVsZXRlIG1fc2VnbWVudHNbaV07
Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIGJvb2wgc2VnbWVudEV4aXN0c0ZvcihzaXpl
X3QgaW5kZXgpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHJldHVybiBpbmRleCAvIFNlZ21lbnRT
aXplIDwgbV9zZWdtZW50cy5zaXplKCk7Ci0gICAgICAgIH0KLSAgICAgICAgCi0gICAgICAgIFNl
Z21lbnQqIHNlZ21lbnRGb3Ioc2l6ZV90IGluZGV4KQotICAgICAgICB7Ci0gICAgICAgICAgICBy
ZXR1cm4gbV9zZWdtZW50c1tpbmRleCAvIFNlZ21lbnRTaXplXTsKLSAgICAgICAgfQotICAgICAg
ICAKLSAgICAgICAgc2l6ZV90IHN1YnNjcmlwdEZvcihzaXplX3QgaW5kZXgpCi0gICAgICAgIHsK
LSAgICAgICAgICAgIHJldHVybiBpbmRleCAlIFNlZ21lbnRTaXplOwotICAgICAgICB9Ci0gICAg
ICAgIAotICAgICAgICB2b2lkIGVuc3VyZVNlZ21lbnRzRm9yKHNpemVfdCBzaXplKQotICAgICAg
ICB7Ci0gICAgICAgICAgICBzaXplX3Qgc2VnbWVudENvdW50ID0gbV9zaXplIC8gU2VnbWVudFNp
emU7Ci0gICAgICAgICAgICBpZiAobV9zaXplICUgU2VnbWVudFNpemUpCi0gICAgICAgICAgICAg
ICAgKytzZWdtZW50Q291bnQ7Ci0gICAgICAgICAgICBzZWdtZW50Q291bnQgPSBzdGQ6Om1heDxz
aXplX3Q+KHNlZ21lbnRDb3VudCwgMSk7IC8vIFdlIGFsd2F5cyBoYXZlIGF0IGxlYXN0IG91ciBp
bmxpbmUgc2VnbWVudC4KLQotICAgICAgICAgICAgc2l6ZV90IG5lZWRlZFNlZ21lbnRDb3VudCA9
IHNpemUgLyBTZWdtZW50U2l6ZTsKLSAgICAgICAgICAgIGlmIChzaXplICUgU2VnbWVudFNpemUp
Ci0gICAgICAgICAgICAgICAgKytuZWVkZWRTZWdtZW50Q291bnQ7Ci0KLSAgICAgICAgICAgIC8v
IEZpbGwgdXAgdG8gTiAtIDEgc2VnbWVudHMuCi0gICAgICAgICAgICBzaXplX3QgZW5kID0gbmVl
ZGVkU2VnbWVudENvdW50IC0gMTsKLSAgICAgICAgICAgIGZvciAoc2l6ZV90IGkgPSBzZWdtZW50
Q291bnQgLSAxOyBpIDwgZW5kOyArK2kpCi0gICAgICAgICAgICAgICAgZW5zdXJlU2VnbWVudChp
LCBTZWdtZW50U2l6ZSk7Ci0gICAgICAgICAgICAKLSAgICAgICAgICAgIC8vIEdyb3cgc2VnbWVu
dCBOIHRvIGFjY29tb2RhdGUgdGhlIHJlbWFpbmRlci4KLSAgICAgICAgICAgIGVuc3VyZVNlZ21l
bnQoZW5kLCBzdWJzY3JpcHRGb3Ioc2l6ZSAtIDEpICsgMSk7Ci0gICAgICAgIH0KLQotICAgICAg
ICB2b2lkIGVuc3VyZVNlZ21lbnQoc2l6ZV90IHNlZ21lbnRJbmRleCwgc2l6ZV90IHNpemUpCi0g
ICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVChzZWdtZW50SW5kZXggPD0gbV9zZWdtZW50cy5z
aXplKCkpOwotICAgICAgICAgICAgaWYgKHNlZ21lbnRJbmRleCA9PSBtX3NlZ21lbnRzLnNpemUo
KSkKLSAgICAgICAgICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZChuZXcgU2VnbWVudCk7Ci0gICAg
ICAgICAgICBtX3NlZ21lbnRzW3NlZ21lbnRJbmRleF0tPmdyb3coc2l6ZSk7Ci0gICAgICAgIH0K
LQotICAgICAgICBzaXplX3QgbV9zaXplOwotICAgICAgICBTZWdtZW50IG1faW5saW5lU2VnbWVu
dDsKLSAgICAgICAgVmVjdG9yPFNlZ21lbnQqLCAzMj4gbV9zZWdtZW50czsKLSAgICB9OwotCi19
IC8vIG5hbWVzcGFjZSBKU0MKLQotI2VuZGlmIC8vIFNlZ21lbnRlZFZlY3Rvcl9oCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9wYXJzZXIvTGV4ZXIuaCBiL0phdmFTY3JpcHRDb3JlL3BhcnNl
ci9MZXhlci5oCmluZGV4IDljMjJhOWMuLjk4YjgyZjMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3BhcnNlci9MZXhlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3BhcnNlci9MZXhlci5oCkBA
IC0yMywxMCArMjMsMTAgQEAKICNkZWZpbmUgTGV4ZXJfaAogCiAjaW5jbHVkZSAiTG9va3VwLmgi
Ci0jaW5jbHVkZSAiU2VnbWVudGVkVmVjdG9yLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgog
I2luY2x1ZGUgPHd0Zi9BU0NJSUNUeXBlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgorI2lu
Y2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdW5pY29kZS9Vbmlj
b2RlLmg+CiAKIG5hbWVzcGFjZSBKU0MgewpAQCAtMTA4LDcgKzEwOCw3IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBpbnQgbV9uZXh0MjsKICAgICAgICAgaW50IG1fbmV4dDM7CiAgICAgICAg
IAotICAgICAgICBTZWdtZW50ZWRWZWN0b3I8SlNDOjpJZGVudGlmaWVyLCBpbml0aWFsSWRlbnRp
ZmllclRhYmxlQ2FwYWNpdHk+IG1faWRlbnRpZmllcnM7CisgICAgICAgIFdURjo6U2VnbWVudGVk
VmVjdG9yPEpTQzo6SWRlbnRpZmllciwgaW5pdGlhbElkZW50aWZpZXJUYWJsZUNhcGFjaXR5PiBt
X2lkZW50aWZpZXJzOwogCiAgICAgICAgIEpTR2xvYmFsRGF0YSogbV9nbG9iYWxEYXRhOwogCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVjdG9yLmggYi9KYXZhU2Ny
aXB0Q29yZS93dGYvU2VnbWVudGVkVmVjdG9yLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXgg
MDAwMDAwMC4uMjg2ODdiMgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9T
ZWdtZW50ZWRWZWN0b3IuaApAQCAtMCwwICsxLDE3MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykg
MjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisgKgorICogUmVkaXN0cmlidXRp
b24gYW5kIHVzZSBpbiBzb3VyY2UgYW5kIGJpbmFyeSBmb3Jtcywgd2l0aCBvciB3aXRob3V0Cisg
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyAqIGFyZSBtZXQ6CisgKgorICogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBz
b3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgor
ICogMi4gIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBh
bmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgIGRvY3VtZW50YXRpb24g
YW5kL29yIG90aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisg
KiAzLiAgTmVpdGhlciB0aGUgbmFtZSBvZiBBcHBsZSBDb21wdXRlciwgSW5jLiAoIkFwcGxlIikg
bm9yIHRoZSBuYW1lcyBvZgorICogICAgIGl0cyBjb250cmlidXRvcnMgbWF5IGJlIHVzZWQgdG8g
ZW5kb3JzZSBvciBwcm9tb3RlIHByb2R1Y3RzIGRlcml2ZWQKKyAqICAgICBmcm9tIHRoaXMgc29m
dHdhcmUgd2l0aG91dCBzcGVjaWZpYyBwcmlvciB3cml0dGVuIHBlcm1pc3Npb24uCisgKgorICog
VEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAi
QVMgSVMiIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJ
TkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyAqIFdBUlJBTlRJRVMgT0YgTUVS
Q0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIgUFVSUE9TRSBBUkUKKyAq
IERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkKKyAqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJ
QUwsIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisgKiAoSU5DTFVESU5HLCBC
VVQgTk9UIExJTUlURUQgVE8sIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7CisgKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyAqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UgT0YKKyAqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBTZWdtZW50ZWRWZWN0
b3JfaAorI2RlZmluZSBTZWdtZW50ZWRWZWN0b3JfaAorCisjaW5jbHVkZSA8d3RmL1ZlY3Rvci5o
PgorCituYW1lc3BhY2UgV1RGIHsKKworICAgIC8vIFNlZ21lbnRlZFZlY3RvciBpcyBqdXN0IGxp
a2UgVmVjdG9yLCBidXQgaXQgZG9lc24ndCBtb3ZlIHRoZSB2YWx1ZXMKKyAgICAvLyBzdG9yZWQg
aW4gaXRzIGJ1ZmZlciB3aGVuIGl0IGdyb3dzLiBUaGVyZWZvcmUsIGl0IGlzIHNhZmUgdG8ga2Vl
cAorICAgIC8vIHBvaW50ZXJzIGludG8gYSBTZWdtZW50ZWRWZWN0b3IuCisgICAgdGVtcGxhdGUg
PHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6ZT4gY2xhc3MgU2VnbWVudGVkVmVjdG9yIHsK
KyAgICBwdWJsaWM6CisgICAgICAgIFNlZ21lbnRlZFZlY3RvcigpCisgICAgICAgICAgICA6IG1f
c2l6ZSgwKQorICAgICAgICB7CisgICAgICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZCgmbV9pbmxp
bmVTZWdtZW50KTsKKyAgICAgICAgfQorCisgICAgICAgIH5TZWdtZW50ZWRWZWN0b3IoKQorICAg
ICAgICB7CisgICAgICAgICAgICBkZWxldGVBbGxTZWdtZW50cygpOworICAgICAgICB9CisKKyAg
ICAgICAgc2l6ZV90IHNpemUoKSBjb25zdCB7IHJldHVybiBtX3NpemU7IH0KKworICAgICAgICBU
JiBhdChzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChpbmRleCA8IFNl
Z21lbnRTaXplKQorICAgICAgICAgICAgICAgIHJldHVybiBtX2lubGluZVNlZ21lbnRbaW5kZXhd
OworICAgICAgICAgICAgcmV0dXJuIHNlZ21lbnRGb3IoaW5kZXgpLT5hdChzdWJzY3JpcHRGb3Io
aW5kZXgpKTsKKyAgICAgICAgfQorCisgICAgICAgIFQmIG9wZXJhdG9yW10oc2l6ZV90IGluZGV4
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gYXQoaW5kZXgpOworICAgICAgICB9CisK
KyAgICAgICAgVCYgbGFzdCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBhdChzaXpl
KCkgLSAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBVPiB2b2lk
IGFwcGVuZChjb25zdCBVJiB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgKyttX3NpemU7
CisKKyAgICAgICAgICAgIGlmIChtX3NpemUgPD0gU2VnbWVudFNpemUpIHsKKyAgICAgICAgICAg
ICAgICBtX2lubGluZVNlZ21lbnQudW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKKyAgICAgICAgICAg
ICAgICByZXR1cm47CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGlmICghc2VnbWVudEV4
aXN0c0ZvcihtX3NpemUgLSAxKSkKKyAgICAgICAgICAgICAgICBtX3NlZ21lbnRzLmFwcGVuZChu
ZXcgU2VnbWVudCk7CisgICAgICAgICAgICBzZWdtZW50Rm9yKG1fc2l6ZSAtIDEpLT51bmNoZWNr
ZWRBcHBlbmQodmFsdWUpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByZW1vdmVMYXN0KCkK
KyAgICAgICAgeworICAgICAgICAgICAgaWYgKG1fc2l6ZSA8PSBTZWdtZW50U2l6ZSkKKyAgICAg
ICAgICAgICAgICBtX2lubGluZVNlZ21lbnQucmVtb3ZlTGFzdCgpOworICAgICAgICAgICAgZWxz
ZQorICAgICAgICAgICAgICAgIHNlZ21lbnRGb3IobV9zaXplIC0gMSktPnJlbW92ZUxhc3QoKTsK
KyAgICAgICAgICAgIC0tbV9zaXplOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBncm93KHNp
emVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoc2l6ZSA+IG1fc2l6ZSk7
CisgICAgICAgICAgICBlbnN1cmVTZWdtZW50c0ZvcihzaXplKTsKKyAgICAgICAgICAgIG1fc2l6
ZSA9IHNpemU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGNsZWFyKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZGVsZXRlQWxsU2VnbWVudHMoKTsKKyAgICAgICAgICAgIG1fc2VnbWVudHMu
cmVzaXplKDEpOworICAgICAgICAgICAgbV9pbmxpbmVTZWdtZW50LmNsZWFyKCk7CisgICAgICAg
ICAgICBtX3NpemUgPSAwOworICAgICAgICB9CisKKyAgICBwcml2YXRlOgorICAgICAgICB0eXBl
ZGVmIFZlY3RvcjxULCBTZWdtZW50U2l6ZT4gU2VnbWVudDsKKworICAgICAgICB2b2lkIGRlbGV0
ZUFsbFNlZ21lbnRzKCkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gU2tpcCB0aGUgZmlyc3Qg
c2VnbWVudCwgYmVjYXVzZSBpdCdzIG91ciBpbmxpbmUgc2VnbWVudCwgd2hpY2ggd2FzCisgICAg
ICAgICAgICAvLyBub3QgY3JlYXRlZCBieSBuZXcuCisgICAgICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMTsgaSA8IG1fc2VnbWVudHMuc2l6ZSgpOyBpKyspCisgICAgICAgICAgICAgICAgZGVsZXRl
IG1fc2VnbWVudHNbaV07CisgICAgICAgIH0KKworICAgICAgICBib29sIHNlZ21lbnRFeGlzdHNG
b3Ioc2l6ZV90IGluZGV4KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gaW5kZXggLyBT
ZWdtZW50U2l6ZSA8IG1fc2VnbWVudHMuc2l6ZSgpOworICAgICAgICB9CisKKyAgICAgICAgU2Vn
bWVudCogc2VnbWVudEZvcihzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiBtX3NlZ21lbnRzW2luZGV4IC8gU2VnbWVudFNpemVdOworICAgICAgICB9CisKKyAgICAg
ICAgc2l6ZV90IHN1YnNjcmlwdEZvcihzaXplX3QgaW5kZXgpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIHJldHVybiBpbmRleCAlIFNlZ21lbnRTaXplOworICAgICAgICB9CisKKyAgICAgICAgdm9p
ZCBlbnN1cmVTZWdtZW50c0ZvcihzaXplX3Qgc2l6ZSkKKyAgICAgICAgeworICAgICAgICAgICAg
c2l6ZV90IHNlZ21lbnRDb3VudCA9IG1fc2l6ZSAvIFNlZ21lbnRTaXplOworICAgICAgICAgICAg
aWYgKG1fc2l6ZSAlIFNlZ21lbnRTaXplKQorICAgICAgICAgICAgICAgICsrc2VnbWVudENvdW50
OworICAgICAgICAgICAgc2VnbWVudENvdW50ID0gc3RkOjptYXg8c2l6ZV90PihzZWdtZW50Q291
bnQsIDEpOyAvLyBXZSBhbHdheXMgaGF2ZSBhdCBsZWFzdCBvdXIgaW5saW5lIHNlZ21lbnQuCisK
KyAgICAgICAgICAgIHNpemVfdCBuZWVkZWRTZWdtZW50Q291bnQgPSBzaXplIC8gU2VnbWVudFNp
emU7CisgICAgICAgICAgICBpZiAoc2l6ZSAlIFNlZ21lbnRTaXplKQorICAgICAgICAgICAgICAg
ICsrbmVlZGVkU2VnbWVudENvdW50OworCisgICAgICAgICAgICAvLyBGaWxsIHVwIHRvIE4gLSAx
IHNlZ21lbnRzLgorICAgICAgICAgICAgc2l6ZV90IGVuZCA9IG5lZWRlZFNlZ21lbnRDb3VudCAt
IDE7CisgICAgICAgICAgICBmb3IgKHNpemVfdCBpID0gc2VnbWVudENvdW50IC0gMTsgaSA8IGVu
ZDsgKytpKQorICAgICAgICAgICAgICAgIGVuc3VyZVNlZ21lbnQoaSwgU2VnbWVudFNpemUpOwor
CisgICAgICAgICAgICAvLyBHcm93IHNlZ21lbnQgTiB0byBhY2NvbW9kYXRlIHRoZSByZW1haW5k
ZXIuCisgICAgICAgICAgICBlbnN1cmVTZWdtZW50KGVuZCwgc3Vic2NyaXB0Rm9yKHNpemUgLSAx
KSArIDEpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbnN1cmVTZWdtZW50KHNpemVfdCBz
ZWdtZW50SW5kZXgsIHNpemVfdCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQo
c2VnbWVudEluZGV4IDw9IG1fc2VnbWVudHMuc2l6ZSgpKTsKKyAgICAgICAgICAgIGlmIChzZWdt
ZW50SW5kZXggPT0gbV9zZWdtZW50cy5zaXplKCkpCisgICAgICAgICAgICAgICAgbV9zZWdtZW50
cy5hcHBlbmQobmV3IFNlZ21lbnQpOworICAgICAgICAgICAgbV9zZWdtZW50c1tzZWdtZW50SW5k
ZXhdLT5ncm93KHNpemUpOworICAgICAgICB9CisKKyAgICAgICAgc2l6ZV90IG1fc2l6ZTsKKyAg
ICAgICAgU2VnbWVudCBtX2lubGluZVNlZ21lbnQ7CisgICAgICAgIFZlY3RvcjxTZWdtZW50Kiwg
MzI+IG1fc2VnbWVudHM7CisgICAgfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAv
LyBTZWdtZW50ZWRWZWN0b3JfaAotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31337</attachid>
            <date>2009-06-16 00:12:40 -0700</date>
            <delta_ts>2009-06-20 06:28:38 -0700</delta_ts>
            <desc>Add an Iterator to SegmentedVector</desc>
            <filename>0002-An-Iterator-added-to-SegmentedVector.patch</filename>
            <type>text/plain</type>
            <size>5335</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBlY2MwNjBiNDFkM2QwMDJjOGI3ZWM2ZjgwMTk1YTNkMDg5ZWJmOTkzIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDE2IEp1biAyMDA5IDA5OjA2OjIyICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQW4gSXRlcmF0b3IgYWRkZWQgdG8gU2VnbWVudGVkVmVjdG9yCgpTaWduZWQtb2ZmLWJ5OiBa
b2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyAgICAgICAgICAgICB8ICAgMjMgKysrKysrKysrCiBKYXZhU2NyaXB0Q29y
ZS93dGYvU2VnbWVudGVkVmVjdG9yLmggfCAgIDgyICsrKysrKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysKIDIgZmlsZXMgY2hhbmdlZCwgMTA1IGluc2VydGlvbnMoKyksIDAgZGVsZXRpb25z
KC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENv
cmUvQ2hhbmdlTG9nCmluZGV4IDEwMzZkODAuLjg3MjBhMWQgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiAr
MiwyOSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAg
IEFuIEl0ZXJhdG9yIGFkZGVkIGZvciBTZWdtZW50ZWRWZWN0b3IuIEN1cnJlbnRseQorICAgICAg
ICBvbmx5IHRoZSBwcmUgKysgb3BlcmF0b3IgaXMgc3VwcG9ydGVkLgorCisgICAgICAgIEJ1ZyAy
NDk4NjogQVJNIEpJVCBwb3J0CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9MjQ5ODY+CisKKyAgICAgICAgKiB3dGYvU2VnbWVudGVkVmVjdG9yLmg6Cisg
ICAgICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yOjp+U2VnbWVudGVkVmVjdG9ySXRl
cmF0b3IpOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3Iq
KToKKyAgICAgICAgKFdURjo6U2VnbWVudGVkVmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yLT4pOgor
ICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3IrKyk6CisgICAg
ICAgIChXVEY6OlNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yOjpvcGVyYXRvcj09KToKKyAgICAgICAg
KFdURjo6U2VnbWVudGVkVmVjdG9ySXRlcmF0b3I6Om9wZXJhdG9yIT0pOgorICAgICAgICAoV1RG
OjpTZWdtZW50ZWRWZWN0b3JJdGVyYXRvcjo6b3BlcmF0b3I9KToKKyAgICAgICAgKFdURjo6U2Vn
bWVudGVkVmVjdG9ySXRlcmF0b3I6OlNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yKToKKyAgICAgICAg
KFdURjo6U2VnbWVudGVkVmVjdG9yOjphbGxvYyk6CisgICAgICAgIChXVEY6OlNlZ21lbnRlZFZl
Y3Rvcjo6YmVnaW4pOgorICAgICAgICAoV1RGOjpTZWdtZW50ZWRWZWN0b3I6OmVuZCk6CisKKzIw
MDktMDYtMTUgIFpvbHRhbiBIZXJjemVnICA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgorCisg
ICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIE1vdmUgU2VnbWVu
dGVkVmVjdG9yIHRvIC93dGYgc3ViZGlyZWN0b3J5CiAgICAgICAgIGFuZCBjaGFuZ2UgIm5hbWVz
cGFjZSBKU0MiIHRvICJuYW1lc3BhY2UgV1RGIgogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvU2VnbWVudGVkVmVjdG9yLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvU2VnbWVudGVkVmVj
dG9yLmgKaW5kZXggMjg2ODdiMi4uZDc4OGU1ZCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
d3RmL1NlZ21lbnRlZFZlY3Rvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9TZWdtZW50ZWRW
ZWN0b3IuaApAQCAtMzMsMTEgKzMzLDc3IEBACiAKIG5hbWVzcGFjZSBXVEYgewogCisgICAgLy8g
QW4gaXRlcmF0b3IgZm9yIFNlZ21lbnRlZFZlY3Rvci4gSXQgc3VwcG9ydHMgb25seSB0aGUgcHJl
ICsrIG9wZXJhdG9yCisgICAgdGVtcGxhdGUgPHR5cGVuYW1lIFQsIHNpemVfdCBTZWdtZW50U2l6
ZT4gY2xhc3MgU2VnbWVudGVkVmVjdG9yOworICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXpl
X3QgU2VnbWVudFNpemU+IGNsYXNzIFNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yIHsKKyAgICBwcml2
YXRlOgorICAgICAgICBmcmllbmQgY2xhc3MgU2VnbWVudGVkVmVjdG9yPFQsIFNlZ21lbnRTaXpl
PjsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgU2VnbWVudGVkVmVjdG9ySXRlcmF0b3I8
VCwgU2VnbWVudFNpemU+IEl0ZXJhdG9yOworCisgICAgICAgIH5TZWdtZW50ZWRWZWN0b3JJdGVy
YXRvcigpIHsgfQorCisgICAgICAgIFQmIG9wZXJhdG9yKigpIGNvbnN0IHsgcmV0dXJuIG1fdmVj
dG9yLm1fc2VnbWVudHMuYXQobV9zZWdtZW50KS0+YXQobV9pbmRleCk7IH0KKyAgICAgICAgVCog
b3BlcmF0b3ItPigpIGNvbnN0IHsgcmV0dXJuICZtX3ZlY3Rvci5tX3NlZ21lbnRzLmF0KG1fc2Vn
bWVudCktPmF0KG1faW5kZXgpOyB9CisKKyAgICAgICAgLy8gT25seSBwcmVmaXggKysgb3BlcmF0
b3Igc3VwcG9ydGVkCisgICAgICAgIEl0ZXJhdG9yJiBvcGVyYXRvcisrKCkKKyAgICAgICAgewor
ICAgICAgICAgICAgQVNTRVJUKG1faW5kZXggIT0gU2VnbWVudFNpemUpOworICAgICAgICAgICAg
KyttX2luZGV4OworICAgICAgICAgICAgaWYgKG1faW5kZXggPj0gbV92ZWN0b3IubV9zZWdtZW50
cy5hdChtX3NlZ21lbnQpLT5zaXplKCkpICB7CisgICAgICAgICAgICAgICAgaWYgKG1fc2VnbWVu
dCArIDEgPCBtX3ZlY3Rvci5tX3NlZ21lbnRzLnNpemUoKSkgeworICAgICAgICAgICAgICAgICAg
ICBBU1NFUlQobV92ZWN0b3IubV9zZWdtZW50cy5hdChtX3NlZ21lbnQpLT5zaXplKCkgPiAwKTsK
KyAgICAgICAgICAgICAgICAgICAgKyttX3NlZ21lbnQ7CisgICAgICAgICAgICAgICAgICAgIG1f
aW5kZXggPSAwOworICAgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIFBvaW50cyB0byB0aGUgImVuZCIgc3ltYm9sCisgICAgICAgICAgICAgICAgICAgIG1fc2Vn
bWVudCA9IDA7CisgICAgICAgICAgICAgICAgICAgIG1faW5kZXggPSBTZWdtZW50U2l6ZTsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgICByZXR1cm4gKnRoaXM7
CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yPT0oY29uc3QgSXRlcmF0b3ImIG90
aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKG1faW5kZXggPT0gb3Ro
ZXIubV9pbmRleCAmJiBtX3NlZ21lbnQgPSBvdGhlci5tX3NlZ21lbnQgJiYgJm1fdmVjdG9yID09
ICZvdGhlci5tX3ZlY3Rvcik7CisgICAgICAgIH0KKworICAgICAgICBib29sIG9wZXJhdG9yIT0o
Y29uc3QgSXRlcmF0b3ImIG90aGVyKSBjb25zdAorICAgICAgICB7CisgICAgICAgICAgICByZXR1
cm4gKG1faW5kZXggIT0gb3RoZXIubV9pbmRleCB8fCBtX3NlZ21lbnQgIT0gb3RoZXIubV9zZWdt
ZW50IHx8ICZtX3ZlY3RvciAhPSAmb3RoZXIubV92ZWN0b3IpOworICAgICAgICB9CisKKyAgICAg
ICAgU2VnbWVudGVkVmVjdG9ySXRlcmF0b3ImIG9wZXJhdG9yPShjb25zdCBTZWdtZW50ZWRWZWN0
b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT4mIG90aGVyKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX3ZlY3RvciA9IG90aGVyLm1fdmVjdG9yOworICAgICAgICAgICAgbV9zZWdtZW50ID0gb3Ro
ZXIubV9zZWdtZW50OworICAgICAgICAgICAgbV9pbmRleCA9IG90aGVyLm1faW5kZXg7CisgICAg
ICAgICAgICByZXR1cm4gKnRoaXM7CisgICAgICAgIH0KKworICAgIHByaXZhdGU6CisgICAgICAg
IFNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yKFNlZ21lbnRlZFZlY3RvcjxULCBTZWdtZW50U2l6ZT4m
IHZlY3Rvciwgc2l6ZV90IHNlZ21lbnQsIHNpemVfdCBpbmRleCkKKyAgICAgICAgICAgIDogbV92
ZWN0b3IodmVjdG9yKQorICAgICAgICAgICAgLCBtX3NlZ21lbnQoc2VnbWVudCkKKyAgICAgICAg
ICAgICwgbV9pbmRleChpbmRleCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU2Vn
bWVudGVkVmVjdG9yPFQsIFNlZ21lbnRTaXplPiYgbV92ZWN0b3I7CisgICAgICAgIHNpemVfdCBt
X3NlZ21lbnQ7CisgICAgICAgIHNpemVfdCBtX2luZGV4OworICAgIH07CisKICAgICAvLyBTZWdt
ZW50ZWRWZWN0b3IgaXMganVzdCBsaWtlIFZlY3RvciwgYnV0IGl0IGRvZXNuJ3QgbW92ZSB0aGUg
dmFsdWVzCiAgICAgLy8gc3RvcmVkIGluIGl0cyBidWZmZXIgd2hlbiBpdCBncm93cy4gVGhlcmVm
b3JlLCBpdCBpcyBzYWZlIHRvIGtlZXAKICAgICAvLyBwb2ludGVycyBpbnRvIGEgU2VnbWVudGVk
VmVjdG9yLgogICAgIHRlbXBsYXRlIDx0eXBlbmFtZSBULCBzaXplX3QgU2VnbWVudFNpemU+IGNs
YXNzIFNlZ21lbnRlZFZlY3RvciB7CisgICAgICAgIGZyaWVuZCBjbGFzcyBTZWdtZW50ZWRWZWN0
b3JJdGVyYXRvcjxULCBTZWdtZW50U2l6ZT47CiAgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IFNlZ21lbnRlZFZlY3Rvckl0ZXJhdG9yPFQsIFNlZ21lbnRTaXplPiBJdGVyYXRvcjsKKwogICAg
ICAgICBTZWdtZW50ZWRWZWN0b3IoKQogICAgICAgICAgICAgOiBtX3NpemUoMCkKICAgICAgICAg
ewpAQCAtODIsNiArMTQ4LDEyIEBAIG5hbWVzcGFjZSBXVEYgewogICAgICAgICAgICAgc2VnbWVu
dEZvcihtX3NpemUgLSAxKS0+dW5jaGVja2VkQXBwZW5kKHZhbHVlKTsKICAgICAgICAgfQogCisg
ICAgICAgIFQmIGFsbG9jKCkKKyAgICAgICAgeworICAgICAgICAgICAgYXBwZW5kPFQ+KFQoKSk7
CisgICAgICAgICAgICByZXR1cm4gbGFzdCgpOworICAgICAgICB9CisKICAgICAgICAgdm9pZCBy
ZW1vdmVMYXN0KCkKICAgICAgICAgewogICAgICAgICAgICAgaWYgKG1fc2l6ZSA8PSBTZWdtZW50
U2l6ZSkKQEAgLTEwNiw2ICsxNzgsMTYgQEAgbmFtZXNwYWNlIFdURiB7CiAgICAgICAgICAgICBt
X3NpemUgPSAwOwogICAgICAgICB9CiAKKyAgICAgICAgSXRlcmF0b3IgYmVnaW4oKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDAsIG1fc2l6ZSA/IDAgOiBT
ZWdtZW50U2l6ZSk7CisgICAgICAgIH0KKworICAgICAgICBJdGVyYXRvciBlbmQoKQorICAgICAg
ICB7CisgICAgICAgICAgICByZXR1cm4gSXRlcmF0b3IoKnRoaXMsIDAsIFNlZ21lbnRTaXplKTsK
KyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgdHlwZWRlZiBWZWN0b3I8VCwgU2Vn
bWVudFNpemU+IFNlZ21lbnQ7CiAKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>31537</attachid>
            <date>2009-06-19 02:20:00 -0700</date>
            <delta_ts>2009-06-20 05:32:01 -0700</delta_ts>
            <desc>Reorganize ARM architecture specific macros</desc>
            <filename>0001-Reorganize-ARM-architecture-specific-macros.patch</filename>
            <type>text/plain</type>
            <size>13452</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBkZDk5NDkxYjYxYjBmZTc3MWYyOWUyZGFmMjlmNDBlZGQ0OTQ1MTQ5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogRnJpLCAxOSBKdW4gMjAwOSAxMTowODoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFJlb3Jn
YW5pemUgQVJNIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyBtYWNyb3MuCiBVc2UgUExBVEZPUk1fQVJN
X0FSQ0goNykgaW5zdGVhZCBvZiBQTEFURk9STShBUk1fVjcpLgoKU2lnbmVkLW9mZi1ieTogR2Fi
b3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAgMjggKysrKysrKysrKysrKysrKysrKysr
CiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCAgICAgICAgIHwgICAg
NCArLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCB8
ICAgIDYgKystLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggICAg
ICAgICB8ICAgIDIgKy0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNv
ZGVSZWYuaCAgfCAgICA2ICsrLS0KIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmggICAgICAgICAgfCAgICAyICstCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAg
ICAgICAgICAgICAgICAgICAgIHwgICAgNCArLQogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGlu
ZU1ldGhvZHMuaCAgICAgICAgICAgICB8ICAgIDQgKy0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAgICAgICAgICAgICAgICAgICAgfCAgICA0ICstCiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUU3R1YnMuaCAgICAgICAgICAgICAgICAgICAgIHwgICAgMiArLQogSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICAgICAgICB8ICAgMjcgKysrKysrKysrKysrKysr
KystLS0KIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwICAgICAgICAgICAgICAgICAg
fCAgICA2ICsrLS0KIDEyIGZpbGVzIGNoYW5nZWQsIDcxIGluc2VydGlvbnMoKyksIDI0IGRlbGV0
aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZwppbmRleCA4M2FhNmUxLi5kZWZlZjc1IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0x
LDMgKzEsMzEgQEAKKzIwMDktMDYtMTkgIEdhYm9yIExva2kgIDxsb2tpQGluZi51LXN6ZWdlZC5o
dT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBSZW9y
Z2FuaXplIEFSTSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgbWFjcm9zLgorICAgICAgICBVc2UgUExB
VEZPUk1fQVJNX0FSQ0goNykgaW5zdGVhZCBvZiBQTEFURk9STShBUk1fVjcpLgorCisgICAgICAg
IEJ1ZyAyNDk4NjogQVJNIEpJVCBwb3J0CisgICAgICAgIDxodHRwczovL2J1Z3Mud2Via2l0Lm9y
Zy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODY+CisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3Nl
bWJsZXIuaDoKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpJbW0zMjo6SW1tMzIpOgorICAg
ICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckNvZGVSZWYuaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJDb2Rl
UHRyOjpNYWNyb0Fzc2VtYmxlckNvZGVQdHIpOgorICAgICAgICAqIGppdC9FeGVjdXRhYmxlQWxs
b2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2gp
OgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9kcy5o
OgorICAgICAgICAoSlNDOjpKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5jZUZvclRyYW1wb2xp
bmUpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICogaml0L0pJVFN0dWJz
Lmg6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogeWFyci9SZWdleEpJVC5j
cHA6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToK
KyAgICAgICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKwog
MjAwOS0wNi0xOCAgS2V2aW4gTWNDdWxsb3VnaCAgPGttY2N1bGxvdWdoQGFwcGxlLmNvbT4KIAog
ICAgICAgICBSZXZpZXdlZCBieSBPbGl2ZXIgSHVudC4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTXY3QXNzZW1ibGVyLmgKaW5kZXggMmNlNDJhOS4uOTc0NWQ2ZCAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmgKQEAgLTI4LDcgKzI4LDcgQEAKIAogI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgogCi0jaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0o
QVJNX1Y3KQorI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCiAK
ICNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKICNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgpAQCAtMTc1Myw2ICsxNzUzLDYgQEAgcHJpdmF0ZToKIAogfSAvLyBuYW1lc3BhY2UgSlNDCiAK
LSNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShBUk1fVjcpCisjZW5kaWYg
Ly8gRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk1fQVJNX0FSQ0goNykKIAogI2VuZGlmIC8v
IEFSTUFzc2VtYmxlcl9oCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJz
dHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBkOTQ3YTdiLi5jZjk0Njc3IDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTE3NSw3ICsx
NzUsNyBAQCBwdWJsaWM6CiAgICAgc3RydWN0IEltbTMyIHsKICAgICAgICAgZXhwbGljaXQgSW1t
MzIoaW50MzJfdCB2YWx1ZSkKICAgICAgICAgICAgIDogbV92YWx1ZSh2YWx1ZSkKLSNpZiBQTEFU
Rk9STShBUk1fVjcpCisjaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICAgICAgICAgICAgICwgbV9p
c1BvaW50ZXIoZmFsc2UpCiAjZW5kaWYKICAgICAgICAgewpAQCAtMTg0LDcgKzE4NCw3IEBAIHB1
YmxpYzoKICNpZiAhUExBVEZPUk0oWDg2XzY0KQogICAgICAgICBleHBsaWNpdCBJbW0zMihJbW1Q
dHIgcHRyKQogICAgICAgICAgICAgOiBtX3ZhbHVlKHB0ci5hc0ludHB0cigpKQotI2lmIFBMQVRG
T1JNKEFSTV9WNykKKyNpZiBQTEFURk9STV9BUk1fQVJDSCg3KQogICAgICAgICAgICAgLCBtX2lz
UG9pbnRlcih0cnVlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE5Miw3ICsxOTIsNyBAQCBwdWJs
aWM6CiAjZW5kaWYKIAogICAgICAgICBpbnQzMl90IG1fdmFsdWU7Ci0jaWYgUExBVEZPUk0oQVJN
X1Y3KQorI2lmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCiAgICAgICAgIC8vIFdlIHJlbHkgb24gYmVp
bmcgYWJsZSB0byByZWdlbmVyYXRlIGNvZGUgdG8gcmVjb3ZlciBleGNlcHRpb24gaGFuZGxpbmcK
ICAgICAgICAgLy8gaW5mb3JtYXRpb24uICBTaW5jZSBBUk12NyBzdXBwb3J0cyAxNi1iaXQgaW1t
ZWRpYXRlcyB0aGVyZSBpcyBhIGRhbmdlcgogICAgICAgICAvLyB0aGF0IGlmIHBvaW50ZXIgdmFs
dWVzIGNoYW5nZSB0aGUgbGF5b3V0IG9mIHRoZSBnZW5lcmF0ZWQgY29kZSB3aWxsIGNoYW5nZS4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXggYzk3NDlhMC4u
NDNkMjdlNyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAg
LTMwLDcgKzMwLDcgQEAKIAogI2lmIEVOQUJMRShBU1NFTUJMRVIpCiAKLSNpZiBQTEFURk9STShB
Uk1fVjcpCisjaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxl
ckFSTXY3LmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2VtYmxlckFSTXY3IE1h
Y3JvQXNzZW1ibGVyQmFzZTsgfTsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL01hY3JvQXNzZW1ibGVyQ29kZVJlZi5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQ29kZVJlZi5oCmluZGV4IDM2ZDY4YjEuLjUwZmNhNWIgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckNvZGVSZWYuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJDb2RlUmVmLmgKQEAgLTM3LDcg
KzM3LDcgQEAKIAogLy8gQVNTRVJUX1ZBTElEX0NPREVfUE9JTlRFUiBjaGVja3MgdGhhdCBwdHIg
aXMgYSBub24tbnVsbCBwb2ludGVyLCBhbmQgdGhhdCBpdCBpcyBhIHZhbGlkCiAvLyBpbnN0cnVj
dGlvbiBhZGRyZXNzIG9uIHRoZSBwbGF0Zm9ybSAoZm9yIGV4YW1wbGUsIGNoZWNrIGFueSBhbGln
bm1lbnQgcmVxdWlyZW1lbnRzKS4KLSNpZiBQTEFURk9STShBUk1fVjcpCisjaWYgUExBVEZPUk1f
QVJNX0FSQ0goNykKIC8vIEFSTS90aHVtYiBpbnN0cnVjdGlvbnMgbXVzdCBiZSAxNi1iaXQgYWxp
Z25lZCwgYnV0IGFsbCBjb2RlIHBvaW50ZXJzIHRvIGJlIGxvYWRlZAogLy8gaW50byB0aGUgcHJv
Y2Vzc29yIGFyZSBkZWNvcmF0ZWQgd2l0aCB0aGUgYm90dG9tIGJpdCBzZXQsIGluZGljYXRpbmcg
dGhhdCB0aGlzIGlzCiAvLyB0aHVtYiBjb2RlIChhcyBvcG9zZWQgdG8gMzItYml0IHRyYWRpdGlv
bmFsIEFSTSkuICBUaGUgZmlyc3QgdGVzdCBjaGVja3MgZm9yIGJvdGgKQEAgLTEyNCw3ICsxMjQs
NyBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgZXhwbGljaXQgTWFjcm9Bc3NlbWJsZXJDb2RlUHRy
KHZvaWQqIHZhbHVlKQotI2lmIFBMQVRGT1JNKEFSTV9WNykKKyNpZiBQTEFURk9STV9BUk1fQVJD
SCg3KQogICAgICAgICAvLyBEZWNvcmF0ZSB0aGUgcG9pbnRlciBhcyBhIHRodW1iIGNvZGUgcG9p
bnRlci4KICAgICAgICAgOiBtX3ZhbHVlKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KHZhbHVlKSAr
IDEpCiAjZWxzZQpAQCAtMTQxLDcgKzE0MSw3IEBAIHB1YmxpYzoKICAgICB9CiAKICAgICB2b2lk
KiBleGVjdXRhYmxlQWRkcmVzcygpIGNvbnN0IHsgcmV0dXJuIG1fdmFsdWU7IH0KLSNpZiBQTEFU
Rk9STShBUk1fVjcpCisjaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICAgICAvLyBUbyB1c2UgdGhp
cyBwb2ludGVyIGFzIGEgZGF0YSBhZGRyZXNzIHJlbW92ZSB0aGUgZGVjb3JhdGlvbi4KICAgICB2
b2lkKiBkYXRhTG9jYXRpb24oKSBjb25zdCB7IEFTU0VSVF9WQUxJRF9DT0RFX1BPSU5URVIobV92
YWx1ZSk7IHJldHVybiByZWludGVycHJldF9jYXN0PGNoYXIqPihtX3ZhbHVlKSAtIDE7IH0KICNl
bHNlCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5o
IGIvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCBhNTQ1YjBj
Li4wZGU0Zjc5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9j
YXRvci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAg
LTIxMCw3ICsyMTAsNyBAQCBwcml2YXRlOgogI2lmIFBMQVRGT1JNKFg4NikgfHwgUExBVEZPUk0o
WDg2XzY0KQogICAgICAgICBVTlVTRURfUEFSQU0oY29kZSk7CiAgICAgICAgIFVOVVNFRF9QQVJB
TShzaXplKTsKLSNlbGlmIFBMQVRGT1JNKEFSTV9WNykgJiYgUExBVEZPUk0oSVBIT05FKQorI2Vs
aWYgUExBVEZPUk1fQVJNX0FSQ0goNykgJiYgUExBVEZPUk0oSVBIT05FKQogICAgICAgICBzeXNf
ZGNhY2hlX2ZsdXNoKGNvZGUsIHNpemUpOwogICAgICAgICBzeXNfaWNhY2hlX2ludmFsaWRhdGUo
Y29kZSwgc2l6ZSk7CiAjZWxzZQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IGNhZWFlMDguLmU2ODAxOTcgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQv
SklULmgKQEAgLTIyNyw3ICsyMjcsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGlj
IGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gWDg2Ojp4bW0wOwogICAgICAgICBzdGF0aWMg
Y29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDEgPSBYODY6OnhtbTE7CiAgICAgICAgIHN0YXRpYyBj
b25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IFg4Njo6eG1tMjsKLSNlbGlmIFBMQVRGT1JNKEFS
TV9WNykKKyNlbGlmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCiAgICAgICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBBUk06OnIwOwogICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IEFSTTo6cjA7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdpc3RlciA9IEFSTTo6cjA7
CkBAIC0zMDIsNyArMzAyLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMTE7CiAgICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0gMTg7CiAgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0g
Mjk7Ci0jZWxpZiBQTEFURk9STShBUk1fVjcpCisjZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KQog
ICAgICAgICAvLyBUaGVzZSBhcmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8g
ZW5hYmxlIHBhdGNoaW5nIC0gc2VlIGNvbW1lbnQgb24gb3BfcHV0X2J5X2lkLgogICAgICAgICBz
dGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZFN0cnVjdHVyZSA9IDEwOwogICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDIwOwpk
aWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggYjNkYzQxOC4uYjc0M2JjMCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0yMDMsNyArMjAzLDcgQEAg
QUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZVJldHVybkFkZHJlc3NCZWZvcmVSZXR1cm4o
QWRkcmVzcyBhZGRyZXNzKQogICAgIHB1c2goYWRkcmVzcyk7CiB9CiAKLSNlbGlmIFBMQVRGT1JN
KEFSTV9WNykKKyNlbGlmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXZlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKIHsK
QEAgLTIzOSw3ICsyMzksNyBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKICNpZiBQTEFURk9STShYODYpCiAgICAgLy8gV2l0
aGluIGEgdHJhbXBvbGluZSB0aGUgcmV0dXJuIGFkZHJlc3Mgd2lsbCBiZSBvbiB0aGUgc3RhY2sg
YXQgdGhpcyBwb2ludC4KICAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKHZvaWQqKSksIHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwotI2VsaWYgUExBVEZPUk0oQVJN
X1Y3KQorI2VsaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwogI2VuZGlmCiAgICAgLy8gSW4gdGhlIHRy
YW1wb2xpbmUgb24geDg2LTY0LCB0aGUgZmlyc3QgYXJndW1lbnQgcmVnaXN0ZXIgaXMgbm90IG92
ZXJ3cml0dGVuLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKaW5kZXggN2RhODE2NS4uYTQwNWQ2NCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCkBAIC0xNjUsNyArMTY1LDcgQEAgU1lNQk9MX1NUUklO
RyhjdGlWTVRocm93VHJhbXBvbGluZSkgIjoiICJcbiIKICAgICAicmV0IiAiXG4iCiApOwogCi0j
ZWxpZiBDT01QSUxFUihHQ0MpICYmIFBMQVRGT1JNKEFSTV9WNykKKyNlbGlmIENPTVBJTEVSKEdD
QykgJiYgUExBVEZPUk1fQVJNX0FSQ0goNykKIAogI2lmIFVTRShKSVRfU1RVQl9BUkdVTUVOVF9W
QV9MSVNUKQogI2Vycm9yICJKSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIG5vdCBzdXBwb3J0ZWQg
b24gQVJNdjcuIgpAQCAtNTI2LDcgKzUyNiw3IEBAIHN0YXRpYyBORVZFUl9JTkxJTkUgdm9pZCB0
aHJvd1N0YWNrT3ZlcmZsb3dFcnJvcihDYWxsRnJhbWUqIGNhbGxGcmFtZSwgSlNHbG9iYWxECiAK
IG5hbWVzcGFjZSBKSVRTdHVicyB7CiAKLSNpZiBQTEFURk9STShBUk1fVjcpCisjaWYgUExBVEZP
Uk1fQVJNX0FSQ0goNykKIAogQ09NUElMRV9BU1NFUlQob2Zmc2V0b2Yoc3RydWN0IEpJVFN0YWNr
RnJhbWUsIHRodW5rUmV0dXJuQWRkcmVzcykgPT0gMHgxQywgSklUU3RhY2tGcmFtZV9vdXRlclJl
dHVybkFkZHJlc3Nfb2Zmc2V0X21hdGNoZXNfY3RpVHJhbXBvbGluZSk7CiAKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmgKaW5kZXggZWI1MTIyMy4uZTliZTJjMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmgKQEAgLTEx
NSw3ICsxMTUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgLy8gV2hlbiBKSVQgY29kZSBt
YWtlcyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBiZWxvdyB0aGUg
cmVzdCBvZiB0aGUgc3RhY2suCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJl
c3NTbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXR1cm5BZGRyZXNzUHRyKj4odGhp
cykgLSAxOyB9CiAgICAgfTsKLSNlbGlmIFBMQVRGT1JNKEFSTV9WNykKKyNlbGlmIFBMQVRGT1JN
X0FSTV9BUkNIKDcpCiAgICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgewogICAgICAgICBKSVRTdHVi
QXJnIHBhZGRpbmc7IC8vIFVudXNlZAogICAgICAgICBKSVRTdHViQXJnIGFyZ3NbNl07CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0
Zi9QbGF0Zm9ybS5oCmluZGV4IGQzYTc5ODAuLjE5N2NhZTAgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CkBAIC0yMjcsMTAgKzIyNywyOSBAQAogI2lmICFkZWZpbmVkKF9fQVJNX0VBQklfXykKICNkZWZp
bmUgV1RGX1BMQVRGT1JNX0ZPUkNFX1BBQ0sgMQogI2VuZGlmCisjZGVmaW5lIEFSTV9BUkNIX1ZF
UlNJT04gMworI2lmIGRlZmluZWQoX19BUk1fQVJDSF80X18pIHx8IGRlZmluZWQoX19BUk1fQVJD
SF80VF9fKQorI3VuZGVmIEFSTV9BUkNIX1ZFUlNJT04KKyNkZWZpbmUgQVJNX0FSQ0hfVkVSU0lP
TiA0CisjZW5kaWYKKyNpZiBkZWZpbmVkKF9fQVJNX0FSQ0hfNV9fKSB8fCBkZWZpbmVkKF9fQVJN
X0FSQ0hfNVRfXykgXAorICAgICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNUVfXykgfHwgZGVm
aW5lZChfX0FSTV9BUkNIXzVURV9fKSBcCisgICAgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF81
VEVKX18pCisjdW5kZWYgQVJNX0FSQ0hfVkVSU0lPTgorI2RlZmluZSBBUk1fQVJDSF9WRVJTSU9O
IDUKKyNlbmRpZgorI2lmIGRlZmluZWQoX19BUk1fQVJDSF82X18pIHx8IGRlZmluZWQoX19BUk1f
QVJDSF82Sl9fKSBcCisgICAgIHx8IGRlZmluZWQoX19BUk1fQVJDSF82S19fKSB8fCBkZWZpbmVk
KF9fQVJNX0FSQ0hfNlpfXykgXAorICAgICB8fCBkZWZpbmVkKF9fQVJNX0FSQ0hfNlpLX18pCisj
dW5kZWYgQVJNX0FSQ0hfVkVSU0lPTgorI2RlZmluZSBBUk1fQVJDSF9WRVJTSU9OIDYKICNlbmRp
ZgogI2lmIGRlZmluZWQoX19BUk1fQVJDSF83QV9fKQotI2RlZmluZSBXVEZfUExBVEZPUk1fQVJN
X1Y3IDEKKyN1bmRlZiBBUk1fQVJDSF9WRVJTSU9OCisjZGVmaW5lIEFSTV9BUkNIX1ZFUlNJT04g
NwogI2VuZGlmCisjZW5kaWYgLyogQVJNICovCisjZGVmaW5lIFBMQVRGT1JNX0FSTV9BUkNIKE4p
IChQTEFURk9STShBUk0pICYmIEFSTV9BUkNIX1ZFUlNJT04gPj0gTikKIAogLyogUExBVEZPUk0o
WDg2KSAqLwogI2lmICAgZGVmaW5lZChfX2kzODZfXykgXApAQCAtNTE5LDcgKzUzOCw3IEBACiAj
ZWxpZiBQTEFURk9STShYODYpICYmIFBMQVRGT1JNKE1BQykKICAgICAjZGVmaW5lIEVOQUJMRV9K
SVQgMQogICAgICNkZWZpbmUgV1RGX1VTRV9KSVRfU1RVQl9BUkdVTUVOVF9WQV9MSVNUIDEKLSNl
bGlmIFBMQVRGT1JNKEFSTV9WNykgJiYgUExBVEZPUk0oSVBIT05FKSAKKyNlbGlmIFBMQVRGT1JN
X0FSTV9BUkNIKDcpICYmIFBMQVRGT1JNKElQSE9ORSkKICAgICAvKiBVbmRlciBkZXZlbG9wbWVu
dCwgdGVtcG9yYXJpbHkgZGlzYWJsZWQgdW50aWwgMTZNYiBsaW5rIHJhbmdlIGxpbWl0IGluIGFz
c2VtYmxlciBpcyBmaXhlZC4gKi8KICAgICAjZGVmaW5lIEVOQUJMRV9KSVQgMAogICAgICNkZWZp
bmUgRU5BQkxFX0pJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCAwCkBAIC01NjgsNyArNTg3LDcgQEAK
ICNpZiAoIWRlZmluZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9STShYODYpICYmIFBMQVRG
T1JNKE1BQykpIFwKICB8fCAoIWRlZmluZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9STShY
ODZfNjQpICYmIFBMQVRGT1JNKE1BQykpIFwKICAvKiBVbmRlciBkZXZlbG9wbWVudCwgdGVtcG9y
YXJpbHkgZGlzYWJsZWQgdW50aWwgMTZNYiBsaW5rIHJhbmdlIGxpbWl0IGluIGFzc2VtYmxlciBp
cyBmaXhlZC4gKi8gXAotIHx8ICghZGVmaW5lZChFTkFCTEVfWUFSUl9KSVQpICYmIFBMQVRGT1JN
KEFSTV9WNykgJiYgUExBVEZPUk0oSVBIT05FKSAmJiAwKSBcCisgfHwgKCFkZWZpbmVkKEVOQUJM
RV9ZQVJSX0pJVCkgJiYgUExBVEZPUk1fQVJNX0FSQ0goNykgJiYgUExBVEZPUk0oSVBIT05FKSAm
JiAwKSBcCiAgfHwgKCFkZWZpbmVkKEVOQUJMRV9ZQVJSX0pJVCkgJiYgUExBVEZPUk0oWDg2KSAm
JiBQTEFURk9STShXSU4pKQogI2RlZmluZSBFTkFCTEVfWUFSUiAxCiAjZGVmaW5lIEVOQUJMRV9Z
QVJSX0pJVCAxCkBAIC01ODMsNyArNjAyLDcgQEAKICNlbmRpZgogLyogU2V0dGluZyB0aGlzIGZs
YWcgcHJldmVudHMgdGhlIGFzc2VtYmxlciBmcm9tIHVzaW5nIFJXWCBtZW1vcnk7IHRoaXMgbWF5
IGltcHJvdmUKICAgIHNlY3VyaXR5IGJ1dCBjdXJyZWN0bHkgY29tZXMgYXQgYSBzaWduaWZpY2Fu
dCBwZXJmb3JtYW5jZSBjb3N0LiAqLwotI2lmIFBMQVRGT1JNKEFSTV9WNykgJiYgUExBVEZPUk0o
SVBIT05FKQorI2lmIFBMQVRGT1JNX0FSTV9BUkNIKDcpICYmIFBMQVRGT1JNKElQSE9ORSkKICNk
ZWZpbmUgRU5BQkxFX0FTU0VNQkxFUl9XWF9FWENMVVNJVkUgMQogI2Vsc2UKICNkZWZpbmUgRU5B
QkxFX0FTU0VNQkxFUl9XWF9FWENMVVNJVkUgMApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
eWFyci9SZWdleEpJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAppbmRl
eCAyNzkzOWY2Li4yOWE5ZDE4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4
SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcApAQCAtNDMsNyAr
NDMsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIFlhcnIgewogY2xhc3MgUmVnZXhHZW5l
cmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBmcmllbmQgdm9pZCBqaXRDb21w
aWxlUmVnZXgoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBSZWdleENvZGVCbG9jayYgaml0T2Jq
ZWN0LCBjb25zdCBVU3RyaW5nJiBwYXR0ZXJuLCB1bnNpZ25lZCYgbnVtU3VicGF0dGVybnMsIGNv
bnN0IGNoYXIqJiBlcnJvciwgYm9vbCBpZ25vcmVDYXNlLCBib29sIG11bHRpbGluZSk7CiAKLSNp
ZiBQTEFURk9STShBUk1fVjcpCisjaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IEFSTTo6cjA7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW5kZXggPSBBUk06OnIxOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxlbmd0
aCA9IEFSTTo6cjI7CkBAIC0xMzA4LDcgKzEzMDgsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICNlbHNlCiAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhYODY6OmVicCwgMiAqIHNpemVvZih2b2lkKikpLCBvdXRwdXQpOwogICAgICNlbmRpZgot
I2VsaWYgUExBVEZPUk0oQVJNX1Y3KQorI2VsaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICAgICAg
ICAgcHVzaChBUk06OnI0KTsKICAgICAgICAgcHVzaChBUk06OnI1KTsKICAgICAgICAgcHVzaChB
Uk06OnI2KTsKQEAgLTEzMjUsNyArMTMyNSw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJp
dmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChYODY6OmVkaSk7CiAgICAgICAgIHBv
cChYODY6OmVieCk7CiAgICAgICAgIHBvcChYODY6OmVicCk7Ci0jZWxpZiBQTEFURk9STShBUk1f
VjcpCisjZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KQogICAgICAgICBwb3AoQVJNOjpyNik7CiAg
ICAgICAgIHBvcChBUk06OnI1KTsKICAgICAgICAgcG9wKEFSTTo6cjQpOwotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32007</attachid>
            <date>2009-06-29 06:00:16 -0700</date>
            <delta_ts>2009-06-30 02:56:22 -0700</delta_ts>
            <desc>Remove unnecessary references to AssemblerBuffer</desc>
            <filename>0001-Remove-unnecessary-references-to-AssemblerBuffer.patch</filename>
            <type>text/plain</type>
            <size>1858</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA4YTNhNjBjODFmZmY5NjY1ZmRlNjc1YTU5MjVjZGY0MGRjYzFkYmY4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAyOSBKdW4gMjAwOSAxMzoxNToyNSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIFJlbW92
ZSB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIEFzc2VtYmxlckJ1ZmZlci4KClNpZ25lZC1vZmYt
Ynk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICB8ICAgMTEgKysrKysrKysrKysKIEphdmFTY3Jp
cHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCB8ICAgIDQgLS0tLQogSmF2YVNjcmlw
dENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCAgIHwgICAgMSAtCiAzIGZpbGVzIGNoYW5n
ZWQsIDExIGluc2VydGlvbnMoKyksIDUgZGVsZXRpb25zKC0pCgpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmluZGV4IGM4YmJh
MGYuLmY0MzZiODQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZworKysgYi9K
YXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwxNCBAQAorMjAwOS0wNi0yOSAgR2Fi
b3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisJPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0yNDk4Nj4KKworCVJlbW92ZSB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIEFzc2VtYmxlckJ1
ZmZlci4KKworICAgICAgICAqIGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKKyAgICAgICAg
KiBpbnRlcnByZXRlci9JbnRlcnByZXRlci5oOgorCiAyMDA5LTA2LTI2ICBPbGl2ZXIgSHVudCAg
PG9saXZlckBhcHBsZS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGFuIEJlcm5zdGVpbi4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcCBi
L0phdmFTY3JpcHRDb3JlL2ludGVycHJldGVyL0ludGVycHJldGVyLmNwcAppbmRleCA3YjFlNTQ3
Li40NzFlNDA5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9pbnRlcnByZXRlci9JbnRlcnBy
ZXRlci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
CkBAIC02NSwxMCArNjUsNiBAQAogI2luY2x1ZGUgIkpJVC5oIgogI2VuZGlmCiAKLSNpZiBFTkFC
TEUoQVNTRU1CTEVSKQotI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgotI2VuZGlmCi0KIHVz
aW5nIG5hbWVzcGFjZSBzdGQ7CiAKIG5hbWVzcGFjZSBKU0MgewpkaWZmIC0tZ2l0IGEvSmF2YVNj
cmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaCBiL0phdmFTY3JpcHRDb3JlL2ludGVy
cHJldGVyL0ludGVycHJldGVyLmgKaW5kZXggNzAyYzg5Yy4uZmE2ZjdkYiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9pbnRlcnByZXRlci9JbnRlcnByZXRlci5oCkBAIC00NSw3ICs0NSw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgIGNsYXNzIEZ1bmN0aW9uQm9keU5vZGU7CiAgICAgY2xhc3MgSW5zdHJ1Y3Rp
b247CiAgICAgY2xhc3MgSW50ZXJuYWxGdW5jdGlvbjsKLSAgICBjbGFzcyBBc3NlbWJsZXJCdWZm
ZXI7CiAgICAgY2xhc3MgSlNGdW5jdGlvbjsKICAgICBjbGFzcyBKU0dsb2JhbE9iamVjdDsKICAg
ICBjbGFzcyBQcm9ncmFtTm9kZTsKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32008</attachid>
            <date>2009-06-29 06:03:16 -0700</date>
            <delta_ts>2009-06-30 03:22:28 -0700</delta_ts>
            <desc>Constant pool for AssemblerBuffer</desc>
            <filename>0002-Extend-AssemblerBuffer-with-constant-pool-handling-m.patch</filename>
            <type>text/plain</type>
            <size>12518</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA4YzdiMjYxNzA2ZWQ3NjlmZmY1MDQ3ZTM2YWFiYThmODU2NDNjZjNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAyOSBKdW4gMjAwOSAxNDoyNDoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEV4dGVu
ZCBBc3NlbWJsZXJCdWZmZXIgd2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbQoK
U2lnbmVkLW9mZi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKwog
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oICAgICAgIHwgICAxNyAr
LQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDUC5oIHwgIDI5
MyArKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMyMyBpbnNlcnRpb25z
KCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBmNDM2Yjg0Li5m
NDc3NTEzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC00LDYgKzQsMjIgQEAKIAogCTxodHRwczovL2J1Z3Mud2Vi
a2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODY+CiAKKwlFeHRlbmQgQXNzZW1ibGVyQnVmZmVy
IHdpdGggY29uc3RhbnQgcG9vbCBoYW5kbGluZyBtZWNoYW5pc20uCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
cHV0SW50VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnQ2
NFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6YXBwZW5kKToKKyAg
ICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpncm93KToKKyAgICAgICAgKiBhc3NlbWJsZXIv
QXNzZW1ibGVyQnVmZmVyV2l0aENQLmg6IEFkZGVkLgorICAgICAgICAoSlNDOjopOgorCisyMDA5
LTA2LTI5ICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKwk8aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTI0OTg2PgorCiAJUmVtb3ZlIHVubmVjZXNzYXJ5IHJlZmVyZW5jZXMgdG8g
QXNzZW1ibGVyQnVmZmVyLgogCiAgICAgICAgICogaW50ZXJwcmV0ZXIvSW50ZXJwcmV0ZXIuY3Bw
OgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5o
IGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCmluZGV4IDdhNWE4
ZDMuLjA3MzkwNmEgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJs
ZXJCdWZmZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVy
LmgKQEAgLTk1LDEyICs5NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHB1
dEludFVuY2hlY2tlZChpbnQgdmFsdWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCgh
KG1fc2l6ZSA+IG1fY2FwYWNpdHkgLSA0KSk7CiAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2Fz
dDxpbnQqPigmbV9idWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKICAgICAgICAgICAgIG1fc2l6ZSAr
PSA0OwogICAgICAgICB9CiAKICAgICAgICAgdm9pZCBwdXRJbnQ2NFVuY2hlY2tlZChpbnQ2NF90
IHZhbHVlKQogICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIShtX3NpemUgPiBtX2NhcGFj
aXR5IC0gOCkpOwogICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KCZtX2J1
ZmZlclttX3NpemVdKSA9IHZhbHVlOwogICAgICAgICAgICAgbV9zaXplICs9IDg7CiAgICAgICAg
IH0KQEAgLTEzNywxMCArMTM5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0
dXJuIG1lbWNweShyZXN1bHQsIG1fYnVmZmVyLCBtX3NpemUpOwogICAgICAgICB9CiAKLSAgICBw
cml2YXRlOgotICAgICAgICB2b2lkIGdyb3coKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9p
ZCBhcHBlbmQoY29uc3QgY2hhciogZGF0YSwgaW50IHNpemUpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGlmIChtX3NpemUgPiBtX2NhcGFjaXR5IC0gc2l6ZSkKKyAgICAgICAgICAgICAgICBncm93
KHNpemUpOworCisgICAgICAgICAgICBtZW1jcHkobV9idWZmZXIgKyBtX3NpemUsIGRhdGEsIHNp
emUpOworICAgICAgICAgICAgbV9zaXplICs9IHNpemU7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGdyb3coaW50IGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBt
X2NhcGFjaXR5ICs9IG1fY2FwYWNpdHkgLyAyOworICAgICAgICAgICAgbV9jYXBhY2l0eSArPSBt
X2NhcGFjaXR5IC8gMiArIGV4dHJhQ2FwYWNpdHk7CiAKICAgICAgICAgICAgIGlmIChtX2J1ZmZl
ciA9PSBtX2lubGluZUJ1ZmZlcikgewogICAgICAgICAgICAgICAgIGNoYXIqIG5ld0J1ZmZlciA9
IHN0YXRpY19jYXN0PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AuaCBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AuaApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwLi44YmI4NWY1Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDUC5oCkBAIC0wLDAgKzEsMjkz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXNzZW1ibGVyQnVmZmVyV2l0aENQ
X2gKKyNkZWZpbmUgQXNzZW1ibGVyQnVmZmVyV2l0aENQX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikKKworI2luY2x1ZGUgIkFzc2VtYmxlckJ1
ZmZlci5oIgorI2luY2x1ZGUgPHd0Zi9TZWdtZW50ZWRWZWN0b3IuaD4KKworbmFtZXNwYWNlIEpT
QyB7CisKKy8qCisgICAgT24gYSBjb25zdGFudCBwb29sIDQgb3IgOCBieXRlcyBkYXRhIGNhbiBi
ZSBzdG9yZWQuIFRoZSB2YWx1ZXMgY2FuIGJlCisgICAgY29uc3RhbnRzIG9yIGFkZHJlc3Nlcy4g
VGhlIGFkZHJlc3NlcyBzaG91bGQgYmUgMzIgb3IgNjQgYml0cy4gVGhlIGNvbnN0YW50cworICAg
IHNob3VsZCBiZSBkb3VibGUtcHJlY2lzaW9ucyBmbG9hdCBvciBpbnRlZ2VyIG51bWJlcnMgd2hp
Y2ggYXJlIGNhbm5vdCBiZQorICAgIHByb2R1Y2VkIGJ5IHNldmVyYWwgbWFjaGluZSBpbnN0cnVj
dGlvbnMuCisKKyAgICBUaGUgQXNzZW1ibGVyQnVmZmVyIGNhbiBjb250YWlucyBtb3JlIGNvbnN0
YW50IHBvb2wuIEVhY2ggcG9vbCBpcyBpbnNlcnRlZAorICAgIGludG8gdGhlIGluc3RydWN0aW9u
IHN0cmVhbSAtIHByb3RlY3RlZCBieSBhIGp1bXAgaW5zdHJ1Y3Rpb24gZnJvbSB0aGUKKyAgICBl
eGVjdXRpb24uCisKKyAgICBUaGUgZmx1c2ggbWVjaGFuaXNtIGlzIGNhbGxlZCB3aGVuIG5vIHNw
YWNlIHRvIGluc2VydCB0aGUgbmV4dCBpbnN0cnVjdGlvbgorICAgIHRvIHRoZSBwb29sLiBUaHJl
ZSB2YWx1ZXMgaXMgdXNlZCB0byBkZXRlcm1pbmUgd2hlbiB0aGUgY29uc3RhbnQgcG9vbCBpdHNl
bGYKKyAgICBoYXZlIHRvIGJlIGluc2VydGVkIGludG8gdGhlIGluc3RydWN0aW9uIHN0cmVhbSAo
QXNzZW1ibGVyIEJ1ZmZlcik6CisKKyAgICAtIG1heFBvb2xTaXplOiBzaXplIG9mIHRoZSBjb25z
dGFudCBwb29sIGluIGJ5dGVzLCB0aGlzIHZhbHVlIGNhbm5vdCBiZQorICAgICAgICBsYXJnZXIg
dGhhbiB0aGUgbWF4aW11bSBvZmZzZXQgb2YgYSBQQyByZWxhdGl2ZSBtZW1vcnkgbG9hZAorCisg
ICAgLSBiYXJyaWVyU2l6ZTogc2l6ZSBvZiBqdW1wIGluc3RydWN0aW9uIGluIGJ5dGVzIHdoaWNo
IHByb3RlY3RzIHRoZQorICAgICAgICBjb25zdGFudCBwb29sIGZyb20gZXhlY3V0aW9uCisKKyAg
ICAtIG1heEluc3RydWN0aW9uU2l6ZTogbWF4aW11bSBsZW5ndGggb2YgYSBtYWNoaW5lIGluc3Ry
dWN0aW9uCisKKyAgICBUaGVyZSBhcmUgc29tZSBjYWxsYmFja3Mgd2hpY2ggc2hvdWxkIHNvbHZl
IHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHNwZWNpZmljCisgICAgYWRkcmVzcyBoYW5kbGluZzoK
KworICAgIC0gVFlQRSBwYXRjaENvbnN0UG9vbExvYWQoVFlQRSBsb2FkLCBpbnQgdmFsdWUpOgor
ICAgICAgICBwYXRjaCB0aGUgJ2xvYWQnIGluc3RydWN0aW9uIHdpdGggdGhlIGluZGV4IG9mIHRo
ZSBjb25zdGFudCBpbiB0aGUKKyAgICAgICAgY29uc3RhbnQgcG9vbCBhbmQgcmV0dXJuIHRoZSBw
YXRjaGVkIGluc3RydWN0aW9uLgorCisgICAgLSB2b2lkIHBhdGNoQ29uc3RQb29sTG9hZCh2b2lk
KiBsb2FkQWRkciwgdm9pZCogY29uc3RQb29sQWRkcik6CisgICAgICAgIHBhdGNoIHRoZSBhIFBD
IHJlbGF0aXZlIGxvYWQgaW5zdHJ1Y3Rpb24gYXQgJ2xvYWRBZGRyJyB3aXRoIHRoZQorICAgICAg
ICBmaW5hbCByZWxhdGl2ZSBvZmZzZXQuIFRoZSBvZmZzZXQgY2FuIGJlIGNvbXB1dGVkIHdpdGgg
J2NvbnN0UG9vbEFkZHInCisgICAgICAgIC0gdGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnN0YW50IHBv
b2wgLSBhbmQgaW5kZXggb2YgdGhlIGNvbnN0YW50IHdoaWNoCisgICAgICAgIGlzIHN0b3JlZCBw
cmV2aW91c2x5IGluIHRoZSBsb2FkIGluc3RydWN0aW9uIGl0c2VsZi4KKworICAgIC0gVFlQRSBw
bGFjZUNvbnN0UG9vbEJhcnJpZXIoaW50IHNpemUpOgorICAgICAgICByZXR1cm4gd2l0aCBhIGNv
bnN0YW50IHBvb2wgYmFycmllciBpbnN0cnVjdGlvbiB3aGljaCBqdW1wcyBvdmVyIHRoZQorICAg
ICAgICBjb25zdGFudCBwb29sLgorCisgICAgVGhlICdwdXQqV2l0aENvbnN0KicgZnVuY3Rpb25z
IHNob3VsZCBiZSB1c2VkIHRvIHBsYWNlIGEgZGF0YSB0byB0aGUKKyAgICBjb25zdGFudCBwb29s
LgorKi8KKwordGVtcGxhdGUgPGludCBtYXhQb29sU2l6ZSwgaW50IGJhcnJpZXJTaXplLCBpbnQg
bWF4SW5zdHJ1Y3Rpb25TaXplLCBjbGFzcyBBc3NlbWJsZXJUeXBlPgorY2xhc3MgQXNzZW1ibGVy
QnVmZmVyV2l0aENQOiBwdWJsaWMgQXNzZW1ibGVyQnVmZmVyIHsKKyAgICB0eXBlZGVmIFdURjo6
U2VnbWVudGVkVmVjdG9yPHVpbnQzMl90LCA1MTI+IExvYWRPZmZzZXRzOworcHVibGljOgorICAg
IGVudW0geworICAgICAgICBVbmlxdWVDb25zdCwKKyAgICAgICAgUmV1c2FibGVDb25zdCwKKyAg
ICAgICAgVW51c2VkRW50cnksCisgICAgfTsKKworICAgIEFzc2VtYmxlckJ1ZmZlcldpdGhDUCgp
CisgICAgICAgIDogQXNzZW1ibGVyQnVmZmVyKCkKKyAgICAgICAgLCBtX251bUNvbnN0cygwKQor
ICAgICAgICAsIG1fbWF4RGlzdGFuY2UobWF4UG9vbFNpemUpCisgICAgICAgICwgbV9sYXN0Q29u
c3REZWx0YSgwKQorICAgIHsKKyAgICAgICAgbV9wb29sID0gc3RhdGljX2Nhc3Q8dWludDMyX3Qq
PihmYXN0TWFsbG9jKG1heFBvb2xTaXplKSk7CisgICAgICAgIG1fbWFzayA9IHN0YXRpY19jYXN0
PGNoYXIqPihmYXN0TWFsbG9jKG1heFBvb2xTaXplIC8gc2l6ZW9mKHVpbnQzMl90KSkpOworICAg
IH0KKworICAgIH5Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AoKQorICAgIHsKKyAgICAgICAgZmFzdEZy
ZWUobV9tYXNrKTsKKyAgICAgICAgZmFzdEZyZWUobV9wb29sKTsKKyAgICB9CisKKyAgICB2b2lk
IGVuc3VyZVNwYWNlKGludCBzcGFjZSkKKyAgICB7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9y
KHNwYWNlKTsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjplbnN1cmVTcGFjZShzcGFjZSk7Cisg
ICAgfQorCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFj
ZSkKKyAgICB7CisgICAgICAgIEFTU0VSVChjb25zdFNwYWNlID09IHNpemVvZih1aW50MzJfdCkg
fHwgY29uc3RTcGFjZSA9PSBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgZmx1c2hJZk5vU3Bh
Y2VGb3IoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpl
bnN1cmVTcGFjZShpbnNuU3BhY2UpOworICAgIH0KKworICAgIGJvb2wgaXNBbGlnbmVkKGludCBh
bGlnbm1lbnQpCisgICAgeworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcihhbGlnbm1lbnQpOwor
ICAgICAgICByZXR1cm4gQXNzZW1ibGVyQnVmZmVyOjppc0FsaWduZWQoYWxpZ25tZW50KTsKKyAg
ICB9CisKKyAgICB2b2lkIHB1dEJ5dGVVbmNoZWNrZWQoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRCeXRlVW5jaGVja2VkKHZhbHVlKTsKKyAgICAgICAgY29y
cmVjdERlbHRhcygxKTsKKyAgICB9CisKKyAgICB2b2lkIHB1dEJ5dGUoaW50IHZhbHVlKQorICAg
IHsKKyAgICAgICAgZmx1c2hJZk5vU3BhY2VGb3IoMSk7CisgICAgICAgIEFzc2VtYmxlckJ1ZmZl
cjo6cHV0Qnl0ZSh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoMSk7CisgICAgfQorCisg
ICAgdm9pZCBwdXRTaG9ydFVuY2hlY2tlZChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBc3Nl
bWJsZXJCdWZmZXI6OnB1dFNob3J0VW5jaGVja2VkKHZhbHVlKTsKKyAgICAgICAgY29ycmVjdERl
bHRhcygyKTsKKyAgICB9CisKKyAgICB2b2lkIHB1dFNob3J0KGludCB2YWx1ZSkKKyAgICB7Cisg
ICAgICAgIGZsdXNoSWZOb1NwYWNlRm9yKDIpOworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1
dFNob3J0KHZhbHVlKTsKKyAgICAgICAgY29ycmVjdERlbHRhcygyKTsKKyAgICB9CisKKyAgICB2
b2lkIHB1dEludFVuY2hlY2tlZChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBBc3NlbWJsZXJC
dWZmZXI6OnB1dEludFVuY2hlY2tlZCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoNCk7
CisgICAgfQorCisgICAgdm9pZCBwdXRJbnQoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgZmx1
c2hJZk5vU3BhY2VGb3IoNCk7CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50KHZhbHVl
KTsKKyAgICAgICAgY29ycmVjdERlbHRhcyg0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1dEludDY0
VW5jaGVja2VkKGludDY0X3QgdmFsdWUpCisgICAgeworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6
OnB1dEludDY0VW5jaGVja2VkKHZhbHVlKTsKKyAgICAgICAgY29ycmVjdERlbHRhcyg4KTsKKyAg
ICB9CisKKyAgICBpbnQgc2l6ZSgpCisgICAgeworICAgICAgICBmbHVzaElmTm9TcGFjZUZvciht
YXhJbnN0cnVjdGlvblNpemUsIHNpemVvZih1aW50NjRfdCkpOworICAgICAgICByZXR1cm4gQXNz
ZW1ibGVyQnVmZmVyOjpzaXplKCk7CisgICAgfQorCisgICAgdm9pZCogZXhlY3V0YWJsZUNvcHko
RXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcikKKyAgICB7CisgICAgICAgIGZsdXNoQ29uc3RhbnRQ
b29sKGZhbHNlKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6ZXhlY3V0YWJsZUNv
cHkoYWxsb2NhdG9yKTsKKyAgICB9CisKKyAgICB2b2lkIHB1dEludFdpdGhDb25zdEludCh1aW50
MzJfdCBpbnNuLCB1aW50MzJfdCBjb25zdGFudCwgYm9vbCBpc1JldXNhYmxlID0gZmFsc2UpCisg
ICAgeworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcig0LCA0KTsKKworICAgICAgICBtX2xvYWRP
ZmZzZXRzLmFwcGVuZChBc3NlbWJsZXJCdWZmZXI6OnNpemUoKSk7CisgICAgICAgIGlmIChpc1Jl
dXNhYmxlKQorICAgICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBtX251bUNvbnN0czsgKytp
KSB7CisgICAgICAgICAgICAgICAgaWYgKG1fbWFza1tpXSA9PSBSZXVzYWJsZUNvbnN0ICYmIG1f
cG9vbFtpXSA9PSBjb25zdGFudCkgeworICAgICAgICAgICAgICAgICAgICBBc3NlbWJsZXJCdWZm
ZXI6OnB1dEludChBc3NlbWJsZXJUeXBlOjpwYXRjaENvbnN0UG9vbExvYWQoaW5zbiwgaSkpOwor
ICAgICAgICAgICAgICAgICAgICBjb3JyZWN0RGVsdGFzKDQpOworICAgICAgICAgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorCisgICAgICAgIG1f
cG9vbFttX251bUNvbnN0c10gPSBjb25zdGFudDsKKyAgICAgICAgbV9tYXNrW21fbnVtQ29uc3Rz
XSA9IHN0YXRpY19jYXN0PGNoYXI+KGlzUmV1c2FibGUgPyBSZXVzYWJsZUNvbnN0IDogVW5pcXVl
Q29uc3QpOworCisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50KEFzc2VtYmxlclR5cGU6
OnBhdGNoQ29uc3RQb29sTG9hZChpbnNuLCBtX251bUNvbnN0cykpOworICAgICAgICArK21fbnVt
Q29uc3RzOworCisgICAgICAgIGNvcnJlY3REZWx0YXMoNCwgNCk7CisgICAgfQorCisgICAgdm9p
ZCBsdG9yZygpCisgICAgeworICAgICAgICAvLyBGbHVzaCBpZiBjb25zdGFudCBwb29sIGlzIG1v
cmUgdGhhbiA2MCUgZnVsbAorICAgICAgICBpZiAoMTAgKiBtX251bUNvbnN0cyA+IDYgKiBtYXhQ
b29sU2l6ZSAvIHNpemVvZih1aW50MzJfdCkpCisgICAgICAgICAgICBmbHVzaENvbnN0YW50UG9v
bCgpOworICAgIH0KKworICAgIHVpbnQzMl90KiBwb29sQWRkcigpCisgICAgeworICAgICAgICBy
ZXR1cm4gbV9wb29sOworICAgIH0KKworcHJpdmF0ZToKKyAgICB2b2lkIGNvcnJlY3REZWx0YXMo
aW50IGluc25TaXplKQorICAgIHsKKyAgICAgICAgbV9tYXhEaXN0YW5jZSAtPSBpbnNuU2l6ZTsK
KyAgICAgICAgbV9sYXN0Q29uc3REZWx0YSAtPSBpbnNuU2l6ZTsKKyAgICAgICAgaWYgKG1fbGFz
dENvbnN0RGVsdGEgPCAwKQorICAgICAgICAgICAgbV9sYXN0Q29uc3REZWx0YSA9IDA7CisgICAg
fQorCisgICAgdm9pZCBjb3JyZWN0RGVsdGFzKGludCBpbnNuU2l6ZSwgaW50IGNvbnN0U2l6ZSkK
KyAgICB7CisgICAgICAgIGNvcnJlY3REZWx0YXMoaW5zblNpemUpOworCisgICAgICAgIG1fbWF4
RGlzdGFuY2UgLT0gbV9sYXN0Q29uc3REZWx0YTsKKyAgICAgICAgbV9sYXN0Q29uc3REZWx0YSA9
IGNvbnN0U2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoQ29uc3RhbnRQb29sKGJvb2wgdXNl
QmFycmllciA9IHRydWUpCisgICAgeworICAgICAgICBpZiAobV9udW1Db25zdHMgPT0gMCkKKyAg
ICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaW50IGFsaWduUG9vbCA9IChBc3NlbWJsZXJCdWZm
ZXI6OnNpemUoKSArIHVzZUJhcnJpZXIgPyBiYXJyaWVyU2l6ZSA6IDApICYgKHNpemVvZih1aW50
NjRfdCkgLSAxKTsKKworICAgICAgICAvLyBDYWxsYmFjayB0byBwcm90ZWN0IHRoZSBjb25zdGFu
dCBwb29sIGZyb20gZXhlY3V0aW9uCisgICAgICAgIGlmICh1c2VCYXJyaWVyKQorICAgICAgICAg
ICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnQoQXNzZW1ibGVyVHlwZTo6cGxhY2VDb25zdFBvb2xC
YXJyaWVyKChtX251bUNvbnN0cyArIGFsaWduUG9vbCkgKiBzaXplb2YodWludDMyX3QpKSk7CisK
KyAgICAgICAgaWYgKGFsaWduUG9vbCkKKyAgICAgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0
SW50KDB4YmFkZjAwZCk7CisKKyAgICAgICAgaW50IGNvbnN0UG9vbE9mZnNldCA9IEFzc2VtYmxl
ckJ1ZmZlcjo6c2l6ZSgpOworICAgICAgICBhcHBlbmQocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bV9wb29sKSwgbV9udW1Db25zdHMgKiBzaXplb2YodWludDMyX3QpKTsKKworICAgICAgICAvLyBQ
YXRjaCBlYWNoIFBDIHJlbGF0aXZlIGxvYWQKKyAgICAgICAgZm9yIChMb2FkT2Zmc2V0czo6SXRl
cmF0b3IgaXRlciA9IG1fbG9hZE9mZnNldHMuYmVnaW4oKTsgaXRlciAhPSBtX2xvYWRPZmZzZXRz
LmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgICAgIHZvaWQqIGxvYWRBZGRyID0gcmVpbnRlcnBy
ZXRfY2FzdDx2b2lkKj4obV9idWZmZXIgKyAqaXRlcik7CisgICAgICAgICAgICBBc3NlbWJsZXJU
eXBlOjpwYXRjaENvbnN0UG9vbExvYWQobG9hZEFkZHIsIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+
KG1fYnVmZmVyICsgY29uc3RQb29sT2Zmc2V0KSk7CisgICAgICAgIH0KKworICAgICAgICBtX2xv
YWRPZmZzZXRzLmNsZWFyKCk7CisgICAgICAgIG1fbnVtQ29uc3RzID0gMDsKKyAgICAgICAgbV9t
YXhEaXN0YW5jZSA9IG1heFBvb2xTaXplOworICAgIH0KKworICAgIHZvaWQgZmx1c2hJZk5vU3Bh
Y2VGb3IoaW50IG5leHRJbnNuU2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX251bUNvbnN0cyA9
PSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBpZiAoKG1fbWF4RGlzdGFuY2UgPCBu
ZXh0SW5zblNpemUgKyBtX2xhc3RDb25zdERlbHRhICsgYmFycmllclNpemUgKyAoaW50KXNpemVv
Zih1aW50MzJfdCkpKQorICAgICAgICAgICAgZmx1c2hDb25zdGFudFBvb2woKTsKKyAgICB9CisK
KyAgICB2b2lkIGZsdXNoSWZOb1NwYWNlRm9yKGludCBuZXh0SW5zblNpemUsIGludCBuZXh0Q29u
c3RTaXplKQorICAgIHsKKyAgICAgICAgaWYgKG1fbnVtQ29uc3RzID09IDApCisgICAgICAgICAg
ICByZXR1cm47CisgICAgICAgIGlmICgobV9tYXhEaXN0YW5jZSA8IG5leHRJbnNuU2l6ZSArIG1f
bGFzdENvbnN0RGVsdGEgKyBiYXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQzMl90KSkgfHwK
KyAgICAgICAgICAgIChtX251bUNvbnN0cyArIG5leHRDb25zdFNpemUgLyBzaXplb2YodWludDMy
X3QpID49IG1heFBvb2xTaXplKSkKKyAgICAgICAgICAgIGZsdXNoQ29uc3RhbnRQb29sKCk7Cisg
ICAgfQorCisgICAgdWludDMyX3QqIG1fcG9vbDsKKyAgICBjaGFyKiBtX21hc2s7CisgICAgTG9h
ZE9mZnNldHMgbV9sb2FkT2Zmc2V0czsKKworICAgIGludCBtX251bUNvbnN0czsKKyAgICBpbnQg
bV9tYXhEaXN0YW5jZTsKKyAgICBpbnQgbV9sYXN0Q29uc3REZWx0YTsKK307CisKK30gLy8gbmFt
ZXNwYWNlIEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikKKworI2VuZGlmIC8vIEFz
c2VtYmxlckJ1ZmZlcldpdGhDUF9oCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32009</attachid>
            <date>2009-06-29 06:30:20 -0700</date>
            <delta_ts>2009-06-30 03:24:04 -0700</delta_ts>
            <desc>Add YARR support for generic ARM platforms</desc>
            <filename>0003-Add-YARR-support-for-generic-ARM-platforms-disabled.patch</filename>
            <type>text/plain</type>
            <size>70446</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBlZDNhYWE3NGQyMTcyOTljMmUxZmFjZTI3NWMyYTM0YTM0OGE3NWNhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAyOSBKdW4gMjAwOSAxNToxNzo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBZ
QVJSIHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBsYXRmb3JtcyAoZGlzYWJsZWQgYnkgZGVmYXVs
dCkKClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQu
aHU+ClNpZ25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0K
IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTc2
ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkgICAgICAgICAgICAgICAg
IHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAgICAg
ICAgIHwgIDM1MSArKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1i
bGVyLmggICAgICAgICAgIHwgIDcwMCArKysrKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggfCAgIDEwICsKIEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgICAgICAgfCAgICA0ICsKIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oICAgICAgfCAgNzc4ICsrKysrKysr
KysrKysrKysrKysrKwogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCAg
ICAgICAgICB8ICAgMTUgKwogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAg
ICAgICAgICAgICB8ICAgIDggKy0KIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAyMDQ4IGluc2VydGlv
bnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAoKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBmNDc3
NTEzLi5iYTgzZTgxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC00LDYgKzQsMTgyIEBACiAKIAk8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2PgogCisJQWRkIFlBUlIgc3VwcG9y
dCBmb3IgZ2VuZXJpYyBBUk0gcGxhdGZvcm1zIChkaXNhYmxlZCBieSBkZWZhdWx0KS4KKworCVNp
Z25lZCBvZmYgYnkgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdlZC5odT4KKwlT
aWduZWQgb2ZmIGJ5IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUucHJpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIu
Y3BwOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRMZHJJbW1BZGRyZXNz
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5rQnJhbmNoKToKKyAgICAgICAgKEpT
Qzo6QVJNQXNzZW1ibGVyOjpwYXRjaENvbnN0UG9vbExvYWQpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmdldE9wMik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2VuSW50KToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRJbW0pOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6Om1vdmVJbW0pOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmRhdGFUcmFu
c2ZlcjMyKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpiYXNlSW5kZXhUcmFuc2ZlcjMy
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAg
ICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6QVJNOjop
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkFSTUFzc2VtYmxlcik6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBTcmM6
OkptcFNyYyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjplbmFibGVMYXRl
UGF0Y2gpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkptcERzdDo6Sm1wRHN0KToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBEc3Q6OmlzVXNlZCk6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6Sm1wRHN0Ojp1c2VkKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjplbWl0SW5zdCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YW5kX3IpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFuZHNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6ZW9yX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmVvcnNfcik6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6c3ViX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OnN1YnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cnNiX3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OnJzYnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
YWRkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFkZHNfcik6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6YWRjX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFk
Y3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6c2JjX3IpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OnNiY3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cnNj
X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJzY3Nfcik6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6dHN0X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnRlcV9y
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpjbXBfcik6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6b3JyX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om9ycnNfcik6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bW92X3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6Om1vdnNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmljX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJpY3Nfcik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6bXZuX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om12bnNfcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bXVsX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6Om11bHNfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bXVsbF9yKToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsZHJfaW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpsZHJfdW5faW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpkdHJfdSk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX3VyKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpkdHJfZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX2RyKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsZHJoX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmxkcmhfZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGRyaF91KToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzdHJoX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OnB1c2hfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cG9wX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBva2Vfcik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6cGVla19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpjbHpfcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmtwdCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6bHNsKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsc3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmFzcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bHNs
X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Omxzcl9yKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjphc3Jfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6c2l6ZSk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZW5zdXJlU3BhY2UpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OmxhYmVsKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphbGln
bik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6am1wKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpwYXRjaFBvaW50ZXJJbnRlcm5hbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6cGF0Y2hDb25zdFBvb2xMb2FkKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpw
YXRjaFBvaW50ZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJlcGF0Y2hJbnQzMik6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cmVwYXRjaFBvaW50ZXIpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OnJlcGF0Y2hMb2FkUHRyVG9MRUEpOgorICAgICAgICAoSlNDOjpB
Uk1Bc3NlbWJsZXI6OmxpbmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyZWxp
bmtKdW1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5rQ2FsbCk6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6cmVsaW5rQ2FsbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6Z2V0UmVsb2NhdGVkQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
Z2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmdldENhbGxSZXR1cm5PZmZzZXQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmdldE9w
MkJ5dGUpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBsYWNlQ29uc3RQb29sQmFycmll
cik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Uk0pOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OlJTKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpSRCk6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6Uk4pOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Omdl
dENvbmRpdGlvbmFsRmllbGQpOgorICAgICAgICAqIGFzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNz
ZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6OkNhbGw6OmVu
YWJsZUxhdGVQYXRjaCk6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFjcm9Bc3NlbWJsZXI6Okp1
bXA6OmVuYWJsZUxhdGVQYXRjaCk6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
Lmg6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6IEFkZGVkLgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjphZGQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjphbmQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsc2hpZnQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptdWwzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjpub3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjpvcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnJzaGlmdDMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN1YjMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06OnhvcjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk06OmxvYWQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzJXaXRo
QWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Omxv
YWRQdHJXaXRoUGF0Y2hUb0xFQSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjps
b2FkMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmUzMldpdGhBZGRy
ZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmUz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpwb3ApOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6cHVzaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjptb3ZlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN3YXApOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2lnbkV4dGVuZDMyVG9QdHIpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6emVyb0V4dGVuZDMyVG9QdHIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTo6YnJhbmNoMTYpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6
YnJhbmNoVGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Omp1bXApOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoQWRkMzIpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bXVsbDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OmJyYW5jaE11bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OmJyYW5jaFN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyZWFrcG9p
bnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bmVhckNhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpyZXQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2V0MzIp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2V0VGVzdDMyKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnRhaWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1ha2VUYWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptb3ZlV2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OmJyYW5jaFB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpzdG9yZVB0cldpdGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OnN0b3JlRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmFkZERvdWJs
ZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdWJEb3VibGUpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bXVsRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OmJyYW5jaERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpicmFuY2hUcnVuY2F0ZURvdWJsZVRvSW50MzIpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTo6QVJNQ29uZGl0aW9uKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnByZXBhcmVDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmNh
bGwzMik6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaDoKKyAgICAgICAgKEpT
Qzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaCk6CisgICAgICAgICogd3RmL1BsYXRm
b3JtLmg6CisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6CisgICAgICAgIChKU0M6OllhcnI6
OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKyAgICAgICAgKEpTQzo6WWFycjo6UmVn
ZXhHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKworMjAwOS0wNi0yOSAgR2Fib3IgTG9raSAg
PGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisJPGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk4Nj4K
KwogCUV4dGVuZCBBc3NlbWJsZXJCdWZmZXIgd2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1l
Y2hhbmlzbS4KIAogICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSBiL0phdmFTY3JpcHRDb3Jl
L0phdmFTY3JpcHRDb3JlLnByaQppbmRleCAxMWQyMTVhLi40NmU3ZjMxIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2
YVNjcmlwdENvcmUucHJpCkBAIC0xMTcsNiArMTE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0
ZWNvZGUvQ29kZUJsb2NrLmNwcCBcCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3Bw
IFwKICAgICBieXRlY29kZS9KdW1wVGFibGUuY3BwIFwKKyAgICBhc3NlbWJsZXIvQVJNQXNzZW1i
bGVyLmNwcCBcCiAgICAgaml0L0pJVC5jcHAgXAogICAgIGppdC9KSVRDYWxsLmNwcCBcCiAgICAg
aml0L0pJVEFyaXRobWV0aWMuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2EzZGI5NAotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3Bw
CkBAIC0wLDAgKzEsMzUxIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkg
b2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9u
IGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBj
b2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJl
ZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29w
eXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhl
ciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFO
RCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklM
SVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlN
RUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQ
RUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25m
aWcuaCIKKworI2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2luY2x1
ZGUgIkFSTUFzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gUGF0Y2hpbmcgaGVs
cGVycworCitBUk1Xb3JkKiBBUk1Bc3NlbWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCog
aW5zbiwgdWludDMyX3QqIGNvbnN0UG9vbCkKK3sKKyAgICAvLyBNdXN0IGJlIGFuIGxkciAuLi4s
IFtwYyArLy0gaW1tXQorICAgIEFTU0VSVCgoKmluc24gJiAweDBmN2YwMDAwKSA9PSAweDA1MWYw
MDAwKTsKKworICAgIGlmIChjb25zdFBvb2wgJiYgKCppbnNuICYgMHgxKSkKKyAgICAgICAgcmV0
dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGNvbnN0UG9vbCArICgoKmluc24gJiBTRFRf
T0ZGU0VUX01BU0spID4+IDEpKTsKKworICAgIEFSTVdvcmQgYWRkciA9IHJlaW50ZXJwcmV0X2Nh
c3Q8QVJNV29yZD4oaW5zbikgKyAyICogc2l6ZW9mKEFSTVdvcmQpOworICAgIGlmICgqaW5zbiAm
IERUX1VQKQorICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oYWRkciAr
ICgqaW5zbiAmIFNEVF9PRkZTRVRfTUFTSykpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJl
aW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGFkZHIgLSAoKmluc24gJiBTRFRfT0ZGU0VUX01BU0sp
KTsKK30KKwordm9pZCBBUk1Bc3NlbWJsZXI6OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3Jj
IGZyb20sIHZvaWQqIHRvKQoreworICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0
PEFSTVdvcmQqPihjb2RlKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKKwor
ICAgIGlmICghZnJvbS5tX2xhdGVQYXRjaCkgeworICAgICAgICBpbnQgZGlmZiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZCo+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGluc24g
KyAyKTsKKworICAgICAgICBpZiAoKGRpZmYgPD0gQk9GRlNFVF9NQVggJiYgZGlmZiA+PSBCT0ZG
U0VUX01JTikpIHsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJs
ZSB1bnByb3RlY3QoaW5zbiwgc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgICAgICppbnNuID0g
QiB8IGdldENvbmRpdGlvbmFsRmllbGQoKmluc24pIHwgKGRpZmYgJiBCUkFOQ0hfTUFTSyk7Cisg
ICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgKmdldExkckltbUFkZHJl
c3MoaW5zbikgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KHRvKTsKK30KKwordm9pZCBBUk1B
c3NlbWJsZXI6OnBhdGNoQ29uc3RQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29uc3RQ
b29sQWRkcikKK3sKKyAgICBBUk1Xb3JkICpsZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQq
Pihsb2FkQWRkcik7CisgICAgQVJNV29yZCBkaWZmID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3Jk
Kj4oY29uc3RQb29sQWRkcikgLSBsZHI7CisgICAgQVJNV29yZCBpbmRleCA9ICgqbGRyICYgMHhm
ZmYpID4+IDE7CisKKyAgICBBU1NFUlQoZGlmZiA+PSAxKTsKKyAgICBpZiAoZGlmZiA+PSAyIHx8
IGluZGV4ID4gMCkgeworICAgICAgICBkaWZmID0gKGRpZmYgKyBpbmRleCAtIDIpICogc2l6ZW9m
KEFSTVdvcmQpOworICAgICAgICBBU1NFUlQoZGlmZiA8PSAweGZmZik7CisgICAgICAgICpsZHIg
PSAoKmxkciAmIH4weGZmZikgfCBkaWZmOworICAgIH0gZWxzZQorICAgICAgICAqbGRyID0gKCps
ZHIgJiB+KDB4ZmZmIHwgQVJNQXNzZW1ibGVyOjpEVF9VUCkpIHwgc2l6ZW9mKEFSTVdvcmQpOwor
fQorCisvLyBIYW5kbGUgaW1tZWRpYXRlcworCitBUk1Xb3JkIEFSTUFzc2VtYmxlcjo6Z2V0T3Ay
KEFSTVdvcmQgaW1tKQoreworICAgIGludCByb2w7CisKKyAgICBpZiAoaW1tIDw9IDB4ZmYpCisg
ICAgICAgIHJldHVybiBPUDJfSU1NIHwgaW1tOworCisgICAgaWYgKChpbW0gJiAweGZmMDAwMDAw
KSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAgcm9sID0gODsKKyAgICB9Cisg
ICAgZWxzZSB7CisgICAgICAgIGltbSA9IChpbW0gPDwgMjQpIHwgKGltbSA+PiA4KTsKKyAgICAg
ICAgcm9sID0gMDsKKyAgICB9CisKKyAgICBpZiAoKGltbSAmIDB4ZmYwMDAwMDApID09IDApIHsK
KyAgICAgICAgaW1tIDw8PSA4OworICAgICAgICByb2wgKz0gNDsKKyAgICB9CisKKyAgICBpZiAo
KGltbSAmIDB4ZjAwMDAwMDApID09IDApIHsKKyAgICAgICAgaW1tIDw8PSA0OworICAgICAgICBy
b2wgKz0gMjsKKyAgICB9CisKKyAgICBpZiAoKGltbSAmIDB4YzAwMDAwMDApID09IDApIHsKKyAg
ICAgICAgaW1tIDw8PSAyOworICAgICAgICByb2wgKz0gMTsKKyAgICB9CisKKyAgICBpZiAoKGlt
bSAmIDB4MDBmZmZmZmYpID09IDApCisgICAgICAgIHJldHVybiBPUDJfSU1NIHwgKGltbSA+PiAy
NCkgfCAocm9sIDw8IDgpOworCisgICAgcmV0dXJuIDA7Cit9CisKK2ludCBBUk1Bc3NlbWJsZXI6
OmdlbkludChpbnQgcmVnLCBBUk1Xb3JkIGltbSwgYm9vbCBwb3NpdGl2ZSkKK3sKKyAgICAvLyBT
dGVwMTogU2VhcmNoIGEgbm9uLWltbWVkaWF0ZSBwYXJ0CisgICAgQVJNV29yZCBtYXNrOworICAg
IEFSTVdvcmQgaW1tMTsKKyAgICBBUk1Xb3JkIGltbTI7CisgICAgaW50IHJvbDsKKworICAgIG1h
c2sgPSAweGZmMDAwMDAwOworICAgIHJvbCA9IDg7CisgICAgd2hpbGUoMSkgeworICAgICAgICBp
ZiAoKGltbSAmIG1hc2spID09IDApIHsKKyAgICAgICAgICAgIGltbSA9IChpbW0gPDwgcm9sKSB8
IChpbW0gPj4gKDMyIC0gcm9sKSk7CisgICAgICAgICAgICByb2wgPSA0ICsgKHJvbCA+PiAxKTsK
KyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgIHJvbCArPSAyOworICAgICAg
ICBtYXNrID4+PSAyOworICAgICAgICBpZiAobWFzayAmIDB4MykgeworICAgICAgICAgICAgLy8g
cm9sIDgKKyAgICAgICAgICAgIGltbSA9IChpbW0gPDwgOCkgfCAoaW1tID4+IDI0KTsKKyAgICAg
ICAgICAgIG1hc2sgPSAweGZmMDA7CisgICAgICAgICAgICByb2wgPSAyNDsKKyAgICAgICAgICAg
IHdoaWxlICgxKSB7CisgICAgICAgICAgICAgICAgaWYgKChpbW0gJiBtYXNrKSA9PSAwKSB7Cisg
ICAgICAgICAgICAgICAgICAgIGltbSA9IChpbW0gPDwgcm9sKSB8IChpbW0gPj4gKDMyIC0gcm9s
KSk7CisgICAgICAgICAgICAgICAgICAgIHJvbCA9IChyb2wgPj4gMSkgLSA4OworICAgICAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgcm9s
ICs9IDI7CisgICAgICAgICAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAgICAgICAgICBpZiAo
bWFzayAmIDB4MykKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIDA7CisgICAgICAgICAgICB9
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KKworICAgIEFTU0VSVCgoaW1t
ICYgMHhmZikgPT0gMCk7CisKKyAgICBpZiAoKGltbSAmIDB4ZmYwMDAwMDApID09IDApIHsKKyAg
ICAgICAgaW1tMSA9IE9QMl9JTU0gfCAoKGltbSA+PiAxNikgJiAweGZmKSB8ICgoKHJvbCArIDQp
ICYgMHhmKSA8PCA4KTsKKyAgICAgICAgaW1tMiA9IE9QMl9JTU0gfCAoKGltbSA+PiA4KSAmIDB4
ZmYpIHwgKCgocm9sICsgOCkgJiAweGYpIDw8IDgpOworICAgIH0gZWxzZSBpZiAoaW1tICYgMHhj
MDAwMDAwMCkgeworICAgICAgICBpbW0xID0gT1AyX0lNTSB8ICgoaW1tID4+IDI0KSAmIDB4ZmYp
IHwgKChyb2wgJiAweGYpIDw8IDgpOworICAgICAgICBpbW0gPDw9IDg7CisgICAgICAgIHJvbCAr
PSA0OworCisgICAgICAgIGlmICgoaW1tICYgMHhmZjAwMDAwMCkgPT0gMCkgeworICAgICAgICAg
ICAgaW1tIDw8PSA4OworICAgICAgICAgICAgcm9sICs9IDQ7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoKGltbSAmIDB4ZjAwMDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gNDsK
KyAgICAgICAgICAgIHJvbCArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAw
eGMwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgICAgICBpbW0gPDw9IDI7CisgICAgICAgICAgICBy
b2wgKz0gMTsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgoaW1tICYgMHgwMGZmZmZmZikgPT0g
MCkKKyAgICAgICAgICAgIGltbTIgPSBPUDJfSU1NIHwgKGltbSA+PiAyNCkgfCAoKHJvbCAmIDB4
ZikgPDwgOCk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGlmICgoaW1tICYgMHhmMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAgICAg
aW1tIDw8PSA0OworICAgICAgICAgICAgcm9sICs9IDI7CisgICAgICAgIH0KKworICAgICAgICBp
ZiAoKGltbSAmIDB4YzAwMDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gMjsKKyAg
ICAgICAgICAgIHJvbCArPSAxOworICAgICAgICB9CisKKyAgICAgICAgaW1tMSA9IE9QMl9JTU0g
fCAoKGltbSA+PiAyNCkgJiAweGZmKSB8ICgocm9sICYgMHhmKSA8PCA4KTsKKyAgICAgICAgaW1t
IDw8PSA4OworICAgICAgICByb2wgKz0gNDsKKworICAgICAgICBpZiAoKGltbSAmIDB4ZjAwMDAw
MDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gNDsKKyAgICAgICAgICAgIHJvbCArPSAy
OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGMwMDAwMDAwKSA9PSAwKSB7Cisg
ICAgICAgICAgICBpbW0gPDw9IDI7CisgICAgICAgICAgICByb2wgKz0gMTsKKyAgICAgICAgfQor
CisgICAgICAgIGlmICgoaW1tICYgMHgwMGZmZmZmZikgPT0gMCkKKyAgICAgICAgICAgIGltbTIg
PSBPUDJfSU1NIHwgKGltbSA+PiAyNCkgfCAoKHJvbCAmIDB4ZikgPDwgOCk7CisgICAgICAgIGVs
c2UKKyAgICAgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGlmIChwb3NpdGl2ZSkgewor
ICAgICAgICBtb3ZfcihyZWcsIGltbTEpOworICAgICAgICBvcnJfcihyZWcsIHJlZywgaW1tMik7
CisgICAgfSBlbHNlIHsKKyAgICAgICAgbXZuX3IocmVnLCBpbW0xKTsKKyAgICAgICAgYmljX3Io
cmVnLCByZWcsIGltbTIpOworICAgIH0KKworICAgIHJldHVybiAxOworfQorCitBUk1Xb3JkIEFS
TUFzc2VtYmxlcjo6Z2V0SW1tKEFSTVdvcmQgaW1tLCBpbnQgdG1wUmVnLCBib29sIGludmVydCkK
K3sKKyAgICBBUk1Xb3JkIHRtcDsKKworICAgIC8vIERvIGl0IGJ5IDEgaW5zdHJ1Y3Rpb24KKyAg
ICB0bXAgPSBnZXRPcDIoaW1tKTsKKyAgICBpZiAodG1wKQorICAgICAgICByZXR1cm4gdG1wOwor
CisgICAgdG1wID0gZ2V0T3AyKH5pbW0pOworICAgIGlmICh0bXApIHsKKyAgICAgICAgaWYgKGlu
dmVydCkKKyAgICAgICAgICAgIHJldHVybiB0bXAgfCBPUDJfSU5WX0lNTTsKKyAgICAgICAgbXZu
X3IodG1wUmVnLCB0bXApOworICAgICAgICByZXR1cm4gdG1wUmVnOworICAgIH0KKworICAgIC8v
IERvIGl0IGJ5IDIgaW5zdHJ1Y3Rpb24KKyAgICBpZiAoZ2VuSW50KHRtcFJlZywgaW1tLCB0cnVl
KSkKKyAgICAgICAgcmV0dXJuIHRtcFJlZzsKKyAgICBpZiAoZ2VuSW50KHRtcFJlZywgfmltbSwg
ZmFsc2UpKQorICAgICAgICByZXR1cm4gdG1wUmVnOworCisgICAgbGRyX2ltbSh0bXBSZWcsIGlt
bSk7CisgICAgcmV0dXJuIHRtcFJlZzsKK30KKwordm9pZCBBUk1Bc3NlbWJsZXI6Om1vdmVJbW0o
QVJNV29yZCBpbW0sIGludCBkZXN0KQoreworICAgIEFSTVdvcmQgdG1wOworCisgICAgLy8gRG8g
aXQgYnkgMSBpbnN0cnVjdGlvbgorICAgIHRtcCA9IGdldE9wMihpbW0pOworICAgIGlmICh0bXAp
IHsKKyAgICAgICAgbW92X3IoZGVzdCwgdG1wKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwor
ICAgIHRtcCA9IGdldE9wMih+aW1tKTsKKyAgICBpZiAodG1wKSB7CisgICAgICAgIG12bl9yKGRl
c3QsIHRtcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBEbyBpdCBieSAyIGlu
c3RydWN0aW9uCisgICAgaWYgKGdlbkludChkZXN0LCBpbW0sIHRydWUpKQorICAgICAgICByZXR1
cm47CisgICAgaWYgKGdlbkludChkZXN0LCB+aW1tLCBmYWxzZSkpCisgICAgICAgIHJldHVybjsK
KworICAgIGxkcl9pbW0oZGVzdCwgaW1tKTsKK30KKworLy8gTWVtb3J5IGxvYWQvc3RvcmUgaGVs
cGVycworCit2b2lkIEFSTUFzc2VtYmxlcjo6ZGF0YVRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJl
Z2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zmc2V0KQoreworICAg
IGlmIChvZmZzZXQgPj0gMCkgeworICAgICAgICBpZiAob2Zmc2V0IDw9IDB4ZmZmKQorICAgICAg
ICAgICAgZHRyX3UoaXNMb2FkLCBzcmNEc3QsIGJhc2UsIG9mZnNldCk7CisgICAgICAgIGVsc2Ug
aWYgKG9mZnNldCA8PSAweGZmZmZmKSB7CisgICAgICAgICAgICBhZGRfcihBUk06OlMwLCBiYXNl
LCBPUDJfSU1NIHwgKG9mZnNldCA+PiAxMikgfCAoMTAgPDwgOCkpOworICAgICAgICAgICAgZHRy
X3UoaXNMb2FkLCBzcmNEc3QsIEFSTTo6UzAsIG9mZnNldCAmIDB4ZmZmKTsKKyAgICAgICAgfSBl
bHNlIHsKKyAgICAgICAgICAgIEFSTVdvcmQgcmVnID0gZ2V0SW1tKG9mZnNldCwgQVJNOjpTMCk7
CisgICAgICAgICAgICBkdHJfdXIoaXNMb2FkLCBzcmNEc3QsIGJhc2UsIHJlZyk7CisgICAgICAg
IH0KKyAgICB9IGVsc2UgeworICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgICAgICBpZiAo
b2Zmc2V0IDw9IDB4ZmZmKQorICAgICAgICAgICAgZHRyX2QoaXNMb2FkLCBzcmNEc3QsIGJhc2Us
IG9mZnNldCk7CisgICAgICAgIGVsc2UgaWYgKG9mZnNldCA8PSAweGZmZmZmKSB7CisgICAgICAg
ICAgICBzdWJfcihBUk06OlMwLCBiYXNlLCBPUDJfSU1NIHwgKG9mZnNldCA+PiAxMikgfCAoMTAg
PDwgOCkpOworICAgICAgICAgICAgZHRyX2QoaXNMb2FkLCBzcmNEc3QsIEFSTTo6UzAsIG9mZnNl
dCAmIDB4ZmZmKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIEFSTVdvcmQgcmVnID0g
Z2V0SW1tKG9mZnNldCwgQVJNOjpTMCk7CisgICAgICAgICAgICBkdHJfZHIoaXNMb2FkLCBzcmNE
c3QsIGJhc2UsIHJlZyk7CisgICAgICAgIH0KKyAgICB9Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVy
OjpiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVn
aXN0ZXJJRCBiYXNlLCBSZWdpc3RlcklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0
KQoreworICAgIEFSTVdvcmQgb3AyOworCisgICAgQVNTRVJUKHNjYWxlID49IDAgJiYgc2NhbGUg
PD0gMyk7CisgICAgb3AyID0gbHNsKGluZGV4LCBzY2FsZSk7CisKKyAgICBpZiAob2Zmc2V0ID49
IDAgJiYgb2Zmc2V0IDw9IDB4ZmZmKSB7CisgICAgICAgIGFkZF9yKEFSTTo6UzAsIGJhc2UsIG9w
Mik7CisgICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCBvZmZzZXQpOworICAg
ICAgICByZXR1cm47CisgICAgfQorICAgIGlmIChvZmZzZXQgPD0gMCAmJiBvZmZzZXQgPj0gLTB4
ZmZmKSB7CisgICAgICAgIGFkZF9yKEFSTTo6UzAsIGJhc2UsIG9wMik7CisgICAgICAgIGR0cl9k
KGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCAtb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAg
IH0KKworICAgIG1vdmVJbW0ob2Zmc2V0LCBBUk06OlMwKTsKKyAgICBhZGRfcihBUk06OlMwLCBB
Uk06OlMwLCBvcDIpOworICAgIGR0cl91cihpc0xvYWQsIHNyY0RzdCwgYmFzZSwgQVJNOjpTMCk7
Cit9CisKK3ZvaWQqIEFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wq
IGFsbG9jYXRvcikKK3sKKyAgICBjaGFyKiBkYXRhID0gcmVpbnRlcnByZXRfY2FzdDxjaGFyKj4o
bV9idWZmZXIuZXhlY3V0YWJsZUNvcHkoYWxsb2NhdG9yKSk7CisKKyAgICBmb3IgKEp1bXBzOjpJ
dGVyYXRvciBpdGVyID0gbV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5kKCk7ICsr
aXRlcikgeworICAgICAgICBBUk1Xb3JkKiBsZHJBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1X
b3JkKj4oZGF0YSArICppdGVyKTsKKyAgICAgICAgQVJNV29yZCogb2Zmc2V0ID0gZ2V0TGRySW1t
QWRkcmVzcyhsZHJBZGRyKTsKKyAgICAgICAgaWYgKCpvZmZzZXQgIT0gMHhmZmZmZmZmZikKKyAg
ICAgICAgICAgIGxpbmtCcmFuY2goZGF0YSwgSm1wU3JjKCppdGVyKSwgZGF0YSArICpvZmZzZXQp
OworICAgIH0KKworICAgIHJldHVybiBkYXRhOworfQorCit9IC8vIG5hbWVzcGFjZSBKU0MKKwor
I2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAw
MDAwLi41MmNlMWI4Ci0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L0FSTUFzc2VtYmxlci5oCkBAIC0wLDAgKzEsNzAwIEBACisvKgorICogQ29weXJpZ2h0IChDKSAy
MDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRp
b25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
IG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xh
aW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVj
ZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0
aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9u
LgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVH
RUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJ
TkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMg
T0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBP
U0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdF
RCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1Qs
IElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFN
QUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBT
VUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBS
T0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFO
WSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJ
QUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkg
QVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBF
VkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisK
KyNpZm5kZWYgQVJNQXNzZW1ibGVyX2gKKyNkZWZpbmUgQVJNQXNzZW1ibGVyX2gKKworI2luY2x1
ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0o
QVJNKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyV2l0aENQLmgiCisjaW5jbHVkZSA8d3Rm
L0Fzc2VydGlvbnMuaD4KK25hbWVzcGFjZSBKU0MgeworCit0eXBlZGVmIHVpbnQzMl90IEFSTVdv
cmQ7CisKK25hbWVzcGFjZSBBUk0geworICAgIHR5cGVkZWYgZW51bSB7CisgICAgICAgIHIwID0g
MCwKKyAgICAgICAgcjEsCisgICAgICAgIHIyLAorICAgICAgICByMywKKyAgICAgICAgUzAgPSBy
MywKKyAgICAgICAgcjQsCisgICAgICAgIHI1LAorICAgICAgICByNiwKKyAgICAgICAgcjcsCisg
ICAgICAgIHI4LAorICAgICAgICBTMSA9IHI4LAorICAgICAgICByOSwKKyAgICAgICAgcjEwLAor
ICAgICAgICByMTEsCisgICAgICAgIHIxMiwKKyAgICAgICAgcjEzLAorICAgICAgICBzcCA9IHIx
MywKKyAgICAgICAgcjE0LAorICAgICAgICBsciA9IHIxNCwKKyAgICAgICAgcjE1LAorICAgICAg
ICBwYyA9IHIxNQorICAgIH0gUmVnaXN0ZXJJRDsKKworICAgIHR5cGVkZWYgZW51bSB7CisgICAg
ICAgIGZwMCAvL0ZJWE1FCisgICAgfSBGUFJlZ2lzdGVySUQ7Cit9IC8vIG5hbWVzcGFjZSBBUk0K
KworICAgIGNsYXNzIEFSTUFzc2VtYmxlciB7CisgICAgcHVibGljOgorICAgICAgICB0eXBlZGVm
IEFSTTo6UmVnaXN0ZXJJRCBSZWdpc3RlcklEOworICAgICAgICB0eXBlZGVmIEFSTTo6RlBSZWdp
c3RlcklEIEZQUmVnaXN0ZXJJRDsKKyAgICAgICAgdHlwZWRlZiBBc3NlbWJsZXJCdWZmZXJXaXRo
Q1A8MjA0OCwgNCwgNCwgQVJNQXNzZW1ibGVyPiBBUk1CdWZmZXI7CisgICAgICAgIHR5cGVkZWYg
V1RGOjpTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICAgICAgQVJNQXNzZW1i
bGVyKCkgeyB9CisKKyAgICAgICAgLy8gQVJNIGNvbmRpdGlvbmFsIGNvbnN0YW50cworICAgICAg
ICB0eXBlZGVmIGVudW0geworICAgICAgICAgICAgRVEgPSAweDAwMDAwMDAwLCAvLyBaZXJvCisg
ICAgICAgICAgICBORSA9IDB4MTAwMDAwMDAsIC8vIE5vbi16ZXJvCisgICAgICAgICAgICBDUyA9
IDB4MjAwMDAwMDAsCisgICAgICAgICAgICBDQyA9IDB4MzAwMDAwMDAsCisgICAgICAgICAgICBN
SSA9IDB4NDAwMDAwMDAsCisgICAgICAgICAgICBQTCA9IDB4NTAwMDAwMDAsCisgICAgICAgICAg
ICBWUyA9IDB4NjAwMDAwMDAsCisgICAgICAgICAgICBWQyA9IDB4NzAwMDAwMDAsCisgICAgICAg
ICAgICBISSA9IDB4ODAwMDAwMDAsCisgICAgICAgICAgICBMUyA9IDB4OTAwMDAwMDAsCisgICAg
ICAgICAgICBHRSA9IDB4YTAwMDAwMDAsCisgICAgICAgICAgICBMVCA9IDB4YjAwMDAwMDAsCisg
ICAgICAgICAgICBHVCA9IDB4YzAwMDAwMDAsCisgICAgICAgICAgICBMRSA9IDB4ZDAwMDAwMDAs
CisgICAgICAgICAgICBBTCA9IDB4ZTAwMDAwMDAKKyAgICAgICAgfSBDb25kaXRpb247CisKKyAg
ICAgICAgLy8gQVJNIGluc3RydWN0aW9uIGNvbnN0YW50cworICAgICAgICBlbnVtIHsKKyAgICAg
ICAgICAgIEFORCA9ICgweDAgPDwgMjEpLAorICAgICAgICAgICAgRU9SID0gKDB4MSA8PCAyMSks
CisgICAgICAgICAgICBTVUIgPSAoMHgyIDw8IDIxKSwKKyAgICAgICAgICAgIFJTQiA9ICgweDMg
PDwgMjEpLAorICAgICAgICAgICAgQUREID0gKDB4NCA8PCAyMSksCisgICAgICAgICAgICBBREMg
PSAoMHg1IDw8IDIxKSwKKyAgICAgICAgICAgIFNCQyA9ICgweDYgPDwgMjEpLAorICAgICAgICAg
ICAgUlNDID0gKDB4NyA8PCAyMSksCisgICAgICAgICAgICBUU1QgPSAoMHg4IDw8IDIxKSwKKyAg
ICAgICAgICAgIFRFUSA9ICgweDkgPDwgMjEpLAorICAgICAgICAgICAgQ01QID0gKDB4YSA8PCAy
MSksCisgICAgICAgICAgICBDTU4gPSAoMHhiIDw8IDIxKSwKKyAgICAgICAgICAgIE9SUiA9ICgw
eGMgPDwgMjEpLAorICAgICAgICAgICAgTU9WID0gKDB4ZCA8PCAyMSksCisgICAgICAgICAgICBC
SUMgPSAoMHhlIDw8IDIxKSwKKyAgICAgICAgICAgIE1WTiA9ICgweGYgPDwgMjEpLAorICAgICAg
ICAgICAgTVVMID0gMHgwMDAwMDA5MCwKKyAgICAgICAgICAgIE1VTEwgPSAweDAwYzAwMDkwLAor
ICAgICAgICAgICAgRFRSID0gMHgwNTAwMDAwMCwKKyAgICAgICAgICAgIExEUkggPSAweDAwMTAw
MDkwLAorICAgICAgICAgICAgU1RSSCA9IDB4MDAwMDAwOTAsCisgICAgICAgICAgICBTVE1EQiA9
IDB4MDkyMDAwMDAsCisgICAgICAgICAgICBMRE1JQSA9IDB4MDhiMDAwMDAsCisgICAgICAgICAg
ICBCID0gMHgwYTAwMDAwMCwKKyAgICAgICAgICAgIEJMID0gMHgwYjAwMDAwMCwKKyNpZiBBUk1f
QVJDSF9WRVJTSU9OID49IDUKKyAgICAgICAgICAgIENMWiA9IDB4MDE2ZjBmMTAsCisgICAgICAg
ICAgICBCS1BUID0gMHhlMTIwMDcwLAorI2VuZGlmCisgICAgICAgIH07CisKKyAgICAgICAgZW51
bSB7CisgICAgICAgICAgICBPUDJfSU1NID0gKDEgPDwgMjUpLAorICAgICAgICAgICAgT1AyX0lN
TWggPSAoMSA8PCAyMiksCisgICAgICAgICAgICBPUDJfSU5WX0lNTSA9ICgxIDw8IDI2KSwKKyAg
ICAgICAgICAgIFNFVF9DQyA9ICgxIDw8IDIwKSwKKyAgICAgICAgICAgIE9QMl9PRlNSRUcgPSAo
MSA8PCAyNSksCisgICAgICAgICAgICBEVF9VUCA9ICgxIDw8IDIzKSwKKyAgICAgICAgICAgIERU
X1dCID0gKDEgPDwgMjEpLAorICAgICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIGlubGN1ZGVkIGlu
IExEUiBhbmQgU1RSCisgICAgICAgICAgICBEVF9QUkUgPSAoMSA8PCAyNCksCisgICAgICAgICAg
ICBIRFRfVUggPSAoMSA8PCA1KSwKKyAgICAgICAgICAgIERUX0xPQUQgPSAoMSA8PCAyMCksCisg
ICAgICAgIH07CisKKyAgICAgICAgLy8gTWFza3Mgb2YgQVJNIGluc3RydWN0aW9ucworICAgICAg
ICBlbnVtIHsKKyAgICAgICAgICAgIEJSQU5DSF9NQVNLID0gMHgwMGZmZmZmZiwKKyAgICAgICAg
ICAgIE5PTkFSTSA9IDB4ZjAwMDAwMDAsCisgICAgICAgICAgICBTRFRfTUFTSyA9IDB4MGMwMDAw
MDAsCisgICAgICAgICAgICBTRFRfT0ZGU0VUX01BU0sgPSAweGZmZiwKKyAgICAgICAgfTsKKwor
ICAgICAgICBlbnVtIHsKKyAgICAgICAgICAgIEJPRkZTRVRfTUlOID0gLTB4MDA4MDAwMDAsCisg
ICAgICAgICAgICBCT0ZGU0VUX01BWCA9IDB4MDA3ZmZmZmYsCisgICAgICAgICAgICBTRFQgPSAw
eDA0MDAwMDAwLAorICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEptcFNyYyB7CisgICAgICAg
ICAgICBmcmllbmQgY2xhc3MgQVJNQXNzZW1ibGVyOworICAgICAgICBwdWJsaWM6CisgICAgICAg
ICAgICBKbXBTcmMoKQorICAgICAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgICAg
ICAgICAgLCBtX2xhdGVQYXRjaChmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgdm9pZCBlbmFibGVMYXRlUGF0Y2goKSB7IG1fbGF0ZVBhdGNoID0gdHJ1
ZTsgfQorICAgICAgICBwcml2YXRlOgorICAgICAgICAgICAgSm1wU3JjKGludCBvZmZzZXQpCisg
ICAgICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAgICAgLCBtX2xh
dGVQYXRjaChmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAgICAgICAgIH0KKworICAgICAgICAg
ICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAgICAgICAgICBpbnQgbV9sYXRlUGF0Y2ggOiAxOwor
ICAgICAgICB9OworCisgICAgICAgIGNsYXNzIEptcERzdCB7CisgICAgICAgICAgICBmcmllbmQg
Y2xhc3MgQVJNQXNzZW1ibGVyOworICAgICAgICBwdWJsaWM6CisgICAgICAgICAgICBKbXBEc3Qo
KQorICAgICAgICAgICAgICAgIDogbV9vZmZzZXQoLTEpCisgICAgICAgICAgICAgICAgLCBtX3Vz
ZWQoZmFsc2UpCisgICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGJv
b2wgaXNVc2VkKCkgY29uc3QgeyByZXR1cm4gbV91c2VkOyB9CisgICAgICAgICAgICB2b2lkIHVz
ZWQoKSB7IG1fdXNlZCA9IHRydWU7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAgICAgICAgIEpt
cERzdChpbnQgb2Zmc2V0KQorICAgICAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQorICAg
ICAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICAgICAgeworICAgICAgICAgICAg
ICAgIEFTU0VSVChtX29mZnNldCA9PSBvZmZzZXQpOworICAgICAgICAgICAgfQorCisgICAgICAg
ICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAgICAgIGludCBtX3VzZWQgOiAxOworICAg
ICAgICB9OworCisgICAgICAgIC8vIEluc3RydWN0aW9uIGZvcm1hdGluZworCisgICAgICAgIHZv
aWQgZW1pdEluc3QoQVJNV29yZCBvcCwgaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyKQorICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQgKCAoKG9wMiAmIH5PUDJfSU1NKSA8PSAweGZmZikg
fHwgKCgob3AyICYgfk9QMl9JTU1oKSA8PSAweGZmZikpICk7CisgICAgICAgICAgICBtX2J1ZmZl
ci5wdXRJbnQob3AgfCBSTihybikgfCBSRChyZCkgfCBvcDIpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBhbmRfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9
IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3Jk
PihjYykgfCBBTkQsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYW5k
c19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEFO
RCB8IFNFVF9DQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlb3Jf
cihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAg
ICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBFT1Is
IHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZW9yc19yKGludCByZCwg
aW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEVPUiB8IFNFVF9DQywg
cmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdWJfcihpbnQgcmQsIGlu
dCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAg
ICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBTVUIsIHJkLCBybiwgb3Ay
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3Vic19yKGludCByZCwgaW50IHJuLCBBUk1X
b3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJ
bnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFNVQiB8IFNFVF9DQywgcmQsIHJuLCBvcDIp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2JfcihpbnQgcmQsIGludCBybiwgQVJNV29y
ZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5z
dChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBSU0IsIHJkLCBybiwgb3AyKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgcnNic19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19j
YXN0PEFSTVdvcmQ+KGNjKSB8IFJTQiB8IFNFVF9DQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBhZGRfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2Fz
dDxBUk1Xb3JkPihjYykgfCBBREQsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAg
IHZvaWQgYWRkc19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0g
QUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+
KGNjKSB8IEFERCB8IFNFVF9DQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAg
dm9pZCBhZGNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFM
KQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihj
YykgfCBBREMsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRjc19y
KGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEFEQyB8
IFNFVF9DQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzYmNfcihp
bnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7
CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBTQkMsIHJk
LCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc2Jjc19yKGludCByZCwgaW50
IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFNCQyB8IFNFVF9DQywgcmQs
IHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2NfcihpbnQgcmQsIGludCBy
biwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAg
ICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBSU0MsIHJkLCBybiwgb3AyKTsK
KyAgICAgICAgfQorCisgICAgICAgIHZvaWQgcnNjc19yKGludCByZCwgaW50IHJuLCBBUk1Xb3Jk
IG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0
KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFJTQyB8IFNFVF9DQywgcmQsIHJuLCBvcDIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0c3RfcihpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25k
aXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nh
c3Q8QVJNV29yZD4oY2MpIHwgVFNUIHwgU0VUX0NDLCAwLCBybiwgb3AyKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgdGVxX3IoaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0g
QUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+
KGNjKSB8IFRFUSB8IFNFVF9DQywgMCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGNtcF9yKGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAg
ICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBDTVAg
fCBTRVRfQ0MsIDAsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBvcnJfcihp
bnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7
CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBPUlIsIHJk
LCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgb3Jyc19yKGludCByZCwgaW50
IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE9SUiB8IFNFVF9DQywgcmQs
IHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtb3ZfcihpbnQgcmQsIEFSTVdv
cmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdElu
c3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTU9WLCByZCwgQVJNOjpyMCwgb3AyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgbW92c19yKGludCByZCwgQVJNV29yZCBvcDIsIENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2Fz
dDxBUk1Xb3JkPihjYykgfCBNT1YgfCBTRVRfQ0MsIHJkLCBBUk06OnIwLCBvcDIpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBiaWNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENv
bmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNf
Y2FzdDxBUk1Xb3JkPihjYykgfCBCSUMsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgYmljc19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNj
ID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdv
cmQ+KGNjKSB8IEJJQyB8IFNFVF9DQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBtdm5fcihpbnQgcmQsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwg
TVZOLCByZCwgQVJNOjpyMCwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbXZuc19y
KGludCByZCwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAg
ICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBNVk4gfCBTRVRfQ0Ms
IHJkLCBBUk06OnIwLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtdWxfcihpbnQg
cmQsIGludCBybiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAg
ICAgICAgbV9idWZmZXIucHV0SW50KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE1VTCB8IFJO
KHJkKSB8IFJTKHJuKSB8IFJNKHJtKSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG11bHNf
cihpbnQgcmQsIGludCBybiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE1V
TCB8IFNFVF9DQyB8IFJOKHJkKSB8IFJTKHJuKSB8IFJNKHJtKSk7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIG11bGxfcihpbnQgcmRoaSwgaW50IHJkbG8sIGludCBybiwgaW50IHJtLCBDb25k
aXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KHN0
YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE1VTEwgfCBSTihyZGhpKSB8IFJEKHJkbG8pIHwgUlMo
cm4pIHwgUk0ocm0pKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbGRyX2ltbShpbnQgcmQs
IEFSTVdvcmQgaW1tLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
bV9idWZmZXIucHV0SW50V2l0aENvbnN0SW50KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IERU
UiB8IERUX0xPQUQgfCBEVF9VUCB8IFJOKEFSTTo6cGMpIHwgUkQocmQpLCBpbW0sIHRydWUpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJfdW5faW1tKGludCByZCwgQVJNV29yZCBpbW0s
IENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJ
bnRXaXRoQ29uc3RJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRFRSIHwgRFRfTE9BRCB8
IERUX1VQIHwgUk4oQVJNOjpwYykgfCBSRChyZCksIGltbSk7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIGR0cl91KGJvb2wgaXNMb2FkLCBpbnQgcmQsIGludCByYiwgQVJNV29yZCBvcDIsIENv
bmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNf
Y2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApIHwgRFRfVVAs
IHJkLCByYiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHRyX3VyKGJvb2wgaXNM
b2FkLCBpbnQgcmQsIGludCByYiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAg
eworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRFRSIHwg
KGlzTG9hZCA/IERUX0xPQUQgOiAwKSB8IERUX1VQIHwgT1AyX09GU1JFRywgcmQsIHJiLCBybSk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR0cl9kKGJvb2wgaXNMb2FkLCBpbnQgcmQsIGlu
dCByYiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAg
ICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCAoaXNMb2FkID8g
RFRfTE9BRCA6IDApLCByZCwgcmIsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGR0
cl9kcihib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIsIGludCBybSwgQ29uZGl0aW9uIGNjID0g
QUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+
KGNjKSB8IERUUiB8IChpc0xvYWQgPyBEVF9MT0FEIDogMCkgfCBPUDJfT0ZTUkVHLCByZCwgcmIs
IHJtKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbGRyaF9yKGludCByZCwgaW50IHJuLCBp
bnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5z
dChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBMRFJIIHwgSERUX1VIIHwgRFRfVVAgfCBEVF9Q
UkUsIHJkLCBybiwgcm0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJoX2QoaW50IHJk
LCBpbnQgcmIsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTERSSCB8IEhEVF9V
SCB8IERUX1BSRSwgcmQsIHJiLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBsZHJo
X3UoaW50IHJkLCBpbnQgcmIsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTERS
SCB8IEhEVF9VSCB8IERUX1VQIHwgRFRfUFJFLCByZCwgcmIsIG9wMik7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIHN0cmhfcihpbnQgcm4sIGludCBybSwgaW50IHJkLCBDb25kaXRpb24gY2Mg
PSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29y
ZD4oY2MpIHwgU1RSSCB8IEhEVF9VSCB8IERUX1VQIHwgRFRfUFJFLCByZCwgcm4sIHJtKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgcHVzaF9yKGludCByZWcsIENvbmRpdGlvbiBjYyA9IEFM
KQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoQVJNV29yZChyZWcpIDw9IDB4Zik7Cisg
ICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoY2MgfCBEVFIgfCBEVF9XQiB8IFJOKEFSTTo6c3Ap
IHwgUkQocmVnKSB8IDB4NCk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHBvcF9yKGludCBy
ZWcsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoQVJN
V29yZChyZWcpIDw9IDB4Zik7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoY2MgfCAoRFRS
IF4gRFRfUFJFKSB8IERUX0xPQUQgfCBEVF9VUCB8IFJOKEFSTTo6c3ApIHwgUkQocmVnKSB8IDB4
NCk7CisgICAgICAgIH0KKworICAgICAgICBpbmxpbmUgdm9pZCBwb2tlX3IoaW50IHJlZywgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGR0cl9kKGZhbHNlLCBBUk06
OnNwLCAwLCByZWcsIGNjKTsKKyAgICAgICAgfQorCisgICAgICAgIGlubGluZSB2b2lkIHBlZWtf
cihpbnQgcmVnLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZHRy
X3UodHJ1ZSwgcmVnLCBBUk06OnNwLCAwLCBjYyk7CisgICAgICAgIH0KKworI2lmIEFSTV9BUkNI
X1ZFUlNJT04gPj0gNQorICAgICAgICB2b2lkIGNsel9yKGludCByZCwgaW50IHJtLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KHN0YXRp
Y19jYXN0PEFSTVdvcmQ+KGNjKSB8IENMWiB8IFJEKHJkKSB8IFJNKHJtKSk7CisgICAgICAgIH0K
KyNlbmRpZgorCisgICAgICAgIHZvaWQgYmtwdChBUk1Xb3JkIHZhbHVlKQorICAgICAgICB7Cisj
aWYgQVJNX0FSQ0hfVkVSU0lPTiA+PSA1CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoQktQ
VCB8ICgodmFsdWUgJiAweGZmMCkgPDwgNCkgfCAodmFsdWUgJiAweGYpKTsKKyNlbHNlCisgICAg
ICAgICAgICAvLyBDYW5ub3QgYWNjZXNzIHRvIFplcm8gbWVtb3J5IGFkZHJlc3MKKyAgICAgICAg
ICAgIGR0cl9kcih0cnVlLCBBUk06OlMwLCBBUk06OlMwLCBBUk06OlMwKTsKKyNlbmRpZgorICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgbHNsKGludCByZWcsIEFSTVdvcmQgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAg
ICAgICAgICBBU1NFUlQodmFsdWUgPD0gMHgxZik7CisgICAgICAgICAgICByZXR1cm4gcmVnIHwg
KHZhbHVlIDw8IDcpIHwgMHgwMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1Xb3Jk
IGxzcihpbnQgcmVnLCBBUk1Xb3JkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDB4MWYpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZyB8ICh2YWx1ZSA8PCA3KSB8IDB4MjA7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgQVJNV29yZCBhc3IoaW50IHJlZywgQVJNV29yZCB2YWx1ZSkKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAg
IEFTU0VSVCh2YWx1ZSA8PSAweDFmKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAodmFsdWUg
PDwgNykgfCAweDQwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgbHNsX3Io
aW50IHJlZywgaW50IHNoaWZ0UmVnKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVn
IDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHNoaWZ0UmVnIDw9IEFSTTo6cGMpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZyB8IChzaGlmdFJlZyA8PCA4KSB8IDB4MTA7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBsc3JfcihpbnQgcmVnLCBpbnQgc2hpZnRSZWcp
CisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAgICAg
ICAgICBBU1NFUlQoc2hpZnRSZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1cm4gcmVn
IHwgKHNoaWZ0UmVnIDw8IDgpIHwgMHgzMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBB
Uk1Xb3JkIGFzcl9yKGludCByZWcsIGludCBzaGlmdFJlZykKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIEFTU0VSVChzaGlmdFJlZyA8
PSBBUk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAoc2hpZnRSZWcgPDwgOCkgfCAw
eDUwOworICAgICAgICB9CisKKyAgICAgICAgLy8gR2VuZXJhbCBoZWxwZXJzCisKKyAgICAgICAg
aW50IHNpemUoKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gbV9idWZmZXIuc2l6ZSgp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBp
bnQgY29uc3RTcGFjZSkKKyAgICAgICAgeworICAgICAgICAgICAgbV9idWZmZXIuZW5zdXJlU3Bh
Y2UoaW5zblNwYWNlLCBjb25zdFNwYWNlKTsKKyAgICAgICAgfQorCisgICAgICAgIEptcERzdCBs
YWJlbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIuc2l6
ZSgpKTsKKyAgICAgICAgfQorCisgICAgICAgIEptcERzdCBhbGlnbihpbnQgYWxpZ25tZW50KQor
ICAgICAgICB7CisgICAgICAgICAgICB3aGlsZSAoIW1fYnVmZmVyLmlzQWxpZ25lZChhbGlnbm1l
bnQpKQorICAgICAgICAgICAgICAgIG1vdl9yKEFSTTo6cjAsIEFSTTo6cjApOworCisgICAgICAg
ICAgICByZXR1cm4gbGFiZWwoKTsKKyAgICAgICAgfQorCisgICAgICAgIEptcFNyYyBqbXAoQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGludCBzID0gc2l6ZSgpOwor
ICAgICAgICAgICAgbGRyX3VuX2ltbShBUk06OnBjLCAweGZmZmZmZmZmLCBjYyk7CisgICAgICAg
ICAgICBtX2p1bXBzLmFwcGVuZChzKTsKKyAgICAgICAgICAgIHJldHVybiBKbXBTcmMocyk7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkKiBleGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCog
YWxsb2NhdG9yKTsKKworICAgICAgICAvLyBQYXRjaGluZyBoZWxwZXJzCisKKyAgICAgICAgc3Rh
dGljIEFSTVdvcmQqIGdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMyX3QqIGNv
bnN0UG9vbCA9IDApOworICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQnJhbmNoKHZvaWQqIGNvZGUs
IEptcFNyYyBmcm9tLCB2b2lkKiB0byk7CisKKyAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2lu
dGVySW50ZXJuYWwoaW50cHRyX3QgZnJvbSwgdm9pZCogdG8pCisgICAgICAgIHsKKyAgICAgICAg
ICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihmcm9tKTsKKyAg
ICAgICAgICAgIEFSTVdvcmQqIGFkZHIgPSBnZXRMZHJJbW1BZGRyZXNzKGluc24pOworICAgICAg
ICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVjdChhZGRyLCBz
aXplb2YoQVJNV29yZCkpOworICAgICAgICAgICAgKmFkZHIgPSByZWludGVycHJldF9jYXN0PEFS
TVdvcmQ+KHRvKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1Xb3JkIHBhdGNoQ29u
c3RQb29sTG9hZChBUk1Xb3JkIGxvYWQsIEFSTVdvcmQgdmFsdWUpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIHZhbHVlID0gKHZhbHVlIDw8IDEpICsgMTsKKyAgICAgICAgICAgIEFTU0VSVCghKHZh
bHVlICYgfjB4ZmZmKSk7CisgICAgICAgICAgICByZXR1cm4gKGxvYWQgJiB+MHhmZmYpIHwgdmFs
dWU7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaENvbnN0UG9vbExvYWQo
dm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpOworCisgICAgICAgIC8vIFBhdGNo
IHBvaW50ZXJzCisKKyAgICAgICAgc3RhdGljIHZvaWQgcGF0Y2hQb2ludGVyKHZvaWQqIGNvZGUs
IEptcERzdCBmcm9tLCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcGF0Y2hQb2lu
dGVySW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oY29kZSkgKyBmcm9tLm1fb2Zm
c2V0LCB0byk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCByZXBhdGNoSW50MzIo
dm9pZCogZnJvbSwgaW50MzJfdCB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcGF0Y2hQb2lu
dGVySW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSksIHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHRvKSk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCByZXBh
dGNoUG9pbnRlcih2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAg
cGF0Y2hQb2ludGVySW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSksIHRv
KTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hMb2FkUHRyVG9MRUEo
dm9pZCogZnJvbSkKKyAgICAgICAgeworICAgICAgICAgICAgLy8gT24gYXJtLCB0aGlzIGlzIGEg
cGF0Y2ggZnJvbSBMRFIgdG8gQURELiBJdCBpcyByZXN0cmljdGVkIGNvbnZlcnNpb24sCisgICAg
ICAgICAgICAvLyBmcm9tIHNwZWNpYWwgY2FzZSB0byBzcGVjaWFsIGNhc2UsIGFsdG91Z2ggZW5v
dWdoIGZvciBpdHMgcHVycG9zZQorICAgICAgICAgICAgQVJNV29yZCogaW5zbiA9IHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZCo+KGZyb20pOworICAgICAgICAgICAgQVNTRVJUKCgqaW5zbiAmIDB4
MGZmMDBmMDApID09IDB4MDU5MDAwMDApOworCisgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2Nh
dG9yOjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KGluc24sIHNpemVvZihBUk1Xb3JkKSk7CisgICAg
ICAgICAgICAqaW5zbiA9ICgqaW5zbiAmIDB4ZjAwZmYwZmYpIHwgMHgwMjgwMDAwMDsKKyAgICAg
ICAgfQorCisgICAgICAgIC8vIExpbmtlcnMKKworICAgICAgICB2b2lkIGxpbmtKdW1wKEptcFNy
YyBmcm9tLCBKbXBEc3QgdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIEFSTVdvcmQqIGluc24g
PSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihtX2J1ZmZlci5kYXRhKCkpICsgKGZyb20ubV9v
ZmZzZXQgLyBzaXplb2YoQVJNV29yZCkpOworICAgICAgICAgICAgKmdldExkckltbUFkZHJlc3Mo
aW5zbiwgbV9idWZmZXIucG9vbEFkZHIoKSkgPSBzdGF0aWNfY2FzdDxBUk1Xb3JkPih0by5tX29m
ZnNldCk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCBsaW5rSnVtcCh2b2lkKiBj
b2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbmtC
cmFuY2goY29kZSwgZnJvbSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQg
cmVsaW5rSnVtcCh2b2lkKiBmcm9tLCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAg
cGF0Y2hQb2ludGVySW50ZXJuYWwocmVpbnRlcnByZXRfY2FzdDxpbnRwdHJfdD4oZnJvbSkgLSBz
aXplb2YoQVJNV29yZCksIHRvKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIGxp
bmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKKyAgICAgICAgeworICAg
ICAgICAgICAgbGlua0JyYW5jaChjb2RlLCBmcm9tLCB0byk7CisgICAgICAgIH0KKworICAgICAg
ICBzdGF0aWMgdm9pZCByZWxpbmtDYWxsKHZvaWQqIGZyb20sIHZvaWQqIHRvKQorICAgICAgICB7
CisgICAgICAgICAgICByZWxpbmtKdW1wKGZyb20sIHRvKTsKKyAgICAgICAgfQorCisgICAgICAg
IC8vIEFkZHJlc3Mgb3BlcmF0aW9ucworCisgICAgICAgIHN0YXRpYyB2b2lkKiBnZXRSZWxvY2F0
ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcFNyYyBqdW1wKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3Jk
Kj4oY29kZSkgKyBqdW1wLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpICsgMSk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2Rl
LCBKbXBEc3QgbGFiZWwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVycHJl
dF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihjb2RlKSArIGxhYmVsLm1f
b2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgfQorCisgICAgICAgIC8vIEFkZHJl
c3MgZGlmZmVyZW5jZXMKKworICAgICAgICBzdGF0aWMgaW50IGdldERpZmZlcmVuY2VCZXR3ZWVu
TGFiZWxzKEptcERzdCBmcm9tLCBKbXBTcmMgdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
dHVybiAodG8ubV9vZmZzZXQgKyBzaXplb2YoQVJNV29yZCkpIC0gZnJvbS5tX29mZnNldDsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMo
Sm1wRHN0IGZyb20sIEptcERzdCB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHRv
Lm1fb2Zmc2V0IC0gZnJvbS5tX29mZnNldDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB1
bnNpZ25lZCBnZXRDYWxsUmV0dXJuT2Zmc2V0KEptcFNyYyBjYWxsKQorICAgICAgICB7CisgICAg
ICAgICAgICByZXR1cm4gY2FsbC5tX29mZnNldCArIHNpemVvZihBUk1Xb3JkKTsKKyAgICAgICAg
fQorCisgICAgICAgIC8vIEhhbmRsZSBpbW1lZGlhdGVzCisKKyAgICAgICAgc3RhdGljIEFSTVdv
cmQgZ2V0T3AyQnl0ZShBUk1Xb3JkIGltbSkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJU
KGltbSA8PSAweGZmKTsKKyAgICAgICAgICAgIHJldHVybiBPUDJfSU1NaCB8IChpbW0gJiAweDBm
KSB8ICgoaW1tICYgMHhmMCkgPDwgNCkgOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFS
TVdvcmQgZ2V0T3AyKEFSTVdvcmQgaW1tKTsKKyAgICAgICAgQVJNV29yZCBnZXRJbW0oQVJNV29y
ZCBpbW0sIGludCB0bXBSZWcsIGJvb2wgaW52ZXJ0ID0gZmFsc2UpOworICAgICAgICB2b2lkIG1v
dmVJbW0oQVJNV29yZCBpbW0sIGludCBkZXN0KTsKKworICAgICAgICAvLyBNZW1vcnkgbG9hZC9z
dG9yZSBoZWxwZXJzCisKKyAgICAgICAgdm9pZCBkYXRhVHJhbnNmZXIzMihib29sIGlzTG9hZCwg
UmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgaW50MzJfdCBvZmZzZXQpOworICAg
ICAgICB2b2lkIGJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3Jj
RHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBzY2FsZSwgaW50MzJf
dCBvZmZzZXQpOworCisgICAgICAgIC8vIENvbnN0YW50IHBvb2wgaG5hZGxlcnMKKworICAgICAg
ICBzdGF0aWMgQVJNV29yZCBwbGFjZUNvbnN0UG9vbEJhcnJpZXIoaW50IG9mZnNldCkKKyAgICAg
ICAgeworICAgICAgICAgICAgb2Zmc2V0ID0gKG9mZnNldCAtIDIgKiBzaXplb2YoQVJNV29yZCkp
ID4+IDI7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNldCA8PSBCT0ZGU0VUX01BWCAmJiBvZmZz
ZXQgPj0gQk9GRlNFVF9NSU4pKTsKKyAgICAgICAgICAgIHJldHVybiBCIHwgKG9mZnNldCAmIEJS
QU5DSF9NQVNLKTsKKyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQVJNV29yZCBS
TShpbnQgcmVnKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVnIDw9IEFSTTo6cGMp
OworICAgICAgICAgICAgcmV0dXJuIHJlZzsKKyAgICAgICAgfQorCisgICAgICAgIEFSTVdvcmQg
UlMoaW50IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBj
KTsKKyAgICAgICAgICAgIHJldHVybiByZWcgPDwgODsKKyAgICAgICAgfQorCisgICAgICAgIEFS
TVdvcmQgUkQoaW50IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBB
Uk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgPDwgMTI7CisgICAgICAgIH0KKworICAg
ICAgICBBUk1Xb3JkIFJOKGludCByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1cm4gcmVnIDw8IDE2OworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgZ2V0Q29uZGl0aW9uYWxGaWVsZChBUk1Xb3JkIGkp
CisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBpICYgMHhmMDAwMDAwMDsKKyAgICAgICAg
fQorCisgICAgICAgIGludCBnZW5JbnQoaW50IHJlZywgQVJNV29yZCBpbW0sIGJvb2wgcG9zaXRp
dmUpOworCisgICAgICAgIEFSTUJ1ZmZlciBtX2J1ZmZlcjsKKyAgICAgICAgSnVtcHMgbV9qdW1w
czsKKyAgICB9OworCit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NF
TUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2VuZGlmIC8vIEFSTUFzc2VtYmxlcl9oCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
IGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRl
eCBjZjk0Njc3Li4xZjAwNTc2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
YnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKQEAgLTMyMiw2ICszMjIsMTEgQEAgcHVibGljOgogICAg
ICAgICAgICAgcmV0dXJuIENhbGwoanVtcC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAK
KyAgICAgICAgdm9pZCBlbmFibGVMYXRlUGF0Y2goKQorICAgICAgICB7CisgICAgICAgICAgICBt
X2ptcC5lbmFibGVMYXRlUGF0Y2goKTsKKyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAg
ICAgSm1wU3JjIG1fam1wOwogICAgICAgICBGbGFncyBtX2ZsYWdzOwpAQCAtMzU4LDYgKzM2Mywx
MSBAQCBwdWJsaWM6CiAgICAgICAgICAgICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2pt
cCwgbGFiZWwubV9sYWJlbCk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxhdGVQ
YXRjaCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOwor
ICAgICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgfTsK
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKaW5kZXggNDNkMjdlNy4u
OWUxYzVkMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAg
LTM0LDYgKzM0LDEwIEBACiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIgogbmFtZXNw
YWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJBUk12NyBNYWNyb0Fzc2VtYmxlckJhc2U7
IH07CiAKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5o
IgorbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJs
ZXJCYXNlOyB9OworCiAjZWxpZiBQTEFURk9STShYODYpCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJs
ZXJYODYuaCIKIG5hbWVzcGFjZSBKU0MgeyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1hY3Jv
QXNzZW1ibGVyQmFzZTsgfTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9N
YWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYjQwNjlhZAotLS0g
L2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFS
TS5oCkBAIC0wLDAgKzEsNzc4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIElu
Yy4KKyAqIENvcHlyaWdodCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmlu
YXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNl
LCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGlu
IHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVk
IHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVE
IEJZIEFQUExFIElOQy4gYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBX
QVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVE
IFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VM
QVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJ
TkMuIE9SCisgKiBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVD
VCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwKKyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBE
QU1BR0VTIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9G
IFNVQlNUSVRVVEUgR09PRFMgT1IgU0VSVklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICog
UFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04g
QU5ZIFRIRU9SWQorICogT0YgTElBQklMSVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1Qg
TElBQklMSVRZLCBPUiBUT1JUCisgKiAoSU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNF
KSBBUklTSU5HIElOIEFOWSBXQVkgT1VUIE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUs
IEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8K
KworI2lmbmRlZiBNYWNyb0Fzc2VtYmxlckFSTV9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyQVJN
X2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikg
JiYgUExBVEZPUk0oQVJNKQorCisjaW5jbHVkZSAiQVJNQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAi
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFj
cm9Bc3NlbWJsZXJBUk0gOiBwdWJsaWMgQWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk1Bc3NlbWJs
ZXI+IHsKK3B1YmxpYzoKKyAgICBlbnVtIENvbmRpdGlvbiB7CisgICAgICAgIEVxdWFsID0gQVJN
QXNzZW1ibGVyOjpFUSwKKyAgICAgICAgTm90RXF1YWwgPSBBUk1Bc3NlbWJsZXI6Ok5FLAorICAg
ICAgICBBYm92ZSA9IEFSTUFzc2VtYmxlcjo6SEksCisgICAgICAgIEFib3ZlT3JFcXVhbCA9IEFS
TUFzc2VtYmxlcjo6Q1MsCisgICAgICAgIEJlbG93ID0gQVJNQXNzZW1ibGVyOjpDQywKKyAgICAg
ICAgQmVsb3dPckVxdWFsID0gQVJNQXNzZW1ibGVyOjpMUywKKyAgICAgICAgR3JlYXRlclRoYW4g
PSBBUk1Bc3NlbWJsZXI6OkdULAorICAgICAgICBHcmVhdGVyVGhhbk9yRXF1YWwgPSBBUk1Bc3Nl
bWJsZXI6OkdFLAorICAgICAgICBMZXNzVGhhbiA9IEFSTUFzc2VtYmxlcjo6TFQsCisgICAgICAg
IExlc3NUaGFuT3JFcXVhbCA9IEFSTUFzc2VtYmxlcjo6TEUsCisgICAgICAgIE92ZXJmbG93ID0g
QVJNQXNzZW1ibGVyOjpWUywKKyAgICAgICAgU2lnbmVkID0gQVJNQXNzZW1ibGVyOjpNSSwKKyAg
ICAgICAgWmVybyA9IEFSTUFzc2VtYmxlcjo6RVEsCisgICAgICAgIE5vblplcm8gPSBBUk1Bc3Nl
bWJsZXI6Ok5FCisgICAgfTsKKworICAgIGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAg
RG91YmxlRXF1YWwsIC8vRklYTUUKKyAgICAgICAgRG91YmxlTm90RXF1YWwsIC8vRklYTUUKKyAg
ICAgICAgRG91YmxlR3JlYXRlclRoYW4sIC8vRklYTUUKKyAgICAgICAgRG91YmxlR3JlYXRlclRo
YW5PckVxdWFsLCAvL0ZJWE1FCisgICAgICAgIERvdWJsZUxlc3NUaGFuLCAvL0ZJWE1FCisgICAg
ICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgLy9GSVhNRQorICAgIH07CisKKyAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdpc3RlciA9IEFSTTo6c3A7CisKKyAgICBz
dGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQdHIgPSBUaW1lc0ZvdXI7CisKKyAgICBib29sIHN1cHBv
cnRzRmxvYXRpbmdQb2ludCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfQorCisgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0Cisg
ICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIu
YWRkc19yKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBp
bW0sIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBBUk06
OlMxKTsKKyAgICAgICAgYWRkMzIoaW1tLCBBUk06OlMxKTsKKyAgICAgICAgc3RvcmUzMihBUk06
OlMxLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkc19yKGRlc3QsIGRlc3Qs
IG1fYXNzZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAg
IHZvaWQgYWRkMzIoQWRkcmVzcyBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IGxvYWQzMihzcmMsIEFSTTo6UzEpOworICAgICAgICBhZGQzMihBUk06OlMxLCBkZXN0KTsKKyAg
ICB9CisKKyAgICB2b2lkIGFuZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hbmRzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9
CisKKyAgICB2b2lkIGFuZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgQVJNV29yZCB3ID0gbV9hc3NlbWJsZXIuZ2V0SW1tKGltbS5tX3ZhbHVlLCBBUk06OlMw
LCB0cnVlKTsKKyAgICAgICAgaWYgKHcgJiBBUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKQorICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuYmljc19yKGRlc3QsIGRlc3QsIHcgJiB+QVJNQXNzZW1ibGVy
OjpPUDJfSU5WX0lNTSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFu
ZHNfcihkZXN0LCBkZXN0LCB3KTsKKyAgICB9CisKKyAgICB2b2lkIGxzaGlmdDMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92c19yKGRl
c3QsIG1fYXNzZW1ibGVyLmxzbChkZXN0LCBpbW0ubV92YWx1ZSAmIDB4MWYpKTsKKyAgICB9CisK
KyAgICB2b2lkIGxzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJsZXIu
bHNsX3IoZGVzdCwgc2hpZnRfYW1vdW50KSk7CisgICAgfQorCisgICAgdm9pZCBtdWwzMihSZWdp
c3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYyA9PSBk
ZXN0KSB7CisgICAgICAgICAgICBtb3ZlKHNyYywgQVJNOjpTMCk7CisgICAgICAgICAgICBzcmMg
PSBBUk06OlMwOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm11bHNfcihkZXN0LCBk
ZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgbXVsMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIEFSTTo6UzAp
OworICAgICAgICBtX2Fzc2VtYmxlci5tdWxzX3IoZGVzdCwgc3JjLCBBUk06OlMwKTsKKyAgICB9
CisKKyAgICB2b2lkIG5vdDMyKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm12bnNfcihkZXN0LCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG9yMzIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9y
cnNfcihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgb3IzMihJbW0zMiBpbW0s
IFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm9ycnNfcihkZXN0
LCBkZXN0LCBtX2Fzc2VtYmxlci5nZXRJbW0oaW1tLm1fdmFsdWUsIEFSTTo6UzApKTsKKyAgICB9
CisKKyAgICB2b2lkIHJzaGlmdDMyKFJlZ2lzdGVySUQgc2hpZnRfYW1vdW50LCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJs
ZXIuYXNyX3IoZGVzdCwgc2hpZnRfYW1vdW50KSk7CisgICAgfQorCisgICAgdm9pZCByc2hpZnQz
MihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdnNfcihkZXN0LCBtX2Fzc2VtYmxlci5hc3IoZGVzdCwgaW1tLm1fdmFsdWUgJiAweDFmKSk7
CisgICAgfQorCisgICAgdm9pZCBzdWIzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vic19yKGRlc3QsIGRlc3QsIHNyYyk7Cisg
ICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnN1YnNfcihkZXN0LCBkZXN0LCBtX2Fzc2VtYmxlci5nZXRJ
bW0oaW1tLm1fdmFsdWUsIEFSTTo6UzApKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMy
IGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFS
TTo6UzEpOworICAgICAgICBzdWIzMihpbW0sIEFSTTo6UzEpOworICAgICAgICBzdG9yZTMyKEFS
TTo6UzEsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoQWRkcmVzcyBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxvYWQzMihzcmMsIEFSTTo6UzEpOworICAg
ICAgICBzdWIzMihBUk06OlMxLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5l
b3JzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHhvcjMyKEltbTMyIGlt
bSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW9yc19yKGRl
c3QsIGRlc3QsIG1fYXNzZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAg
IH0KKworICAgIHZvaWQgbG9hZDMyKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5kYXRhVHJhbnNmZXIzMih0cnVlLCBk
ZXN0LCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIGxv
YWQzMihCYXNlSW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuYmFzZUluZGV4VHJhbnNmZXIzMih0cnVlLCBkZXN0LCBhZGRyZXNzLmJhc2Us
IGFkZHJlc3MuaW5kZXgsIHN0YXRpY19jYXN0PGludD4oYWRkcmVzcy5zY2FsZSksIGFkZHJlc3Mu
b2Zmc2V0KTsKKyAgICB9CisKKyAgICBEYXRhTGFiZWwzMiBsb2FkMzJXaXRoQWRkcmVzc09mZnNl
dFBhdGNoKEFkZHJlc3MgYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
RGF0YUxhYmVsMzIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHJfdW5f
aW1tKEFSTTo6UzAsIDApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdXIodHJ1ZSwgZGVzdCwg
YWRkcmVzcy5iYXNlLCBBUk06OlMwKTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9
CisKKyAgICBMYWJlbCBsb2FkUHRyV2l0aFBhdGNoVG9MRUEoQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBMYWJlbCBsYWJlbCh0aGlzKTsKKyAgICAgICAg
bG9hZDMyKGFkZHJlc3MsIGRlc3QpOworICAgICAgICByZXR1cm4gbGFiZWw7CisgICAgfQorCisg
ICAgdm9pZCBsb2FkMTYoQmFzZUluZGV4IGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKEFSTTo6UzAsIGFkZHJlc3MuYmFzZSwgbV9hc3Nl
bWJsZXIubHNsKGFkZHJlc3MuaW5kZXgsIGFkZHJlc3Muc2NhbGUpKTsKKyAgICAgICAgaWYgKGFk
ZHJlc3Mub2Zmc2V0Pj0wKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyaF91KGRlc3QsIEFS
TTo6UzAsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyQnl0ZShhZGRyZXNzLm9mZnNldCkpOworICAgICAg
ICBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoX2QoZGVzdCwgQVJNOjpTMCwgQVJN
QXNzZW1ibGVyOjpnZXRPcDJCeXRlKC1hZGRyZXNzLm9mZnNldCkpOworICAgIH0KKworICAgIERh
dGFMYWJlbDMyIHN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKFJlZ2lzdGVySUQgc3JjLCBB
ZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFiZWwodGhp
cyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpTMCwgMCk7CisgICAgICAg
IG1fYXNzZW1ibGVyLmR0cl91cihmYWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIEFSTTo6UzApOwor
ICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihSZWdp
c3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5kYXRhVHJhbnNmZXIzMihmYWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mu
b2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIEJhc2VJ
bmRleCBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYmFzZUluZGV4VHJhbnNm
ZXIzMihmYWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3MuaW5kZXgsIHN0YXRpY19jYXN0
PGludD4oYWRkcmVzcy5zY2FsZSksIGFkZHJlc3Mub2Zmc2V0KTsKKyAgICB9CisKKyAgICB2b2lk
IHN0b3JlMzIoSW1tMzIgaW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIG1vdmUoaW1tLCBBUk06OlMxKTsKKyAgICAgICAgc3RvcmUzMihBUk06OlMxLCBhZGRyZXNz
KTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoUmVnaXN0ZXJJRCBzcmMsIHZvaWQqIGFkZHJl
c3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8
QVJNV29yZD4oYWRkcmVzcyksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShm
YWxzZSwgc3JjLCBBUk06OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlMzIoSW1tMzIg
aW1tLCB2b2lkKiBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShy
ZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpLCBBUk06OlMwKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIubW92ZUltbShpbW0ubV92YWx1ZSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmR0cl91KGZhbHNlLCBBUk06OlMxLCBBUk06OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lk
IHBvcChSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5wb3Bfcihk
ZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goUmVnaXN0ZXJJRCBzcmMpCisgICAgeworICAg
ICAgICBtX2Fzc2VtYmxlci5wdXNoX3Ioc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHB1c2goQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOwor
ICAgICAgICBwdXNoKEFSTTo6UzEpOworICAgIH0KKworICAgIHZvaWQgcHVzaChJbW0zMiBpbW0p
CisgICAgeworICAgICAgICBtb3ZlKGltbSwgQVJNOjpTMCk7CisgICAgICAgIHB1c2goQVJNOjpT
MCk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShpbW0ubV92YWx1ZSwgZGVzdCk7Cisg
ICAgfQorCisgICAgdm9pZCBtb3ZlKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisg
ICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBzcmMpOworICAgIH0KKworICAg
IHZvaWQgbW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBtX2Fzc2VtYmxlci5nZXRJbW0ocmVpbnRlcnByZXRfY2Fz
dDxBUk1Xb3JkPihpbW0ubV92YWx1ZSksIEFSTTo6UzApKTsKKyAgICB9CisKKyAgICB2b2lkIHN3
YXAoUmVnaXN0ZXJJRCByZWcxLCBSZWdpc3RlcklEIHJlZzIpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZfcihBUk06OlMwLCByZWcxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3Io
cmVnMSwgcmVnMik7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKHJlZzIsIEFSTTo6UzApOwor
ICAgIH0KKworICAgIHZvaWQgc2lnbkV4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAg
IG1vdmUoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIHplcm9FeHRlbmQzMlRvUHRyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjICE9
IGRlc3QpCisgICAgICAgICAgICBtb3ZlKHNyYywgZGVzdCk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IobGVmdCwgcmlnaHQpOworICAgICAg
ICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAg
fQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBJ
bW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKGxlZnQsIG1fYXNz
ZW1ibGVyLmdldEltbShyaWdodC5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgICAgIHJldHVybiBK
dW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3Mgcmln
aHQpCisgICAgeworICAgICAgICBsb2FkMzIocmlnaHQsIEFSTTo6UzEpOworICAgICAgICByZXR1
cm4gYnJhbmNoMzIoY29uZCwgbGVmdCwgQVJNOjpTMSk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAg
IHsKKyAgICAgICAgbG9hZDMyKGxlZnQsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNo
MzIoY29uZCwgQVJNOjpTMSwgcmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29u
ZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBs
b2FkMzIobGVmdCwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk06
OlMxLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwg
QmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQs
IEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNOjpTMSwgcmlnaHQp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBs
ZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQp
OworICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdo
dCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganVtcCgp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMTYoQ29uZGl0aW9uIGNvbmQsIEJhc2VJbmRleCBs
ZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQxNihsZWZ0LCBBUk06OlMwKTsK
KyAgICAgICAgbW92ZShyaWdodCwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9y
KEFSTTo6UzAsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gbV9hc3NlbWJsZXIuam1wKEFSTUNv
bmRpdGlvbihjb25kKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBSZWdpc3RlcklEIG1hc2spCisgICAgeworICAgICAgICBB
U1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBtX2Fz
c2VtYmxlci50c3RfcihyZWcsIG1hc2spOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxl
ci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgcmVnLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEp
KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblpl
cm8pKTsKKyAgICAgICAgQVJNV29yZCB3ID0gbV9hc3NlbWJsZXIuZ2V0SW1tKG1hc2subV92YWx1
ZSwgQVJNOjpTMCwgdHJ1ZSk7CisgICAgICAgIGlmICh3ICYgQVJNQXNzZW1ibGVyOjpPUDJfSU5W
X0lNTSkKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmJpY3NfcihBUk06OlMwLCByZWcsIHcgJiB+
QVJNQXNzZW1ibGVyOjpPUDJfSU5WX0lNTSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1f
YXNzZW1ibGVyLnRzdF9yKHJlZywgdyk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3Qz
MihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEp
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICByZXR1
cm4gYnJhbmNoVGVzdDMyKGNvbmQsIEFSTTo6UzEsIG1hc2spOworICAgIH0KKworICAgIEp1bXAg
YnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggYWRkcmVzcywgSW1tMzIgbWFz
ayA9IEltbTMyKC0xKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihhZGRyZXNzLCBBUk06OlMxKTsK
KyAgICAgICAgcmV0dXJuIGJyYW5jaFRlc3QzMihjb25kLCBBUk06OlMxLCBtYXNrKTsKKyAgICB9
CisKKyAgICBKdW1wIGp1bXAoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuam1wKCkpOworICAgIH0KKworICAgIHZvaWQganVtcChSZWdpc3RlcklEIHRhcmdldCkKKyAg
ICB7CisgICAgICAgIG1vdmUodGFyZ2V0LCBBUk06OnBjKTsKKyAgICB9CisKKyAgICB2b2lkIGp1
bXAoQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6
cGMpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoQWRkMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lz
dGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQg
PT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNv
bmQgPT0gTm9uWmVybykpOworICAgICAgICBhZGQzMihzcmMsIGRlc3QpOworICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25k
ID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAg
ICAgICBhZGQzMihpbW0sIGRlc3QpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5q
bXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgdm9pZCBtdWxsMzIoUmVnaXN0
ZXJJRCBzcmMxLCBSZWdpc3RlcklEIHNyYzIsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIGlmIChzcmMxID09IGRlc3QpIHsKKyAgICAgICAgICAgIG1vdmUoc3JjMSwgQVJNOjpTMCk7
CisgICAgICAgICAgICBzcmMxID0gQVJNOjpTMDsKKyAgICAgICAgfQorICAgICAgICBtX2Fzc2Vt
Ymxlci5tdWxsX3IoQVJNOjpTMSwgZGVzdCwgc3JjMiwgc3JjMSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmNtcF9yKEFSTTo6UzEsIG1fYXNzZW1ibGVyLmFzcihkZXN0LCAzMSkpOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoTXVsMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgc3JjLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8
IChjb25kID09IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykp
OworICAgICAgICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbXVsbDMyKHNy
YywgZGVzdCwgZGVzdCk7CisgICAgICAgICAgICBjb25kID0gTm9uWmVybzsKKyAgICAgICAgfQor
ICAgICAgICBlbHNlCisgICAgICAgICAgICBtdWwzMihzcmMsIGRlc3QpOworICAgICAgICByZXR1
cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRpb24gY29uZCwgSW1tMzIgaW1tLCBSZWdpc3RlcklE
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92
ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKyAgICAgICAgaWYgKGNvbmQgPT0gT3ZlcmZsb3cpIHsKKyAgICAgICAgICAg
IG1vdmUoaW1tLCBBUk06OlMwKTsKKyAgICAgICAgICAgIG11bGwzMihBUk06OlMwLCBzcmMsIGRl
c3QpOworICAgICAgICAgICAgY29uZCA9IE5vblplcm87CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbXVsMzIoaW1tLCBzcmMsIGRlc3QpOworICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2hTdWIzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQg
PT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAg
ICAgIHN1YjMyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpt
cChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENv
bmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9
PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIHN1YjMyKGltbSwgZGVzdCk7
CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkp
KTsKKyAgICB9CisKKyAgICB2b2lkIGJyZWFrcG9pbnQoKQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYmtwdCgwKTsKKyAgICB9CisKKyAgICBDYWxsIG5lYXJDYWxsKCkKKyAgICB7CisgICAg
ICAgIHByZXBhcmVDYWxsKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcCgp
LCBDYWxsOjpMaW5rYWJsZU5lYXIpOworICAgIH0KKworICAgIENhbGwgY2FsbChSZWdpc3RlcklE
IHRhcmdldCkKKyAgICB7CisgICAgICAgIHByZXBhcmVDYWxsKCk7CisgICAgICAgIG1vdmUoQVJN
OjpwYywgdGFyZ2V0KTsKKyAgICAgICAgSm1wU3JjIGptcFNyYzsKKyAgICAgICAgcmV0dXJuIENh
bGwoam1wU3JjLCBDYWxsOjpOb25lKTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGwoQWRkcmVzcyBh
ZGRyZXNzKQorICAgIHsKKyAgICAgICAgY2FsbDMyKGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZz
ZXQpOworICAgIH0KKworICAgIHZvaWQgcmV0KCkKKyAgICB7CisgICAgICAgIG1vdmUoQVJNOjps
ciwgQVJNOjpwYyk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVn
aXN0ZXJJRCBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0LCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCByaWdodCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDApKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIoMSksIEFSTUNvbmRpdGlvbihj
b25kKSk7CisgICAgfQorCisgICAgdm9pZCBzZXQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCBsZWZ0LCBJbW0zMiByaWdodCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9h
c3NlbWJsZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0Lm1fdmFsdWUsIEFS
TTo6UzApKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVyOjpn
ZXRPcDIoMCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6
OmdldE9wMigxKSwgQVJNQ29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNldFRl
c3QzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBhZGRyZXNzLCBJbW0zMiBtYXNrLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAg
ICAgIGlmIChtYXNrLm1fdmFsdWUgPT0gLTEpCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBf
cigwLCBBUk06OlMxKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudHN0
X3IoQVJNOjpTMSwgbV9hc3NlbWJsZXIuZ2V0SW1tKG1hc2subV92YWx1ZSwgQVJNOjpTMCkpOwor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6OmdldE9wMigwKSk7
CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDEp
LCBBUk1Db25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkX3IoZGVzdCwgc3JjLCBtX2Fzc2VtYmxlci5nZXRJbW0oaW1tLm1fdmFsdWUsIEFS
TTo6UzApKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciksIEFSTTo6UzEpOworICAgICAgICBtX2Fz
c2VtYmxlci5kdHJfdSh0cnVlLCBBUk06OlMxLCBBUk06OlMxLCAwKTsKKyAgICAgICAgYWRkMzIo
aW1tLCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9j
YXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9wdHIpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZHRyX3UoZmFsc2UsIEFSTTo6UzEsIEFSTTo6UzAsIDApOworICAgIH0KKworICAgIHZvaWQg
c3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1f
cHRyKSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KHRydWUsIEFSTTo6UzEs
IEFSTTo6UzEsIDApOworICAgICAgICBzdWIzMihpbW0sIEFSTTo6UzEpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciks
IEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShmYWxzZSwgQVJNOjpTMSwgQVJN
OjpTMCwgMCk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJl
dF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
ZHRyX3UodHJ1ZSwgZGVzdCwgQVJNOjpTMCwgMCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gz
MihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdC5tX3B0ciwgQVJNOjpTMSk7CisgICAgICAgIHJl
dHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBi
cmFuY2gzMihDb25kaXRpb24gY29uZCwgQWJzb2x1dGVBZGRyZXNzIGxlZnQsIEltbTMyIHJpZ2h0
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQubV9wdHIsIEFSTTo6UzEpOworICAgICAgICBy
ZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNOjpTMSwgcmlnaHQpOworICAgIH0KKworICAgIENhbGwg
Y2FsbCgpCisgICAgeworICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAgICAgICByZXR1cm4gQ2Fs
bChtX2Fzc2VtYmxlci5qbXAoKSwgQ2FsbDo6TGlua2FibGUpOworICAgIH0KKworICAgIENhbGwg
dGFpbFJlY3Vyc2l2ZUNhbGwoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIENhbGw6OmZyb21UYWls
SnVtcChqdW1wKCkpOworICAgIH0KKworICAgIENhbGwgbWFrZVRhaWxSZWN1cnNpdmVDYWxsKEp1
bXAgb2xkSnVtcCkKKyAgICB7CisgICAgICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1bXAob2xk
SnVtcCk7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIG1vdmVXaXRoUGF0Y2goSW1tUHRyIGlu
aXRpYWxWYWx1ZSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgRGF0YUxhYmVsUHRy
IGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyX3VuX2ltbShkZXN0LCBy
ZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGluaXRpYWxWYWx1ZS5tX3ZhbHVlKSk7CisgICAgICAg
IHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2go
Q29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWws
IEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKKyAgICB7CisgICAgICAgIGRh
dGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIEFSTTo6UzEpOworICAg
ICAgICBKdW1wIGp1bXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBBUk06OlMxKTsKKyAgICAgICAg
anVtcC5lbmFibGVMYXRlUGF0Y2goKTsKKyAgICAgICAgcmV0dXJuIGp1bXA7CisgICAgfQorCisg
ICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3MgbGVmdCwg
RGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0
cigwKSkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06OlMxKTsKKyAgICAgICAgZGF0
YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgQVJNOjpTMCk7CisgICAg
ICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNvbmQsIEFSTTo6UzAsIEFSTTo6UzEpOworICAgICAg
ICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICByZXR1cm4ganVtcDsKKyAgICB9CisK
KyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyIGluaXRpYWxWYWx1ZSwg
SW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBEYXRhTGFiZWxQdHIgZGF0
YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsVmFsdWUsIEFSTTo6UzEpOworICAgICAgICBz
dG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAg
IH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldpdGhQYXRjaChJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIHJldHVybiBzdG9yZVB0cldpdGhQYXRjaChJbW1QdHIo
MCksIGFkZHJlc3MpOworICAgIH0KKworICAgIC8qIEZQICovCisgICAgdm9pZCBsb2FkRG91Ymxl
KEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwor
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91
YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsK
KyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBhZGREb3Vi
bGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBV
TlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBB
U1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNz
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3Jj
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAg
ICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
IH0KKworICAgIHZvaWQgc3ViRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0o
ZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQg
bXVsRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUo
QWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdp
c3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFS
QU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRp
b24gY29uZCwgRlBSZWdpc3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7Cisg
ICAgICAgIFVOVVNFRF9QQVJBTShjb25kKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0ocmlnaHQpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgcmV0dXJuIGp1bXAoKTsKKyAgICB9CisKKyAgICAvLyBUcnVuY2F0ZXMgJ3Ny
YycgdG8gYW4gaW50ZWdlciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KKyAgICAv
LyBJZiB0aGUgcmVzdWx0IGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgMzIgYml0IHZhbHVlLCBi
cmFuY2guCisgICAgLy8gTWF5IGFsc28gYnJhbmNoIGZvciBzb21lIHZhbHVlcyB0aGF0IGFyZSBy
ZXByZXNlbnRhYmxlIGluIDMyIGJpdHMKKyAgICAvLyAoc3BlY2lmaWNhbGx5LCBpbiB0aGlzIGNh
c2UsIElOVF9NSU4pLgorICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVn
aXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJB
TShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1Rf
UkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganVtcCgpOworICAgIH0KKworcHJvdGVjdGVkOgor
ICAgIEFSTUFzc2VtYmxlcjo6Q29uZGl0aW9uIEFSTUNvbmRpdGlvbihDb25kaXRpb24gY29uZCkK
KyAgICB7CisgICAgICAgIHJldHVybiBzdGF0aWNfY2FzdDxBUk1Bc3NlbWJsZXI6OkNvbmRpdGlv
bj4oY29uZCk7CisgICAgfQorCisgICAgdm9pZCBwcmVwYXJlQ2FsbCgpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5lbnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJN
V29yZCkpOworCisgICAgICAgIC8vIFMwIG1pZ2h0IGJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNz
aW5nCisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKEFSTTo6UzEsIEFSTTo6cGMsIEFSTUFzc2Vt
Ymxlcjo6T1AyX0lNTSB8IDB4NCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfcihBUk06OlMx
KTsKKyAgICB9CisKKyAgICB2b2lkIGNhbGwzMihSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zm
c2V0KQorICAgIHsKKyAgICAgICAgaWYgKGJhc2UgPT0gQVJNOjpzcCkKKyAgICAgICAgICAgIG9m
ZnNldCArPSA0OworCisgICAgICAgIGlmIChvZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgaWYg
KG9mZnNldCA8PSAweGZmZikgeworICAgICAgICAgICAgICAgIHByZXBhcmVDYWxsKCk7CisgICAg
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UodHJ1ZSwgQVJNOjpwYywgYmFzZSwgb2Zmc2V0
KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmYpIHsKKyAgICAgICAg
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRfcihBUk06OlMwLCBiYXNlLCBBUk1Bc3NlbWJsZXI6Ok9Q
Ml9JTU0gfCAob2Zmc2V0ID4+IDEyKSB8ICgxMCA8PCA4KSk7CisgICAgICAgICAgICAgICAgcHJl
cGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdSh0cnVlLCBBUk06
OnBjLCBBUk06OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgICAgICB9IGVsc2UgeworICAg
ICAgICAgICAgICAgIEFSTVdvcmQgcmVnID0gbV9hc3NlbWJsZXIuZ2V0SW1tKG9mZnNldCwgQVJN
OjpTMCk7CisgICAgICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBt
X2Fzc2VtYmxlci5kdHJfdXIodHJ1ZSwgQVJNOjpwYywgYmFzZSwgcmVnKTsKKyAgICAgICAgICAg
IH0KKyAgICAgICAgfSBlbHNlICB7CisgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAg
ICAgICAgICAgaWYgKG9mZnNldCA8PSAweGZmZikgeworICAgICAgICAgICAgICAgIHByZXBhcmVD
YWxsKCk7CisgICAgICAgICAgICAgICAgbV9hc3NlbWJsZXIuZHRyX2QodHJ1ZSwgQVJNOjpwYywg
YmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmYp
IHsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5zdWJfcihBUk06OlMwLCBiYXNlLCBBUk1B
c3NlbWJsZXI6Ok9QMl9JTU0gfCAob2Zmc2V0ID4+IDEyKSB8ICgxMCA8PCA4KSk7CisgICAgICAg
ICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJf
ZCh0cnVlLCBBUk06OnBjLCBBUk06OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgICAgICB9
IGVsc2UgeworICAgICAgICAgICAgICAgIEFSTVdvcmQgcmVnID0gbV9hc3NlbWJsZXIuZ2V0SW1t
KG9mZnNldCwgQVJNOjpTMCk7CisgICAgICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJfZHIodHJ1ZSwgQVJNOjpwYywgYmFzZSwgcmVnKTsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworfTsKKworfQorCisjZW5kaWYKKwor
I2VuZGlmIC8vIE1hY3JvQXNzZW1ibGVyQVJNX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJs
ZUFsbG9jYXRvci5oCmluZGV4IDBkZTRmNzkuLmZiYmUwYTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0
L0V4ZWN1dGFibGVBbGxvY2F0b3IuaApAQCAtMjEzLDYgKzIxMywyMSBAQCBwcml2YXRlOgogI2Vs
aWYgUExBVEZPUk1fQVJNX0FSQ0goNykgJiYgUExBVEZPUk0oSVBIT05FKQogICAgICAgICBzeXNf
ZGNhY2hlX2ZsdXNoKGNvZGUsIHNpemUpOwogICAgICAgICBzeXNfaWNhY2hlX2ludmFsaWRhdGUo
Y29kZSwgc2l6ZSk7CisjZWxpZiBQTEFURk9STShBUk0pCisgICAgI2lmIENPTVBJTEVSKEdDQykg
JiYgKEdDQ19WRVJTSU9OID49IDMwNDA2KQorICAgICAgICBfX2NsZWFyX2NhY2hlKHJlaW50ZXJw
cmV0X2Nhc3Q8Y2hhcio+KGNvZGUpLCByZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSArIHNp
emUpOworICAgICNlbHNlCisgICAgICAgIGNvbnN0IGludCBzeXNjYWxsID0gMHhmMDAwMjsKKyAg
ICAgICAgX19hc20gX192b2xhdGlsZSAoCisgICAgICAgICAgICAgICAibW92ICAgICByMCwgJTBc
biIKKyAgICAgICAgICAgICAgICJtb3YgICAgIHIxLCAlMVxuIgorICAgICAgICAgICAgICAgIm1v
diAgICAgcjcsICUyXG4iCisgICAgICAgICAgICAgICAibW92ICAgICByMiwgIzB4MFxuIgorICAg
ICAgICAgICAgICAgInN3aSAgICAgMHgwMDAwMDAwMFxuIgorICAgICAgICAgICA6CisgICAgICAg
ICAgIDogICAiciIgKGNvZGUpLCAiciIgKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsg
c2l6ZSksICJyIiAoc3lzY2FsbCkKKyAgICAgICAgICAgOiAgICJyMCIsICJyMSIsICJyNyIpOwor
ICAgICNlbmRpZiAvLyBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVSU0lPTiA+PSAzMDQwNikKICNl
bHNlCiAjZXJyb3IgIkV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hlRmx1c2ggbm90IGltcGxlbWVu
dGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS93dGYvUGxhdGZvcm0uaCBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCmluZGV4IDE5
N2NhZTAuLjViZmFjZGMgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oCkBAIC0zMTAsNiArMzEwLDcgQEAK
IC8qIC0tZ251IG9wdGlvbiBvZiB0aGUgUlZDVCBjb21waWxlciBhbHNvIGRlZmluZXMgX19HTlVD
X18gKi8KICNpZiBkZWZpbmVkKF9fR05VQ19fKSAmJiAhQ09NUElMRVIoUlZDVCkKICNkZWZpbmUg
V1RGX0NPTVBJTEVSX0dDQyAxCisjZGVmaW5lIEdDQ19WRVJTSU9OIChfX0dOVUNfXyAqIDEwMDAw
ICsgX19HTlVDX01JTk9SX18gKiAxMDAgKyBfX0dOVUNfUEFUQ0hMRVZFTF9fKQogI2VuZGlmCiAK
IC8qIENPTVBJTEVSKE1JTkdXKSAqLwpAQCAtNTQyLDYgKzU0MywxMCBAQAogICAgIC8qIFVuZGVy
IGRldmVsb3BtZW50LCB0ZW1wb3JhcmlseSBkaXNhYmxlZCB1bnRpbCAxNk1iIGxpbmsgcmFuZ2Ug
bGltaXQgaW4gYXNzZW1ibGVyIGlzIGZpeGVkLiAqLwogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAw
CiAgICAgI2RlZmluZSBFTkFCTEVfSklUX09QVElNSVpFX05BVElWRV9DQUxMIDAKKyNlbGlmIFBM
QVRGT1JNKEFSTSkKKyAgICAvKiBVbmRlciBkZXZlbG9wbWVudCwgdGVtcG9yYXJpbHkgZGlzYWJs
ZWQuICovCisgICAgI2RlZmluZSBFTkFCTEVfSklUIDAKKyAgICAjZGVmaW5lIEVOQUJMRV9KSVRf
T1BUSU1JWkVfTkFUSVZFX0NBTEwgMAogLyogVGhlIEpJVCBpcyB0ZXN0ZWQgJiB3b3JraW5nIG9u
IHg4NiBXaW5kb3dzICovCiAjZWxpZiBQTEFURk9STShYODYpICYmIFBMQVRGT1JNKFdJTikKICAg
ICAjZGVmaW5lIEVOQUJMRV9KSVQgMQpAQCAtNTg4LDYgKzU5Myw3IEBACiAgfHwgKCFkZWZpbmVk
KEVOQUJMRV9ZQVJSX0pJVCkgJiYgUExBVEZPUk0oWDg2XzY0KSAmJiBQTEFURk9STShNQUMpKSBc
CiAgLyogVW5kZXIgZGV2ZWxvcG1lbnQsIHRlbXBvcmFyaWx5IGRpc2FibGVkIHVudGlsIDE2TWIg
bGluayByYW5nZSBsaW1pdCBpbiBhc3NlbWJsZXIgaXMgZml4ZWQuICovIFwKICB8fCAoIWRlZmlu
ZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9STV9BUk1fQVJDSCg3KSAmJiBQTEFURk9STShJ
UEhPTkUpICYmIDApIFwKKyB8fCAoIWRlZmluZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9S
TShBUk0pICYmIDApIFwKICB8fCAoIWRlZmluZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9S
TShYODYpICYmIFBMQVRGT1JNKFdJTikpCiAjZGVmaW5lIEVOQUJMRV9ZQVJSIDEKICNkZWZpbmUg
RU5BQkxFX1lBUlJfSklUIDEKQEAgLTYwMiw3ICs2MDgsNyBAQAogI2VuZGlmCiAvKiBTZXR0aW5n
IHRoaXMgZmxhZyBwcmV2ZW50cyB0aGUgYXNzZW1ibGVyIGZyb20gdXNpbmcgUldYIG1lbW9yeTsg
dGhpcyBtYXkgaW1wcm92ZQogICAgc2VjdXJpdHkgYnV0IGN1cnJlY3RseSBjb21lcyBhdCBhIHNp
Z25pZmljYW50IHBlcmZvcm1hbmNlIGNvc3QuICovCi0jaWYgUExBVEZPUk1fQVJNX0FSQ0goNykg
JiYgUExBVEZPUk0oSVBIT05FKQorI2lmIFBMQVRGT1JNKEFSTSkKICNkZWZpbmUgRU5BQkxFX0FT
U0VNQkxFUl9XWF9FWENMVVNJVkUgMQogI2Vsc2UKICNkZWZpbmUgRU5BQkxFX0FTU0VNQkxFUl9X
WF9FWENMVVNJVkUgMApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5j
cHAgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAppbmRleCAyOWE5ZDE4Li4zYTQ1
MzhmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcApAQCAtNDMsMTggKzQzLDE3IEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiBjbGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZh
dGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIGZyaWVuZCB2b2lkIGppdENvbXBpbGVSZWdleChKU0ds
b2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZ2V4Q29kZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVT
dHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1TdWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVy
cm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVsdGlsaW5lKTsKIAotI2lmIFBMQVRGT1JNX0FS
TV9BUkNIKDcpCisjaWYgUExBVEZPUk0oQVJNKQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklE
IGlucHV0ID0gQVJNOjpyMDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IEFS
TTo6cjE7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gQVJNOjpyMjsKLQog
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91dHB1dCA9IEFSTTo6cjQ7CisKICAgICBzdGF0
aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTTo6cjU7CiAgICAgc3RhdGljIGNvbnN0IFJl
Z2lzdGVySUQgcmVnVDEgPSBBUk06OnI2OwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmV0dXJuUmVnaXN0ZXIgPSBBUk06OnIwOwotI2VuZGlmCi0jaWYgUExBVEZPUk0oWDg2KQorI2Vs
aWYgUExBVEZPUk0oWDg2KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2
OjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODY6OmVkeDsKICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODY6OmVjeDsKQEAgLTY0LDggKzYz
LDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAg
ICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IFg4Njo6ZXNpOwogCiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBYODY6OmVheDsKLSNlbmRpZgotI2lm
IFBMQVRGT1JNKFg4Nl82NCkKKyNlbGlmIFBMQVRGT1JNKFg4Nl82NCkKICAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4Njo6ZWRpOwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIGluZGV4ID0gWDg2Ojplc2k7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3Ro
ID0gWDg2OjplZHg7CkBAIC0xMzA4LDcgKzEzMDYsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgICNlbHNlCiAgICAgICAgIGxvYWRQdHIoQWRk
cmVzcyhYODY6OmVicCwgMiAqIHNpemVvZih2b2lkKikpLCBvdXRwdXQpOwogICAgICNlbmRpZgot
I2VsaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKKyNlbGlmIFBMQVRGT1JNKEFSTSkKICAgICAgICAg
cHVzaChBUk06OnI0KTsKICAgICAgICAgcHVzaChBUk06OnI1KTsKICAgICAgICAgcHVzaChBUk06
OnI2KTsKQEAgLTEzMjUsNyArMTMyMyw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0
ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAgIHBvcChYODY6OmVkaSk7CiAgICAgICAgIHBvcChY
ODY6OmVieCk7CiAgICAgICAgIHBvcChYODY6OmVicCk7Ci0jZWxpZiBQTEFURk9STV9BUk1fQVJD
SCg3KQorI2VsaWYgUExBVEZPUk0oQVJNKQogICAgICAgICBwb3AoQVJNOjpyNik7CiAgICAgICAg
IHBvcChBUk06OnI1KTsKICAgICAgICAgcG9wKEFSTTo6cjQpOwotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32046</attachid>
            <date>2009-06-30 03:22:28 -0700</date>
            <delta_ts>2009-07-02 03:04:48 -0700</delta_ts>
            <desc>Constant pool for AssemblerBuffer (v2)</desc>
            <filename>0002-Extend-AssemblerBuffer-with-constant-pool-handling-m.patch</filename>
            <type>text/plain</type>
            <size>12940</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAwMmYyOWQ4ZTlhODVhNDljNDU3MTY4M2ZiYjI2ZjAxNmEyMjlmZjE0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAyOSBKdW4gMjAwOSAxNDoyNDoyOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEV4dGVu
ZCBBc3NlbWJsZXJCdWZmZXIgd2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbQoK
U2lnbmVkLW9mZi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAxNiArKwog
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oICAgICAgIHwgICAxNyAr
LQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDUC5oIHwgIDMw
NiArKysrKysrKysrKysrKysrKysrKysrCiAzIGZpbGVzIGNoYW5nZWQsIDMzNiBpbnNlcnRpb25z
KCspLCAzIGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AuaAoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBiMTJlODM0Li4x
MDdkNDc4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCkBAIC00LDYgKzQsMjIgQEAKIAogICAgICAgICA8aHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2PgogCisgICAgICAgIEV4dGVuZCBB
c3NlbWJsZXJCdWZmZXIgd2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbS4KKwor
ICAgICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKKyAgICAgICAgKEpTQzo6QXNz
ZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJC
dWZmZXI6OnB1dEludDY0VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVy
OjphcHBlbmQpOgorICAgICAgICAoSlNDOjpBc3NlbWJsZXJCdWZmZXI6Omdyb3cpOgorICAgICAg
ICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ1AuaDogQWRkZWQuCisgICAgICAgIChK
U0M6Oik6CisKKzIwMDktMDYtMjkgIEdhYm9yIExva2kgIDxsb2tpQGluZi51LXN6ZWdlZC5odT4K
KworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6
Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2PgorCiAgICAgICAgIFJlbW92
ZSB1bm5lY2Vzc2FyeSByZWZlcmVuY2VzIHRvIEFzc2VtYmxlckJ1ZmZlci4KIAogICAgICAgICAq
IGludGVycHJldGVyL0ludGVycHJldGVyLmNwcDoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
c3NlbWJsZXJCdWZmZXIuaAppbmRleCA3YTVhOGQzLi4wNzM5MDZhIDEwMDY0NAotLS0gYS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCkBAIC05NSwxMiArOTUsMTQgQEAgbmFtZXNw
YWNlIEpTQyB7CiAKICAgICAgICAgdm9pZCBwdXRJbnRVbmNoZWNrZWQoaW50IHZhbHVlKQogICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIShtX3NpemUgPiBtX2NhcGFjaXR5IC0gNCkpOwog
ICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50Kj4oJm1fYnVmZmVyW21fc2l6ZV0pID0g
dmFsdWU7CiAgICAgICAgICAgICBtX3NpemUgKz0gNDsKICAgICAgICAgfQogCiAgICAgICAgIHZv
aWQgcHV0SW50NjRVbmNoZWNrZWQoaW50NjRfdCB2YWx1ZSkKICAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKCEobV9zaXplID4gbV9jYXBhY2l0eSAtIDgpKTsKICAgICAgICAgICAgICpyZWlu
dGVycHJldF9jYXN0PGludDY0X3QqPigmbV9idWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKICAgICAg
ICAgICAgIG1fc2l6ZSArPSA4OwogICAgICAgICB9CkBAIC0xMzcsMTAgKzEzOSwxOSBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgICAgIHJldHVybiBtZW1jcHkocmVzdWx0LCBtX2J1ZmZlciwg
bV9zaXplKTsKICAgICAgICAgfQogCi0gICAgcHJpdmF0ZToKLSAgICAgICAgdm9pZCBncm93KCkK
KyAgICBwcm90ZWN0ZWQ6CisgICAgICAgIHZvaWQgYXBwZW5kKGNvbnN0IGNoYXIqIGRhdGEsIGlu
dCBzaXplKQorICAgICAgICB7CisgICAgICAgICAgICBpZiAobV9zaXplID4gbV9jYXBhY2l0eSAt
IHNpemUpCisgICAgICAgICAgICAgICAgZ3JvdyhzaXplKTsKKworICAgICAgICAgICAgbWVtY3B5
KG1fYnVmZmVyICsgbV9zaXplLCBkYXRhLCBzaXplKTsKKyAgICAgICAgICAgIG1fc2l6ZSArPSBz
aXplOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBncm93KGludCBleHRyYUNhcGFjaXR5ID0g
MCkKICAgICAgICAgewotICAgICAgICAgICAgbV9jYXBhY2l0eSArPSBtX2NhcGFjaXR5IC8gMjsK
KyAgICAgICAgICAgIG1fY2FwYWNpdHkgKz0gbV9jYXBhY2l0eSAvIDIgKyBleHRyYUNhcGFjaXR5
OwogCiAgICAgICAgICAgICBpZiAobV9idWZmZXIgPT0gbV9pbmxpbmVCdWZmZXIpIHsKICAgICAg
ICAgICAgICAgICBjaGFyKiBuZXdCdWZmZXIgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxv
YyhtX2NhcGFjaXR5KSk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNz
ZW1ibGVyQnVmZmVyV2l0aENQLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVy
QnVmZmVyV2l0aENQLmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uM2Q5YzBk
OQotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJC
dWZmZXJXaXRoQ1AuaApAQCAtMCwwICsxLDMwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAw
OSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VE
IGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5D
TFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9G
IE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NF
IEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQg
T1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJ
TkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFH
RVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VC
U1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9G
SVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkg
VEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFC
SUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFS
SVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZF
TiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisj
aWZuZGVmIEFzc2VtYmxlckJ1ZmZlcldpdGhDUF9oCisjZGVmaW5lIEFzc2VtYmxlckJ1ZmZlcldp
dGhDUF9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVOQUJMRShBU1NFTUJM
RVIpCisKKyNpbmNsdWRlICJBc3NlbWJsZXJCdWZmZXIuaCIKKyNpbmNsdWRlIDx3dGYvU2VnbWVu
dGVkVmVjdG9yLmg+CisKK25hbWVzcGFjZSBKU0MgeworCisvKgorICAgIE9uIGEgY29uc3RhbnQg
cG9vbCA0IG9yIDggYnl0ZXMgZGF0YSBjYW4gYmUgc3RvcmVkLiBUaGUgdmFsdWVzIGNhbiBiZQor
ICAgIGNvbnN0YW50cyBvciBhZGRyZXNzZXMuIFRoZSBhZGRyZXNzZXMgc2hvdWxkIGJlIDMyIG9y
IDY0IGJpdHMuIFRoZSBjb25zdGFudHMKKyAgICBzaG91bGQgYmUgZG91YmxlLXByZWNpc2lvbnMg
ZmxvYXQgb3IgaW50ZWdlciBudW1iZXJzIHdoaWNoIGFyZSBjYW5ub3QgYmUKKyAgICBwcm9kdWNl
ZCBieSBzZXZlcmFsIG1hY2hpbmUgaW5zdHJ1Y3Rpb25zLgorCisgICAgVGhlIEFzc2VtYmxlckJ1
ZmZlciBjYW4gY29udGFpbnMgbW9yZSBjb25zdGFudCBwb29sLiBFYWNoIHBvb2wgaXMgaW5zZXJ0
ZWQKKyAgICBpbnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gLSBwcm90ZWN0ZWQgYnkgYSBqdW1w
IGluc3RydWN0aW9uIGZyb20gdGhlCisgICAgZXhlY3V0aW9uLgorCisgICAgVGhlIGZsdXNoIG1l
Y2hhbmlzbSBpcyBjYWxsZWQgd2hlbiBubyBzcGFjZSB0byBpbnNlcnQgdGhlIG5leHQgaW5zdHJ1
Y3Rpb24KKyAgICB0byB0aGUgcG9vbC4gVGhyZWUgdmFsdWVzIGlzIHVzZWQgdG8gZGV0ZXJtaW5l
IHdoZW4gdGhlIGNvbnN0YW50IHBvb2wgaXRzZWxmCisgICAgaGF2ZSB0byBiZSBpbnNlcnRlZCBp
bnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gKEFzc2VtYmxlciBCdWZmZXIpOgorCisgICAgLSBt
YXhQb29sU2l6ZTogc2l6ZSBvZiB0aGUgY29uc3RhbnQgcG9vbCBpbiBieXRlcywgdGhpcyB2YWx1
ZSBjYW5ub3QgYmUKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gb2Zmc2V0IG9mIGEg
UEMgcmVsYXRpdmUgbWVtb3J5IGxvYWQKKworICAgIC0gYmFycmllclNpemU6IHNpemUgb2YganVt
cCBpbnN0cnVjdGlvbiBpbiBieXRlcyB3aGljaCBwcm90ZWN0cyB0aGUKKyAgICAgICAgY29uc3Rh
bnQgcG9vbCBmcm9tIGV4ZWN1dGlvbgorCisgICAgLSBtYXhJbnN0cnVjdGlvblNpemU6IG1heGlt
dW0gbGVuZ3RoIG9mIGEgbWFjaGluZSBpbnN0cnVjdGlvbgorCisgICAgVGhlcmUgYXJlIHNvbWUg
Y2FsbGJhY2tzIHdoaWNoIHNob3VsZCBzb2x2ZSB0aGUgdGFyZ2V0IGFyY2hpdGVjdHVyZSBzcGVj
aWZpYworICAgIGFkZHJlc3MgaGFuZGxpbmc6CisKKyAgICAtIFRZUEUgcGF0Y2hDb25zdFBvb2xM
b2FkKFRZUEUgbG9hZCwgaW50IHZhbHVlKToKKyAgICAgICAgcGF0Y2ggdGhlICdsb2FkJyBpbnN0
cnVjdGlvbiB3aXRoIHRoZSBpbmRleCBvZiB0aGUgY29uc3RhbnQgaW4gdGhlCisgICAgICAgIGNv
bnN0YW50IHBvb2wgYW5kIHJldHVybiB0aGUgcGF0Y2hlZCBpbnN0cnVjdGlvbi4KKworICAgIC0g
dm9pZCBwYXRjaENvbnN0UG9vbExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFk
ZHIpOgorICAgICAgICBwYXRjaCB0aGUgYSBQQyByZWxhdGl2ZSBsb2FkIGluc3RydWN0aW9uIGF0
ICdsb2FkQWRkcicgd2l0aCB0aGUKKyAgICAgICAgZmluYWwgcmVsYXRpdmUgb2Zmc2V0LiBUaGUg
b2Zmc2V0IGNhbiBiZSBjb21wdXRlZCB3aXRoICdjb25zdFBvb2xBZGRyJworICAgICAgICAtIHRo
ZSBhZGRyZXNzIG9mIHRoZSBjb25zdGFudCBwb29sIC0gYW5kIGluZGV4IG9mIHRoZSBjb25zdGFu
dCB3aGljaAorICAgICAgICBpcyBzdG9yZWQgcHJldmlvdXNseSBpbiB0aGUgbG9hZCBpbnN0cnVj
dGlvbiBpdHNlbGYuCisKKyAgICAtIFRZUEUgcGxhY2VDb25zdFBvb2xCYXJyaWVyKGludCBzaXpl
KToKKyAgICAgICAgcmV0dXJuIHdpdGggYSBjb25zdGFudCBwb29sIGJhcnJpZXIgaW5zdHJ1Y3Rp
b24gd2hpY2gganVtcHMgb3ZlciB0aGUKKyAgICAgICAgY29uc3RhbnQgcG9vbC4KKworICAgIFRo
ZSAncHV0KldpdGhDb25zdConIGZ1bmN0aW9ucyBzaG91bGQgYmUgdXNlZCB0byBwbGFjZSBhIGRh
dGEgdG8gdGhlCisgICAgY29uc3RhbnQgcG9vbC4KKyovCisKK3RlbXBsYXRlIDxpbnQgbWF4UG9v
bFNpemUsIGludCBiYXJyaWVyU2l6ZSwgaW50IG1heEluc3RydWN0aW9uU2l6ZSwgY2xhc3MgQXNz
ZW1ibGVyVHlwZT4KK2NsYXNzIEFzc2VtYmxlckJ1ZmZlcldpdGhDUDogcHVibGljIEFzc2VtYmxl
ckJ1ZmZlciB7CisgICAgdHlwZWRlZiBXVEY6OlNlZ21lbnRlZFZlY3Rvcjx1aW50MzJfdCwgNTEy
PiBMb2FkT2Zmc2V0czsKK3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgVW5pcXVlQ29uc3Qs
CisgICAgICAgIFJldXNhYmxlQ29uc3QsCisgICAgICAgIFVudXNlZEVudHJ5LAorICAgIH07CisK
KyAgICBBc3NlbWJsZXJCdWZmZXJXaXRoQ1AoKQorICAgICAgICA6IEFzc2VtYmxlckJ1ZmZlcigp
CisgICAgICAgICwgbV9udW1Db25zdHMoMCkKKyAgICAgICAgLCBtX21heERpc3RhbmNlKG1heFBv
b2xTaXplKQorICAgICAgICAsIG1fbGFzdENvbnN0RGVsdGEoMCkKKyAgICB7CisgICAgICAgIG1f
cG9vbCA9IHN0YXRpY19jYXN0PHVpbnQzMl90Kj4oZmFzdE1hbGxvYyhtYXhQb29sU2l6ZSkpOwor
ICAgICAgICBtX21hc2sgPSBzdGF0aWNfY2FzdDxjaGFyKj4oZmFzdE1hbGxvYyhtYXhQb29sU2l6
ZSAvIHNpemVvZih1aW50MzJfdCkpKTsKKyAgICB9CisKKyAgICB+QXNzZW1ibGVyQnVmZmVyV2l0
aENQKCkKKyAgICB7CisgICAgICAgIGZhc3RGcmVlKG1fbWFzayk7CisgICAgICAgIGZhc3RGcmVl
KG1fcG9vbCk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgc3BhY2UpCisgICAg
eworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcihzcGFjZSk7CisgICAgICAgIEFzc2VtYmxlckJ1
ZmZlcjo6ZW5zdXJlU3BhY2Uoc3BhY2UpOworICAgIH0KKworICAgIHZvaWQgZW5zdXJlU3BhY2Uo
aW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisgICAgeworICAgICAgICBBU1NFUlQoY29u
c3RTcGFjZSA9PSBzaXplb2YodWludDMyX3QpIHx8IGNvbnN0U3BhY2UgPT0gc2l6ZW9mKHVpbnQ2
NF90KSk7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9yKGluc25TcGFjZSwgY29uc3RTcGFjZSk7
CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6ZW5zdXJlU3BhY2UoaW5zblNwYWNlKTsKKyAgICB9
CisKKyAgICBib29sIGlzQWxpZ25lZChpbnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgZmx1
c2hJZk5vU3BhY2VGb3IoYWxpZ25tZW50KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZl
cjo6aXNBbGlnbmVkKGFsaWdubWVudCk7CisgICAgfQorCisgICAgdm9pZCBwdXRCeXRlVW5jaGVj
a2VkKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0Qnl0ZVVu
Y2hlY2tlZCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoMSk7CisgICAgfQorCisgICAg
dm9pZCBwdXRCeXRlKGludCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9y
KDEpOworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dEJ5dGUodmFsdWUpOworICAgICAgICBj
b3JyZWN0RGVsdGFzKDEpOworICAgIH0KKworICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50
IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRTaG9ydFVuY2hlY2tl
ZCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoMik7CisgICAgfQorCisgICAgdm9pZCBw
dXRTaG9ydChpbnQgdmFsdWUpCisgICAgeworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcigyKTsK
KyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRTaG9ydCh2YWx1ZSk7CisgICAgICAgIGNvcnJl
Y3REZWx0YXMoMik7CisgICAgfQorCisgICAgdm9pZCBwdXRJbnRVbmNoZWNrZWQoaW50IHZhbHVl
KQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQodmFsdWUp
OworICAgICAgICBjb3JyZWN0RGVsdGFzKDQpOworICAgIH0KKworICAgIHZvaWQgcHV0SW50KGlu
dCB2YWx1ZSkKKyAgICB7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9yKDQpOworICAgICAgICBB
c3NlbWJsZXJCdWZmZXI6OnB1dEludCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoNCk7
CisgICAgfQorCisgICAgdm9pZCBwdXRJbnQ2NFVuY2hlY2tlZChpbnQ2NF90IHZhbHVlKQorICAg
IHsKKyAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnQ2NFVuY2hlY2tlZCh2YWx1ZSk7Cisg
ICAgICAgIGNvcnJlY3REZWx0YXMoOCk7CisgICAgfQorCisgICAgaW50IHNpemUoKQorICAgIHsK
KyAgICAgICAgZmx1c2hJZk5vU3BhY2VGb3IobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWlu
dDY0X3QpKTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpOworICAgIH0K
KworICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisg
ICAgeworICAgICAgICBmbHVzaENvbnN0YW50UG9vbChmYWxzZSk7CisgICAgICAgIHJldHVybiBB
c3NlbWJsZXJCdWZmZXI6OmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgfQorCisgICAg
dm9pZCBwdXRJbnRXaXRoQ29uc3RJbnQodWludDMyX3QgaW5zbiwgdWludDMyX3QgY29uc3RhbnQs
IGJvb2wgaXNSZXVzYWJsZSA9IGZhbHNlKQorICAgIHsKKyAgICAgICAgZmx1c2hJZk5vU3BhY2VG
b3IoNCwgNCk7CisKKyAgICAgICAgbV9sb2FkT2Zmc2V0cy5hcHBlbmQoQXNzZW1ibGVyQnVmZmVy
OjpzaXplKCkpOworICAgICAgICBpZiAoaXNSZXVzYWJsZSkKKyAgICAgICAgICAgIGZvciAoaW50
IGkgPSAwOyBpIDwgbV9udW1Db25zdHM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChtX21h
c2tbaV0gPT0gUmV1c2FibGVDb25zdCAmJiBtX3Bvb2xbaV0gPT0gY29uc3RhbnQpIHsKKyAgICAg
ICAgICAgICAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRJbnQoQXNzZW1ibGVyVHlwZTo6cGF0
Y2hDb25zdFBvb2xMb2FkKGluc24sIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdERl
bHRhcyg0KTsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0K
KyAgICAgICAgICAgIH0KKworICAgICAgICBtX3Bvb2xbbV9udW1Db25zdHNdID0gY29uc3RhbnQ7
CisgICAgICAgIG1fbWFza1ttX251bUNvbnN0c10gPSBzdGF0aWNfY2FzdDxjaGFyPihpc1JldXNh
YmxlID8gUmV1c2FibGVDb25zdCA6IFVuaXF1ZUNvbnN0KTsKKworICAgICAgICBBc3NlbWJsZXJC
dWZmZXI6OnB1dEludChBc3NlbWJsZXJUeXBlOjpwYXRjaENvbnN0UG9vbExvYWQoaW5zbiwgbV9u
dW1Db25zdHMpKTsKKyAgICAgICAgKyttX251bUNvbnN0czsKKworICAgICAgICBjb3JyZWN0RGVs
dGFzKDQsIDQpOworICAgIH0KKworICAgIHZvaWQgbHRvcmcoKQorICAgIHsKKyAgICAgICAgLy8g
Rmx1c2ggaWYgY29uc3RhbnQgcG9vbCBpcyBtb3JlIHRoYW4gNjAlIGZ1bGwKKyAgICAgICAgaWYg
KDEwICogbV9udW1Db25zdHMgPiA2ICogbWF4UG9vbFNpemUgLyBzaXplb2YodWludDMyX3QpKQor
ICAgICAgICAgICAgZmx1c2hDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCog
cG9vbEFkZHIoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fcG9vbDsKKyAgICB9CisKK3ByaXZh
dGU6CisgICAgdm9pZCBjb3JyZWN0RGVsdGFzKGludCBpbnNuU2l6ZSkKKyAgICB7CisgICAgICAg
IG1fbWF4RGlzdGFuY2UgLT0gaW5zblNpemU7CisgICAgICAgIG1fbGFzdENvbnN0RGVsdGEgLT0g
aW5zblNpemU7CisgICAgICAgIGlmIChtX2xhc3RDb25zdERlbHRhIDwgMCkKKyAgICAgICAgICAg
IG1fbGFzdENvbnN0RGVsdGEgPSAwOworICAgIH0KKworICAgIHZvaWQgY29ycmVjdERlbHRhcyhp
bnQgaW5zblNpemUsIGludCBjb25zdFNpemUpCisgICAgeworICAgICAgICBjb3JyZWN0RGVsdGFz
KGluc25TaXplKTsKKworICAgICAgICBtX21heERpc3RhbmNlIC09IG1fbGFzdENvbnN0RGVsdGE7
CisgICAgICAgIG1fbGFzdENvbnN0RGVsdGEgPSBjb25zdFNpemU7CisgICAgfQorCisgICAgdm9p
ZCBmbHVzaENvbnN0YW50UG9vbChib29sIHVzZUJhcnJpZXIgPSB0cnVlKQorICAgIHsKKyAgICAg
ICAgaWYgKG1fbnVtQ29uc3RzID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIGlu
dCBhbGlnblBvb2wgPSAoQXNzZW1ibGVyQnVmZmVyOjpzaXplKCkgKyAodXNlQmFycmllciA/IGJh
cnJpZXJTaXplIDogMCkpICYgKHNpemVvZih1aW50NjRfdCkgLSAxKTsKKworICAgICAgICBpZiAo
YWxpZ25Qb29sKQorICAgICAgICAgICAgYWxpZ25Qb29sID0gc2l6ZW9mKHVpbnQ2NF90KSAtIGFs
aWduUG9vbDsKKworICAgICAgICAvLyBDYWxsYmFjayB0byBwcm90ZWN0IHRoZSBjb25zdGFudCBw
b29sIGZyb20gZXhlY3V0aW9uCisgICAgICAgIGlmICh1c2VCYXJyaWVyKQorICAgICAgICAgICAg
QXNzZW1ibGVyQnVmZmVyOjpwdXRJbnQoQXNzZW1ibGVyVHlwZTo6cGxhY2VDb25zdFBvb2xCYXJy
aWVyKG1fbnVtQ29uc3RzICogc2l6ZW9mKHVpbnQzMl90KSArIGFsaWduUG9vbCkpOworCisgICAg
ICAgIGlmIChhbGlnblBvb2wpIHsKKyAgICAgICAgICAgIGlmIChhbGlnblBvb2wgPj0gNCkgewor
ICAgICAgICAgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50KDB4MGJhZGYwMGQpOworICAg
ICAgICAgICAgICAgIGFsaWduUG9vbCAtPSA0OworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKGFsaWduUG9vbCA+PSAyKSB7CisgICAgICAgICAgICAgICAgQXNzZW1ibGVyQnVmZmVyOjpw
dXRTaG9ydCgweDBiYWQpOworICAgICAgICAgICAgICAgIGFsaWduUG9vbCAtPSAyOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgaWYgKGFsaWduUG9vbCkKKyAgICAgICAgICAgICAgICBBc3Nl
bWJsZXJCdWZmZXI6OnB1dEJ5dGUoMHgwMCk7CisgICAgICAgIH0KKworICAgICAgICBpbnQgY29u
c3RQb29sT2Zmc2V0ID0gQXNzZW1ibGVyQnVmZmVyOjpzaXplKCk7CisgICAgICAgIGFwcGVuZChy
ZWludGVycHJldF9jYXN0PGNoYXIqPihtX3Bvb2wpLCBtX251bUNvbnN0cyAqIHNpemVvZih1aW50
MzJfdCkpOworCisgICAgICAgIC8vIFBhdGNoIGVhY2ggUEMgcmVsYXRpdmUgbG9hZAorICAgICAg
ICBmb3IgKExvYWRPZmZzZXRzOjpJdGVyYXRvciBpdGVyID0gbV9sb2FkT2Zmc2V0cy5iZWdpbigp
OyBpdGVyICE9IG1fbG9hZE9mZnNldHMuZW5kKCk7ICsraXRlcikgeworICAgICAgICAgICAgdm9p
ZCogbG9hZEFkZHIgPSByZWludGVycHJldF9jYXN0PHZvaWQqPihtX2J1ZmZlciArICppdGVyKTsK
KyAgICAgICAgICAgIEFzc2VtYmxlclR5cGU6OnBhdGNoQ29uc3RQb29sTG9hZChsb2FkQWRkciwg
cmVpbnRlcnByZXRfY2FzdDx2b2lkKj4obV9idWZmZXIgKyBjb25zdFBvb2xPZmZzZXQpKTsKKyAg
ICAgICAgfQorCisgICAgICAgIG1fbG9hZE9mZnNldHMuY2xlYXIoKTsKKyAgICAgICAgbV9udW1D
b25zdHMgPSAwOworICAgICAgICBtX21heERpc3RhbmNlID0gbWF4UG9vbFNpemU7CisgICAgfQor
CisgICAgdm9pZCBmbHVzaElmTm9TcGFjZUZvcihpbnQgbmV4dEluc25TaXplKQorICAgIHsKKyAg
ICAgICAgaWYgKG1fbnVtQ29uc3RzID09IDApCisgICAgICAgICAgICByZXR1cm47CisgICAgICAg
IGlmICgobV9tYXhEaXN0YW5jZSA8IG5leHRJbnNuU2l6ZSArIG1fbGFzdENvbnN0RGVsdGEgKyBi
YXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQzMl90KSkpCisgICAgICAgICAgICBmbHVzaENv
bnN0YW50UG9vbCgpOworICAgIH0KKworICAgIHZvaWQgZmx1c2hJZk5vU3BhY2VGb3IoaW50IG5l
eHRJbnNuU2l6ZSwgaW50IG5leHRDb25zdFNpemUpCisgICAgeworICAgICAgICBpZiAobV9udW1D
b25zdHMgPT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKChtX21heERpc3Rh
bmNlIDwgbmV4dEluc25TaXplICsgbV9sYXN0Q29uc3REZWx0YSArIGJhcnJpZXJTaXplICsgKGlu
dClzaXplb2YodWludDMyX3QpKSB8fAorICAgICAgICAgICAgKG1fbnVtQ29uc3RzICsgbmV4dENv
bnN0U2l6ZSAvIHNpemVvZih1aW50MzJfdCkgPj0gbWF4UG9vbFNpemUpKQorICAgICAgICAgICAg
Zmx1c2hDb25zdGFudFBvb2woKTsKKyAgICB9CisKKyAgICB1aW50MzJfdCogbV9wb29sOworICAg
IGNoYXIqIG1fbWFzazsKKyAgICBMb2FkT2Zmc2V0cyBtX2xvYWRPZmZzZXRzOworCisgICAgaW50
IG1fbnVtQ29uc3RzOworICAgIGludCBtX21heERpc3RhbmNlOworICAgIGludCBtX2xhc3RDb25z
dERlbHRhOworfTsKKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNT
RU1CTEVSKQorCisjZW5kaWYgLy8gQXNzZW1ibGVyQnVmZmVyV2l0aENQX2gKLS0gCjEuNi4wLjQK
Cg==
</data>
<flag name="review"
          id="16572"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32047</attachid>
            <date>2009-06-30 03:24:04 -0700</date>
            <delta_ts>2009-07-02 03:08:54 -0700</delta_ts>
            <desc>Add YARR support for generic ARM platforms (v2)</desc>
            <filename>0003-Add-YARR-support-for-generic-ARM-platforms-disabled.patch</filename>
            <type>text/plain</type>
            <size>70589</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBkOGMzNDAwY2E1YjJjNzgyYzc3M2RhNWIzNGNjMmRkN2ZjZTc0NDViIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogTW9uLCAyOSBKdW4gMjAwOSAxNToxNzo0MyArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBZ
QVJSIHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBsYXRmb3JtcyAoZGlzYWJsZWQgYnkgZGVmYXVs
dCkKClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQu
aHU+ClNpZ25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0K
IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTc2
ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkgICAgICAgICAgICAgICAg
IHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAgICAg
ICAgIHwgIDM1MyArKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1i
bGVyLmggICAgICAgICAgIHwgIDcwMCArKysrKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggfCAgIDEwICsKIEphdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oICAgICAgICAgfCAgICA0ICsKIEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oICAgICAgfCAgNzc4ICsrKysrKysr
KysrKysrKysrKysrKwogSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCAg
ICAgICAgICB8ICAgMTUgKwogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAg
ICAgICAgICAgICB8ICAgIDggKy0KIEphdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQuY3BwICAg
ICAgICAgICAgICAgICAgfCAgIDE0ICstCiAxMCBmaWxlcyBjaGFuZ2VkLCAyMDUwIGluc2VydGlv
bnMoKyksIDkgZGVsZXRpb25zKC0pCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAoKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCAxMDdk
NDc4Li40YjJjYzFhIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIv
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC00LDYgKzQsMTgyIEBACiAKICAgICAgICAgPGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk4Nj4KIAorICAgICAgICBB
ZGQgWUFSUiBzdXBwb3J0IGZvciBnZW5lcmljIEFSTSBwbGF0Zm9ybXMgKGRpc2FibGVkIGJ5IGRl
ZmF1bHQpLgorCisgICAgICAgIFNpZ25lZCBvZmYgYnkgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVn
QGluZi51LXN6ZWdlZC5odT4KKyAgICAgICAgU2lnbmVkIG9mZiBieSBHYWJvciBMb2tpIDxsb2tp
QGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnByaToKKyAgICAg
ICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcDogQWRkZWQuCisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6Z2V0TGRySW1tQWRkcmVzcyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6bGlua0JyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cGF0Y2hDb25zdFBv
b2xMb2FkKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRPcDIpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmdlbkludCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
Z2V0SW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjptb3ZlSW1tKToKKyAgICAgICAg
KEpTQzo6QVJNQXNzZW1ibGVyOjpkYXRhVHJhbnNmZXIzMik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaDog
QWRkZWQuCisgICAgICAgIChKU0M6OkFSTTo6KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjpBUk1Bc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Oik6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OkptcFNyYzo6ZW5hYmxlTGF0ZVBhdGNoKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpKbXBEc3Q6OkptcERzdCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1w
RHN0Ojppc1VzZWQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkptcERzdDo6dXNlZCk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZW1pdEluc3QpOgorICAgICAgICAoSlNDOjpB
Uk1Bc3NlbWJsZXI6OmFuZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphbmRzX3Ip
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmVvcl9yKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjplb3JzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnN1Yl9yKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzdWJzX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OnJzYl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyc2JzX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFkZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjphZGRzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFkY19yKToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphZGNzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6OnNiY19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzYmNzX3IpOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJzY19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjpyc2NzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnRzdF9yKToKKyAgICAg
ICAgKEpTQzo6QVJNQXNzZW1ibGVyOjp0ZXFfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6Y21wX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om9ycl9yKToKKyAgICAgICAg
KEpTQzo6QVJNQXNzZW1ibGVyOjpvcnJzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
Om1vdl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjptb3ZzX3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmJpY19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpi
aWNzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om12bl9yKToKKyAgICAgICAgKEpT
Qzo6QVJNQXNzZW1ibGVyOjptdm5zX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om11
bF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjptdWxzX3IpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6Om11bGxfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGRy
X2ltbSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGRyX3VuX2ltbSk6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX3UpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmR0cl91cik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX2QpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmR0cl9kcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
bGRyaF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsZHJoX2QpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmxkcmhfdSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6
c3RyaF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpwdXNoX3IpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OnBvcF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpw
b2tlX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBlZWtfcik6CisgICAgICAgIChK
U0M6OkFSTUFzc2VtYmxlcjo6Y2x6X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJr
cHQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxzbCk6CisgICAgICAgIChKU0M6OkFS
TUFzc2VtYmxlcjo6bHNyKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphc3IpOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxzbF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjpsc3Jfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YXNyX3IpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNpemUpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsYWJlbCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YWxpZ24pOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJs
ZXI6OmptcCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cGF0Y2hQb2ludGVySW50ZXJu
YWwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBhdGNoQ29uc3RQb29sTG9hZCk6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyZXBhdGNoTG9h
ZFB0clRvTEVBKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5rSnVtcCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cmVsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6bGlua0NhbGwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJlbGlua0Nh
bGwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRDYWxsUmV0dXJuT2Zmc2V0KToKKyAgICAg
ICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRPcDJCeXRlKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpwbGFjZUNvbnN0UG9vbEJhcnJpZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJs
ZXI6OlJNKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpSUyk6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6UkQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OlJOKToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRDb25kaXRpb25hbEZpZWxkKToKKyAgICAgICAg
KiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyOjpDYWxsOjplbmFibGVMYXRlUGF0Y2gpOgorICAgICAgICAoSlND
OjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wOjplbmFibGVMYXRlUGF0Y2gpOgorICAgICAg
ICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
Oik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdXBwb3J0c0Zsb2F0aW5nUG9p
bnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3VwcG9ydHNGbG9hdGluZ1Bv
aW50VHJ1bmNhdGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YWRkMzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YW5kMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6bHNoaWZ0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTo6bXVsMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bm90MzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6b3IzMik6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjpyc2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVy
QVJNOjpzdWIzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjp4b3IzMik6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzIpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6bG9hZDMyV2l0aEFkZHJlc3NPZmZzZXRQYXRjaCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkUHRyV2l0aFBhdGNoVG9MRUEpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bG9hZDE2KToKKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk06OnN0b3JlMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN0b3JlMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6cG9wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnB1c2gpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bW92ZSk6CisgICAgICAgIChKU0M6Ok1h
Y3JvQXNzZW1ibGVyQVJNOjpzd2FwKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OnNpZ25FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Onpl
cm9FeHRlbmQzMlRvUHRyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5j
aDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaDE2KToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaFRlc3QzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjpqdW1wKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJB
Uk06OmJyYW5jaEFkZDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om11bGwz
Mik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmFuY2hNdWwzMik6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmFuY2hTdWIzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmVha3BvaW50KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06Om5lYXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmNh
bGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cmV0KToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06OnNldDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnNldFRlc3QzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjp0YWls
UmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptYWtlVGFp
bFJlY3Vyc2l2ZUNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bW92ZVdp
dGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmFuY2hQdHJXaXRo
UGF0Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmVQdHJXaXRoUGF0
Y2gpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bG9hZERvdWJsZSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdG9yZURvdWJsZSk6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjphZGREb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6c3ViRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om11
bERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpjb252ZXJ0SW50MzJU
b0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpicmFuY2hEb3VibGUp
OgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoVHJ1bmNhdGVEb3VibGVU
b0ludDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OkFSTUNvbmRpdGlvbik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2FsbCk6CisgICAgICAg
IChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpjYWxsMzIpOgorICAgICAgICAqIGppdC9FeGVjdXRh
YmxlQWxsb2NhdG9yLmg6CisgICAgICAgIChKU0M6OkV4ZWN1dGFibGVBbGxvY2F0b3I6OmNhY2hl
Rmx1c2gpOgorICAgICAgICAqIHd0Zi9QbGF0Zm9ybS5oOgorICAgICAgICAqIHlhcnIvUmVnZXhK
SVQuY3BwOgorICAgICAgICAoSlNDOjpZYXJyOjpSZWdleEdlbmVyYXRvcjo6Z2VuZXJhdGVFbnRl
cik6CisgICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZVJldHVybik6
CisKKzIwMDktMDYtMjkgIEdhYm9yIExva2kgIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICA8aHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2PgorCiAgICAgICAgIEV4dGVuZCBBc3Nl
bWJsZXJCdWZmZXIgd2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbS4KIAogICAg
ICAgICAqIGFzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaDoKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3Jl
LnByaQppbmRleCAxMWQyMTVhLi40NmU3ZjMxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9K
YXZhU2NyaXB0Q29yZS5wcmkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJp
CkBAIC0xMTcsNiArMTE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0ZWNvZGUvQ29kZUJsb2Nr
LmNwcCBcCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIFwKICAgICBieXRlY29k
ZS9KdW1wVGFibGUuY3BwIFwKKyAgICBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCBcCiAgICAg
aml0L0pJVC5jcHAgXAogICAgIGppdC9KSVRDYWxsLmNwcCBcCiAgICAgaml0L0pJVEFyaXRobWV0
aWMuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJs
ZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZDQwZmQyYgotLS0gL2Rldi9udWxsCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCkBAIC0wLDAgKzEsMzUz
IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisgKiBB
bGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291
cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBh
cmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBh
cmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlv
bnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBp
biBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJv
dmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJP
VklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVYUFJF
U1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBUTywg
VEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRORVNT
IEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBFVkVO
VCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBFWEVN
UExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOyBM
T1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElP
TikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwgV0hF
VEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElO
RyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUg
VVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lmIEVO
QUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2luY2x1ZGUgIkFSTUFzc2VtYmxl
ci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gUGF0Y2hpbmcgaGVscGVycworCitBUk1Xb3Jk
KiBBUk1Bc3NlbWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMyX3Qq
IGNvbnN0UG9vbCkKK3sKKyAgICAvLyBNdXN0IGJlIGFuIGxkciAuLi4sIFtwYyArLy0gaW1tXQor
ICAgIEFTU0VSVCgoKmluc24gJiAweDBmN2YwMDAwKSA9PSAweDA1MWYwMDAwKTsKKworICAgIGlm
IChjb25zdFBvb2wgJiYgKCppbnNuICYgMHgxKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0
X2Nhc3Q8QVJNV29yZCo+KGNvbnN0UG9vbCArICgoKmluc24gJiBTRFRfT0ZGU0VUX01BU0spID4+
IDEpKTsKKworICAgIEFSTVdvcmQgYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oaW5z
bikgKyAyICogc2l6ZW9mKEFSTVdvcmQpOworICAgIGlmICgqaW5zbiAmIERUX1VQKQorICAgICAg
ICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oYWRkciArICgqaW5zbiAmIFNEVF9P
RkZTRVRfTUFTSykpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8
QVJNV29yZCo+KGFkZHIgLSAoKmluc24gJiBTRFRfT0ZGU0VUX01BU0spKTsKK30KKwordm9pZCBB
Uk1Bc3NlbWJsZXI6OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRv
KQoreworICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihjb2Rl
KSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKKworICAgIGlmICghZnJvbS5t
X2xhdGVQYXRjaCkgeworICAgICAgICBpbnQgZGlmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29y
ZCo+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGluc24gKyAyKTsKKworICAgICAg
ICBpZiAoKGRpZmYgPD0gQk9GRlNFVF9NQVggJiYgZGlmZiA+PSBCT0ZGU0VUX01JTikpIHsKKyAg
ICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3QoaW5z
biwgc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgICAgICppbnNuID0gQiB8IGdldENvbmRpdGlv
bmFsRmllbGQoKmluc24pIHwgKGRpZmYgJiBCUkFOQ0hfTUFTSyk7CisgICAgICAgICAgICByZXR1
cm47CisgICAgICAgIH0KKyAgICB9CisgICAgQVJNV29yZCogYWRkciA9IGdldExkckltbUFkZHJl
c3MoaW5zbik7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVj
dChhZGRyLCBzaXplb2YoQVJNV29yZCkpOworICAgICphZGRyID0gcmVpbnRlcnByZXRfY2FzdDxB
Uk1Xb3JkPih0byk7Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjpwYXRjaENvbnN0UG9vbExvYWQo
dm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpCit7CisgICAgQVJNV29yZCAqbGRy
ID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4obG9hZEFkZHIpOworICAgIEFSTVdvcmQgZGlm
ZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGNvbnN0UG9vbEFkZHIpIC0gbGRyOworICAg
IEFSTVdvcmQgaW5kZXggPSAoKmxkciAmIDB4ZmZmKSA+PiAxOworCisgICAgQVNTRVJUKGRpZmYg
Pj0gMSk7CisgICAgaWYgKGRpZmYgPj0gMiB8fCBpbmRleCA+IDApIHsKKyAgICAgICAgZGlmZiA9
IChkaWZmICsgaW5kZXggLSAyKSAqIHNpemVvZihBUk1Xb3JkKTsKKyAgICAgICAgQVNTRVJUKGRp
ZmYgPD0gMHhmZmYpOworICAgICAgICAqbGRyID0gKCpsZHIgJiB+MHhmZmYpIHwgZGlmZjsKKyAg
ICB9IGVsc2UKKyAgICAgICAgKmxkciA9ICgqbGRyICYgfigweGZmZiB8IEFSTUFzc2VtYmxlcjo6
RFRfVVApKSB8IHNpemVvZihBUk1Xb3JkKTsKK30KKworLy8gSGFuZGxlIGltbWVkaWF0ZXMKKwor
QVJNV29yZCBBUk1Bc3NlbWJsZXI6OmdldE9wMihBUk1Xb3JkIGltbSkKK3sKKyAgICBpbnQgcm9s
OworCisgICAgaWYgKGltbSA8PSAweGZmKQorICAgICAgICByZXR1cm4gT1AyX0lNTSB8IGltbTsK
KworICAgIGlmICgoaW1tICYgMHhmZjAwMDAwMCkgPT0gMCkgeworICAgICAgICBpbW0gPDw9IDg7
CisgICAgICAgIHJvbCA9IDg7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbW0gPSAoaW1t
IDw8IDI0KSB8IChpbW0gPj4gOCk7CisgICAgICAgIHJvbCA9IDA7CisgICAgfQorCisgICAgaWYg
KChpbW0gJiAweGZmMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAg
cm9sICs9IDQ7CisgICAgfQorCisgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAwKSB7Cisg
ICAgICAgIGltbSA8PD0gNDsKKyAgICAgICAgcm9sICs9IDI7CisgICAgfQorCisgICAgaWYgKChp
bW0gJiAweGMwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gMjsKKyAgICAgICAgcm9s
ICs9IDE7CisgICAgfQorCisgICAgaWYgKChpbW0gJiAweDAwZmZmZmZmKSA9PSAwKQorICAgICAg
ICByZXR1cm4gT1AyX0lNTSB8IChpbW0gPj4gMjQpIHwgKHJvbCA8PCA4KTsKKworICAgIHJldHVy
biAwOworfQorCitpbnQgQVJNQXNzZW1ibGVyOjpnZW5JbnQoaW50IHJlZywgQVJNV29yZCBpbW0s
IGJvb2wgcG9zaXRpdmUpCit7CisgICAgLy8gU3RlcDE6IFNlYXJjaCBhIG5vbi1pbW1lZGlhdGUg
cGFydAorICAgIEFSTVdvcmQgbWFzazsKKyAgICBBUk1Xb3JkIGltbTE7CisgICAgQVJNV29yZCBp
bW0yOworICAgIGludCByb2w7CisKKyAgICBtYXNrID0gMHhmZjAwMDAwMDsKKyAgICByb2wgPSA4
OworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgaWYgKChpbW0gJiBtYXNrKSA9PSAwKSB7CisgICAg
ICAgICAgICBpbW0gPSAoaW1tIDw8IHJvbCkgfCAoaW1tID4+ICgzMiAtIHJvbCkpOworICAgICAg
ICAgICAgcm9sID0gNCArIChyb2wgPj4gMSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAg
fQorICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAgaWYgKG1h
c2sgJiAweDMpIHsKKyAgICAgICAgICAgIC8vIHJvbCA4CisgICAgICAgICAgICBpbW0gPSAoaW1t
IDw8IDgpIHwgKGltbSA+PiAyNCk7CisgICAgICAgICAgICBtYXNrID0gMHhmZjAwOworICAgICAg
ICAgICAgcm9sID0gMjQ7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAgICAgICAg
IGlmICgoaW1tICYgbWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpbW0gPSAoaW1t
IDw8IHJvbCkgfCAoaW1tID4+ICgzMiAtIHJvbCkpOworICAgICAgICAgICAgICAgICAgICByb2wg
PSAocm9sID4+IDEpIC0gODsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgfQorICAgICAgICAgICAgICAgIHJvbCArPSAyOworICAgICAgICAgICAgICAgIG1hc2sg
Pj49IDI7CisgICAgICAgICAgICAgICAgaWYgKG1hc2sgJiAweDMpCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7CisgICAgICAg
IH0KKyAgICB9CisKKyAgICBBU1NFUlQoKGltbSAmIDB4ZmYpID09IDApOworCisgICAgaWYgKChp
bW0gJiAweGZmMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbTEgPSBPUDJfSU1NIHwgKChpbW0g
Pj4gMTYpICYgMHhmZikgfCAoKChyb2wgKyA0KSAmIDB4ZikgPDwgOCk7CisgICAgICAgIGltbTIg
PSBPUDJfSU1NIHwgKChpbW0gPj4gOCkgJiAweGZmKSB8ICgoKHJvbCArIDgpICYgMHhmKSA8PCA4
KTsKKyAgICB9IGVsc2UgaWYgKGltbSAmIDB4YzAwMDAwMDApIHsKKyAgICAgICAgaW1tMSA9IE9Q
Ml9JTU0gfCAoKGltbSA+PiAyNCkgJiAweGZmKSB8ICgocm9sICYgMHhmKSA8PCA4KTsKKyAgICAg
ICAgaW1tIDw8PSA4OworICAgICAgICByb2wgKz0gNDsKKworICAgICAgICBpZiAoKGltbSAmIDB4
ZmYwMDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAgICAgIHJv
bCArPSA0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAw
KSB7CisgICAgICAgICAgICBpbW0gPDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAg
ICAgfQorCisgICAgICAgIGlmICgoaW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAg
ICAgaW1tIDw8PSAyOworICAgICAgICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKworICAgICAg
ICBpZiAoKGltbSAmIDB4MDBmZmZmZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0gT1AyX0lN
TSB8IChpbW0gPj4gMjQpIHwgKChyb2wgJiAweGYpIDw8IDgpOworICAgICAgICBlbHNlCisgICAg
ICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoKGltbSAmIDB4ZjAw
MDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gNDsKKyAgICAgICAgICAgIHJvbCAr
PSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGMwMDAwMDAwKSA9PSAwKSB7
CisgICAgICAgICAgICBpbW0gPDw9IDI7CisgICAgICAgICAgICByb2wgKz0gMTsKKyAgICAgICAg
fQorCisgICAgICAgIGltbTEgPSBPUDJfSU1NIHwgKChpbW0gPj4gMjQpICYgMHhmZikgfCAoKHJv
bCAmIDB4ZikgPDwgOCk7CisgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAgcm9sICs9IDQ7CisK
KyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgICAgICBpbW0g
PDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAgIGlmICgo
aW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAgICAgaW1tIDw8PSAyOworICAgICAg
ICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGltbSAmIDB4MDBmZmZm
ZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0gT1AyX0lNTSB8IChpbW0gPj4gMjQpIHwgKChy
b2wgJiAweGYpIDw8IDgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4gMDsKKyAg
ICB9CisKKyAgICBpZiAocG9zaXRpdmUpIHsKKyAgICAgICAgbW92X3IocmVnLCBpbW0xKTsKKyAg
ICAgICAgb3JyX3IocmVnLCByZWcsIGltbTIpOworICAgIH0gZWxzZSB7CisgICAgICAgIG12bl9y
KHJlZywgaW1tMSk7CisgICAgICAgIGJpY19yKHJlZywgcmVnLCBpbW0yKTsKKyAgICB9CisKKyAg
ICByZXR1cm4gMTsKK30KKworQVJNV29yZCBBUk1Bc3NlbWJsZXI6OmdldEltbShBUk1Xb3JkIGlt
bSwgaW50IHRtcFJlZywgYm9vbCBpbnZlcnQpCit7CisgICAgQVJNV29yZCB0bXA7CisKKyAgICAv
LyBEbyBpdCBieSAxIGluc3RydWN0aW9uCisgICAgdG1wID0gZ2V0T3AyKGltbSk7CisgICAgaWYg
KHRtcCkKKyAgICAgICAgcmV0dXJuIHRtcDsKKworICAgIHRtcCA9IGdldE9wMih+aW1tKTsKKyAg
ICBpZiAodG1wKSB7CisgICAgICAgIGlmIChpbnZlcnQpCisgICAgICAgICAgICByZXR1cm4gdG1w
IHwgT1AyX0lOVl9JTU07CisgICAgICAgIG12bl9yKHRtcFJlZywgdG1wKTsKKyAgICAgICAgcmV0
dXJuIHRtcFJlZzsKKyAgICB9CisKKyAgICAvLyBEbyBpdCBieSAyIGluc3RydWN0aW9uCisgICAg
aWYgKGdlbkludCh0bXBSZWcsIGltbSwgdHJ1ZSkpCisgICAgICAgIHJldHVybiB0bXBSZWc7Cisg
ICAgaWYgKGdlbkludCh0bXBSZWcsIH5pbW0sIGZhbHNlKSkKKyAgICAgICAgcmV0dXJuIHRtcFJl
ZzsKKworICAgIGxkcl9pbW0odG1wUmVnLCBpbW0pOworICAgIHJldHVybiB0bXBSZWc7Cit9CisK
K3ZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVzdCkKK3sKKyAg
ICBBUk1Xb3JkIHRtcDsKKworICAgIC8vIERvIGl0IGJ5IDEgaW5zdHJ1Y3Rpb24KKyAgICB0bXAg
PSBnZXRPcDIoaW1tKTsKKyAgICBpZiAodG1wKSB7CisgICAgICAgIG1vdl9yKGRlc3QsIHRtcCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0bXAgPSBnZXRPcDIofmltbSk7CisgICAg
aWYgKHRtcCkgeworICAgICAgICBtdm5fcihkZXN0LCB0bXApOworICAgICAgICByZXR1cm47Cisg
ICAgfQorCisgICAgLy8gRG8gaXQgYnkgMiBpbnN0cnVjdGlvbgorICAgIGlmIChnZW5JbnQoZGVz
dCwgaW1tLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZW5JbnQoZGVzdCwgfmlt
bSwgZmFsc2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBsZHJfaW1tKGRlc3QsIGltbSk7Cit9
CisKKy8vIE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKKwordm9pZCBBUk1Bc3NlbWJsZXI6OmRh
dGFUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBi
YXNlLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ID49IDApIHsKKyAgICAgICAg
aWYgKG9mZnNldCA8PSAweGZmZikKKyAgICAgICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBi
YXNlLCBvZmZzZXQpOworICAgICAgICBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmZikgeworICAg
ICAgICAgICAgYWRkX3IoQVJNOjpTMCwgYmFzZSwgT1AyX0lNTSB8IChvZmZzZXQgPj4gMTIpIHwg
KDEwIDw8IDgpKTsKKyAgICAgICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCBv
ZmZzZXQgJiAweGZmZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBUk1Xb3JkIHJl
ZyA9IGdldEltbShvZmZzZXQsIEFSTTo6UzApOworICAgICAgICAgICAgZHRyX3VyKGlzTG9hZCwg
c3JjRHN0LCBiYXNlLCByZWcpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAgICAgb2Zm
c2V0ID0gLW9mZnNldDsKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweGZmZikKKyAgICAgICAgICAg
IGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBvZmZzZXQpOworICAgICAgICBlbHNlIGlmIChv
ZmZzZXQgPD0gMHhmZmZmZikgeworICAgICAgICAgICAgc3ViX3IoQVJNOjpTMCwgYmFzZSwgT1Ay
X0lNTSB8IChvZmZzZXQgPj4gMTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgIGR0cl9kKGlz
TG9hZCwgc3JjRHN0LCBBUk06OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgIH0gZWxzZSB7
CisgICAgICAgICAgICBBUk1Xb3JkIHJlZyA9IGdldEltbShvZmZzZXQsIEFSTTo6UzApOworICAg
ICAgICAgICAgZHRyX2RyKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCByZWcpOworICAgICAgICB9Cisg
ICAgfQorfQorCit2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMihib29sIGlz
TG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRl
eCwgaW50IHNjYWxlLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBBUk1Xb3JkIG9wMjsKKworICAg
IEFTU0VSVChzY2FsZSA+PSAwICYmIHNjYWxlIDw9IDMpOworICAgIG9wMiA9IGxzbChpbmRleCwg
c2NhbGUpOworCisgICAgaWYgKG9mZnNldCA+PSAwICYmIG9mZnNldCA8PSAweGZmZikgeworICAg
ICAgICBhZGRfcihBUk06OlMwLCBiYXNlLCBvcDIpOworICAgICAgICBkdHJfdShpc0xvYWQsIHNy
Y0RzdCwgQVJNOjpTMCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAgICBpZiAo
b2Zmc2V0IDw9IDAgJiYgb2Zmc2V0ID49IC0weGZmZikgeworICAgICAgICBhZGRfcihBUk06OlMw
LCBiYXNlLCBvcDIpOworICAgICAgICBkdHJfZChpc0xvYWQsIHNyY0RzdCwgQVJNOjpTMCwgLW9m
ZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtb3ZlSW1tKG9mZnNldCwgQVJN
OjpTMCk7CisgICAgYWRkX3IoQVJNOjpTMCwgQVJNOjpTMCwgb3AyKTsKKyAgICBkdHJfdXIoaXNM
b2FkLCBzcmNEc3QsIGJhc2UsIEFSTTo6UzApOworfQorCit2b2lkKiBBUk1Bc3NlbWJsZXI6OmV4
ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCit7CisgICAgY2hhciogZGF0
YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9j
YXRvcikpOworCisgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRlciA9IG1fanVtcHMuYmVnaW4o
KTsgaXRlciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQVJNV29yZCogbGRy
QWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGRhdGEgKyAqaXRlcik7CisgICAgICAg
IEFSTVdvcmQqIG9mZnNldCA9IGdldExkckltbUFkZHJlc3MobGRyQWRkcik7CisgICAgICAgIGlm
ICgqb2Zmc2V0ICE9IDB4ZmZmZmZmZmYpCisgICAgICAgICAgICBsaW5rQnJhbmNoKGRhdGEsIEpt
cFNyYygqaXRlciksIGRhdGEgKyAqb2Zmc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4gZGF0YTsK
K30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1CTEVSKSAm
JiBQTEFURk9STShBUk0pCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGMwMWFhMQotLS0gL2Rldi9udWxsCisr
KyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMCwwICsxLDcw
MCBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICog
QWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNv
dXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwg
YXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICog
YXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFp
biB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMg
aW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAg
bm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFp
bWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHBy
b3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBS
T1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisgKiBFWFBS
RVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8s
IFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVT
UyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4gTk8gRVZF
TlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBMSUFC
TEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICogRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsg
TE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJ
T04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFksIFdI
RVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJ
TkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhF
IFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJ
TElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFSTUFzc2VtYmxlcl9oCisjZGVm
aW5lIEFSTUFzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKworI2lmIEVO
QUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2luY2x1ZGUgIkFzc2VtYmxlckJ1
ZmZlcldpdGhDUC5oIgorI2luY2x1ZGUgPHd0Zi9Bc3NlcnRpb25zLmg+CituYW1lc3BhY2UgSlND
IHsKKwordHlwZWRlZiB1aW50MzJfdCBBUk1Xb3JkOworCituYW1lc3BhY2UgQVJNIHsKKyAgICB0
eXBlZGVmIGVudW0geworICAgICAgICByMCA9IDAsCisgICAgICAgIHIxLAorICAgICAgICByMiwK
KyAgICAgICAgcjMsCisgICAgICAgIFMwID0gcjMsCisgICAgICAgIHI0LAorICAgICAgICByNSwK
KyAgICAgICAgcjYsCisgICAgICAgIHI3LAorICAgICAgICByOCwKKyAgICAgICAgUzEgPSByOCwK
KyAgICAgICAgcjksCisgICAgICAgIHIxMCwKKyAgICAgICAgcjExLAorICAgICAgICByMTIsCisg
ICAgICAgIHIxMywKKyAgICAgICAgc3AgPSByMTMsCisgICAgICAgIHIxNCwKKyAgICAgICAgbHIg
PSByMTQsCisgICAgICAgIHIxNSwKKyAgICAgICAgcGMgPSByMTUKKyAgICB9IFJlZ2lzdGVySUQ7
CisKKyAgICB0eXBlZGVmIGVudW0geworICAgICAgICBmcDAgLy9GSVhNRQorICAgIH0gRlBSZWdp
c3RlcklEOworfSAvLyBuYW1lc3BhY2UgQVJNCisKKyAgICBjbGFzcyBBUk1Bc3NlbWJsZXIgewor
ICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRlZiBBUk06OlJlZ2lzdGVySUQgUmVnaXN0ZXJJRDsK
KyAgICAgICAgdHlwZWRlZiBBUk06OkZQUmVnaXN0ZXJJRCBGUFJlZ2lzdGVySUQ7CisgICAgICAg
IHR5cGVkZWYgQXNzZW1ibGVyQnVmZmVyV2l0aENQPDIwNDgsIDQsIDQsIEFSTUFzc2VtYmxlcj4g
QVJNQnVmZmVyOworICAgICAgICB0eXBlZGVmIFdURjo6U2VnbWVudGVkVmVjdG9yPGludCwgNjQ+
IEp1bXBzOworCisgICAgICAgIEFSTUFzc2VtYmxlcigpIHsgfQorCisgICAgICAgIC8vIEFSTSBj
b25kaXRpb25hbCBjb25zdGFudHMKKyAgICAgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgICAg
IEVRID0gMHgwMDAwMDAwMCwgLy8gWmVybworICAgICAgICAgICAgTkUgPSAweDEwMDAwMDAwLCAv
LyBOb24temVybworICAgICAgICAgICAgQ1MgPSAweDIwMDAwMDAwLAorICAgICAgICAgICAgQ0Mg
PSAweDMwMDAwMDAwLAorICAgICAgICAgICAgTUkgPSAweDQwMDAwMDAwLAorICAgICAgICAgICAg
UEwgPSAweDUwMDAwMDAwLAorICAgICAgICAgICAgVlMgPSAweDYwMDAwMDAwLAorICAgICAgICAg
ICAgVkMgPSAweDcwMDAwMDAwLAorICAgICAgICAgICAgSEkgPSAweDgwMDAwMDAwLAorICAgICAg
ICAgICAgTFMgPSAweDkwMDAwMDAwLAorICAgICAgICAgICAgR0UgPSAweGEwMDAwMDAwLAorICAg
ICAgICAgICAgTFQgPSAweGIwMDAwMDAwLAorICAgICAgICAgICAgR1QgPSAweGMwMDAwMDAwLAor
ICAgICAgICAgICAgTEUgPSAweGQwMDAwMDAwLAorICAgICAgICAgICAgQUwgPSAweGUwMDAwMDAw
CisgICAgICAgIH0gQ29uZGl0aW9uOworCisgICAgICAgIC8vIEFSTSBpbnN0cnVjdGlvbiBjb25z
dGFudHMKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBBTkQgPSAoMHgwIDw8IDIxKSwKKyAg
ICAgICAgICAgIEVPUiA9ICgweDEgPDwgMjEpLAorICAgICAgICAgICAgU1VCID0gKDB4MiA8PCAy
MSksCisgICAgICAgICAgICBSU0IgPSAoMHgzIDw8IDIxKSwKKyAgICAgICAgICAgIEFERCA9ICgw
eDQgPDwgMjEpLAorICAgICAgICAgICAgQURDID0gKDB4NSA8PCAyMSksCisgICAgICAgICAgICBT
QkMgPSAoMHg2IDw8IDIxKSwKKyAgICAgICAgICAgIFJTQyA9ICgweDcgPDwgMjEpLAorICAgICAg
ICAgICAgVFNUID0gKDB4OCA8PCAyMSksCisgICAgICAgICAgICBURVEgPSAoMHg5IDw8IDIxKSwK
KyAgICAgICAgICAgIENNUCA9ICgweGEgPDwgMjEpLAorICAgICAgICAgICAgQ01OID0gKDB4YiA8
PCAyMSksCisgICAgICAgICAgICBPUlIgPSAoMHhjIDw8IDIxKSwKKyAgICAgICAgICAgIE1PViA9
ICgweGQgPDwgMjEpLAorICAgICAgICAgICAgQklDID0gKDB4ZSA8PCAyMSksCisgICAgICAgICAg
ICBNVk4gPSAoMHhmIDw8IDIxKSwKKyAgICAgICAgICAgIE1VTCA9IDB4MDAwMDAwOTAsCisgICAg
ICAgICAgICBNVUxMID0gMHgwMGMwMDA5MCwKKyAgICAgICAgICAgIERUUiA9IDB4MDUwMDAwMDAs
CisgICAgICAgICAgICBMRFJIID0gMHgwMDEwMDA5MCwKKyAgICAgICAgICAgIFNUUkggPSAweDAw
MDAwMDkwLAorICAgICAgICAgICAgU1RNREIgPSAweDA5MjAwMDAwLAorICAgICAgICAgICAgTERN
SUEgPSAweDA4YjAwMDAwLAorICAgICAgICAgICAgQiA9IDB4MGEwMDAwMDAsCisgICAgICAgICAg
ICBCTCA9IDB4MGIwMDAwMDAsCisjaWYgQVJNX0FSQ0hfVkVSU0lPTiA+PSA1CisgICAgICAgICAg
ICBDTFogPSAweDAxNmYwZjEwLAorICAgICAgICAgICAgQktQVCA9IDB4ZTEyMDA3MCwKKyNlbmRp
ZgorICAgICAgICB9OworCisgICAgICAgIGVudW0geworICAgICAgICAgICAgT1AyX0lNTSA9ICgx
IDw8IDI1KSwKKyAgICAgICAgICAgIE9QMl9JTU1oID0gKDEgPDwgMjIpLAorICAgICAgICAgICAg
T1AyX0lOVl9JTU0gPSAoMSA8PCAyNiksCisgICAgICAgICAgICBTRVRfQ0MgPSAoMSA8PCAyMCks
CisgICAgICAgICAgICBPUDJfT0ZTUkVHID0gKDEgPDwgMjUpLAorICAgICAgICAgICAgRFRfVVAg
PSAoMSA8PCAyMyksCisgICAgICAgICAgICBEVF9XQiA9ICgxIDw8IDIxKSwKKyAgICAgICAgICAg
IC8vIFRoaXMgZmxhZyBpcyBpbmxjdWRlZCBpbiBMRFIgYW5kIFNUUgorICAgICAgICAgICAgRFRf
UFJFID0gKDEgPDwgMjQpLAorICAgICAgICAgICAgSERUX1VIID0gKDEgPDwgNSksCisgICAgICAg
ICAgICBEVF9MT0FEID0gKDEgPDwgMjApLAorICAgICAgICB9OworCisgICAgICAgIC8vIE1hc2tz
IG9mIEFSTSBpbnN0cnVjdGlvbnMKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBCUkFOQ0hf
TUFTSyA9IDB4MDBmZmZmZmYsCisgICAgICAgICAgICBOT05BUk0gPSAweGYwMDAwMDAwLAorICAg
ICAgICAgICAgU0RUX01BU0sgPSAweDBjMDAwMDAwLAorICAgICAgICAgICAgU0RUX09GRlNFVF9N
QVNLID0gMHhmZmYsCisgICAgICAgIH07CisKKyAgICAgICAgZW51bSB7CisgICAgICAgICAgICBC
T0ZGU0VUX01JTiA9IC0weDAwODAwMDAwLAorICAgICAgICAgICAgQk9GRlNFVF9NQVggPSAweDAw
N2ZmZmZmLAorICAgICAgICAgICAgU0RUID0gMHgwNDAwMDAwMCwKKyAgICAgICAgfTsKKworICAg
ICAgICBjbGFzcyBKbXBTcmMgeworICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEFSTUFzc2VtYmxl
cjsKKyAgICAgICAgcHVibGljOgorICAgICAgICAgICAgSm1wU3JjKCkKKyAgICAgICAgICAgICAg
ICA6IG1fb2Zmc2V0KC0xKQorICAgICAgICAgICAgICAgICwgbV9sYXRlUGF0Y2goZmFsc2UpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIHZvaWQgZW5hYmxlTGF0
ZVBhdGNoKCkgeyBtX2xhdGVQYXRjaCA9IHRydWU7IH0KKyAgICAgICAgcHJpdmF0ZToKKyAgICAg
ICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQorICAgICAgICAgICAgICAgIDogbV9vZmZzZXQob2Zm
c2V0KQorICAgICAgICAgICAgICAgICwgbV9sYXRlUGF0Y2goZmFsc2UpCisgICAgICAgICAgICB7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBtX29mZnNldCA6IDMxOworICAgICAg
ICAgICAgaW50IG1fbGF0ZVBhdGNoIDogMTsKKyAgICAgICAgfTsKKworICAgICAgICBjbGFzcyBK
bXBEc3QgeworICAgICAgICAgICAgZnJpZW5kIGNsYXNzIEFSTUFzc2VtYmxlcjsKKyAgICAgICAg
cHVibGljOgorICAgICAgICAgICAgSm1wRHN0KCkKKyAgICAgICAgICAgICAgICA6IG1fb2Zmc2V0
KC0xKQorICAgICAgICAgICAgICAgICwgbV91c2VkKGZhbHNlKQorICAgICAgICAgICAgeworICAg
ICAgICAgICAgfQorCisgICAgICAgICAgICBib29sIGlzVXNlZCgpIGNvbnN0IHsgcmV0dXJuIG1f
dXNlZDsgfQorICAgICAgICAgICAgdm9pZCB1c2VkKCkgeyBtX3VzZWQgPSB0cnVlOyB9CisgICAg
ICAgIHByaXZhdGU6CisgICAgICAgICAgICBKbXBEc3QoaW50IG9mZnNldCkKKyAgICAgICAgICAg
ICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKKyAgICAgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkK
KyAgICAgICAgICAgIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9vZmZzZXQgPT0gb2Zmc2V0
KTsKKyAgICAgICAgICAgIH0KKworICAgICAgICAgICAgaW50IG1fb2Zmc2V0IDogMzE7CisgICAg
ICAgICAgICBpbnQgbV91c2VkIDogMTsKKyAgICAgICAgfTsKKworICAgICAgICAvLyBJbnN0cnVj
dGlvbiBmb3JtYXRpbmcKKworICAgICAgICB2b2lkIGVtaXRJbnN0KEFSTVdvcmQgb3AsIGludCBy
ZCwgaW50IHJuLCBBUk1Xb3JkIG9wMikKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUICgg
KChvcDIgJiB+T1AyX0lNTSkgPD0gMHhmZmYpIHx8ICgoKG9wMiAmIH5PUDJfSU1NaCkgPD0gMHhm
ZmYpKSApOworICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KG9wIHwgUk4ocm4pIHwgUkQocmQp
IHwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYW5kX3IoaW50IHJkLCBpbnQgcm4s
IEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQU5ELCByZCwgcm4sIG9wMik7Cisg
ICAgICAgIH0KKworICAgICAgICB2b2lkIGFuZHNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBv
cDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChz
dGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBBTkQgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgZW9yX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3Ay
LCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3Rh
dGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRU9SLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGVvcnNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlv
biBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxB
Uk1Xb3JkPihjYykgfCBFT1IgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgc3ViX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24g
Y2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJN
V29yZD4oY2MpIHwgU1VCLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lk
IHN1YnNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQor
ICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykg
fCBTVUIgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
cnNiX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwg
UlNCLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJzYnNfcihpbnQg
cmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7Cisg
ICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBSU0IgfCBTRVRf
Q0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRkX3IoaW50IHJk
LCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQURELCByZCwgcm4s
IG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZHNfcihpbnQgcmQsIGludCBybiwg
QVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBl
bWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBBREQgfCBTRVRfQ0MsIHJkLCBybiwg
b3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYWRjX3IoaW50IHJkLCBpbnQgcm4sIEFS
TVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1p
dEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQURDLCByZCwgcm4sIG9wMik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGFkY3NfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIs
IENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0
aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBBREMgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgc2JjX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBD
b25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGlj
X2Nhc3Q8QVJNV29yZD4oY2MpIHwgU0JDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHNiY3NfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBj
YyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1X
b3JkPihjYykgfCBTQkMgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgcnNjX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2Mg
PSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29y
ZD4oY2MpIHwgUlNDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJz
Y3NfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAg
ICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBS
U0MgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgdHN0
X3IoaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFRTVCB8IFNFVF9D
QywgMCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRlcV9yKGludCBybiwg
QVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBl
bWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBURVEgfCBTRVRfQ0MsIDAsIHJuLCBv
cDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBjbXBfcihpbnQgcm4sIEFSTVdvcmQgb3Ay
LCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3Rh
dGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQ01QIHwgU0VUX0NDLCAwLCBybiwgb3AyKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgb3JyX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBD
b25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGlj
X2Nhc3Q8QVJNV29yZD4oY2MpIHwgT1JSLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIG9ycnNfcihpbnQgcmQsIGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBj
YyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1X
b3JkPihjYykgfCBPUlIgfCBTRVRfQ0MsIHJkLCBybiwgb3AyKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgbW92X3IoaW50IHJkLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8
IE1PViwgcmQsIEFSTTo6cjAsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG1vdnNf
cihpbnQgcmQsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTU9WIHwgU0VUX0ND
LCByZCwgQVJNOjpyMCwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgYmljX3IoaW50
IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQklDLCByZCwg
cm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGJpY3NfcihpbnQgcmQsIGludCBy
biwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAg
ICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBCSUMgfCBTRVRfQ0MsIHJkLCBy
biwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbXZuX3IoaW50IHJkLCBBUk1Xb3Jk
IG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0
KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE1WTiwgcmQsIEFSTTo6cjAsIG9wMik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIG12bnNfcihpbnQgcmQsIEFSTVdvcmQgb3AyLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8
QVJNV29yZD4oY2MpIHwgTVZOIHwgU0VUX0NDLCByZCwgQVJNOjpyMCwgb3AyKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgbXVsX3IoaW50IHJkLCBpbnQgcm4sIGludCBybSwgQ29uZGl0aW9u
IGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludChzdGF0aWNf
Y2FzdDxBUk1Xb3JkPihjYykgfCBNVUwgfCBSTihyZCkgfCBSUyhybikgfCBSTShybSkpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBtdWxzX3IoaW50IHJkLCBpbnQgcm4sIGludCBybSwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludChz
dGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBNVUwgfCBTRVRfQ0MgfCBSTihyZCkgfCBSUyhybikg
fCBSTShybSkpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtdWxsX3IoaW50IHJkaGksIGlu
dCByZGxvLCBpbnQgcm4sIGludCBybSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fYnVmZmVyLnB1dEludChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBNVUxM
IHwgUk4ocmRoaSkgfCBSRChyZGxvKSB8IFJTKHJuKSB8IFJNKHJtKSk7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGxkcl9pbW0oaW50IHJkLCBBUk1Xb3JkIGltbSwgQ29uZGl0aW9uIGNjID0g
QUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludFdpdGhDb25zdEludChz
dGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCBEVF9MT0FEIHwgRFRfVVAgfCBSTihBUk06
OnBjKSB8IFJEKHJkKSwgaW1tLCB0cnVlKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbGRy
X3VuX2ltbShpbnQgcmQsIEFSTVdvcmQgaW1tLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAg
eworICAgICAgICAgICAgbV9idWZmZXIucHV0SW50V2l0aENvbnN0SW50KHN0YXRpY19jYXN0PEFS
TVdvcmQ+KGNjKSB8IERUUiB8IERUX0xPQUQgfCBEVF9VUCB8IFJOKEFSTTo6cGMpIHwgUkQocmQp
LCBpbW0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdHJfdShib29sIGlzTG9hZCwgaW50
IHJkLCBpbnQgcmIsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgewor
ICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRFRSIHwgKGlz
TG9hZCA/IERUX0xPQUQgOiAwKSB8IERUX1VQLCByZCwgcmIsIG9wMik7CisgICAgICAgIH0KKwor
ICAgICAgICB2b2lkIGR0cl91cihib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIsIGludCBybSwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRp
Y19jYXN0PEFSTVdvcmQ+KGNjKSB8IERUUiB8IChpc0xvYWQgPyBEVF9MT0FEIDogMCkgfCBEVF9V
UCB8IE9QMl9PRlNSRUcsIHJkLCByYiwgcm0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBk
dHJfZChib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIsIEFSTVdvcmQgb3AyLCBDb25kaXRpb24g
Y2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJN
V29yZD4oY2MpIHwgRFRSIHwgKGlzTG9hZCA/IERUX0xPQUQgOiAwKSwgcmQsIHJiLCBvcDIpOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBkdHJfZHIoYm9vbCBpc0xvYWQsIGludCByZCwgaW50
IHJiLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBl
bWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCAoaXNMb2FkID8gRFRfTE9B
RCA6IDApIHwgT1AyX09GU1JFRywgcmQsIHJiLCBybSk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGxkcmhfcihpbnQgcmQsIGludCBybiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwg
TERSSCB8IEhEVF9VSCB8IERUX1VQIHwgRFRfUFJFLCByZCwgcm4sIHJtKTsKKyAgICAgICAgfQor
CisgICAgICAgIHZvaWQgbGRyaF9kKGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9wMiwgQ29uZGl0
aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0
PEFSTVdvcmQ+KGNjKSB8IExEUkggfCBIRFRfVUggfCBEVF9QUkUsIHJkLCByYiwgb3AyKTsKKyAg
ICAgICAgfQorCisgICAgICAgIHZvaWQgbGRyaF91KGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9w
MiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0
YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IExEUkggfCBIRFRfVUggfCBEVF9VUCB8IERUX1BSRSwg
cmQsIHJiLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBzdHJoX3IoaW50IHJuLCBp
bnQgcm0sIGludCByZCwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFNUUkggfCBIRFRfVUggfCBEVF9V
UCB8IERUX1BSRSwgcmQsIHJuLCBybSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHB1c2hf
cihpbnQgcmVnLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKEFSTVdvcmQocmVnKSA8PSAweGYpOworICAgICAgICAgICAgbV9idWZmZXIucHV0SW50KGNj
IHwgRFRSIHwgRFRfV0IgfCBSTihBUk06OnNwKSB8IFJEKHJlZykgfCAweDQpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBwb3BfcihpbnQgcmVnLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKEFSTVdvcmQocmVnKSA8PSAweGYpOworICAgICAgICAg
ICAgbV9idWZmZXIucHV0SW50KGNjIHwgKERUUiBeIERUX1BSRSkgfCBEVF9MT0FEIHwgRFRfVVAg
fCBSTihBUk06OnNwKSB8IFJEKHJlZykgfCAweDQpOworICAgICAgICB9CisKKyAgICAgICAgaW5s
aW5lIHZvaWQgcG9rZV9yKGludCByZWcsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7Cisg
ICAgICAgICAgICBkdHJfZChmYWxzZSwgQVJNOjpzcCwgMCwgcmVnLCBjYyk7CisgICAgICAgIH0K
KworICAgICAgICBpbmxpbmUgdm9pZCBwZWVrX3IoaW50IHJlZywgQ29uZGl0aW9uIGNjID0gQUwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGR0cl91KHRydWUsIHJlZywgQVJNOjpzcCwgMCwgY2Mp
OworICAgICAgICB9CisKKyNpZiBBUk1fQVJDSF9WRVJTSU9OID49IDUKKyAgICAgICAgdm9pZCBj
bHpfcihpbnQgcmQsIGludCBybSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fYnVmZmVyLnB1dEludChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBDTFogfCBS
RChyZCkgfCBSTShybSkpOworICAgICAgICB9CisjZW5kaWYKKworICAgICAgICB2b2lkIGJrcHQo
QVJNV29yZCB2YWx1ZSkKKyAgICAgICAgeworI2lmIEFSTV9BUkNIX1ZFUlNJT04gPj0gNQorICAg
ICAgICAgICAgbV9idWZmZXIucHV0SW50KEJLUFQgfCAoKHZhbHVlICYgMHhmZjApIDw8IDQpIHwg
KHZhbHVlICYgMHhmKSk7CisjZWxzZQorICAgICAgICAgICAgLy8gQ2Fubm90IGFjY2VzcyB0byBa
ZXJvIG1lbW9yeSBhZGRyZXNzCisgICAgICAgICAgICBkdHJfZHIodHJ1ZSwgQVJNOjpTMCwgQVJN
OjpTMCwgQVJNOjpTMCk7CisjZW5kaWYKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1X
b3JkIGxzbChpbnQgcmVnLCBBUk1Xb3JkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBB
U1NFUlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDB4MWYp
OworICAgICAgICAgICAgcmV0dXJuIHJlZyB8ICh2YWx1ZSA8PCA3KSB8IDB4MDA7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBsc3IoaW50IHJlZywgQVJNV29yZCB2YWx1ZSkK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAg
ICAgIEFTU0VSVCh2YWx1ZSA8PSAweDFmKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAodmFs
dWUgPDwgNykgfCAweDIwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgYXNy
KGludCByZWcsIEFSTVdvcmQgdmFsdWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChy
ZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICBBU1NFUlQodmFsdWUgPD0gMHgxZik7CisgICAg
ICAgICAgICByZXR1cm4gcmVnIHwgKHZhbHVlIDw8IDcpIHwgMHg0MDsKKyAgICAgICAgfQorCisg
ICAgICAgIHN0YXRpYyBBUk1Xb3JkIGxzbF9yKGludCByZWcsIGludCBzaGlmdFJlZykKKyAgICAg
ICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIEFT
U0VSVChzaGlmdFJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAoc2hp
ZnRSZWcgPDwgOCkgfCAweDEwOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQg
bHNyX3IoaW50IHJlZywgaW50IHNoaWZ0UmVnKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHNoaWZ0UmVnIDw9IEFSTTo6
cGMpOworICAgICAgICAgICAgcmV0dXJuIHJlZyB8IChzaGlmdFJlZyA8PCA4KSB8IDB4MzA7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBhc3JfcihpbnQgcmVnLCBpbnQgc2hp
ZnRSZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7Cisg
ICAgICAgICAgICBBU1NFUlQoc2hpZnRSZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1
cm4gcmVnIHwgKHNoaWZ0UmVnIDw8IDgpIHwgMHg1MDsKKyAgICAgICAgfQorCisgICAgICAgIC8v
IEdlbmVyYWwgaGVscGVycworCisgICAgICAgIGludCBzaXplKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIG1fYnVmZmVyLnNpemUoKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQg
ZW5zdXJlU3BhY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIG1fYnVmZmVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7Cisg
ICAgICAgIH0KKworICAgICAgICBKbXBEc3QgbGFiZWwoKQorICAgICAgICB7CisgICAgICAgICAg
ICByZXR1cm4gSm1wRHN0KG1fYnVmZmVyLnNpemUoKSk7CisgICAgICAgIH0KKworICAgICAgICBK
bXBEc3QgYWxpZ24oaW50IGFsaWdubWVudCkKKyAgICAgICAgeworICAgICAgICAgICAgd2hpbGUg
KCFtX2J1ZmZlci5pc0FsaWduZWQoYWxpZ25tZW50KSkKKyAgICAgICAgICAgICAgICBtb3ZfcihB
Uk06OnIwLCBBUk06OnIwKTsKKworICAgICAgICAgICAgcmV0dXJuIGxhYmVsKCk7CisgICAgICAg
IH0KKworICAgICAgICBKbXBTcmMgam1wKENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7Cisg
ICAgICAgICAgICBpbnQgcyA9IHNpemUoKTsKKyAgICAgICAgICAgIGxkcl91bl9pbW0oQVJNOjpw
YywgMHhmZmZmZmZmZiwgY2MpOworICAgICAgICAgICAgbV9qdW1wcy5hcHBlbmQocyk7CisgICAg
ICAgICAgICByZXR1cm4gSm1wU3JjKHMpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCogZXhl
Y3V0YWJsZUNvcHkoRXhlY3V0YWJsZVBvb2wqIGFsbG9jYXRvcik7CisKKyAgICAgICAgLy8gUGF0
Y2hpbmcgaGVscGVycworCisgICAgICAgIHN0YXRpYyBBUk1Xb3JkKiBnZXRMZHJJbW1BZGRyZXNz
KEFSTVdvcmQqIGluc24sIHVpbnQzMl90KiBjb25zdFBvb2wgPSAwKTsKKyAgICAgICAgc3RhdGlj
IHZvaWQgbGlua0JyYW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwgdm9pZCogdG8pOworCisg
ICAgICAgIHN0YXRpYyB2b2lkIHBhdGNoUG9pbnRlckludGVybmFsKGludHB0cl90IGZyb20sIHZv
aWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBBUk1Xb3JkKiBpbnNuID0gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oZnJvbSk7CisgICAgICAgICAgICBBUk1Xb3JkKiBhZGRyID0gZ2V0
TGRySW1tQWRkcmVzcyhpbnNuKTsKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1h
a2VXcml0YWJsZSB1bnByb3RlY3QoYWRkciwgc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgICAg
ICphZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPih0byk7CisgICAgICAgIH0KKworICAg
ICAgICBzdGF0aWMgQVJNV29yZCBwYXRjaENvbnN0UG9vbExvYWQoQVJNV29yZCBsb2FkLCBBUk1X
b3JkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICB2YWx1ZSA9ICh2YWx1ZSA8PCAxKSAr
IDE7CisgICAgICAgICAgICBBU1NFUlQoISh2YWx1ZSAmIH4weGZmZikpOworICAgICAgICAgICAg
cmV0dXJuIChsb2FkICYgfjB4ZmZmKSB8IHZhbHVlOworICAgICAgICB9CisKKyAgICAgICAgc3Rh
dGljIHZvaWQgcGF0Y2hDb25zdFBvb2xMb2FkKHZvaWQqIGxvYWRBZGRyLCB2b2lkKiBjb25zdFBv
b2xBZGRyKTsKKworICAgICAgICAvLyBQYXRjaCBwb2ludGVycworCisgICAgICAgIHN0YXRpYyB2
b2lkIHBhdGNoUG9pbnRlcih2b2lkKiBjb2RlLCBKbXBEc3QgZnJvbSwgdm9pZCogdG8pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGNvZGUpICsgZnJvbS5tX29mZnNldCwgdG8pOworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIHZvaWQgcmVwYXRjaEludDMyKHZvaWQqIGZyb20sIGludDMyX3QgdG8pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHJlaW50ZXJwcmV0X2Nhc3Q8
aW50cHRyX3Q+KGZyb20pLCByZWludGVycHJldF9jYXN0PHZvaWQqPih0bykpOworICAgICAgICB9
CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVwYXRjaFBvaW50ZXIodm9pZCogZnJvbSwgdm9pZCog
dG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pLCB0byk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0
aWMgdm9pZCByZXBhdGNoTG9hZFB0clRvTEVBKHZvaWQqIGZyb20pCisgICAgICAgIHsKKyAgICAg
ICAgICAgIC8vIE9uIGFybSwgdGhpcyBpcyBhIHBhdGNoIGZyb20gTERSIHRvIEFERC4gSXQgaXMg
cmVzdHJpY3RlZCBjb252ZXJzaW9uLAorICAgICAgICAgICAgLy8gZnJvbSBzcGVjaWFsIGNhc2Ug
dG8gc3BlY2lhbCBjYXNlLCBhbHRvdWdoIGVub3VnaCBmb3IgaXRzIHB1cnBvc2UKKyAgICAgICAg
ICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihmcm9tKTsKKyAg
ICAgICAgICAgIEFTU0VSVCgoKmluc24gJiAweDBmZjAwZjAwKSA9PSAweDA1OTAwMDAwKTsKKwor
ICAgICAgICAgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJvdGVjdChp
bnNuLCBzaXplb2YoQVJNV29yZCkpOworICAgICAgICAgICAgKmluc24gPSAoKmluc24gJiAweGYw
MGZmMGZmKSB8IDB4MDI4MDAwMDA7CisgICAgICAgIH0KKworICAgICAgICAvLyBMaW5rZXJzCisK
KyAgICAgICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQorICAgICAgICB7
CisgICAgICAgICAgICBBUk1Xb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4o
bV9idWZmZXIuZGF0YSgpKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKKyAg
ICAgICAgICAgICpnZXRMZHJJbW1BZGRyZXNzKGluc24sIG1fYnVmZmVyLnBvb2xBZGRyKCkpID0g
c3RhdGljX2Nhc3Q8QVJNV29yZD4odG8ubV9vZmZzZXQpOworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQor
ICAgICAgICB7CisgICAgICAgICAgICBsaW5rQnJhbmNoKGNvZGUsIGZyb20sIHRvKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJlbGlua0p1bXAodm9pZCogZnJvbSwgdm9pZCog
dG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHBhdGNoUG9pbnRlckludGVybmFsKHJlaW50ZXJw
cmV0X2Nhc3Q8aW50cHRyX3Q+KGZyb20pIC0gc2l6ZW9mKEFSTVdvcmQpLCB0byk7CisgICAgICAg
IH0KKworICAgICAgICBzdGF0aWMgdm9pZCBsaW5rQ2FsbCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJv
bSwgdm9pZCogdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIGxpbmtCcmFuY2goY29kZSwgZnJv
bSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgcmVsaW5rQ2FsbCh2b2lk
KiBmcm9tLCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcmVsaW5rSnVtcChmcm9t
LCB0byk7CisgICAgICAgIH0KKworICAgICAgICAvLyBBZGRyZXNzIG9wZXJhdGlvbnMKKworICAg
ICAgICBzdGF0aWMgdm9pZCogZ2V0UmVsb2NhdGVkQWRkcmVzcyh2b2lkKiBjb2RlLCBKbXBTcmMg
anVtcCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9p
ZCo+KHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGNvZGUpICsganVtcC5tX29mZnNldCAvIHNp
emVvZihBUk1Xb3JkKSArIDEpOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQqIGdl
dFJlbG9jYXRlZEFkZHJlc3Modm9pZCogY29kZSwgSm1wRHN0IGxhYmVsKQorICAgICAgICB7Cisg
ICAgICAgICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4ocmVpbnRlcnByZXRfY2Fz
dDxBUk1Xb3JkKj4oY29kZSkgKyBsYWJlbC5tX29mZnNldCAvIHNpemVvZihBUk1Xb3JkKSk7Cisg
ICAgICAgIH0KKworICAgICAgICAvLyBBZGRyZXNzIGRpZmZlcmVuY2VzCisKKyAgICAgICAgc3Rh
dGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1wU3JjIHRv
KQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gKHRvLm1fb2Zmc2V0ICsgc2l6ZW9mKEFS
TVdvcmQpKSAtIGZyb20ubV9vZmZzZXQ7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgaW50
IGdldERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKEptcERzdCBmcm9tLCBKbXBEc3QgdG8pCisgICAg
ICAgIHsKKyAgICAgICAgICAgIHJldHVybiB0by5tX29mZnNldCAtIGZyb20ubV9vZmZzZXQ7Cisg
ICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdW5zaWduZWQgZ2V0Q2FsbFJldHVybk9mZnNldChK
bXBTcmMgY2FsbCkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIGNhbGwubV9vZmZzZXQg
KyBzaXplb2YoQVJNV29yZCk7CisgICAgICAgIH0KKworICAgICAgICAvLyBIYW5kbGUgaW1tZWRp
YXRlcworCisgICAgICAgIHN0YXRpYyBBUk1Xb3JkIGdldE9wMkJ5dGUoQVJNV29yZCBpbW0pCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChpbW0gPD0gMHhmZik7CisgICAgICAgICAgICBy
ZXR1cm4gT1AyX0lNTWggfCAoaW1tICYgMHgwZikgfCAoKGltbSAmIDB4ZjApIDw8IDQpIDsKKyAg
ICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1Xb3JkIGdldE9wMihBUk1Xb3JkIGltbSk7Cisg
ICAgICAgIEFSTVdvcmQgZ2V0SW1tKEFSTVdvcmQgaW1tLCBpbnQgdG1wUmVnLCBib29sIGludmVy
dCA9IGZhbHNlKTsKKyAgICAgICAgdm9pZCBtb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVzdCk7
CisKKyAgICAgICAgLy8gTWVtb3J5IGxvYWQvc3RvcmUgaGVscGVycworCisgICAgICAgIHZvaWQg
ZGF0YVRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklE
IGJhc2UsIGludDMyX3Qgb2Zmc2V0KTsKKyAgICAgICAgdm9pZCBiYXNlSW5kZXhUcmFuc2ZlcjMy
KGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBSZWdpc3Rl
cklEIGluZGV4LCBpbnQgc2NhbGUsIGludDMyX3Qgb2Zmc2V0KTsKKworICAgICAgICAvLyBDb25z
dGFudCBwb29sIGhuYWRsZXJzCisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgcGxhY2VDb25zdFBv
b2xCYXJyaWVyKGludCBvZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIG9mZnNldCA9IChv
ZmZzZXQgLSBzaXplb2YoQVJNV29yZCkpID4+IDI7CisgICAgICAgICAgICBBU1NFUlQoKG9mZnNl
dCA8PSBCT0ZGU0VUX01BWCAmJiBvZmZzZXQgPj0gQk9GRlNFVF9NSU4pKTsKKyAgICAgICAgICAg
IHJldHVybiBBTCB8IEIgfCAob2Zmc2V0ICYgQlJBTkNIX01BU0spOworICAgICAgICB9CisKKyAg
ICBwcml2YXRlOgorICAgICAgICBBUk1Xb3JkIFJNKGludCByZWcpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1cm4gcmVnOwor
ICAgICAgICB9CisKKyAgICAgICAgQVJNV29yZCBSUyhpbnQgcmVnKQorICAgICAgICB7CisgICAg
ICAgICAgICBBU1NFUlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgcmV0dXJuIHJlZyA8
PCA4OworICAgICAgICB9CisKKyAgICAgICAgQVJNV29yZCBSRChpbnQgcmVnKQorICAgICAgICB7
CisgICAgICAgICAgICBBU1NFUlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgcmV0dXJu
IHJlZyA8PCAxMjsKKyAgICAgICAgfQorCisgICAgICAgIEFSTVdvcmQgUk4oaW50IHJlZykKKyAg
ICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAg
IHJldHVybiByZWcgPDwgMTY7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBn
ZXRDb25kaXRpb25hbEZpZWxkKEFSTVdvcmQgaSkKKyAgICAgICAgeworICAgICAgICAgICAgcmV0
dXJuIGkgJiAweGYwMDAwMDAwOworICAgICAgICB9CisKKyAgICAgICAgaW50IGdlbkludChpbnQg
cmVnLCBBUk1Xb3JkIGltbSwgYm9vbCBwb3NpdGl2ZSk7CisKKyAgICAgICAgQVJNQnVmZmVyIG1f
YnVmZmVyOworICAgICAgICBKdW1wcyBtX2p1bXBzOworICAgIH07CisKK30gLy8gbmFtZXNwYWNl
IEpTQworCisjZW5kaWYgLy8gRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oQVJNKQorCisj
ZW5kaWYgLy8gQVJNQXNzZW1ibGVyX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCmluZGV4IGNmOTQ2NzcuLjFmMDA1NzYgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgKKysr
IGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaApAQCAt
MzIyLDYgKzMyMiwxMSBAQCBwdWJsaWM6CiAgICAgICAgICAgICByZXR1cm4gQ2FsbChqdW1wLm1f
am1wLCBMaW5rYWJsZSk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRj
aCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAg
ICAgICB9CisKICAgICBwcml2YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgICAgIEZs
YWdzIG1fZmxhZ3M7CkBAIC0zNTgsNiArMzYzLDExIEBAIHB1YmxpYzoKICAgICAgICAgICAgIG1h
c20tPm1fYXNzZW1ibGVyLmxpbmtKdW1wKG1fam1wLCBsYWJlbC5tX2xhYmVsKTsKICAgICAgICAg
fQogCisgICAgICAgIHZvaWQgZW5hYmxlTGF0ZVBhdGNoKCkKKyAgICAgICAgeworICAgICAgICAg
ICAgbV9qbXAuZW5hYmxlTGF0ZVBhdGNoKCk7CisgICAgICAgIH0KKwogICAgIHByaXZhdGU6CiAg
ICAgICAgIEptcFNyYyBtX2ptcDsKICAgICB9OwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXIuaAppbmRleCA0M2QyN2U3Li45ZTFjNWQzIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaApAQCAtMzQsNiArMzQsMTAgQEAKICNpbmNsdWRlICJN
YWNyb0Fzc2VtYmxlckFSTXY3LmgiCiBuYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBNYWNyb0Fzc2Vt
YmxlckFSTXY3IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKIAorI2VsaWYgUExBVEZPUk0oQVJNKQor
I2luY2x1ZGUgIk1hY3JvQXNzZW1ibGVyQVJNLmgiCituYW1lc3BhY2UgSlNDIHsgdHlwZWRlZiBN
YWNyb0Fzc2VtYmxlckFSTSBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CisKICNlbGlmIFBMQVRGT1JN
KFg4NikKICNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlclg4Ni5oIgogbmFtZXNwYWNlIEpTQyB7IHR5
cGVkZWYgTWFjcm9Bc3NlbWJsZXJYODYgTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OwpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaApuZXcgZmlsZSBtb2RlIDEwMDY0
NAppbmRleCAwMDAwMDAwLi5iNDA2OWFkCi0tLSAvZGV2L251bGwKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKQEAgLTAsMCArMSw3NzggQEAKKy8qCisg
KiBDb3B5cmlnaHQgKEMpIDIwMDggQXBwbGUgSW5jLgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVu
aXZlcnNpdHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlz
dHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0
aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZv
bGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9m
IHNvdXJjZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuIFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUg
YWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFu
ZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFu
ZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoK
KyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgSU5DLiBgYEFTIElTJycgQU5E
IEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLCBUSEUKKyAqIElNUExJRUQgV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJ
VFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUgorICogUFVSUE9TRSBBUkUgRElTQ0xBSU1F
RC4gIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIElOQy4gT1IKKyAqIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAorICog
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIE1hY3JvQXNzZW1ibGVyQVJN
X2gKKyNkZWZpbmUgTWFjcm9Bc3NlbWJsZXJBUk1faAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3Jt
Lmg+CisKKyNpZiBFTkFCTEUoQVNTRU1CTEVSKSAmJiBQTEFURk9STShBUk0pCisKKyNpbmNsdWRl
ICJBUk1Bc3NlbWJsZXIuaCIKKyNpbmNsdWRlICJBYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgiCisK
K25hbWVzcGFjZSBKU0MgeworCitjbGFzcyBNYWNyb0Fzc2VtYmxlckFSTSA6IHB1YmxpYyBBYnN0
cmFjdE1hY3JvQXNzZW1ibGVyPEFSTUFzc2VtYmxlcj4geworcHVibGljOgorICAgIGVudW0gQ29u
ZGl0aW9uIHsKKyAgICAgICAgRXF1YWwgPSBBUk1Bc3NlbWJsZXI6OkVRLAorICAgICAgICBOb3RF
cXVhbCA9IEFSTUFzc2VtYmxlcjo6TkUsCisgICAgICAgIEFib3ZlID0gQVJNQXNzZW1ibGVyOjpI
SSwKKyAgICAgICAgQWJvdmVPckVxdWFsID0gQVJNQXNzZW1ibGVyOjpDUywKKyAgICAgICAgQmVs
b3cgPSBBUk1Bc3NlbWJsZXI6OkNDLAorICAgICAgICBCZWxvd09yRXF1YWwgPSBBUk1Bc3NlbWJs
ZXI6OkxTLAorICAgICAgICBHcmVhdGVyVGhhbiA9IEFSTUFzc2VtYmxlcjo6R1QsCisgICAgICAg
IEdyZWF0ZXJUaGFuT3JFcXVhbCA9IEFSTUFzc2VtYmxlcjo6R0UsCisgICAgICAgIExlc3NUaGFu
ID0gQVJNQXNzZW1ibGVyOjpMVCwKKyAgICAgICAgTGVzc1RoYW5PckVxdWFsID0gQVJNQXNzZW1i
bGVyOjpMRSwKKyAgICAgICAgT3ZlcmZsb3cgPSBBUk1Bc3NlbWJsZXI6OlZTLAorICAgICAgICBT
aWduZWQgPSBBUk1Bc3NlbWJsZXI6Ok1JLAorICAgICAgICBaZXJvID0gQVJNQXNzZW1ibGVyOjpF
USwKKyAgICAgICAgTm9uWmVybyA9IEFSTUFzc2VtYmxlcjo6TkUKKyAgICB9OworCisgICAgZW51
bSBEb3VibGVDb25kaXRpb24geworICAgICAgICBEb3VibGVFcXVhbCwgLy9GSVhNRQorICAgICAg
ICBEb3VibGVOb3RFcXVhbCwgLy9GSVhNRQorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiwgLy9G
SVhNRQorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIC8vRklYTUUKKyAgICAgICAg
RG91YmxlTGVzc1RoYW4sIC8vRklYTUUKKyAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsLCAv
L0ZJWE1FCisgICAgfTsKKworICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRl
clJlZ2lzdGVyID0gQVJNOjpzcDsKKworICAgIHN0YXRpYyBjb25zdCBTY2FsZSBTY2FsZVB0ciA9
IFRpbWVzRm91cjsKKworICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29uc3QKKyAg
ICB7CisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9CisKKyAgICBib29sIHN1cHBvcnRzRmxv
YXRpbmdQb2ludFRydW5jYXRlKCkgY29uc3QKKyAgICB7CisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICB9CisKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAg
ICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNzKQorICAgIHsK
KyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICBhZGQzMihpbW0sIEFS
TTo6UzEpOworICAgICAgICBzdG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAgIH0KKworICAg
IHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5hZGRzX3IoZGVzdCwgZGVzdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKGltbS5tX3Zh
bHVlLCBBUk06OlMwKSk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihBZGRyZXNzIHNyYywgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgQVJNOjpTMSk7CisgICAg
ICAgIGFkZDMyKEFSTTo6UzEsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFu
ZHNfcihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIoSW1tMzIgaW1t
LCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBUk1Xb3JkIHcgPSBtX2Fzc2VtYmxl
ci5nZXRJbW0oaW1tLm1fdmFsdWUsIEFSTTo6UzAsIHRydWUpOworICAgICAgICBpZiAodyAmIEFS
TUFzc2VtYmxlcjo6T1AyX0lOVl9JTU0pCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5iaWNzX3Io
ZGVzdCwgZGVzdCwgdyAmIH5BUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKTsKKyAgICAgICAgZWxz
ZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kc19yKGRlc3QsIGRlc3QsIHcpOworICAgIH0K
KworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJsZXIubHNsKGRlc3QsIGlt
bS5tX3ZhbHVlICYgMHgxZikpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoUmVnaXN0ZXJJ
RCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdnNfcihkZXN0LCBtX2Fzc2VtYmxlci5sc2xfcihkZXN0LCBzaGlmdF9hbW91bnQpKTsK
KyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBpZiAoc3JjID09IGRlc3QpIHsKKyAgICAgICAgICAgIG1vdmUoc3Jj
LCBBUk06OlMwKTsKKyAgICAgICAgICAgIHNyYyA9IEFSTTo6UzA7CisgICAgICAgIH0KKyAgICAg
ICAgbV9hc3NlbWJsZXIubXVsc19yKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9p
ZCBtdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBtb3ZlKGltbSwgQVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLm11bHNf
cihkZXN0LCBzcmMsIEFSTTo6UzApOworICAgIH0KKworICAgIHZvaWQgbm90MzIoUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXZuc19yKGRlc3QsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3Jyc19yKGRlc3QsIGRlc3QsIHNyYyk7CisgICAg
fQorCisgICAgdm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAg
ICAgICAgbV9hc3NlbWJsZXIub3Jyc19yKGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVyLmdldEltbShp
bW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0MzIoUmVnaXN0
ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdnNfcihkZXN0LCBtX2Fzc2VtYmxlci5hc3JfcihkZXN0LCBzaGlmdF9hbW91bnQp
KTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92c19yKGRlc3QsIG1fYXNzZW1ibGVyLmFz
cihkZXN0LCBpbW0ubV92YWx1ZSAmIDB4MWYpKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKFJl
Z2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5zdWJzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuc3Vic19y
KGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOwor
ICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAgICAgIHN1YjMyKGltbSwg
QVJNOjpTMSk7CisgICAgICAgIHN0b3JlMzIoQVJNOjpTMSwgYWRkcmVzcyk7CisgICAgfQorCisg
ICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKHNyYywgQVJNOjpTMSk7CisgICAgICAgIHN1YjMyKEFSTTo6UzEsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcnNfcihkZXN0LCBkZXN0LCBzcmMpOworICAg
IH0KKworICAgIHZvaWQgeG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5lb3JzX3IoZGVzdCwgZGVzdCwgbV9hc3NlbWJsZXIuZ2V0SW1t
KGltbS5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgfQorCisgICAgdm9pZCBsb2FkMzIoSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmRhdGFUcmFuc2ZlcjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5v
ZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5iYXNlSW5kZXhUcmFuc2Zl
cjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgc3RhdGljX2Nhc3Q8
aW50PihhZGRyZXNzLnNjYWxlKSwgYWRkcmVzcy5vZmZzZXQpOworICAgIH0KKworICAgIERhdGFM
YWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRyZXNzLCBSZWdp
c3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFiZWwodGhpcyk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpTMCwgMCk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmR0cl91cih0cnVlLCBkZXN0LCBhZGRyZXNzLmJhc2UsIEFSTTo6UzApOworICAg
ICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQdHJXaXRoUGF0
Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IExhYmVsIGxhYmVsKHRoaXMpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGVzdCk7CisgICAg
ICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihCYXNlSW5kZXggYWRk
cmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRkX3Io
QVJNOjpTMCwgYWRkcmVzcy5iYXNlLCBtX2Fzc2VtYmxlci5sc2woYWRkcmVzcy5pbmRleCwgYWRk
cmVzcy5zY2FsZSkpOworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQ+PTApCisgICAgICAgICAg
ICBtX2Fzc2VtYmxlci5sZHJoX3UoZGVzdCwgQVJNOjpTMCwgQVJNQXNzZW1ibGVyOjpnZXRPcDJC
eXRlKGFkZHJlc3Mub2Zmc2V0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1i
bGVyLmxkcmhfZChkZXN0LCBBUk06OlMwLCBBUk1Bc3NlbWJsZXI6OmdldE9wMkJ5dGUoLWFkZHJl
c3Mub2Zmc2V0KSk7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldpdGhBZGRyZXNz
T2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAg
ICAgIERhdGFMYWJlbDMyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRy
X3VuX2ltbShBUk06OlMwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3VyKGZhbHNlLCBz
cmMsIGFkZHJlc3MuYmFzZSwgQVJNOjpTMCk7CisgICAgICAgIHJldHVybiBkYXRhTGFiZWw7Cisg
ICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3Mg
YWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRhdGFUcmFuc2ZlcjMyKGZhbHNl
LCBzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQg
c3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAgeworICAgICAg
ICBtX2Fzc2VtYmxlci5iYXNlSW5kZXhUcmFuc2ZlcjMyKGZhbHNlLCBzcmMsIGFkZHJlc3MuYmFz
ZSwgYWRkcmVzcy5pbmRleCwgc3RhdGljX2Nhc3Q8aW50PihhZGRyZXNzLnNjYWxlKSwgYWRkcmVz
cy5vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIEltcGxpY2l0
QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIEFSTTo6UzEpOworICAg
ICAgICBzdG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUz
MihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzKSwgQVJNOjpTMCk7
CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KGZhbHNlLCBzcmMsIEFSTTo6UzAsIDApOworICAg
IH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRk
cmVzcyksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKGltbS5tX3ZhbHVl
LCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UoZmFsc2UsIEFSTTo6UzEsIEFS
TTo6UzAsIDApOworICAgIH0KKworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIG1fYXNzZW1ibGVyLnBvcF9yKGRlc3QpOworICAgIH0KKworICAgIHZvaWQgcHVz
aChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfcihzcmMp
OworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAg
ICBsb2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAgICAgIHB1c2goQVJNOjpTMSk7CisgICAg
fQorCisgICAgdm9pZCBwdXNoKEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIG1vdmUoaW1tLCBB
Uk06OlMwKTsKKyAgICAgICAgcHVzaChBUk06OlMwKTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUo
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5t
b3ZlSW1tKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1vdmUoUmVnaXN0
ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1v
dl9yKGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEltbVB0ciBpbW0sIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRlc3QsIG1fYXNz
ZW1ibGVyLmdldEltbShyZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGltbS5tX3ZhbHVlKSwgQVJN
OjpTMCkpOworICAgIH0KKworICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEsIFJlZ2lzdGVy
SUQgcmVnMikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKEFSTTo6UzAsIHJlZzEp
OworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihyZWcxLCByZWcyKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubW92X3IocmVnMiwgQVJNOjpTMCk7CisgICAgfQorCisgICAgdm9pZCBzaWduRXh0ZW5k
MzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAg
aWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOworICAgIH0KKwor
ICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAgIG1vdmUoc3Jj
LCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdp
c3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxl
ci5jbXBfcihsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmpt
cChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0Lm1fdmFsdWUs
IEFSTTo6UzApKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRp
dGlvbihjb25kKSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQs
IFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihy
aWdodCwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBsZWZ0LCBBUk06
OlMxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNz
IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgQVJN
OjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7Cisg
ICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBJ
bW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06OlMxKTsKKyAgICAg
ICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTTo6UzEsIHJpZ2h0KTsKKyAgICB9CisKKyAgICBK
dW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1tMzIgcmlnaHQp
CisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBi
cmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gx
NihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAg
eworICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShsZWZ0
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFD
SEVEKCk7CisgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gx
NihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsKKyAg
ICAgICAgbG9hZDE2KGxlZnQsIEFSTTo6UzApOworICAgICAgICBtb3ZlKHJpZ2h0LCBBUk06OlMx
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IoQVJNOjpTMCwgQVJNOjpTMSk7CisgICAgICAg
IHJldHVybiBtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAg
ICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCByZWcsIFJlZ2lz
dGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJvKSB8fCAoY29u
ZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnRzdF9yKHJlZywgbWFzayk7Cisg
ICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsK
KyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJ
RCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBBU1NFUlQoKGNv
bmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBBUk1Xb3JkIHcgPSBt
X2Fzc2VtYmxlci5nZXRJbW0obWFzay5tX3ZhbHVlLCBBUk06OlMwLCB0cnVlKTsKKyAgICAgICAg
aWYgKHcgJiBBUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKQorICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuYmljc19yKEFSTTo6UzAsIHJlZywgdyAmIH5BUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKTsK
KyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudHN0X3IocmVnLCB3KTsKKyAg
ICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOwor
ICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNzIGFk
ZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBsb2FkMzIoYWRk
cmVzcywgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29uZCwgQVJNOjpT
MSwgbWFzayk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0aW9uIGNvbmQs
IEJhc2VJbmRleCBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAgIHsKKyAgICAg
ICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoVGVzdDMy
KGNvbmQsIEFSTTo6UzEsIG1hc2spOworICAgIH0KKworICAgIEp1bXAganVtcCgpCisgICAgewor
ICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQorCisgICAgdm9p
ZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbW92ZSh0YXJnZXQsIEFS
TTo6cGMpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3MpCisgICAgewor
ICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpwYyk7CisgICAgfQorCisgICAgSnVtcCBicmFu
Y2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2ln
bmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGFk
ZDMyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1D
b25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMyKENvbmRpdGlv
biBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VS
VCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGFkZDMyKGltbSwgZGVzdCk7CisgICAg
ICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAg
ICB9CisKKyAgICB2b2lkIG11bGwzMihSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVySUQgc3JjMiwg
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYzEgPT0gZGVzdCkgeworICAg
ICAgICAgICAgbW92ZShzcmMxLCBBUk06OlMwKTsKKyAgICAgICAgICAgIHNyYzEgPSBBUk06OlMw
OworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm11bGxfcihBUk06OlMxLCBkZXN0LCBz
cmMyLCBzcmMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IoQVJNOjpTMSwgbV9hc3NlbWJs
ZXIuYXNyKGRlc3QsIDMxKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwzMihDb25kaXRp
b24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9
PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25kID09IE92ZXJm
bG93KSB7CisgICAgICAgICAgICBtdWxsMzIoc3JjLCBkZXN0LCBkZXN0KTsKKyAgICAgICAgICAg
IGNvbmQgPSBOb25aZXJvOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG11
bDMyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1D
b25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMyKENvbmRpdGlv
biBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAg
eworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09IFNpZ25lZCkg
fHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBpZiAoY29u
ZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbW92ZShpbW0sIEFSTTo6UzApOworICAgICAg
ICAgICAgbXVsbDMyKEFSTTo6UzAsIHNyYywgZGVzdCk7CisgICAgICAgICAgICBjb25kID0gTm9u
WmVybzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtdWwzMihpbW0sIHNy
YywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRp
b24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRpdGlvbiBjb25k
LCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJU
KChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8p
IHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgc3ViMzIoc3JjLCBkZXN0KTsKKyAgICAg
ICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAg
IH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMyIGltbSwgUmVn
aXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8
fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8p
KTsKKyAgICAgICAgc3ViMzIoaW1tLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3Nl
bWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKworICAgIHZvaWQgYnJlYWtw
b2ludCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KDApOworICAgIH0KKworICAg
IENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAg
cmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENhbGw6OkxpbmthYmxlTmVhcik7CisgICAg
fQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgcHJl
cGFyZUNhbGwoKTsKKyAgICAgICAgbW92ZShBUk06OnBjLCB0YXJnZXQpOworICAgICAgICBKbXBT
cmMgam1wU3JjOworICAgICAgICByZXR1cm4gQ2FsbChqbXBTcmMsIENhbGw6Ok5vbmUpOworICAg
IH0KKworICAgIHZvaWQgY2FsbChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBjYWxs
MzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgfQorCisgICAgdm9pZCByZXQo
KQorICAgIHsKKyAgICAgICAgbW92ZShBUk06OmxyLCBBUk06OnBjKTsKKyAgICB9CisKKyAgICB2
b2lkIHNldDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKGxl
ZnQsIHJpZ2h0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVy
OjpnZXRPcDIoMCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJs
ZXI6OmdldE9wMigxKSwgQVJNQ29uZGl0aW9uKGNvbmQpKTsKKyAgICB9CisKKyAgICB2b2lkIHNl
dDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0LCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCBtX2Fzc2Vt
Ymxlci5nZXRJbW0ocmlnaHQubV92YWx1ZSwgQVJNOjpTMCkpOworICAgICAgICBtX2Fzc2VtYmxl
ci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6OmdldE9wMigwKSk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDEpLCBBUk1Db25kaXRpb24oY29u
ZCkpOworICAgIH0KKworICAgIHZvaWQgc2V0VGVzdDMyKENvbmRpdGlvbiBjb25kLCBBZGRyZXNz
IGFkZHJlc3MsIEltbTMyIG1hc2ssIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGxv
YWQzMihhZGRyZXNzLCBBUk06OlMxKTsKKyAgICAgICAgaWYgKG1hc2subV92YWx1ZSA9PSAtMSkK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKDAsIEFSTTo6UzEpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICBtX2Fzc2VtYmxlci50c3RfcihBUk06OlMxLCBtX2Fzc2VtYmxlci5nZXRJ
bW0obWFzay5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRl
c3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDApKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3Io
ZGVzdCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIoMSksIEFSTUNvbmRpdGlvbihjb25kKSk7CisgICAg
fQorCisgICAgdm9pZCBhZGQzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklE
IGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRfcihkZXN0LCBzcmMsIG1fYXNz
ZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQg
YWRkMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1f
cHRyKSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KHRydWUsIEFSTTo6UzEs
IEFSTTo6UzEsIDApOworICAgICAgICBhZGQzMihpbW0sIEFSTTo6UzEpOworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciks
IEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShmYWxzZSwgQVJNOjpTMSwgQVJN
OjpTMCwgMCk7CisgICAgfQorCisgICAgdm9pZCBzdWIzMihJbW0zMiBpbW0sIEFic29sdXRlQWRk
cmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVy
cHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9wdHIpLCBBUk06OlMxKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZHRyX3UodHJ1ZSwgQVJNOjpTMSwgQVJNOjpTMSwgMCk7CisgICAgICAgIHN1YjMy
KGltbSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRf
Y2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1fcHRyKSwgQVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLmR0cl91KGZhbHNlLCBBUk06OlMxLCBBUk06OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lk
IGxvYWQzMih2b2lkKiBhZGRyZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcyksIEFS
TTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdSh0cnVlLCBkZXN0LCBBUk06OlMwLCAw
KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNvbHV0ZUFk
ZHJlc3MgbGVmdCwgUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0
Lm1fcHRyLCBBUk06OlMxKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTTo6UzEs
IHJpZ2h0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBBYnNv
bHV0ZUFkZHJlc3MgbGVmdCwgSW1tMzIgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVm
dC5tX3B0ciwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMx
LCByaWdodCk7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKCkKKyAgICB7CisgICAgICAgIHByZXBh
cmVDYWxsKCk7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcCgpLCBDYWxsOjpM
aW5rYWJsZSk7CisgICAgfQorCisgICAgQ2FsbCB0YWlsUmVjdXJzaXZlQ2FsbCgpCisgICAgewor
ICAgICAgICByZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKGp1bXAoKSk7CisgICAgfQorCisgICAg
Q2FsbCBtYWtlVGFpbFJlY3Vyc2l2ZUNhbGwoSnVtcCBvbGRKdW1wKQorICAgIHsKKyAgICAgICAg
cmV0dXJuIENhbGw6OmZyb21UYWlsSnVtcChvbGRKdW1wKTsKKyAgICB9CisKKyAgICBEYXRhTGFi
ZWxQdHIgbW92ZVdpdGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBEYXRhTGFiZWxQdHIgZGF0YUxhYmVsKHRoaXMpOworICAgICAgICBt
X2Fzc2VtYmxlci5sZHJfdW5faW1tKGRlc3QsIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oaW5p
dGlhbFZhbHVlLm1fdmFsdWUpKTsKKyAgICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisK
KyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBs
ZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1tUHRyIGluaXRpYWxSaWdodFZhbHVlID0g
SW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0
aWFsUmlnaHRWYWx1ZSwgQVJNOjpTMSk7CisgICAgICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNv
bmQsIGxlZnQsIEFSTTo6UzEpOworICAgICAgICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAg
ICAgICByZXR1cm4ganVtcDsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFB0cldpdGhQYXRjaChD
b25kaXRpb24gY29uZCwgQWRkcmVzcyBsZWZ0LCBEYXRhTGFiZWxQdHImIGRhdGFMYWJlbCwgSW1t
UHRyIGluaXRpYWxSaWdodFZhbHVlID0gSW1tUHRyKDApKQorICAgIHsKKyAgICAgICAgbG9hZDMy
KGxlZnQsIEFSTTo6UzEpOworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRp
YWxSaWdodFZhbHVlLCBBUk06OlMwKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29u
ZCwgQVJNOjpTMCwgQVJNOjpTMSk7CisgICAgICAgIGp1bXAuZW5hYmxlTGF0ZVBhdGNoKCk7Cisg
ICAgICAgIHJldHVybiBqdW1wOworICAgIH0KKworICAgIERhdGFMYWJlbFB0ciBzdG9yZVB0cldp
dGhQYXRjaChJbW1QdHIgaW5pdGlhbFZhbHVlLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRp
YWxWYWx1ZSwgQVJNOjpTMSk7CisgICAgICAgIHN0b3JlMzIoQVJNOjpTMSwgYWRkcmVzcyk7Cisg
ICAgICAgIHJldHVybiBkYXRhTGFiZWw7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3Jl
UHRyV2l0aFBhdGNoKEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgcmV0
dXJuIHN0b3JlUHRyV2l0aFBhdGNoKEltbVB0cigwKSwgYWRkcmVzcyk7CisgICAgfQorCisgICAg
LyogRlAgKi8KKyAgICB2b2lkIGxvYWREb3VibGUoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOwor
ICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIH0KKworICAgIHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGlj
aXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKGFkZHJlc3MpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBV
TlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0K
KworICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAg
ICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVz
dCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgc3Vi
RG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBzdWJEb3VibGUoQWRk
cmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFN
KHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAg
ICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICB9CisKKyAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2
b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFS
QU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIEp1
bXAgYnJhbmNoRG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwg
RlBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOwor
ICAgICAgICBVTlVTRURfUEFSQU0obGVmdCk7CisgICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7
CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICByZXR1cm4ganVtcCgpOwor
ICAgIH0KKworICAgIC8vIFRydW5jYXRlcyAnc3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2Vz
IHRoZSByZXN1bHRpbmcgJ2Rlc3QnLgorICAgIC8vIElmIHRoZSByZXN1bHQgaXMgbm90IHJlcHJl
c2VudGFibGUgYXMgYSAzMiBiaXQgdmFsdWUsIGJyYW5jaC4KKyAgICAvLyBNYXkgYWxzbyBicmFu
Y2ggZm9yIHNvbWUgdmFsdWVzIHRoYXQgYXJlIHJlcHJlc2VudGFibGUgaW4gMzIgYml0cworICAg
IC8vIChzcGVjaWZpY2FsbHksIGluIHRoaXMgY2FzZSwgSU5UX01JTikuCisgICAgSnVtcCBicmFu
Y2hUcnVuY2F0ZURvdWJsZVRvSW50MzIoRlBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0
KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJB
TShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBq
dW1wKCk7CisgICAgfQorCitwcm90ZWN0ZWQ6CisgICAgQVJNQXNzZW1ibGVyOjpDb25kaXRpb24g
QVJNQ29uZGl0aW9uKENvbmRpdGlvbiBjb25kKQorICAgIHsKKyAgICAgICAgcmV0dXJuIHN0YXRp
Y19jYXN0PEFSTUFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsKKyAgICB9CisKKyAgICB2b2lk
IHByZXBhcmVDYWxsKCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKDMg
KiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CisKKyAgICAgICAgLy8gUzAgbWln
aHQgYmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcKKyAgICAgICAgbV9hc3NlbWJsZXIuYWRk
X3IoQVJNOjpTMSwgQVJNOjpwYywgQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgMHg0KTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIucHVzaF9yKEFSTTo6UzEpOworICAgIH0KKworICAgIHZvaWQgY2FsbDMy
KFJlZ2lzdGVySUQgYmFzZSwgaW50MzJfdCBvZmZzZXQpCisgICAgeworICAgICAgICBpZiAoYmFz
ZSA9PSBBUk06OnNwKQorICAgICAgICAgICAgb2Zmc2V0ICs9IDQ7CisKKyAgICAgICAgaWYgKG9m
ZnNldCA+PSAwKSB7CisgICAgICAgICAgICBpZiAob2Zmc2V0IDw9IDB4ZmZmKSB7CisgICAgICAg
ICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJf
dSh0cnVlLCBBUk06OnBjLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAgfSBlbHNlIGlmIChv
ZmZzZXQgPD0gMHhmZmZmZikgeworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKEFS
TTo6UzAsIGJhc2UsIEFSTUFzc2VtYmxlcjo6T1AyX0lNTSB8IChvZmZzZXQgPj4gMTIpIHwgKDEw
IDw8IDgpKTsKKyAgICAgICAgICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAgICAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmR0cl91KHRydWUsIEFSTTo6cGMsIEFSTTo6UzAsIG9mZnNldCAmIDB4ZmZm
KTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVJNV29yZCByZWcgPSBt
X2Fzc2VtYmxlci5nZXRJbW0ob2Zmc2V0LCBBUk06OlMwKTsKKyAgICAgICAgICAgICAgICBwcmVw
YXJlQ2FsbCgpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91cih0cnVlLCBBUk06
OnBjLCBiYXNlLCByZWcpOworICAgICAgICAgICAgfQorICAgICAgICB9IGVsc2UgIHsKKyAgICAg
ICAgICAgIG9mZnNldCA9IC1vZmZzZXQ7CisgICAgICAgICAgICBpZiAob2Zmc2V0IDw9IDB4ZmZm
KSB7CisgICAgICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5kdHJfZCh0cnVlLCBBUk06OnBjLCBiYXNlLCBvZmZzZXQpOworICAgICAgICAgICAg
fSBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmZikgeworICAgICAgICAgICAgICAgIG1fYXNzZW1i
bGVyLnN1Yl9yKEFSTTo6UzAsIGJhc2UsIEFSTUFzc2VtYmxlcjo6T1AyX0lNTSB8IChvZmZzZXQg
Pj4gMTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAg
ICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmR0cl9kKHRydWUsIEFSTTo6cGMsIEFSTTo6UzAsIG9m
ZnNldCAmIDB4ZmZmKTsKKyAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgQVJN
V29yZCByZWcgPSBtX2Fzc2VtYmxlci5nZXRJbW0ob2Zmc2V0LCBBUk06OlMwKTsKKyAgICAgICAg
ICAgICAgICBwcmVwYXJlQ2FsbCgpOworICAgICAgICAgICAgICAgIG1fYXNzZW1ibGVyLmR0cl9k
cih0cnVlLCBBUk06OnBjLCBiYXNlLCByZWcpOworICAgICAgICAgICAgfQorICAgICAgICB9Cisg
ICAgfQorCit9OworCit9CisKKyNlbmRpZgorCisjZW5kaWYgLy8gTWFjcm9Bc3NlbWJsZXJBUk1f
aApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKaW5kZXggMGRlNGY3OS4u
ZmJiZTBhNSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCkBAIC0y
MTMsNiArMjEzLDIxIEBAIHByaXZhdGU6CiAjZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KSAmJiBQ
TEFURk9STShJUEhPTkUpCiAgICAgICAgIHN5c19kY2FjaGVfZmx1c2goY29kZSwgc2l6ZSk7CiAg
ICAgICAgIHN5c19pY2FjaGVfaW52YWxpZGF0ZShjb2RlLCBzaXplKTsKKyNlbGlmIFBMQVRGT1JN
KEFSTSkKKyAgICAjaWYgQ09NUElMRVIoR0NDKSAmJiAoR0NDX1ZFUlNJT04gPj0gMzA0MDYpCisg
ICAgICAgIF9fY2xlYXJfY2FjaGUocmVpbnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSksIHJlaW50
ZXJwcmV0X2Nhc3Q8Y2hhcio+KGNvZGUpICsgc2l6ZSk7CisgICAgI2Vsc2UKKyAgICAgICAgY29u
c3QgaW50IHN5c2NhbGwgPSAweGYwMDAyOworICAgICAgICBfX2FzbSBfX3ZvbGF0aWxlICgKKyAg
ICAgICAgICAgICAgICJtb3YgICAgIHIwLCAlMFxuIgorICAgICAgICAgICAgICAgIm1vdiAgICAg
cjEsICUxXG4iCisgICAgICAgICAgICAgICAibW92ICAgICByNywgJTJcbiIKKyAgICAgICAgICAg
ICAgICJtb3YgICAgIHIyLCAjMHgwXG4iCisgICAgICAgICAgICAgICAic3dpICAgICAweDAwMDAw
MDAwXG4iCisgICAgICAgICAgIDoKKyAgICAgICAgICAgOiAgICJyIiAoY29kZSksICJyIiAocmVp
bnRlcnByZXRfY2FzdDxjaGFyKj4oY29kZSkgKyBzaXplKSwgInIiIChzeXNjYWxsKQorICAgICAg
ICAgICA6ICAgInIwIiwgInIxIiwgInI3Iik7CisgICAgI2VuZGlmIC8vIENPTVBJTEVSKEdDQykg
JiYgKEdDQ19WRVJTSU9OID49IDMwNDA2KQogI2Vsc2UKICNlcnJvciAiRXhlY3V0YWJsZUFsbG9j
YXRvcjo6Y2FjaGVGbHVzaCBub3QgaW1wbGVtZW50ZWQgb24gdGhpcyBwbGF0Zm9ybS4iCiAjZW5k
aWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oIGIvSmF2YVNjcmlw
dENvcmUvd3RmL1BsYXRmb3JtLmgKaW5kZXggMTk3Y2FlMC4uNWJmYWNkYyAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvd3RmL1Bs
YXRmb3JtLmgKQEAgLTMxMCw2ICszMTAsNyBAQAogLyogLS1nbnUgb3B0aW9uIG9mIHRoZSBSVkNU
IGNvbXBpbGVyIGFsc28gZGVmaW5lcyBfX0dOVUNfXyAqLwogI2lmIGRlZmluZWQoX19HTlVDX18p
ICYmICFDT01QSUxFUihSVkNUKQogI2RlZmluZSBXVEZfQ09NUElMRVJfR0NDIDEKKyNkZWZpbmUg
R0NDX1ZFUlNJT04gKF9fR05VQ19fICogMTAwMDAgKyBfX0dOVUNfTUlOT1JfXyAqIDEwMCArIF9f
R05VQ19QQVRDSExFVkVMX18pCiAjZW5kaWYKIAogLyogQ09NUElMRVIoTUlOR1cpICovCkBAIC01
NDIsNiArNTQzLDEwIEBACiAgICAgLyogVW5kZXIgZGV2ZWxvcG1lbnQsIHRlbXBvcmFyaWx5IGRp
c2FibGVkIHVudGlsIDE2TWIgbGluayByYW5nZSBsaW1pdCBpbiBhc3NlbWJsZXIgaXMgZml4ZWQu
ICovCiAgICAgI2RlZmluZSBFTkFCTEVfSklUIDAKICAgICAjZGVmaW5lIEVOQUJMRV9KSVRfT1BU
SU1JWkVfTkFUSVZFX0NBTEwgMAorI2VsaWYgUExBVEZPUk0oQVJNKQorICAgIC8qIFVuZGVyIGRl
dmVsb3BtZW50LCB0ZW1wb3JhcmlseSBkaXNhYmxlZC4gKi8KKyAgICAjZGVmaW5lIEVOQUJMRV9K
SVQgMAorICAgICNkZWZpbmUgRU5BQkxFX0pJVF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCAwCiAvKiBU
aGUgSklUIGlzIHRlc3RlZCAmIHdvcmtpbmcgb24geDg2IFdpbmRvd3MgKi8KICNlbGlmIFBMQVRG
T1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKQogICAgICNkZWZpbmUgRU5BQkxFX0pJVCAxCkBAIC01
ODgsNiArNTkzLDcgQEAKICB8fCAoIWRlZmluZWQoRU5BQkxFX1lBUlJfSklUKSAmJiBQTEFURk9S
TShYODZfNjQpICYmIFBMQVRGT1JNKE1BQykpIFwKICAvKiBVbmRlciBkZXZlbG9wbWVudCwgdGVt
cG9yYXJpbHkgZGlzYWJsZWQgdW50aWwgMTZNYiBsaW5rIHJhbmdlIGxpbWl0IGluIGFzc2VtYmxl
ciBpcyBmaXhlZC4gKi8gXAogIHx8ICghZGVmaW5lZChFTkFCTEVfWUFSUl9KSVQpICYmIFBMQVRG
T1JNX0FSTV9BUkNIKDcpICYmIFBMQVRGT1JNKElQSE9ORSkgJiYgMCkgXAorIHx8ICghZGVmaW5l
ZChFTkFCTEVfWUFSUl9KSVQpICYmIFBMQVRGT1JNKEFSTSkgJiYgMCkgXAogIHx8ICghZGVmaW5l
ZChFTkFCTEVfWUFSUl9KSVQpICYmIFBMQVRGT1JNKFg4NikgJiYgUExBVEZPUk0oV0lOKSkKICNk
ZWZpbmUgRU5BQkxFX1lBUlIgMQogI2RlZmluZSBFTkFCTEVfWUFSUl9KSVQgMQpAQCAtNjAyLDcg
KzYwOCw3IEBACiAjZW5kaWYKIC8qIFNldHRpbmcgdGhpcyBmbGFnIHByZXZlbnRzIHRoZSBhc3Nl
bWJsZXIgZnJvbSB1c2luZyBSV1ggbWVtb3J5OyB0aGlzIG1heSBpbXByb3ZlCiAgICBzZWN1cml0
eSBidXQgY3VycmVjdGx5IGNvbWVzIGF0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgY29zdC4g
Ki8KLSNpZiBQTEFURk9STV9BUk1fQVJDSCg3KSAmJiBQTEFURk9STShJUEhPTkUpCisjaWYgUExB
VEZPUk0oQVJNKQogI2RlZmluZSBFTkFCTEVfQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSAxCiAjZWxz
ZQogI2RlZmluZSBFTkFCTEVfQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSAwCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNwcCBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVn
ZXhKSVQuY3BwCmluZGV4IDI5YTlkMTguLjNhNDUzOGYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL3lhcnIvUmVnZXhKSVQuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL3lhcnIvUmVnZXhKSVQu
Y3BwCkBAIC00MywxOCArNDMsMTcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBZYXJyIHsK
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgZnJp
ZW5kIHZvaWQgaml0Q29tcGlsZVJlZ2V4KEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgUmVnZXhD
b2RlQmxvY2smIGppdE9iamVjdCwgY29uc3QgVVN0cmluZyYgcGF0dGVybiwgdW5zaWduZWQmIG51
bVN1YnBhdHRlcm5zLCBjb25zdCBjaGFyKiYgZXJyb3IsIGJvb2wgaWdub3JlQ2FzZSwgYm9vbCBt
dWx0aWxpbmUpOwogCi0jaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKKyNpZiBQTEFURk9STShBUk0p
CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBBUk06OnIwOwogICAgIHN0YXRp
YyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gQVJNOjpyMTsKICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBsZW5ndGggPSBBUk06OnIyOwotCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
b3V0cHV0ID0gQVJNOjpyNDsKKwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0g
QVJNOjpyNTsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMSA9IEFSTTo6cjY7CiAK
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdpc3RlciA9IEFSTTo6cjA7Ci0j
ZW5kaWYKLSNpZiBQTEFURk9STShYODYpCisjZWxpZiBQTEFURk9STShYODYpCiAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgaW5wdXQgPSBYODY6OmVheDsKICAgICBzdGF0aWMgY29uc3QgUmVn
aXN0ZXJJRCBpbmRleCA9IFg4Njo6ZWR4OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGxl
bmd0aCA9IFg4Njo6ZWN4OwpAQCAtNjQsOCArNjMsNyBAQCBjbGFzcyBSZWdleEdlbmVyYXRvciA6
IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
Z1QxID0gWDg2Ojplc2k7CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZXR1cm5SZWdp
c3RlciA9IFg4Njo6ZWF4OwotI2VuZGlmCi0jaWYgUExBVEZPUk0oWDg2XzY0KQorI2VsaWYgUExB
VEZPUk0oWDg2XzY0KQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2Ojpl
ZGk7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgaW5kZXggPSBYODY6OmVzaTsKICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5ndGggPSBYODY6OmVkeDsKQEAgLTEzMDgsNyArMTMw
Niw3IEBAIGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAg
ICAgI2Vsc2UKICAgICAgICAgbG9hZFB0cihBZGRyZXNzKFg4Njo6ZWJwLCAyICogc2l6ZW9mKHZv
aWQqKSksIG91dHB1dCk7CiAgICAgI2VuZGlmCi0jZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KQor
I2VsaWYgUExBVEZPUk0oQVJNKQogICAgICAgICBwdXNoKEFSTTo6cjQpOwogICAgICAgICBwdXNo
KEFSTTo6cjUpOwogICAgICAgICBwdXNoKEFSTTo6cjYpOwpAQCAtMTMyNSw3ICsxMzIzLDcgQEAg
Y2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICAgICAg
cG9wKFg4Njo6ZWRpKTsKICAgICAgICAgcG9wKFg4Njo6ZWJ4KTsKICAgICAgICAgcG9wKFg4Njo6
ZWJwKTsKLSNlbGlmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCisjZWxpZiBQTEFURk9STShBUk0pCiAg
ICAgICAgIHBvcChBUk06OnI2KTsKICAgICAgICAgcG9wKEFSTTo6cjUpOwogICAgICAgICBwb3Ao
QVJNOjpyNCk7Ci0tIAoxLjYuMC40Cgo=
</data>
<flag name="review"
          id="16573"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32175</attachid>
            <date>2009-07-02 03:04:48 -0700</date>
            <delta_ts>2009-07-20 03:18:29 -0700</delta_ts>
            <desc>Constant pool for AssemblerBuffer (v3)</desc>
            <filename>0001-Extend-AssemblerBuffer-with-constant-pool-handling-m.patch</filename>
            <type>text/plain</type>
            <size>13384</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBmMGM4NDAyNWEzZmU3ODZlMjhmZDdmMjg3YmM3NGViYWU1ZTY2ODQ4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVGh1LCAyIEp1bCAyMDA5IDExOjI4OjE2ICswMjAwClN1YmplY3Q6IFtQQVRDSF0gRXh0ZW5k
IEFzc2VtYmxlckJ1ZmZlciB3aXRoIGNvbnN0YW50IHBvb2wgaGFuZGxpbmcgbWVjaGFuaXNtLgoK
U2lnbmVkLW9mZi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgIDE5ICsr
CiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmggICAgICAgICB8ICAg
MTcgKy0KIC4uLi9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oICAg
IHwgIDMwNSArKysrKysrKysrKysrKysrKysrKwogMyBmaWxlcyBjaGFuZ2VkLCAzMzggaW5zZXJ0
aW9ucygrKSwgMyBkZWxldGlvbnMoLSkKIGNyZWF0ZSBtb2RlIDEwMDY0NCBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCmlu
ZGV4IDAzN2I4NGMuLjhiZTUyNTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwyMiBAQAorMjAwOS0w
Ny0wMiAgR2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEV4dGVuZCBBc3NlbWJsZXJCdWZmZXIg
d2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbS4KKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CisKKyAgICAgICAgQWRkIGEgcGxh
dGZvcm0gaW5kZXBlbmRlZCBjb25zdGFudCBwb29sIGZyYW1ld29yay4KKyAgICAgICAgVGhpcyBw
b29sIGNhbiBzdG9yZSAzMiBvciA2NCBiaXRzIHZhbHVlcyB3aGljaCBpcyBlbm91Z2ggdG8gaG9s
ZAorICAgICAgICBhbnkgaW50ZWdlciwgcG9pbnRlciBvciBkb3VibGUgY29uc3RhbnQuCisKKyAg
ICAgICAgKiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmg6CisgICAgICAgIChKU0M6OkFzc2Vt
YmxlckJ1ZmZlcjo6cHV0SW50VW5jaGVja2VkKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVm
ZmVyOjpwdXRJbnQ2NFVuY2hlY2tlZCk6CisgICAgICAgIChKU0M6OkFzc2VtYmxlckJ1ZmZlcjo6
YXBwZW5kKToKKyAgICAgICAgKEpTQzo6QXNzZW1ibGVyQnVmZmVyOjpncm93KToKKyAgICAgICAg
KiBhc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOiBBZGRlZC4KKyAg
ICAgICAgKEpTQzo6KToKKwogMjAwOS0wNi0zMCAgS3dhbmcgWXVsIFNlbyAgPHNreXVsQGNvbXBh
bnkxMDAubmV0PgogCiAgICAgICAgIFJldmlld2VkIGJ5IEVyaWMgU2VpZGVsLgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oIGIvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlci5oCmluZGV4IDdhNWE4ZDMuLjA3MzkwNmEg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXIuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyLmgKQEAgLTk1LDEy
ICs5NSwxNCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIHB1dEludFVuY2hlY2tl
ZChpbnQgdmFsdWUpCiAgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCghKG1fc2l6ZSA+IG1f
Y2FwYWNpdHkgLSA0KSk7CiAgICAgICAgICAgICAqcmVpbnRlcnByZXRfY2FzdDxpbnQqPigmbV9i
dWZmZXJbbV9zaXplXSkgPSB2YWx1ZTsKICAgICAgICAgICAgIG1fc2l6ZSArPSA0OwogICAgICAg
ICB9CiAKICAgICAgICAgdm9pZCBwdXRJbnQ2NFVuY2hlY2tlZChpbnQ2NF90IHZhbHVlKQogICAg
ICAgICB7CisgICAgICAgICAgICBBU1NFUlQoIShtX3NpemUgPiBtX2NhcGFjaXR5IC0gOCkpOwog
ICAgICAgICAgICAgKnJlaW50ZXJwcmV0X2Nhc3Q8aW50NjRfdCo+KCZtX2J1ZmZlclttX3NpemVd
KSA9IHZhbHVlOwogICAgICAgICAgICAgbV9zaXplICs9IDg7CiAgICAgICAgIH0KQEAgLTEzNywx
MCArMTM5LDE5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgcmV0dXJuIG1lbWNweShy
ZXN1bHQsIG1fYnVmZmVyLCBtX3NpemUpOwogICAgICAgICB9CiAKLSAgICBwcml2YXRlOgotICAg
ICAgICB2b2lkIGdyb3coKQorICAgIHByb3RlY3RlZDoKKyAgICAgICAgdm9pZCBhcHBlbmQoY29u
c3QgY2hhciogZGF0YSwgaW50IHNpemUpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmIChtX3Np
emUgPiBtX2NhcGFjaXR5IC0gc2l6ZSkKKyAgICAgICAgICAgICAgICBncm93KHNpemUpOworCisg
ICAgICAgICAgICBtZW1jcHkobV9idWZmZXIgKyBtX3NpemUsIGRhdGEsIHNpemUpOworICAgICAg
ICAgICAgbV9zaXplICs9IHNpemU7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGdyb3coaW50
IGV4dHJhQ2FwYWNpdHkgPSAwKQogICAgICAgICB7Ci0gICAgICAgICAgICBtX2NhcGFjaXR5ICs9
IG1fY2FwYWNpdHkgLyAyOworICAgICAgICAgICAgbV9jYXBhY2l0eSArPSBtX2NhcGFjaXR5IC8g
MiArIGV4dHJhQ2FwYWNpdHk7CiAKICAgICAgICAgICAgIGlmIChtX2J1ZmZlciA9PSBtX2lubGlu
ZUJ1ZmZlcikgewogICAgICAgICAgICAgICAgIGNoYXIqIG5ld0J1ZmZlciA9IHN0YXRpY19jYXN0
PGNoYXIqPihmYXN0TWFsbG9jKG1fY2FwYWNpdHkpKTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLmYxNWI3ZjMKLS0tIC9kZXYvbnVsbAorKysg
Yi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9v
bC5oCkBAIC0wLDAgKzEsMzA1IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNp
dHkgb2YgU3plZ2VkCisgKiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJj
ZSBjb2RlIG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhp
cyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIu
IFJlZGlzdHJpYnV0aW9ucyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUg
Y29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUg
Zm9sbG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09O
VFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUws
IFNQRUNJQUwsCisgKiBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVE
SU5HLCBCVVQgTk9UIExJTUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdP
T0RTIE9SIFNFUlZJQ0VTOyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJV
U0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAq
IE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1Ig
VE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklT
RUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpZm5kZWYgQXNz
ZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbF9oCisjZGVmaW5lIEFzc2VtYmxlckJ1ZmZlcldp
dGhDb25zdGFudFBvb2xfaAorCisjaW5jbHVkZSA8d3RmL1BsYXRmb3JtLmg+CisKKyNpZiBFTkFC
TEUoQVNTRU1CTEVSKQorCisjaW5jbHVkZSAiQXNzZW1ibGVyQnVmZmVyLmgiCisjaW5jbHVkZSA8
d3RmL1NlZ21lbnRlZFZlY3Rvci5oPgorCituYW1lc3BhY2UgSlNDIHsKKworLyoKKyAgICBPbiBh
IGNvbnN0YW50IHBvb2wgNCBvciA4IGJ5dGVzIGRhdGEgY2FuIGJlIHN0b3JlZC4gVGhlIHZhbHVl
cyBjYW4gYmUKKyAgICBjb25zdGFudHMgb3IgYWRkcmVzc2VzLiBUaGUgYWRkcmVzc2VzIHNob3Vs
ZCBiZSAzMiBvciA2NCBiaXRzLiBUaGUgY29uc3RhbnRzCisgICAgc2hvdWxkIGJlIGRvdWJsZS1w
cmVjaXNpb25zIGZsb2F0IG9yIGludGVnZXIgbnVtYmVycyB3aGljaCBhcmUgaGFyZCB0byBiZQor
ICAgIGVuY29kZWQgYXMgZmV3IG1hY2hpbmUgaW5zdHJ1Y3Rpb25zLgorCisgICAgVE9ETzogVGhl
IHBvb2wgaXMgZGVzaW5nZWQgdG8gaGFuZGxlIGJvdGggMzIgYW5kIDY0IGJpdHMgdmFsdWVzLCBi
dXQKKyAgICBjdXJyZW50bHkgb25seSB0aGUgNCBieXRlcyBjb25zdGFudHMgYXJlIGltcGxlbWVu
dGVkIGFuZCB0ZXN0ZWQuCisKKyAgICBUaGUgQXNzZW1ibGVyQnVmZmVyIGNhbiBjb250YWluIG11
bHRpcGxlIGNvbnN0YW50IHBvb2xzLiBFYWNoIHBvb2wgaXMgaW5zZXJ0ZWQKKyAgICBpbnRvIHRo
ZSBpbnN0cnVjdGlvbiBzdHJlYW0gLSBwcm90ZWN0ZWQgYnkgYSBqdW1wIGluc3RydWN0aW9uIGZy
b20gdGhlCisgICAgZXhlY3V0aW9uIGZsb3cuCisKKyAgICBUaGUgZmx1c2ggbWVjaGFuaXNtIGlz
IGNhbGxlZCB3aGVuIG5vIHNwYWNlIHJlbWFpbiB0byBpbnNlcnQgdGhlIG5leHQgaW5zdHJ1Y3Rp
b24KKyAgICBpbnRvIHRoZSBwb29sLiBUaHJlZSB2YWx1ZXMgYXJlIHVzZWQgdG8gZGV0ZXJtaW5l
IHdoZW4gdGhlIGNvbnN0YW50IHBvb2wgaXRzZWxmCisgICAgaGF2ZSB0byBiZSBpbnNlcnRlZCBp
bnRvIHRoZSBpbnN0cnVjdGlvbiBzdHJlYW0gKEFzc2VtYmxlciBCdWZmZXIpOgorCisgICAgLSBt
YXhQb29sU2l6ZTogc2l6ZSBvZiB0aGUgY29uc3RhbnQgcG9vbCBpbiBieXRlcywgdGhpcyB2YWx1
ZSBjYW5ub3QgYmUKKyAgICAgICAgbGFyZ2VyIHRoYW4gdGhlIG1heGltdW0gb2Zmc2V0IG9mIGEg
UEMgcmVsYXRpdmUgbWVtb3J5IGxvYWQKKworICAgIC0gYmFycmllclNpemU6IHNpemUgb2YganVt
cCBpbnN0cnVjdGlvbiBpbiBieXRlcyB3aGljaCBwcm90ZWN0cyB0aGUKKyAgICAgICAgY29uc3Rh
bnQgcG9vbCBmcm9tIGV4ZWN1dGlvbgorCisgICAgLSBtYXhJbnN0cnVjdGlvblNpemU6IG1heGlt
dW0gbGVuZ3RoIG9mIGEgbWFjaGluZSBpbnN0cnVjdGlvbiBpbiBieXRlcworCisgICAgVGhlcmUg
YXJlIHNvbWUgY2FsbGJhY2tzIHdoaWNoIHNvbHZlIHRoZSB0YXJnZXQgYXJjaGl0ZWN0dXJlIHNw
ZWNpZmljCisgICAgYWRkcmVzcyBoYW5kbGluZzoKKworICAgIC0gVFlQRSBwYXRjaENvbnN0YW50
UG9vbExvYWQoVFlQRSBsb2FkLCBpbnQgdmFsdWUpOgorICAgICAgICBwYXRjaCB0aGUgJ2xvYWQn
IGluc3RydWN0aW9uIHdpdGggdGhlIGluZGV4IG9mIHRoZSBjb25zdGFudCBpbiB0aGUKKyAgICAg
ICAgY29uc3RhbnQgcG9vbCBhbmQgcmV0dXJuIHRoZSBwYXRjaGVkIGluc3RydWN0aW9uLgorCisg
ICAgLSB2b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9pZCogY29u
c3RQb29sQWRkcik6CisgICAgICAgIHBhdGNoIHRoZSBhIFBDIHJlbGF0aXZlIGxvYWQgaW5zdHJ1
Y3Rpb24gYXQgJ2xvYWRBZGRyJyBhZGRyZXNzIHdpdGggdGhlCisgICAgICAgIGZpbmFsIHJlbGF0
aXZlIG9mZnNldC4gVGhlIG9mZnNldCBjYW4gYmUgY29tcHV0ZWQgd2l0aCBoZWxwIG9mCisgICAg
ICAgICdjb25zdFBvb2xBZGRyJyAodGhlIGFkZHJlc3Mgb2YgdGhlIGNvbnN0YW50IHBvb2wpIGFu
ZCBpbmRleCBvZiB0aGUKKyAgICAgICAgY29uc3RhbnQgKHdoaWNoIGlzIHN0b3JlZCBwcmV2aW91
c2x5IGluIHRoZSBsb2FkIGluc3RydWN0aW9uIGl0c2VsZikuCisKKyAgICAtIFRZUEUgcGxhY2VD
b25zdGFudFBvb2xCYXJyaWVyKGludCBzaXplKToKKyAgICAgICAgcmV0dXJuIHdpdGggYSBjb25z
dGFudCBwb29sIGJhcnJpZXIgaW5zdHJ1Y3Rpb24gd2hpY2gganVtcHMgb3ZlciB0aGUKKyAgICAg
ICAgY29uc3RhbnQgcG9vbC4KKworICAgIFRoZSAncHV0KldpdGhDb25zdGFudConIGZ1bmN0aW9u
cyBzaG91bGQgYmUgdXNlZCB0byBwbGFjZSBhIGRhdGEgaW50byB0aGUKKyAgICBjb25zdGFudCBw
b29sLgorKi8KKwordGVtcGxhdGUgPGludCBtYXhQb29sU2l6ZSwgaW50IGJhcnJpZXJTaXplLCBp
bnQgbWF4SW5zdHJ1Y3Rpb25TaXplLCBjbGFzcyBBc3NlbWJsZXJUeXBlPgorY2xhc3MgQXNzZW1i
bGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbDogcHVibGljIEFzc2VtYmxlckJ1ZmZlciB7CisgICAg
dHlwZWRlZiBXVEY6OlNlZ21lbnRlZFZlY3Rvcjx1aW50MzJfdCwgNTEyPiBMb2FkT2Zmc2V0czsK
K3B1YmxpYzoKKyAgICBlbnVtIHsKKyAgICAgICAgVW5pcXVlQ29uc3QsCisgICAgICAgIFJldXNh
YmxlQ29uc3QsCisgICAgICAgIFVudXNlZEVudHJ5LAorICAgIH07CisKKyAgICBBc3NlbWJsZXJC
dWZmZXJXaXRoQ29uc3RhbnRQb29sKCkKKyAgICAgICAgOiBBc3NlbWJsZXJCdWZmZXIoKQorICAg
ICAgICAsIG1fbnVtQ29uc3RzKDApCisgICAgICAgICwgbV9tYXhEaXN0YW5jZShtYXhQb29sU2l6
ZSkKKyAgICAgICAgLCBtX2xhc3RDb25zdERlbHRhKDApCisgICAgeworICAgICAgICBtX3Bvb2wg
PSBzdGF0aWNfY2FzdDx1aW50MzJfdCo+KGZhc3RNYWxsb2MobWF4UG9vbFNpemUpKTsKKyAgICAg
ICAgbV9tYXNrID0gc3RhdGljX2Nhc3Q8Y2hhcio+KGZhc3RNYWxsb2MobWF4UG9vbFNpemUgLyBz
aXplb2YodWludDMyX3QpKSk7CisgICAgfQorCisgICAgfkFzc2VtYmxlckJ1ZmZlcldpdGhDb25z
dGFudFBvb2woKQorICAgIHsKKyAgICAgICAgZmFzdEZyZWUobV9tYXNrKTsKKyAgICAgICAgZmFz
dEZyZWUobV9wb29sKTsKKyAgICB9CisKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBzcGFjZSkK
KyAgICB7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9yKHNwYWNlKTsKKyAgICAgICAgQXNzZW1i
bGVyQnVmZmVyOjplbnN1cmVTcGFjZShzcGFjZSk7CisgICAgfQorCisgICAgdm9pZCBlbnN1cmVT
cGFjZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKKyAgICB7CisgICAgICAgIGZsdXNo
SWZOb1NwYWNlRm9yKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisgICAgICAgIEFzc2VtYmxlckJ1
ZmZlcjo6ZW5zdXJlU3BhY2UoaW5zblNwYWNlKTsKKyAgICB9CisKKyAgICBib29sIGlzQWxpZ25l
ZChpbnQgYWxpZ25tZW50KQorICAgIHsKKyAgICAgICAgZmx1c2hJZk5vU3BhY2VGb3IoYWxpZ25t
ZW50KTsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6aXNBbGlnbmVkKGFsaWdubWVu
dCk7CisgICAgfQorCisgICAgdm9pZCBwdXRCeXRlVW5jaGVja2VkKGludCB2YWx1ZSkKKyAgICB7
CisgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0Qnl0ZVVuY2hlY2tlZCh2YWx1ZSk7CisgICAg
ICAgIGNvcnJlY3REZWx0YXMoMSk7CisgICAgfQorCisgICAgdm9pZCBwdXRCeXRlKGludCB2YWx1
ZSkKKyAgICB7CisgICAgICAgIGZsdXNoSWZOb1NwYWNlRm9yKDEpOworICAgICAgICBBc3NlbWJs
ZXJCdWZmZXI6OnB1dEJ5dGUodmFsdWUpOworICAgICAgICBjb3JyZWN0RGVsdGFzKDEpOworICAg
IH0KKworICAgIHZvaWQgcHV0U2hvcnRVbmNoZWNrZWQoaW50IHZhbHVlKQorICAgIHsKKyAgICAg
ICAgQXNzZW1ibGVyQnVmZmVyOjpwdXRTaG9ydFVuY2hlY2tlZCh2YWx1ZSk7CisgICAgICAgIGNv
cnJlY3REZWx0YXMoMik7CisgICAgfQorCisgICAgdm9pZCBwdXRTaG9ydChpbnQgdmFsdWUpCisg
ICAgeworICAgICAgICBmbHVzaElmTm9TcGFjZUZvcigyKTsKKyAgICAgICAgQXNzZW1ibGVyQnVm
ZmVyOjpwdXRTaG9ydCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoMik7CisgICAgfQor
CisgICAgdm9pZCBwdXRJbnRVbmNoZWNrZWQoaW50IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXNz
ZW1ibGVyQnVmZmVyOjpwdXRJbnRVbmNoZWNrZWQodmFsdWUpOworICAgICAgICBjb3JyZWN0RGVs
dGFzKDQpOworICAgIH0KKworICAgIHZvaWQgcHV0SW50KGludCB2YWx1ZSkKKyAgICB7CisgICAg
ICAgIGZsdXNoSWZOb1NwYWNlRm9yKDQpOworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dElu
dCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMoNCk7CisgICAgfQorCisgICAgdm9pZCBw
dXRJbnQ2NFVuY2hlY2tlZChpbnQ2NF90IHZhbHVlKQorICAgIHsKKyAgICAgICAgQXNzZW1ibGVy
QnVmZmVyOjpwdXRJbnQ2NFVuY2hlY2tlZCh2YWx1ZSk7CisgICAgICAgIGNvcnJlY3REZWx0YXMo
OCk7CisgICAgfQorCisgICAgaW50IHNpemUoKQorICAgIHsKKyAgICAgICAgZmx1c2hJZk5vU3Bh
Y2VGb3IobWF4SW5zdHJ1Y3Rpb25TaXplLCBzaXplb2YodWludDY0X3QpKTsKKyAgICAgICAgcmV0
dXJuIEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpOworICAgIH0KKworICAgIHZvaWQqIGV4ZWN1dGFi
bGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCisgICAgeworICAgICAgICBmbHVzaENv
bnN0YW50UG9vbChmYWxzZSk7CisgICAgICAgIHJldHVybiBBc3NlbWJsZXJCdWZmZXI6OmV4ZWN1
dGFibGVDb3B5KGFsbG9jYXRvcik7CisgICAgfQorCisgICAgdm9pZCBwdXRJbnRXaXRoQ29uc3Rh
bnRJbnQodWludDMyX3QgaW5zbiwgdWludDMyX3QgY29uc3RhbnQsIGJvb2wgaXNSZXVzYWJsZSA9
IGZhbHNlKQorICAgIHsKKyAgICAgICAgZmx1c2hJZk5vU3BhY2VGb3IoNCwgNCk7CisKKyAgICAg
ICAgbV9sb2FkT2Zmc2V0cy5hcHBlbmQoQXNzZW1ibGVyQnVmZmVyOjpzaXplKCkpOworICAgICAg
ICBpZiAoaXNSZXVzYWJsZSkKKyAgICAgICAgICAgIGZvciAoaW50IGkgPSAwOyBpIDwgbV9udW1D
b25zdHM7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChtX21hc2tbaV0gPT0gUmV1c2FibGVD
b25zdCAmJiBtX3Bvb2xbaV0gPT0gY29uc3RhbnQpIHsKKyAgICAgICAgICAgICAgICAgICAgQXNz
ZW1ibGVyQnVmZmVyOjpwdXRJbnQoQXNzZW1ibGVyVHlwZTo6cGF0Y2hDb25zdGFudFBvb2xMb2Fk
KGluc24sIGkpKTsKKyAgICAgICAgICAgICAgICAgICAgY29ycmVjdERlbHRhcyg0KTsKKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0K
KworICAgICAgICBtX3Bvb2xbbV9udW1Db25zdHNdID0gY29uc3RhbnQ7CisgICAgICAgIG1fbWFz
a1ttX251bUNvbnN0c10gPSBzdGF0aWNfY2FzdDxjaGFyPihpc1JldXNhYmxlID8gUmV1c2FibGVD
b25zdCA6IFVuaXF1ZUNvbnN0KTsKKworICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dEludChB
c3NlbWJsZXJUeXBlOjpwYXRjaENvbnN0YW50UG9vbExvYWQoaW5zbiwgbV9udW1Db25zdHMpKTsK
KyAgICAgICAgKyttX251bUNvbnN0czsKKworICAgICAgICBjb3JyZWN0RGVsdGFzKDQsIDQpOwor
ICAgIH0KKworICAgIC8vIFRoaXMgZmx1c2hpbmcgbWVjaGFuaXNtIGNhbiBiZSBjYWxsZWQgYWZ0
ZXIgYW55IHVuY29uZGl0aW9uYWwganVtcHMuCisgICAgdm9pZCBmbHVzaFdpdGhvdXRCYXJyaWVy
KCkKKyAgICB7CisgICAgICAgIC8vIEZsdXNoIGlmIGNvbnN0YW50IHBvb2wgaXMgbW9yZSB0aGFu
IDYwJSBmdWxsIHRvIGF2b2lkIG92ZXJ1c2Ugb2YgdGhpcyBmdW5jdGlvbi4KKyAgICAgICAgaWYg
KDUgKiBtX251bUNvbnN0cyA+IDMgKiBtYXhQb29sU2l6ZSAvIHNpemVvZih1aW50MzJfdCkpCisg
ICAgICAgICAgICBmbHVzaENvbnN0YW50UG9vbChmYWxzZSk7CisgICAgfQorCisgICAgdWludDMy
X3QqIHBvb2xBZGRyZXNzKCkKKyAgICB7CisgICAgICAgIHJldHVybiBtX3Bvb2w7CisgICAgfQor
Citwcml2YXRlOgorICAgIHZvaWQgY29ycmVjdERlbHRhcyhpbnQgaW5zblNpemUpCisgICAgewor
ICAgICAgICBtX21heERpc3RhbmNlIC09IGluc25TaXplOworICAgICAgICBtX2xhc3RDb25zdERl
bHRhIC09IGluc25TaXplOworICAgICAgICBpZiAobV9sYXN0Q29uc3REZWx0YSA8IDApCisgICAg
ICAgICAgICBtX2xhc3RDb25zdERlbHRhID0gMDsKKyAgICB9CisKKyAgICB2b2lkIGNvcnJlY3RE
ZWx0YXMoaW50IGluc25TaXplLCBpbnQgY29uc3RTaXplKQorICAgIHsKKyAgICAgICAgY29ycmVj
dERlbHRhcyhpbnNuU2l6ZSk7CisKKyAgICAgICAgbV9tYXhEaXN0YW5jZSAtPSBtX2xhc3RDb25z
dERlbHRhOworICAgICAgICBtX2xhc3RDb25zdERlbHRhID0gY29uc3RTaXplOworICAgIH0KKwor
ICAgIHZvaWQgZmx1c2hDb25zdGFudFBvb2woYm9vbCB1c2VCYXJyaWVyID0gdHJ1ZSkKKyAgICB7
CisgICAgICAgIGlmIChtX251bUNvbnN0cyA9PSAwKQorICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICBpbnQgYWxpZ25Qb29sID0gKEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpICsgKHVzZUJhcnJp
ZXIgPyBiYXJyaWVyU2l6ZSA6IDApKSAmIChzaXplb2YodWludDY0X3QpIC0gMSk7CisKKyAgICAg
ICAgaWYgKGFsaWduUG9vbCkKKyAgICAgICAgICAgIGFsaWduUG9vbCA9IHNpemVvZih1aW50NjRf
dCkgLSBhbGlnblBvb2w7CisKKyAgICAgICAgLy8gQ2FsbGJhY2sgdG8gcHJvdGVjdCB0aGUgY29u
c3RhbnQgcG9vbCBmcm9tIGV4ZWN1dGlvbgorICAgICAgICBpZiAodXNlQmFycmllcikKKyAgICAg
ICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0SW50KEFzc2VtYmxlclR5cGU6OnBsYWNlQ29uc3Rh
bnRQb29sQmFycmllcihtX251bUNvbnN0cyAqIHNpemVvZih1aW50MzJfdCkgKyBhbGlnblBvb2wp
KTsKKworICAgICAgICBpZiAoYWxpZ25Qb29sKSB7CisgICAgICAgICAgICBpZiAoYWxpZ25Qb29s
ICYgMSkKKyAgICAgICAgICAgICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dEJ5dGUoQXNzZW1ibGVy
VHlwZTo6cGFkRm9yQWxpZ244KTsKKyAgICAgICAgICAgIGlmIChhbGlnblBvb2wgJiAyKQorICAg
ICAgICAgICAgICAgIEFzc2VtYmxlckJ1ZmZlcjo6cHV0U2hvcnQoQXNzZW1ibGVyVHlwZTo6cGFk
Rm9yQWxpZ24xNik7CisgICAgICAgICAgICBpZiAoYWxpZ25Qb29sICYgNCkKKyAgICAgICAgICAg
ICAgICBBc3NlbWJsZXJCdWZmZXI6OnB1dEludChBc3NlbWJsZXJUeXBlOjpwYWRGb3JBbGlnbjMy
KTsKKyAgICAgICAgfQorCisgICAgICAgIGludCBjb25zdFBvb2xPZmZzZXQgPSBBc3NlbWJsZXJC
dWZmZXI6OnNpemUoKTsKKyAgICAgICAgYXBwZW5kKHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1f
cG9vbCksIG1fbnVtQ29uc3RzICogc2l6ZW9mKHVpbnQzMl90KSk7CisKKyAgICAgICAgLy8gUGF0
Y2ggZWFjaCBQQyByZWxhdGl2ZSBsb2FkCisgICAgICAgIGZvciAoTG9hZE9mZnNldHM6Okl0ZXJh
dG9yIGl0ZXIgPSBtX2xvYWRPZmZzZXRzLmJlZ2luKCk7IGl0ZXIgIT0gbV9sb2FkT2Zmc2V0cy5l
bmQoKTsgKytpdGVyKSB7CisgICAgICAgICAgICB2b2lkKiBsb2FkQWRkciA9IHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KG1fYnVmZmVyICsgKml0ZXIpOworICAgICAgICAgICAgQXNzZW1ibGVyVHlw
ZTo6cGF0Y2hDb25zdGFudFBvb2xMb2FkKGxvYWRBZGRyLCByZWludGVycHJldF9jYXN0PHZvaWQq
PihtX2J1ZmZlciArIGNvbnN0UG9vbE9mZnNldCkpOworICAgICAgICB9CisKKyAgICAgICAgbV9s
b2FkT2Zmc2V0cy5jbGVhcigpOworICAgICAgICBtX251bUNvbnN0cyA9IDA7CisgICAgICAgIG1f
bWF4RGlzdGFuY2UgPSBtYXhQb29sU2l6ZTsKKyAgICB9CisKKyAgICB2b2lkIGZsdXNoSWZOb1Nw
YWNlRm9yKGludCBuZXh0SW5zblNpemUpCisgICAgeworICAgICAgICBpZiAobV9udW1Db25zdHMg
PT0gMCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgaWYgKChtX21heERpc3RhbmNlIDwg
bmV4dEluc25TaXplICsgbV9sYXN0Q29uc3REZWx0YSArIGJhcnJpZXJTaXplICsgKGludClzaXpl
b2YodWludDMyX3QpKSkKKyAgICAgICAgICAgIGZsdXNoQ29uc3RhbnRQb29sKCk7CisgICAgfQor
CisgICAgdm9pZCBmbHVzaElmTm9TcGFjZUZvcihpbnQgbmV4dEluc25TaXplLCBpbnQgbmV4dENv
bnN0U2l6ZSkKKyAgICB7CisgICAgICAgIGlmIChtX251bUNvbnN0cyA9PSAwKQorICAgICAgICAg
ICAgcmV0dXJuOworICAgICAgICBpZiAoKG1fbWF4RGlzdGFuY2UgPCBuZXh0SW5zblNpemUgKyBt
X2xhc3RDb25zdERlbHRhICsgYmFycmllclNpemUgKyAoaW50KXNpemVvZih1aW50MzJfdCkpIHx8
CisgICAgICAgICAgICAobV9udW1Db25zdHMgKyBuZXh0Q29uc3RTaXplIC8gc2l6ZW9mKHVpbnQz
Ml90KSA+PSBtYXhQb29sU2l6ZSkpCisgICAgICAgICAgICBmbHVzaENvbnN0YW50UG9vbCgpOwor
ICAgIH0KKworICAgIHVpbnQzMl90KiBtX3Bvb2w7CisgICAgY2hhciogbV9tYXNrOworICAgIExv
YWRPZmZzZXRzIG1fbG9hZE9mZnNldHM7CisKKyAgICBpbnQgbV9udW1Db25zdHM7CisgICAgaW50
IG1fbWF4RGlzdGFuY2U7CisgICAgaW50IG1fbGFzdENvbnN0RGVsdGE7Cit9OworCit9IC8vIG5h
bWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpCisKKyNlbmRpZiAvLyBB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sX2gKLS0gCjEuNi4wLjQKCg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32176</attachid>
            <date>2009-07-02 03:08:54 -0700</date>
            <delta_ts>2009-07-20 03:19:36 -0700</delta_ts>
            <desc>Add YARR support for generic ARM platforms (v3)</desc>
            <filename>0002-Add-YARR-support-for-generic-ARM-platforms-disabled.patch</filename>
            <type>text/plain</type>
            <size>71331</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBhMTdmOTNjYmIxNzUyZjI5ZWExZjVkY2E0NTMzYjEyYzc5MzIxYzM5IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVGh1LCAyIEp1bCAyMDA5IDExOjQ3OjAxICswMjAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIFlB
UlIgc3VwcG9ydCBmb3IgZ2VuZXJpYyBBUk0gcGxhdGZvcm1zIChkaXNhYmxlZCBieSBkZWZhdWx0
KS4KClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQu
aHU+ClNpZ25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0K
IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgfCAgMTg2
ICsrKysrCiBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkgICAgICAgICAgICAgICAg
IHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAgICAg
ICAgIHwgIDM1MyArKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1i
bGVyLmggICAgICAgICAgIHwgIDcwNiArKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCAgICAgICAgIHwgICAgMSArCiBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIHwgICAxMCArCiBKYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXIuaCAgICAgICAgIHwgICAgNCArCiBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaCAgICAgIHwgIDc3OCArKysr
KysrKysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIu
aCAgICAgICAgICAgfCAgICAxICsKIEphdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2Nh
dG9yLmggICAgICAgICAgfCAgIDE1ICsKIEphdmFTY3JpcHRDb3JlL3d0Zi9QbGF0Zm9ybS5oICAg
ICAgICAgICAgICAgICAgICAgfCAgICAzICstCiBKYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklU
LmNwcCAgICAgICAgICAgICAgICAgIHwgICAxNyArLQogMTIgZmlsZXMgY2hhbmdlZCwgMjA2NiBp
bnNlcnRpb25zKCspLCA5IGRlbGV0aW9ucygtKQogY3JlYXRlIG1vZGUgMTAwNjQ0IEphdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCiBjcmVhdGUgbW9kZSAxMDA2NDQgSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCiBjcmVhdGUgbW9kZSAxMDA2NDQg
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5k
ZXggOGJlNTI1NC4uY2I4Njc4YiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
CisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMiw2ICsyLDE5MiBAQAogCiAgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEFkZCBZQVJSIHN1cHBv
cnQgZm9yIGdlbmVyaWMgQVJNIHBsYXRmb3JtcyAoZGlzYWJsZWQgYnkgZGVmYXVsdCkuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk4NgorCisgICAg
ICAgIEFkZCBnZW5lcmljIEFSTSBwb3J0IGZvciBNYWNyb0Fzc2VtYmxlci4gSXQgc3VwcG9ydHMg
dGhlIHdob2xlCisgICAgICAgIE1hY3JvQXNzZW1ibGVyIGZ1bmN0aW9uYWxpdHkgZXhjZXB0IGZs
b2F0aW5nIHBvaW50LgorCisgICAgICAgIFRoZSBjbGFzcyBKbXBTcmMgaXMgZXh0ZW5kZWQgd2l0
aCBhIGZsYWcgd2hpY2ggZW5hYmxlcyB0byBwYXRjaAorICAgICAgICB0aGUganVtcCBkZXN0aW5h
dGlvbiBvZmZzZXQgZHVyaW5nIGV4ZWN1dGlvbi4gVGhpcyBmZWF0dXJlIGlzCisgICAgICAgIHJl
cXVpcmVkIGZvciBnZW5lcmljIEFSTSBwb3J0LgorCisgICAgICAgIFNpZ25lZCBvZmYgYnkgWm9s
dGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdlZC5odT4KKyAgICAgICAgU2lnbmVkIG9m
ZiBieSBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICAqIEphdmFT
Y3JpcHRDb3JlLnByaToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcDogQWRk
ZWQuCisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2V0TGRySW1tQWRkcmVzcyk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGlua0JyYW5jaCk6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6cGF0Y2hDb25zdGFudFBvb2xMb2FkKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjpnZXRPcDIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmdlbkludCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Z2V0SW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjptb3ZlSW1tKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpkYXRhVHJhbnNmZXIz
Mik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFz
c2VtYmxlci9BUk1Bc3NlbWJsZXIuaDogQWRkZWQuCisgICAgICAgIChKU0M6OkFSTTo6KToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpBUk1Bc3NlbWJsZXIpOgorICAgICAgICAoSlNDOjpB
Uk1Bc3NlbWJsZXI6Oik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBT
cmMpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkptcFNyYzo6ZW5hYmxlTGF0ZVBhdGNo
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBEc3Q6OkptcERzdCk6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wRHN0Ojppc1VzZWQpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OkptcERzdDo6dXNlZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZW1p
dEluc3QpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFuZF9yKToKKyAgICAgICAgKEpT
Qzo6QVJNQXNzZW1ibGVyOjphbmRzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmVv
cl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjplb3JzX3IpOgorICAgICAgICAoSlND
OjpBUk1Bc3NlbWJsZXI6OnN1Yl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpzdWJz
X3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJzYl9yKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjpyc2JzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmFkZF9y
KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphZGRzX3IpOgorICAgICAgICAoSlNDOjpB
Uk1Bc3NlbWJsZXI6OmFkY19yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjphZGNzX3Ip
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNiY19yKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpzYmNzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJzY19yKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyc2NzX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OnRzdF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjp0ZXFfcik6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Y21wX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6Om9ycl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpvcnJzX3IpOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om1vdl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjptb3ZzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJpY19yKToKKyAgICAg
ICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpiaWNzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJs
ZXI6Om12bl9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjptdm5zX3IpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om11bF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjptdWxzX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Om11bGxfcik6CisgICAgICAg
IChKU0M6OkFSTUFzc2VtYmxlcjo6bGRyX2ltbSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxl
cjo6bGRyX3VuX2ltbSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZHRyX3UpOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmR0cl91cik6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6ZHRyX2QpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmR0cl9kcik6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGRyaF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjpsZHJoX2QpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxkcmhfdSk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6c3RyaF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1i
bGVyOjpwdXNoX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnBvcF9yKToKKyAgICAg
ICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpwb2tlX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJs
ZXI6OnBlZWtfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Y2x6X3IpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmJrcHQpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmxzbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bHNyKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjphc3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxzbF9yKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsc3Jfcik6CisgICAgICAgIChKU0M6OkFSTUFz
c2VtYmxlcjo6YXNyX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNpemUpOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpsYWJlbCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6YWxpZ24pOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmptcCk6CisgICAgICAgIChKU0M6OkFSTUFzc2Vt
Ymxlcjo6cGF0Y2hQb2ludGVySW50ZXJuYWwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OnBhdGNoQ29uc3RhbnRQb29sTG9hZCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cGF0
Y2hQb2ludGVyKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpyZXBhdGNoSW50MzIpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnJlcGF0Y2hQb2ludGVyKToKKyAgICAgICAgKEpT
Qzo6QVJNQXNzZW1ibGVyOjpyZXBhdGNoTG9hZFB0clRvTEVBKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpsaW5rSnVtcCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6cmVsaW5r
SnVtcCk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGlua0NhbGwpOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OnJlbGlua0NhbGwpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJs
ZXI6OmdldFJlbG9jYXRlZEFkZHJlc3MpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6Omdl
dERpZmZlcmVuY2VCZXR3ZWVuTGFiZWxzKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpn
ZXRDYWxsUmV0dXJuT2Zmc2V0KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpnZXRPcDJC
eXRlKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpwbGFjZUNvbnN0YW50UG9vbEJhcnJp
ZXIpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OlJNKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpSUyk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6UkQpOgorICAgICAg
ICAoSlNDOjpBUk1Bc3NlbWJsZXI6OlJOKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpn
ZXRDb25kaXRpb25hbEZpZWxkKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIu
aDoKKyAgICAgICAgKEpTQzo6QVJNdjdBc3NlbWJsZXI6OkptcFNyYzo6ZW5hYmxlTGF0ZVBhdGNo
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oOgorICAgICAg
ICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpDYWxsOjplbmFibGVMYXRlUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpBYnN0cmFjdE1hY3JvQXNzZW1ibGVyOjpKdW1wOjplbmFibGVMYXRlUGF0
Y2gpOgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oOgorICAgICAgICAqIGFz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oOiBBZGRlZC4KKyAgICAgICAgKEpTQzo6TWFjcm9B
c3NlbWJsZXJBUk06Oik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjphZGQzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjphbmQzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjpsc2hpZnQzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjptdWwzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpub3QzMik6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpvcjMyKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06OnJzaGlmdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OnN1YjMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnhvcjMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxvYWQzMik6CisgICAgICAgIChKU0M6
Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMzJXaXRoQWRkcmVzc09mZnNldFBhdGNoKToKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmxvYWRQdHJXaXRoUGF0Y2hUb0xFQSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpsb2FkMTYpOgorICAgICAgICAoSlNDOjpNYWNy
b0Fzc2VtYmxlckFSTTo6c3RvcmUzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3RvcmUzMik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNz
ZW1ibGVyQVJNOjpwb3ApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6cHVzaCk6
CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptb3ZlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06OnN3YXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTo6c2lnbkV4dGVuZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6
emVyb0V4dGVuZDMyVG9QdHIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJh
bmNoMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMTYpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoVGVzdDMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06Omp1bXApOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTo6YnJhbmNoQWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bXVs
bDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaE11bDMyKToKKyAg
ICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaFN1YjMyKToKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyZWFrcG9pbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fz
c2VtYmxlckFSTTo6bmVhckNhbGwpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6
Y2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpyZXQpOgorICAgICAgICAo
SlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c2V0MzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2Vt
YmxlckFSTTo6c2V0VGVzdDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnRh
aWxSZWN1cnNpdmVDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1ha2VU
YWlsUmVjdXJzaXZlQ2FsbCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjptb3Zl
V2l0aFBhdGNoKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmJyYW5jaFB0cldp
dGhQYXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdG9yZVB0cldpdGhQ
YXRjaCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdXBwb3J0c0Zsb2F0aW5n
UG9pbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3VwcG9ydHNGbG9hdGlu
Z1BvaW50VHJ1bmNhdGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bG9hZERv
dWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdG9yZURvdWJsZSk6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjphZGREb3VibGUpOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6c3ViRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06Om11bERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpj
b252ZXJ0SW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpi
cmFuY2hEb3VibGUpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoVHJ1
bmNhdGVEb3VibGVUb0ludDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OkFS
TUNvbmRpdGlvbik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2Fs
bCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpjYWxsMzIpOgorICAgICAgICAq
IGFzc2VtYmxlci9YODZBc3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6WDg2QXNzZW1ibGVyOjpK
bXBTcmM6OmVuYWJsZUxhdGVQYXRjaCk6CisgICAgICAgICogaml0L0V4ZWN1dGFibGVBbGxvY2F0
b3IuaDoKKyAgICAgICAgKEpTQzo6RXhlY3V0YWJsZUFsbG9jYXRvcjo6Y2FjaGVGbHVzaCk6Cisg
ICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisgICAgICAgICogeWFyci9SZWdleEpJVC5jcHA6Cisg
ICAgICAgIChKU0M6OllhcnI6OlJlZ2V4R2VuZXJhdG9yOjpnZW5lcmF0ZUVudGVyKToKKyAgICAg
ICAgKEpTQzo6WWFycjo6UmVnZXhHZW5lcmF0b3I6OmdlbmVyYXRlUmV0dXJuKToKKworMjAwOS0w
Ny0wMiAgR2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJldmll
d2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEV4dGVuZCBBc3NlbWJsZXJCdWZmZXIg
d2l0aCBjb25zdGFudCBwb29sIGhhbmRsaW5nIG1lY2hhbmlzbS4KICAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CiAKZGlmZiAtLWdpdCBhL0phdmFT
Y3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaSBiL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnByaQppbmRleCAxMWQyMTVhLi40NmU3ZjMxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9KYXZhU2NyaXB0Q29yZS5wcmkKKysrIGIvSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUu
cHJpCkBAIC0xMTcsNiArMTE3LDcgQEAgU09VUkNFUyArPSBcCiAgICAgYnl0ZWNvZGUvQ29kZUJs
b2NrLmNwcCBcCiAgICAgYnl0ZWNvZGUvU3RydWN0dXJlU3R1YkluZm8uY3BwIFwKICAgICBieXRl
Y29kZS9KdW1wVGFibGUuY3BwIFwKKyAgICBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCBcCiAg
ICAgaml0L0pJVC5jcHAgXAogICAgIGppdC9KSVRDYWxsLmNwcCBcCiAgICAgaml0L0pJVEFyaXRo
bWV0aWMuY3BwIFwKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3Nl
bWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKbmV3
IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZmI1YTZjZAotLS0gL2Rldi9udWxsCisr
KyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCkBAIC0wLDAgKzEs
MzUzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDA5IFVuaXZlcnNpdHkgb2YgU3plZ2VkCisg
KiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4g
c291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9u
LCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisg
KiBhcmUgbWV0OgorICogMS4gUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0
YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuIFJlZGlzdHJpYnV0aW9u
cyBpbiBiaW5hcnkgZm9ybSBtdXN0IHJlcHJvZHVjZSB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMg
cHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMg
UFJPVklERUQgQlkgVU5JVkVSU0lUWSBPRiBTWkVHRUQgYGBBUyBJUycnIEFORCBBTlkKKyAqIEVY
UFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRBQklMSVRZIEFORCBGSVRO
RVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NMQUlNRUQuICBJTiBOTyBF
VkVOVCBTSEFMTCBVTklWRVJTSVRZIE9GIFNaRUdFRCBPUgorICogQ09OVFJJQlVUT1JTIEJFIExJ
QUJMRSBGT1IgQU5ZIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsCisgKiBF
WEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUyAoSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sCisgKiBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VT
OyBMT1NTIE9GIFVTRSwgREFUQSwgT1IKKyAqIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQ
VElPTikgSE9XRVZFUiBDQVVTRUQgQU5EIE9OIEFOWSBUSEVPUlkKKyAqIE9GIExJQUJJTElUWSwg
V0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xV
RElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBU
SEUgVVNFCisgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKworI2lm
IEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2luY2x1ZGUgIkFSTUFzc2Vt
Ymxlci5oIgorCituYW1lc3BhY2UgSlNDIHsKKworLy8gUGF0Y2hpbmcgaGVscGVycworCitBUk1X
b3JkKiBBUk1Bc3NlbWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMy
X3QqIGNvbnN0UG9vbCkKK3sKKyAgICAvLyBNdXN0IGJlIGFuIGxkciAuLi4sIFtwYyArLy0gaW1t
XQorICAgIEFTU0VSVCgoKmluc24gJiAweDBmN2YwMDAwKSA9PSAweDA1MWYwMDAwKTsKKworICAg
IGlmIChjb25zdFBvb2wgJiYgKCppbnNuICYgMHgxKSkKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZCo+KGNvbnN0UG9vbCArICgoKmluc24gJiBTRFRfT0ZGU0VUX01BU0sp
ID4+IDEpKTsKKworICAgIEFSTVdvcmQgYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4o
aW5zbikgKyAyICogc2l6ZW9mKEFSTVdvcmQpOworICAgIGlmICgqaW5zbiAmIERUX1VQKQorICAg
ICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oYWRkciArICgqaW5zbiAmIFNE
VF9PRkZTRVRfTUFTSykpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nh
c3Q8QVJNV29yZCo+KGFkZHIgLSAoKmluc24gJiBTRFRfT0ZGU0VUX01BU0spKTsKK30KKwordm9p
ZCBBUk1Bc3NlbWJsZXI6OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQq
IHRvKQoreworICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihj
b2RlKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKKworICAgIGlmICghZnJv
bS5tX2xhdGVQYXRjaCkgeworICAgICAgICBpbnQgZGlmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJN
V29yZCo+KHRvKSAtIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGluc24gKyAyKTsKKworICAg
ICAgICBpZiAoKGRpZmYgPD0gQk9GRlNFVF9NQVggJiYgZGlmZiA+PSBCT0ZGU0VUX01JTikpIHsK
KyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1bnByb3RlY3Qo
aW5zbiwgc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgICAgICppbnNuID0gQiB8IGdldENvbmRp
dGlvbmFsRmllbGQoKmluc24pIHwgKGRpZmYgJiBCUkFOQ0hfTUFTSyk7CisgICAgICAgICAgICBy
ZXR1cm47CisgICAgICAgIH0KKyAgICB9CisgICAgQVJNV29yZCogYWRkciA9IGdldExkckltbUFk
ZHJlc3MoaW5zbik7CisgICAgRXhlY3V0YWJsZUFsbG9jYXRvcjo6TWFrZVdyaXRhYmxlIHVucHJv
dGVjdChhZGRyLCBzaXplb2YoQVJNV29yZCkpOworICAgICphZGRyID0gcmVpbnRlcnByZXRfY2Fz
dDxBUk1Xb3JkPih0byk7Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjpwYXRjaENvbnN0YW50UG9v
bExvYWQodm9pZCogbG9hZEFkZHIsIHZvaWQqIGNvbnN0UG9vbEFkZHIpCit7CisgICAgQVJNV29y
ZCAqbGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4obG9hZEFkZHIpOworICAgIEFSTVdv
cmQgZGlmZiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGNvbnN0UG9vbEFkZHIpIC0gbGRy
OworICAgIEFSTVdvcmQgaW5kZXggPSAoKmxkciAmIDB4ZmZmKSA+PiAxOworCisgICAgQVNTRVJU
KGRpZmYgPj0gMSk7CisgICAgaWYgKGRpZmYgPj0gMiB8fCBpbmRleCA+IDApIHsKKyAgICAgICAg
ZGlmZiA9IChkaWZmICsgaW5kZXggLSAyKSAqIHNpemVvZihBUk1Xb3JkKTsKKyAgICAgICAgQVNT
RVJUKGRpZmYgPD0gMHhmZmYpOworICAgICAgICAqbGRyID0gKCpsZHIgJiB+MHhmZmYpIHwgZGlm
ZjsKKyAgICB9IGVsc2UKKyAgICAgICAgKmxkciA9ICgqbGRyICYgfigweGZmZiB8IEFSTUFzc2Vt
Ymxlcjo6RFRfVVApKSB8IHNpemVvZihBUk1Xb3JkKTsKK30KKworLy8gSGFuZGxlIGltbWVkaWF0
ZXMKKworQVJNV29yZCBBUk1Bc3NlbWJsZXI6OmdldE9wMihBUk1Xb3JkIGltbSkKK3sKKyAgICBp
bnQgcm9sOworCisgICAgaWYgKGltbSA8PSAweGZmKQorICAgICAgICByZXR1cm4gT1AyX0lNTSB8
IGltbTsKKworICAgIGlmICgoaW1tICYgMHhmZjAwMDAwMCkgPT0gMCkgeworICAgICAgICBpbW0g
PDw9IDg7CisgICAgICAgIHJvbCA9IDg7CisgICAgfQorICAgIGVsc2UgeworICAgICAgICBpbW0g
PSAoaW1tIDw8IDI0KSB8IChpbW0gPj4gOCk7CisgICAgICAgIHJvbCA9IDA7CisgICAgfQorCisg
ICAgaWYgKChpbW0gJiAweGZmMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gODsKKyAg
ICAgICAgcm9sICs9IDQ7CisgICAgfQorCisgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAw
KSB7CisgICAgICAgIGltbSA8PD0gNDsKKyAgICAgICAgcm9sICs9IDI7CisgICAgfQorCisgICAg
aWYgKChpbW0gJiAweGMwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbSA8PD0gMjsKKyAgICAg
ICAgcm9sICs9IDE7CisgICAgfQorCisgICAgaWYgKChpbW0gJiAweDAwZmZmZmZmKSA9PSAwKQor
ICAgICAgICByZXR1cm4gT1AyX0lNTSB8IChpbW0gPj4gMjQpIHwgKHJvbCA8PCA4KTsKKworICAg
IHJldHVybiAwOworfQorCitpbnQgQVJNQXNzZW1ibGVyOjpnZW5JbnQoaW50IHJlZywgQVJNV29y
ZCBpbW0sIGJvb2wgcG9zaXRpdmUpCit7CisgICAgLy8gU3RlcDE6IFNlYXJjaCBhIG5vbi1pbW1l
ZGlhdGUgcGFydAorICAgIEFSTVdvcmQgbWFzazsKKyAgICBBUk1Xb3JkIGltbTE7CisgICAgQVJN
V29yZCBpbW0yOworICAgIGludCByb2w7CisKKyAgICBtYXNrID0gMHhmZjAwMDAwMDsKKyAgICBy
b2wgPSA4OworICAgIHdoaWxlKDEpIHsKKyAgICAgICAgaWYgKChpbW0gJiBtYXNrKSA9PSAwKSB7
CisgICAgICAgICAgICBpbW0gPSAoaW1tIDw8IHJvbCkgfCAoaW1tID4+ICgzMiAtIHJvbCkpOwor
ICAgICAgICAgICAgcm9sID0gNCArIChyb2wgPj4gMSk7CisgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgfQorICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgbWFzayA+Pj0gMjsKKyAgICAgICAg
aWYgKG1hc2sgJiAweDMpIHsKKyAgICAgICAgICAgIC8vIHJvbCA4CisgICAgICAgICAgICBpbW0g
PSAoaW1tIDw8IDgpIHwgKGltbSA+PiAyNCk7CisgICAgICAgICAgICBtYXNrID0gMHhmZjAwOwor
ICAgICAgICAgICAgcm9sID0gMjQ7CisgICAgICAgICAgICB3aGlsZSAoMSkgeworICAgICAgICAg
ICAgICAgIGlmICgoaW1tICYgbWFzaykgPT0gMCkgeworICAgICAgICAgICAgICAgICAgICBpbW0g
PSAoaW1tIDw8IHJvbCkgfCAoaW1tID4+ICgzMiAtIHJvbCkpOworICAgICAgICAgICAgICAgICAg
ICByb2wgPSAocm9sID4+IDEpIC0gODsKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIHJvbCArPSAyOworICAgICAgICAgICAgICAg
IG1hc2sgPj49IDI7CisgICAgICAgICAgICAgICAgaWYgKG1hc2sgJiAweDMpCisgICAgICAgICAg
ICAgICAgICAgIHJldHVybiAwOworICAgICAgICAgICAgfQorICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgIH0KKyAgICB9CisKKyAgICBBU1NFUlQoKGltbSAmIDB4ZmYpID09IDApOworCisgICAg
aWYgKChpbW0gJiAweGZmMDAwMDAwKSA9PSAwKSB7CisgICAgICAgIGltbTEgPSBPUDJfSU1NIHwg
KChpbW0gPj4gMTYpICYgMHhmZikgfCAoKChyb2wgKyA0KSAmIDB4ZikgPDwgOCk7CisgICAgICAg
IGltbTIgPSBPUDJfSU1NIHwgKChpbW0gPj4gOCkgJiAweGZmKSB8ICgoKHJvbCArIDgpICYgMHhm
KSA8PCA4KTsKKyAgICB9IGVsc2UgaWYgKGltbSAmIDB4YzAwMDAwMDApIHsKKyAgICAgICAgaW1t
MSA9IE9QMl9JTU0gfCAoKGltbSA+PiAyNCkgJiAweGZmKSB8ICgocm9sICYgMHhmKSA8PCA4KTsK
KyAgICAgICAgaW1tIDw8PSA4OworICAgICAgICByb2wgKz0gNDsKKworICAgICAgICBpZiAoKGlt
bSAmIDB4ZmYwMDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAg
ICAgIHJvbCArPSA0OworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAw
KSA9PSAwKSB7CisgICAgICAgICAgICBpbW0gPDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsK
KyAgICAgICAgfQorCisgICAgICAgIGlmICgoaW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAg
ICAgICAgICAgaW1tIDw8PSAyOworICAgICAgICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKwor
ICAgICAgICBpZiAoKGltbSAmIDB4MDBmZmZmZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0g
T1AyX0lNTSB8IChpbW0gPj4gMjQpIHwgKChyb2wgJiAweGYpIDw8IDgpOworICAgICAgICBlbHNl
CisgICAgICAgICAgICByZXR1cm4gMDsKKyAgICB9IGVsc2UgeworICAgICAgICBpZiAoKGltbSAm
IDB4ZjAwMDAwMDApID09IDApIHsKKyAgICAgICAgICAgIGltbSA8PD0gNDsKKyAgICAgICAgICAg
IHJvbCArPSAyOworICAgICAgICB9CisKKyAgICAgICAgaWYgKChpbW0gJiAweGMwMDAwMDAwKSA9
PSAwKSB7CisgICAgICAgICAgICBpbW0gPDw9IDI7CisgICAgICAgICAgICByb2wgKz0gMTsKKyAg
ICAgICAgfQorCisgICAgICAgIGltbTEgPSBPUDJfSU1NIHwgKChpbW0gPj4gMjQpICYgMHhmZikg
fCAoKHJvbCAmIDB4ZikgPDwgOCk7CisgICAgICAgIGltbSA8PD0gODsKKyAgICAgICAgcm9sICs9
IDQ7CisKKyAgICAgICAgaWYgKChpbW0gJiAweGYwMDAwMDAwKSA9PSAwKSB7CisgICAgICAgICAg
ICBpbW0gPDw9IDQ7CisgICAgICAgICAgICByb2wgKz0gMjsKKyAgICAgICAgfQorCisgICAgICAg
IGlmICgoaW1tICYgMHhjMDAwMDAwMCkgPT0gMCkgeworICAgICAgICAgICAgaW1tIDw8PSAyOwor
ICAgICAgICAgICAgcm9sICs9IDE7CisgICAgICAgIH0KKworICAgICAgICBpZiAoKGltbSAmIDB4
MDBmZmZmZmYpID09IDApCisgICAgICAgICAgICBpbW0yID0gT1AyX0lNTSB8IChpbW0gPj4gMjQp
IHwgKChyb2wgJiAweGYpIDw8IDgpOworICAgICAgICBlbHNlCisgICAgICAgICAgICByZXR1cm4g
MDsKKyAgICB9CisKKyAgICBpZiAocG9zaXRpdmUpIHsKKyAgICAgICAgbW92X3IocmVnLCBpbW0x
KTsKKyAgICAgICAgb3JyX3IocmVnLCByZWcsIGltbTIpOworICAgIH0gZWxzZSB7CisgICAgICAg
IG12bl9yKHJlZywgaW1tMSk7CisgICAgICAgIGJpY19yKHJlZywgcmVnLCBpbW0yKTsKKyAgICB9
CisKKyAgICByZXR1cm4gMTsKK30KKworQVJNV29yZCBBUk1Bc3NlbWJsZXI6OmdldEltbShBUk1X
b3JkIGltbSwgaW50IHRtcFJlZywgYm9vbCBpbnZlcnQpCit7CisgICAgQVJNV29yZCB0bXA7CisK
KyAgICAvLyBEbyBpdCBieSAxIGluc3RydWN0aW9uCisgICAgdG1wID0gZ2V0T3AyKGltbSk7Cisg
ICAgaWYgKHRtcCkKKyAgICAgICAgcmV0dXJuIHRtcDsKKworICAgIHRtcCA9IGdldE9wMih+aW1t
KTsKKyAgICBpZiAodG1wKSB7CisgICAgICAgIGlmIChpbnZlcnQpCisgICAgICAgICAgICByZXR1
cm4gdG1wIHwgT1AyX0lOVl9JTU07CisgICAgICAgIG12bl9yKHRtcFJlZywgdG1wKTsKKyAgICAg
ICAgcmV0dXJuIHRtcFJlZzsKKyAgICB9CisKKyAgICAvLyBEbyBpdCBieSAyIGluc3RydWN0aW9u
CisgICAgaWYgKGdlbkludCh0bXBSZWcsIGltbSwgdHJ1ZSkpCisgICAgICAgIHJldHVybiB0bXBS
ZWc7CisgICAgaWYgKGdlbkludCh0bXBSZWcsIH5pbW0sIGZhbHNlKSkKKyAgICAgICAgcmV0dXJu
IHRtcFJlZzsKKworICAgIGxkcl9pbW0odG1wUmVnLCBpbW0pOworICAgIHJldHVybiB0bXBSZWc7
Cit9CisKK3ZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVzdCkK
K3sKKyAgICBBUk1Xb3JkIHRtcDsKKworICAgIC8vIERvIGl0IGJ5IDEgaW5zdHJ1Y3Rpb24KKyAg
ICB0bXAgPSBnZXRPcDIoaW1tKTsKKyAgICBpZiAodG1wKSB7CisgICAgICAgIG1vdl9yKGRlc3Qs
IHRtcCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICB0bXAgPSBnZXRPcDIofmltbSk7
CisgICAgaWYgKHRtcCkgeworICAgICAgICBtdm5fcihkZXN0LCB0bXApOworICAgICAgICByZXR1
cm47CisgICAgfQorCisgICAgLy8gRG8gaXQgYnkgMiBpbnN0cnVjdGlvbgorICAgIGlmIChnZW5J
bnQoZGVzdCwgaW1tLCB0cnVlKSkKKyAgICAgICAgcmV0dXJuOworICAgIGlmIChnZW5JbnQoZGVz
dCwgfmltbSwgZmFsc2UpKQorICAgICAgICByZXR1cm47CisKKyAgICBsZHJfaW1tKGRlc3QsIGlt
bSk7Cit9CisKKy8vIE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKKwordm9pZCBBUk1Bc3NlbWJs
ZXI6OmRhdGFUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0
ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ID49IDApIHsKKyAg
ICAgICAgaWYgKG9mZnNldCA8PSAweGZmZikKKyAgICAgICAgICAgIGR0cl91KGlzTG9hZCwgc3Jj
RHN0LCBiYXNlLCBvZmZzZXQpOworICAgICAgICBlbHNlIGlmIChvZmZzZXQgPD0gMHhmZmZmZikg
eworICAgICAgICAgICAgYWRkX3IoQVJNOjpTMCwgYmFzZSwgT1AyX0lNTSB8IChvZmZzZXQgPj4g
MTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgIGR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06
OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICBBUk1X
b3JkIHJlZyA9IGdldEltbShvZmZzZXQsIEFSTTo6UzApOworICAgICAgICAgICAgZHRyX3VyKGlz
TG9hZCwgc3JjRHN0LCBiYXNlLCByZWcpOworICAgICAgICB9CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgb2Zmc2V0ID0gLW9mZnNldDsKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweGZmZikKKyAgICAg
ICAgICAgIGR0cl9kKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBvZmZzZXQpOworICAgICAgICBlbHNl
IGlmIChvZmZzZXQgPD0gMHhmZmZmZikgeworICAgICAgICAgICAgc3ViX3IoQVJNOjpTMCwgYmFz
ZSwgT1AyX0lNTSB8IChvZmZzZXQgPj4gMTIpIHwgKDEwIDw8IDgpKTsKKyAgICAgICAgICAgIGR0
cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgICBBUk1Xb3JkIHJlZyA9IGdldEltbShvZmZzZXQsIEFSTTo6UzAp
OworICAgICAgICAgICAgZHRyX2RyKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCByZWcpOworICAgICAg
ICB9CisgICAgfQorfQorCit2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMihi
b29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJ
RCBpbmRleCwgaW50IHNjYWxlLCBpbnQzMl90IG9mZnNldCkKK3sKKyAgICBBUk1Xb3JkIG9wMjsK
KworICAgIEFTU0VSVChzY2FsZSA+PSAwICYmIHNjYWxlIDw9IDMpOworICAgIG9wMiA9IGxzbChp
bmRleCwgc2NhbGUpOworCisgICAgaWYgKG9mZnNldCA+PSAwICYmIG9mZnNldCA8PSAweGZmZikg
eworICAgICAgICBhZGRfcihBUk06OlMwLCBiYXNlLCBvcDIpOworICAgICAgICBkdHJfdShpc0xv
YWQsIHNyY0RzdCwgQVJNOjpTMCwgb2Zmc2V0KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKyAg
ICBpZiAob2Zmc2V0IDw9IDAgJiYgb2Zmc2V0ID49IC0weGZmZikgeworICAgICAgICBhZGRfcihB
Uk06OlMwLCBiYXNlLCBvcDIpOworICAgICAgICBkdHJfZChpc0xvYWQsIHNyY0RzdCwgQVJNOjpT
MCwgLW9mZnNldCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICBtb3ZlSW1tKG9mZnNl
dCwgQVJNOjpTMCk7CisgICAgYWRkX3IoQVJNOjpTMCwgQVJNOjpTMCwgb3AyKTsKKyAgICBkdHJf
dXIoaXNMb2FkLCBzcmNEc3QsIGJhc2UsIEFSTTo6UzApOworfQorCit2b2lkKiBBUk1Bc3NlbWJs
ZXI6OmV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpCit7CisgICAgY2hh
ciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8Y2hhcio+KG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5
KGFsbG9jYXRvcikpOworCisgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRlciA9IG1fanVtcHMu
YmVnaW4oKTsgaXRlciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKKyAgICAgICAgQVJNV29y
ZCogbGRyQWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGRhdGEgKyAqaXRlcik7Cisg
ICAgICAgIEFSTVdvcmQqIG9mZnNldCA9IGdldExkckltbUFkZHJlc3MobGRyQWRkcik7CisgICAg
ICAgIGlmICgqb2Zmc2V0ICE9IDB4ZmZmZmZmZmYpCisgICAgICAgICAgICBsaW5rQnJhbmNoKGRh
dGEsIEptcFNyYygqaXRlciksIGRhdGEgKyAqb2Zmc2V0KTsKKyAgICB9CisKKyAgICByZXR1cm4g
ZGF0YTsKK30KKworfSAvLyBuYW1lc3BhY2UgSlNDCisKKyNlbmRpZiAvLyBFTkFCTEUoQVNTRU1C
TEVSKSAmJiBQTEFURk9STShBUk0pCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmgKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZGIxZGI4OAotLS0gL2Rldi9u
dWxsCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMCww
ICsxLDcwNiBAQAorLyoKKyAqIENvcHlyaWdodCAoQykgMjAwOSBVbml2ZXJzaXR5IG9mIFN6ZWdl
ZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0
IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBj
b25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiBSZWRpc3RyaWJ1
dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBk
aXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJp
YWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJF
IElTIFBST1ZJREVEIEJZIFVOSVZFUlNJVFkgT0YgU1pFR0VEIGBgQVMgSVMnJyBBTkQgQU5ZCisg
KiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlU
RUQgVE8sIFRIRQorICogSU1QTElFRCBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQg
RklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSCisgKiBQVVJQT1NFIEFSRSBESVNDTEFJTUVELiAgSU4g
Tk8gRVZFTlQgU0hBTEwgVU5JVkVSU0lUWSBPRiBTWkVHRUQgT1IKKyAqIENPTlRSSUJVVE9SUyBC
RSBMSUFCTEUgRk9SIEFOWSBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLAor
ICogRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMgKElOQ0xVRElORywgQlVUIE5P
VCBMSU1JVEVEIFRPLAorICogUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJW
SUNFUzsgTE9TUyBPRiBVU0UsIERBVEEsIE9SCisgKiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRF
UlJVUFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORCBPTiBBTlkgVEhFT1JZCisgKiBPRiBMSUFCSUxJ
VFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJ
TkNMVURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQg
T0YgVEhFIFVTRQorICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQ
T1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaWZuZGVmIEFSTUFzc2VtYmxlcl9o
CisjZGVmaW5lIEFSTUFzc2VtYmxlcl9oCisKKyNpbmNsdWRlIDx3dGYvUGxhdGZvcm0uaD4KKwor
I2lmIEVOQUJMRShBU1NFTUJMRVIpICYmIFBMQVRGT1JNKEFSTSkKKworI2luY2x1ZGUgIkFzc2Vt
YmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCIKKyNpbmNsdWRlIDx3dGYvQXNzZXJ0aW9ucy5o
PgorbmFtZXNwYWNlIEpTQyB7CisKK3R5cGVkZWYgdWludDMyX3QgQVJNV29yZDsKKworbmFtZXNw
YWNlIEFSTSB7CisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgcjAgPSAwLAorICAgICAgICBy
MSwKKyAgICAgICAgcjIsCisgICAgICAgIHIzLAorICAgICAgICBTMCA9IHIzLAorICAgICAgICBy
NCwKKyAgICAgICAgcjUsCisgICAgICAgIHI2LAorICAgICAgICByNywKKyAgICAgICAgcjgsCisg
ICAgICAgIFMxID0gcjgsCisgICAgICAgIHI5LAorICAgICAgICByMTAsCisgICAgICAgIHIxMSwK
KyAgICAgICAgcjEyLAorICAgICAgICByMTMsCisgICAgICAgIHNwID0gcjEzLAorICAgICAgICBy
MTQsCisgICAgICAgIGxyID0gcjE0LAorICAgICAgICByMTUsCisgICAgICAgIHBjID0gcjE1Cisg
ICAgfSBSZWdpc3RlcklEOworCisgICAgdHlwZWRlZiBlbnVtIHsKKyAgICAgICAgZnAwIC8vRklY
TUUKKyAgICB9IEZQUmVnaXN0ZXJJRDsKK30gLy8gbmFtZXNwYWNlIEFSTQorCisgICAgY2xhc3Mg
QVJNQXNzZW1ibGVyIHsKKyAgICBwdWJsaWM6CisgICAgICAgIHR5cGVkZWYgQVJNOjpSZWdpc3Rl
cklEIFJlZ2lzdGVySUQ7CisgICAgICAgIHR5cGVkZWYgQVJNOjpGUFJlZ2lzdGVySUQgRlBSZWdp
c3RlcklEOworICAgICAgICB0eXBlZGVmIEFzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2w8
MjA0OCwgNCwgNCwgQVJNQXNzZW1ibGVyPiBBUk1CdWZmZXI7CisgICAgICAgIHR5cGVkZWYgV1RG
OjpTZWdtZW50ZWRWZWN0b3I8aW50LCA2ND4gSnVtcHM7CisKKyAgICAgICAgQVJNQXNzZW1ibGVy
KCkgeyB9CisKKyAgICAgICAgLy8gQVJNIGNvbmRpdGlvbmFsIGNvbnN0YW50cworICAgICAgICB0
eXBlZGVmIGVudW0geworICAgICAgICAgICAgRVEgPSAweDAwMDAwMDAwLCAvLyBaZXJvCisgICAg
ICAgICAgICBORSA9IDB4MTAwMDAwMDAsIC8vIE5vbi16ZXJvCisgICAgICAgICAgICBDUyA9IDB4
MjAwMDAwMDAsCisgICAgICAgICAgICBDQyA9IDB4MzAwMDAwMDAsCisgICAgICAgICAgICBNSSA9
IDB4NDAwMDAwMDAsCisgICAgICAgICAgICBQTCA9IDB4NTAwMDAwMDAsCisgICAgICAgICAgICBW
UyA9IDB4NjAwMDAwMDAsCisgICAgICAgICAgICBWQyA9IDB4NzAwMDAwMDAsCisgICAgICAgICAg
ICBISSA9IDB4ODAwMDAwMDAsCisgICAgICAgICAgICBMUyA9IDB4OTAwMDAwMDAsCisgICAgICAg
ICAgICBHRSA9IDB4YTAwMDAwMDAsCisgICAgICAgICAgICBMVCA9IDB4YjAwMDAwMDAsCisgICAg
ICAgICAgICBHVCA9IDB4YzAwMDAwMDAsCisgICAgICAgICAgICBMRSA9IDB4ZDAwMDAwMDAsCisg
ICAgICAgICAgICBBTCA9IDB4ZTAwMDAwMDAKKyAgICAgICAgfSBDb25kaXRpb247CisKKyAgICAg
ICAgLy8gQVJNIGluc3RydWN0aW9uIGNvbnN0YW50cworICAgICAgICBlbnVtIHsKKyAgICAgICAg
ICAgIEFORCA9ICgweDAgPDwgMjEpLAorICAgICAgICAgICAgRU9SID0gKDB4MSA8PCAyMSksCisg
ICAgICAgICAgICBTVUIgPSAoMHgyIDw8IDIxKSwKKyAgICAgICAgICAgIFJTQiA9ICgweDMgPDwg
MjEpLAorICAgICAgICAgICAgQUREID0gKDB4NCA8PCAyMSksCisgICAgICAgICAgICBBREMgPSAo
MHg1IDw8IDIxKSwKKyAgICAgICAgICAgIFNCQyA9ICgweDYgPDwgMjEpLAorICAgICAgICAgICAg
UlNDID0gKDB4NyA8PCAyMSksCisgICAgICAgICAgICBUU1QgPSAoMHg4IDw8IDIxKSwKKyAgICAg
ICAgICAgIFRFUSA9ICgweDkgPDwgMjEpLAorICAgICAgICAgICAgQ01QID0gKDB4YSA8PCAyMSks
CisgICAgICAgICAgICBDTU4gPSAoMHhiIDw8IDIxKSwKKyAgICAgICAgICAgIE9SUiA9ICgweGMg
PDwgMjEpLAorICAgICAgICAgICAgTU9WID0gKDB4ZCA8PCAyMSksCisgICAgICAgICAgICBCSUMg
PSAoMHhlIDw8IDIxKSwKKyAgICAgICAgICAgIE1WTiA9ICgweGYgPDwgMjEpLAorICAgICAgICAg
ICAgTVVMID0gMHgwMDAwMDA5MCwKKyAgICAgICAgICAgIE1VTEwgPSAweDAwYzAwMDkwLAorICAg
ICAgICAgICAgRFRSID0gMHgwNTAwMDAwMCwKKyAgICAgICAgICAgIExEUkggPSAweDAwMTAwMDkw
LAorICAgICAgICAgICAgU1RSSCA9IDB4MDAwMDAwOTAsCisgICAgICAgICAgICBTVE1EQiA9IDB4
MDkyMDAwMDAsCisgICAgICAgICAgICBMRE1JQSA9IDB4MDhiMDAwMDAsCisgICAgICAgICAgICBC
ID0gMHgwYTAwMDAwMCwKKyAgICAgICAgICAgIEJMID0gMHgwYjAwMDAwMCwKKyNpZiBBUk1fQVJD
SF9WRVJTSU9OID49IDUKKyAgICAgICAgICAgIENMWiA9IDB4MDE2ZjBmMTAsCisgICAgICAgICAg
ICBCS1BUID0gMHhlMTIwMDcwLAorI2VuZGlmCisgICAgICAgIH07CisKKyAgICAgICAgZW51bSB7
CisgICAgICAgICAgICBPUDJfSU1NID0gKDEgPDwgMjUpLAorICAgICAgICAgICAgT1AyX0lNTWgg
PSAoMSA8PCAyMiksCisgICAgICAgICAgICBPUDJfSU5WX0lNTSA9ICgxIDw8IDI2KSwKKyAgICAg
ICAgICAgIFNFVF9DQyA9ICgxIDw8IDIwKSwKKyAgICAgICAgICAgIE9QMl9PRlNSRUcgPSAoMSA8
PCAyNSksCisgICAgICAgICAgICBEVF9VUCA9ICgxIDw8IDIzKSwKKyAgICAgICAgICAgIERUX1dC
ID0gKDEgPDwgMjEpLAorICAgICAgICAgICAgLy8gVGhpcyBmbGFnIGlzIGlubGN1ZGVkIGluIExE
UiBhbmQgU1RSCisgICAgICAgICAgICBEVF9QUkUgPSAoMSA8PCAyNCksCisgICAgICAgICAgICBI
RFRfVUggPSAoMSA8PCA1KSwKKyAgICAgICAgICAgIERUX0xPQUQgPSAoMSA8PCAyMCksCisgICAg
ICAgIH07CisKKyAgICAgICAgLy8gTWFza3Mgb2YgQVJNIGluc3RydWN0aW9ucworICAgICAgICBl
bnVtIHsKKyAgICAgICAgICAgIEJSQU5DSF9NQVNLID0gMHgwMGZmZmZmZiwKKyAgICAgICAgICAg
IE5PTkFSTSA9IDB4ZjAwMDAwMDAsCisgICAgICAgICAgICBTRFRfTUFTSyA9IDB4MGMwMDAwMDAs
CisgICAgICAgICAgICBTRFRfT0ZGU0VUX01BU0sgPSAweGZmZiwKKyAgICAgICAgfTsKKworICAg
ICAgICBlbnVtIHsKKyAgICAgICAgICAgIEJPRkZTRVRfTUlOID0gLTB4MDA4MDAwMDAsCisgICAg
ICAgICAgICBCT0ZGU0VUX01BWCA9IDB4MDA3ZmZmZmYsCisgICAgICAgICAgICBTRFQgPSAweDA0
MDAwMDAwLAorICAgICAgICB9OworCisgICAgICAgIGVudW0geworICAgICAgICAgICAgcGFkRm9y
QWxpZ244ICA9IDB4MDAsCisgICAgICAgICAgICBwYWRGb3JBbGlnbjE2ID0gMHgwMDAwLAorICAg
ICAgICAgICAgcGFkRm9yQWxpZ24zMiA9IDB4ZWUxMjAwNzAsCisgICAgICAgIH07CisKKyAgICAg
ICAgY2xhc3MgSm1wU3JjIHsKKyAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBBUk1Bc3NlbWJsZXI7
CisgICAgICAgIHB1YmxpYzoKKyAgICAgICAgICAgIEptcFNyYygpCisgICAgICAgICAgICAgICAg
OiBtX29mZnNldCgtMSkKKyAgICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKGZhbHNlKQorICAg
ICAgICAgICAgeworICAgICAgICAgICAgfQorCisgICAgICAgICAgICB2b2lkIGVuYWJsZUxhdGVQ
YXRjaCgpIHsgbV9sYXRlUGF0Y2ggPSB0cnVlOyB9CisgICAgICAgIHByaXZhdGU6CisgICAgICAg
ICAgICBKbXBTcmMoaW50IG9mZnNldCkKKyAgICAgICAgICAgICAgICA6IG1fb2Zmc2V0KG9mZnNl
dCkKKyAgICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKGZhbHNlKQorICAgICAgICAgICAgewor
ICAgICAgICAgICAgfQorCisgICAgICAgICAgICBpbnQgbV9vZmZzZXQgOiAzMTsKKyAgICAgICAg
ICAgIGludCBtX2xhdGVQYXRjaCA6IDE7CisgICAgICAgIH07CisKKyAgICAgICAgY2xhc3MgSm1w
RHN0IHsKKyAgICAgICAgICAgIGZyaWVuZCBjbGFzcyBBUk1Bc3NlbWJsZXI7CisgICAgICAgIHB1
YmxpYzoKKyAgICAgICAgICAgIEptcERzdCgpCisgICAgICAgICAgICAgICAgOiBtX29mZnNldCgt
MSkKKyAgICAgICAgICAgICAgICAsIG1fdXNlZChmYWxzZSkKKyAgICAgICAgICAgIHsKKyAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgYm9vbCBpc1VzZWQoKSBjb25zdCB7IHJldHVybiBtX3Vz
ZWQ7IH0KKyAgICAgICAgICAgIHZvaWQgdXNlZCgpIHsgbV91c2VkID0gdHJ1ZTsgfQorICAgICAg
ICBwcml2YXRlOgorICAgICAgICAgICAgSm1wRHN0KGludCBvZmZzZXQpCisgICAgICAgICAgICAg
ICAgOiBtX29mZnNldChvZmZzZXQpCisgICAgICAgICAgICAgICAgLCBtX3VzZWQoZmFsc2UpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fb2Zmc2V0ID09IG9mZnNldCk7
CisgICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGludCBtX29mZnNldCA6IDMxOworICAgICAg
ICAgICAgaW50IG1fdXNlZCA6IDE7CisgICAgICAgIH07CisKKyAgICAgICAgLy8gSW5zdHJ1Y3Rp
b24gZm9ybWF0aW5nCisKKyAgICAgICAgdm9pZCBlbWl0SW5zdChBUk1Xb3JkIG9wLCBpbnQgcmQs
IGludCBybiwgQVJNV29yZCBvcDIpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVCAoICgo
b3AyICYgfk9QMl9JTU0pIDw9IDB4ZmZmKSB8fCAoKChvcDIgJiB+T1AyX0lNTWgpIDw9IDB4ZmZm
KSkgKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludChvcCB8IFJOKHJuKSB8IFJEKHJkKSB8
IG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFuZF9yKGludCByZCwgaW50IHJuLCBB
Uk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVt
aXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEFORCwgcmQsIHJuLCBvcDIpOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBhbmRzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3Ay
LCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3Rh
dGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQU5EIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGVvcl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRp
Y19jYXN0PEFSTVdvcmQ+KGNjKSB8IEVPUiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBlb3JzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24g
Y2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJN
V29yZD4oY2MpIHwgRU9SIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAg
ICAgICB2b2lkIHN1Yl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNj
ID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdv
cmQ+KGNjKSB8IFNVQiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBz
dWJzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAg
ICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwg
U1VCIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHJz
Yl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAg
ICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFJT
QiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2JzX3IoaW50IHJk
LCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgUlNCIHwgU0VUX0ND
LCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkZF9yKGludCByZCwg
aW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEFERCwgcmQsIHJuLCBv
cDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBhZGRzX3IoaW50IHJkLCBpbnQgcm4sIEFS
TVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1p
dEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQUREIHwgU0VUX0NDLCByZCwgcm4sIG9w
Mik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGFkY19yKGludCByZCwgaW50IHJuLCBBUk1X
b3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJ
bnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEFEQywgcmQsIHJuLCBvcDIpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBhZGNzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBD
b25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGlj
X2Nhc3Q8QVJNV29yZD4oY2MpIHwgQURDIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIHNiY19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19j
YXN0PEFSTVdvcmQ+KGNjKSB8IFNCQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBzYmNzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2Mg
PSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29y
ZD4oY2MpIHwgU0JDIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIHJzY19yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0g
QUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+
KGNjKSB8IFJTQywgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCByc2Nz
X3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAg
ICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgUlND
IHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIHRzdF9y
KGludCBybiwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAg
ICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBUU1QgfCBTRVRfQ0Ms
IDAsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCB0ZXFfcihpbnQgcm4sIEFS
TVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1p
dEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgVEVRIHwgU0VUX0NDLCAwLCBybiwgb3Ay
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgY21wX3IoaW50IHJuLCBBUk1Xb3JkIG9wMiwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRp
Y19jYXN0PEFSTVdvcmQ+KGNjKSB8IENNUCB8IFNFVF9DQywgMCwgcm4sIG9wMik7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIG9ycl9yKGludCByZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19j
YXN0PEFSTVdvcmQ+KGNjKSB8IE9SUiwgcmQsIHJuLCBvcDIpOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBvcnJzX3IoaW50IHJkLCBpbnQgcm4sIEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2Mg
PSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29y
ZD4oY2MpIHwgT1JSIHwgU0VUX0NDLCByZCwgcm4sIG9wMik7CisgICAgICAgIH0KKworICAgICAg
ICB2b2lkIG1vdl9yKGludCByZCwgQVJNV29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAg
ICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBN
T1YsIHJkLCBBUk06OnIwLCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBtb3ZzX3Io
aW50IHJkLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IE1PViB8IFNFVF9DQywg
cmQsIEFSTTo6cjAsIG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGJpY19yKGludCBy
ZCwgaW50IHJuLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEJJQywgcmQsIHJu
LCBvcDIpOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBiaWNzX3IoaW50IHJkLCBpbnQgcm4s
IEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQklDIHwgU0VUX0NDLCByZCwgcm4s
IG9wMik7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIG12bl9yKGludCByZCwgQVJNV29yZCBv
cDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChz
dGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBNVk4sIHJkLCBBUk06OnIwLCBvcDIpOworICAgICAg
ICB9CisKKyAgICAgICAgdm9pZCBtdm5zX3IoaW50IHJkLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9u
IGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFS
TVdvcmQ+KGNjKSB8IE1WTiB8IFNFVF9DQywgcmQsIEFSTTo6cjAsIG9wMik7CisgICAgICAgIH0K
KworICAgICAgICB2b2lkIG11bF9yKGludCByZCwgaW50IHJuLCBpbnQgcm0sIENvbmRpdGlvbiBj
YyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nh
c3Q8QVJNV29yZD4oY2MpIHwgTVVMIHwgUk4ocmQpIHwgUlMocm4pIHwgUk0ocm0pKTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgbXVsc19yKGludCByZCwgaW50IHJuLCBpbnQgcm0sIENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoc3Rh
dGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTVVMIHwgU0VUX0NDIHwgUk4ocmQpIHwgUlMocm4pIHwg
Uk0ocm0pKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgbXVsbF9yKGludCByZGhpLCBpbnQg
cmRsbywgaW50IHJuLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAg
ICAgICAgICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTVVMTCB8
IFJOKHJkaGkpIHwgUkQocmRsbykgfCBSUyhybikgfCBSTShybSkpOworICAgICAgICB9CisKKyAg
ICAgICAgdm9pZCBsZHJfaW1tKGludCByZCwgQVJNV29yZCBpbW0sIENvbmRpdGlvbiBjYyA9IEFM
KQorICAgICAgICB7CisgICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnRXaXRoQ29uc3RhbnRJbnQo
c3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRFRSIHwgRFRfTE9BRCB8IERUX1VQIHwgUk4oQVJN
OjpwYykgfCBSRChyZCksIGltbSwgdHJ1ZSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxk
cl91bl9pbW0oaW50IHJkLCBBUk1Xb3JkIGltbSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludFdpdGhDb25zdGFudEludChzdGF0aWNfY2Fz
dDxBUk1Xb3JkPihjYykgfCBEVFIgfCBEVF9MT0FEIHwgRFRfVVAgfCBSTihBUk06OnBjKSB8IFJE
KHJkKSwgaW1tKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHRyX3UoYm9vbCBpc0xvYWQs
IGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9wMiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAg
IHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IERUUiB8
IChpc0xvYWQgPyBEVF9MT0FEIDogMCkgfCBEVF9VUCwgcmQsIHJiLCBvcDIpOworICAgICAgICB9
CisKKyAgICAgICAgdm9pZCBkdHJfdXIoYm9vbCBpc0xvYWQsIGludCByZCwgaW50IHJiLCBpbnQg
cm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChz
dGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApIHwg
RFRfVVAgfCBPUDJfT0ZTUkVHLCByZCwgcmIsIHJtKTsKKyAgICAgICAgfQorCisgICAgICAgIHZv
aWQgZHRyX2QoYm9vbCBpc0xvYWQsIGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9wMiwgQ29uZGl0
aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0
PEFSTVdvcmQ+KGNjKSB8IERUUiB8IChpc0xvYWQgPyBEVF9MT0FEIDogMCksIHJkLCByYiwgb3Ay
KTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZHRyX2RyKGJvb2wgaXNMb2FkLCBpbnQgcmQs
IGludCByYiwgaW50IHJtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAg
ICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRFRSIHwgKGlzTG9hZCA/IERU
X0xPQUQgOiAwKSB8IE9QMl9PRlNSRUcsIHJkLCByYiwgcm0pOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBsZHJoX3IoaW50IHJkLCBpbnQgcm4sIGludCBybSwgQ29uZGl0aW9uIGNjID0gQUwp
CisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNj
KSB8IExEUkggfCBIRFRfVUggfCBEVF9VUCB8IERUX1BSRSwgcmQsIHJuLCBybSk7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGxkcmhfZChpbnQgcmQsIGludCByYiwgQVJNV29yZCBvcDIsIENv
bmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNf
Y2FzdDxBUk1Xb3JkPihjYykgfCBMRFJIIHwgSERUX1VIIHwgRFRfUFJFLCByZCwgcmIsIG9wMik7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGxkcmhfdShpbnQgcmQsIGludCByYiwgQVJNV29y
ZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5z
dChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBMRFJIIHwgSERUX1VIIHwgRFRfVVAgfCBEVF9Q
UkUsIHJkLCByYiwgb3AyKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgc3RyaF9yKGludCBy
biwgaW50IHJtLCBpbnQgcmQsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAg
ICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBTVFJIIHwgSERUX1VIIHwg
RFRfVVAgfCBEVF9QUkUsIHJkLCBybiwgcm0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBw
dXNoX3IoaW50IHJlZywgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IEFTU0VSVChBUk1Xb3JkKHJlZykgPD0gMHhmKTsKKyAgICAgICAgICAgIG1fYnVmZmVyLnB1dElu
dChjYyB8IERUUiB8IERUX1dCIHwgUk4oQVJNOjpzcCkgfCBSRChyZWcpIHwgMHg0KTsKKyAgICAg
ICAgfQorCisgICAgICAgIHZvaWQgcG9wX3IoaW50IHJlZywgQ29uZGl0aW9uIGNjID0gQUwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChBUk1Xb3JkKHJlZykgPD0gMHhmKTsKKyAgICAg
ICAgICAgIG1fYnVmZmVyLnB1dEludChjYyB8IChEVFIgXiBEVF9QUkUpIHwgRFRfTE9BRCB8IERU
X1VQIHwgUk4oQVJNOjpzcCkgfCBSRChyZWcpIHwgMHg0KTsKKyAgICAgICAgfQorCisgICAgICAg
IGlubGluZSB2b2lkIHBva2VfcihpbnQgcmVnLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAg
eworICAgICAgICAgICAgZHRyX2QoZmFsc2UsIEFSTTo6c3AsIDAsIHJlZywgY2MpOworICAgICAg
ICB9CisKKyAgICAgICAgaW5saW5lIHZvaWQgcGVla19yKGludCByZWcsIENvbmRpdGlvbiBjYyA9
IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBkdHJfdSh0cnVlLCByZWcsIEFSTTo6c3AsIDAs
IGNjKTsKKyAgICAgICAgfQorCisjaWYgQVJNX0FSQ0hfVkVSU0lPTiA+PSA1CisgICAgICAgIHZv
aWQgY2x6X3IoaW50IHJkLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7Cisg
ICAgICAgICAgICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgQ0xa
IHwgUkQocmQpIHwgUk0ocm0pKTsKKyAgICAgICAgfQorI2VuZGlmCisKKyAgICAgICAgdm9pZCBi
a3B0KEFSTVdvcmQgdmFsdWUpCisgICAgICAgIHsKKyNpZiBBUk1fQVJDSF9WRVJTSU9OID49IDUK
KyAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludChCS1BUIHwgKCh2YWx1ZSAmIDB4ZmYwKSA8PCA0
KSB8ICh2YWx1ZSAmIDB4ZikpOworI2Vsc2UKKyAgICAgICAgICAgIC8vIENhbm5vdCBhY2Nlc3Mg
dG8gWmVybyBtZW1vcnkgYWRkcmVzcworICAgICAgICAgICAgZHRyX2RyKHRydWUsIEFSTTo6UzAs
IEFSTTo6UzAsIEFSTTo6UzApOworI2VuZGlmCisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMg
QVJNV29yZCBsc2woaW50IHJlZywgQVJNV29yZCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAg
ICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIEFTU0VSVCh2YWx1ZSA8PSAw
eDFmKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAodmFsdWUgPDwgNykgfCAweDAwOworICAg
ICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgbHNyKGludCByZWcsIEFSTVdvcmQgdmFs
dWUpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAg
ICAgICAgICBBU1NFUlQodmFsdWUgPD0gMHgxZik7CisgICAgICAgICAgICByZXR1cm4gcmVnIHwg
KHZhbHVlIDw8IDcpIHwgMHgyMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1Xb3Jk
IGFzcihpbnQgcmVnLCBBUk1Xb3JkIHZhbHVlKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAgQVNTRVJUKHZhbHVlIDw9IDB4MWYpOwor
ICAgICAgICAgICAgcmV0dXJuIHJlZyB8ICh2YWx1ZSA8PCA3KSB8IDB4NDA7CisgICAgICAgIH0K
KworICAgICAgICBzdGF0aWMgQVJNV29yZCBsc2xfcihpbnQgcmVnLCBpbnQgc2hpZnRSZWcpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAg
ICBBU1NFUlQoc2hpZnRSZWcgPD0gQVJNOjpwYyk7CisgICAgICAgICAgICByZXR1cm4gcmVnIHwg
KHNoaWZ0UmVnIDw8IDgpIHwgMHgxMDsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyBBUk1X
b3JkIGxzcl9yKGludCByZWcsIGludCBzaGlmdFJlZykKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAgICAgIEFTU0VSVChzaGlmdFJlZyA8PSBB
Uk06OnBjKTsKKyAgICAgICAgICAgIHJldHVybiByZWcgfCAoc2hpZnRSZWcgPDwgOCkgfCAweDMw
OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIEFSTVdvcmQgYXNyX3IoaW50IHJlZywgaW50
IHNoaWZ0UmVnKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVnIDw9IEFSTTo6cGMp
OworICAgICAgICAgICAgQVNTRVJUKHNoaWZ0UmVnIDw9IEFSTTo6cGMpOworICAgICAgICAgICAg
cmV0dXJuIHJlZyB8IChzaGlmdFJlZyA8PCA4KSB8IDB4NTA7CisgICAgICAgIH0KKworICAgICAg
ICAvLyBHZW5lcmFsIGhlbHBlcnMKKworICAgICAgICBpbnQgc2l6ZSgpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIHJldHVybiBtX2J1ZmZlci5zaXplKCk7CisgICAgICAgIH0KKworICAgICAgICB2
b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQorICAgICAgICB7
CisgICAgICAgICAgICBtX2J1ZmZlci5lbnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2Up
OworICAgICAgICB9CisKKyAgICAgICAgSm1wRHN0IGxhYmVsKCkKKyAgICAgICAgeworICAgICAg
ICAgICAgcmV0dXJuIEptcERzdChtX2J1ZmZlci5zaXplKCkpOworICAgICAgICB9CisKKyAgICAg
ICAgSm1wRHN0IGFsaWduKGludCBhbGlnbm1lbnQpCisgICAgICAgIHsKKyAgICAgICAgICAgIHdo
aWxlICghbV9idWZmZXIuaXNBbGlnbmVkKGFsaWdubWVudCkpCisgICAgICAgICAgICAgICAgbW92
X3IoQVJNOjpyMCwgQVJNOjpyMCk7CisKKyAgICAgICAgICAgIHJldHVybiBsYWJlbCgpOworICAg
ICAgICB9CisKKyAgICAgICAgSm1wU3JjIGptcChDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAg
eworICAgICAgICAgICAgaW50IHMgPSBzaXplKCk7CisgICAgICAgICAgICBsZHJfdW5faW1tKEFS
TTo6cGMsIDB4ZmZmZmZmZmYsIGNjKTsKKyAgICAgICAgICAgIG1fanVtcHMuYXBwZW5kKHMpOwor
ICAgICAgICAgICAgcmV0dXJuIEptcFNyYyhzKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQq
IGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3IpOworCisgICAgICAgIC8v
IFBhdGNoaW5nIGhlbHBlcnMKKworICAgICAgICBzdGF0aWMgQVJNV29yZCogZ2V0TGRySW1tQWRk
cmVzcyhBUk1Xb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sID0gMCk7CisgICAgICAgIHN0
YXRpYyB2b2lkIGxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKTsK
KworICAgICAgICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXJJbnRlcm5hbChpbnRwdHJfdCBmcm9t
LCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgQVJNV29yZCogaW5zbiA9IHJlaW50
ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGZyb20pOworICAgICAgICAgICAgQVJNV29yZCogYWRkciA9
IGdldExkckltbUFkZHJlc3MoaW5zbik7CisgICAgICAgICAgICBFeGVjdXRhYmxlQWxsb2NhdG9y
OjpNYWtlV3JpdGFibGUgdW5wcm90ZWN0KGFkZHIsIHNpemVvZihBUk1Xb3JkKSk7CisgICAgICAg
ICAgICAqYWRkciA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4odG8pOworICAgICAgICB9CisK
KyAgICAgICAgc3RhdGljIEFSTVdvcmQgcGF0Y2hDb25zdGFudFBvb2xMb2FkKEFSTVdvcmQgbG9h
ZCwgQVJNV29yZCB2YWx1ZSkKKyAgICAgICAgeworICAgICAgICAgICAgdmFsdWUgPSAodmFsdWUg
PDwgMSkgKyAxOworICAgICAgICAgICAgQVNTRVJUKCEodmFsdWUgJiB+MHhmZmYpKTsKKyAgICAg
ICAgICAgIHJldHVybiAobG9hZCAmIH4weGZmZikgfCB2YWx1ZTsKKyAgICAgICAgfQorCisgICAg
ICAgIHN0YXRpYyB2b2lkIHBhdGNoQ29uc3RhbnRQb29sTG9hZCh2b2lkKiBsb2FkQWRkciwgdm9p
ZCogY29uc3RQb29sQWRkcik7CisKKyAgICAgICAgLy8gUGF0Y2ggcG9pbnRlcnMKKworICAgICAg
ICBzdGF0aWMgdm9pZCBwYXRjaFBvaW50ZXIodm9pZCogY29kZSwgSm1wRHN0IGZyb20sIHZvaWQq
IHRvKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihjb2RlKSArIGZyb20ubV9vZmZzZXQsIHRvKTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hJbnQzMih2b2lkKiBmcm9tLCBpbnQzMl90
IHRvKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5hbChyZWludGVy
cHJldF9jYXN0PGludHB0cl90Pihmcm9tKSwgcmVpbnRlcnByZXRfY2FzdDx2b2lkKj4odG8pKTsK
KyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJlcGF0Y2hQb2ludGVyKHZvaWQqIGZy
b20sIHZvaWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRlcm5h
bChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSwgdG8pOworICAgICAgICB9CisKKyAg
ICAgICAgc3RhdGljIHZvaWQgcmVwYXRjaExvYWRQdHJUb0xFQSh2b2lkKiBmcm9tKQorICAgICAg
ICB7CisgICAgICAgICAgICAvLyBPbiBhcm0sIHRoaXMgaXMgYSBwYXRjaCBmcm9tIExEUiB0byBB
REQuIEl0IGlzIHJlc3RyaWN0ZWQgY29udmVyc2lvbiwKKyAgICAgICAgICAgIC8vIGZyb20gc3Bl
Y2lhbCBjYXNlIHRvIHNwZWNpYWwgY2FzZSwgYWx0b3VnaCBlbm91Z2ggZm9yIGl0cyBwdXJwb3Nl
CisgICAgICAgICAgICBBUk1Xb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4o
ZnJvbSk7CisgICAgICAgICAgICBBU1NFUlQoKCppbnNuICYgMHgwZmYwMGYwMCkgPT0gMHgwNTkw
MDAwMCk7CisKKyAgICAgICAgICAgIEV4ZWN1dGFibGVBbGxvY2F0b3I6Ok1ha2VXcml0YWJsZSB1
bnByb3RlY3QoaW5zbiwgc2l6ZW9mKEFSTVdvcmQpKTsKKyAgICAgICAgICAgICppbnNuID0gKCpp
bnNuICYgMHhmMDBmZjBmZikgfCAweDAyODAwMDAwOworICAgICAgICB9CisKKyAgICAgICAgLy8g
TGlua2VycworCisgICAgICAgIHZvaWQgbGlua0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykK
KyAgICAgICAgeworICAgICAgICAgICAgQVJNV29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8
QVJNV29yZCo+KG1fYnVmZmVyLmRhdGEoKSkgKyAoZnJvbS5tX29mZnNldCAvIHNpemVvZihBUk1X
b3JkKSk7CisgICAgICAgICAgICAqZ2V0TGRySW1tQWRkcmVzcyhpbnNuLCBtX2J1ZmZlci5wb29s
QWRkcmVzcygpKSA9IHN0YXRpY19jYXN0PEFSTVdvcmQ+KHRvLm1fb2Zmc2V0KTsKKyAgICAgICAg
fQorCisgICAgICAgIHN0YXRpYyB2b2lkIGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9t
LCB2b2lkKiB0bykKKyAgICAgICAgeworICAgICAgICAgICAgbGlua0JyYW5jaChjb2RlLCBmcm9t
LCB0byk7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgdm9pZCByZWxpbmtKdW1wKHZvaWQq
IGZyb20sIHZvaWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBwYXRjaFBvaW50ZXJJbnRl
cm5hbChyZWludGVycHJldF9jYXN0PGludHB0cl90Pihmcm9tKSAtIHNpemVvZihBUk1Xb3JkKSwg
dG8pOworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHZvaWQgbGlua0NhbGwodm9pZCogY29k
ZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQorICAgICAgICB7CisgICAgICAgICAgICBsaW5rQnJh
bmNoKGNvZGUsIGZyb20sIHRvKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0YXRpYyB2b2lkIHJl
bGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCisgICAgICAgIHsKKyAgICAgICAgICAgIHJl
bGlua0p1bXAoZnJvbSwgdG8pOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkcmVzcyBvcGVy
YXRpb25zCisKKyAgICAgICAgc3RhdGljIHZvaWQqIGdldFJlbG9jYXRlZEFkZHJlc3Modm9pZCog
Y29kZSwgSm1wU3JjIGp1bXApCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiByZWludGVy
cHJldF9jYXN0PHZvaWQqPihyZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihjb2RlKSArIGp1bXAu
bV9vZmZzZXQgLyBzaXplb2YoQVJNV29yZCkgKyAxKTsKKyAgICAgICAgfQorCisgICAgICAgIHN0
YXRpYyB2b2lkKiBnZXRSZWxvY2F0ZWRBZGRyZXNzKHZvaWQqIGNvZGUsIEptcERzdCBsYWJlbCkK
KyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHJl
aW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGNvZGUpICsgbGFiZWwubV9vZmZzZXQgLyBzaXplb2Yo
QVJNV29yZCkpOworICAgICAgICB9CisKKyAgICAgICAgLy8gQWRkcmVzcyBkaWZmZXJlbmNlcwor
CisgICAgICAgIHN0YXRpYyBpbnQgZ2V0RGlmZmVyZW5jZUJldHdlZW5MYWJlbHMoSm1wRHN0IGZy
b20sIEptcFNyYyB0bykKKyAgICAgICAgeworICAgICAgICAgICAgcmV0dXJuICh0by5tX29mZnNl
dCArIHNpemVvZihBUk1Xb3JkKSkgLSBmcm9tLm1fb2Zmc2V0OworICAgICAgICB9CisKKyAgICAg
ICAgc3RhdGljIGludCBnZXREaWZmZXJlbmNlQmV0d2VlbkxhYmVscyhKbXBEc3QgZnJvbSwgSm1w
RHN0IHRvKQorICAgICAgICB7CisgICAgICAgICAgICByZXR1cm4gdG8ubV9vZmZzZXQgLSBmcm9t
Lm1fb2Zmc2V0OworICAgICAgICB9CisKKyAgICAgICAgc3RhdGljIHVuc2lnbmVkIGdldENhbGxS
ZXR1cm5PZmZzZXQoSm1wU3JjIGNhbGwpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBj
YWxsLm1fb2Zmc2V0ICsgc2l6ZW9mKEFSTVdvcmQpOworICAgICAgICB9CisKKyAgICAgICAgLy8g
SGFuZGxlIGltbWVkaWF0ZXMKKworICAgICAgICBzdGF0aWMgQVJNV29yZCBnZXRPcDJCeXRlKEFS
TVdvcmQgaW1tKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQoaW1tIDw9IDB4ZmYpOwor
ICAgICAgICAgICAgcmV0dXJuIE9QMl9JTU1oIHwgKGltbSAmIDB4MGYpIHwgKChpbW0gJiAweGYw
KSA8PCA0KSA7CisgICAgICAgIH0KKworICAgICAgICBzdGF0aWMgQVJNV29yZCBnZXRPcDIoQVJN
V29yZCBpbW0pOworICAgICAgICBBUk1Xb3JkIGdldEltbShBUk1Xb3JkIGltbSwgaW50IHRtcFJl
ZywgYm9vbCBpbnZlcnQgPSBmYWxzZSk7CisgICAgICAgIHZvaWQgbW92ZUltbShBUk1Xb3JkIGlt
bSwgaW50IGRlc3QpOworCisgICAgICAgIC8vIE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKKwor
ICAgICAgICB2b2lkIGRhdGFUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0Rz
dCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9mZnNldCk7CisgICAgICAgIHZvaWQgYmFzZUlu
ZGV4VHJhbnNmZXIzMihib29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQg
YmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNjYWxlLCBpbnQzMl90IG9mZnNldCk7CisKKyAg
ICAgICAgLy8gQ29uc3RhbnQgcG9vbCBobmFkbGVycworCisgICAgICAgIHN0YXRpYyBBUk1Xb3Jk
IHBsYWNlQ29uc3RhbnRQb29sQmFycmllcihpbnQgb2Zmc2V0KQorICAgICAgICB7CisgICAgICAg
ICAgICBvZmZzZXQgPSAob2Zmc2V0IC0gc2l6ZW9mKEFSTVdvcmQpKSA+PiAyOworICAgICAgICAg
ICAgQVNTRVJUKChvZmZzZXQgPD0gQk9GRlNFVF9NQVggJiYgb2Zmc2V0ID49IEJPRkZTRVRfTUlO
KSk7CisgICAgICAgICAgICByZXR1cm4gQUwgfCBCIHwgKG9mZnNldCAmIEJSQU5DSF9NQVNLKTsK
KyAgICAgICAgfQorCisgICAgcHJpdmF0ZToKKyAgICAgICAgQVJNV29yZCBSTShpbnQgcmVnKQor
ICAgICAgICB7CisgICAgICAgICAgICBBU1NFUlQocmVnIDw9IEFSTTo6cGMpOworICAgICAgICAg
ICAgcmV0dXJuIHJlZzsKKyAgICAgICAgfQorCisgICAgICAgIEFSTVdvcmQgUlMoaW50IHJlZykK
KyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAgICAgICAg
ICAgIHJldHVybiByZWcgPDwgODsKKyAgICAgICAgfQorCisgICAgICAgIEFSTVdvcmQgUkQoaW50
IHJlZykKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKHJlZyA8PSBBUk06OnBjKTsKKyAg
ICAgICAgICAgIHJldHVybiByZWcgPDwgMTI7CisgICAgICAgIH0KKworICAgICAgICBBUk1Xb3Jk
IFJOKGludCByZWcpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChyZWcgPD0gQVJNOjpw
Yyk7CisgICAgICAgICAgICByZXR1cm4gcmVnIDw8IDE2OworICAgICAgICB9CisKKyAgICAgICAg
c3RhdGljIEFSTVdvcmQgZ2V0Q29uZGl0aW9uYWxGaWVsZChBUk1Xb3JkIGkpCisgICAgICAgIHsK
KyAgICAgICAgICAgIHJldHVybiBpICYgMHhmMDAwMDAwMDsKKyAgICAgICAgfQorCisgICAgICAg
IGludCBnZW5JbnQoaW50IHJlZywgQVJNV29yZCBpbW0sIGJvb2wgcG9zaXRpdmUpOworCisgICAg
ICAgIEFSTUJ1ZmZlciBtX2J1ZmZlcjsKKyAgICAgICAgSnVtcHMgbV9qdW1wczsKKyAgICB9Owor
Cit9IC8vIG5hbWVzcGFjZSBKU0MKKworI2VuZGlmIC8vIEVOQUJMRShBU1NFTUJMRVIpICYmIFBM
QVRGT1JNKEFSTSkKKworI2VuZGlmIC8vIEFSTUFzc2VtYmxlcl9oCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IDk3NDVkNmQuLmU0ZTk1YzMgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCkBAIC00NDIsNiArNDQyLDcgQEAg
cHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxhdGVQ
YXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQogICAg
ICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBjZjk0Njc3Li4xZjAwNTc2IDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmgK
QEAgLTMyMiw2ICszMjIsMTEgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENhbGwoanVt
cC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBlbmFibGVMYXRl
UGF0Y2goKQorICAgICAgICB7CisgICAgICAgICAgICBtX2ptcC5lbmFibGVMYXRlUGF0Y2goKTsK
KyAgICAgICAgfQorCiAgICAgcHJpdmF0ZToKICAgICAgICAgSm1wU3JjIG1fam1wOwogICAgICAg
ICBGbGFncyBtX2ZsYWdzOwpAQCAtMzU4LDYgKzM2MywxMSBAQCBwdWJsaWM6CiAgICAgICAgICAg
ICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2ptcCwgbGFiZWwubV9sYWJlbCk7CiAgICAg
ICAgIH0KIAorICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpCisgICAgICAgIHsKKyAgICAg
ICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICB9CisKICAgICBwcml2YXRl
OgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVy
L01hY3JvQXNzZW1ibGVyLmgKaW5kZXggNDNkMjdlNy4uOWUxYzVkMyAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyLmgKQEAgLTM0LDYgKzM0LDEwIEBACiAjaW5jbHVk
ZSAiTWFjcm9Bc3NlbWJsZXJBUk12Ny5oIgogbmFtZXNwYWNlIEpTQyB7IHR5cGVkZWYgTWFjcm9B
c3NlbWJsZXJBUk12NyBNYWNyb0Fzc2VtYmxlckJhc2U7IH07CiAKKyNlbGlmIFBMQVRGT1JNKEFS
TSkKKyNpbmNsdWRlICJNYWNyb0Fzc2VtYmxlckFSTS5oIgorbmFtZXNwYWNlIEpTQyB7IHR5cGVk
ZWYgTWFjcm9Bc3NlbWJsZXJBUk0gTWFjcm9Bc3NlbWJsZXJCYXNlOyB9OworCiAjZWxpZiBQTEFU
Rk9STShYODYpCiAjaW5jbHVkZSAiTWFjcm9Bc3NlbWJsZXJYODYuaCIKIG5hbWVzcGFjZSBKU0Mg
eyB0eXBlZGVmIE1hY3JvQXNzZW1ibGVyWDg2IE1hY3JvQXNzZW1ibGVyQmFzZTsgfTsKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKbmV3IGZpbGUgbW9kZSAx
MDA2NDQKaW5kZXggMDAwMDAwMC4uMWU5NzNmYgotLS0gL2Rldi9udWxsCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCkBAIC0wLDAgKzEsNzc4IEBACisv
KgorICogQ29weXJpZ2h0IChDKSAyMDA4IEFwcGxlIEluYy4KKyAqIENvcHlyaWdodCAoQykgMjAw
OSBVbml2ZXJzaXR5IG9mIFN6ZWdlZAorICogQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBS
ZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9y
IHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRo
ZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1ldDoKKyAqIDEuIFJlZGlzdHJpYnV0aW9u
cyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisgKiAgICBu
b3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWlt
ZXIuCisgKiAyLiBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2Ug
dGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9u
cyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorICogICAgZG9jdW1lbnRhdGlv
biBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4K
KyAqCisgKiBUSElTIFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIElOQy4gYGBBUyBJUycn
IEFORCBBTlkKKyAqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFCisgKiBJTVBMSUVEIFdBUlJBTlRJRVMgT0YgTUVSQ0hBTlRB
QklMSVRZIEFORCBGSVRORVNTIEZPUiBBIFBBUlRJQ1VMQVIKKyAqIFBVUlBPU0UgQVJFIERJU0NM
QUlNRUQuICBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBJTkMuIE9SCisgKiBDT05UUklCVVRPUlMg
QkUgTElBQkxFIEZPUiBBTlkgRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwK
KyAqIEVYRU1QTEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywKKyAqIFBST0NVUkVNRU5UIE9GIFNVQlNUSVRVVEUgR09PRFMgT1IgU0VS
VklDRVM7IExPU1MgT0YgVVNFLCBEQVRBLCBPUgorICogUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5U
RVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQgT04gQU5ZIFRIRU9SWQorICogT0YgTElBQklM
SVRZLCBXSEVUSEVSIElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisgKiAo
SU5DTFVESU5HIE5FR0xJR0VOQ0UgT1IgT1RIRVJXSVNFKSBBUklTSU5HIElOIEFOWSBXQVkgT1VU
IE9GIFRIRSBVU0UKKyAqIE9GIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUg
UE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisgKi8KKworI2lmbmRlZiBNYWNyb0Fzc2VtYmxl
ckFSTV9oCisjZGVmaW5lIE1hY3JvQXNzZW1ibGVyQVJNX2gKKworI2luY2x1ZGUgPHd0Zi9QbGF0
Zm9ybS5oPgorCisjaWYgRU5BQkxFKEFTU0VNQkxFUikgJiYgUExBVEZPUk0oQVJNKQorCisjaW5j
bHVkZSAiQVJNQXNzZW1ibGVyLmgiCisjaW5jbHVkZSAiQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5o
IgorCituYW1lc3BhY2UgSlNDIHsKKworY2xhc3MgTWFjcm9Bc3NlbWJsZXJBUk0gOiBwdWJsaWMg
QWJzdHJhY3RNYWNyb0Fzc2VtYmxlcjxBUk1Bc3NlbWJsZXI+IHsKK3B1YmxpYzoKKyAgICBlbnVt
IENvbmRpdGlvbiB7CisgICAgICAgIEVxdWFsID0gQVJNQXNzZW1ibGVyOjpFUSwKKyAgICAgICAg
Tm90RXF1YWwgPSBBUk1Bc3NlbWJsZXI6Ok5FLAorICAgICAgICBBYm92ZSA9IEFSTUFzc2VtYmxl
cjo6SEksCisgICAgICAgIEFib3ZlT3JFcXVhbCA9IEFSTUFzc2VtYmxlcjo6Q1MsCisgICAgICAg
IEJlbG93ID0gQVJNQXNzZW1ibGVyOjpDQywKKyAgICAgICAgQmVsb3dPckVxdWFsID0gQVJNQXNz
ZW1ibGVyOjpMUywKKyAgICAgICAgR3JlYXRlclRoYW4gPSBBUk1Bc3NlbWJsZXI6OkdULAorICAg
ICAgICBHcmVhdGVyVGhhbk9yRXF1YWwgPSBBUk1Bc3NlbWJsZXI6OkdFLAorICAgICAgICBMZXNz
VGhhbiA9IEFSTUFzc2VtYmxlcjo6TFQsCisgICAgICAgIExlc3NUaGFuT3JFcXVhbCA9IEFSTUFz
c2VtYmxlcjo6TEUsCisgICAgICAgIE92ZXJmbG93ID0gQVJNQXNzZW1ibGVyOjpWUywKKyAgICAg
ICAgU2lnbmVkID0gQVJNQXNzZW1ibGVyOjpNSSwKKyAgICAgICAgWmVybyA9IEFSTUFzc2VtYmxl
cjo6RVEsCisgICAgICAgIE5vblplcm8gPSBBUk1Bc3NlbWJsZXI6Ok5FCisgICAgfTsKKworICAg
IGVudW0gRG91YmxlQ29uZGl0aW9uIHsKKyAgICAgICAgRG91YmxlRXF1YWwsIC8vRklYTUUKKyAg
ICAgICAgRG91YmxlTm90RXF1YWwsIC8vRklYTUUKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW4s
IC8vRklYTUUKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCAvL0ZJWE1FCisgICAg
ICAgIERvdWJsZUxlc3NUaGFuLCAvL0ZJWE1FCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVh
bCwgLy9GSVhNRQorICAgIH07CisKKyAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1Bv
aW50ZXJSZWdpc3RlciA9IEFSTTo6c3A7CisKKyAgICBzdGF0aWMgY29uc3QgU2NhbGUgU2NhbGVQ
dHIgPSBUaW1lc0ZvdXI7CisKKyAgICB2b2lkIGFkZDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5hZGRzX3IoZGVzdCwgZGVzdCwg
c3JjKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWRkcmVzcyBhZGRyZXNz
KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICBhZGQz
MihpbW0sIEFSTTo6UzEpOworICAgICAgICBzdG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAg
IH0KKworICAgIHZvaWQgYWRkMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgewor
ICAgICAgICBtX2Fzc2VtYmxlci5hZGRzX3IoZGVzdCwgZGVzdCwgbV9hc3NlbWJsZXIuZ2V0SW1t
KGltbS5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgfQorCisgICAgdm9pZCBhZGQzMihBZGRyZXNz
IHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKHNyYywgQVJNOjpT
MSk7CisgICAgICAgIGFkZDMyKEFSTTo6UzEsIGRlc3QpOworICAgIH0KKworICAgIHZvaWQgYW5k
MzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmFuZHNfcihkZXN0LCBkZXN0LCBzcmMpOworICAgIH0KKworICAgIHZvaWQgYW5kMzIo
SW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBBUk1Xb3JkIHcgPSBt
X2Fzc2VtYmxlci5nZXRJbW0oaW1tLm1fdmFsdWUsIEFSTTo6UzAsIHRydWUpOworICAgICAgICBp
ZiAodyAmIEFSTUFzc2VtYmxlcjo6T1AyX0lOVl9JTU0pCisgICAgICAgICAgICBtX2Fzc2VtYmxl
ci5iaWNzX3IoZGVzdCwgZGVzdCwgdyAmIH5BUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKTsKKyAg
ICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIuYW5kc19yKGRlc3QsIGRlc3QsIHcp
OworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZzX3IoZGVzdCwgbV9hc3NlbWJsZXIubHNs
KGRlc3QsIGltbS5tX3ZhbHVlICYgMHgxZikpOworICAgIH0KKworICAgIHZvaWQgbHNoaWZ0MzIo
UmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdnNfcihkZXN0LCBtX2Fzc2VtYmxlci5sc2xfcihkZXN0LCBzaGlmdF9h
bW91bnQpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bDMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBpZiAoc3JjID09IGRlc3QpIHsKKyAgICAgICAgICAg
IG1vdmUoc3JjLCBBUk06OlMwKTsKKyAgICAgICAgICAgIHNyYyA9IEFSTTo6UzA7CisgICAgICAg
IH0KKyAgICAgICAgbV9hc3NlbWJsZXIubXVsc19yKGRlc3QsIGRlc3QsIHNyYyk7CisgICAgfQor
CisgICAgdm9pZCBtdWwzMihJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBtb3ZlKGltbSwgQVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1i
bGVyLm11bHNfcihkZXN0LCBzcmMsIEFSTTo6UzApOworICAgIH0KKworICAgIHZvaWQgbm90MzIo
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubXZuc19yKGRlc3Qs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgb3IzMihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJ
RCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3Jyc19yKGRlc3QsIGRlc3QsIHNy
Yyk7CisgICAgfQorCisgICAgdm9pZCBvcjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIub3Jyc19yKGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVy
LmdldEltbShpbW0ubV92YWx1ZSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgcnNoaWZ0
MzIoUmVnaXN0ZXJJRCBzaGlmdF9hbW91bnQsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLm1vdnNfcihkZXN0LCBtX2Fzc2VtYmxlci5hc3JfcihkZXN0LCBzaGlm
dF9hbW91bnQpKTsKKyAgICB9CisKKyAgICB2b2lkIHJzaGlmdDMyKEltbTMyIGltbSwgUmVnaXN0
ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92c19yKGRlc3QsIG1fYXNz
ZW1ibGVyLmFzcihkZXN0LCBpbW0ubV92YWx1ZSAmIDB4MWYpKTsKKyAgICB9CisKKyAgICB2b2lk
IHN1YjMyKFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5zdWJzX3IoZGVzdCwgZGVzdCwgc3JjKTsKKyAgICB9CisKKyAgICB2b2lkIHN1
YjMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuc3Vic19yKGRlc3QsIGRlc3QsIG1fYXNzZW1ibGVyLmdldEltbShpbW0ubV92YWx1ZSwgQVJN
OjpTMCkpOworICAgIH0KKworICAgIHZvaWQgc3ViMzIoSW1tMzIgaW1tLCBBZGRyZXNzIGFkZHJl
c3MpCisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAgICAgIHN1
YjMyKGltbSwgQVJNOjpTMSk7CisgICAgICAgIHN0b3JlMzIoQVJNOjpTMSwgYWRkcmVzcyk7Cisg
ICAgfQorCisgICAgdm9pZCBzdWIzMihBZGRyZXNzIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAg
IHsKKyAgICAgICAgbG9hZDMyKHNyYywgQVJNOjpTMSk7CisgICAgICAgIHN1YjMyKEFSTTo6UzEs
IGRlc3QpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVvcnNfcihkZXN0LCBkZXN0LCBz
cmMpOworICAgIH0KKworICAgIHZvaWQgeG9yMzIoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3Qp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5lb3JzX3IoZGVzdCwgZGVzdCwgbV9hc3NlbWJs
ZXIuZ2V0SW1tKGltbS5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgfQorCisgICAgdm9pZCBsb2Fk
MzIoSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIG1fYXNzZW1ibGVyLmRhdGFUcmFuc2ZlcjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwg
YWRkcmVzcy5vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgbG9hZDMyKEJhc2VJbmRleCBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5iYXNlSW5k
ZXhUcmFuc2ZlcjMyKHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgc3Rh
dGljX2Nhc3Q8aW50PihhZGRyZXNzLnNjYWxlKSwgYWRkcmVzcy5vZmZzZXQpOworICAgIH0KKwor
ICAgIERhdGFMYWJlbDMyIGxvYWQzMldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2goQWRkcmVzcyBhZGRy
ZXNzLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBEYXRhTGFiZWwzMiBkYXRhTGFi
ZWwodGhpcyk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpTMCwgMCk7Cisg
ICAgICAgIG1fYXNzZW1ibGVyLmR0cl91cih0cnVlLCBkZXN0LCBhZGRyZXNzLmJhc2UsIEFSTTo6
UzApOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKworICAgIExhYmVsIGxvYWRQ
dHJXaXRoUGF0Y2hUb0xFQShBZGRyZXNzIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIExhYmVsIGxhYmVsKHRoaXMpOworICAgICAgICBsb2FkMzIoYWRkcmVzcywgZGVz
dCk7CisgICAgICAgIHJldHVybiBsYWJlbDsKKyAgICB9CisKKyAgICB2b2lkIGxvYWQxNihCYXNl
SW5kZXggYWRkcmVzcywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuYWRkX3IoQVJNOjpTMCwgYWRkcmVzcy5iYXNlLCBtX2Fzc2VtYmxlci5sc2woYWRkcmVzcy5p
bmRleCwgYWRkcmVzcy5zY2FsZSkpOworICAgICAgICBpZiAoYWRkcmVzcy5vZmZzZXQ+PTApCisg
ICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJoX3UoZGVzdCwgQVJNOjpTMCwgQVJNQXNzZW1ibGVy
OjpnZXRPcDJCeXRlKGFkZHJlc3Mub2Zmc2V0KSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAg
IG1fYXNzZW1ibGVyLmxkcmhfZChkZXN0LCBBUk06OlMwLCBBUk1Bc3NlbWJsZXI6OmdldE9wMkJ5
dGUoLWFkZHJlc3Mub2Zmc2V0KSk7CisgICAgfQorCisgICAgRGF0YUxhYmVsMzIgc3RvcmUzMldp
dGhBZGRyZXNzT2Zmc2V0UGF0Y2goUmVnaXN0ZXJJRCBzcmMsIEFkZHJlc3MgYWRkcmVzcykKKyAg
ICB7CisgICAgICAgIERhdGFMYWJlbDMyIGRhdGFMYWJlbCh0aGlzKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIubGRyX3VuX2ltbShBUk06OlMwLCAwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3Vy
KGZhbHNlLCBzcmMsIGFkZHJlc3MuYmFzZSwgQVJNOjpTMCk7CisgICAgICAgIHJldHVybiBkYXRh
TGFiZWw7CisgICAgfQorCisgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmRhdGFUcmFuc2Zl
cjMyKGZhbHNlLCBzcmMsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOworICAgIH0KKwor
ICAgIHZvaWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgQmFzZUluZGV4IGFkZHJlc3MpCisgICAg
eworICAgICAgICBtX2Fzc2VtYmxlci5iYXNlSW5kZXhUcmFuc2ZlcjMyKGZhbHNlLCBzcmMsIGFk
ZHJlc3MuYmFzZSwgYWRkcmVzcy5pbmRleCwgc3RhdGljX2Nhc3Q8aW50PihhZGRyZXNzLnNjYWxl
KSwgYWRkcmVzcy5vZmZzZXQpOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0s
IEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgbW92ZShpbW0sIEFSTTo6
UzEpOworICAgICAgICBzdG9yZTMyKEFSTTo6UzEsIGFkZHJlc3MpOworICAgIH0KKworICAgIHZv
aWQgc3RvcmUzMihSZWdpc3RlcklEIHNyYywgdm9pZCogYWRkcmVzcykKKyAgICB7CisgICAgICAg
IG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzKSwg
QVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KGZhbHNlLCBzcmMsIEFSTTo6UzAs
IDApOworICAgIH0KKworICAgIHZvaWQgc3RvcmUzMihJbW0zMiBpbW0sIHZvaWQqIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0X2Nhc3Q8QVJN
V29yZD4oYWRkcmVzcyksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKGlt
bS5tX3ZhbHVlLCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UoZmFsc2UsIEFS
TTo6UzEsIEFSTTo6UzAsIDApOworICAgIH0KKworICAgIHZvaWQgcG9wKFJlZ2lzdGVySUQgZGVz
dCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnBvcF9yKGRlc3QpOworICAgIH0KKworICAg
IHZvaWQgcHVzaChSZWdpc3RlcklEIHNyYykKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1
c2hfcihzcmMpOworICAgIH0KKworICAgIHZvaWQgcHVzaChBZGRyZXNzIGFkZHJlc3MpCisgICAg
eworICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAgICAgIHB1c2goQVJNOjpT
MSk7CisgICAgfQorCisgICAgdm9pZCBwdXNoKEltbTMyIGltbSkKKyAgICB7CisgICAgICAgIG1v
dmUoaW1tLCBBUk06OlMwKTsKKyAgICAgICAgcHVzaChBUk06OlMwKTsKKyAgICB9CisKKyAgICB2
b2lkIG1vdmUoSW1tMzIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBtX2Fz
c2VtYmxlci5tb3ZlSW1tKGltbS5tX3ZhbHVlLCBkZXN0KTsKKyAgICB9CisKKyAgICB2b2lkIG1v
dmUoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdl9yKGRlc3QsIHNyYyk7CisgICAgfQorCisgICAgdm9pZCBtb3ZlKEltbVB0ciBp
bW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRl
c3QsIG1fYXNzZW1ibGVyLmdldEltbShyZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGltbS5tX3Zh
bHVlKSwgQVJNOjpTMCkpOworICAgIH0KKworICAgIHZvaWQgc3dhcChSZWdpc3RlcklEIHJlZzEs
IFJlZ2lzdGVySUQgcmVnMikKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKEFSTTo6
UzAsIHJlZzEpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihyZWcxLCByZWcyKTsKKyAgICAg
ICAgbV9hc3NlbWJsZXIubW92X3IocmVnMiwgQVJNOjpTMCk7CisgICAgfQorCisgICAgdm9pZCBz
aWduRXh0ZW5kMzJUb1B0cihSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsK
KyAgICAgICAgaWYgKHNyYyAhPSBkZXN0KQorICAgICAgICAgICAgbW92ZShzcmMsIGRlc3QpOwor
ICAgIH0KKworICAgIHZvaWQgemVyb0V4dGVuZDMyVG9QdHIoUmVnaXN0ZXJJRCBzcmMsIFJlZ2lz
dGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIGlmIChzcmMgIT0gZGVzdCkKKyAgICAgICAgICAg
IG1vdmUoc3JjLCBkZXN0KTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBj
b25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBt
X2Fzc2VtYmxlci5jbXBfcihsZWZ0LCByaWdodCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNz
ZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMyIHJpZ2h0KQorICAgIHsK
KyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0
Lm1fdmFsdWUsIEFSTTo6UzApKTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1w
KEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0
aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgQWRkcmVzcyByaWdodCkKKyAgICB7CisgICAgICAg
IGxvYWQzMihyaWdodCwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBs
ZWZ0LCBBUk06OlMxKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25k
LCBBZGRyZXNzIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIo
bGVmdCwgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCBy
aWdodCk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgQWRkcmVz
cyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06OlMx
KTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTTo6UzEsIHJpZ2h0KTsKKyAgICB9
CisKKyAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBCYXNlSW5kZXggbGVmdCwgSW1t
MzIgcmlnaHQpCisgICAgeworICAgICAgICBsb2FkMzIobGVmdCwgQVJNOjpTMSk7CisgICAgICAg
IHJldHVybiBicmFuY2gzMihjb25kLCBBUk06OlMxLCByaWdodCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShsZWZ0KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgfQorCisgICAgSnVt
cCBicmFuY2gxNihDb25kaXRpb24gY29uZCwgQmFzZUluZGV4IGxlZnQsIEltbTMyIHJpZ2h0KQor
ICAgIHsKKyAgICAgICAgbG9hZDE2KGxlZnQsIEFSTTo6UzApOworICAgICAgICBtb3ZlKHJpZ2h0
LCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IoQVJNOjpTMCwgQVJNOjpTMSk7
CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBy
ZWcsIFJlZ2lzdGVySUQgbWFzaykKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBaZXJv
KSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLnRzdF9yKHJlZywg
bWFzayk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24o
Y29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFRlc3QzMihDb25kaXRpb24gY29uZCwg
UmVnaXN0ZXJJRCByZWcsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBB
U1NFUlQoKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAgICBBUk1X
b3JkIHcgPSBtX2Fzc2VtYmxlci5nZXRJbW0obWFzay5tX3ZhbHVlLCBBUk06OlMwLCB0cnVlKTsK
KyAgICAgICAgaWYgKHcgJiBBUk1Bc3NlbWJsZXI6Ok9QMl9JTlZfSU1NKQorICAgICAgICAgICAg
bV9hc3NlbWJsZXIuYmljc19yKEFSTTo6UzAsIHJlZywgdyAmIH5BUk1Bc3NlbWJsZXI6Ok9QMl9J
TlZfSU1NKTsKKyAgICAgICAgZWxzZQorICAgICAgICAgICAgbV9hc3NlbWJsZXIudHN0X3IocmVn
LCB3KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihj
b25kKSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoVGVzdDMyKENvbmRpdGlvbiBjb25kLCBB
ZGRyZXNzIGFkZHJlc3MsIEltbTMyIG1hc2sgPSBJbW0zMigtMSkpCisgICAgeworICAgICAgICBs
b2FkMzIoYWRkcmVzcywgQVJNOjpTMSk7CisgICAgICAgIHJldHVybiBicmFuY2hUZXN0MzIoY29u
ZCwgQVJNOjpTMSwgbWFzayk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hUZXN0MzIoQ29uZGl0
aW9uIGNvbmQsIEJhc2VJbmRleCBhZGRyZXNzLCBJbW0zMiBtYXNrID0gSW1tMzIoLTEpKQorICAg
IHsKKyAgICAgICAgbG9hZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJh
bmNoVGVzdDMyKGNvbmQsIEFSTTo6UzEsIG1hc2spOworICAgIH0KKworICAgIEp1bXAganVtcCgp
CisgICAgeworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoKSk7CisgICAgfQor
CisgICAgdm9pZCBqdW1wKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAgICAgICAgbW92ZSh0
YXJnZXQsIEFSTTo6cGMpOworICAgIH0KKworICAgIHZvaWQganVtcChBZGRyZXNzIGFkZHJlc3Mp
CisgICAgeworICAgICAgICBsb2FkMzIoYWRkcmVzcywgQVJNOjpwYyk7CisgICAgfQorCisgICAg
SnVtcCBicmFuY2hBZGQzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNv
bmQgPT0gU2lnbmVkKSB8fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7Cisg
ICAgICAgIGFkZDMyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaEFkZDMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAg
ICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8fCAoY29u
ZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGFkZDMyKGltbSwgZGVz
dCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChBUk1Db25kaXRpb24oY29u
ZCkpKTsKKyAgICB9CisKKyAgICB2b2lkIG11bGwzMihSZWdpc3RlcklEIHNyYzEsIFJlZ2lzdGVy
SUQgc3JjMiwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgaWYgKHNyYzEgPT0gZGVz
dCkgeworICAgICAgICAgICAgbW92ZShzcmMxLCBBUk06OlMwKTsKKyAgICAgICAgICAgIHNyYzEg
PSBBUk06OlMwOworICAgICAgICB9CisgICAgICAgIG1fYXNzZW1ibGVyLm11bGxfcihBUk06OlMx
LCBkZXN0LCBzcmMyLCBzcmMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IoQVJNOjpTMSwg
bV9hc3NlbWJsZXIuYXNyKGRlc3QsIDMxKSk7CisgICAgfQorCisgICAgSnVtcCBicmFuY2hNdWwz
MihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7
CisgICAgICAgIEFTU0VSVCgoY29uZCA9PSBPdmVyZmxvdykgfHwgKGNvbmQgPT0gU2lnbmVkKSB8
fCAoY29uZCA9PSBaZXJvKSB8fCAoY29uZCA9PSBOb25aZXJvKSk7CisgICAgICAgIGlmIChjb25k
ID09IE92ZXJmbG93KSB7CisgICAgICAgICAgICBtdWxsMzIoc3JjLCBkZXN0LCBkZXN0KTsKKyAg
ICAgICAgICAgIGNvbmQgPSBOb25aZXJvOworICAgICAgICB9CisgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgIG11bDMyKHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVy
LmptcChBUk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaE11bDMy
KENvbmRpdGlvbiBjb25kLCBJbW0zMiBpbW0sIFJlZ2lzdGVySUQgc3JjLCBSZWdpc3RlcklEIGRl
c3QpCisgICAgeworICAgICAgICBBU1NFUlQoKGNvbmQgPT0gT3ZlcmZsb3cpIHx8IChjb25kID09
IFNpZ25lZCkgfHwgKGNvbmQgPT0gWmVybykgfHwgKGNvbmQgPT0gTm9uWmVybykpOworICAgICAg
ICBpZiAoY29uZCA9PSBPdmVyZmxvdykgeworICAgICAgICAgICAgbW92ZShpbW0sIEFSTTo6UzAp
OworICAgICAgICAgICAgbXVsbDMyKEFSTTo6UzAsIHNyYywgZGVzdCk7CisgICAgICAgICAgICBj
b25kID0gTm9uWmVybzsKKyAgICAgICAgfQorICAgICAgICBlbHNlCisgICAgICAgICAgICBtdWwz
MihpbW0sIHNyYywgZGVzdCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChB
Uk1Db25kaXRpb24oY29uZCkpKTsKKyAgICB9CisKKyAgICBKdW1wIGJyYW5jaFN1YjMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAg
ICAgQVNTRVJUKChjb25kID09IE92ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25k
ID09IFplcm8pIHx8IChjb25kID09IE5vblplcm8pKTsKKyAgICAgICAgc3ViMzIoc3JjLCBkZXN0
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25k
KSkpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoU3ViMzIoQ29uZGl0aW9uIGNvbmQsIEltbTMy
IGltbSwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgQVNTRVJUKChjb25kID09IE92
ZXJmbG93KSB8fCAoY29uZCA9PSBTaWduZWQpIHx8IChjb25kID09IFplcm8pIHx8IChjb25kID09
IE5vblplcm8pKTsKKyAgICAgICAgc3ViMzIoaW1tLCBkZXN0KTsKKyAgICAgICAgcmV0dXJuIEp1
bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgIH0KKworICAgIHZv
aWQgYnJlYWtwb2ludCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5ia3B0KDApOworICAg
IH0KKworICAgIENhbGwgbmVhckNhbGwoKQorICAgIHsKKyAgICAgICAgcHJlcGFyZUNhbGwoKTsK
KyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENhbGw6OkxpbmthYmxlTmVh
cik7CisgICAgfQorCisgICAgQ2FsbCBjYWxsKFJlZ2lzdGVySUQgdGFyZ2V0KQorICAgIHsKKyAg
ICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgbW92ZShBUk06OnBjLCB0YXJnZXQpOworICAg
ICAgICBKbXBTcmMgam1wU3JjOworICAgICAgICByZXR1cm4gQ2FsbChqbXBTcmMsIENhbGw6Ok5v
bmUpOworICAgIH0KKworICAgIHZvaWQgY2FsbChBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAg
ICAgICBjYWxsMzIoYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CisgICAgfQorCisgICAg
dm9pZCByZXQoKQorICAgIHsKKyAgICAgICAgcG9wKEFSTTo6cGMpOworICAgIH0KKworICAgIHZv
aWQgc2V0MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgUmVnaXN0ZXJJRCByaWdo
dCwgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IobGVm
dCwgcmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBBUk1Bc3NlbWJsZXI6
OmdldE9wMigwKSk7CisgICAgICAgIG1fYXNzZW1ibGVyLm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxl
cjo6Z2V0T3AyKDEpLCBBUk1Db25kaXRpb24oY29uZCkpOworICAgIH0KKworICAgIHZvaWQgc2V0
MzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQsIFJlZ2lzdGVy
SUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmNtcF9yKGxlZnQsIG1fYXNzZW1i
bGVyLmdldEltbShyaWdodC5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgICAgIG1fYXNzZW1ibGVy
Lm1vdl9yKGRlc3QsIEFSTUFzc2VtYmxlcjo6Z2V0T3AyKDApKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIubW92X3IoZGVzdCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIoMSksIEFSTUNvbmRpdGlvbihjb25k
KSk7CisgICAgfQorCisgICAgdm9pZCBzZXRUZXN0MzIoQ29uZGl0aW9uIGNvbmQsIEFkZHJlc3Mg
YWRkcmVzcywgSW1tMzIgbWFzaywgUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgbG9h
ZDMyKGFkZHJlc3MsIEFSTTo6UzEpOworICAgICAgICBpZiAobWFzay5tX3ZhbHVlID09IC0xKQor
ICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21wX3IoMCwgQVJNOjpTMSk7CisgICAgICAgIGVsc2UK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLnRzdF9yKEFSTTo6UzEsIG1fYXNzZW1ibGVyLmdldElt
bShtYXNrLm1fdmFsdWUsIEFSTTo6UzApKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92X3IoZGVz
dCwgQVJNQXNzZW1ibGVyOjpnZXRPcDIoMCkpOworICAgICAgICBtX2Fzc2VtYmxlci5tb3Zfcihk
ZXN0LCBBUk1Bc3NlbWJsZXI6OmdldE9wMigxKSwgQVJNQ29uZGl0aW9uKGNvbmQpKTsKKyAgICB9
CisKKyAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgUmVnaXN0ZXJJRCBzcmMsIFJlZ2lzdGVySUQg
ZGVzdCkKKyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKGRlc3QsIHNyYywgbV9hc3Nl
bWJsZXIuZ2V0SW1tKGltbS5tX3ZhbHVlLCBBUk06OlMwKSk7CisgICAgfQorCisgICAgdm9pZCBh
ZGQzMihJbW0zMiBpbW0sIEFic29sdXRlQWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAg
bV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9w
dHIpLCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UodHJ1ZSwgQVJNOjpTMSwg
QVJNOjpTMSwgMCk7CisgICAgICAgIGFkZDMyKGltbSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1fcHRyKSwg
QVJNOjpTMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KGZhbHNlLCBBUk06OlMxLCBBUk06
OlMwLCAwKTsKKyAgICB9CisKKyAgICB2b2lkIHN1YjMyKEltbTMyIGltbSwgQWJzb2x1dGVBZGRy
ZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJw
cmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciksIEFSTTo6UzEpOworICAgICAgICBtX2Fz
c2VtYmxlci5kdHJfdSh0cnVlLCBBUk06OlMxLCBBUk06OlMxLCAwKTsKKyAgICAgICAgc3ViMzIo
aW1tLCBBUk06OlMxKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9j
YXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9wdHIpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJs
ZXIuZHRyX3UoZmFsc2UsIEFSTTo6UzEsIEFSTTo6UzAsIDApOworICAgIH0KKworICAgIHZvaWQg
bG9hZDMyKHZvaWQqIGFkZHJlc3MsIFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIG1f
YXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzKSwgQVJN
OjpTMCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmR0cl91KHRydWUsIGRlc3QsIEFSTTo6UzAsIDAp
OworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29sdXRlQWRk
cmVzcyBsZWZ0LCBSZWdpc3RlcklEIHJpZ2h0KQorICAgIHsKKyAgICAgICAgbG9hZDMyKGxlZnQu
bV9wdHIsIEFSTTo6UzEpOworICAgICAgICByZXR1cm4gYnJhbmNoMzIoY29uZCwgQVJNOjpTMSwg
cmlnaHQpOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIEFic29s
dXRlQWRkcmVzcyBsZWZ0LCBJbW0zMiByaWdodCkKKyAgICB7CisgICAgICAgIGxvYWQzMihsZWZ0
Lm1fcHRyLCBBUk06OlMxKTsKKyAgICAgICAgcmV0dXJuIGJyYW5jaDMyKGNvbmQsIEFSTTo6UzEs
IHJpZ2h0KTsKKyAgICB9CisKKyAgICBDYWxsIGNhbGwoKQorICAgIHsKKyAgICAgICAgcHJlcGFy
ZUNhbGwoKTsKKyAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENhbGw6Okxp
bmthYmxlKTsKKyAgICB9CisKKyAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKKyAgICB7Cisg
ICAgICAgIHJldHVybiBDYWxsOjpmcm9tVGFpbEp1bXAoanVtcCgpKTsKKyAgICB9CisKKyAgICBD
YWxsIG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChKdW1wIG9sZEp1bXApCisgICAgeworICAgICAgICBy
ZXR1cm4gQ2FsbDo6ZnJvbVRhaWxKdW1wKG9sZEp1bXApOworICAgIH0KKworICAgIERhdGFMYWJl
bFB0ciBtb3ZlV2l0aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIERhdGFMYWJlbFB0ciBkYXRhTGFiZWwodGhpcyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmxkcl91bl9pbW0oZGVzdCwgcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihpbml0
aWFsVmFsdWUubV92YWx1ZSkpOworICAgICAgICByZXR1cm4gZGF0YUxhYmVsOworICAgIH0KKwor
ICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxl
ZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1QdHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJ
bW1QdHIoMCkpCisgICAgeworICAgICAgICBkYXRhTGFiZWwgPSBtb3ZlV2l0aFBhdGNoKGluaXRp
YWxSaWdodFZhbHVlLCBBUk06OlMxKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29u
ZCwgbGVmdCwgQVJNOjpTMSk7CisgICAgICAgIGp1bXAuZW5hYmxlTGF0ZVBhdGNoKCk7CisgICAg
ICAgIHJldHVybiBqdW1wOworICAgIH0KKworICAgIEp1bXAgYnJhbmNoUHRyV2l0aFBhdGNoKENv
bmRpdGlvbiBjb25kLCBBZGRyZXNzIGxlZnQsIERhdGFMYWJlbFB0ciYgZGF0YUxhYmVsLCBJbW1Q
dHIgaW5pdGlhbFJpZ2h0VmFsdWUgPSBJbW1QdHIoMCkpCisgICAgeworICAgICAgICBsb2FkMzIo
bGVmdCwgQVJNOjpTMSk7CisgICAgICAgIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlh
bFJpZ2h0VmFsdWUsIEFSTTo6UzApOworICAgICAgICBKdW1wIGp1bXAgPSBicmFuY2gzMihjb25k
LCBBUk06OlMwLCBBUk06OlMxKTsKKyAgICAgICAganVtcC5lbmFibGVMYXRlUGF0Y2goKTsKKyAg
ICAgICAgcmV0dXJuIGp1bXA7CisgICAgfQorCisgICAgRGF0YUxhYmVsUHRyIHN0b3JlUHRyV2l0
aFBhdGNoKEltbVB0ciBpbml0aWFsVmFsdWUsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAg
IHsKKyAgICAgICAgRGF0YUxhYmVsUHRyIGRhdGFMYWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlh
bFZhbHVlLCBBUk06OlMxKTsKKyAgICAgICAgc3RvcmUzMihBUk06OlMxLCBhZGRyZXNzKTsKKyAg
ICAgICAgcmV0dXJuIGRhdGFMYWJlbDsKKyAgICB9CisKKyAgICBEYXRhTGFiZWxQdHIgc3RvcmVQ
dHJXaXRoUGF0Y2goSW1wbGljaXRBZGRyZXNzIGFkZHJlc3MpCisgICAgeworICAgICAgICByZXR1
cm4gc3RvcmVQdHJXaXRoUGF0Y2goSW1tUHRyKDApLCBhZGRyZXNzKTsKKyAgICB9CisKKyAgICAv
LyBGbG9hdGluZyBwb2ludCBvcGVyYXRvcnMKKyAgICBib29sIHN1cHBvcnRzRmxvYXRpbmdQb2lu
dCgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgYm9v
bCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnRUcnVuY2F0ZSgpIGNvbnN0CisgICAgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorCisgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRkcmVz
cyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJB
TShhZGRyZXNzKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRf
Tk9UX1JFQUNIRUQoKTsKKyAgICB9CisKKyAgICB2b2lkIHN0b3JlRG91YmxlKEZQUmVnaXN0ZXJJ
RCBzcmMsIEltcGxpY2l0QWRkcmVzcyBhZGRyZXNzKQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShhZGRyZXNzKTsKKyAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3Jj
KTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICB9CisKKyAgICB2b2lkIGFkZERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3Rl
cklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAgICAgVU5V
U0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICB9CisK
KyAgICB2b2lkIHN1YkRvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkK
KyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0o
ZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQg
c3ViRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAg
IFVOVVNFRF9QQVJBTShzcmMpOworICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgIH0KKworICAgIHZvaWQgbXVsRG91YmxlKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BB
UkFNKHNyYyk7CisgICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgfQorCisgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBzcmMsIEZQ
UmVnaXN0ZXJJRCBkZXN0KQorICAgIHsKKyAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7CisgICAg
ICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Cisg
ICAgfQorCisgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRlc3QpCisgICAgeworICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKKyAgICAg
ICAgVU5VU0VEX1BBUkFNKGRlc3QpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICB9CisKKyAgICBKdW1wIGJyYW5jaERvdWJsZShEb3VibGVDb25kaXRpb24gY29uZCwgRlBSZWdp
c3RlcklEIGxlZnQsIEZQUmVnaXN0ZXJJRCByaWdodCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9Q
QVJBTShjb25kKTsKKyAgICAgICAgVU5VU0VEX1BBUkFNKGxlZnQpOworICAgICAgICBVTlVTRURf
UEFSQU0ocmlnaHQpOworICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgcmV0
dXJuIGp1bXAoKTsKKyAgICB9CisKKyAgICAvLyBUcnVuY2F0ZXMgJ3NyYycgdG8gYW4gaW50ZWdl
ciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KKyAgICAvLyBJZiB0aGUgcmVzdWx0
IGlzIG5vdCByZXByZXNlbnRhYmxlIGFzIGEgMzIgYml0IHZhbHVlLCBicmFuY2guCisgICAgLy8g
TWF5IGFsc28gYnJhbmNoIGZvciBzb21lIHZhbHVlcyB0aGF0IGFyZSByZXByZXNlbnRhYmxlIGlu
IDMyIGJpdHMKKyAgICAvLyAoc3BlY2lmaWNhbGx5LCBpbiB0aGlzIGNhc2UsIElOVF9NSU4pLgor
ICAgIEp1bXAgYnJhbmNoVHJ1bmNhdGVEb3VibGVUb0ludDMyKEZQUmVnaXN0ZXJJRCBzcmMsIFJl
Z2lzdGVySUQgZGVzdCkKKyAgICB7CisgICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOworICAgICAg
ICBVTlVTRURfUEFSQU0oZGVzdCk7CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICByZXR1cm4ganVtcCgpOworICAgIH0KKworcHJvdGVjdGVkOgorICAgIEFSTUFzc2VtYmxl
cjo6Q29uZGl0aW9uIEFSTUNvbmRpdGlvbihDb25kaXRpb24gY29uZCkKKyAgICB7CisgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CisgICAg
fQorCisgICAgdm9pZCBwcmVwYXJlQ2FsbCgpCisgICAgeworICAgICAgICBtX2Fzc2VtYmxlci5l
bnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJNV29yZCkpOworCisgICAg
ICAgIC8vIFMwIG1pZ2h0IGJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5nCisgICAgICAgIG1f
YXNzZW1ibGVyLmFkZF9yKEFSTTo6UzEsIEFSTTo6cGMsIEFSTUFzc2VtYmxlcjo6T1AyX0lNTSB8
IDB4NCk7CisgICAgICAgIG1fYXNzZW1ibGVyLnB1c2hfcihBUk06OlMxKTsKKyAgICB9CisKKyAg
ICB2b2lkIGNhbGwzMihSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zmc2V0KQorICAgIHsKKyAg
ICAgICAgaWYgKGJhc2UgPT0gQVJNOjpzcCkKKyAgICAgICAgICAgIG9mZnNldCArPSA0OworCisg
ICAgICAgIGlmIChvZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgaWYgKG9mZnNldCA8PSAweGZm
ZikgeworICAgICAgICAgICAgICAgIHByZXBhcmVDYWxsKCk7CisgICAgICAgICAgICAgICAgbV9h
c3NlbWJsZXIuZHRyX3UodHJ1ZSwgQVJNOjpwYywgYmFzZSwgb2Zmc2V0KTsKKyAgICAgICAgICAg
IH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmYpIHsKKyAgICAgICAgICAgICAgICBtX2Fzc2Vt
Ymxlci5hZGRfcihBUk06OlMwLCBiYXNlLCBBUk1Bc3NlbWJsZXI6Ok9QMl9JTU0gfCAob2Zmc2V0
ID4+IDEyKSB8ICgxMCA8PCA4KSk7CisgICAgICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAg
ICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdSh0cnVlLCBBUk06OnBjLCBBUk06OlMwLCBv
ZmZzZXQgJiAweGZmZik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAgICAgIEFS
TVdvcmQgcmVnID0gbV9hc3NlbWJsZXIuZ2V0SW1tKG9mZnNldCwgQVJNOjpTMCk7CisgICAgICAg
ICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJf
dXIodHJ1ZSwgQVJNOjpwYywgYmFzZSwgcmVnKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfSBl
bHNlICB7CisgICAgICAgICAgICBvZmZzZXQgPSAtb2Zmc2V0OworICAgICAgICAgICAgaWYgKG9m
ZnNldCA8PSAweGZmZikgeworICAgICAgICAgICAgICAgIHByZXBhcmVDYWxsKCk7CisgICAgICAg
ICAgICAgICAgbV9hc3NlbWJsZXIuZHRyX2QodHJ1ZSwgQVJNOjpwYywgYmFzZSwgb2Zmc2V0KTsK
KyAgICAgICAgICAgIH0gZWxzZSBpZiAob2Zmc2V0IDw9IDB4ZmZmZmYpIHsKKyAgICAgICAgICAg
ICAgICBtX2Fzc2VtYmxlci5zdWJfcihBUk06OlMwLCBiYXNlLCBBUk1Bc3NlbWJsZXI6Ok9QMl9J
TU0gfCAob2Zmc2V0ID4+IDEyKSB8ICgxMCA8PCA4KSk7CisgICAgICAgICAgICAgICAgcHJlcGFy
ZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fzc2VtYmxlci5kdHJfZCh0cnVlLCBBUk06OnBj
LCBBUk06OlMwLCBvZmZzZXQgJiAweGZmZik7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgICAgICAgIEFSTVdvcmQgcmVnID0gbV9hc3NlbWJsZXIuZ2V0SW1tKG9mZnNldCwgQVJNOjpT
MCk7CisgICAgICAgICAgICAgICAgcHJlcGFyZUNhbGwoKTsKKyAgICAgICAgICAgICAgICBtX2Fz
c2VtYmxlci5kdHJfZHIodHJ1ZSwgQVJNOjpwYywgYmFzZSwgcmVnKTsKKyAgICAgICAgICAgIH0K
KyAgICAgICAgfQorICAgIH0KKworfTsKKworfQorCisjZW5kaWYKKworI2VuZGlmIC8vIE1hY3Jv
QXNzZW1ibGVyQVJNX2gKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZB
c3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRl
eCA3YThiNThkLi5kNTA2MTE3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
WDg2QXNzZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxl
ci5oCkBAIC0yMjYsNiArMjI2LDcgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAor
ICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAg
IEptcFNyYyhpbnQgb2Zmc2V0KQogICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oIGIvSmF2YVNj
cmlwdENvcmUvaml0L0V4ZWN1dGFibGVBbGxvY2F0b3IuaAppbmRleCAwZGU0Zjc5Li5mYmJlMGE1
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvRXhlY3V0YWJsZUFsbG9jYXRvci5oCisr
KyBiL0phdmFTY3JpcHRDb3JlL2ppdC9FeGVjdXRhYmxlQWxsb2NhdG9yLmgKQEAgLTIxMyw2ICsy
MTMsMjEgQEAgcHJpdmF0ZToKICNlbGlmIFBMQVRGT1JNX0FSTV9BUkNIKDcpICYmIFBMQVRGT1JN
KElQSE9ORSkKICAgICAgICAgc3lzX2RjYWNoZV9mbHVzaChjb2RlLCBzaXplKTsKICAgICAgICAg
c3lzX2ljYWNoZV9pbnZhbGlkYXRlKGNvZGUsIHNpemUpOworI2VsaWYgUExBVEZPUk0oQVJNKQor
ICAgICNpZiBDT01QSUxFUihHQ0MpICYmIChHQ0NfVkVSU0lPTiA+PSAzMDQwNikKKyAgICAgICAg
X19jbGVhcl9jYWNoZShyZWludGVycHJldF9jYXN0PGNoYXIqPihjb2RlKSwgcmVpbnRlcnByZXRf
Y2FzdDxjaGFyKj4oY29kZSkgKyBzaXplKTsKKyAgICAjZWxzZQorICAgICAgICBjb25zdCBpbnQg
c3lzY2FsbCA9IDB4ZjAwMDI7CisgICAgICAgIF9fYXNtIF9fdm9sYXRpbGUgKAorICAgICAgICAg
ICAgICAgIm1vdiAgICAgcjAsICUwXG4iCisgICAgICAgICAgICAgICAibW92ICAgICByMSwgJTFc
biIKKyAgICAgICAgICAgICAgICJtb3YgICAgIHI3LCAlMlxuIgorICAgICAgICAgICAgICAgIm1v
diAgICAgcjIsICMweDBcbiIKKyAgICAgICAgICAgICAgICJzd2kgICAgIDB4MDAwMDAwMDBcbiIK
KyAgICAgICAgICAgOgorICAgICAgICAgICA6ICAgInIiIChjb2RlKSwgInIiIChyZWludGVycHJl
dF9jYXN0PGNoYXIqPihjb2RlKSArIHNpemUpLCAiciIgKHN5c2NhbGwpCisgICAgICAgICAgIDog
ICAicjAiLCAicjEiLCAicjciKTsKKyAgICAjZW5kaWYgLy8gQ09NUElMRVIoR0NDKSAmJiAoR0ND
X1ZFUlNJT04gPj0gMzA0MDYpCiAjZWxzZQogI2Vycm9yICJFeGVjdXRhYmxlQWxsb2NhdG9yOjpj
YWNoZUZsdXNoIG5vdCBpbXBsZW1lbnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93
dGYvUGxhdGZvcm0uaAppbmRleCAxOTdjYWUwLi5jNGNjNjQwIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aApAQCAtMzEwLDYgKzMxMCw3IEBACiAvKiAtLWdudSBvcHRpb24gb2YgdGhlIFJWQ1QgY29tcGls
ZXIgYWxzbyBkZWZpbmVzIF9fR05VQ19fICovCiAjaWYgZGVmaW5lZChfX0dOVUNfXykgJiYgIUNP
TVBJTEVSKFJWQ1QpCiAjZGVmaW5lIFdURl9DT01QSUxFUl9HQ0MgMQorI2RlZmluZSBHQ0NfVkVS
U0lPTiAoX19HTlVDX18gKiAxMDAwMCArIF9fR05VQ19NSU5PUl9fICogMTAwICsgX19HTlVDX1BB
VENITEVWRUxfXykKICNlbmRpZgogCiAvKiBDT01QSUxFUihNSU5HVykgKi8KQEAgLTYwMiw3ICs2
MDMsNyBAQAogI2VuZGlmCiAvKiBTZXR0aW5nIHRoaXMgZmxhZyBwcmV2ZW50cyB0aGUgYXNzZW1i
bGVyIGZyb20gdXNpbmcgUldYIG1lbW9yeTsgdGhpcyBtYXkgaW1wcm92ZQogICAgc2VjdXJpdHkg
YnV0IGN1cnJlY3RseSBjb21lcyBhdCBhIHNpZ25pZmljYW50IHBlcmZvcm1hbmNlIGNvc3QuICov
Ci0jaWYgUExBVEZPUk1fQVJNX0FSQ0goNykgJiYgUExBVEZPUk0oSVBIT05FKQorI2lmIFBMQVRG
T1JNKEFSTSkKICNkZWZpbmUgRU5BQkxFX0FTU0VNQkxFUl9XWF9FWENMVVNJVkUgMQogI2Vsc2UK
ICNkZWZpbmUgRU5BQkxFX0FTU0VNQkxFUl9XWF9FWENMVVNJVkUgMApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUveWFyci9SZWdleEpJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4
SklULmNwcAppbmRleCAyOWE5ZDE4Li4zZjcwNzQzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS95YXJyL1JlZ2V4SklULmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS95YXJyL1JlZ2V4SklULmNw
cApAQCAtNDMsMTggKzQzLDE3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgWWFyciB7CiBj
bGFzcyBSZWdleEdlbmVyYXRvciA6IHByaXZhdGUgTWFjcm9Bc3NlbWJsZXIgewogICAgIGZyaWVu
ZCB2b2lkIGppdENvbXBpbGVSZWdleChKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIFJlZ2V4Q29k
ZUJsb2NrJiBqaXRPYmplY3QsIGNvbnN0IFVTdHJpbmcmIHBhdHRlcm4sIHVuc2lnbmVkJiBudW1T
dWJwYXR0ZXJucywgY29uc3QgY2hhciomIGVycm9yLCBib29sIGlnbm9yZUNhc2UsIGJvb2wgbXVs
dGlsaW5lKTsKIAotI2lmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCisjaWYgUExBVEZPUk0oQVJNKQog
ICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGlucHV0ID0gQVJNOjpyMDsKICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCBpbmRleCA9IEFSTTo6cjE7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgbGVuZ3RoID0gQVJNOjpyMjsKLQogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIG91
dHB1dCA9IEFSTTo6cjQ7CisKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMCA9IEFS
TTo6cjU7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk06OnI2OwogCiAg
ICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0ZXIgPSBBUk06OnIwOwotI2Vu
ZGlmCi0jaWYgUExBVEZPUk0oWDg2KQorI2VsaWYgUExBVEZPUk0oWDg2KQogICAgIHN0YXRpYyBj
b25zdCBSZWdpc3RlcklEIGlucHV0ID0gWDg2OjplYXg7CiAgICAgc3RhdGljIGNvbnN0IFJlZ2lz
dGVySUQgaW5kZXggPSBYODY6OmVkeDsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBsZW5n
dGggPSBYODY6OmVjeDsKQEAgLTY0LDggKzYzLDcgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBw
cml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdU
MSA9IFg4Njo6ZXNpOwogCiAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmV0dXJuUmVnaXN0
ZXIgPSBYODY6OmVheDsKLSNlbmRpZgotI2lmIFBMQVRGT1JNKFg4Nl82NCkKKyNlbGlmIFBMQVRG
T1JNKFg4Nl82NCkKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBpbnB1dCA9IFg4Njo6ZWRp
OwogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGluZGV4ID0gWDg2Ojplc2k7CiAgICAgc3Rh
dGljIGNvbnN0IFJlZ2lzdGVySUQgbGVuZ3RoID0gWDg2OjplZHg7CkBAIC0xMzA4LDcgKzEzMDYs
MTAgQEAgY2xhc3MgUmVnZXhHZW5lcmF0b3IgOiBwcml2YXRlIE1hY3JvQXNzZW1ibGVyIHsKICAg
ICAjZWxzZQogICAgICAgICBsb2FkUHRyKEFkZHJlc3MoWDg2OjplYnAsIDIgKiBzaXplb2Yodm9p
ZCopKSwgb3V0cHV0KTsKICAgICAjZW5kaWYKLSNlbGlmIFBMQVRGT1JNX0FSTV9BUkNIKDcpCisj
ZWxpZiBQTEFURk9STShBUk0pCisjaWYgIVBMQVRGT1JNX0FSTV9BUkNIKDcpCisgICAgICAgIHB1
c2goQVJNOjpscik7CisjZW5kaWYKICAgICAgICAgcHVzaChBUk06OnI0KTsKICAgICAgICAgcHVz
aChBUk06OnI1KTsKICAgICAgICAgcHVzaChBUk06OnI2KTsKQEAgLTEzMjUsNyArMTMyNiw3IEBA
IGNsYXNzIFJlZ2V4R2VuZXJhdG9yIDogcHJpdmF0ZSBNYWNyb0Fzc2VtYmxlciB7CiAgICAgICAg
IHBvcChYODY6OmVkaSk7CiAgICAgICAgIHBvcChYODY6OmVieCk7CiAgICAgICAgIHBvcChYODY6
OmVicCk7Ci0jZWxpZiBQTEFURk9STV9BUk1fQVJDSCg3KQorI2VsaWYgUExBVEZPUk0oQVJNKQog
ICAgICAgICBwb3AoQVJNOjpyNik7CiAgICAgICAgIHBvcChBUk06OnI1KTsKICAgICAgICAgcG9w
KEFSTTo6cjQpOwotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32181</attachid>
            <date>2009-07-02 05:28:09 -0700</date>
            <delta_ts>2009-07-28 03:22:36 -0700</delta_ts>
            <desc>Add generic ARM-JIT support using ARMAssembler</desc>
            <filename>0003-Add-JIT-support-for-generic-ARM-port-without-optimiz.patch</filename>
            <type>text/plain</type>
            <size>17793</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA5ZWZjNzQ4MjRiMDliY2U0NjA2MDgwNjkxNjI2YjY1ZjJmYTZkZTU0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUaHUsIDIgSnVsIDIwMDkgMTQ6MTc6MzcgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBBZGQgSklUIHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBvcnQgd2l0aG91dCBvcHRpbWl6YXRp
b25zLgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdl
ZC5odT4KU2lnbmVkLW9mZi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0t
LQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICB8ICAgMzcgKysrKysrKysr
KysKIEphdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAgfCAgICA0ICstCiBKYXZh
U2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCAgIHwgICAxMiArKystCiBKYXZhU2NyaXB0
Q29yZS9qaXQvSklULmNwcCAgICAgICAgICAgIHwgIDExMyArKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKy0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgfCAgIDI1
ICsrKysrKysKIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDb2RlLmggICAgICAgICAgfCAgICAzICsK
IEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggfCAgICA1ICstCiBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwICAgICAgIHwgICAgNiArKwogSmF2YVNjcmlwdENvcmUv
aml0L0pJVFN0dWJzLmggICAgICAgICB8ICAgMzAgKysrKysrKysrCiA5IGZpbGVzIGNoYW5nZWQs
IDIyOCBpbnNlcnRpb25zKCspLCA3IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCBjYjg2Nzhi
Li4wYmNhOGY0IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDAgQEAKKzIwMDktMDctMDIgIFpvbHRh
biBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpJVCBzdXBwb3J0IGZvciBnZW5lcmlj
IEFSTSBwb3J0IHdpdGhvdXQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBk
aWZmZXJlbmNlcyBjb21wYXJlZCB0byBvdGhlciBwb3J0czoKKyAgICAgICAgLSB0aGUgdHJhbXBv
bGluZXMgYXJlIGdlbmVyYXRlZCBieSB0aGUgSklUIGl0c2VsZiBpbnN0ZWFkIG9mCisgICAgICAg
ICAgaW5saW5lIGFzc2VtYmx5CisgICAgICAgIC0gdGhlIFZQQyB2ZWN0b3IgaXMgYWx3YXlzIGdl
bmVyYXRlZCwgbm90IGp1c3QgaW4gY2FzZSBvZiBhbgorICAgICAgICAgIGV4Y2VwdGlvbi4gVGhp
cyBpcyB1bmF2b2lkYWJsZSBzaW5jZSBnZW5lcmF0aW5nIGEgY29kZSBmb3IKKyAgICAgICAgICBh
IGdpdmVuIENvZGVCbG9jayBhZ2FpbiBpcyBub3QgbmVjZXNzYXJ5IHRoZSBzYW1lIGFzIHRoZQor
ICAgICAgICAgIGZpcnN0IHRpbWUuCisKKyAgICAgICAgQWxsIEpJVCBvcHRpbWl6YXRpb25zIGFy
ZSBkaXNhYmxlZC4KKworICAgICAgICBTaWduZWQgb2ZmIGJ5IFpvbHRhbiBIZXJjemVnIDx6aGVy
Y3plZ0BpbmYudS1zemVnZWQuaHU+CisgICAgICAgIFNpZ25lZCBvZmYgYnkgR2Fib3IgTG9raSA8
bG9raUBpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3Bw
OgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlcGFyc2VGb3JFeGNlcHRpb25JbmZvSWZOZWNl
c3NhcnkpOgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpD
b2RlQmxvY2s6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNh
bGxSZXR1cm5JbmRleFZlY3Rvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChK
U0M6OkpJVDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21w
aWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAg
ICogaml0L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAg
ICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3Jl
QXJndW1lbnRSZWZlcmVuY2UpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAg
ICogaml0L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6OkpJVFN0YWNrRnJhbWU6OnJldHVybkFk
ZHJlc3NTbG90KToKKwogMjAwOS0wNy0wMiAgR2Fib3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2Vk
Lmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcCBiL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5jcHAKaW5kZXggZDc3N2Y3My4uYjI2YTRmOSAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAorKysgYi9KYXZhU2NyaXB0Q29y
ZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwCkBAIC0xNDk1LDcgKzE0OTUsNyBAQCB2b2lkIENvZGVC
bG9jazo6cmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShDYWxsRnJhbWUqIGNhbGxG
cmFtZSkKICAgICAgICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2subV9leGNlcHRpb25JbmZvKTsK
ICAgICAgICAgICAgIEFTU0VSVChuZXdDb2RlQmxvY2subV9pbnN0cnVjdGlvbkNvdW50ID09IG1f
aW5zdHJ1Y3Rpb25Db3VudCk7CiAKLSNpZiBFTkFCTEUoSklUKQorI2lmIEVOQUJMRShKSVQpICYm
ICghUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STV9BUk1fQVJDSCg3KSkKICAgICAgICAgICAgIEpJ
VDo6Y29tcGlsZShtX2dsb2JhbERhdGEsICZuZXdDb2RlQmxvY2spOwogICAgICAgICAgICAgQVNT
RVJUKG5ld0Z1bmN0aW9uQm9keS0+Z2VuZXJhdGVkSklUQ29kZSgpLnNpemUoKSA9PSBvd25lck5v
ZGUoKS0+Z2VuZXJhdGVkSklUQ29kZSgpLnNpemUoKSk7CiAjZW5kaWYKQEAgLTE1MTYsNyArMTUx
Niw3IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXBhcnNlRm9yRXhjZXB0aW9uSW5mb0lmTmVjZXNzYXJ5
KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jay5t
X2V4Y2VwdGlvbkluZm8pOwogICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVCbG9jay5tX2luc3Ry
dWN0aW9uQ291bnQgPT0gbV9pbnN0cnVjdGlvbkNvdW50KTsKIAotI2lmIEVOQUJMRShKSVQpCisj
aWYgRU5BQkxFKEpJVCkgJiYgKCFQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNX0FSTV9BUkNIKDcp
KQogICAgICAgICAgICAgSklUOjpjb21waWxlKG1fZ2xvYmFsRGF0YSwgJm5ld0NvZGVCbG9jayk7
CiAgICAgICAgICAgICBBU1NFUlQobmV3RXZhbEJvZHktPmdlbmVyYXRlZEpJVENvZGUoKS5zaXpl
KCkgPT0gb3duZXJOb2RlKCktPmdlbmVyYXRlZEpJVENvZGUoKS5zaXplKCkpOwogI2VuZGlmCmRp
ZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IGFmZDMyZjAuLjExNmRjY2EgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0phdmFTY3Jp
cHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0zMDYsNyArMzA2LDcgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQ2FsbEZyYW1lKiBjYWxs
RnJhbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewogICAgICAg
ICAgICAgcmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShjYWxsRnJhbWUpOwotICAg
ICAgICAgICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNvZGVJbmRl
eCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KG1fZXhjZXB0aW9uSW5mby0+bV9jYWxs
UmV0dXJuSW5kZXhWZWN0b3IuYmVnaW4oKSwgbV9leGNlcHRpb25JbmZvLT5tX2NhbGxSZXR1cm5J
bmRleFZlY3Rvci5zaXplKCksIG93bmVyTm9kZSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCkub2Zmc2V0
T2YocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSktPmJ5dGVjb2RlSW5kZXg7CisgICAgICAgICAgICBy
ZXR1cm4gYmluYXJ5Q2hvcDxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4LCB1bnNpZ25l
ZCwgZ2V0Q2FsbFJldHVybk9mZnNldD4oY2FsbFJldHVybkluZGV4VmVjdG9yKCkuYmVnaW4oKSwg
Y2FsbFJldHVybkluZGV4VmVjdG9yKCkuc2l6ZSgpLCBvd25lck5vZGUoKS0+Z2VuZXJhdGVkSklU
Q29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5ieXRlY29kZUluZGV4Owog
ICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGZ1bmN0aW9uUmVnaXN0ZXJGb3JCeXRl
Y29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBmdW5jdGlvblJlZ2lzdGVy
SW5kZXgpOwpAQCAtMzg5LDcgKzM4OSwxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgTGlu
ZUluZm8mIGxhc3RMaW5lSW5mbygpIHsgQVNTRVJUKG1fZXhjZXB0aW9uSW5mbyk7IHJldHVybiBt
X2V4Y2VwdGlvbkluZm8tPm1fbGluZUluZm8ubGFzdCgpOyB9CiAKICNpZiBFTkFCTEUoSklUKQor
I2lmICFQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNX0FSTV9BUkNIKDcpCiAgICAgICAgIFZlY3Rv
cjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4PiYgY2FsbFJldHVybkluZGV4VmVjdG9y
KCkgeyBBU1NFUlQobV9leGNlcHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0aW9uSW5mby0+bV9j
YWxsUmV0dXJuSW5kZXhWZWN0b3I7IH0KKyNlbHNlCisgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJu
T2Zmc2V0VG9CeXRlY29kZUluZGV4PiYgY2FsbFJldHVybkluZGV4VmVjdG9yKCkgeyByZXR1cm4g
bV9jYWxsUmV0dXJuSW5kZXhWZWN0b3I7IH0KKyNlbmRpZgogI2VuZGlmCiAKICAgICAgICAgLy8g
Q29uc3RhbnQgUG9vbApAQCAtNTA4LDEyICs1MTIsMTYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICBWZWN0b3I8TGluZUluZm8+IG1fbGluZUluZm87CiAgICAgICAgICAgICBWZWN0b3I8
R2V0QnlJZEV4Y2VwdGlvbkluZm8+IG1fZ2V0QnlJZEV4Y2VwdGlvbkluZm87CiAKLSNpZiBFTkFC
TEUoSklUKQorI2lmIEVOQUJMRShKSVQpICYmICghUExBVEZPUk0oQVJNKSB8fCBQTEFURk9STV9B
Uk1fQVJDSCg3KSkKICAgICAgICAgICAgIFZlY3RvcjxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29k
ZUluZGV4PiBtX2NhbGxSZXR1cm5JbmRleFZlY3RvcjsKICNlbmRpZgogICAgICAgICB9OwogICAg
ICAgICBPd25QdHI8RXhjZXB0aW9uSW5mbz4gbV9leGNlcHRpb25JbmZvOwogCisjaWYgRU5BQkxF
KEpJVCkgJiYgUExBVEZPUk0oQVJNKSAmJiAhUExBVEZPUk1fQVJNX0FSQ0goNykKKyAgICAgICAg
VmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlSW5kZXg+IG1fY2FsbFJldHVybkluZGV4
VmVjdG9yOworI2VuZGlmCisKICAgICAgICAgc3RydWN0IFJhcmVEYXRhIHsKICAgICAgICAgICAg
IFZlY3RvcjxIYW5kbGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvaml0L0pJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApp
bmRleCAwMmNiMDliLi44NGNjY2M4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNDY5LDExICs0NjksMTYg
QEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxp
bmsoaXRlci0+ZnJvbSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKICAgICB9CiAKKyNpZiBQTEFU
Rk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgIGZvciAoVmVjdG9yPENhbGxS
ZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMu
ZW5kKCk7ICsraXRlcikKKyAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3Rv
cigpLmFwcGVuZChDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4KHBhdGNoQnVmZmVyLnJl
dHVybkFkZHJlc3NPZmZzZXQoaXRlci0+ZnJvbSksIGl0ZXItPmJ5dGVjb2RlSW5kZXgpKTsKKyNl
bHNlCiAgICAgaWYgKG1fY29kZUJsb2NrLT5oYXNFeGNlcHRpb25JbmZvKCkpIHsKICAgICAgICAg
bV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShtX2Nh
bGxzLnNpemUoKSk7CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBp
dGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikKICAg
ICAgICAgICAgIG1fY29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2Fs
bFJldHVybk9mZnNldFRvQnl0ZWNvZGVJbmRleChwYXRjaEJ1ZmZlci5yZXR1cm5BZGRyZXNzT2Zm
c2V0KGl0ZXItPmZyb20pLCBpdGVyLT5ieXRlY29kZUluZGV4KSk7CiAgICAgfQorI2VuZGlmCiAK
ICAgICAvLyBMaW5rIGFic29sdXRlIGFkZHJlc3NlcyBmb3IganNyCiAgICAgZm9yIChWZWN0b3I8
SlNSSW5mbz46Oml0ZXJhdG9yIGl0ZXIgPSBtX2pzclNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9q
c3JTaXRlcy5lbmQoKTsgKytpdGVyKQpAQCAtNTA3LDYgKzUxMiw2MCBAQCB2b2lkIEpJVDo6cHJp
dmF0ZUNvbXBpbGUoKQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBv
bGluZXMoUmVmUHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0
YSogZ2xvYmFsRGF0YSwgQ29kZVB0ciogY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRy
KiBjdGlTdHJpbmdMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2FsbFByZUxp
bmssIENvZGVQdHIqIGN0aVZpcnR1YWxDYWxsTGluaywgQ29kZVB0ciogY3RpVmlydHVhbENhbGws
IENvZGVQdHIqIGN0aU5hdGl2ZUNhbGxUaHVuaykKIHsKKyNpZiBQTEFURk9STShBUk0pICYmICFQ
TEFURk9STV9BUk1fQVJDSCg3KQorICAgIC8vIHg4NiByZXR1cm4KKyAgICBhbGlnbigpOworICAg
IHJldCgpOworCisgICAgLy8gY3RpVHJhbXBvbGluZQorICAgIExhYmVsIGN0aVRyYW1wb2xpbmVC
ZWdpbiA9IGxhYmVsKCk7CisKKyAgICBwdXNoKHJlZ0xpbmspOworICAgIHB1c2gocmVnUzEpOwor
ICAgIHB1c2gocmVnVDMpOworICAgIHB1c2goY3RpUmV0dXJuUmVnaXN0ZXIpOworICAgIHB1c2go
dGltZW91dENoZWNrUmVnaXN0ZXIpOworICAgIHB1c2goY2FsbEZyYW1lUmVnaXN0ZXIpOworCisg
ICAgLy8gVGhlIGZvbGxvd2luZyB0d28gaW5zdHJ1Y3Rpb25zIGhhdmUgdG8gcG9pbnQgdG8gdGhl
IGN0aUN1c3RvbVJldHVybkJlZ2luIGFkZHJlc3MhCisgICAgbW92ZShBUk06OnBjLCBjdGlSZXR1
cm5SZWdpc3Rlcik7CisgICAgc3ViMzIoSW1tMzIoMzYpLCBjdGlSZXR1cm5SZWdpc3Rlcik7CisK
KyAgICBzdWIzMihJbW0zMigyOCksIHJlZ1N0YWNrUHRyKTsKKworICAgIGxvYWQzMihBZGRyZXNz
KHJlZ1N0YWNrUHRyLCA2MCksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBtb3ZlKEltbTMyKDUx
MiksIHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKKworICAgIGNhbGwoQWRkcmVzcyhyZWdTdGFja1B0
ciwgNTIpKTsKKworICAgIGFkZDMyKEltbTMyKDI4KSwgcmVnU3RhY2tQdHIpOworICAgIHBvcChj
YWxsRnJhbWVSZWdpc3Rlcik7CisgICAgcG9wKHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKKyAgICBw
b3AoY3RpUmV0dXJuUmVnaXN0ZXIpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1MxKTsK
KyAgICByZXQoKTsKKworICAgIC8vIGN0aVZNVGhyb3dUcmFtcG9saW5lCisgICAgTGFiZWwgY3Rp
Vk1UaHJvd1RyYW1wb2xpbmVCZWdpbiA9IGxhYmVsKCk7CisKKyAgICBtb3ZlKHN0YWNrUG9pbnRl
clJlZ2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOworICAgIG1vdmUoY3RpUmV0dXJuUmVn
aXN0ZXIsIEFSTTo6bHIpOworICAgIENhbGwgY2FsbEN0aVZNVGhyb3cgPSBuZWFyQ2FsbCgpOwor
CisgICAgLy8gbm8gYnJlYWsKKyAgICAvLyBjdGlPcFRocm93Tm90Q2F1Z2h0CisgICAgTGFiZWwg
Y3RpT3BUaHJvd05vdENhdWdodEJlZ2luID0gbGFiZWwoKTsKKworICAgIGFkZDMyKEltbTMyKDI4
KSwgcmVnU3RhY2tQdHIpOworICAgIHBvcChjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgcG9wKHRp
bWVvdXRDaGVja1JlZ2lzdGVyKTsKKyAgICBwb3AoY3RpUmV0dXJuUmVnaXN0ZXIpOworICAgIHBv
cChyZWdUMyk7CisgICAgcG9wKHJlZ1MxKTsKKyAgICByZXQoKTsKKyNlbmRpZgorCiAjaWYgRU5B
QkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAgICAgLy8gKDEpIFRoZSBmaXJzdCBm
dW5jdGlvbiBwcm92aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3IgYXJyYXkgbGVuZ3RoCiAg
ICAgTGFiZWwgYXJyYXlMZW5ndGhCZWdpbiA9IGFsaWduKCk7CkBAIC04MDcsNiArODY2LDQ2IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlCiAgICAgLy8gc28gcHVsbCB0aGVtIG9mZiBub3cKICAg
ICBhZGRQdHIoSW1tMzIoTmF0aXZlQ2FsbEZyYW1lU2l6ZSAtIHNpemVvZihOYXRpdmVGdW5jdGlv
bkNhbGxlZVNpZ25hdHVyZSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyNlbGlmIFBMQVRG
T1JNKEFSTSkgJiYgIVBMQVRGT1JNX0FSTV9BUkNIKDcpCisgICAgZW1pdEdldEZyb21DYWxsRnJh
bWVIZWFkZXIzMihSZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKKworICAgIC8v
IEFsbG9jYXRlIHN0YWNrIHNwYWNlIGZvciBvdXIgYXJnbGlzdAorICAgIENPTVBJTEVfQVNTRVJU
KChzaXplb2YoQXJnTGlzdCkgJiAweDcpID09IDAsIEFyZ0xpc3Rfc2hvdWxkX2J5XzhieXRlX2Fs
aWduZWQpOworICAgIHN1YlB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJS
ZWdpc3Rlcik7CisKKyAgICAvLyBTZXQgdXAgYXJndW1lbnRzCisgICAgc3ViUHRyKEltbTMyKDEp
LCByZWdUMCk7IC8vIERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50CisKKyAgICAvLyBQ
dXNoIGFyZ2NvdW50CisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVn
aXN0ZXIsIE9CSkVDVF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOworCisgICAgLy8g
Q2FsY3VsYXRlIHRoZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGlu
IHJlZ1QxCisgICAgbW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgIHN1YjMyKElt
bTMyKFJlZ2lzdGVyRmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChpbnQzMl90KXNpemVvZihS
ZWdpc3RlcikpLCByZWdUMSk7CisKKyAgICAvLyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRz
IGFzIGNhbGxmcmFtZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1Qx
KQorICAgIG11bDMyKEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMCwgcmVnVDApOworICAg
IHN1YlB0cihyZWdUMCwgcmVnVDEpOworCisgICAgLy8gcHVzaCBwb2ludGVyIHRvIGFyZ3VtZW50
cworICAgIHN0b3JlUHRyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpF
Q1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gU2V0dXAgYXJnMzogcmVn
VDEgY3VycmVudGx5IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihS
ZWdpc3RlcikgcG9pbnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShp
bnQzMl90KXNpemVvZihSZWdpc3RlcikpLCByZWdUMik7CisKKyAgICAvLyBTZXR1cCBhcmcyOgor
ICAgIGVtaXRHZXRGcm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCBy
ZWdUMSk7CisKKyAgICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIs
IHJlZ1QwKTsKKworICAgIC8vIFNldHVwIGFyZzQ6IFRoaXMgaXMgYSBwbGFpbiBoYWNrCisgICAg
bW92ZShzdGFja1BvaW50ZXJSZWdpc3RlciwgQVJNOjpTMCk7CisKKyAgICBtb3ZlKGN0aVJldHVy
blJlZ2lzdGVyLCBBUk06OmxyKTsKKyAgICBjYWxsKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZT
RVRPRihKU0Z1bmN0aW9uLCBtX2RhdGEpKSk7CisKKyAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFy
Z0xpc3QpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUla
RV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQg
c3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKQEAgLTgzMywxMiArOTMyLDE1IEBA
IHZvaWQgSklUOjpwcml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhl
Y3V0YWJsZVBvb2w+KiBleGVjdXRhYmxlCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQ
dHIoUmVnaXN0ZXJGaWxlOjpSZXR1cm5QQywgcmVnVDEpOwogICAgIG1vdmUoSW1tUHRyKCZnbG9i
YWxEYXRhLT5leGNlcHRpb25Mb2NhdGlvbiksIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMSwg
cmVnVDIpOwotICAgIG1vdmUoSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGN0aVZNVGhy
b3dUcmFtcG9saW5lKSksIHJlZ1QyKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0
cihSZWdpc3RlckZpbGU6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgcG9r
ZShjYWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1l
LCBjYWxsRnJhbWUpIC8gc2l6ZW9mICh2b2lkKikpOworI2lmIFBMQVRGT1JNKEFSTSkgJiYgIVBM
QVRGT1JNX0FSTV9BUkNIKDcpCisgICAgSnVtcCBqdW1wVG9DdGlWTVRocm93VHJhbXBvbGluZSA9
IGp1bXAoKTsKKyNlbHNlCisgICAgbW92ZShJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4o
Y3RpVk1UaHJvd1RyYW1wb2xpbmUpKSwgcmVnVDIpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNz
QmVmb3JlUmV0dXJuKHJlZ1QyKTsKICAgICByZXQoKTsKLSAgICAKKyNlbmRpZgogCiAjaWYgRU5B
QkxFKEpJVF9PUFRJTUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAgICAgQ2FsbCBhcnJheV9mYWlsdXJl
Q2FzZXMxQ2FsbCA9IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChhcnJheV9mYWlsdXJlQ2FzZXMxKTsK
QEAgLTg4Myw2ICs5ODUsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRy
YW1wb2xpbmVzKFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKICAgICBVTlVTRURf
UEFSQU0oY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lKTsKICAgICBVTlVTRURfUEFSQU0oY3RpU3Ry
aW5nTGVuZ3RoVHJhbXBvbGluZSk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShBUk0pICYmICFQTEFU
Rk9STV9BUk1fQVJDSCg3KQorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEN0aVZNVGhyb3csIEZ1
bmN0aW9uUHRyKEpJVFN0dWJzOjpjdGlfdm1fdGhyb3cpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5r
KGp1bXBUb0N0aVZNVGhyb3dUcmFtcG9saW5lLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGN0aVZN
VGhyb3dUcmFtcG9saW5lQmVnaW4pKTsKKyAgICBjdGlUcmFtcG9saW5lID0gcmVpbnRlcnByZXRf
Y2FzdDxjdGlUcmFtcG9saW5lRnVuY3Rpb25QdHI+KHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIGN0
aVRyYW1wb2xpbmVCZWdpbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgY3RpVk1UaHJvd1Ry
YW1wb2xpbmUgPSB0cmFtcG9saW5lQXQoZmluYWxDb2RlLCBjdGlWTVRocm93VHJhbXBvbGluZUJl
Z2luKS5leGVjdXRhYmxlQWRkcmVzcygpOworICAgIGN0aU9wVGhyb3dOb3RDYXVnaHQgPSB0cmFt
cG9saW5lQXQoZmluYWxDb2RlLCBjdGlPcFRocm93Tm90Q2F1Z2h0QmVnaW4pLmV4ZWN1dGFibGVB
ZGRyZXNzKCk7CisjZW5kaWYKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJl
Z2lzdGVyKFJlZ2lzdGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBk
c3QpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKaW5kZXggZGIzZjM4YS4uOGZiMTNhNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjQ4LDYg
KzI0OCwzMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0
ZXJJRCBmcFJlZ1QwID0gQVJNOjpkMDsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJ
RCBmcFJlZ1QxID0gQVJNOjpkMTsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QyID0gQVJNOjpkMjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICAgICAgc3RhdGljIGNv
bnN0IFJlZ2lzdGVySUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IEFSTTo6cjA7CisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gQVJNOjpyMDsKKyAg
ICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID0gQVJN
OjpyMDsKKworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdp
c3RlciA9IEFSTTo6cjU7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFt
ZVJlZ2lzdGVyID0gQVJNOjpyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY3Rp
UmV0dXJuUmVnaXN0ZXIgPSBBUk06OnI2OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3Rl
cklEIHJlZ1QwID0gQVJNOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
VDEgPSBBUk06OnIxOworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IEFS
TTo6cjI7CisgICAgICAgIC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgcmVnVDMgPSBBUk06OnI3OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIHJlZ1MwID0gQVJNOjpTMDsKKyAgICAgICAgLy8gQ2FsbGVlIHByZXNlcnZlZAorICAg
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdTMSA9IEFSTTo6UzE7CisKKyAgICAgICAg
c3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnU3RhY2tQdHIgPSBBUk06OnNwOworICAgICAgICBz
dGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdMaW5rID0gQVJNOjpscjsKKworICAgICAgICBzdGF0
aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAgPSBBUk06OmZwMDsgLy8gRklYTUUKKyAgICAg
ICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gQVJNOjpmcDA7IC8vIEZJWE1F
CisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTTo6ZnAwOyAv
LyBGSVhNRQogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxh
dGZvcm0uIgogI2VuZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5o
IGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVENvZGUuaAppbmRleCA3ZWU2NDRiLi5jYzM5ODA2IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDb2RlLmgKQEAgLTc5LDYgKzc5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgICAgICByZXR1cm4gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUoCiAjaWYgUExBVEZP
Uk0oWDg2XzY0KQogICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsCisjZWxpZiBQTEFU
Rk9STShBUk0pCisgICAgICAgICAgICAgICAgLy8gRm9yIGJvdGggQVJNIGFuZCBBUk12NworICAg
ICAgICAgICAgICAgIDAsIDAsIDAsIDAsCiAjZW5kaWYKICAgICAgICAgICAgICAgICBtX3JlZi5t
X2NvZGUuZXhlY3V0YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIGV4Y2Vw
dGlvbiwgUHJvZmlsZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7
CiAgICAgICAgIH0KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IGRlY2Ew
ZDEuLmMyNzBmZDYgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRo
b2RzLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaApAQCAtMTc3
LDcgKzE3Nyw3IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChD
b2RlUHRyIGZ1bmN0aW9uKQogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKLSNpZiBQTEFURk9S
TShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkKKyNpZiBQTEFURk9STShYODYpIHx8IFBMQVRGT1JN
KFg4Nl82NCkgfHwgKFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRGT1JNX0FSTV9BUkNIKDcpKQogCiBB
TFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmV2ZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVn
aXN0ZXJJRCByZWcpCiB7CkBAIC0yMjQsNiArMjI0LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJ
VDo6cmVzdG9yZUFyZ3VtZW50UmVmZXJlbmNlKCkKIHsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJl
Z2lzdGVyLCBmaXJzdEFyZ3VtZW50UmVnaXN0ZXIpOwogICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0
ZXIsIE9CSkVDVF9PRkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNp
emVvZiAodm9pZCopKTsKKyNpZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3
KQorICAgIG1vdmUoY3RpUmV0dXJuUmVnaXN0ZXIsIEFSTTo6bHIpOworI2VuZGlmCiB9CiBBTFdB
WVNfSU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5l
KCkKIHsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCmluZGV4IDAyYmY3YzAuLmU3ZDMyOTkgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFN0dWJzLmNwcApAQCAtMzE2LDYgKzMxNiwxMiBAQCBleHRlcm4gIkMiIHsKICAg
ICAgfQogfQogCisjZWxpZiBQTEFURk9STShBUk0pCisKK2N0aVRyYW1wb2xpbmVGdW5jdGlvblB0
ciBjdGlUcmFtcG9saW5lID0gMDsKK3ZvaWQqIGN0aVZNVGhyb3dUcmFtcG9saW5lID0gMDsKK3Zv
aWQqIGN0aU9wVGhyb3dOb3RDYXVnaHQgPSAwOworCiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUENP
REVfU0FNUExJTkcpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDA0OTMxODkuLjQyMmUyZmIgMTAw
NjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCkBAIC0xMzgsNiArMTM4LDI4IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICAKICAgICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7
IHJldHVybiAmdGh1bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKEFS
TSkKKyAgICBzdHJ1Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIEpJVFN0dWJBcmcgcGFkZGlu
ZzsgLy8gVW51c2VkCisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2b2lk
KiBzYXZlZFI0OworICAgICAgICB2b2lkKiBzYXZlZFI1OworICAgICAgICB2b2lkKiBzYXZlZFI2
OworICAgICAgICB2b2lkKiBzYXZlZFI3OworICAgICAgICB2b2lkKiBzYXZlZFI4OworICAgICAg
ICB2b2lkKiBzYXZlZExpbms7CisKKyAgICAgICAgdm9pZCogY29kZTsKKyAgICAgICAgUmVnaXN0
ZXJGaWxlKiByZWdpc3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAg
ICAgICBKU1ZhbHVlKiBleGNlcHRpb247CisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2Zp
bGVyUmVmZXJlbmNlOworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAg
ICAgLy8gV2hlbiBKSVQgY29kZSBtYWtlcyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFk
ZHJlc3MganVzdCBiZWxvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2suCisgICAgICAgIFJldHVybkFk
ZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxS
ZXR1cm5BZGRyZXNzUHRyKj4odGhpcykgLSAxOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJ
VFN0YWNrRnJhbWUgbm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC0x
ODEsNiArMjAzLDEzIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNkZWZpbmUgUkVUVVJOX1BPSU5U
RVJfUEFJUihhLGIpIFZvaWRQdHJQYWlyVW5pb24gcGFpciA9IHt7IGEsIGIgfX07IHJldHVybiBw
YWlyLmkKICNlbmRpZgogCisjaWYgUExBVEZPUk0oQVJNKQorICAgIHR5cGVkZWYgRW5jb2RlZEpT
VmFsdWUgKCpjdGlUcmFtcG9saW5lRnVuY3Rpb25QdHIpKHZvaWQqLCB2b2lkKiwgdm9pZCosIHZv
aWQqLAorICAgICAgICAgICAgdm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwg
SlNWYWx1ZSogZXhjZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKTsKKyAgICBleHRl
cm4gY3RpVHJhbXBvbGluZUZ1bmN0aW9uUHRyIGN0aVRyYW1wb2xpbmU7CisgICAgZXh0ZXJuIHZv
aWQqIGN0aVZNVGhyb3dUcmFtcG9saW5lOworICAgIGV4dGVybiB2b2lkKiBjdGlPcFRocm93Tm90
Q2F1Z2h0OworI2Vsc2UKICAgICBleHRlcm4gIkMiIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUo
KTsKICAgICBleHRlcm4gIkMiIHZvaWQgY3RpT3BUaHJvd05vdENhdWdodCgpOwogICAgIGV4dGVy
biAiQyIgRW5jb2RlZEpTVmFsdWUgY3RpVHJhbXBvbGluZSgKQEAgLTE5MCw2ICsyMTksNyBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2
b2lkKiwgdm9pZCosCiAjZW5kaWYKICAgICAgICAgICAgIHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmls
ZSosIENhbGxGcmFtZSosIEpTVmFsdWUqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxE
YXRhKik7CisjZW5kaWYKIAogICAgIGNsYXNzIEpJVFRodW5rcyB7CiAgICAgcHVibGljOgotLSAK
MS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>32182</attachid>
            <date>2009-07-02 05:51:51 -0700</date>
            <delta_ts>2009-07-28 03:23:25 -0700</delta_ts>
            <desc>Floating point support for ARM. Looks like we double the number of patches each day :)</desc>
            <filename>0004-Add-floating-point-support-for-generic-ARM-port.patch</filename>
            <type>text/plain</type>
            <size>12017</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSAzYjM3ODVjNzk2NmY3MmM0MmNhMjBhY2ZkMDZiOGUzNjZlYjA0YTVmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUaHUsIDIgSnVsIDIwMDkgMTQ6NDM6NDUgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBBZGQgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBmb3IgZ2VuZXJpYyBBUk0gcG9ydC4KClNpZ25l
ZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQuaHU+Ci0tLQog
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsrKysr
KysrKysrKysKIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwICAgIHwg
ICAzMSArKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmggICAgICB8ICAgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKy0KIEphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIHwgICA2MCArKysrKysrKystLS0tLS0tLS0t
LS0tLS0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgICAgIHwgICAg
NiArLQogNSBmaWxlcyBjaGFuZ2VkLCAxNTEgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDBiY2E4ZjQuLjg5Mzg1MGIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwz
OSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEFk
ZCBmbG9hdGluZyBwb2ludCBzdXBwb3J0IGZvciBnZW5lcmljIEFSTSBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAgICAgICAq
IGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmRvdWJsZVRyYW5zZmVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFSTTo6KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjopOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZhZGRkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6OmZzdWJkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZtdWxkX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZjbXBkX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmZkdHJfdSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZmR0cl9kKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmbXNyX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmZzaXRvZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmbXN0YXQp
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
Ojpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN0b3JlRG91
YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmFkZERvdWJsZSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdWJEb3VibGUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6bXVsRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmJyYW5jaERvdWJsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorCisyMDA5LTA3LTAy
ICBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCiAgICAgICAgIEFkZCBKSVQgc3VwcG9ydCBmb3Ig
Z2VuZXJpYyBBUk0gcG9ydCB3aXRob3V0IG9wdGltaXphdGlvbnMuCiAgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yNDk4NgogCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCBiL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCmluZGV4IGZiNWE2Y2QuLmU2YzU5YjEgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCkBAIC0zMzQsNiArMzM0LDM3IEBA
IHZvaWQgQVJNQXNzZW1ibGVyOjpiYXNlSW5kZXhUcmFuc2ZlcjMyKGJvb2wgaXNMb2FkLCBSZWdp
c3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJCiAgICAgZHRyX3VyKGlzTG9hZCwgc3JjRHN0LCBiYXNl
LCBBUk06OlMwKTsKIH0KIAordm9pZCBBUk1Bc3NlbWJsZXI6OmRvdWJsZVRyYW5zZmVyKGJvb2wg
aXNMb2FkLCBGUFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zm
c2V0KQoreworICAgIGlmIChvZmZzZXQgJiAweDMpIHsKKyAgICAgICAgaWYgKG9mZnNldCA8PSAw
eDNmZiAmJiBvZmZzZXQgPj0gMCkgeworICAgICAgICAgICAgZmR0cl91KGlzTG9hZCwgc3JjRHN0
LCBiYXNlLCBvZmZzZXQgPj4gMik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAg
ICAgICAgaWYgKG9mZnNldCA8PSAweDNmZmZmICYmIG9mZnNldCA+PSAwKSB7CisgICAgICAgICAg
ICBhZGRfcihBUk06OlMwLCBiYXNlLCBPUDJfSU1NIHwgKG9mZnNldCA+PiAxMCkgfCAoMTEgPDwg
OCkpOworICAgICAgICAgICAgZmR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCAob2Zmc2V0
ID4+IDIpICYgMHhmZik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAg
b2Zmc2V0ID0gLW9mZnNldDsKKworICAgICAgICBpZiAob2Zmc2V0IDw9IDB4M2ZmICYmIG9mZnNl
dCA+PSAwKSB7CisgICAgICAgICAgICBmZHRyX2QoaXNMb2FkLCBzcmNEc3QsIGJhc2UsIG9mZnNl
dCA+PiAyKTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBpZiAob2Zm
c2V0IDw9IDB4M2ZmZmYgJiYgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIHN1Yl9yKEFSTTo6
UzAsIGJhc2UsIE9QMl9JTU0gfCAob2Zmc2V0ID4+IDEwKSB8ICgxMSA8PCA4KSk7CisgICAgICAg
ICAgICBmZHRyX2QoaXNMb2FkLCBzcmNEc3QsIEFSTTo6UzAsIChvZmZzZXQgPj4gMikgJiAweGZm
KTsKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgfQorICAgICAgICBvZmZzZXQgPSAtb2Zm
c2V0OworICAgIH0KKworICAgIG1vdmVJbW0ob2Zmc2V0LCBBUk06OlMwKTsKKyAgICBhZGRfcihB
Uk06OlMwLCBBUk06OlMwLCBiYXNlKTsKKyAgICBmZHRyX3UoaXNMb2FkLCBzcmNEc3QsIEFSTTo6
UzAsIDApOworfQorCiB2b2lkKiBBUk1Bc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFi
bGVQb29sKiBhbGxvY2F0b3IpCiB7CiAgICAgY2hhciogZGF0YSA9IHJlaW50ZXJwcmV0X2Nhc3Q8
Y2hhcio+KG1fYnVmZmVyLmV4ZWN1dGFibGVDb3B5KGFsbG9jYXRvcikpOwpkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCmluZGV4IGRiMWRiODguLjExMjQwM2MgMTAwNjQ0Ci0t
LSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAorKysgYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKQEAgLTYzLDggKzYzLDEzIEBAIG5hbWVz
cGFjZSBBUk0gewogICAgIH0gUmVnaXN0ZXJJRDsKIAogICAgIHR5cGVkZWYgZW51bSB7Ci0gICAg
ICAgIGZwMCAvL0ZJWE1FCisgICAgICAgIGQwLAorICAgICAgICBkMSwKKyAgICAgICAgZDIsCisg
ICAgICAgIGQzLAorICAgICAgICBTRDAgPSBkMwogICAgIH0gRlBSZWdpc3RlcklEOworCiB9IC8v
IG5hbWVzcGFjZSBBUk0KIAogICAgIGNsYXNzIEFSTUFzc2VtYmxlciB7CkBAIC0xMTUsMTMgKzEy
MCwyMSBAQCBuYW1lc3BhY2UgQVJNIHsKICAgICAgICAgICAgIE1WTiA9ICgweGYgPDwgMjEpLAog
ICAgICAgICAgICAgTVVMID0gMHgwMDAwMDA5MCwKICAgICAgICAgICAgIE1VTEwgPSAweDAwYzAw
MDkwLAorICAgICAgICAgICAgRkFEREQgPSAweDBlMzAwYjAwLAorICAgICAgICAgICAgRlNVQkQg
PSAweDBlMzAwYjQwLAorICAgICAgICAgICAgRk1VTEQgPSAweDBlMjAwYjAwLAorICAgICAgICAg
ICAgRkNNUEQgPSAweDBlYjQwYjQwLAogICAgICAgICAgICAgRFRSID0gMHgwNTAwMDAwMCwKICAg
ICAgICAgICAgIExEUkggPSAweDAwMTAwMDkwLAogICAgICAgICAgICAgU1RSSCA9IDB4MDAwMDAw
OTAsCiAgICAgICAgICAgICBTVE1EQiA9IDB4MDkyMDAwMDAsCiAgICAgICAgICAgICBMRE1JQSA9
IDB4MDhiMDAwMDAsCisgICAgICAgICAgICBGRFRSID0gMHgwZDAwMGIwMCwKICAgICAgICAgICAg
IEIgPSAweDBhMDAwMDAwLAogICAgICAgICAgICAgQkwgPSAweDBiMDAwMDAwLAorICAgICAgICAg
ICAgRk1TUiA9IDB4MGUwMDBhMTAsCisgICAgICAgICAgICBGU0lUT0QgPSAweDBlYjgwYmMwLAor
ICAgICAgICAgICAgRk1TVEFUID0gMHgwZWYxZmExMCwKICNpZiBBUk1fQVJDSF9WRVJTSU9OID49
IDUKICAgICAgICAgICAgIENMWiA9IDB4MDE2ZjBmMTAsCiAgICAgICAgICAgICBCS1BUID0gMHhl
MTIwMDcwLApAQCAtMzY0LDYgKzM3NywyNiBAQCBuYW1lc3BhY2UgQVJNIHsKICAgICAgICAgICAg
IG1fYnVmZmVyLnB1dEludChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBNVUxMIHwgUk4ocmRo
aSkgfCBSRChyZGxvKSB8IFJTKHJuKSB8IFJNKHJtKSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIGZhZGRkX3IoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgQ29uZGl0aW9uIGNjID0gQUwpCisg
ICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8
IEZBRERELCBkZCwgZG4sIGRtKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZnN1YmRfcihp
bnQgZGQsIGludCBkbiwgaW50IGRtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAg
ICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRlNVQkQsIGRkLCBk
biwgZG0pOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmbXVsZF9yKGludCBkZCwgaW50IGRu
LCBpbnQgZG0sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0
SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBGTVVMRCwgZGQsIGRuLCBkbSk7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZjbXBkX3IoaW50IGRkLCBpbnQgZG0sIENvbmRpdGlvbiBj
YyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1X
b3JkPihjYykgfCBGQ01QRCwgZGQsIDAsIGRtKTsKKyAgICAgICAgfQorCiAgICAgICAgIHZvaWQg
bGRyX2ltbShpbnQgcmQsIEFSTVdvcmQgaW1tLCBDb25kaXRpb24gY2MgPSBBTCkKICAgICAgICAg
ewogICAgICAgICAgICAgbV9idWZmZXIucHV0SW50V2l0aENvbnN0YW50SW50KHN0YXRpY19jYXN0
PEFSTVdvcmQ+KGNjKSB8IERUUiB8IERUX0xPQUQgfCBEVF9VUCB8IFJOKEFSTTo6cGMpIHwgUkQo
cmQpLCBpbW0sIHRydWUpOwpAQCAtNDE0LDYgKzQ0NywxOCBAQCBuYW1lc3BhY2UgQVJNIHsKICAg
ICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IFNUUkggfCBIRFRf
VUggfCBEVF9VUCB8IERUX1BSRSwgcmQsIHJuLCBybSk7CiAgICAgICAgIH0KIAorICAgICAgICB2
b2lkIGZkdHJfdShib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIsIEFSTVdvcmQgb3AyLCBDb25k
aXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNTRVJUKG9wMiA8PSAweGZm
KTsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEZEVFIg
fCBEVF9VUCB8IChpc0xvYWQgPyBEVF9MT0FEIDogMCksIHJkLCByYiwgb3AyKTsKKyAgICAgICAg
fQorCisgICAgICAgIHZvaWQgZmR0cl9kKGJvb2wgaXNMb2FkLCBpbnQgcmQsIGludCByYiwgQVJN
V29yZCBvcDIsIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAgICBBU1NF
UlQob3AyIDw9IDB4ZmYpOworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29y
ZD4oY2MpIHwgRkRUUiB8IChpc0xvYWQgPyBEVF9MT0FEIDogMCksIHJkLCByYiwgb3AyKTsKKyAg
ICAgICAgfQorCiAgICAgICAgIHZvaWQgcHVzaF9yKGludCByZWcsIENvbmRpdGlvbiBjYyA9IEFM
KQogICAgICAgICB7CiAgICAgICAgICAgICBBU1NFUlQoQVJNV29yZChyZWcpIDw9IDB4Zik7CkBA
IC00MzYsNiArNDgxLDIxIEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICAgICAgZHRyX3UodHJ1
ZSwgcmVnLCBBUk06OnNwLCAwLCBjYyk7CiAgICAgICAgIH0KIAorICAgICAgICB2b2lkIGZtc3Jf
cihpbnQgZGQsIGludCBybiwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAg
ICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEZNU1IsIHJuLCBkZCwgMCk7
CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZzaXRvZF9yKGludCBkZCwgaW50IGRtLCBDb25k
aXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nh
c3Q8QVJNV29yZD4oY2MpIHwgRlNJVE9ELCBkZCwgMCwgZG0pOworICAgICAgICB9CisKKyAgICAg
ICAgdm9pZCBmbXN0YXQoQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAg
IG1fYnVmZmVyLnB1dEludChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBGTVNUQVQpOworICAg
ICAgICB9CisKICNpZiBBUk1fQVJDSF9WRVJTSU9OID49IDUKICAgICAgICAgdm9pZCBjbHpfcihp
bnQgcmQsIGludCBybSwgQ29uZGl0aW9uIGNjID0gQUwpCiAgICAgICAgIHsKQEAgLTY1Myw2ICs3
MTMsNyBAQCBuYW1lc3BhY2UgQVJNIHsKIAogICAgICAgICB2b2lkIGRhdGFUcmFuc2ZlcjMyKGJv
b2wgaXNMb2FkLCBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9m
ZnNldCk7CiAgICAgICAgIHZvaWQgYmFzZUluZGV4VHJhbnNmZXIzMihib29sIGlzTG9hZCwgUmVn
aXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgUmVnaXN0ZXJJRCBpbmRleCwgaW50IHNj
YWxlLCBpbnQzMl90IG9mZnNldCk7CisgICAgICAgIHZvaWQgZG91YmxlVHJhbnNmZXIoYm9vbCBp
c0xvYWQsIEZQUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgaW50MzJfdCBvZmZz
ZXQpOwogCiAgICAgICAgIC8vIENvbnN0YW50IHBvb2wgaG5hZGxlcnMKIApkaWZmIC0tZ2l0IGEv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggYi9KYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAppbmRleCAxZTk3M2ZiLi4wYjEyMGFl
IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0u
aAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaApAQCAt
NTcsMTIgKzU3LDExIEBAIHB1YmxpYzoKICAgICB9OwogCiAgICAgZW51bSBEb3VibGVDb25kaXRp
b24gewotICAgICAgICBEb3VibGVFcXVhbCwgLy9GSVhNRQotICAgICAgICBEb3VibGVOb3RFcXVh
bCwgLy9GSVhNRQotICAgICAgICBEb3VibGVHcmVhdGVyVGhhbiwgLy9GSVhNRQotICAgICAgICBE
b3VibGVHcmVhdGVyVGhhbk9yRXF1YWwsIC8vRklYTUUKLSAgICAgICAgRG91YmxlTGVzc1RoYW4s
IC8vRklYTUUKLSAgICAgICAgRG91YmxlTGVzc1RoYW5PckVxdWFsLCAvL0ZJWE1FCisgICAgICAg
IERvdWJsZUVxdWFsID0gQVJNQXNzZW1ibGVyOjpFUSwKKyAgICAgICAgRG91YmxlR3JlYXRlclRo
YW4gPSBBUk1Bc3NlbWJsZXI6OkdULAorICAgICAgICBEb3VibGVHcmVhdGVyVGhhbk9yRXF1YWwg
PSBBUk1Bc3NlbWJsZXI6OkdFLAorICAgICAgICBEb3VibGVMZXNzVGhhbiA9IEFSTUFzc2VtYmxl
cjo6TFQsCisgICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCA9IEFSTUFzc2VtYmxlcjo6TEUs
CiAgICAgfTsKIAogICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHN0YWNrUG9pbnRlclJlZ2lz
dGVyID0gQVJNOjpzcDsKQEAgLTYyNyw2ICs2MjYsNyBAQCBwdWJsaWM6CiAgICAgLy8gRmxvYXRp
bmcgcG9pbnQgb3BlcmF0b3JzCiAgICAgYm9vbCBzdXBwb3J0c0Zsb2F0aW5nUG9pbnQoKSBjb25z
dAogICAgIHsKKyAgICAgICAgLy8gRklYTUU6IHNob3VsZCBiZSBhIGR5bmFtaWMgdGVzdDogVkZQ
LCBGUEEsIG9yIG5vdGhpbmcKICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgIH0KIApAQCAtNjM3
LDc0ICs2MzcsNTggQEAgcHVibGljOgogCiAgICAgdm9pZCBsb2FkRG91YmxlKEltcGxpY2l0QWRk
cmVzcyBhZGRyZXNzLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShhZGRyZXNzKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZG91YmxlVHJhbnNmZXIodHJ1
ZSwgZGVzdCwgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9mZnNldCk7CiAgICAgfQogCiAgICAgdm9p
ZCBzdG9yZURvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykK
ICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOwotICAgICAgICBVTlVTRURfUEFSQU0o
YWRkcmVzcyk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX2Fzc2Vt
Ymxlci5kb3VibGVUcmFuc2ZlcihmYWxzZSwgc3JjLCBhZGRyZXNzLmJhc2UsIGFkZHJlc3Mub2Zm
c2V0KTsKICAgICB9CiAKICAgICB2b2lkIGFkZERvdWJsZShGUFJlZ2lzdGVySUQgc3JjLCBGUFJl
Z2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOwotICAgICAg
ICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAg
ICAgICBtX2Fzc2VtYmxlci5mYWRkZF9yKGRlc3QsIGRlc3QsIHNyYyk7CiAgICAgfQogCiAgICAg
dm9pZCBhZGREb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKLSAg
ICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGxvYWREb3VibGUoc3JjLCBBUk06
OlNEMCk7CisgICAgICAgIGFkZERvdWJsZShBUk06OlNEMCwgZGVzdCk7CiAgICAgfQogCiAgICAg
dm9pZCBzdWJEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAg
ewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3Qp
OwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZnN1
YmRfcihkZXN0LCBkZXN0LCBzcmMpOwogICAgIH0KIAogICAgIHZvaWQgc3ViRG91YmxlKEFkZHJl
c3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShz
cmMpOwotICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVB
Q0hFRCgpOworICAgICAgICBsb2FkRG91YmxlKHNyYywgQVJNOjpTRDApOworICAgICAgICBzdWJE
b3VibGUoQVJNOjpTRDAsIGRlc3QpOwogICAgIH0KIAogICAgIHZvaWQgbXVsRG91YmxlKEZQUmVn
aXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKHNyYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKLSAgICAgICAgQVNTRVJUX05P
VF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZtdWxkX3IoZGVzdCwgZGVzdCwgc3Jj
KTsKICAgICB9CiAKICAgICB2b2lkIG11bERvdWJsZShBZGRyZXNzIHNyYywgRlBSZWdpc3RlcklE
IGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAgICAgICAgVU5VU0VE
X1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbG9h
ZERvdWJsZShzcmMsIEFSTTo6U0QwKTsKKyAgICAgICAgbXVsRG91YmxlKEFSTTo6U0QwLCBkZXN0
KTsKICAgICB9CiAKICAgICB2b2lkIGNvbnZlcnRJbnQzMlRvRG91YmxlKFJlZ2lzdGVySUQgc3Jj
LCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOwot
ICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgICAgICBtX2Fzc2VtYmxlci5mbXNyX3IoZGVzdCwgc3JjKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZnNpdG9kX3IoZGVzdCwgZGVzdCk7CiAgICAgfQogCiAgICAgSnVtcCBicmFuY2hEb3Vi
bGUoRG91YmxlQ29uZGl0aW9uIGNvbmQsIEZQUmVnaXN0ZXJJRCBsZWZ0LCBGUFJlZ2lzdGVySUQg
cmlnaHQpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oY29uZCk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShsZWZ0KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHJpZ2h0KTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgICAgIHJldHVybiBqdW1wKCk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZjbXBkX3IobGVmdCwgcmlnaHQpOworICAgICAgICBtX2Fzc2VtYmxlci5mbXN0YXQo
KTsKKyAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKHN0YXRpY19jYXN0PEFSTUFz
c2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKSkpOwogICAgIH0KIAogICAgIC8vIFRydW5jYXRlcyAn
c3JjJyB0byBhbiBpbnRlZ2VyLCBhbmQgcGxhY2VzIHRoZSByZXN1bHRpbmcgJ2Rlc3QnLgpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCmluZGV4IDhmYjEzYTYuLjhmMjBiNDggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKQEAgLTI3MCw5ICsyNzAsOSBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnU3Rh
Y2tQdHIgPSBBUk06OnNwOwogICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdMaW5r
ID0gQVJNOjpscjsKIAotICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDAg
PSBBUk06OmZwMDsgLy8gRklYTUUKLSAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBm
cFJlZ1QxID0gQVJNOjpmcDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lz
dGVySUQgZnBSZWdUMiA9IEFSTTo6ZnAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3Qg
RlBSZWdpc3RlcklEIGZwUmVnVDAgPSBBUk06OmQwOworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDEgPSBBUk06OmQxOworICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDIgPSBBUk06OmQyOwogI2Vsc2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3Vw
cG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33609</attachid>
            <date>2009-07-28 03:22:36 -0700</date>
            <delta_ts>2009-08-05 04:42:34 -0700</delta_ts>
            <desc>Add generic ARM-JIT support using ARMAssembler v2</desc>
            <filename>0001-Add-JIT-support-for-generic-ARM-port-without-optimiz.patch</filename>
            <type>text/plain</type>
            <size>18390</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA0ODI0OGJiZTFlOWE0ZjhmODI5MWUxZjE3ZDczOTk5NDM3NDBhMDM1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDI4IEp1bCAyMDA5IDEwOjEyOjI4ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIEpJVCBzdXBwb3J0IGZvciBnZW5lcmljIEFSTSBwb3J0IHdpdGhvdXQgb3B0aW1pemF0
aW9ucy4KClNpZ25lZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVn
ZWQuaHU+ClNpZ25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1Pgot
LS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgfCAgIDM4ICsrKysrKysr
KysrCiBKYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suY3BwIHwgICAgNCArLQogSmF2
YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmggICB8ICAgMTIgKysrLQogSmF2YVNjcmlw
dENvcmUvaml0L0pJVC5jcHAgICAgICAgICAgICB8ICAxMTMgKysrKysrKysrKysrKysrKysrKysr
KysrKysrKysrKystCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgIHwgICAy
NSArKysrKysrCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oICAgICAgICAgIHwgICAgMyAr
CiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIHwgICAgNSArLQogSmF2YVNj
cmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcCAgICAgICB8ICAgIDYgKysKIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRTdHVicy5oICAgICAgICAgfCAgIDMwICsrKysrKysrKwogSmF2YVNjcmlwdENvcmUv
d3RmL1BsYXRmb3JtLmggICAgICAgICB8ICAgIDIgKy0KIDEwIGZpbGVzIGNoYW5nZWQsIDIzMCBp
bnNlcnRpb25zKCspLCA4IGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2Nzg5OWVhLi42ODgx
NDliIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlw
dENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNDEgQEAKKzIwMDktMDctMjggIFpvbHRhbiBIZXJj
emVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIEpJVCBzdXBwb3J0IGZvciBnZW5lcmljIEFSTSBw
b3J0IHdpdGhvdXQgb3B0aW1pemF0aW9ucy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CisKKyAgICAgICAgVGhlcmUgYXJlIHR3byBkaWZmZXJl
bmNlcyBjb21wYXJlZCB0byBvdGhlciBwb3J0czoKKyAgICAgICAgLSB0aGUgdHJhbXBvbGluZXMg
YXJlIGdlbmVyYXRlZCBieSB0aGUgSklUIGl0c2VsZiBpbnN0ZWFkIG9mCisgICAgICAgICAgaW5s
aW5lIGFzc2VtYmx5CisgICAgICAgIC0gdGhlIFZQQyB2ZWN0b3IgaXMgYWx3YXlzIGdlbmVyYXRl
ZCwgbm90IGp1c3QgaW4gY2FzZSBvZiBhbgorICAgICAgICAgIGV4Y2VwdGlvbi4gVGhpcyBpcyB1
bmF2b2lkYWJsZSBzaW5jZSBnZW5lcmF0aW5nIGEgY29kZSBmb3IKKyAgICAgICAgICBhIGdpdmVu
IENvZGVCbG9jayBhZ2FpbiBpcyBub3QgbmVjZXNzYXJ5IHRoZSBzYW1lIGFzIHRoZQorICAgICAg
ICAgIGZpcnN0IHRpbWUuCisKKyAgICAgICAgQWxsIEpJVCBvcHRpbWl6YXRpb25zIGFyZSBkaXNh
YmxlZC4KKworICAgICAgICBTaWduZWQgb2ZmIGJ5IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0Bp
bmYudS1zemVnZWQuaHU+CisgICAgICAgIFNpZ25lZCBvZmYgYnkgR2Fib3IgTG9raSA8bG9raUBp
bmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgKiBieXRlY29kZS9Db2RlQmxvY2suY3BwOgorICAg
ICAgICAoSlNDOjpDb2RlQmxvY2s6OnJlcGFyc2VGb3JFeGNlcHRpb25JbmZvSWZOZWNlc3Nhcnkp
OgorICAgICAgICAqIGJ5dGVjb2RlL0NvZGVCbG9jay5oOgorICAgICAgICAoSlNDOjpDb2RlQmxv
Y2s6OmdldEJ5dGVjb2RlSW5kZXgpOgorICAgICAgICAoSlNDOjpDb2RlQmxvY2s6OmNhbGxSZXR1
cm5JbmRleFZlY3Rvcik6CisgICAgICAgICogaml0L0pJVC5jcHA6CisgICAgICAgIChKU0M6OkpJ
VDo6cHJpdmF0ZUNvbXBpbGUpOgorICAgICAgICAoSlNDOjpKSVQ6OnByaXZhdGVDb21waWxlQ1RJ
TWFjaGluZVRyYW1wb2xpbmVzKToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0
L0pJVENvZGUuaDoKKyAgICAgICAgKEpTQzo6SklUQ29kZTo6ZXhlY3V0ZSk6CisgICAgICAgICog
aml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3JlQXJndW1l
bnRSZWZlcmVuY2UpOgorICAgICAgICAqIGppdC9KSVRTdHVicy5jcHA6CisgICAgICAgICogaml0
L0pJVFN0dWJzLmg6CisgICAgICAgIChKU0M6OkpJVFN0YWNrRnJhbWU6OnJldHVybkFkZHJlc3NT
bG90KToKKyAgICAgICAgKiB3dGYvUGxhdGZvcm0uaDoKKwogMjAwOS0wNy0yNyAgQnJpYW4gV2Vp
bnN0ZWluICA8YndlaW5zdGVpbkBhcHBsZS5jb20+CiAKICAgICAgICAgRml4IG9mIG1pc3VzZSBv
ZiBzb3J0IGNvbW1hbmQuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmNwcAppbmRleCAw
Y2IzODEzLi4zNWZhOWUzIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2Rl
QmxvY2suY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5jcHAKQEAg
LTE0NzcsNyArMTQ3Nyw3IEBAIHZvaWQgQ29kZUJsb2NrOjpyZXBhcnNlRm9yRXhjZXB0aW9uSW5m
b0lmTmVjZXNzYXJ5KENhbGxGcmFtZSogY2FsbEZyYW1lKQogICAgICAgICAgICAgQVNTRVJUKG5l
d0NvZGVCbG9jay5tX2V4Y2VwdGlvbkluZm8pOwogICAgICAgICAgICAgQVNTRVJUKG5ld0NvZGVC
bG9jay5tX2luc3RydWN0aW9uQ291bnQgPT0gbV9pbnN0cnVjdGlvbkNvdW50KTsKIAotI2lmIEVO
QUJMRShKSVQpCisjaWYgRU5BQkxFKEpJVCkgJiYgKCFQTEFURk9STShBUk0pIHx8IFBMQVRGT1JN
X0FSTV9BUkNIKDcpKQogICAgICAgICAgICAgSklUOjpjb21waWxlKG1fZ2xvYmFsRGF0YSwgJm5l
d0NvZGVCbG9jayk7CiAgICAgICAgICAgICBBU1NFUlQobmV3RnVuY3Rpb25Cb2R5LT5nZW5lcmF0
ZWRKSVRDb2RlKCkuc2l6ZSgpID09IG93bmVyTm9kZSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCkuc2l6
ZSgpKTsKICNlbmRpZgpAQCAtMTQ5OCw3ICsxNDk4LDcgQEAgdm9pZCBDb2RlQmxvY2s6OnJlcGFy
c2VGb3JFeGNlcHRpb25JbmZvSWZOZWNlc3NhcnkoQ2FsbEZyYW1lKiBjYWxsRnJhbWUpCiAgICAg
ICAgICAgICBBU1NFUlQobmV3Q29kZUJsb2NrLm1fZXhjZXB0aW9uSW5mbyk7CiAgICAgICAgICAg
ICBBU1NFUlQobmV3Q29kZUJsb2NrLm1faW5zdHJ1Y3Rpb25Db3VudCA9PSBtX2luc3RydWN0aW9u
Q291bnQpOwogCi0jaWYgRU5BQkxFKEpJVCkKKyNpZiBFTkFCTEUoSklUKSAmJiAoIVBMQVRGT1JN
KEFSTSkgfHwgUExBVEZPUk1fQVJNX0FSQ0goNykpCiAgICAgICAgICAgICBKSVQ6OmNvbXBpbGUo
bV9nbG9iYWxEYXRhLCAmbmV3Q29kZUJsb2NrKTsKICAgICAgICAgICAgIEFTU0VSVChuZXdFdmFs
Qm9keS0+Z2VuZXJhdGVkSklUQ29kZSgpLnNpemUoKSA9PSBvd25lck5vZGUoKS0+Z2VuZXJhdGVk
SklUQ29kZSgpLnNpemUoKSk7CiAjZW5kaWYKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2J5
dGVjb2RlL0NvZGVCbG9jay5oIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
aW5kZXggZTlmMjY5Ny4uNTVmNTk4MCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYnl0ZWNv
ZGUvQ29kZUJsb2NrLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgK
QEAgLTMwNSw3ICszMDUsNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdW5zaWduZWQgZ2V0
Qnl0ZWNvZGVJbmRleChDYWxsRnJhbWUqIGNhbGxGcmFtZSwgUmV0dXJuQWRkcmVzc1B0ciByZXR1
cm5BZGRyZXNzKQogICAgICAgICB7CiAgICAgICAgICAgICByZXBhcnNlRm9yRXhjZXB0aW9uSW5m
b0lmTmVjZXNzYXJ5KGNhbGxGcmFtZSk7Ci0gICAgICAgICAgICByZXR1cm4gYmluYXJ5Q2hvcDxD
YWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4LCB1bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9m
ZnNldD4obV9leGNlcHRpb25JbmZvLT5tX2NhbGxSZXR1cm5JbmRleFZlY3Rvci5iZWdpbigpLCBt
X2V4Y2VwdGlvbkluZm8tPm1fY2FsbFJldHVybkluZGV4VmVjdG9yLnNpemUoKSwgb3duZXJOb2Rl
KCktPmdlbmVyYXRlZEpJVENvZGUoKS5vZmZzZXRPZihyZXR1cm5BZGRyZXNzLnZhbHVlKCkpKS0+
Ynl0ZWNvZGVJbmRleDsKKyAgICAgICAgICAgIHJldHVybiBiaW5hcnlDaG9wPENhbGxSZXR1cm5P
ZmZzZXRUb0J5dGVjb2RlSW5kZXgsIHVuc2lnbmVkLCBnZXRDYWxsUmV0dXJuT2Zmc2V0PihjYWxs
UmV0dXJuSW5kZXhWZWN0b3IoKS5iZWdpbigpLCBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5zaXpl
KCksIG93bmVyTm9kZSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCkub2Zmc2V0T2YocmV0dXJuQWRkcmVz
cy52YWx1ZSgpKSktPmJ5dGVjb2RlSW5kZXg7CiAgICAgICAgIH0KICAgICAgICAgCiAgICAgICAg
IGJvb2wgZnVuY3Rpb25SZWdpc3RlckZvckJ5dGVjb2RlT2Zmc2V0KHVuc2lnbmVkIGJ5dGVjb2Rl
T2Zmc2V0LCBpbnQmIGZ1bmN0aW9uUmVnaXN0ZXJJbmRleCk7CkBAIC0zODksNyArMzg5LDExIEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICBMaW5lSW5mbyYgbGFzdExpbmVJbmZvKCkgeyBBU1NF
UlQobV9leGNlcHRpb25JbmZvKTsgcmV0dXJuIG1fZXhjZXB0aW9uSW5mby0+bV9saW5lSW5mby5s
YXN0KCk7IH0KIAogI2lmIEVOQUJMRShKSVQpCisjaWYgIVBMQVRGT1JNKEFSTSkgfHwgUExBVEZP
Uk1fQVJNX0FSQ0goNykKICAgICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2Rl
SW5kZXg+JiBjYWxsUmV0dXJuSW5kZXhWZWN0b3IoKSB7IEFTU0VSVChtX2V4Y2VwdGlvbkluZm8p
OyByZXR1cm4gbV9leGNlcHRpb25JbmZvLT5tX2NhbGxSZXR1cm5JbmRleFZlY3RvcjsgfQorI2Vs
c2UKKyAgICAgICAgVmVjdG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlSW5kZXg+JiBjYWxs
UmV0dXJuSW5kZXhWZWN0b3IoKSB7IHJldHVybiBtX2NhbGxSZXR1cm5JbmRleFZlY3RvcjsgfQor
I2VuZGlmCiAjZW5kaWYKIAogICAgICAgICAvLyBDb25zdGFudCBQb29sCkBAIC01MDIsMTIgKzUw
NiwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIFZlY3RvcjxMaW5lSW5mbz4gbV9s
aW5lSW5mbzsKICAgICAgICAgICAgIFZlY3RvcjxHZXRCeUlkRXhjZXB0aW9uSW5mbz4gbV9nZXRC
eUlkRXhjZXB0aW9uSW5mbzsKIAotI2lmIEVOQUJMRShKSVQpCisjaWYgRU5BQkxFKEpJVCkgJiYg
KCFQTEFURk9STShBUk0pIHx8IFBMQVRGT1JNX0FSTV9BUkNIKDcpKQogICAgICAgICAgICAgVmVj
dG9yPENhbGxSZXR1cm5PZmZzZXRUb0J5dGVjb2RlSW5kZXg+IG1fY2FsbFJldHVybkluZGV4VmVj
dG9yOwogI2VuZGlmCiAgICAgICAgIH07CiAgICAgICAgIE93blB0cjxFeGNlcHRpb25JbmZvPiBt
X2V4Y2VwdGlvbkluZm87CiAKKyNpZiBFTkFCTEUoSklUKSAmJiBQTEFURk9STShBUk0pICYmICFQ
TEFURk9STV9BUk1fQVJDSCg3KQorICAgICAgICBWZWN0b3I8Q2FsbFJldHVybk9mZnNldFRvQnl0
ZWNvZGVJbmRleD4gbV9jYWxsUmV0dXJuSW5kZXhWZWN0b3I7CisjZW5kaWYKKwogICAgICAgICBz
dHJ1Y3QgUmFyZURhdGEgOiBGYXN0QWxsb2NCYXNlIHsKICAgICAgICAgICAgIFZlY3RvcjxIYW5k
bGVySW5mbz4gbV9leGNlcHRpb25IYW5kbGVyczsKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAppbmRleCBhMGU0NjJi
Li5mNDdkZTU2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcAorKysgYi9K
YXZhU2NyaXB0Q29yZS9qaXQvSklULmNwcApAQCAtNDc2LDExICs0NzYsMTYgQEAgdm9pZCBKSVQ6
OnByaXZhdGVDb21waWxlKCkKICAgICAgICAgICAgIHBhdGNoQnVmZmVyLmxpbmsoaXRlci0+ZnJv
bSwgRnVuY3Rpb25QdHIoaXRlci0+dG8pKTsKICAgICB9CiAKKyNpZiBQTEFURk9STShBUk0pICYm
ICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVy
YXRvciBpdGVyID0gbV9jYWxscy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRl
cikKKyAgICAgICAgbV9jb2RlQmxvY2stPmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLmFwcGVuZChD
YWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4KHBhdGNoQnVmZmVyLnJldHVybkFkZHJlc3NP
ZmZzZXQoaXRlci0+ZnJvbSksIGl0ZXItPmJ5dGVjb2RlSW5kZXgpKTsKKyNlbHNlCiAgICAgaWYg
KG1fY29kZUJsb2NrLT5oYXNFeGNlcHRpb25JbmZvKCkpIHsKICAgICAgICAgbV9jb2RlQmxvY2st
PmNhbGxSZXR1cm5JbmRleFZlY3RvcigpLnJlc2VydmVDYXBhY2l0eShtX2NhbGxzLnNpemUoKSk7
CiAgICAgICAgIGZvciAoVmVjdG9yPENhbGxSZWNvcmQ+OjppdGVyYXRvciBpdGVyID0gbV9jYWxs
cy5iZWdpbigpOyBpdGVyICE9IG1fY2FsbHMuZW5kKCk7ICsraXRlcikKICAgICAgICAgICAgIG1f
Y29kZUJsb2NrLT5jYWxsUmV0dXJuSW5kZXhWZWN0b3IoKS5hcHBlbmQoQ2FsbFJldHVybk9mZnNl
dFRvQnl0ZWNvZGVJbmRleChwYXRjaEJ1ZmZlci5yZXR1cm5BZGRyZXNzT2Zmc2V0KGl0ZXItPmZy
b20pLCBpdGVyLT5ieXRlY29kZUluZGV4KSk7CiAgICAgfQorI2VuZGlmCiAKICAgICAvLyBMaW5r
IGFic29sdXRlIGFkZHJlc3NlcyBmb3IganNyCiAgICAgZm9yIChWZWN0b3I8SlNSSW5mbz46Oml0
ZXJhdG9yIGl0ZXIgPSBtX2pzclNpdGVzLmJlZ2luKCk7IGl0ZXIgIT0gbV9qc3JTaXRlcy5lbmQo
KTsgKytpdGVyKQpAQCAtNTE1LDYgKzUyMCw2MCBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGUo
KQogCiB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVmUHRy
PEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZVBvb2wsIEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgQ29kZVB0ciogY3RpQXJyYXlMZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlTdHJpbmdM
ZW5ndGhUcmFtcG9saW5lLCBDb2RlUHRyKiBjdGlWaXJ0dWFsQ2FsbFByZUxpbmssIENvZGVQdHIq
IGN0aVZpcnR1YWxDYWxsTGluaywgQ29kZVB0ciogY3RpVmlydHVhbENhbGwsIENvZGVQdHIqIGN0
aU5hdGl2ZUNhbGxUaHVuaykKIHsKKyNpZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1f
QVJDSCg3KQorICAgIC8vIHg4NiByZXR1cm4KKyAgICBhbGlnbigpOworICAgIHJldCgpOworCisg
ICAgLy8gY3RpVHJhbXBvbGluZQorICAgIExhYmVsIGN0aVRyYW1wb2xpbmVCZWdpbiA9IGxhYmVs
KCk7CisKKyAgICBwdXNoKHJlZ0xpbmspOworICAgIHB1c2gocmVnUzEpOworICAgIHB1c2gocmVn
VDMpOworICAgIHB1c2goY3RpUmV0dXJuUmVnaXN0ZXIpOworICAgIHB1c2godGltZW91dENoZWNr
UmVnaXN0ZXIpOworICAgIHB1c2goY2FsbEZyYW1lUmVnaXN0ZXIpOworCisgICAgLy8gVGhlIGZv
bGxvd2luZyB0d28gaW5zdHJ1Y3Rpb25zIGhhdmUgdG8gcG9pbnQgdG8gdGhlIGN0aUN1c3RvbVJl
dHVybkJlZ2luIGFkZHJlc3MhCisgICAgbW92ZShBUk06OnBjLCBjdGlSZXR1cm5SZWdpc3Rlcik7
CisgICAgc3ViMzIoSW1tMzIoMzYpLCBjdGlSZXR1cm5SZWdpc3Rlcik7CisKKyAgICBzdWIzMihJ
bW0zMigyOCksIHJlZ1N0YWNrUHRyKTsKKworICAgIGxvYWQzMihBZGRyZXNzKHJlZ1N0YWNrUHRy
LCA2MCksIGNhbGxGcmFtZVJlZ2lzdGVyKTsKKyAgICBtb3ZlKEltbTMyKDUxMiksIHRpbWVvdXRD
aGVja1JlZ2lzdGVyKTsKKworICAgIGNhbGwoQWRkcmVzcyhyZWdTdGFja1B0ciwgNTIpKTsKKwor
ICAgIGFkZDMyKEltbTMyKDI4KSwgcmVnU3RhY2tQdHIpOworICAgIHBvcChjYWxsRnJhbWVSZWdp
c3Rlcik7CisgICAgcG9wKHRpbWVvdXRDaGVja1JlZ2lzdGVyKTsKKyAgICBwb3AoY3RpUmV0dXJu
UmVnaXN0ZXIpOworICAgIHBvcChyZWdUMyk7CisgICAgcG9wKHJlZ1MxKTsKKyAgICByZXQoKTsK
KworICAgIC8vIGN0aVZNVGhyb3dUcmFtcG9saW5lCisgICAgTGFiZWwgY3RpVk1UaHJvd1RyYW1w
b2xpbmVCZWdpbiA9IGxhYmVsKCk7CisKKyAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBm
aXJzdEFyZ3VtZW50UmVnaXN0ZXIpOworICAgIG1vdmUoY3RpUmV0dXJuUmVnaXN0ZXIsIEFSTTo6
bHIpOworICAgIENhbGwgY2FsbEN0aVZNVGhyb3cgPSBuZWFyQ2FsbCgpOworCisgICAgLy8gbm8g
YnJlYWsKKyAgICAvLyBjdGlPcFRocm93Tm90Q2F1Z2h0CisgICAgTGFiZWwgY3RpT3BUaHJvd05v
dENhdWdodEJlZ2luID0gbGFiZWwoKTsKKworICAgIGFkZDMyKEltbTMyKDI4KSwgcmVnU3RhY2tQ
dHIpOworICAgIHBvcChjYWxsRnJhbWVSZWdpc3Rlcik7CisgICAgcG9wKHRpbWVvdXRDaGVja1Jl
Z2lzdGVyKTsKKyAgICBwb3AoY3RpUmV0dXJuUmVnaXN0ZXIpOworICAgIHBvcChyZWdUMyk7Cisg
ICAgcG9wKHJlZ1MxKTsKKyAgICByZXQoKTsKKyNlbmRpZgorCiAjaWYgRU5BQkxFKEpJVF9PUFRJ
TUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAgICAgLy8gKDEpIFRoZSBmaXJzdCBmdW5jdGlvbiBwcm92
aWRlcyBmYXN0IHByb3BlcnR5IGFjY2VzcyBmb3IgYXJyYXkgbGVuZ3RoCiAgICAgTGFiZWwgYXJy
YXlMZW5ndGhCZWdpbiA9IGFsaWduKCk7CkBAIC04MTUsNiArODc0LDQ2IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
KiBleGVjdXRhYmxlCiAgICAgLy8gc28gcHVsbCB0aGVtIG9mZiBub3cKICAgICBhZGRQdHIoSW1t
MzIoTmF0aXZlQ2FsbEZyYW1lU2l6ZSAtIHNpemVvZihOYXRpdmVGdW5jdGlvbkNhbGxlZVNpZ25h
dHVyZSkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CiAKKyNlbGlmIFBMQVRGT1JNKEFSTSkgJiYg
IVBMQVRGT1JNX0FSTV9BUkNIKDcpCisgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXIzMihS
ZWdpc3RlckZpbGU6OkFyZ3VtZW50Q291bnQsIHJlZ1QwKTsKKworICAgIC8vIEFsbG9jYXRlIHN0
YWNrIHNwYWNlIGZvciBvdXIgYXJnbGlzdAorICAgIENPTVBJTEVfQVNTRVJUKChzaXplb2YoQXJn
TGlzdCkgJiAweDcpID09IDAsIEFyZ0xpc3Rfc2hvdWxkX2J5XzhieXRlX2FsaWduZWQpOworICAg
IHN1YlB0cihJbW0zMihzaXplb2YoQXJnTGlzdCkpLCBzdGFja1BvaW50ZXJSZWdpc3Rlcik7CisK
KyAgICAvLyBTZXQgdXAgYXJndW1lbnRzCisgICAgc3ViUHRyKEltbTMyKDEpLCByZWdUMCk7IC8v
IERvbid0IGluY2x1ZGUgJ3RoaXMnIGluIGFyZ2NvdW50CisKKyAgICAvLyBQdXNoIGFyZ2NvdW50
CisgICAgc3RvcmVQdHIocmVnVDAsIEFkZHJlc3Moc3RhY2tQb2ludGVyUmVnaXN0ZXIsIE9CSkVD
VF9PRkZTRVRPRihBcmdMaXN0LCBtX2FyZ0NvdW50KSkpOworCisgICAgLy8gQ2FsY3VsYXRlIHRo
ZSBzdGFydCBvZiB0aGUgY2FsbGZyYW1lIGhlYWRlciwgYW5kIHN0b3JlIGluIHJlZ1QxCisgICAg
bW92ZShjYWxsRnJhbWVSZWdpc3RlciwgcmVnVDEpOworICAgIHN1YjMyKEltbTMyKFJlZ2lzdGVy
RmlsZTo6Q2FsbEZyYW1lSGVhZGVyU2l6ZSAqIChpbnQzMl90KXNpemVvZihSZWdpc3RlcikpLCBy
ZWdUMSk7CisKKyAgICAvLyBDYWxjdWxhdGUgc3RhcnQgb2YgYXJndW1lbnRzIGFzIGNhbGxmcmFt
ZSBoZWFkZXIgLSBzaXplb2YoUmVnaXN0ZXIpICogYXJnY291bnQgKHJlZ1QxKQorICAgIG11bDMy
KEltbTMyKHNpemVvZihSZWdpc3RlcikpLCByZWdUMCwgcmVnVDApOworICAgIHN1YlB0cihyZWdU
MCwgcmVnVDEpOworCisgICAgLy8gcHVzaCBwb2ludGVyIHRvIGFyZ3VtZW50cworICAgIHN0b3Jl
UHRyKHJlZ1QxLCBBZGRyZXNzKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0Yo
QXJnTGlzdCwgbV9hcmdzKSkpOworCisgICAgLy8gU2V0dXAgYXJnMzogcmVnVDEgY3VycmVudGx5
IHBvaW50cyB0byB0aGUgZmlyc3QgYXJndW1lbnQsIHJlZ1QxLXNpemVvZihSZWdpc3RlcikgcG9p
bnRzIHRvICd0aGlzJworICAgIGxvYWRQdHIoQWRkcmVzcyhyZWdUMSwgLShpbnQzMl90KXNpemVv
ZihSZWdpc3RlcikpLCByZWdUMik7CisKKyAgICAvLyBTZXR1cCBhcmcyOgorICAgIGVtaXRHZXRG
cm9tQ2FsbEZyYW1lSGVhZGVyUHRyKFJlZ2lzdGVyRmlsZTo6Q2FsbGVlLCByZWdUMSk7CisKKyAg
ICAvLyBTZXR1cCBhcmcxOgorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QwKTsKKwor
ICAgIC8vIFNldHVwIGFyZzQ6IFRoaXMgaXMgYSBwbGFpbiBoYWNrCisgICAgbW92ZShzdGFja1Bv
aW50ZXJSZWdpc3RlciwgQVJNOjpTMCk7CisKKyAgICBtb3ZlKGN0aVJldHVyblJlZ2lzdGVyLCBB
Uk06OmxyKTsKKyAgICBjYWxsKEFkZHJlc3MocmVnVDEsIE9CSkVDVF9PRkZTRVRPRihKU0Z1bmN0
aW9uLCBtX2RhdGEpKSk7CisKKyAgICBhZGRQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3Rh
Y2tQb2ludGVyUmVnaXN0ZXIpOwogI2VsaWYgRU5BQkxFKEpJVF9PUFRJTUlaRV9OQVRJVkVfQ0FM
TCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxMIG5vdCB5ZXQgc3VwcG9ydGVkIG9u
IHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKQEAgLTg0MSwxMiArOTQwLDE1IEBAIHZvaWQgSklUOjpw
cml2YXRlQ29tcGlsZUNUSU1hY2hpbmVUcmFtcG9saW5lcyhSZWZQdHI8RXhlY3V0YWJsZVBvb2w+
KiBleGVjdXRhYmxlCiAgICAgZW1pdEdldEZyb21DYWxsRnJhbWVIZWFkZXJQdHIoUmVnaXN0ZXJG
aWxlOjpSZXR1cm5QQywgcmVnVDEpOwogICAgIG1vdmUoSW1tUHRyKCZnbG9iYWxEYXRhLT5leGNl
cHRpb25Mb2NhdGlvbiksIHJlZ1QyKTsKICAgICBzdG9yZVB0cihyZWdUMSwgcmVnVDIpOwotICAg
IG1vdmUoSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KGN0aVZNVGhyb3dUcmFtcG9saW5l
KSksIHJlZ1QyKTsKICAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZp
bGU6OkNhbGxlckZyYW1lLCBjYWxsRnJhbWVSZWdpc3Rlcik7CiAgICAgcG9rZShjYWxsRnJhbWVS
ZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBjYWxsRnJhbWUp
IC8gc2l6ZW9mICh2b2lkKikpOworI2lmIFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRGT1JNX0FSTV9B
UkNIKDcpCisgICAgSnVtcCBqdW1wVG9DdGlWTVRocm93VHJhbXBvbGluZSA9IGp1bXAoKTsKKyNl
bHNlCisgICAgbW92ZShJbW1QdHIocmVpbnRlcnByZXRfY2FzdDx2b2lkKj4oY3RpVk1UaHJvd1Ry
YW1wb2xpbmUpKSwgcmVnVDIpOwogICAgIHJlc3RvcmVSZXR1cm5BZGRyZXNzQmVmb3JlUmV0dXJu
KHJlZ1QyKTsKICAgICByZXQoKTsKLSAgICAKKyNlbmRpZgogCiAjaWYgRU5BQkxFKEpJVF9PUFRJ
TUlaRV9QUk9QRVJUWV9BQ0NFU1MpCiAgICAgQ2FsbCBhcnJheV9mYWlsdXJlQ2FzZXMxQ2FsbCA9
IG1ha2VUYWlsUmVjdXJzaXZlQ2FsbChhcnJheV9mYWlsdXJlQ2FzZXMxKTsKQEAgLTg5MSw2ICs5
OTMsMTMgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVzKFJl
ZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKICAgICBVTlVTRURfUEFSQU0oY3RpQXJy
YXlMZW5ndGhUcmFtcG9saW5lKTsKICAgICBVTlVTRURfUEFSQU0oY3RpU3RyaW5nTGVuZ3RoVHJh
bXBvbGluZSk7CiAjZW5kaWYKKyNpZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJD
SCg3KQorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEN0aVZNVGhyb3csIEZ1bmN0aW9uUHRyKEpJ
VFN0dWJzOjpjdGlfdm1fdGhyb3cpKTsKKyAgICBwYXRjaEJ1ZmZlci5saW5rKGp1bXBUb0N0aVZN
VGhyb3dUcmFtcG9saW5lLCBwYXRjaEJ1ZmZlci5sb2NhdGlvbk9mKGN0aVZNVGhyb3dUcmFtcG9s
aW5lQmVnaW4pKTsKKyAgICBjdGlUcmFtcG9saW5lID0gcmVpbnRlcnByZXRfY2FzdDxjdGlUcmFt
cG9saW5lRnVuY3Rpb25QdHI+KHRyYW1wb2xpbmVBdChmaW5hbENvZGUsIGN0aVRyYW1wb2xpbmVC
ZWdpbikuZXhlY3V0YWJsZUFkZHJlc3MoKSk7CisgICAgY3RpVk1UaHJvd1RyYW1wb2xpbmUgPSB0
cmFtcG9saW5lQXQoZmluYWxDb2RlLCBjdGlWTVRocm93VHJhbXBvbGluZUJlZ2luKS5leGVjdXRh
YmxlQWRkcmVzcygpOworICAgIGN0aU9wVGhyb3dOb3RDYXVnaHQgPSB0cmFtcG9saW5lQXQoZmlu
YWxDb2RlLCBjdGlPcFRocm93Tm90Q2F1Z2h0QmVnaW4pLmV4ZWN1dGFibGVBZGRyZXNzKCk7Cisj
ZW5kaWYKIH0KIAogdm9pZCBKSVQ6OmVtaXRHZXRWYXJpYWJsZU9iamVjdFJlZ2lzdGVyKFJlZ2lz
dGVySUQgdmFyaWFibGVPYmplY3QsIGludCBpbmRleCwgUmVnaXN0ZXJJRCBkc3QpCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
aW5kZXggY2VmZmU1OS4uYWY0NmM4ZSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJ
VC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMjQ4LDYgKzI0OCwzMSBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Qw
ID0gQVJNOjpkMDsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0g
QVJNOjpkMTsKICAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QyID0gQVJN
OjpkMjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVy
SUQgcmV0dXJuVmFsdWVSZWdpc3RlciA9IEFSTTo6cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBS
ZWdpc3RlcklEIGNhY2hlZFJlc3VsdFJlZ2lzdGVyID0gQVJNOjpyMDsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IFJlZ2lzdGVySUQgZmlyc3RBcmd1bWVudFJlZ2lzdGVyID0gQVJNOjpyMDsKKworICAg
ICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCB0aW1lb3V0Q2hlY2tSZWdpc3RlciA9IEFSTTo6
cjU7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGNhbGxGcmFtZVJlZ2lzdGVyID0g
QVJNOjpyNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgY3RpUmV0dXJuUmVnaXN0
ZXIgPSBBUk06OnI2OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QwID0g
QVJNOjpyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnVDEgPSBBUk06OnIx
OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCByZWdUMiA9IEFSTTo6cjI7CisgICAg
ICAgIC8vIENhbGxlZSBwcmVzZXJ2ZWQKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDMgPSBBUk06OnI3OworCisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1Mw
ID0gQVJNOjpTMDsKKyAgICAgICAgLy8gQ2FsbGVlIHByZXNlcnZlZAorICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCByZWdTMSA9IEFSTTo6UzE7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IFJlZ2lzdGVySUQgcmVnU3RhY2tQdHIgPSBBUk06OnNwOworICAgICAgICBzdGF0aWMgY29uc3Qg
UmVnaXN0ZXJJRCByZWdMaW5rID0gQVJNOjpscjsKKworICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDAgPSBBUk06OmZwMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gQVJNOjpmcDA7IC8vIEZJWE1FCisgICAgICAgIHN0
YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMiA9IEFSTTo6ZnAwOyAvLyBGSVhNRQogI2Vs
c2UKICAgICAjZXJyb3IgIkpJVCBub3Qgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vu
ZGlmCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oIGIvSmF2YVNjcmlw
dENvcmUvaml0L0pJVENvZGUuaAppbmRleCBiNTAyYzhhLi5lOWZiOWFkIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ29kZS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRD
b2RlLmgKQEAgLTc5LDYgKzc5LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgICAgICByZXR1
cm4gSlNWYWx1ZTo6ZGVjb2RlKGN0aVRyYW1wb2xpbmUoCiAjaWYgUExBVEZPUk0oWDg2XzY0KQog
ICAgICAgICAgICAgICAgIDAsIDAsIDAsIDAsIDAsIDAsCisjZWxpZiBQTEFURk9STShBUk0pCisg
ICAgICAgICAgICAgICAgLy8gRm9yIGJvdGggQVJNIGFuZCBBUk12NworICAgICAgICAgICAgICAg
IDAsIDAsIDAsIDAsCiAjZW5kaWYKICAgICAgICAgICAgICAgICBtX3JlZi5tX2NvZGUuZXhlY3V0
YWJsZUFkZHJlc3MoKSwgcmVnaXN0ZXJGaWxlLCBjYWxsRnJhbWUsIGV4Y2VwdGlvbiwgUHJvZmls
ZXI6OmVuYWJsZWRQcm9maWxlclJlZmVyZW5jZSgpLCBnbG9iYWxEYXRhKSk7CiAgICAgICAgIH0K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggYi9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCmluZGV4IGYwM2Q2MzUuLjQzZjA3N2Yg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKKysrIGIv
SmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaApAQCAtMTc3LDcgKzE3Nyw3IEBA
IEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRyIGZ1bmN0
aW9uKQogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKLSNpZiBQTEFURk9STShYODYpIHx8IFBM
QVRGT1JNKFg4Nl82NCkKKyNpZiBQTEFURk9STShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkgfHwg
KFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRGT1JNX0FSTV9BUkNIKDcpKQogCiBBTFdBWVNfSU5MSU5F
IHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFkZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcp
CiB7CkBAIC0yMjQsNiArMjI0LDkgQEAgQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6cmVzdG9yZUFy
Z3VtZW50UmVmZXJlbmNlKCkKIHsKICAgICBtb3ZlKHN0YWNrUG9pbnRlclJlZ2lzdGVyLCBmaXJz
dEFyZ3VtZW50UmVnaXN0ZXIpOwogICAgIHBva2UoY2FsbEZyYW1lUmVnaXN0ZXIsIE9CSkVDVF9P
RkZTRVRPRihzdHJ1Y3QgSklUU3RhY2tGcmFtZSwgY2FsbEZyYW1lKSAvIHNpemVvZiAodm9pZCop
KTsKKyNpZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgIG1vdmUo
Y3RpUmV0dXJuUmVnaXN0ZXIsIEFSTTo6bHIpOworI2VuZGlmCiB9CiBBTFdBWVNfSU5MSU5FIHZv
aWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2VGb3JUcmFtcG9saW5lKCkKIHsKZGlmZiAt
LWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuY3BwCmluZGV4IDUwNDk0NzcuLjE5OGExMjUgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRTdHVicy5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0
dWJzLmNwcApAQCAtMzE2LDYgKzMxNiwxMiBAQCBleHRlcm4gIkMiIHsKICAgICAgfQogfQogCisj
ZWxpZiBQTEFURk9STShBUk0pCisKK2N0aVRyYW1wb2xpbmVGdW5jdGlvblB0ciBjdGlUcmFtcG9s
aW5lID0gMDsKK3ZvaWQqIGN0aVZNVGhyb3dUcmFtcG9saW5lID0gMDsKK3ZvaWQqIGN0aU9wVGhy
b3dOb3RDYXVnaHQgPSAwOworCiAjZW5kaWYKIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcp
CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaCBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5oCmluZGV4IDA0OTMxODkuLjQyMmUyZmIgMTAwNjQ0Ci0tLSBhL0ph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5oCkBAIC0xMzgsNiArMTM4LDI4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAKICAg
ICAgICAgUmV0dXJuQWRkcmVzc1B0ciogcmV0dXJuQWRkcmVzc1Nsb3QoKSB7IHJldHVybiAmdGh1
bmtSZXR1cm5BZGRyZXNzOyB9CiAgICAgfTsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICBzdHJ1
Y3QgSklUU3RhY2tGcmFtZSB7CisgICAgICAgIEpJVFN0dWJBcmcgcGFkZGluZzsgLy8gVW51c2Vk
CisgICAgICAgIEpJVFN0dWJBcmcgYXJnc1s2XTsKKworICAgICAgICB2b2lkKiBzYXZlZFI0Owor
ICAgICAgICB2b2lkKiBzYXZlZFI1OworICAgICAgICB2b2lkKiBzYXZlZFI2OworICAgICAgICB2
b2lkKiBzYXZlZFI3OworICAgICAgICB2b2lkKiBzYXZlZFI4OworICAgICAgICB2b2lkKiBzYXZl
ZExpbms7CisKKyAgICAgICAgdm9pZCogY29kZTsKKyAgICAgICAgUmVnaXN0ZXJGaWxlKiByZWdp
c3RlckZpbGU7CisgICAgICAgIENhbGxGcmFtZSogY2FsbEZyYW1lOworICAgICAgICBKU1ZhbHVl
KiBleGNlcHRpb247CisgICAgICAgIFByb2ZpbGVyKiogZW5hYmxlZFByb2ZpbGVyUmVmZXJlbmNl
OworICAgICAgICBKU0dsb2JhbERhdGEqIGdsb2JhbERhdGE7CisKKyAgICAgICAgLy8gV2hlbiBK
SVQgY29kZSBtYWtlcyBhIGNhbGwsIGl0IHB1c2hlcyBpdHMgcmV0dXJuIGFkZHJlc3MganVzdCBi
ZWxvdyB0aGUgcmVzdCBvZiB0aGUgc3RhY2suCisgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJl
dHVybkFkZHJlc3NTbG90KCkgeyByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxSZXR1cm5BZGRyZXNz
UHRyKj4odGhpcykgLSAxOyB9CisgICAgfTsKICNlbHNlCiAjZXJyb3IgIkpJVFN0YWNrRnJhbWUg
bm90IGRlZmluZWQgZm9yIHRoaXMgcGxhdGZvcm0uIgogI2VuZGlmCkBAIC0xODEsNiArMjAzLDEz
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICNkZWZpbmUgUkVUVVJOX1BPSU5URVJfUEFJUihhLGIp
IFZvaWRQdHJQYWlyVW5pb24gcGFpciA9IHt7IGEsIGIgfX07IHJldHVybiBwYWlyLmkKICNlbmRp
ZgogCisjaWYgUExBVEZPUk0oQVJNKQorICAgIHR5cGVkZWYgRW5jb2RlZEpTVmFsdWUgKCpjdGlU
cmFtcG9saW5lRnVuY3Rpb25QdHIpKHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLAorICAgICAg
ICAgICAgdm9pZCogY29kZSwgUmVnaXN0ZXJGaWxlKiwgQ2FsbEZyYW1lKiwgSlNWYWx1ZSogZXhj
ZXB0aW9uLCBQcm9maWxlcioqLCBKU0dsb2JhbERhdGEqKTsKKyAgICBleHRlcm4gY3RpVHJhbXBv
bGluZUZ1bmN0aW9uUHRyIGN0aVRyYW1wb2xpbmU7CisgICAgZXh0ZXJuIHZvaWQqIGN0aVZNVGhy
b3dUcmFtcG9saW5lOworICAgIGV4dGVybiB2b2lkKiBjdGlPcFRocm93Tm90Q2F1Z2h0OworI2Vs
c2UKICAgICBleHRlcm4gIkMiIHZvaWQgY3RpVk1UaHJvd1RyYW1wb2xpbmUoKTsKICAgICBleHRl
cm4gIkMiIHZvaWQgY3RpT3BUaHJvd05vdENhdWdodCgpOwogICAgIGV4dGVybiAiQyIgRW5jb2Rl
ZEpTVmFsdWUgY3RpVHJhbXBvbGluZSgKQEAgLTE5MCw2ICsyMTksNyBAQCBuYW1lc3BhY2UgSlND
IHsKICAgICAgICAgICAgIHZvaWQqLCB2b2lkKiwgdm9pZCosIHZvaWQqLCB2b2lkKiwgdm9pZCos
CiAjZW5kaWYKICAgICAgICAgICAgIHZvaWQqIGNvZGUsIFJlZ2lzdGVyRmlsZSosIENhbGxGcmFt
ZSosIEpTVmFsdWUqIGV4Y2VwdGlvbiwgUHJvZmlsZXIqKiwgSlNHbG9iYWxEYXRhKik7CisjZW5k
aWYKIAogICAgIGNsYXNzIEpJVFRodW5rcyB7CiAgICAgcHVibGljOgpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0u
aAppbmRleCA2MGQwZmEwLi44MTA3N2JlIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApAQCAtNjM5LDcg
KzYzOSw3IEBACiAjZW5kaWYKIC8qIFNldHRpbmcgdGhpcyBmbGFnIHByZXZlbnRzIHRoZSBhc3Nl
bWJsZXIgZnJvbSB1c2luZyBSV1ggbWVtb3J5OyB0aGlzIG1heSBpbXByb3ZlCiAgICBzZWN1cml0
eSBidXQgY3VycmVjdGx5IGNvbWVzIGF0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFuY2UgY29zdC4g
Ki8KLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk1fQVJNX0FSQ0goNykKICNkZWZpbmUg
RU5BQkxFX0FTU0VNQkxFUl9XWF9FWENMVVNJVkUgMQogI2Vsc2UKICNkZWZpbmUgRU5BQkxFX0FT
U0VNQkxFUl9XWF9FWENMVVNJVkUgMAotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33610</attachid>
            <date>2009-07-28 03:23:25 -0700</date>
            <delta_ts>2009-08-05 04:43:15 -0700</delta_ts>
            <desc>Floating point support for ARM v2</desc>
            <filename>0002-Add-floating-point-support-for-generic-ARM-port.patch</filename>
            <type>text/plain</type>
            <size>12018</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA4Y2I2YzE3ODFlYzcyYzljMDIxZjU1ODE2NzdlYmQwN2Q3YmNkMWNmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBUdWUsIDI4IEp1bCAyMDA5IDEwOjEyOjI4ICswMjAwClN1YmplY3Q6IFtQQVRD
SF0gQWRkIGZsb2F0aW5nIHBvaW50IHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBvcnQuCgpTaWdu
ZWQtb2ZmLWJ5OiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgotLS0K
IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgIHwgICAzMyArKysr
KysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAgICB8
ICAgMzEgKysrKysrKysrKysrKwogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxl
ci5oICAgICAgfCAgIDYzICsrKysrKysrKysrKysrKysrKysrKysrKystCiBKYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaCB8ICAgNjAgKysrKysrKysrLS0tLS0tLS0t
LS0tLS0tCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICAgICAgICB8ICAg
IDYgKy0KIDUgZmlsZXMgY2hhbmdlZCwgMTUxIGluc2VydGlvbnMoKyksIDQyIGRlbGV0aW9ucygt
KQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3Jl
L0NoYW5nZUxvZwppbmRleCA2ODgxNDliLi5iYzA3Yjg2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0yLDYgKzIs
MzkgQEAKIAogICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KIAorICAgICAgICBB
ZGQgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBmb3IgZ2VuZXJpYyBBUk0gcG9ydC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CisKKyAgICAgICAg
KiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
Ojpkb3VibGVUcmFuc2Zlcik6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oOgor
ICAgICAgICAoSlNDOjpBUk06Oik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6KToKKyAg
ICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmYWRkZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNz
ZW1ibGVyOjpmc3ViZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmbXVsZF9yKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmY21wZF9yKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpmZHRyX3UpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZkdHJfZCk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Zm1zcl9yKToKKyAgICAgICAgKEpTQzo6QVJN
QXNzZW1ibGVyOjpmc2l0b2Rfcik6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Zm1zdGF0
KToKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpT
Qzo6TWFjcm9Bc3NlbWJsZXJBUk06Oik6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
OjpzdXBwb3J0c0Zsb2F0aW5nUG9pbnQpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFS
TTo6bG9hZERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdG9yZURv
dWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjphZGREb3VibGUpOgorICAg
ICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3ViRG91YmxlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06Om11bERvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpjb252ZXJ0SW50MzJUb0RvdWJsZSk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1i
bGVyQVJNOjpicmFuY2hEb3VibGUpOgorICAgICAgICAqIGppdC9KSVQuaDoKKworMjAwOS0wNy0y
OCAgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBBZGQgSklUIHN1cHBvcnQgZm9y
IGdlbmVyaWMgQVJNIHBvcnQgd2l0aG91dCBvcHRpbWl6YXRpb25zLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKIApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAppbmRleCBkYWZjNDgyLi5mNzU2OWJiIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcApAQCAtMzM0LDYgKzMzNCwzNyBA
QCB2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMihib29sIGlzTG9hZCwgUmVn
aXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySQogICAgIGR0cl91cihpc0xvYWQsIHNyY0RzdCwgYmFz
ZSwgQVJNOjpTMCk7CiB9CiAKK3ZvaWQgQVJNQXNzZW1ibGVyOjpkb3VibGVUcmFuc2Zlcihib29s
IGlzTG9hZCwgRlBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9m
ZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ICYgMHgzKSB7CisgICAgICAgIGlmIChvZmZzZXQgPD0g
MHgzZmYgJiYgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGZkdHJfdShpc0xvYWQsIHNyY0Rz
dCwgYmFzZSwgb2Zmc2V0ID4+IDIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvZmZzZXQgPD0gMHgzZmZmZiAmJiBvZmZzZXQgPj0gMCkgeworICAgICAgICAg
ICAgYWRkX3IoQVJNOjpTMCwgYmFzZSwgT1AyX0lNTSB8IChvZmZzZXQgPj4gMTApIHwgKDExIDw8
IDgpKTsKKyAgICAgICAgICAgIGZkdHJfdShpc0xvYWQsIHNyY0RzdCwgQVJNOjpTMCwgKG9mZnNl
dCA+PiAyKSAmIDB4ZmYpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG9mZnNldCA9IC1vZmZzZXQ7CisKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweDNmZiAmJiBvZmZz
ZXQgPj0gMCkgeworICAgICAgICAgICAgZmR0cl9kKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBvZmZz
ZXQgPj4gMik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9m
ZnNldCA8PSAweDNmZmZmICYmIG9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBzdWJfcihBUk06
OlMwLCBiYXNlLCBPUDJfSU1NIHwgKG9mZnNldCA+PiAxMCkgfCAoMTEgPDwgOCkpOworICAgICAg
ICAgICAgZmR0cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCAob2Zmc2V0ID4+IDIpICYgMHhm
Zik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ID0gLW9m
ZnNldDsKKyAgICB9CisKKyAgICBtb3ZlSW1tKG9mZnNldCwgQVJNOjpTMCk7CisgICAgYWRkX3Io
QVJNOjpTMCwgQVJNOjpTMCwgYmFzZSk7CisgICAgZmR0cl91KGlzTG9hZCwgc3JjRHN0LCBBUk06
OlMwLCAwKTsKK30KKwogdm9pZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weShFeGVjdXRh
YmxlUG9vbCogYWxsb2NhdG9yKQogewogICAgIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9jYXN0
PGNoYXIqPihtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxvY2F0b3IpKTsKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAppbmRleCBkNmJiNDNlLi5kM2ZlNzgyIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKKysrIGIvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCkBAIC02Myw4ICs2MywxMyBAQCBuYW1l
c3BhY2UgQVJNIHsKICAgICB9IFJlZ2lzdGVySUQ7CiAKICAgICB0eXBlZGVmIGVudW0gewotICAg
ICAgICBmcDAgLy9GSVhNRQorICAgICAgICBkMCwKKyAgICAgICAgZDEsCisgICAgICAgIGQyLAor
ICAgICAgICBkMywKKyAgICAgICAgU0QwID0gZDMKICAgICB9IEZQUmVnaXN0ZXJJRDsKKwogfSAv
LyBuYW1lc3BhY2UgQVJNCiAKICAgICBjbGFzcyBBUk1Bc3NlbWJsZXIgewpAQCAtMTE1LDEzICsx
MjAsMjEgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAgICBNVk4gPSAoMHhmIDw8IDIxKSwK
ICAgICAgICAgICAgIE1VTCA9IDB4MDAwMDAwOTAsCiAgICAgICAgICAgICBNVUxMID0gMHgwMGMw
MDA5MCwKKyAgICAgICAgICAgIEZBREREID0gMHgwZTMwMGIwMCwKKyAgICAgICAgICAgIEZTVUJE
ID0gMHgwZTMwMGI0MCwKKyAgICAgICAgICAgIEZNVUxEID0gMHgwZTIwMGIwMCwKKyAgICAgICAg
ICAgIEZDTVBEID0gMHgwZWI0MGI0MCwKICAgICAgICAgICAgIERUUiA9IDB4MDUwMDAwMDAsCiAg
ICAgICAgICAgICBMRFJIID0gMHgwMDEwMDA5MCwKICAgICAgICAgICAgIFNUUkggPSAweDAwMDAw
MDkwLAogICAgICAgICAgICAgU1RNREIgPSAweDA5MjAwMDAwLAogICAgICAgICAgICAgTERNSUEg
PSAweDA4YjAwMDAwLAorICAgICAgICAgICAgRkRUUiA9IDB4MGQwMDBiMDAsCiAgICAgICAgICAg
ICBCID0gMHgwYTAwMDAwMCwKICAgICAgICAgICAgIEJMID0gMHgwYjAwMDAwMCwKKyAgICAgICAg
ICAgIEZNU1IgPSAweDBlMDAwYTEwLAorICAgICAgICAgICAgRlNJVE9EID0gMHgwZWI4MGJjMCwK
KyAgICAgICAgICAgIEZNU1RBVCA9IDB4MGVmMWZhMTAsCiAjaWYgQVJNX0FSQ0hfVkVSU0lPTiA+
PSA1CiAgICAgICAgICAgICBDTFogPSAweDAxNmYwZjEwLAogICAgICAgICAgICAgQktQVCA9IDB4
ZTEyMDA3MCwKQEAgLTM2NCw2ICszNzcsMjYgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAg
ICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTVVMTCB8IFJOKHJk
aGkpIHwgUkQocmRsbykgfCBSUyhybikgfCBSTShybSkpOwogICAgICAgICB9CiAKKyAgICAgICAg
dm9pZCBmYWRkZF9yKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIENvbmRpdGlvbiBjYyA9IEFMKQor
ICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykg
fCBGQURERCwgZGQsIGRuLCBkbSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZzdWJkX3Io
aW50IGRkLCBpbnQgZG4sIGludCBkbSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAg
ICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEZTVUJELCBkZCwg
ZG4sIGRtKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm11bGRfcihpbnQgZGQsIGludCBk
biwgaW50IGRtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1p
dEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRk1VTEQsIGRkLCBkbiwgZG0pOworICAg
ICAgICB9CisKKyAgICAgICAgdm9pZCBmY21wZF9yKGludCBkZCwgaW50IGRtLCBDb25kaXRpb24g
Y2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJN
V29yZD4oY2MpIHwgRkNNUEQsIGRkLCAwLCBkbSk7CisgICAgICAgIH0KKwogICAgICAgICB2b2lk
IGxkcl9pbW0oaW50IHJkLCBBUk1Xb3JkIGltbSwgQ29uZGl0aW9uIGNjID0gQUwpCiAgICAgICAg
IHsKICAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludFdpdGhDb25zdGFudEludChzdGF0aWNfY2Fz
dDxBUk1Xb3JkPihjYykgfCBEVFIgfCBEVF9MT0FEIHwgRFRfVVAgfCBSTihBUk06OnBjKSB8IFJE
KHJkKSwgaW1tLCB0cnVlKTsKQEAgLTQxNCw2ICs0NDcsMTggQEAgbmFtZXNwYWNlIEFSTSB7CiAg
ICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBTVFJIIHwgSERU
X1VIIHwgRFRfVVAgfCBEVF9QUkUsIHJkLCBybiwgcm0pOwogICAgICAgICB9CiAKKyAgICAgICAg
dm9pZCBmZHRyX3UoYm9vbCBpc0xvYWQsIGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9wMiwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChvcDIgPD0gMHhm
Zik7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBGRFRS
IHwgRFRfVVAgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApLCByZCwgcmIsIG9wMik7CisgICAgICAg
IH0KKworICAgICAgICB2b2lkIGZkdHJfZChib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIsIEFS
TVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgQVNT
RVJUKG9wMiA8PSAweGZmKTsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdv
cmQ+KGNjKSB8IEZEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApLCByZCwgcmIsIG9wMik7Cisg
ICAgICAgIH0KKwogICAgICAgICB2b2lkIHB1c2hfcihpbnQgcmVnLCBDb25kaXRpb24gY2MgPSBB
TCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKEFSTVdvcmQocmVnKSA8PSAweGYpOwpA
QCAtNDM2LDYgKzQ4MSwyMSBAQCBuYW1lc3BhY2UgQVJNIHsKICAgICAgICAgICAgIGR0cl91KHRy
dWUsIHJlZywgQVJNOjpzcCwgMCwgY2MpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBmbXNy
X3IoaW50IGRkLCBpbnQgcm4sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAg
ICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBGTVNSLCBybiwgZGQsIDAp
OworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmc2l0b2RfcihpbnQgZGQsIGludCBkbSwgQ29u
ZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19j
YXN0PEFSTVdvcmQ+KGNjKSB8IEZTSVRPRCwgZGQsIDAsIGRtKTsKKyAgICAgICAgfQorCisgICAg
ICAgIHZvaWQgZm1zdGF0KENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAgICAg
ICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRk1TVEFUKTsKKyAg
ICAgICAgfQorCiAjaWYgQVJNX0FSQ0hfVkVSU0lPTiA+PSA1CiAgICAgICAgIHZvaWQgY2x6X3Io
aW50IHJkLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQogICAgICAgICB7CkBAIC02NTMsNiAr
NzEzLDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAKICAgICAgICAgdm9pZCBkYXRhVHJhbnNmZXIzMihi
b29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgaW50MzJfdCBv
ZmZzZXQpOwogICAgICAgICB2b2lkIGJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJl
Z2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGludCBz
Y2FsZSwgaW50MzJfdCBvZmZzZXQpOworICAgICAgICB2b2lkIGRvdWJsZVRyYW5zZmVyKGJvb2wg
aXNMb2FkLCBGUFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qgb2Zm
c2V0KTsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sIGhuYWRsZXJzCiAKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKaW5kZXggMjc4NzlhOS4uYjczYTIw
ZiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJN
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKQEAg
LTU3LDEyICs1NywxMSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGVudW0gRG91YmxlQ29uZGl0
aW9uIHsKLSAgICAgICAgRG91YmxlRXF1YWwsIC8vRklYTUUKLSAgICAgICAgRG91YmxlTm90RXF1
YWwsIC8vRklYTUUKLSAgICAgICAgRG91YmxlR3JlYXRlclRoYW4sIC8vRklYTUUKLSAgICAgICAg
RG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCAvL0ZJWE1FCi0gICAgICAgIERvdWJsZUxlc3NUaGFu
LCAvL0ZJWE1FCi0gICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgLy9GSVhNRQorICAgICAg
ICBEb3VibGVFcXVhbCA9IEFSTUFzc2VtYmxlcjo6RVEsCisgICAgICAgIERvdWJsZUdyZWF0ZXJU
aGFuID0gQVJNQXNzZW1ibGVyOjpHVCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFs
ID0gQVJNQXNzZW1ibGVyOjpHRSwKKyAgICAgICAgRG91YmxlTGVzc1RoYW4gPSBBUk1Bc3NlbWJs
ZXI6OkxULAorICAgICAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWwgPSBBUk1Bc3NlbWJsZXI6OkxF
LAogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJSZWdp
c3RlciA9IEFSTTo6c3A7CkBAIC02MjcsNiArNjI2LDcgQEAgcHVibGljOgogICAgIC8vIEZsb2F0
aW5nIHBvaW50IG9wZXJhdG9ycwogICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkgY29u
c3QKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYSBkeW5hbWljIHRlc3Q6IFZG
UCwgRlBBLCBvciBub3RoaW5nCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAgLTYz
Nyw3NCArNjM3LDU4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNpdEFk
ZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURf
UEFSQU0oYWRkcmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKLSAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRvdWJsZVRyYW5zZmVyKHRy
dWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOwogICAgIH0KIAogICAgIHZv
aWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJlc3Mp
CiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAgICAgICAgVU5VU0VEX1BBUkFN
KGFkZHJlc3MpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9hc3Nl
bWJsZXIuZG91YmxlVHJhbnNmZXIoZmFsc2UsIHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNzLm9m
ZnNldCk7CiAgICAgfQogCiAgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywgRlBS
ZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAgICAg
ICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgbV9hc3NlbWJsZXIuZmFkZGRfcihkZXN0LCBkZXN0LCBzcmMpOwogICAgIH0KIAogICAg
IHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0g
ICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOwotICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0g
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBsb2FkRG91YmxlKHNyYywgQVJN
OjpTRDApOworICAgICAgICBhZGREb3VibGUoQVJNOjpTRDAsIGRlc3QpOwogICAgIH0KIAogICAg
IHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQogICAg
IHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShkZXN0
KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmZz
dWJkX3IoZGVzdCwgZGVzdCwgc3JjKTsKICAgICB9CiAKICAgICB2b2lkIHN1YkRvdWJsZShBZGRy
ZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0o
c3JjKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JF
QUNIRUQoKTsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIEFSTTo6U0QwKTsKKyAgICAgICAgc3Vi
RG91YmxlKEFSTTo6U0QwLCBkZXN0KTsKICAgICB9CiAKICAgICB2b2lkIG11bERvdWJsZShGUFJl
Z2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNFRF9Q
QVJBTShzcmMpOwotICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0gICAgICAgIEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOworICAgICAgICBtX2Fzc2VtYmxlci5mbXVsZF9yKGRlc3QsIGRlc3QsIHNy
Yyk7CiAgICAgfQogCiAgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0ZXJJ
RCBkZXN0KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShkZXN0KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIGxv
YWREb3VibGUoc3JjLCBBUk06OlNEMCk7CisgICAgICAgIG11bERvdWJsZShBUk06OlNEMCwgZGVz
dCk7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklEIHNy
YywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsK
LSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQo
KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1zcl9yKGRlc3QsIHNyYyk7CisgICAgICAgIG1fYXNz
ZW1ibGVyLmZzaXRvZF9yKGRlc3QsIGRlc3QpOwogICAgIH0KIAogICAgIEp1bXAgYnJhbmNoRG91
YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3RlcklE
IHJpZ2h0KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOwotICAgICAgICBVTlVT
RURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAgIEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICBtX2Fz
c2VtYmxlci5mY21wZF9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1zdGF0
KCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChzdGF0aWNfY2FzdDxBUk1B
c3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCkpKTsKICAgICB9CiAKICAgICAvLyBUcnVuY2F0ZXMg
J3NyYycgdG8gYW4gaW50ZWdlciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4KZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaAppbmRleCBhZjQ2YzhlLi5mYjc4NTc3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklULmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yNzAsOSArMjcwLDkg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1N0
YWNrUHRyID0gQVJNOjpzcDsKICAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnTGlu
ayA9IEFSTTo6bHI7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1Qw
ID0gQVJNOjpmcDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQg
ZnBSZWdUMSA9IEFSTTo6ZnAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdp
c3RlcklEIGZwUmVnVDIgPSBBUk06OmZwMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gQVJNOjpkMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QxID0gQVJNOjpkMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVn
aXN0ZXJJRCBmcFJlZ1QyID0gQVJNOjpkMjsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1
cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33611</attachid>
            <date>2009-07-28 03:26:07 -0700</date>
            <delta_ts>2009-08-05 04:44:39 -0700</delta_ts>
            <desc>Add optimize call support for ARM JIT</desc>
            <filename>0003-Add-optimize-call-support-for-ARM-JIT.patch</filename>
            <type>text/plain</type>
            <size>6921</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBkMWFlOGVmZmQyNTkyNmQxM2E5NmJmODMzMzJlMjUxYjVlODZlNDRmIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAyOCBKdWwgMjAwOSAxMDoxMjoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBv
cHRpbWl6ZSBjYWxsIHN1cHBvcnQgZm9yIEFSTSBKSVQuCgpTaWduZWQtb2ZmLWJ5OiBHYWJvciBM
b2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KLS0tCiBKYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
ICAgICAgICAgICAgICAgICAgICB8ICAgMjIgKysrKysrKysrKysrKysrKysrKwogSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggfCAgICA3ICsrKysrLQogSmF2YVNj
cmlwdENvcmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAgICAgfCAgIDI5ICsrKysrKysrKysr
KysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgICAgICAgICAg
ICAgICB8ICAgIDMgKy0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAg
ICAgIHwgICAxNyArKysrKysrKysrKysrKysKIDUgZmlsZXMgY2hhbmdlZCwgNzYgaW5zZXJ0aW9u
cygrKSwgMiBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VM
b2cgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggYmMwN2I4Ni4uZWEwZGMzNSAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0No
YW5nZUxvZwpAQCAtMSwzICsxLDI1IEBACisyMDA5LTA3LTI4ICBHYWJvciBMb2tpICA8bG9raUBp
bmYudS1zemVnZWQuaHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIG9wdGltaXplIGNhbGwgc3VwcG9ydCBmb3IgQVJNIEpJVC4KKyAgICAgICAg
aHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CisKKyAgICAgICAg
Rm9yIHRpZ2h0bHkgY291cGxlZCBzZXF1ZW5jZXMgdGhlICdlbnN1cmVTcGFjZUZvcicgZnVuY3Rp
b24gaGFzCisgICAgICAgIGJlZW4gaW50cm9kdWNlZCB3aGljaCBkZXNjcmliZXMgaG93IG1hbnkg
aW5zdHJ1Y3Rpb25zIGFuZCBjb25zdGFudHMKKyAgICAgICAgYXJlIGluIHRoZSBkaWZmZXJlbnQg
c2VxdWVuY2VzLgorCisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmg6Cisg
ICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjplbnN1cmVTcGFjZSk6CisgICAgICAgIChK
U0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2FsbCk6CisgICAgICAgICogaml0L0pJVC5o
OgorICAgICAgICAoSlNDOjpKSVQ6Oik6CisgICAgICAgICogaml0L0pJVENhbGwuY3BwOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVPcENhbGwpOgorICAgICAgICAqIGppdC9KSVRJbmxpbmVN
ZXRob2RzLmg6CisgICAgICAgIChKU0M6OkpJVDo6ZW1pdE5ha2VkQ2FsbCk6CisgICAgICAgIChK
U0M6OkpJVDo6ZW5zdXJlU3BhY2VGb3IpOgorCiAyMDA5LTA3LTI4ICBab2x0YW4gSGVyY3plZyA8
emhlcmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1i
bGVyQVJNLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaApp
bmRleCBiNzNhMjBmLi5lMjdhMDliIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFj
cm9Bc3NlbWJsZXJBUk0uaApAQCAtNzA5LDkgKzcwOSwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAg
IHJldHVybiBzdGF0aWNfY2FzdDxBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAg
fQogCisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkK
KyAgICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RT
cGFjZSk7CisgICAgfQorCiAgICAgdm9pZCBwcmVwYXJlQ2FsbCgpCiAgICAgewotICAgICAgICBt
X2Fzc2VtYmxlci5lbnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJNV29y
ZCkpOworICAgICAgICBlbnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJN
V29yZCkpOwogCiAgICAgICAgIC8vIFMwIG1pZ2h0IGJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNz
aW5nCiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKEFSTTo6UzEsIEFSTTo6cGMsIEFSTUFzc2Vt
Ymxlcjo6T1AyX0lNTSB8IDB4NCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklU
LmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggZmI3ODU3Ny4uYjhiZWEwMiAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaApAQCAtMTgzLDYgKzE4MywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNp
bmcgTWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxl
cjo6TGFiZWw7CiAKKyAgICAgICAgLy8gTG9uZyBzZXF1ZW5jZXMgd2hpY2ggc2hvdWxkIGJlIHRp
Z2h0bHkgY291cGxlZAorICAgICAgICBlbnVtIExvbmdTZXF1ZW5jZXMgeworICAgICAgICAgICAg
c2VxdWVuY2VPcENhbGwsCisgICAgICAgIH07CisKICAgICAgICAgLy8gTk9URVM6CiAgICAgICAg
IC8vCiAgICAgICAgIC8vIHJlZ1QwIGhhcyB0d28gc3BlY2lhbCBtZWFuaW5ncy4gIFRoZSByZXR1
cm4gdmFsdWUgZnJvbSBhIHN0dWIKQEAgLTM1NSw2ICszNjAsMjkgQEAgbmFtZXNwYWNlIEpTQyB7
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvT2Jq
ID0gMTg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1By
b3RvU3RydWN0ID0gMjg7CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRo
b2RDaGVja1B1dEZ1bmN0aW9uID0gNDY7CisjZWxpZiBQTEFURk9STShBUk0pCisgICAgICAgIC8v
IFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0
Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9wdXRfYnlfaWQuCisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkU3RydWN0dXJlID0gMDsgLy8gRklYTUUKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAwOyAvLyBG
SVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFs
TG9hZCA9IDA7IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQ
dXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAwOyAvLyBGSVhNRQorICAgICAgICAvLyBUaGVzZSBh
cmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0g
c2VlIGNvbW1lbnQgb24gb3BfZ2V0X2J5X2lkLgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDA7IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDA7IC8vIEZJWE1F
CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2Fk
ID0gMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5
SWRFeHRlcm5hbExvYWQgPSAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMDsgLy8gRklYTUUKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSAwOyAvLyBGSVhN
RQorI2lmIEVOQUJMRShPUENPREVfU0FNUExJTkcpCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQg
cGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMDsgLy8gRklNWEUKKyNlbHNlCisgICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMDsg
Ly8gRklYTUUKKyNlbmRpZgorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0T3BD
YWxsQ29tcGFyZVRvSnVtcCA9IDEyOworCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRNZXRob2RDaGVja1Byb3RvT2JqID0gMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAwOyAvLyBGSVhNRQor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQdXRGdW5jdGlv
biA9IDA7IC8vIEZJWE1FCiAjZW5kaWYKIAogICAgIHB1YmxpYzoKQEAgLTcwMiw2ICs3MzAsNyBA
QCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2b2lkIGtpbGxMYXN0UmVzdWx0UmVnaXN0ZXIo
KTsKIAorICAgICAgICB2b2lkIGVuc3VyZVNwYWNlRm9yKExvbmdTZXF1ZW5jZXMgc2VxKTsKIAog
I2lmIEVOQUJMRShTQU1QTElOR19GTEFHUykKICAgICAgICAgdm9pZCBzZXRTYW1wbGluZ0ZsYWco
aW50MzJfdCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAgYi9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggYWJkYjVlZC4uMzEzOTYzMyAxMDA2
NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtMjE4LDYgKzIxOCw3IEBAIHZvaWQgSklUOjpjb21waWxl
T3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rpb24sIHVuc2ln
bmVkIGNhCiAgICAgLy8gVGhpcyBwbGFudHMgYSBjaGVjayBmb3IgYSBjYWNoZWQgSlNGdW5jdGlv
biB2YWx1ZSwgc28gd2UgY2FuIHBsYW50IGEgZmFzdCBsaW5rIHRvIHRoZSBjYWxsZWUuCiAgICAg
Ly8gVGhpcyBkZWxpYmVyYXRlbHkgbGVhdmVzIHRoZSBjYWxsZWUgaW4gZWN4LCB1c2VkIHdoZW4g
c2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUgYmVsb3cKICAgICBlbWl0R2V0VmlydHVhbFJlZ2lz
dGVyKGNhbGxlZSwgcmVnVDIpOworICAgIGVuc3VyZVNwYWNlRm9yKHNlcXVlbmNlT3BDYWxsKTsK
ICAgICBEYXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKICAgICBKdW1w
IGp1bXBUb1Nsb3cgPSBicmFuY2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QyLCBhZGRyZXNz
T2ZMaW5rZWRGdW5jdGlvbkNoZWNrLCBJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkp
KTsKICAgICBhZGRTbG93Q2FzZShqdW1wVG9TbG93KTsKQEAgLTI1MCw3ICsyNTEsNyBAQCB2b2lk
IEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24qIGluc3Ry
dWN0aW9uLCB1bnNpZ25lZCBjYQogCiAgICAgLy8gQ2FsbCB0byB0aGUgY2FsbGVlCiAgICAgbV9j
YWxsU3RydWN0dXJlU3R1YkNvbXBpbGF0aW9uSW5mb1tjYWxsTGlua0luZm9JbmRleF0uaG90UGF0
aE90aGVyID0gZW1pdE5ha2VkQ2FsbCgpOwotICAgIAorCiAgICAgaWYgKG9wY29kZUlEID09IG9w
X2NhbGxfZXZhbCkKICAgICAgICAgd2FzRXZhbC5saW5rKHRoaXMpOwogCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIGIvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaAppbmRleCA0M2YwNzdmLi4zYjMxMjdmIDEwMDY0NAotLS0gYS9K
YXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTE3Myw2ICsxNzMsNyBAQCBBTFdBWVNfSU5MSU5F
IEpJVDo6Q2FsbCBKSVQ6OmVtaXROYWtlZENhbGwoQ29kZVB0ciBmdW5jdGlvbikKICAgICBBU1NF
UlQobV9ieXRlY29kZUluZGV4ICE9ICh1bnNpZ25lZCktMSk7IC8vIFRoaXMgbWV0aG9kIHNob3Vs
ZCBvbmx5IGJlIGNhbGxlZCBkdXJpbmcgaG90L2NvbGQgcGF0aCBnZW5lcmF0aW9uLCBzbyB0aGF0
IG1fYnl0ZWNvZGVJbmRleCBpcyBzZXQuCiAKICAgICBDYWxsIG5ha2VkQ2FsbCA9IG5lYXJDYWxs
KCk7CisgICAgbmFrZWRDYWxsLmVuYWJsZUxhdGVQYXRjaCgpOwogICAgIG1fY2FsbHMuYXBwZW5k
KENhbGxSZWNvcmQobmFrZWRDYWxsLCBtX2J5dGVjb2RlSW5kZXgsIGZ1bmN0aW9uLmV4ZWN1dGFi
bGVBZGRyZXNzKCkpKTsKICAgICByZXR1cm4gbmFrZWRDYWxsOwogfQpAQCAtNDcxLDYgKzQ3Miwy
MiBAQCBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpzYW1wbGVDb2RlQmxvY2soQ29kZUJsb2NrKiBj
b2RlQmxvY2spCiB9CiAjZW5kaWYKICNlbmRpZgorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpl
bnN1cmVTcGFjZUZvcihMb25nU2VxdWVuY2VzIHNlcSkKK3sKKyNpZiBQTEFURk9STShBUk0pICYm
ICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgIHN3aXRjaCAoc2VxKSB7CisgICAgY2FzZSBzZXF1
ZW5jZU9wQ2FsbDoKKyAgICAgICAgZW5zdXJlU3BhY2UoMTIsIDgpOworICAgICAgICByZXR1cm47
CisgICAgZGVmYXVsdDoKKyAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgfQorI2Vs
c2UKKyAgICBVTlVTRURfUEFSQU0oc2VxKTsKKyNlbmRpZgorfQorCiB9CiAKICNlbmRpZiAvLyBF
TkFCTEUoSklUKQotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>33612</attachid>
            <date>2009-07-28 03:27:47 -0700</date>
            <delta_ts>2009-08-05 04:45:35 -0700</delta_ts>
            <desc>Add property access support for ARM JIT</desc>
            <filename>0004-Add-property-access-support-for-ARM-JIT.patch</filename>
            <type>text/plain</type>
            <size>12660</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSBkYjIzZjMzM2RlZWIyOWMwODJmZGE5NTVmMjhkZTMzNzQxYjJiYzg3IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAyOCBKdWwgMjAwOSAxMDoxMjoyOCArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBw
cm9wZXJ0eSBhY2Nlc3Mgc3VwcG9ydCBmb3IgQVJNIEpJVC4KClNpZ25lZC1vZmYtYnk6IEdhYm9y
IExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxv
ZyAgICAgICAgICAgICAgICAgICAgIHwgICAzMSArKysrKysrKysrKysrKysrKysrKysrKwogSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAgICAgfCAgIDI2ICsrKysrKysr
KysrKystLS0tLS0tCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggICAg
ICB8ICAgMTIgKysrKy0tLS0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTS5oIHwgICAgNSArKystCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAg
ICAgICAgICB8ICAgMzQgKysrKysrKysrKysrKystLS0tLS0tLS0tLQogSmF2YVNjcmlwdENvcmUv
aml0L0pJVElubGluZU1ldGhvZHMuaCAgICAgICAgfCAgIDEyICsrKysrKysrKwogSmF2YVNjcmlw
dENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCAgICAgfCAgICA3ICsrKysrCiA3IGZpbGVz
IGNoYW5nZWQsIDk2IGluc2VydGlvbnMoKyksIDMxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRl
eCBlYTBkYzM1Li4xNjM4MTc4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cK
KysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzQgQEAKKzIwMDktMDct
MjggIEdhYm9yIExva2kgIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgcHJvcGVydHkgYWNjZXNzIHN1cHBv
cnQgZm9yIEFSTSBKSVQuCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVn
LmNnaT9pZD0yNDk4NgorCisgICAgICAgIEVuc3VyZSBKSVRTdHViQ2FsbDo6YWRkQXJndW1lbnQq
IGZ1bmN0aW9ucyB0YWtlIHRoZSBzYW1lIG51bWJlciBvZgorICAgICAgICBtYWNoaW5lIGluc3Ry
dWN0aW9ucyBmb3IgZXZlcnkgcGFyYW1ldGVycyBhbmQgZG8gbm90IGNvbnZlcnQgTERSIGp1bXBz
CisgICAgICAgIGludG8gYnJhbmNoZXMgZHVyaW5nIGV4ZWN1dGFibGVDb3B5IGlmIHRoZSBsYXRl
UGF0Y2ggZmxhZyBpcyBzZXQuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNw
cDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjptb3ZlSW1tKToKKyAgICAgICAgKEpTQzo6
QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTUFz
c2VtYmxlci5oOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OkptcFNyYzo6Sm1wU3JjKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBTcmM6OmVuYWJsZUxhdGVQYXRjaCk6Cisg
ICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6bGlua0p1bXApOgorICAgICAgICAqIGFzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6
c3RvcmUzMik6CisgICAgICAgICogaml0L0pJVC5oOgorICAgICAgICAoSlNDOjpKSVQ6Oik6Cisg
ICAgICAgICogaml0L0pJVElubGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbnN1
cmVTcGFjZUZvcik6CisgICAgICAgICogaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcDoKKyAgICAg
ICAgKEpTQzo6SklUOjplbWl0X29wX21ldGhvZF9jaGVjayk6CisgICAgICAgIChKU0M6OkpJVDo6
Y29tcGlsZUdldEJ5SWRIb3RQYXRoKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJ
ZFNsb3dDYXNlKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0X29wX3B1dF9ieV9pZCk6CisgICAg
ICAgIChKU0M6OkpJVDo6ZW1pdFNsb3dfb3BfcHV0X2J5X2lkKToKKwogMjAwOS0wNy0yOCAgR2Fi
b3IgTG9raSAgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFz
c2VtYmxlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcApp
bmRleCBmNzU2OWJiLi4yZGRlZGQ3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJs
ZXIvQVJNQXNzZW1ibGVyLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNz
ZW1ibGVyLmNwcApAQCAtMjU3LDcgKzI1Nyw3IEBAIEFSTVdvcmQgQVJNQXNzZW1ibGVyOjpnZXRJ
bW0oQVJNV29yZCBpbW0sIGludCB0bXBSZWcsIGJvb2wgaW52ZXJ0KQogICAgIHJldHVybiB0bXBS
ZWc7CiB9CiAKLXZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVz
dCkKK3ZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVzdCwgYm9v
bCBsaW1pdFRvT25lSW5zdHJ1Y3Rpb24pCiB7CiAgICAgQVJNV29yZCB0bXA7CiAKQEAgLTI3NCwx
MSArMjc0LDEzIEBAIHZvaWQgQVJNQXNzZW1ibGVyOjptb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQg
ZGVzdCkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIC8vIERvIGl0IGJ5IDIgaW5zdHJ1
Y3Rpb24KLSAgICBpZiAoZ2VuSW50KGRlc3QsIGltbSwgdHJ1ZSkpCi0gICAgICAgIHJldHVybjsK
LSAgICBpZiAoZ2VuSW50KGRlc3QsIH5pbW0sIGZhbHNlKSkKLSAgICAgICAgcmV0dXJuOworICAg
IGlmICghbGltaXRUb09uZUluc3RydWN0aW9uKSB7CisgICAgICAgIC8vIERvIGl0IGJ5IDIgaW5z
dHJ1Y3Rpb25zCisgICAgICAgIGlmIChnZW5JbnQoZGVzdCwgaW1tLCB0cnVlKSkKKyAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgaWYgKGdlbkludChkZXN0LCB+aW1tLCBmYWxzZSkpCisgICAg
ICAgICAgICByZXR1cm47CisgICAgfQogCiAgICAgbGRyX2ltbShkZXN0LCBpbW0pOwogfQpAQCAt
MzcxLDkgKzM3MywxNSBAQCB2b2lkKiBBUk1Bc3NlbWJsZXI6OmV4ZWN1dGFibGVDb3B5KEV4ZWN1
dGFibGVQb29sKiBhbGxvY2F0b3IpCiAKICAgICBmb3IgKEp1bXBzOjpJdGVyYXRvciBpdGVyID0g
bV9qdW1wcy5iZWdpbigpOyBpdGVyICE9IG1fanVtcHMuZW5kKCk7ICsraXRlcikgewogICAgICAg
ICBBUk1Xb3JkKiBsZHJBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oZGF0YSArICpp
dGVyKTsKLSAgICAgICAgQVJNV29yZCogb2Zmc2V0ID0gZ2V0TGRySW1tQWRkcmVzcyhsZHJBZGRy
KTsKLSAgICAgICAgaWYgKCpvZmZzZXQgIT0gMHhmZmZmZmZmZikKLSAgICAgICAgICAgIGxpbmtC
cmFuY2goZGF0YSwgSm1wU3JjKCppdGVyKSwgZGF0YSArICpvZmZzZXQpOworICAgICAgICBBUk1X
b3JkIG9mZnNldCA9ICpnZXRMZHJJbW1BZGRyZXNzKGxkckFkZHIpOworICAgICAgICBpZiAob2Zm
c2V0ICE9IDB4ZmZmZmZmZmYpIHsKKyAgICAgICAgICAgIEptcFNyYyBqbXBTcmMoKml0ZXIpOwor
ICAgICAgICAgICAgaWYgKG9mZnNldCAmIDB4MSkgeworICAgICAgICAgICAgICAgIG9mZnNldCA9
IG9mZnNldCAmIH4weDE7CisgICAgICAgICAgICAgICAgam1wU3JjLmVuYWJsZUxhdGVQYXRjaCgp
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgbGlua0JyYW5jaChkYXRhLCBqbXBTcmMsIGRh
dGEgKyBvZmZzZXQpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGE7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKaW5kZXggZDNmZTc4Mi4uZjM3MmM5NiAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMTgwLDIwICsxODAs
MjAgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIEptcFNy
YygpCiAgICAgICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICAgICAsIG1f
bGF0ZVBhdGNoKGZhbHNlKQorICAgICAgICAgICAgICAgICwgbV9sYXRlUGF0Y2goMCkKICAgICAg
ICAgICAgIHsKICAgICAgICAgICAgIH0KIAotICAgICAgICAgICAgdm9pZCBlbmFibGVMYXRlUGF0
Y2goKSB7IG1fbGF0ZVBhdGNoID0gdHJ1ZTsgfQorICAgICAgICAgICAgdm9pZCBlbmFibGVMYXRl
UGF0Y2goKSB7IG1fbGF0ZVBhdGNoID0gMTsgfQogICAgICAgICBwcml2YXRlOgogICAgICAgICAg
ICAgSm1wU3JjKGludCBvZmZzZXQpCiAgICAgICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQp
Ci0gICAgICAgICAgICAgICAgLCBtX2xhdGVQYXRjaChmYWxzZSkKKyAgICAgICAgICAgICAgICAs
IG1fbGF0ZVBhdGNoKDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAgICB9CiAKICAgICAgICAg
ICAgIGludCBtX29mZnNldCA6IDMxOwotICAgICAgICAgICAgaW50IG1fbGF0ZVBhdGNoIDogMTsK
KyAgICAgICAgICAgIHVuc2lnbmVkIGludCBtX2xhdGVQYXRjaCA6IDE7CiAgICAgICAgIH07CiAK
ICAgICAgICAgY2xhc3MgSm1wRHN0IHsKQEAgLTY0NSw3ICs2NDUsNyBAQCBuYW1lc3BhY2UgQVJN
IHsKICAgICAgICAgdm9pZCBsaW5rSnVtcChKbXBTcmMgZnJvbSwgSm1wRHN0IHRvKQogICAgICAg
ICB7CiAgICAgICAgICAgICBBUk1Xb3JkKiBpbnNuID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3Jk
Kj4obV9idWZmZXIuZGF0YSgpKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsK
LSAgICAgICAgICAgICpnZXRMZHJJbW1BZGRyZXNzKGluc24sIG1fYnVmZmVyLnBvb2xBZGRyZXNz
KCkpID0gc3RhdGljX2Nhc3Q8QVJNV29yZD4odG8ubV9vZmZzZXQpOworICAgICAgICAgICAgKmdl
dExkckltbUFkZHJlc3MoaW5zbiwgbV9idWZmZXIucG9vbEFkZHJlc3MoKSkgPSBzdGF0aWNfY2Fz
dDxBUk1Xb3JkPih0by5tX29mZnNldCkgfCBmcm9tLm1fbGF0ZVBhdGNoOwogICAgICAgICB9CiAK
ICAgICAgICAgc3RhdGljIHZvaWQgbGlua0p1bXAodm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZv
aWQqIHRvKQpAQCAtNzA3LDcgKzcwNyw3IEBAIG5hbWVzcGFjZSBBUk0gewogCiAgICAgICAgIHN0
YXRpYyBBUk1Xb3JkIGdldE9wMihBUk1Xb3JkIGltbSk7CiAgICAgICAgIEFSTVdvcmQgZ2V0SW1t
KEFSTVdvcmQgaW1tLCBpbnQgdG1wUmVnLCBib29sIGludmVydCA9IGZhbHNlKTsKLSAgICAgICAg
dm9pZCBtb3ZlSW1tKEFSTVdvcmQgaW1tLCBpbnQgZGVzdCk7CisgICAgICAgIHZvaWQgbW92ZUlt
bShBUk1Xb3JkIGltbSwgaW50IGRlc3QsIGJvb2wgbGltaXRUb09uZUluc3RydWN0aW9uID0gZmFs
c2UpOwogCiAgICAgICAgIC8vIE1lbW9yeSBsb2FkL3N0b3JlIGhlbHBlcnMKIApkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAppbmRleCBlMjdhMDliLi44NWRl
NDIwIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJB
Uk0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaApA
QCAtMjQyLDcgKzI0MiwxMCBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMzIoSW1tMzIgaW1t
LCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAgIG1vdmUoaW1tLCBBUk06
OlMxKTsKKyAgICAgICAgaWYgKGFkZHJlc3MuYmFzZSA9PSBzdGFja1BvaW50ZXJSZWdpc3RlcikK
KyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0oaW1tLm1fdmFsdWUsIEFSTTo6UzEsIHRy
dWUpOworICAgICAgICBlbHNlCisgICAgICAgICAgICBtb3ZlKGltbSwgQVJNOjpTMSk7CiAgICAg
ICAgIHN0b3JlMzIoQVJNOjpTMSwgYWRkcmVzcyk7CiAgICAgfQogCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggYjhi
ZWEwMi4uODFiYTI2OCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtMTg2LDYgKzE4NiwxMCBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgLy8gTG9uZyBzZXF1ZW5jZXMgd2hpY2ggc2hvdWxkIGJlIHRpZ2h0bHkg
Y291cGxlZAogICAgICAgICBlbnVtIExvbmdTZXF1ZW5jZXMgewogICAgICAgICAgICAgc2VxdWVu
Y2VPcENhbGwsCisgICAgICAgICAgICBzZXF1ZW5jZU1ldGhvZENoZWNrLAorICAgICAgICAgICAg
c2VxdWVuY2VHZXRCeUlkSG90UGF0aCwKKyAgICAgICAgICAgIHNlcXVlbmNlR2V0QnlJZFNsb3dD
YXNlLAorICAgICAgICAgICAgc2VxdWVuY2VQdXRCeUlkLAogICAgICAgICB9OwogCiAgICAgICAg
IC8vIE5PVEVTOgpAQCAtMzYyLDI3ICszNjYsMjcgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gNDY7
CiAjZWxpZiBQTEFURk9STShBUk0pCiAgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVj
aWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBv
cF9wdXRfYnlfaWQuCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlk
U3RydWN0dXJlID0gMDsgLy8gRklYTUUKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9m
ZnNldFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDA7IC8vIEZJWE1FCi0gICAg
ICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQg
PSAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJ
ZFN0cnVjdHVyZSA9IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRC
eUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hMZW5n
dGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDIwOwogICAgICAgICAvLyBUaGVzZSBh
cmNoaXRlY3R1cmUgc3BlY2lmaWMgdmFsdWUgYXJlIHVzZWQgdG8gZW5hYmxlIHBhdGNoaW5nIC0g
c2VlIGNvbW1lbnQgb24gb3BfZ2V0X2J5X2lkLgotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9IDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9TbG93Q2FzZSA9IDA7IC8vIEZJWE1F
Ci0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkRXh0ZXJuYWxMb2Fk
ID0gMDsgLy8gRklYTUUKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdldEJ5
SWRFeHRlcm5hbExvYWQgPSAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMDsgLy8gRklYTUUKLSAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSAwOyAvLyBGSVhN
RQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFN0cnVjdHVyZSA9
IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkQnJhbmNoVG9T
bG93Q2FzZSA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3Ro
R2V0QnlJZEV4dGVybmFsTG9hZCA9IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hP
ZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQgPSAyODsKICNpZiBFTkFCTEUoT1BDT0RF
X1NBTVBMSU5HKQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNs
b3dDYXNlQ2FsbCA9IDA7IC8vIEZJTVhFCisgICAgICAgICNlcnJvciAiT1BDT0RFX1NBTVBMSU5H
IGlzIG5vdCB5ZXQgc3VwcG9ydGVkIgogI2Vsc2UKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDM2OwogI2VuZGlm
CiAgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1w
ID0gMTI7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNr
UHJvdG9PYmogPSAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0TWV0aG9kQ2hlY2tQcm90b1N0cnVjdCA9IDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRNZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMDsgLy8gRklYTUUK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmog
PSAxMjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9TdHJ1Y3QgPSAyMDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhv
ZENoZWNrUHV0RnVuY3Rpb24gPSAzMjsKICNlbmRpZgogCiAgICAgcHVibGljOgpkaWZmIC0tZ2l0
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggM2IzMTI3Zi4uZGU2OGI3NSAxMDA2NDQKLS0t
IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2NyaXB0
Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC00ODAsNiArNDgwLDE4IEBAIEFMV0FZU19J
TkxJTkUgdm9pZCBKSVQ6OmVuc3VyZVNwYWNlRm9yKExvbmdTZXF1ZW5jZXMgc2VxKQogICAgIGNh
c2Ugc2VxdWVuY2VPcENhbGw6CiAgICAgICAgIGVuc3VyZVNwYWNlKDEyLCA4KTsKICAgICAgICAg
cmV0dXJuOworICAgIGNhc2Ugc2VxdWVuY2VNZXRob2RDaGVjazoKKyAgICAgICAgZW5zdXJlU3Bh
Y2UoNTIsIDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ugc2VxdWVuY2VHZXRCeUlkSG90
UGF0aDoKKyAgICAgICAgZW5zdXJlU3BhY2UoMjgsIDEyKTsKKyAgICAgICAgcmV0dXJuOworICAg
IGNhc2Ugc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2U6CisgICAgICAgIGVuc3VyZVNwYWNlKDM2LCA4
KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ugc2VxdWVuY2VQdXRCeUlkOgorICAgICAgICBl
bnN1cmVTcGFjZSgyOCwgMTIpOworICAgICAgICByZXR1cm47CiAgICAgZGVmYXVsdDoKICAgICAg
ICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9w
ZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYzFlNWMyOS4uMjFlYWI1OCAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0yMTMsNiArMjEzLDggQEAgdm9pZCBKSVQ6OmVt
aXRfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAgICAg
Ly8gRG8gdGhlIG1ldGhvZCBjaGVjayAtIGNoZWNrIHRoZSBvYmplY3QgJiBpdHMgcHJvdG90eXBl
J3Mgc3RydWN0dXJlIGlubGluZSAodGhpcyBpcyB0aGUgY29tbW9uIGNhc2UpLgogICAgIG1fbWV0
aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyht
X3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCkpOwogICAgIE1ldGhvZENhbGxDb21waWxh
dGlvbkluZm8mIGluZm8gPSBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpOworCisg
ICAgZW5zdXJlU3BhY2VGb3Ioc2VxdWVuY2VNZXRob2RDaGVjayk7CiAgICAgSnVtcCBub3RDZWxs
ID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CiAgICAgSnVtcCBzdHJ1Y3R1cmVDaGVjayA9
IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVzcyhyZWdUMCwgT0JKRUNUX09GRlNF
VE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgaW5mby5zdHJ1Y3R1cmVUb0NvbXBhcmUsIEltbVB0
cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkp
OwogICAgIERhdGFMYWJlbFB0ciBwcm90b1N0cnVjdHVyZVRvQ29tcGFyZSwgcHJvdG9PYmogPSBt
b3ZlV2l0aFBhdGNoKEltbVB0cigwKSwgcmVnVDEpOwpAQCAtMjgzLDYgKzI4NSw3IEBAIHZvaWQg
SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50LCBpbnQgYmFzZVZSZWcsIElkZW50aWZpZXIq
LCB1bnNpZ25lZCBwcm9wZXJ0CiAKICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVn
VDAsIGJhc2VWUmVnKTsKIAorICAgIGVuc3VyZVNwYWNlRm9yKHNlcXVlbmNlR2V0QnlJZEhvdFBh
dGgpOwogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJl
Z2luID0gaG90UGF0aEJlZ2luOwogCkBAIC0zMjQsNiArMzI3LDcgQEAgdm9pZCBKSVQ6OmNvbXBp
bGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRpZmll
ciogaWRlbnQKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAg
ICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgZW5zdXJlU3BhY2VGb3Ioc2VxdWVuY2VHZXRC
eUlkU2xvd0Nhc2UpOwogI2lmbmRlZiBOREVCVUcKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRo
aXMpOwogI2VuZGlmCkBAIC0zMzEsNiArMzM1LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlk
U2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciogaWRlbnQK
ICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChyZWdUMCk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1l
bnQoSW1tUHRyKGlkZW50KSk7CiAgICAgQ2FsbCBjYWxsID0gc3R1YkNhbGwuY2FsbChyZXN1bHRW
UmVnKTsKKyAgICBjYWxsLmVuYWJsZUxhdGVQYXRjaCgpOwogCiAgICAgQVNTRVJUKGRpZmZlcmVu
Y2VCZXR3ZWVuKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dD
YXNlQ2FsbCk7CiAKQEAgLTM1NCw2ICszNTksNyBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlf
aWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBKdW1wIHRvIGEgc2xv
dyBjYXNlIGlmIGVpdGhlciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0
aGUgU3RydWN0dXJlIGRvZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpT
Q2VsbChyZWdUMCwgYmFzZVZSZWcpOwogCisgICAgZW5zdXJlU3BhY2VGb3Ioc2VxdWVuY2VQdXRC
eUlkKTsKICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhpcyk7CiAgICAgbV9wcm9wZXJ0eUFjY2Vz
c0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0luc3RydWN0aW9uSW5kZXhdLmhvdFBhdGhC
ZWdpbiA9IGhvdFBhdGhCZWdpbjsKIApAQCAtMzg3LDYgKzM5Myw3IEBAIHZvaWQgSklUOjplbWl0
U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9y
PFNsb3dDYXNlCiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CiAgICAg
c3R1YkNhbGwuYWRkQXJndW1lbnQocmVnVDEpOwogICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNh
bGwoKTsKKyAgICBjYWxsLmVuYWJsZUxhdGVQYXRjaCgpOwogCiAgICAgLy8gVHJhY2sgdGhlIGxv
Y2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlzIHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGlu
Zm9ybWF0aW9uLgogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5jYWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotLSAKMS42
LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34127</attachid>
            <date>2009-08-05 04:42:34 -0700</date>
            <delta_ts>2009-08-11 23:16:35 -0700</delta_ts>
            <desc>Add generic ARM-JIT support using ARMAssembler v3</desc>
            <filename>0001-Add-JIT-support-for-generic-ARM-port-without-optimiz.patch</filename>
            <type>text/plain</type>
            <size>17825</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSA3NzdjMmJjN2IzYTc1YTBiYWU1YjY2YWFmYzVlNjY2ODJlYzEzZDRlIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDUgQXVnIDIwMDkgMTA6MDA6MDAgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBBZGQgSklUIHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBvcnQgd2l0aG91dCBvcHRpbWl6YXRp
b25zLgoKU2lnbmVkLW9mZi1ieTogWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdl
ZC5odT4KU2lnbmVkLW9mZi1ieTogR2Fib3IgTG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0t
LQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgICAgICB8ICAg
MzQgKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmNwcCAgICAgICAgIHwgICAgMiArLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0
TWFjcm9Bc3NlbWJsZXIuaCB8ICAgIDYgKy0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNy
b0Fzc2VtYmxlckFSTS5oICAgICAgfCAgIDM3ICsrKysrKysrKysrLS0tLS0KIEphdmFTY3JpcHRD
b3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oICAgICAgICAgICAgICAgfCAgICAyICstCiBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICAgICAgICAgICAgIHwgICAyNSArKysrKysr
KysrKwogSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCAgICAgICAgICAgICB8
ICAgIDUgKystCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAgICAgICAgICAgICAg
ICAgIHwgICA0NyArKysrKysrKysrKysrKysrKysrKy0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRT
dHVicy5jcHAgICAgICAgICAgICAgICAgICAgfCAgIDQzICsrKysrKysrKysrKysrKysrKysKIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVRTdHVicy5oICAgICAgICAgICAgICAgICAgICAgfCAgIDIxICsr
KysrKysrKwogSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggICAgICAgICAgICAgICAgICAg
ICB8ICAgIDIgKy0KIDExIGZpbGVzIGNoYW5nZWQsIDIwMyBpbnNlcnRpb25zKCspLCAyMSBkZWxl
dGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2Ny
aXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggNjNmOWYxYy4uMzc2YTUwMSAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAt
MSwzICsxLDM3IEBACisyMDA5LTA4LTA1ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQGluZi51
LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgSklUIHN1cHBvcnQgZm9yIGdlbmVyaWMgQVJNIHBvcnQgd2l0aG91dCBvcHRpbWl6
YXRpb25zLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9
MjQ5ODYKKworICAgICAgICBBbGwgSklUIG9wdGltaXphdGlvbnMgYXJlIGRpc2FibGVkLgorCisg
ICAgICAgIFNpZ25lZCBvZmYgYnkgWm9sdGFuIEhlcmN6ZWcgPHpoZXJjemVnQGluZi51LXN6ZWdl
ZC5odT4KKyAgICAgICAgU2lnbmVkIG9mZiBieSBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdl
ZC5odT4KKworICAgICAgICAqIGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwOgorICAgICAgICAo
SlNDOjpBUk1Bc3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyMzIpOgorICAgICAgICAqIGFzc2Vt
Ymxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFic3RyYWN0TWFj
cm9Bc3NlbWJsZXI6OkltbTMyOjpJbW0zMik6CisgICAgICAgICogYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNLmg6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdG9yZTMyKToK
KyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om1vdmUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxl
ckFSTTo6YWRkMzIpOgorICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6c3ViMzIpOgor
ICAgICAgICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6bG9hZDMyKToKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjpnZXRCeXRlY29kZUlu
ZGV4KToKKyAgICAgICAgKiBqaXQvSklULmg6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UpOgorICAg
ICAgICAqIGppdC9KSVRPcGNvZGVzLmNwcDoKKyAgICAgICAgKiBqaXQvSklUU3R1YnMuY3BwOgor
ICAgICAgICAqIGppdC9KSVRTdHVicy5oOgorICAgICAgICAoSlNDOjpKSVRTdGFja0ZyYW1lOjpy
ZXR1cm5BZGRyZXNzU2xvdCk6CisgICAgICAgICogd3RmL1BsYXRmb3JtLmg6CisKIDIwMDktMDgt
MDQgIEdhdmluIEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAg
IFJ1YmJlciBTdGFtcGVkIGJ5IE9pdmVyIEh1bnQuCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9B
Uk1Bc3NlbWJsZXIuY3BwCmluZGV4IGRhZmM0ODIuLjE3ZDMxNDcgMTAwNjQ0Ci0tLSBhL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCisrKyBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwCkBAIC0zMjksNyArMzI5LDcgQEAgdm9pZCBBUk1B
c3NlbWJsZXI6OmJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQsIFJlZ2lzdGVySUQgc3Jj
RHN0LCBSZWdpc3RlckkKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIG1vdmVJbW0ob2Zm
c2V0LCBBUk06OlMwKTsKKyAgICBsZHJfdW5faW1tKEFSTTo6UzAsIG9mZnNldCk7CiAgICAgYWRk
X3IoQVJNOjpTMCwgQVJNOjpTMCwgb3AyKTsKICAgICBkdHJfdXIoaXNMb2FkLCBzcmNEc3QsIGJh
c2UsIEFSTTo6UzApOwogfQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fi
c3RyYWN0TWFjcm9Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFj
dE1hY3JvQXNzZW1ibGVyLmgKaW5kZXggZDZjZDJiOS4uZjkyN2VkMiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAorKysgYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oCkBAIC0xNzMsNyAr
MTczLDcgQEAgcHVibGljOgogICAgIHN0cnVjdCBJbW0zMiB7CiAgICAgICAgIGV4cGxpY2l0IElt
bTMyKGludDMyX3QgdmFsdWUpCiAgICAgICAgICAgICA6IG1fdmFsdWUodmFsdWUpCi0jaWYgUExB
VEZPUk1fQVJNX0FSQ0goNykKKyNpZiBQTEFURk9STShBUk0pCiAgICAgICAgICAgICAsIG1faXNQ
b2ludGVyKGZhbHNlKQogI2VuZGlmCiAgICAgICAgIHsKQEAgLTE4Miw3ICsxODIsNyBAQCBwdWJs
aWM6CiAjaWYgIVBMQVRGT1JNKFg4Nl82NCkKICAgICAgICAgZXhwbGljaXQgSW1tMzIoSW1tUHRy
IHB0cikKICAgICAgICAgICAgIDogbV92YWx1ZShwdHIuYXNJbnRwdHIoKSkKLSNpZiBQTEFURk9S
TV9BUk1fQVJDSCg3KQorI2lmIFBMQVRGT1JNKEFSTSkKICAgICAgICAgICAgICwgbV9pc1BvaW50
ZXIodHJ1ZSkKICNlbmRpZgogICAgICAgICB7CkBAIC0xOTAsNyArMTkwLDcgQEAgcHVibGljOgog
I2VuZGlmCiAKICAgICAgICAgaW50MzJfdCBtX3ZhbHVlOwotI2lmIFBMQVRGT1JNX0FSTV9BUkNI
KDcpCisjaWYgUExBVEZPUk0oQVJNKQogICAgICAgICAvLyBXZSByZWx5IG9uIGJlaW5nIGFibGUg
dG8gcmVnZW5lcmF0ZSBjb2RlIHRvIHJlY292ZXIgZXhjZXB0aW9uIGhhbmRsaW5nCiAgICAgICAg
IC8vIGluZm9ybWF0aW9uLiAgU2luY2UgQVJNdjcgc3VwcG9ydHMgMTYtYml0IGltbWVkaWF0ZXMg
dGhlcmUgaXMgYSBkYW5nZXIKICAgICAgICAgLy8gdGhhdCBpZiBwb2ludGVyIHZhbHVlcyBjaGFu
Z2UgdGhlIGxheW91dCBvZiB0aGUgZ2VuZXJhdGVkIGNvZGUgd2lsbCBjaGFuZ2UuCmRpZmYgLS1n
aXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaCBiL0phdmFT
Y3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oCmluZGV4IDI3ODc5YTkuLjA4
NGU1ZTUgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxl
ckFSTS5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5o
CkBAIC0yNDMsMjAgKzI0MywyNiBAQCBwdWJsaWM6CiAKICAgICB2b2lkIHN0b3JlMzIoSW1tMzIg
aW1tLCBJbXBsaWNpdEFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAgICAgIG1vdmUoaW1tLCBB
Uk06OlMxKTsKKyAgICAgICAgaWYgKGltbS5tX2lzUG9pbnRlcikKKyAgICAgICAgICAgIG1fYXNz
ZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpTMSwgaW1tLm1fdmFsdWUpOworICAgICAgICBlbHNlCisg
ICAgICAgICAgICBtb3ZlKGltbSwgQVJNOjpTMSk7CiAgICAgICAgIHN0b3JlMzIoQVJNOjpTMSwg
YWRkcmVzcyk7CiAgICAgfQogCiAgICAgdm9pZCBzdG9yZTMyKFJlZ2lzdGVySUQgc3JjLCB2b2lk
KiBhZGRyZXNzKQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJl
dF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRyX3VuX2ltbShBUk06OlMwLCByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UoZmFsc2UsIHNyYywgQVJNOjpTMCwgMCk7CiAgICAg
fQogCiAgICAgdm9pZCBzdG9yZTMyKEltbTMyIGltbSwgdm9pZCogYWRkcmVzcykKICAgICB7Ci0g
ICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRy
ZXNzKSwgQVJNOjpTMCk7Ci0gICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0oaW1tLm1fdmFsdWUs
IEFSTTo6UzEpOworICAgICAgICBtX2Fzc2VtYmxlci5sZHJfdW5faW1tKEFSTTo6UzAsIHJlaW50
ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcykpOworICAgICAgICBpZiAoaW1tLm1faXNQb2lu
dGVyKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyX3VuX2ltbShBUk06OlMxLCBpbW0ubV92
YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0oaW1t
Lm1fdmFsdWUsIEFSTTo6UzEpOwogICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShmYWxzZSwgQVJN
OjpTMSwgQVJNOjpTMCwgMCk7CiAgICAgfQogCkBAIC0yODQsNyArMjkwLDEwIEBAIHB1YmxpYzoK
IAogICAgIHZvaWQgbW92ZShJbW0zMiBpbW0sIFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0oaW1tLm1fdmFsdWUsIGRlc3QpOworICAgICAgICBpZiAo
aW1tLm1faXNQb2ludGVyKQorICAgICAgICAgICAgbV9hc3NlbWJsZXIubGRyX3VuX2ltbShkZXN0
LCBpbW0ubV92YWx1ZSk7CisgICAgICAgIGVsc2UKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLm1v
dmVJbW0oaW1tLm1fdmFsdWUsIGRlc3QpOwogICAgIH0KIAogICAgIHZvaWQgbW92ZShSZWdpc3Rl
cklEIHNyYywgUmVnaXN0ZXJJRCBkZXN0KQpAQCAtMjk0LDcgKzMwMyw3IEBAIHB1YmxpYzoKIAog
ICAgIHZvaWQgbW92ZShJbW1QdHIgaW1tLCBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAg
ICBtX2Fzc2VtYmxlci5tb3ZfcihkZXN0LCBtX2Fzc2VtYmxlci5nZXRJbW0ocmVpbnRlcnByZXRf
Y2FzdDxBUk1Xb3JkPihpbW0ubV92YWx1ZSksIEFSTTo6UzApKTsKKyAgICAgICAgbW92ZShJbW0z
MihpbW0pLCBkZXN0KTsKICAgICB9CiAKICAgICB2b2lkIHN3YXAoUmVnaXN0ZXJJRCByZWcxLCBS
ZWdpc3RlcklEIHJlZzIpCkBAIC0zMjQsNyArMzMzLDExIEBAIHB1YmxpYzoKIAogICAgIEp1bXAg
YnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgSW1tMzIgcmlnaHQpCiAg
ICAgewotICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCBtX2Fzc2VtYmxlci5nZXRJbW0o
cmlnaHQubV92YWx1ZSwgQVJNOjpTMCkpOworICAgICAgICBpZiAocmlnaHQubV9pc1BvaW50ZXIp
IHsKKyAgICAgICAgICAgIG1fYXNzZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpTMCwgcmlnaHQubV92
YWx1ZSk7CisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCBBUk06OlMwKTsKKyAg
ICAgICAgfSBlbHNlCisgICAgICAgICAgICBtX2Fzc2VtYmxlci5jbXBfcihsZWZ0LCBtX2Fzc2Vt
Ymxlci5nZXRJbW0ocmlnaHQubV92YWx1ZSwgQVJNOjpTMCkpOwogICAgICAgICByZXR1cm4gSnVt
cChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpKSk7CiAgICAgfQogCkBAIC01Mzgs
MjUgKzU1MSwyNSBAQCBwdWJsaWM6CiAKICAgICB2b2lkIGFkZDMyKEltbTMyIGltbSwgQWJzb2x1
dGVBZGRyZXNzIGFkZHJlc3MpCiAgICAgewotICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJl
aW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciksIEFSTTo6UzEpOworICAgICAg
ICBtX2Fzc2VtYmxlci5sZHJfdW5faW1tKEFSTTo6UzEsIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29y
ZD4oYWRkcmVzcy5tX3B0cikpOwogICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdSh0cnVlLCBBUk06
OlMxLCBBUk06OlMxLCAwKTsKICAgICAgICAgYWRkMzIoaW1tLCBBUk06OlMxKTsKLSAgICAgICAg
bV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9w
dHIpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIubGRyX3VuX2ltbShBUk06OlMwLCBy
ZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MubV9wdHIpKTsKICAgICAgICAgbV9hc3Nl
bWJsZXIuZHRyX3UoZmFsc2UsIEFSTTo6UzEsIEFSTTo6UzAsIDApOwogICAgIH0KIAogICAgIHZv
aWQgc3ViMzIoSW1tMzIgaW1tLCBBYnNvbHV0ZUFkZHJlc3MgYWRkcmVzcykKICAgICB7Ci0gICAg
ICAgIG1fYXNzZW1ibGVyLm1vdmVJbW0ocmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNz
Lm1fcHRyKSwgQVJNOjpTMSk7CisgICAgICAgIG1fYXNzZW1ibGVyLmxkcl91bl9pbW0oQVJNOjpT
MSwgcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkPihhZGRyZXNzLm1fcHRyKSk7CiAgICAgICAgIG1f
YXNzZW1ibGVyLmR0cl91KHRydWUsIEFSTTo6UzEsIEFSTTo6UzEsIDApOwogICAgICAgICBzdWIz
MihpbW0sIEFSTTo6UzEpOwotICAgICAgICBtX2Fzc2VtYmxlci5tb3ZlSW1tKHJlaW50ZXJwcmV0
X2Nhc3Q8QVJNV29yZD4oYWRkcmVzcy5tX3B0ciksIEFSTTo6UzApOworICAgICAgICBtX2Fzc2Vt
Ymxlci5sZHJfdW5faW1tKEFSTTo6UzAsIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZD4oYWRkcmVz
cy5tX3B0cikpOwogICAgICAgICBtX2Fzc2VtYmxlci5kdHJfdShmYWxzZSwgQVJNOjpTMSwgQVJN
OjpTMCwgMCk7CiAgICAgfQogCiAgICAgdm9pZCBsb2FkMzIodm9pZCogYWRkcmVzcywgUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgbV9hc3NlbWJsZXIubW92ZUltbShyZWludGVycHJl
dF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpLCBBUk06OlMwKTsKKyAgICAgICAgbV9hc3NlbWJsZXIu
bGRyX3VuX2ltbShBUk06OlMwLCByZWludGVycHJldF9jYXN0PEFSTVdvcmQ+KGFkZHJlc3MpKTsK
ICAgICAgICAgbV9hc3NlbWJsZXIuZHRyX3UodHJ1ZSwgZGVzdCwgQVJNOjpTMCwgMCk7CiAgICAg
fQogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaCBiL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCmluZGV4IDg1YTdjODIuLjlmNzUyMTUg
MTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2J5dGVjb2RlL0NvZGVCbG9jay5oCkBAIC0zMDUsNyArMzA1LDcgQEAgbmFt
ZXNwYWNlIEpTQyB7CiAgICAgICAgIHVuc2lnbmVkIGdldEJ5dGVjb2RlSW5kZXgoQ2FsbEZyYW1l
KiBjYWxsRnJhbWUsIFJldHVybkFkZHJlc3NQdHIgcmV0dXJuQWRkcmVzcykKICAgICAgICAgewog
ICAgICAgICAgICAgcmVwYXJzZUZvckV4Y2VwdGlvbkluZm9JZk5lY2Vzc2FyeShjYWxsRnJhbWUp
OwotICAgICAgICAgICAgcmV0dXJuIGJpbmFyeUNob3A8Q2FsbFJldHVybk9mZnNldFRvQnl0ZWNv
ZGVJbmRleCwgdW5zaWduZWQsIGdldENhbGxSZXR1cm5PZmZzZXQ+KG1fZXhjZXB0aW9uSW5mby0+
bV9jYWxsUmV0dXJuSW5kZXhWZWN0b3IuYmVnaW4oKSwgbV9leGNlcHRpb25JbmZvLT5tX2NhbGxS
ZXR1cm5JbmRleFZlY3Rvci5zaXplKCksIG93bmVyTm9kZSgpLT5nZW5lcmF0ZWRKSVRDb2RlKCku
b2Zmc2V0T2YocmV0dXJuQWRkcmVzcy52YWx1ZSgpKSktPmJ5dGVjb2RlSW5kZXg7CisgICAgICAg
ICAgICByZXR1cm4gYmluYXJ5Q2hvcDxDYWxsUmV0dXJuT2Zmc2V0VG9CeXRlY29kZUluZGV4LCB1
bnNpZ25lZCwgZ2V0Q2FsbFJldHVybk9mZnNldD4oY2FsbFJldHVybkluZGV4VmVjdG9yKCkuYmVn
aW4oKSwgY2FsbFJldHVybkluZGV4VmVjdG9yKCkuc2l6ZSgpLCBvd25lck5vZGUoKS0+Z2VuZXJh
dGVkSklUQ29kZSgpLm9mZnNldE9mKHJldHVybkFkZHJlc3MudmFsdWUoKSkpLT5ieXRlY29kZUlu
ZGV4OwogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICBib29sIGZ1bmN0aW9uUmVnaXN0ZXJG
b3JCeXRlY29kZU9mZnNldCh1bnNpZ25lZCBieXRlY29kZU9mZnNldCwgaW50JiBmdW5jdGlvblJl
Z2lzdGVySW5kZXgpOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVC5oCmluZGV4IDQ1ZTA3NDguLjA3MWRiMDIgMTAwNjQ0Ci0tLSBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
QEAgLTI0Miw2ICsyNDIsMzEgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25z
dCBGUFJlZ2lzdGVySUQgZnBSZWdUMCA9IEFSTTo6ZDA7CiAgICAgICAgIHN0YXRpYyBjb25zdCBG
UFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTTo6ZDE7CiAgICAgICAgIHN0YXRpYyBjb25zdCBGUFJl
Z2lzdGVySUQgZnBSZWdUMiA9IEFSTTo6ZDI7CisjZWxpZiBQTEFURk9STShBUk0pCisgICAgICAg
IHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJldHVyblZhbHVlUmVnaXN0ZXIgPSBBUk06OnIwOwor
ICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBjYWNoZWRSZXN1bHRSZWdpc3RlciA9IEFS
TTo6cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIGZpcnN0QXJndW1lbnRSZWdp
c3RlciA9IEFSTTo6cjA7CisKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgdGltZW91
dENoZWNrUmVnaXN0ZXIgPSBBUk06OnI1OworICAgICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJ
RCBjYWxsRnJhbWVSZWdpc3RlciA9IEFSTTo6cjQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIGN0aVJldHVyblJlZ2lzdGVyID0gQVJNOjpyNjsKKworICAgICAgICBzdGF0aWMgY29u
c3QgUmVnaXN0ZXJJRCByZWdUMCA9IEFSTTo6cjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdp
c3RlcklEIHJlZ1QxID0gQVJNOjpyMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQg
cmVnVDIgPSBBUk06OnIyOworICAgICAgICAvLyBDYWxsZWUgcHJlc2VydmVkCisgICAgICAgIHN0
YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1QzID0gQVJNOjpyNzsKKworICAgICAgICBzdGF0aWMg
Y29uc3QgUmVnaXN0ZXJJRCByZWdTMCA9IEFSTTo6UzA7CisgICAgICAgIC8vIENhbGxlZSBwcmVz
ZXJ2ZWQKKyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnUzEgPSBBUk06OlMxOwor
CisgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJlZ1N0YWNrUHRyID0gQVJNOjpzcDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVnTGluayA9IEFSTTo6bHI7CisKKyAg
ICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gQVJNOjpmcDA7IC8vIEZJ
WE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVySUQgZnBSZWdUMSA9IEFSTTo6ZnAw
OyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgRlBSZWdpc3RlcklEIGZwUmVnVDIgPSBB
Uk06OmZwMDsgLy8gRklYTUUKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90IHN1cHBvcnRlZCBv
biB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2Rz
LmgKaW5kZXggYzIyYTY5Mi4uYjVhYWFmYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0
L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0
aG9kcy5oCkBAIC0xMDIsNyArMTAyLDcgQEAgQUxXQVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjpl
bWl0TmFrZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24pCiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0K
IAotI2lmIFBMQVRGT1JNKFg4NikgfHwgUExBVEZPUk0oWDg2XzY0KQorI2lmIFBMQVRGT1JNKFg4
NikgfHwgUExBVEZPUk0oWDg2XzY0KSB8fCAoUExBVEZPUk0oQVJNKSAmJiAhUExBVEZPUk1fQVJN
X0FSQ0goNykpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVz
c0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKIHsKQEAgLTE0OSw2ICsxNDksOSBAQCBBTFdBWVNf
SU5MSU5FIHZvaWQgSklUOjpyZXN0b3JlQXJndW1lbnRSZWZlcmVuY2UoKQogewogICAgIG1vdmUo
c3RhY2tQb2ludGVyUmVnaXN0ZXIsIGZpcnN0QXJndW1lbnRSZWdpc3Rlcik7CiAgICAgcG9rZShj
YWxsRnJhbWVSZWdpc3RlciwgT0JKRUNUX09GRlNFVE9GKHN0cnVjdCBKSVRTdGFja0ZyYW1lLCBj
YWxsRnJhbWUpIC8gc2l6ZW9mICh2b2lkKikpOworI2lmIFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRG
T1JNX0FSTV9BUkNIKDcpCisgICAgbW92ZShjdGlSZXR1cm5SZWdpc3RlciwgQVJNOjpscik7Cisj
ZW5kaWYKIH0KIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnJlc3RvcmVBcmd1bWVudFJlZmVyZW5j
ZUZvclRyYW1wb2xpbmUoKQogewpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9w
Y29kZXMuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVE9wY29kZXMuY3BwCmluZGV4IGFiOGJi
ZGQuLjNkZjg5MTQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRPcGNvZGVzLmNw
cAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUT3Bjb2Rlcy5jcHAKQEAgLTE3OTMsNiArMTc5
Myw0NyBAQCB2b2lkIEpJVDo6cHJpdmF0ZUNvbXBpbGVDVElNYWNoaW5lVHJhbXBvbGluZXMoUmVm
UHRyPEV4ZWN1dGFibGVQb29sPiogZXhlY3V0YWJsZQogICAgIC8vIHNvIHB1bGwgdGhlbSBvZmYg
bm93CiAgICAgYWRkUHRyKEltbTMyKE5hdGl2ZUNhbGxGcmFtZVNpemUgLSBzaXplb2YoTmF0aXZl
RnVuY3Rpb25DYWxsZWVTaWduYXR1cmUpKSwgc3RhY2tQb2ludGVyUmVnaXN0ZXIpOwogCisjZWxp
ZiBQTEFURk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgIGVtaXRHZXRGcm9t
Q2FsbEZyYW1lSGVhZGVyMzIoUmVnaXN0ZXJGaWxlOjpBcmd1bWVudENvdW50LCByZWdUMCk7CisK
KyAgICAvLyBBbGxvY2F0ZSBzdGFjayBzcGFjZSBmb3Igb3VyIGFyZ2xpc3QKKyAgICBDT01QSUxF
X0FTU0VSVCgoc2l6ZW9mKEFyZ0xpc3QpICYgMHg3KSA9PSAwLCBBcmdMaXN0X3Nob3VsZF9ieV84
Ynl0ZV9hbGlnbmVkKTsKKyAgICBzdWJQdHIoSW1tMzIoc2l6ZW9mKEFyZ0xpc3QpKSwgc3RhY2tQ
b2ludGVyUmVnaXN0ZXIpOworCisgICAgLy8gU2V0IHVwIGFyZ3VtZW50cworICAgIHN1YlB0cihJ
bW0zMigxKSwgcmVnVDApOyAvLyBEb24ndCBpbmNsdWRlICd0aGlzJyBpbiBhcmdjb3VudAorCisg
ICAgLy8gUHVzaCBhcmdjb3VudAorICAgIHN0b3JlUHRyKHJlZ1QwLCBBZGRyZXNzKHN0YWNrUG9p
bnRlclJlZ2lzdGVyLCBPQkpFQ1RfT0ZGU0VUT0YoQXJnTGlzdCwgbV9hcmdDb3VudCkpKTsKKwor
ICAgIC8vIENhbGN1bGF0ZSB0aGUgc3RhcnQgb2YgdGhlIGNhbGxmcmFtZSBoZWFkZXIsIGFuZCBz
dG9yZSBpbiByZWdUMQorICAgIG1vdmUoY2FsbEZyYW1lUmVnaXN0ZXIsIHJlZ1QxKTsKKyAgICBz
dWIzMihJbW0zMihSZWdpc3RlckZpbGU6OkNhbGxGcmFtZUhlYWRlclNpemUgKiAoaW50MzJfdClz
aXplb2YoUmVnaXN0ZXIpKSwgcmVnVDEpOworCisgICAgLy8gQ2FsY3VsYXRlIHN0YXJ0IG9mIGFy
Z3VtZW50cyBhcyBjYWxsZnJhbWUgaGVhZGVyIC0gc2l6ZW9mKFJlZ2lzdGVyKSAqIGFyZ2NvdW50
IChyZWdUMSkKKyAgICBtdWwzMihJbW0zMihzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDAsIHJlZ1Qw
KTsKKyAgICBzdWJQdHIocmVnVDAsIHJlZ1QxKTsKKworICAgIC8vIHB1c2ggcG9pbnRlciB0byBh
cmd1bWVudHMKKyAgICBzdG9yZVB0cihyZWdUMSwgQWRkcmVzcyhzdGFja1BvaW50ZXJSZWdpc3Rl
ciwgT0JKRUNUX09GRlNFVE9GKEFyZ0xpc3QsIG1fYXJncykpKTsKKworICAgIC8vIFNldHVwIGFy
ZzM6IHJlZ1QxIGN1cnJlbnRseSBwb2ludHMgdG8gdGhlIGZpcnN0IGFyZ3VtZW50LCByZWdUMS1z
aXplb2YoUmVnaXN0ZXIpIHBvaW50cyB0byAndGhpcycKKyAgICBsb2FkUHRyKEFkZHJlc3MocmVn
VDEsIC0oaW50MzJfdClzaXplb2YoUmVnaXN0ZXIpKSwgcmVnVDIpOworCisgICAgLy8gU2V0dXAg
YXJnMjoKKyAgICBlbWl0R2V0RnJvbUNhbGxGcmFtZUhlYWRlclB0cihSZWdpc3RlckZpbGU6OkNh
bGxlZSwgcmVnVDEpOworCisgICAgLy8gU2V0dXAgYXJnMToKKyAgICBtb3ZlKGNhbGxGcmFtZVJl
Z2lzdGVyLCByZWdUMCk7CisKKyAgICAvLyBTZXR1cCBhcmc0OiBUaGlzIGlzIGEgcGxhaW4gaGFj
aworICAgIG1vdmUoc3RhY2tQb2ludGVyUmVnaXN0ZXIsIEFSTTo6UzApOworCisgICAgbW92ZShj
dGlSZXR1cm5SZWdpc3RlciwgQVJNOjpscik7CisgICAgY2FsbChBZGRyZXNzKHJlZ1QxLCBPQkpF
Q1RfT0ZGU0VUT0YoSlNGdW5jdGlvbiwgbV9kYXRhKSkpOworCisgICAgYWRkUHRyKEltbTMyKHNp
emVvZihBcmdMaXN0KSksIHN0YWNrUG9pbnRlclJlZ2lzdGVyKTsKKwogI2VsaWYgRU5BQkxFKEpJ
VF9PUFRJTUlaRV9OQVRJVkVfQ0FMTCkKICNlcnJvciAiSklUX09QVElNSVpFX05BVElWRV9DQUxM
IG5vdCB5ZXQgc3VwcG9ydGVkIG9uIHRoaXMgcGxhdGZvcm0uIgogI2Vsc2UKQEAgLTE4NDAsMTQg
KzE4ODEsMTYgQEAgdm9pZCBKSVQ6OnByaXZhdGVDb21waWxlQ1RJTWFjaGluZVRyYW1wb2xpbmVz
KFJlZlB0cjxFeGVjdXRhYmxlUG9vbD4qIGV4ZWN1dGFibGUKICAgICBwYXRjaEJ1ZmZlci5saW5r
KHN0cmluZ19mYWlsdXJlQ2FzZXMyQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX29wX2dldF9ieV9pZF9z
dHJpbmdfZmFpbCkpOwogICAgIHBhdGNoQnVmZmVyLmxpbmsoc3RyaW5nX2ZhaWx1cmVDYXNlczND
YWxsLCBGdW5jdGlvblB0cihjdGlfb3BfZ2V0X2J5X2lkX3N0cmluZ19mYWlsKSk7CiAjZW5kaWYK
KyNpZiBFTkFCTEUoSklUX09QVElNSVpFX0NBTEwpCiAgICAgcGF0Y2hCdWZmZXIubGluayhjYWxs
QXJpdHlDaGVjazEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX2FyaXR5Q2hlY2spKTsKICAgICBw
YXRjaEJ1ZmZlci5saW5rKGNhbGxBcml0eUNoZWNrMiwgRnVuY3Rpb25QdHIoY3RpX29wX2NhbGxf
YXJpdHlDaGVjaykpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEFyaXR5Q2hlY2szLCBGdW5j
dGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CiAgICAgcGF0Y2hCdWZmZXIubGluayhj
YWxsSlNGdW5jdGlvbjEsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxsX0pTRnVuY3Rpb24pKTsKICAg
ICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxKU0Z1bmN0aW9uMiwgRnVuY3Rpb25QdHIoY3RpX29wX2Nh
bGxfSlNGdW5jdGlvbikpOwotICAgIHBhdGNoQnVmZmVyLmxpbmsoY2FsbEpTRnVuY3Rpb24zLCBG
dW5jdGlvblB0cihjdGlfb3BfY2FsbF9KU0Z1bmN0aW9uKSk7CiAgICAgcGF0Y2hCdWZmZXIubGlu
ayhjYWxsRG9udExhenlMaW5rQ2FsbCwgRnVuY3Rpb25QdHIoY3RpX3ZtX2RvbnRMYXp5TGlua0Nh
bGwpKTsKICAgICBwYXRjaEJ1ZmZlci5saW5rKGNhbGxMYXp5TGlua0NhbGwsIEZ1bmN0aW9uUHRy
KGN0aV92bV9sYXp5TGlua0NhbGwpKTsKKyNlbmRpZgorICAgIHBhdGNoQnVmZmVyLmxpbmsoY2Fs
bEFyaXR5Q2hlY2szLCBGdW5jdGlvblB0cihjdGlfb3BfY2FsbF9hcml0eUNoZWNrKSk7CisgICAg
cGF0Y2hCdWZmZXIubGluayhjYWxsSlNGdW5jdGlvbjMsIEZ1bmN0aW9uUHRyKGN0aV9vcF9jYWxs
X0pTRnVuY3Rpb24pKTsKIAogICAgIENvZGVSZWYgZmluYWxDb2RlID0gcGF0Y2hCdWZmZXIuZmlu
YWxpemVDb2RlKCk7CiAgICAgKmV4ZWN1dGFibGVQb29sID0gZmluYWxDb2RlLm1fZXhlY3V0YWJs
ZVBvb2w7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmNwcAppbmRleCBiYmNhNGY0Li44OTA3MWUzIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuY3BwCisrKyBiL0phdmFTY3JpcHRD
b3JlL2ppdC9KSVRTdHVicy5jcHAKQEAgLTUxNiw2ICs1MTYsNDkgQEAgU1lNQk9MX1NUUklORyhj
dGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgogICAgICJieCBsciIgIlxuIgogKTsKIAorI2Vs
aWYgQ09NUElMRVIoR0NDKSAmJiBQTEFURk9STShBUk0pCisKK2FzbSB2b2xhdGlsZSAoCisiLmds
b2JsICIgU1lNQk9MX1NUUklORyhjdGlUcmFtcG9saW5lKSAiXG4iCitTWU1CT0xfU1RSSU5HKGN0
aVRyYW1wb2xpbmUpICI6IiAiXG4iCisgICAgInN0bWRiIHNwISwge3IxLXIzfSIgIlxuIgorICAg
ICJzdG1kYiBzcCEsIHtyNC1yOCwgbHJ9IiAiXG4iCisgICAgIm1vdiByNiwgcGMiICJcbiIKKyAg
ICAiYWRkIHI2LCByNiwgIzQwIiAiXG4iCisgICAgInN1YiBzcCwgc3AsICMzMiIgIlxuIgorICAg
ICJsZHIgcjQsIFtzcCwgIzYwXSIgIlxuIgorICAgICJtb3YgcjUsICM1MTIiICJcbiIKKyAgICAv
LyByMCBjb250YWlucyB0aGUgY29kZQorICAgICJhZGQgcjgsIHBjLCAjNCIgIlxuIgorICAgICJz
dHIgcjgsIFtzcCwgIy00XSEiICJcbiIKKyAgICAibW92IHBjLCByMCIgIlxuIgorICAgICJhZGQg
c3AsIHNwLCAjMzIiICJcbiIKKyAgICAibGRtaWEgc3AhLCB7cjQtcjgsIGxyfSIgIlxuIgorICAg
ICJhZGQgc3AsIHNwLCAjMTIiICJcbiIKKyAgICAibW92IHBjLCBsciIgIlxuIgorCisgICAgLy8g
dGhlIHJldHVybiBpbnN0cnVjdGlvbgorICAgICJsZHIgcGMsIFtzcF0sICM0IiAiXG4iCispOwor
Cithc20gdm9sYXRpbGUgKAorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1w
b2xpbmUpICJcbiIKK1NZTUJPTF9TVFJJTkcoY3RpVk1UaHJvd1RyYW1wb2xpbmUpICI6IiAiXG4i
CisgICAgIm1vdiByMCwgc3AiICJcbiIKKyAgICAibW92IGxyLCByNiIgIlxuIgorICAgICJhZGQg
cjgsIHBjLCAjNCIgIlxuIgorICAgICJzdHIgcjgsIFtzcCwgIy00XSEiICJcbiIKKyAgICAiYiAi
IFNZTUJPTF9TVFJJTkcoY3RpX3ZtX3Rocm93KSAiXG4iCisKKy8vIEJvdGggaGFzIHRoZSBzYW1l
IHJldHVybiBzZXF1ZW5jZQorIi5nbG9ibCAiIFNZTUJPTF9TVFJJTkcoY3RpT3BUaHJvd05vdENh
dWdodCkgIlxuIgorU1lNQk9MX1NUUklORyhjdGlPcFRocm93Tm90Q2F1Z2h0KSAiOiIgIlxuIgor
ICAgICJhZGQgc3AsIHNwLCAjMzIiICJcbiIKKyAgICAibGRtaWEgc3AhLCB7cjQtcjgsIGxyfSIg
IlxuIgorICAgICJhZGQgc3AsIHNwLCAjMTIiICJcbiIKKyAgICAibW92IHBjLCBsciIgIlxuIgor
KTsKKwogI2VsaWYgQ09NUElMRVIoTVNWQykKIAogI2lmIFVTRShKSVRfU1RVQl9BUkdVTUVOVF9W
QV9MSVNUKQpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFN0dWJzLmggYi9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAppbmRleCAxOTgyNDc4Li40ZGFiOTUzIDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUU3R1YnMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUU3R1YnMuaApAQCAtMTU1LDYgKzE1NSwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAg
ICAgCiAgICAgICAgIFJldHVybkFkZHJlc3NQdHIqIHJldHVybkFkZHJlc3NTbG90KCkgeyByZXR1
cm4gJnRodW5rUmV0dXJuQWRkcmVzczsgfQogICAgIH07CisjZWxpZiBQTEFURk9STShBUk0pCisg
ICAgc3RydWN0IEpJVFN0YWNrRnJhbWUgeworICAgICAgICBKSVRTdHViQXJnIHBhZGRpbmc7IC8v
IFVudXNlZAorICAgICAgICBKSVRTdHViQXJnIGFyZ3NbN107CisKKyAgICAgICAgdm9pZCogcHJl
c2VydmVkUjQ7CisgICAgICAgIHZvaWQqIHByZXNlcnZlZFI1OworICAgICAgICB2b2lkKiBwcmVz
ZXJ2ZWRSNjsKKyAgICAgICAgdm9pZCogcHJlc2VydmVkUjc7CisgICAgICAgIHZvaWQqIHByZXNl
cnZlZFI4OworICAgICAgICB2b2lkKiBwcmVzZXJ2ZWRMaW5rOworCisgICAgICAgIFJlZ2lzdGVy
RmlsZSogcmVnaXN0ZXJGaWxlOworICAgICAgICBDYWxsRnJhbWUqIGNhbGxGcmFtZTsKKyAgICAg
ICAgSlNWYWx1ZSogZXhjZXB0aW9uOworICAgICAgICBQcm9maWxlcioqIGVuYWJsZWRQcm9maWxl
clJlZmVyZW5jZTsKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhOworCisgICAgICAg
IC8vIFdoZW4gSklUIGNvZGUgbWFrZXMgYSBjYWxsLCBpdCBwdXNoZXMgaXRzIHJldHVybiBhZGRy
ZXNzIGp1c3QgYmVsb3cgdGhlIHJlc3Qgb2YgdGhlIHN0YWNrLgorICAgICAgICBSZXR1cm5BZGRy
ZXNzUHRyKiByZXR1cm5BZGRyZXNzU2xvdCgpIHsgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8UmV0
dXJuQWRkcmVzc1B0cio+KHRoaXMpIC0gMTsgfQorICAgIH07CiAjZWxzZQogI2Vycm9yICJKSVRT
dGFja0ZyYW1lIG5vdCBkZWZpbmVkIGZvciB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgpkaWZmIC0t
Z2l0IGEvSmF2YVNjcmlwdENvcmUvd3RmL1BsYXRmb3JtLmggYi9KYXZhU2NyaXB0Q29yZS93dGYv
UGxhdGZvcm0uaAppbmRleCAxMmVmYjAyLi5hNzcxNTQ2IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0
Q29yZS93dGYvUGxhdGZvcm0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS93dGYvUGxhdGZvcm0uaApA
QCAtNjc2LDcgKzY3Niw3IEBACiAjZW5kaWYKIC8qIFNldHRpbmcgdGhpcyBmbGFnIHByZXZlbnRz
IHRoZSBhc3NlbWJsZXIgZnJvbSB1c2luZyBSV1ggbWVtb3J5OyB0aGlzIG1heSBpbXByb3ZlCiAg
ICBzZWN1cml0eSBidXQgY3VycmVjdGx5IGNvbWVzIGF0IGEgc2lnbmlmaWNhbnQgcGVyZm9ybWFu
Y2UgY29zdC4gKi8KLSNpZiBQTEFURk9STShBUk0pCisjaWYgUExBVEZPUk0oSVBIT05FKQogI2Rl
ZmluZSBFTkFCTEVfQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSAxCiAjZWxzZQogI2RlZmluZSBFTkFC
TEVfQVNTRU1CTEVSX1dYX0VYQ0xVU0lWRSAwCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34128</attachid>
            <date>2009-08-05 04:43:15 -0700</date>
            <delta_ts>2009-08-11 23:16:59 -0700</delta_ts>
            <desc>Floating point support for ARM v3</desc>
            <filename>0002-Add-floating-point-support-for-generic-ARM-port.patch</filename>
            <type>text/plain</type>
            <size>12021</size>
            <attacher name="Zoltan Herczeg">zherczeg</attacher>
            
              <data encoding="base64">RnJvbSBkMmFkMjgxYTk5YjQ3ZGM0OTA5ZDVmZmRiNDVhYWY4ZTc0YjAzMzk4IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBab2x0YW4gSGVyY3plZyA8emhlcmN6ZWdAaW5mLnUtc3plZ2Vk
Lmh1PgpEYXRlOiBXZWQsIDUgQXVnIDIwMDkgMTA6MDA6MDAgKzAyMDAKU3ViamVjdDogW1BBVENI
XSBBZGQgZmxvYXRpbmcgcG9pbnQgc3VwcG9ydCBmb3IgZ2VuZXJpYyBBUk0gcG9ydC4KClNpZ25l
ZC1vZmYtYnk6IFpvbHRhbiBIZXJjemVnIDx6aGVyY3plZ0BpbmYudS1zemVnZWQuaHU+Ci0tLQog
SmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nICAgICAgICAgICAgICAgICAgICAgfCAgIDMzICsrKysr
KysrKysrKysKIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwICAgIHwg
ICAzMSArKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVy
LmggICAgICB8ICAgNjMgKysrKysrKysrKysrKysrKysrKysrKysrKy0KIEphdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIHwgICA2MCArKysrKysrKystLS0tLS0tLS0t
LS0tLS0KIEphdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgICAgIHwgICAg
NiArLQogNSBmaWxlcyBjaGFuZ2VkLCAxNTEgaW5zZXJ0aW9ucygrKSwgNDIgZGVsZXRpb25zKC0p
CgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nIGIvSmF2YVNjcmlwdENvcmUv
Q2hhbmdlTG9nCmluZGV4IDM3NmE1MDEuLjZkMzE3ZTIgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRD
b3JlL0NoYW5nZUxvZworKysgYi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKQEAgLTIsNiArMiwz
OSBAQAogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgogCisgICAgICAgIEFk
ZCBmbG9hdGluZyBwb2ludCBzdXBwb3J0IGZvciBnZW5lcmljIEFSTSBwb3J0LgorICAgICAgICBo
dHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAgICAgICAq
IGFzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6
OmRvdWJsZVRyYW5zZmVyKToKKyAgICAgICAgKiBhc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmg6Cisg
ICAgICAgIChKU0M6OkFSTTo6KToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjopOgorICAg
ICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZhZGRkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3Nl
bWJsZXI6OmZzdWJkX3IpOgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZtdWxkX3IpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmZjbXBkX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmZkdHJfdSk6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6ZmR0cl9kKToK
KyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmbXNyX3IpOgorICAgICAgICAoSlNDOjpBUk1B
c3NlbWJsZXI6OmZzaXRvZF9yKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpmbXN0YXQp
OgorICAgICAgICAqIGFzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oOgorICAgICAgICAoSlND
OjpNYWNyb0Fzc2VtYmxlckFSTTo6KToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06
OnN1cHBvcnRzRmxvYXRpbmdQb2ludCk6CisgICAgICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJN
Ojpsb2FkRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OnN0b3JlRG91
YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmFkZERvdWJsZSk6CisgICAg
ICAgIChKU0M6Ok1hY3JvQXNzZW1ibGVyQVJNOjpzdWJEb3VibGUpOgorICAgICAgICAoSlNDOjpN
YWNyb0Fzc2VtYmxlckFSTTo6bXVsRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmNvbnZlcnRJbnQzMlRvRG91YmxlKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJs
ZXJBUk06OmJyYW5jaERvdWJsZSk6CisgICAgICAgICogaml0L0pJVC5oOgorCisyMDA5LTA4LTA1
ICBab2x0YW4gSGVyY3plZyAgPHpoZXJjemVnQGluZi51LXN6ZWdlZC5odT4KKworICAgICAgICBS
ZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKwogICAgICAgICBBZGQgSklUIHN1cHBvcnQgZm9y
IGdlbmVyaWMgQVJNIHBvcnQgd2l0aG91dCBvcHRpbWl6YXRpb25zLgogICAgICAgICBodHRwczov
L2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKIApkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAgYi9KYXZhU2NyaXB0Q29yZS9h
c3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAppbmRleCAxN2QzMTQ3Li42OWRhYTE2IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcAorKysgYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcApAQCAtMzM0LDYgKzMzNCwzNyBA
QCB2b2lkIEFSTUFzc2VtYmxlcjo6YmFzZUluZGV4VHJhbnNmZXIzMihib29sIGlzTG9hZCwgUmVn
aXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySQogICAgIGR0cl91cihpc0xvYWQsIHNyY0RzdCwgYmFz
ZSwgQVJNOjpTMCk7CiB9CiAKK3ZvaWQgQVJNQXNzZW1ibGVyOjpkb3VibGVUcmFuc2Zlcihib29s
IGlzTG9hZCwgRlBSZWdpc3RlcklEIHNyY0RzdCwgUmVnaXN0ZXJJRCBiYXNlLCBpbnQzMl90IG9m
ZnNldCkKK3sKKyAgICBpZiAob2Zmc2V0ICYgMHgzKSB7CisgICAgICAgIGlmIChvZmZzZXQgPD0g
MHgzZmYgJiYgb2Zmc2V0ID49IDApIHsKKyAgICAgICAgICAgIGZkdHJfdShpc0xvYWQsIHNyY0Rz
dCwgYmFzZSwgb2Zmc2V0ID4+IDIpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9Cisg
ICAgICAgIGlmIChvZmZzZXQgPD0gMHgzZmZmZiAmJiBvZmZzZXQgPj0gMCkgeworICAgICAgICAg
ICAgYWRkX3IoQVJNOjpTMCwgYmFzZSwgT1AyX0lNTSB8IChvZmZzZXQgPj4gMTApIHwgKDExIDw8
IDgpKTsKKyAgICAgICAgICAgIGZkdHJfdShpc0xvYWQsIHNyY0RzdCwgQVJNOjpTMCwgKG9mZnNl
dCA+PiAyKSAmIDB4ZmYpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICAg
IG9mZnNldCA9IC1vZmZzZXQ7CisKKyAgICAgICAgaWYgKG9mZnNldCA8PSAweDNmZiAmJiBvZmZz
ZXQgPj0gMCkgeworICAgICAgICAgICAgZmR0cl9kKGlzTG9hZCwgc3JjRHN0LCBiYXNlLCBvZmZz
ZXQgPj4gMik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgaWYgKG9m
ZnNldCA8PSAweDNmZmZmICYmIG9mZnNldCA+PSAwKSB7CisgICAgICAgICAgICBzdWJfcihBUk06
OlMwLCBiYXNlLCBPUDJfSU1NIHwgKG9mZnNldCA+PiAxMCkgfCAoMTEgPDwgOCkpOworICAgICAg
ICAgICAgZmR0cl9kKGlzTG9hZCwgc3JjRHN0LCBBUk06OlMwLCAob2Zmc2V0ID4+IDIpICYgMHhm
Zik7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgICAgb2Zmc2V0ID0gLW9m
ZnNldDsKKyAgICB9CisKKyAgICBsZHJfdW5faW1tKEFSTTo6UzAsIG9mZnNldCk7CisgICAgYWRk
X3IoQVJNOjpTMCwgQVJNOjpTMCwgYmFzZSk7CisgICAgZmR0cl91KGlzTG9hZCwgc3JjRHN0LCBB
Uk06OlMwLCAwKTsKK30KKwogdm9pZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weShFeGVj
dXRhYmxlUG9vbCogYWxsb2NhdG9yKQogewogICAgIGNoYXIqIGRhdGEgPSByZWludGVycHJldF9j
YXN0PGNoYXIqPihtX2J1ZmZlci5leGVjdXRhYmxlQ29weShhbGxvY2F0b3IpKTsKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRD
b3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAppbmRleCBkNmJiNDNlLi5kM2ZlNzgyIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKKysrIGIvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCkBAIC02Myw4ICs2MywxMyBAQCBu
YW1lc3BhY2UgQVJNIHsKICAgICB9IFJlZ2lzdGVySUQ7CiAKICAgICB0eXBlZGVmIGVudW0gewot
ICAgICAgICBmcDAgLy9GSVhNRQorICAgICAgICBkMCwKKyAgICAgICAgZDEsCisgICAgICAgIGQy
LAorICAgICAgICBkMywKKyAgICAgICAgU0QwID0gZDMKICAgICB9IEZQUmVnaXN0ZXJJRDsKKwog
fSAvLyBuYW1lc3BhY2UgQVJNCiAKICAgICBjbGFzcyBBUk1Bc3NlbWJsZXIgewpAQCAtMTE1LDEz
ICsxMjAsMjEgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAgICBNVk4gPSAoMHhmIDw8IDIx
KSwKICAgICAgICAgICAgIE1VTCA9IDB4MDAwMDAwOTAsCiAgICAgICAgICAgICBNVUxMID0gMHgw
MGMwMDA5MCwKKyAgICAgICAgICAgIEZBREREID0gMHgwZTMwMGIwMCwKKyAgICAgICAgICAgIEZT
VUJEID0gMHgwZTMwMGI0MCwKKyAgICAgICAgICAgIEZNVUxEID0gMHgwZTIwMGIwMCwKKyAgICAg
ICAgICAgIEZDTVBEID0gMHgwZWI0MGI0MCwKICAgICAgICAgICAgIERUUiA9IDB4MDUwMDAwMDAs
CiAgICAgICAgICAgICBMRFJIID0gMHgwMDEwMDA5MCwKICAgICAgICAgICAgIFNUUkggPSAweDAw
MDAwMDkwLAogICAgICAgICAgICAgU1RNREIgPSAweDA5MjAwMDAwLAogICAgICAgICAgICAgTERN
SUEgPSAweDA4YjAwMDAwLAorICAgICAgICAgICAgRkRUUiA9IDB4MGQwMDBiMDAsCiAgICAgICAg
ICAgICBCID0gMHgwYTAwMDAwMCwKICAgICAgICAgICAgIEJMID0gMHgwYjAwMDAwMCwKKyAgICAg
ICAgICAgIEZNU1IgPSAweDBlMDAwYTEwLAorICAgICAgICAgICAgRlNJVE9EID0gMHgwZWI4MGJj
MCwKKyAgICAgICAgICAgIEZNU1RBVCA9IDB4MGVmMWZhMTAsCiAjaWYgQVJNX0FSQ0hfVkVSU0lP
TiA+PSA1CiAgICAgICAgICAgICBDTFogPSAweDAxNmYwZjEwLAogICAgICAgICAgICAgQktQVCA9
IDB4ZTEyMDA3MCwKQEAgLTM2NCw2ICszNzcsMjYgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAg
ICAgICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgTVVMTCB8IFJO
KHJkaGkpIHwgUkQocmRsbykgfCBSUyhybikgfCBSTShybSkpOwogICAgICAgICB9CiAKKyAgICAg
ICAgdm9pZCBmYWRkZF9yKGludCBkZCwgaW50IGRuLCBpbnQgZG0sIENvbmRpdGlvbiBjYyA9IEFM
KQorICAgICAgICB7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihj
YykgfCBGQURERCwgZGQsIGRuLCBkbSk7CisgICAgICAgIH0KKworICAgICAgICB2b2lkIGZzdWJk
X3IoaW50IGRkLCBpbnQgZG4sIGludCBkbSwgQ29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsK
KyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFSTVdvcmQ+KGNjKSB8IEZTVUJELCBk
ZCwgZG4sIGRtKTsKKyAgICAgICAgfQorCisgICAgICAgIHZvaWQgZm11bGRfcihpbnQgZGQsIGlu
dCBkbiwgaW50IGRtLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
ZW1pdEluc3Qoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRk1VTEQsIGRkLCBkbiwgZG0pOwor
ICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmY21wZF9yKGludCBkZCwgaW50IGRtLCBDb25kaXRp
b24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAgZW1pdEluc3Qoc3RhdGljX2Nhc3Q8
QVJNV29yZD4oY2MpIHwgRkNNUEQsIGRkLCAwLCBkbSk7CisgICAgICAgIH0KKwogICAgICAgICB2
b2lkIGxkcl9pbW0oaW50IHJkLCBBUk1Xb3JkIGltbSwgQ29uZGl0aW9uIGNjID0gQUwpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIG1fYnVmZmVyLnB1dEludFdpdGhDb25zdGFudEludChzdGF0aWNf
Y2FzdDxBUk1Xb3JkPihjYykgfCBEVFIgfCBEVF9MT0FEIHwgRFRfVVAgfCBSTihBUk06OnBjKSB8
IFJEKHJkKSwgaW1tLCB0cnVlKTsKQEAgLTQxNCw2ICs0NDcsMTggQEAgbmFtZXNwYWNlIEFSTSB7
CiAgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBTVFJIIHwg
SERUX1VIIHwgRFRfVVAgfCBEVF9QUkUsIHJkLCBybiwgcm0pOwogICAgICAgICB9CiAKKyAgICAg
ICAgdm9pZCBmZHRyX3UoYm9vbCBpc0xvYWQsIGludCByZCwgaW50IHJiLCBBUk1Xb3JkIG9wMiwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChvcDIgPD0g
MHhmZik7CisgICAgICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBG
RFRSIHwgRFRfVVAgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApLCByZCwgcmIsIG9wMik7CisgICAg
ICAgIH0KKworICAgICAgICB2b2lkIGZkdHJfZChib29sIGlzTG9hZCwgaW50IHJkLCBpbnQgcmIs
IEFSTVdvcmQgb3AyLCBDb25kaXRpb24gY2MgPSBBTCkKKyAgICAgICAgeworICAgICAgICAgICAg
QVNTRVJUKG9wMiA8PSAweGZmKTsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRpY19jYXN0PEFS
TVdvcmQ+KGNjKSB8IEZEVFIgfCAoaXNMb2FkID8gRFRfTE9BRCA6IDApLCByZCwgcmIsIG9wMik7
CisgICAgICAgIH0KKwogICAgICAgICB2b2lkIHB1c2hfcihpbnQgcmVnLCBDb25kaXRpb24gY2Mg
PSBBTCkKICAgICAgICAgewogICAgICAgICAgICAgQVNTRVJUKEFSTVdvcmQocmVnKSA8PSAweGYp
OwpAQCAtNDM2LDYgKzQ4MSwyMSBAQCBuYW1lc3BhY2UgQVJNIHsKICAgICAgICAgICAgIGR0cl91
KHRydWUsIHJlZywgQVJNOjpzcCwgMCwgY2MpOwogICAgICAgICB9CiAKKyAgICAgICAgdm9pZCBm
bXNyX3IoaW50IGRkLCBpbnQgcm4sIENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAg
ICAgICAgICBlbWl0SW5zdChzdGF0aWNfY2FzdDxBUk1Xb3JkPihjYykgfCBGTVNSLCBybiwgZGQs
IDApOworICAgICAgICB9CisKKyAgICAgICAgdm9pZCBmc2l0b2RfcihpbnQgZGQsIGludCBkbSwg
Q29uZGl0aW9uIGNjID0gQUwpCisgICAgICAgIHsKKyAgICAgICAgICAgIGVtaXRJbnN0KHN0YXRp
Y19jYXN0PEFSTVdvcmQ+KGNjKSB8IEZTSVRPRCwgZGQsIDAsIGRtKTsKKyAgICAgICAgfQorCisg
ICAgICAgIHZvaWQgZm1zdGF0KENvbmRpdGlvbiBjYyA9IEFMKQorICAgICAgICB7CisgICAgICAg
ICAgICBtX2J1ZmZlci5wdXRJbnQoc3RhdGljX2Nhc3Q8QVJNV29yZD4oY2MpIHwgRk1TVEFUKTsK
KyAgICAgICAgfQorCiAjaWYgQVJNX0FSQ0hfVkVSU0lPTiA+PSA1CiAgICAgICAgIHZvaWQgY2x6
X3IoaW50IHJkLCBpbnQgcm0sIENvbmRpdGlvbiBjYyA9IEFMKQogICAgICAgICB7CkBAIC02NTMs
NiArNzEzLDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAKICAgICAgICAgdm9pZCBkYXRhVHJhbnNmZXIz
Mihib29sIGlzTG9hZCwgUmVnaXN0ZXJJRCBzcmNEc3QsIFJlZ2lzdGVySUQgYmFzZSwgaW50MzJf
dCBvZmZzZXQpOwogICAgICAgICB2b2lkIGJhc2VJbmRleFRyYW5zZmVyMzIoYm9vbCBpc0xvYWQs
IFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIFJlZ2lzdGVySUQgaW5kZXgsIGlu
dCBzY2FsZSwgaW50MzJfdCBvZmZzZXQpOworICAgICAgICB2b2lkIGRvdWJsZVRyYW5zZmVyKGJv
b2wgaXNMb2FkLCBGUFJlZ2lzdGVySUQgc3JjRHN0LCBSZWdpc3RlcklEIGJhc2UsIGludDMyX3Qg
b2Zmc2V0KTsKIAogICAgICAgICAvLyBDb25zdGFudCBwb29sIGhuYWRsZXJzCiAKZGlmZiAtLWdp
dCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNj
cmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKaW5kZXggMDg0ZTVlNS4uYjA0
ZWQxMyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgK
QEAgLTU3LDEyICs1NywxMSBAQCBwdWJsaWM6CiAgICAgfTsKIAogICAgIGVudW0gRG91YmxlQ29u
ZGl0aW9uIHsKLSAgICAgICAgRG91YmxlRXF1YWwsIC8vRklYTUUKLSAgICAgICAgRG91YmxlTm90
RXF1YWwsIC8vRklYTUUKLSAgICAgICAgRG91YmxlR3JlYXRlclRoYW4sIC8vRklYTUUKLSAgICAg
ICAgRG91YmxlR3JlYXRlclRoYW5PckVxdWFsLCAvL0ZJWE1FCi0gICAgICAgIERvdWJsZUxlc3NU
aGFuLCAvL0ZJWE1FCi0gICAgICAgIERvdWJsZUxlc3NUaGFuT3JFcXVhbCwgLy9GSVhNRQorICAg
ICAgICBEb3VibGVFcXVhbCA9IEFSTUFzc2VtYmxlcjo6RVEsCisgICAgICAgIERvdWJsZUdyZWF0
ZXJUaGFuID0gQVJNQXNzZW1ibGVyOjpHVCwKKyAgICAgICAgRG91YmxlR3JlYXRlclRoYW5PckVx
dWFsID0gQVJNQXNzZW1ibGVyOjpHRSwKKyAgICAgICAgRG91YmxlTGVzc1RoYW4gPSBBUk1Bc3Nl
bWJsZXI6OkxULAorICAgICAgICBEb3VibGVMZXNzVGhhbk9yRXF1YWwgPSBBUk1Bc3NlbWJsZXI6
OkxFLAogICAgIH07CiAKICAgICBzdGF0aWMgY29uc3QgUmVnaXN0ZXJJRCBzdGFja1BvaW50ZXJS
ZWdpc3RlciA9IEFSTTo6c3A7CkBAIC02NDAsNiArNjM5LDcgQEAgcHVibGljOgogICAgIC8vIEZs
b2F0aW5nIHBvaW50IG9wZXJhdG9ycwogICAgIGJvb2wgc3VwcG9ydHNGbG9hdGluZ1BvaW50KCkg
Y29uc3QKICAgICB7CisgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgYmUgYSBkeW5hbWljIHRlc3Q6
IFZGUCwgRlBBLCBvciBub3RoaW5nCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAKQEAg
LTY1MCw3NCArNjUwLDU4IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgbG9hZERvdWJsZShJbXBsaWNp
dEFkZHJlc3MgYWRkcmVzcywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVT
RURfUEFSQU0oYWRkcmVzcyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShkZXN0KTsKLSAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXNzZW1ibGVyLmRvdWJsZVRyYW5zZmVy
KHRydWUsIGRlc3QsIGFkZHJlc3MuYmFzZSwgYWRkcmVzcy5vZmZzZXQpOwogICAgIH0KIAogICAg
IHZvaWQgc3RvcmVEb3VibGUoRlBSZWdpc3RlcklEIHNyYywgSW1wbGljaXRBZGRyZXNzIGFkZHJl
c3MpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAgICAgICAgVU5VU0VEX1BB
UkFNKGFkZHJlc3MpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAgICAgICAgbV9h
c3NlbWJsZXIuZG91YmxlVHJhbnNmZXIoZmFsc2UsIHNyYywgYWRkcmVzcy5iYXNlLCBhZGRyZXNz
Lm9mZnNldCk7CiAgICAgfQogCiAgICAgdm9pZCBhZGREb3VibGUoRlBSZWdpc3RlcklEIHNyYywg
RlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3JjKTsKLSAg
ICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
KyAgICAgICAgbV9hc3NlbWJsZXIuZmFkZGRfcihkZXN0LCBkZXN0LCBzcmMpOwogICAgIH0KIAog
ICAgIHZvaWQgYWRkRG91YmxlKEFkZHJlc3Mgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7
Ci0gICAgICAgIFVOVVNFRF9QQVJBTShzcmMpOwotICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7
Ci0gICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBsb2FkRG91YmxlKHNyYywg
QVJNOjpTRDApOworICAgICAgICBhZGREb3VibGUoQVJNOjpTRDAsIGRlc3QpOwogICAgIH0KIAog
ICAgIHZvaWQgc3ViRG91YmxlKEZQUmVnaXN0ZXJJRCBzcmMsIEZQUmVnaXN0ZXJJRCBkZXN0KQog
ICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShk
ZXN0KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAgIG1fYXNzZW1ibGVy
LmZzdWJkX3IoZGVzdCwgZGVzdCwgc3JjKTsKICAgICB9CiAKICAgICB2b2lkIHN1YkRvdWJsZShB
ZGRyZXNzIHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFS
QU0oc3JjKTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsKKyAgICAgICAgbG9hZERvdWJsZShzcmMsIEFSTTo6U0QwKTsKKyAgICAgICAg
c3ViRG91YmxlKEFSTTo6U0QwLCBkZXN0KTsKICAgICB9CiAKICAgICB2b2lkIG11bERvdWJsZShG
UFJlZ2lzdGVySUQgc3JjLCBGUFJlZ2lzdGVySUQgZGVzdCkKICAgICB7Ci0gICAgICAgIFVOVVNF
RF9QQVJBTShzcmMpOwotICAgICAgICBVTlVTRURfUEFSQU0oZGVzdCk7Ci0gICAgICAgIEFTU0VS
VF9OT1RfUkVBQ0hFRCgpOworICAgICAgICBtX2Fzc2VtYmxlci5mbXVsZF9yKGRlc3QsIGRlc3Qs
IHNyYyk7CiAgICAgfQogCiAgICAgdm9pZCBtdWxEb3VibGUoQWRkcmVzcyBzcmMsIEZQUmVnaXN0
ZXJJRCBkZXN0KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKHNyYyk7Ci0gICAgICAgIFVO
VVNFRF9QQVJBTShkZXN0KTsKLSAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAgICAg
IGxvYWREb3VibGUoc3JjLCBBUk06OlNEMCk7CisgICAgICAgIG11bERvdWJsZShBUk06OlNEMCwg
ZGVzdCk7CiAgICAgfQogCiAgICAgdm9pZCBjb252ZXJ0SW50MzJUb0RvdWJsZShSZWdpc3RlcklE
IHNyYywgRlBSZWdpc3RlcklEIGRlc3QpCiAgICAgewotICAgICAgICBVTlVTRURfUEFSQU0oc3Jj
KTsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGRlc3QpOwotICAgICAgICBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1zcl9yKGRlc3QsIHNyYyk7CisgICAgICAgIG1f
YXNzZW1ibGVyLmZzaXRvZF9yKGRlc3QsIGRlc3QpOwogICAgIH0KIAogICAgIEp1bXAgYnJhbmNo
RG91YmxlKERvdWJsZUNvbmRpdGlvbiBjb25kLCBGUFJlZ2lzdGVySUQgbGVmdCwgRlBSZWdpc3Rl
cklEIHJpZ2h0KQogICAgIHsKLSAgICAgICAgVU5VU0VEX1BBUkFNKGNvbmQpOwotICAgICAgICBV
TlVTRURfUEFSQU0obGVmdCk7Ci0gICAgICAgIFVOVVNFRF9QQVJBTShyaWdodCk7Ci0gICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwotICAgICAgICByZXR1cm4ganVtcCgpOworICAgICAgICBt
X2Fzc2VtYmxlci5mY21wZF9yKGxlZnQsIHJpZ2h0KTsKKyAgICAgICAgbV9hc3NlbWJsZXIuZm1z
dGF0KCk7CisgICAgICAgIHJldHVybiBKdW1wKG1fYXNzZW1ibGVyLmptcChzdGF0aWNfY2FzdDxB
Uk1Bc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCkpKTsKICAgICB9CiAKICAgICAvLyBUcnVuY2F0
ZXMgJ3NyYycgdG8gYW4gaW50ZWdlciwgYW5kIHBsYWNlcyB0aGUgcmVzdWx0aW5nICdkZXN0Jy4K
ZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVQuaAppbmRleCAwNzFkYjAyLi42OTIxMzgxIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklULmgKKysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0yNjQsOSArMjY0
LDkgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHN0YXRpYyBjb25zdCBSZWdpc3RlcklEIHJl
Z1N0YWNrUHRyID0gQVJNOjpzcDsKICAgICAgICAgc3RhdGljIGNvbnN0IFJlZ2lzdGVySUQgcmVn
TGluayA9IEFSTTo6bHI7CiAKLSAgICAgICAgc3RhdGljIGNvbnN0IEZQUmVnaXN0ZXJJRCBmcFJl
Z1QwID0gQVJNOjpmcDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBjb25zdCBGUFJlZ2lzdGVy
SUQgZnBSZWdUMSA9IEFSTTo6ZnAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgRlBS
ZWdpc3RlcklEIGZwUmVnVDIgPSBBUk06OmZwMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNv
bnN0IEZQUmVnaXN0ZXJJRCBmcFJlZ1QwID0gQVJNOjpkMDsKKyAgICAgICAgc3RhdGljIGNvbnN0
IEZQUmVnaXN0ZXJJRCBmcFJlZ1QxID0gQVJNOjpkMTsKKyAgICAgICAgc3RhdGljIGNvbnN0IEZQ
UmVnaXN0ZXJJRCBmcFJlZ1QyID0gQVJNOjpkMjsKICNlbHNlCiAgICAgI2Vycm9yICJKSVQgbm90
IHN1cHBvcnRlZCBvbiB0aGlzIHBsYXRmb3JtLiIKICNlbmRpZgotLSAKMS42LjAuNAoK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34129</attachid>
            <date>2009-08-05 04:44:39 -0700</date>
            <delta_ts>2009-08-11 08:22:20 -0700</delta_ts>
            <desc>Add optimize call support for ARM JIT v3</desc>
            <filename>0003-Add-optimize-call-support-for-ARM-JIT.patch</filename>
            <type>text/plain</type>
            <size>6775</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSAxNDg4MjYxNWUzZmUwYWJhNTY3NjAxNDIyMDBlMmY3MmQ5OTRlMTc1IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogV2VkLCA1IEF1ZyAyMDA5IDEwOjAwOjAwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIG9w
dGltaXplIGNhbGwgc3VwcG9ydCBmb3IgQVJNIEpJVC4KClNpZ25lZC1vZmYtYnk6IEdhYm9yIExv
a2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyAg
ICAgICAgICAgICAgICAgICAgIHwgICAyMiArKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0
Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaCB8ICAgIDcgKysrKystCiBKYXZhU2Ny
aXB0Q29yZS9qaXQvSklULmggICAgICAgICAgICAgICAgICAgICB8ICAgMzAgKysrKysrKysrKysr
KysrKysrKysrKysrKysKIEphdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcCAgICAgICAgICAg
ICAgIHwgICAgMSArCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oICAgICAg
ICB8ICAgMTYgKysrKysrKysrKysrKwogNSBmaWxlcyBjaGFuZ2VkLCA3NSBpbnNlcnRpb25zKCsp
LCAxIGRlbGV0aW9ucygtKQoKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZyBi
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwppbmRleCA2ZDMxN2UyLi5kYWU1ZjU3IDEwMDY0NAot
LS0gYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKKysrIGIvSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMDktMDgtMDUgIEdhYm9yIExva2kgIDxsb2tpQGluZi51
LXN6ZWdlZC5odT4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBBZGQgb3B0aW1pemUgY2FsbCBzdXBwb3J0IGZvciBBUk0gSklULgorICAgICAgICBodHRw
czovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAgICAgICBGb3Ig
dGlnaHRseSBjb3VwbGVkIHNlcXVlbmNlcyB0aGUgJ2Vuc3VyZVNwYWNlRm9yJyBmdW5jdGlvbiBo
YXMKKyAgICAgICAgYmVlbiBpbnRyb2R1Y2VkIHdoaWNoIGRlc2NyaWJlcyBob3cgbWFueSBpbnN0
cnVjdGlvbnMgYW5kIGNvbnN0YW50cworICAgICAgICBhcmUgaW4gdGhlIGRpZmZlcmVudCBzZXF1
ZW5jZXMuCisKKyAgICAgICAgKiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAg
ICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6
TWFjcm9Bc3NlbWJsZXJBUk06OnByZXBhcmVDYWxsKToKKyAgICAgICAgKiBqaXQvSklULmg6Cisg
ICAgICAgIChKU0M6OkpJVDo6KToKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6CisgICAgICAg
IChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElubGluZU1ldGhv
ZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjplbWl0TmFrZWRDYWxsKToKKyAgICAgICAgKEpTQzo6
SklUOjplbnN1cmVTcGFjZUZvcik6CisKIDIwMDktMDgtMDUgIFpvbHRhbiBIZXJjemVnICA8emhl
cmN6ZWdAaW5mLnUtc3plZ2VkLmh1PgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVy
QVJNLmggYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaAppbmRl
eCBiMDRlZDEzLi42ZTI2MTM5IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIv
TWFjcm9Bc3NlbWJsZXJBUk0uaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvTWFjcm9B
c3NlbWJsZXJBUk0uaApAQCAtNzIyLDkgKzcyMiwxNCBAQCBwcm90ZWN0ZWQ6CiAgICAgICAgIHJl
dHVybiBzdGF0aWNfY2FzdDxBUk1Bc3NlbWJsZXI6OkNvbmRpdGlvbj4oY29uZCk7CiAgICAgfQog
CisgICAgdm9pZCBlbnN1cmVTcGFjZShpbnQgaW5zblNwYWNlLCBpbnQgY29uc3RTcGFjZSkKKyAg
ICB7CisgICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFj
ZSk7CisgICAgfQorCiAgICAgdm9pZCBwcmVwYXJlQ2FsbCgpCiAgICAgewotICAgICAgICBtX2Fz
c2VtYmxlci5lbnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJNV29yZCkp
OworICAgICAgICBlbnN1cmVTcGFjZSgzICogc2l6ZW9mKEFSTVdvcmQpLCBzaXplb2YoQVJNV29y
ZCkpOwogCiAgICAgICAgIC8vIFMwIG1pZ2h0IGJlIHVzZWQgZm9yIHBhcmFtZXRlciBwYXNzaW5n
CiAgICAgICAgIG1fYXNzZW1ibGVyLmFkZF9yKEFSTTo6UzEsIEFSTTo6cGMsIEFSTUFzc2VtYmxl
cjo6T1AyX0lNTSB8IDB4NCk7CmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgg
Yi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggNjkyMTM4MS4uMzg5NDg5OCAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVQuaApAQCAtMTc3LDYgKzE3NywxMSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdXNpbmcg
TWFjcm9Bc3NlbWJsZXI6Okp1bXBMaXN0OwogICAgICAgICB1c2luZyBNYWNyb0Fzc2VtYmxlcjo6
TGFiZWw7CiAKKyAgICAgICAgLy8gTG9uZyBzZXF1ZW5jZXMgd2hpY2ggc2hvdWxkIGJlIHRpZ2h0
bHkgY291cGxlZAorICAgICAgICBlbnVtIExvbmdTZXF1ZW5jZXMgeworICAgICAgICAgICAgc2Vx
dWVuY2VPcENhbGwsCisgICAgICAgIH07CisKICAgICAgICAgLy8gTk9URVM6CiAgICAgICAgIC8v
CiAgICAgICAgIC8vIHJlZ1QwIGhhcyB0d28gc3BlY2lhbCBtZWFuaW5ncy4gIFRoZSByZXR1cm4g
dmFsdWUgZnJvbSBhIHN0dWIKQEAgLTQ3Niw2ICs0ODEsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgCiAgICAgICAgIHZvaWQga2lsbExhc3RSZXN1bHRSZWdpc3RlcigpOwogCisgICAgICAg
IHZvaWQgZW5zdXJlU3BhY2VGb3IoTG9uZ1NlcXVlbmNlcyBzZXEpOworCiAgICAgICAgIEp1bXAg
ZW1pdEp1bXBJZkpTQ2VsbChSZWdpc3RlcklEKTsKICAgICAgICAgSnVtcCBlbWl0SnVtcElmQm90
aEpTQ2VsbHMoUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCwgUmVnaXN0ZXJJRCk7CiAgICAgICAgIHZv
aWQgZW1pdEp1bXBTbG93Q2FzZUlmSlNDZWxsKFJlZ2lzdGVySUQpOwpAQCAtNTk1LDYgKzYwMiwy
OSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHJvdG9PYmogPSAxODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA0NjsKKyNlbGlmIFBMQVRG
T1JNKEFSTSkKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFy
ZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4K
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSAw
OyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4
dGVybmFsTG9hZCA9IDA7IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hM
ZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDA7IC8vIEZJWE1F
CisgICAgICAgIC8vIFRoZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0
byBlbmFibGUgcGF0Y2hpbmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gMDsgLy8gRklY
TUUKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Ns
b3dDYXNlID0gMDsgLy8gRklYTUUKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dEdldEJ5SWRFeHRlcm5hbExvYWQgPSAwOyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoTGVuZ3RoR2V0QnlJZEV4dGVybmFsTG9hZCA9IDA7IC8vIEZJWE1FCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAw
OyAvLyBGSVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1
dFJlc3VsdCA9IDA7IC8vIEZJWE1FCisjaWYgRU5BQkxFKE9QQ09ERV9TQU1QTElORykKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTbG93Q2FzZUNhbGwgPSAwOyAv
LyBGSU1YRQorI2Vsc2UKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5
SWRTbG93Q2FzZUNhbGwgPSAwOyAvLyBGSVhNRQorI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25z
dCBpbnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMTI7CisKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAwOyAvLyBGSVhN
RQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b1N0
cnVjdCA9IDA7IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRN
ZXRob2RDaGVja1B1dEZ1bmN0aW9uID0gMDsgLy8gRklYTUUKICNlbmRpZgogI2VuZGlmIC8vIFVT
RShKU1ZBTFVFMzJfNjQpCiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCBmYjFmMmUxLi4zMjc4
YTVmIDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC02MTYsNiArNjE2LDcgQEAgdm9pZCBKSVQ6
OmNvbXBpbGVPcENhbGwoT3Bjb2RlSUQgb3Bjb2RlSUQsIEluc3RydWN0aW9uKiBpbnN0cnVjdGlv
biwgdW5zaWduZWQgY2EKICAgICAvLyBUaGlzIHBsYW50cyBhIGNoZWNrIGZvciBhIGNhY2hlZCBK
U0Z1bmN0aW9uIHZhbHVlLCBzbyB3ZSBjYW4gcGxhbnQgYSBmYXN0IGxpbmsgdG8gdGhlIGNhbGxl
ZS4KICAgICAvLyBUaGlzIGRlbGliZXJhdGVseSBsZWF2ZXMgdGhlIGNhbGxlZSBpbiBlY3gsIHVz
ZWQgd2hlbiBzZXR0aW5nIHVwIHRoZSBzdGFjayBmcmFtZSBiZWxvdwogICAgIGVtaXRHZXRWaXJ0
dWFsUmVnaXN0ZXIoY2FsbGVlLCByZWdUMik7CisgICAgZW5zdXJlU3BhY2VGb3Ioc2VxdWVuY2VP
cENhbGwpOwogICAgIERhdGFMYWJlbFB0ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOwog
ICAgIEp1bXAganVtcFRvU2xvdyA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgcmVnVDIs
IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2ssIEltbVB0cihKU1ZhbHVlOjplbmNvZGUoSlNW
YWx1ZSgpKSkpOwogICAgIGFkZFNsb3dDYXNlKGp1bXBUb1Nsb3cpOwpkaWZmIC0tZ2l0IGEvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9K
SVRJbmxpbmVNZXRob2RzLmgKaW5kZXggYjVhYWFmYy4uMTBhYjRiZSAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC05OCwxMCArOTgsMjYgQEAgQUxXQVlTX0lOTElORSBK
SVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24pCiAgICAgQVNTRVJU
KG1fYnl0ZWNvZGVJbmRleCAhPSAodW5zaWduZWQpLTEpOyAvLyBUaGlzIG1ldGhvZCBzaG91bGQg
b25seSBiZSBjYWxsZWQgZHVyaW5nIGhvdC9jb2xkIHBhdGggZ2VuZXJhdGlvbiwgc28gdGhhdCBt
X2J5dGVjb2RlSW5kZXggaXMgc2V0LgogCiAgICAgQ2FsbCBuYWtlZENhbGwgPSBuZWFyQ2FsbCgp
OworICAgIG5ha2VkQ2FsbC5lbmFibGVMYXRlUGF0Y2goKTsKICAgICBtX2NhbGxzLmFwcGVuZChD
YWxsUmVjb3JkKG5ha2VkQ2FsbCwgbV9ieXRlY29kZUluZGV4LCBmdW5jdGlvbi5leGVjdXRhYmxl
QWRkcmVzcygpKSk7CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAorQUxXQVlTX0lOTElORSB2
b2lkIEpJVDo6ZW5zdXJlU3BhY2VGb3IoTG9uZ1NlcXVlbmNlcyBzZXEpCit7CisjaWYgUExBVEZP
Uk0oQVJNKSAmJiAhUExBVEZPUk1fQVJNX0FSQ0goNykKKyAgICBzd2l0Y2ggKHNlcSkgeworICAg
IGNhc2Ugc2VxdWVuY2VPcENhbGw6CisgICAgICAgIGVuc3VyZVNwYWNlKDEyLCA4KTsKKyAgICAg
ICAgcmV0dXJuOworICAgIGRlZmF1bHQ6CisgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwor
ICAgIH0KKyNlbHNlCisgICAgVU5VU0VEX1BBUkFNKHNlcSk7CisjZW5kaWYKK30KKwogI2lmIFBM
QVRGT1JNKFg4NikgfHwgUExBVEZPUk0oWDg2XzY0KSB8fCAoUExBVEZPUk0oQVJNKSAmJiAhUExB
VEZPUk1fQVJNX0FSQ0goNykpCiAKIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OnByZXNlcnZlUmV0
dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKLS0gCjEuNi4wLjQKCg==
</data>
<flag name="review"
          id="18293"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34130</attachid>
            <date>2009-08-05 04:45:35 -0700</date>
            <delta_ts>2009-08-11 08:22:20 -0700</delta_ts>
            <desc>Add property access support for ARM JIT v3</desc>
            <filename>0004-Add-property-access-support-for-ARM-JIT.patch</filename>
            <type>text/plain</type>
            <size>10926</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA2MTAwZGUyNjYwY2U3NmI1YTAzN2NmZWRlZDRhM2Q3ZDBlMjU5YTg0IE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogV2VkLCA1IEF1ZyAyMDA5IDEwOjAwOjAwICswMjAwClN1YmplY3Q6IFtQQVRDSF0gQWRkIHBy
b3BlcnR5IGFjY2VzcyBzdXBwb3J0IGZvciBBUk0gSklULgoKU2lnbmVkLW9mZi1ieTogR2Fib3Ig
TG9raSA8bG9raUBpbmYudS1zemVnZWQuaHU+Ci0tLQogSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9n
ICAgICAgICAgICAgICAgICAgfCAgIDI4ICsrKysrKysrKysrKysrKysrKysrKysrCiBKYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCB8ICAgMTIgKysrKysrKy0tCiBKYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggICB8ICAgMTAgKysrKy0tLS0KIEph
dmFTY3JpcHRDb3JlL2ppdC9KSVQuaCAgICAgICAgICAgICAgICAgIHwgICAzNCArKysrKysrKysr
KysrKysrLS0tLS0tLS0tLS0tCiBKYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5o
ICAgICB8ICAgMTIgKysrKysrKysrKwogSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNj
ZXNzLmNwcCAgfCAgICA3ICsrKysrKwogNiBmaWxlcyBjaGFuZ2VkLCA4MCBpbnNlcnRpb25zKCsp
LCAyMyBkZWxldGlvbnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cg
Yi9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKaW5kZXggZGFlNWY1Ny4uNDc4NmY3MyAxMDA2NDQK
LS0tIGEvSmF2YVNjcmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5n
ZUxvZwpAQCAtMiw2ICsyLDM0IEBACiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BT
ISkuCiAKKyAgICAgICAgQWRkIHByb3BlcnR5IGFjY2VzcyBzdXBwb3J0IGZvciBBUk0gSklULgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKwor
ICAgICAgICBFbnN1cmUgSklUU3R1YkNhbGw6OmFkZEFyZ3VtZW50KiBmdW5jdGlvbnMgdGFrZSB0
aGUgc2FtZSBudW1iZXIgb2YKKyAgICAgICAgbWFjaGluZSBpbnN0cnVjdGlvbnMgZm9yIGV2ZXJ5
IHBhcmFtZXRlcnMgYW5kIGRvIG5vdCBjb252ZXJ0IExEUiBqdW1wcworICAgICAgICBpbnRvIGJy
YW5jaGVzIGR1cmluZyBleGVjdXRhYmxlQ29weSBpZiB0aGUgbGF0ZVBhdGNoIGZsYWcgaXMgc2V0
LgorCisgICAgICAgICogYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHA6CisgICAgICAgIChKU0M6
OkFSTUFzc2VtYmxlcjo6ZXhlY3V0YWJsZUNvcHkpOgorICAgICAgICAqIGFzc2VtYmxlci9BUk1B
c3NlbWJsZXIuaDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpKbXBTcmM6OkptcFNyYyk6
CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjplbmFibGVMYXRlUGF0Y2gpOgor
ICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OmxpbmtKdW1wKToKKyAgICAgICAgKiBqaXQvSklU
Lmg6CisgICAgICAgIChKU0M6OkpJVDo6KToKKyAgICAgICAgKiBqaXQvSklUSW5saW5lTWV0aG9k
cy5oOgorICAgICAgICAoSlNDOjpKSVQ6OmVuc3VyZVNwYWNlRm9yKToKKyAgICAgICAgKiBqaXQv
SklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfbWV0aG9k
X2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAgICAgICAoSlNDOjpK
SVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKyAgICAgICAgKEpTQzo6SklUOjplbWl0U2xvd19vcF9w
dXRfYnlfaWQpOgorCisyMDA5LTA4LTA1ICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQu
aHU+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKICAgICAgICAgQWRk
IG9wdGltaXplIGNhbGwgc3VwcG9ydCBmb3IgQVJNIEpJVC4KICAgICAgICAgaHR0cHM6Ly9idWdz
LndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTI0OTg2CiAKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5jcHAKaW5kZXggNjlkYWExNi4uNjYyNmJjNiAxMDA2NDQKLS0tIGEv
SmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKKysrIGIvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKQEAgLTM3MSw5ICszNzEsMTUgQEAgdm9p
ZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9y
KQogCiAgICAgZm9yIChKdW1wczo6SXRlcmF0b3IgaXRlciA9IG1fanVtcHMuYmVnaW4oKTsgaXRl
ciAhPSBtX2p1bXBzLmVuZCgpOyArK2l0ZXIpIHsKICAgICAgICAgQVJNV29yZCogbGRyQWRkciA9
IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGRhdGEgKyAqaXRlcik7Ci0gICAgICAgIEFSTVdv
cmQqIG9mZnNldCA9IGdldExkckltbUFkZHJlc3MobGRyQWRkcik7Ci0gICAgICAgIGlmICgqb2Zm
c2V0ICE9IDB4ZmZmZmZmZmYpCi0gICAgICAgICAgICBsaW5rQnJhbmNoKGRhdGEsIEptcFNyYygq
aXRlciksIGRhdGEgKyAqb2Zmc2V0KTsKKyAgICAgICAgQVJNV29yZCBvZmZzZXQgPSAqZ2V0TGRy
SW1tQWRkcmVzcyhsZHJBZGRyKTsKKyAgICAgICAgaWYgKG9mZnNldCAhPSAweGZmZmZmZmZmKSB7
CisgICAgICAgICAgICBKbXBTcmMgam1wU3JjKCppdGVyKTsKKyAgICAgICAgICAgIGlmIChvZmZz
ZXQgJiAweDEpIHsKKyAgICAgICAgICAgICAgICBvZmZzZXQgPSBvZmZzZXQgJiB+MHgxOworICAg
ICAgICAgICAgICAgIGptcFNyYy5lbmFibGVMYXRlUGF0Y2goKTsKKyAgICAgICAgICAgIH0KKyAg
ICAgICAgICAgIGxpbmtCcmFuY2goZGF0YSwgam1wU3JjLCBkYXRhICsgb2Zmc2V0KTsKKyAgICAg
ICAgfQogICAgIH0KIAogICAgIHJldHVybiBkYXRhOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FS
TUFzc2VtYmxlci5oCmluZGV4IGQzZmU3ODIuLjg2NmQ3ZGIgMTAwNjQ0Ci0tLSBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmgKQEAgLTE4MCwyMCArMTgwLDIwIEBAIG5hbWVzcGFjZSBBUk0g
ewogICAgICAgICBwdWJsaWM6CiAgICAgICAgICAgICBKbXBTcmMoKQogICAgICAgICAgICAgICAg
IDogbV9vZmZzZXQoLTEpCi0gICAgICAgICAgICAgICAgLCBtX2xhdGVQYXRjaChmYWxzZSkKKyAg
ICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKDApCiAgICAgICAgICAgICB7CiAgICAgICAgICAg
ICB9CiAKLSAgICAgICAgICAgIHZvaWQgZW5hYmxlTGF0ZVBhdGNoKCkgeyBtX2xhdGVQYXRjaCA9
IHRydWU7IH0KKyAgICAgICAgICAgIHZvaWQgZW5hYmxlTGF0ZVBhdGNoKCkgeyBtX2xhdGVQYXRj
aCA9IDE7IH0KICAgICAgICAgcHJpdmF0ZToKICAgICAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0
KQogICAgICAgICAgICAgICAgIDogbV9vZmZzZXQob2Zmc2V0KQotICAgICAgICAgICAgICAgICwg
bV9sYXRlUGF0Y2goZmFsc2UpCisgICAgICAgICAgICAgICAgLCBtX2xhdGVQYXRjaCgwKQogICAg
ICAgICAgICAgewogICAgICAgICAgICAgfQogCiAgICAgICAgICAgICBpbnQgbV9vZmZzZXQgOiAz
MTsKLSAgICAgICAgICAgIGludCBtX2xhdGVQYXRjaCA6IDE7CisgICAgICAgICAgICB1bnNpZ25l
ZCBpbnQgbV9sYXRlUGF0Y2ggOiAxOwogICAgICAgICB9OwogCiAgICAgICAgIGNsYXNzIEptcERz
dCB7CkBAIC02NDUsNyArNjQ1LDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIHZvaWQgbGlu
a0p1bXAoSm1wU3JjIGZyb20sIEptcERzdCB0bykKICAgICAgICAgewogICAgICAgICAgICAgQVJN
V29yZCogaW5zbiA9IHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KG1fYnVmZmVyLmRhdGEoKSkg
KyAoZnJvbS5tX29mZnNldCAvIHNpemVvZihBUk1Xb3JkKSk7Ci0gICAgICAgICAgICAqZ2V0TGRy
SW1tQWRkcmVzcyhpbnNuLCBtX2J1ZmZlci5wb29sQWRkcmVzcygpKSA9IHN0YXRpY19jYXN0PEFS
TVdvcmQ+KHRvLm1fb2Zmc2V0KTsKKyAgICAgICAgICAgICpnZXRMZHJJbW1BZGRyZXNzKGluc24s
IG1fYnVmZmVyLnBvb2xBZGRyZXNzKCkpID0gc3RhdGljX2Nhc3Q8QVJNV29yZD4odG8ubV9vZmZz
ZXQpIHwgZnJvbS5tX2xhdGVQYXRjaDsKICAgICAgICAgfQogCiAgICAgICAgIHN0YXRpYyB2b2lk
IGxpbmtKdW1wKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKZGlmZiAtLWdpdCBh
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaAppbmRl
eCAzODk0ODk4Li43MTgxMDQ3IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgK
KysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCkBAIC0xODAsNiArMTgwLDEwIEBAIG5hbWVz
cGFjZSBKU0MgewogICAgICAgICAvLyBMb25nIHNlcXVlbmNlcyB3aGljaCBzaG91bGQgYmUgdGln
aHRseSBjb3VwbGVkCiAgICAgICAgIGVudW0gTG9uZ1NlcXVlbmNlcyB7CiAgICAgICAgICAgICBz
ZXF1ZW5jZU9wQ2FsbCwKKyAgICAgICAgICAgIHNlcXVlbmNlTWV0aG9kQ2hlY2ssCisgICAgICAg
ICAgICBzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoLAorICAgICAgICAgICAgc2VxdWVuY2VHZXRCeUlk
U2xvd0Nhc2UsCisgICAgICAgICAgICBzZXF1ZW5jZVB1dEJ5SWQsCiAgICAgICAgIH07CiAKICAg
ICAgICAgLy8gTk9URVM6CkBAIC02MDQsMjcgKzYwOCwyNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24g
PSA0NjsKICNlbGlmIFBMQVRGT1JNKEFSTSkKICAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJl
IHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50
IG9uIG9wX3B1dF9ieV9pZC4KLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1
dEJ5SWRTdHJ1Y3R1cmUgPSAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRp
YyBjb25zdCBpbnQgcGF0Y2hMZW5ndGhQdXRCeUlkRXh0ZXJuYWxMb2FkID0gMDsgLy8gRklYTUUK
LSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9m
ZnNldCA9IDA7IC8vIEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQ
dXRCeUlkU3RydWN0dXJlID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dFB1dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQgPSA0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50
IHBhdGNoT2Zmc2V0UHV0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjA7CiAgICAgICAgIC8vIFRo
ZXNlIGFyY2hpdGVjdHVyZSBzcGVjaWZpYyB2YWx1ZSBhcmUgdXNlZCB0byBlbmFibGUgcGF0Y2hp
bmcgLSBzZWUgY29tbWVudCBvbiBvcF9nZXRfYnlfaWQuCi0gICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0dXJlID0gMDsgLy8gRklYTUUKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFuY2hUb1Nsb3dDYXNlID0gMDsgLy8g
RklYTUUKLSAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRFeHRlcm5h
bExvYWQgPSAwOyAvLyBGSVhNRQotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3Ro
R2V0QnlJZEV4dGVybmFsTG9hZCA9IDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHJvcGVydHlNYXBPZmZzZXQgPSAwOyAvLyBGSVhNRQotICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDA7IC8v
IEZJWE1FCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU3RydWN0
dXJlID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRCcmFu
Y2hUb1Nsb3dDYXNlID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRH
ZXRCeUlkRXh0ZXJuYWxMb2FkID0gMTY7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hM
ZW5ndGhHZXRCeUlkRXh0ZXJuYWxMb2FkID0gNDsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBw
YXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCA9IDIwOworICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZFB1dFJlc3VsdCA9IDI4OwogI2lmIEVOQUJMRShP
UENPREVfU0FNUExJTkcpCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRC
eUlkU2xvd0Nhc2VDYWxsID0gMDsgLy8gRklNWEUKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FN
UExJTkcgaXMgbm90IHlldCBzdXBwb3J0ZWQiCiAjZWxzZQotICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHBhdGNoT2Zmc2V0R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDA7IC8vIEZJWE1FCisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsID0gMzY7CiAj
ZW5kaWYKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVU
b0p1bXAgPSAxMjsKIAotICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9k
Q2hlY2tQcm90b09iaiA9IDA7IC8vIEZJWE1FCi0gICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRNZXRob2RDaGVja1Byb3RvU3RydWN0ID0gMDsgLy8gRklYTUUKLSAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAwOyAvLyBG
SVhNRQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90
b09iaiA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0TWV0aG9kQ2hl
Y2tQcm90b1N0cnVjdCA9IDIwOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
TWV0aG9kQ2hlY2tQdXRGdW5jdGlvbiA9IDMyOwogI2VuZGlmCiAjZW5kaWYgLy8gVVNFKEpTVkFM
VUUzMl82NCkKIApkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhv
ZHMuaCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggMTBhYjRi
ZS4uMDEzY2RmMCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhv
ZHMuaAorKysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMTAs
NiArMTEwLDE4IEBAIEFMV0FZU19JTkxJTkUgdm9pZCBKSVQ6OmVuc3VyZVNwYWNlRm9yKExvbmdT
ZXF1ZW5jZXMgc2VxKQogICAgIGNhc2Ugc2VxdWVuY2VPcENhbGw6CiAgICAgICAgIGVuc3VyZVNw
YWNlKDEyLCA4KTsKICAgICAgICAgcmV0dXJuOworICAgIGNhc2Ugc2VxdWVuY2VNZXRob2RDaGVj
azoKKyAgICAgICAgZW5zdXJlU3BhY2UoNTIsIDMyKTsKKyAgICAgICAgcmV0dXJuOworICAgIGNh
c2Ugc2VxdWVuY2VHZXRCeUlkSG90UGF0aDoKKyAgICAgICAgZW5zdXJlU3BhY2UoMjgsIDEyKTsK
KyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ugc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2U6CisgICAg
ICAgIGVuc3VyZVNwYWNlKDM2LCA4KTsKKyAgICAgICAgcmV0dXJuOworICAgIGNhc2Ugc2VxdWVu
Y2VQdXRCeUlkOgorICAgICAgICBlbnN1cmVTcGFjZSgyOCwgMTIpOworICAgICAgICByZXR1cm47
CiAgICAgZGVmYXVsdDoKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgfQpkaWZm
IC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKaW5kZXggYTZhMjgzMS4uZjM2Yjhm
YSAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcAor
KysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCkBAIC0xMTIwLDYg
KzExMjAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24qIGN1
cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBEbyB0aGUgbWV0aG9kIGNoZWNrIC0gY2hlY2sgdGhl
IG9iamVjdCAmIGl0cyBwcm90b3R5cGUncyBzdHJ1Y3R1cmUgaW5saW5lICh0aGlzIGlzIHRoZSBj
b21tb24gY2FzZSkuCiAgICAgbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChNZXRo
b2RDYWxsQ29tcGlsYXRpb25JbmZvKG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4KSk7
CiAgICAgTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fbWV0aG9kQ2FsbENvbXBp
bGF0aW9uSW5mby5sYXN0KCk7CisKKyAgICBlbnN1cmVTcGFjZUZvcihzZXF1ZW5jZU1ldGhvZENo
ZWNrKTsKICAgICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90SlNDZWxsKHJlZ1QwKTsKICAg
ICBKdW1wIHN0cnVjdHVyZUNoZWNrID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRy
ZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBtX3N0cnVjdHVyZSkpLCBpbmZvLnN0
cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0
QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgRGF0YUxhYmVsUHRyIHByb3RvU3RydWN0dXJl
VG9Db21wYXJlLCBwcm90b09iaiA9IG1vdmVXaXRoUGF0Y2goSW1tUHRyKDApLCByZWdUMSk7CkBA
IC0xMTkwLDYgKzExOTIsNyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCwg
aW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiwgdW5zaWduZWQgcHJvcGVydAogCiAgICAgZW1pdEp1
bXBTbG93Q2FzZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAgICBlbnN1cmVTcGFj
ZUZvcihzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhp
cyk7CiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKIApAQCAtMTIzMSw2
ICsxMjM0LDcgQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZS
ZWcsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciogaWRlbnQKICAgICBsaW5rU2xvd0Nhc2VJZk5v
dEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlua1Nsb3dDYXNlKGl0ZXIpOwogCisgICAg
ZW5zdXJlU3BhY2VGb3Ioc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOwogI2lmbmRlZiBOREVCVUcK
ICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogI2VuZGlmCkBAIC0xMjM4LDYgKzEyNDIs
NyBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50
IGJhc2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudAogICAgIHN0dWJDYWxsLmFkZEFyZ3VtZW50KHJl
Z1QwKTsKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKICAgICBDYWxs
IGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJlc3VsdFZSZWcpOworICAgIGNhbGwuZW5hYmxlTGF0ZVBh
dGNoKCk7CiAKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4oY29sZFBhdGhCZWdpbiwgY2Fs
bCkgPT0gcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKIApAQCAtMTI2Miw2ICsxMjY3
LDcgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJyZW50SW5z
dHJ1Y3Rpb24pCiAgICAgLy8gSnVtcCB0byBhIHNsb3cgY2FzZSBpZiBlaXRoZXIgdGhlIGJhc2Ug
b2JqZWN0IGlzIGFuIGltbWVkaWF0ZSwgb3IgaWYgdGhlIFN0cnVjdHVyZSBkb2VzIG5vdCBtYXRj
aC4KICAgICBlbWl0SnVtcFNsb3dDYXNlSWZOb3RKU0NlbGwocmVnVDAsIGJhc2VWUmVnKTsKIAor
ICAgIGVuc3VyZVNwYWNlRm9yKHNlcXVlbmNlUHV0QnlJZCk7CiAgICAgTGFiZWwgaG90UGF0aEJl
Z2luKHRoaXMpOwogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlB
Y2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47CiAKQEAg
LTEyOTUsNiArMTMwMSw3IEBAIHZvaWQgSklUOjplbWl0U2xvd19vcF9wdXRfYnlfaWQoSW5zdHJ1
Y3Rpb24qIGN1cnJlbnRJbnN0cnVjdGlvbiwgVmVjdG9yPFNsb3dDYXNlCiAgICAgc3R1YkNhbGwu
YWRkQXJndW1lbnQoSW1tUHRyKGlkZW50KSk7CiAgICAgc3R1YkNhbGwuYWRkQXJndW1lbnQocmVn
VDEpOwogICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwoKTsKKyAgICBjYWxsLmVuYWJsZUxh
dGVQYXRjaCgpOwogCiAgICAgLy8gVHJhY2sgdGhlIGxvY2F0aW9uIG9mIHRoZSBjYWxsOyB0aGlz
IHdpbGwgYmUgdXNlZCB0byByZWNvdmVyIHBhdGNoIGluZm9ybWF0aW9uLgogICAgIG1fcHJvcGVy
dHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5j
YWxsUmV0dXJuTG9jYXRpb24gPSBjYWxsOwotLSAKMS42LjAuNAoK
</data>
<flag name="review"
          id="18294"
          type_id="1"
          status="-"
          setter="barraclough"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34558</attachid>
            <date>2009-08-11 07:59:28 -0700</date>
            <delta_ts>2009-08-11 08:22:20 -0700</delta_ts>
            <desc>a</desc>
            <filename>0001-Add-optimize-call-and-property-access-support-for-AR.patch</filename>
            <type>text/plain</type>
            <size>24503</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA1YmM3NDYzMTMyYTJjNDJiOWUzNTBkZDY1Yzg3N2RhMzgwODNjNmJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAxMSBBdWcgMjAwOSAxNjo0ODozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBv
cHRpbWl6ZSBjYWxsIGFuZCBwcm9wZXJ0eSBhY2Nlc3Mgc3VwcG9ydCBmb3IgQVJNIEpJVC4KClNp
Z25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MCArKysr
KysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAg
ICAgICAgICB8ICAgMjEgKysrKystLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oICAgICAgICAgICAgfCAgIDIyICsrKystLS0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oICAgICAgICAgIHwgICAgMSAtCiBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oICB8ICAgMTAgLS0tCiAuLi4vYXNzZW1ibGVy
L0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjMgKysrKysrLS0KIEph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oICAgICAgIHwgICAzMCAr
KysrKystLS0tCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggICAgICAg
ICAgICB8ICAgIDEgLQogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDYwICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKysKIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAgICAgICAgICAgIHwgICAzMyArKysrKysrKysrKwog
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCAgICAgICAgICAgfCAgIDIx
ICsrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmZWE1Zi4uN2IyNjE4ZiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUzIEBACisyMDA5LTA4LTExICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG9w
dGltaXplIGNhbGwgYW5kIHByb3BlcnR5IGFjY2VzcyBzdXBwb3J0IGZvciBBUk0gSklULgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAg
ICAgICBGb3IgdGlnaHRseSBjb3VwbGVkIHNlcXVlbmNlcyB0aGUgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRSBhbmQKKyAgICAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UgbWFjcm9z
IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdoaWNoIGVuc3VyZQorICAgICAgICBzcGFjZSBmb3IgaW5z
dHJ1Y3Rpb25zIGFuZCBjb25zdGFudHMgb2YgdGhlIG5hbWVkIHNlcXVlbmNlLiBUaGlzCisgICAg
ICAgIG1ldGhvZCBpcyB2aXRhbCBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlIHdoaWNoIGFyZSB1c2lu
ZyBjb25zdGFudCBwb29sLgorCisgICAgICAgIFRoZSAnbGF0ZVBhdGNoJyBtZXRob2QgLSB3aGlj
aCB3YXMgbGlua2VkIHRvIEptcFNyYyAtIGlzIHJlcGxhY2VkIHdpdGgKKyAgICAgICAgYSBwb3J0
IHNwZWNpZmljIHNvbHV0aW9uIChlYWNoIGNhbGxzIGFyZSBtYXJrZWQgdG8gcGxhY2UgdGhlaXIg
YWRkcmVzcworICAgICAgICBvbiB0aGUgY29uc3RhbnQgcG9vbCkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5r
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6IEFk
ZCBleHRyYSBhbGlnbiBmb3IgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMp
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6am1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sOjpmbHVzaElmTm9TcGFjZUZvcik6IEZpeCB0
aGUKKyAgICAgICAgY29tcHV0YXRpb24gb2YgdGhlIHJlbWFpbmluZyBzcGFjZS4KKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om5l
YXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmNhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbWV0aG9kX2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKwogMjAwOS0wOC0xMCAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
QW5kIGFub3RoZXIgYnVpbGQgZml4KS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5jcHAKaW5kZXggNjlkYWExNi4uYzhiMDdmYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5jcHAKQEAgLTQ5LDExICs0OSwxMSBAQCBBUk1Xb3JkKiBBUk1Bc3Nl
bWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMyX3QqIGNvbnN0UG9v
bCkKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGFkZHIgLSAoKmlu
c24gJiBTRFRfT0ZGU0VUX01BU0spKTsKIH0KIAotdm9pZCBBUk1Bc3NlbWJsZXI6OmxpbmtCcmFu
Y2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQordm9pZCBBUk1Bc3NlbWJsZXI6
OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvLCBpbnQgdXNlQ29u
c3RhbnRQb29sKQogewogICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdv
cmQqPihjb2RlKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKIAotICAgIGlm
ICghZnJvbS5tX2xhdGVQYXRjaCkgeworICAgIGlmICghdXNlQ29uc3RhbnRQb29sKSB7CiAgICAg
ICAgIGludCBkaWZmID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oaW5zbiArIDIpOwogCiAgICAgICAgIGlmICgoZGlmZiA8PSBCT0ZG
U0VUX01BWCAmJiBkaWZmID49IEJPRkZTRVRfTUlOKSkgewpAQCAtMzY3LDEzICszNjcsMjIgQEAg
dm9pZCBBUk1Bc3NlbWJsZXI6OmRvdWJsZVRyYW5zZmVyKGJvb2wgaXNMb2FkLCBGUFJlZ2lzdGVy
SUQgc3JjRHN0LCBSZWdpc3RlcklEIGIKIAogdm9pZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxl
Q29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQogeworICAgIC8vIDY0LWJpdCBhbGlnbm1l
bnQgaXMgcmVxdWlyZWQgZm9yIG5leHQgY29uc3RhbnQgcG9vbCBhbmQgSklUIGNvZGUgYXMgd2Vs
bAorICAgIG1fYnVmZmVyLmZsdXNoV2l0aG91dEJhcnJpZXIodHJ1ZSk7CisgICAgaWYgKG1fYnVm
ZmVyLnVuY2hlY2tlZFNpemUoKSAmIDB4NykKKyAgICAgICAgYmtwdCgwKTsKKwogICAgIGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5leGVjdXRhYmxlQ29weShh
bGxvY2F0b3IpKTsKIAogICAgIGZvciAoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEFSTVdvcmQq
IGxkckFkZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihkYXRhICsgKml0ZXIpOwotICAg
ICAgICBBUk1Xb3JkKiBvZmZzZXQgPSBnZXRMZHJJbW1BZGRyZXNzKGxkckFkZHIpOwotICAgICAg
ICBpZiAoKm9mZnNldCAhPSAweGZmZmZmZmZmKQotICAgICAgICAgICAgbGlua0JyYW5jaChkYXRh
LCBKbXBTcmMoKml0ZXIpLCBkYXRhICsgKm9mZnNldCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGJp
dCBpcyBzZXQgaWYgdGhlIGNvbnN0YW50IG11c3QgYmUgcGxhY2VkIG9uIGNvbnN0YW50IHBvb2wu
CisgICAgICAgIGludCBwb3MgPSAoKml0ZXIpICYgKH4weDEpOworICAgICAgICBBUk1Xb3JkKiBs
ZHJBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oZGF0YSArIHBvcyk7CisgICAgICAg
IEFSTVdvcmQgb2Zmc2V0ID0gKmdldExkckltbUFkZHJlc3MobGRyQWRkcik7CisgICAgICAgIGlm
IChvZmZzZXQgIT0gMHhmZmZmZmZmZikgeworICAgICAgICAgICAgSm1wU3JjIGptcFNyYyhwb3Mp
OworICAgICAgICAgICAgbGlua0JyYW5jaChkYXRhLCBqbXBTcmMsIGRhdGEgKyBvZmZzZXQsICgo
Kml0ZXIpICYgMSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGE7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKaW5kZXggZDNmZTc4Mi4uZDc3MDkyNCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMTgwLDIwICsxODAs
MTYgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIEptcFNy
YygpCiAgICAgICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICAgICAsIG1f
bGF0ZVBhdGNoKGZhbHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpIHsgbV9sYXRlUGF0Y2ggPSB0cnVlOyB9CiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBKbXBTcmMoaW50IG9mZnNldCkKICAgICAgICAgICAg
ICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKGZh
bHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgbV9v
ZmZzZXQgOiAzMTsKLSAgICAgICAgICAgIGludCBtX2xhdGVQYXRjaCA6IDE7CisgICAgICAgICAg
ICBpbnQgbV9vZmZzZXQ7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgSm1wRHN0IHsKQEAg
LTU2Nyw2ICs1NjMsMTEgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2UpOwogICAgICAgICB9CiAKKyAgICAgICAg
aW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICAgICAgfQorCiAgICAgICAgIEptcERz
dCBsYWJlbCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIu
c2l6ZSgpKTsKQEAgLTU4MCwxMSArNTgxLDEyIEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICAg
ICAgcmV0dXJuIGxhYmVsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKbXBTcmMgam1wKENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICBKbXBTcmMgam1wKENvbmRpdGlvbiBjYyA9IEFMLCBpbnQg
dXNlQ29uc3RhbnRQb29sID0gMCkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBzaXpl
KCk7CisgICAgICAgICAgICBlbnN1cmVTcGFjZShzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1X
b3JkKSk7CisgICAgICAgICAgICBpbnQgcyA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKICAg
ICAgICAgICAgIGxkcl91bl9pbW0oQVJNOjpwYywgMHhmZmZmZmZmZiwgY2MpOwotICAgICAgICAg
ICAgbV9qdW1wcy5hcHBlbmQocyk7CisgICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChzIHwgKHVz
ZUNvbnN0YW50UG9vbCAmIDB4MSkpOwogICAgICAgICAgICAgcmV0dXJuIEptcFNyYyhzKTsKICAg
ICAgICAgfQogCkBAIC01OTMsNyArNTk1LDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIC8v
IFBhdGNoaW5nIGhlbHBlcnMKIAogICAgICAgICBzdGF0aWMgQVJNV29yZCogZ2V0TGRySW1tQWRk
cmVzcyhBUk1Xb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sID0gMCk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgbGlua0JyYW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8sIGludCB1c2VDb25zdGFudFBvb2wgPSAwKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwYXRjaFBvaW50ZXJJbnRlcm5hbChpbnRwdHJfdCBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewpAQCAtNjYwLDcgKzY2Miw3IEBAIG5hbWVzcGFjZSBBUk0gewogCiAgICAgICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewotICAgICAgICAgICAgbGlua0JyYW5jaChjb2RlLCBmcm9tLCB0byk7CisgICAgICAgICAgICBs
aW5rQnJhbmNoKGNvZGUsIGZyb20sIHRvLCB0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IGY3ZTJmYjQuLjdjZjg4NzMgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCkBAIC00NDIsNyArNDQyLDYg
QEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxh
dGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQog
ICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBmOTI3ZWQyLi41MjVmZTk4IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKQEAgLTMyMCwxMSArMzIwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENhbGwo
anVtcC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbmFibGVM
YXRlUGF0Y2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ptcC5lbmFibGVMYXRlUGF0Y2go
KTsKLSAgICAgICAgfQotCiAgICAgICAgIEptcFNyYyBtX2ptcDsKICAgICBwcml2YXRlOgogICAg
ICAgICBGbGFncyBtX2ZsYWdzOwpAQCAtMzYxLDExICszNTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2ptcCwgbGFiZWwubV9sYWJlbCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOwotICAgICAgICB9Ci0KICAgICBwcml2
YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCmlu
ZGV4IGYxNWI3ZjMuLjI0MzEzNDggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaApAQCAtMzQsNiArMzQs
OCBAQAogI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KIAorI2RlZmluZSBXVEZfVVNFX0NPTlNUQU5UX1BPT0wgMQorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogLyoKQEAgLTE3Nyw2ICsxNzksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gQXNzZW1ibGVyQnVmZmVyOjpzaXplKCk7CiAgICAgfQogCisgICAgaW50IHVuY2hlY2tlZFNp
emUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpOworICAg
IH0KKwogICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3Ip
CiAgICAgewogICAgICAgICBmbHVzaENvbnN0YW50UG9vbChmYWxzZSk7CkBAIC0yMDcsMTAgKzIx
NCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gVGhpcyBmbHVzaGluZyBtZWNoYW5pc20g
Y2FuIGJlIGNhbGxlZCBhZnRlciBhbnkgdW5jb25kaXRpb25hbCBqdW1wcy4KLSAgICB2b2lkIGZs
dXNoV2l0aG91dEJhcnJpZXIoKQorICAgIHZvaWQgZmx1c2hXaXRob3V0QmFycmllcihib29sIGlz
Rm9yY2VkID0gZmFsc2UpCiAgICAgewogICAgICAgICAvLyBGbHVzaCBpZiBjb25zdGFudCBwb29s
IGlzIG1vcmUgdGhhbiA2MCUgZnVsbCB0byBhdm9pZCBvdmVydXNlIG9mIHRoaXMgZnVuY3Rpb24u
Ci0gICAgICAgIGlmICg1ICogbV9udW1Db25zdHMgPiAzICogbWF4UG9vbFNpemUgLyBzaXplb2Yo
dWludDMyX3QpKQorICAgICAgICBpZiAoaXNGb3JjZWQgfHwgNSAqIG1fbnVtQ29uc3RzID4gMyAq
IG1heFBvb2xTaXplIC8gc2l6ZW9mKHVpbnQzMl90KSkKICAgICAgICAgICAgIGZsdXNoQ29uc3Rh
bnRQb29sKGZhbHNlKTsKICAgICB9CiAKQEAgLTIxOSw2ICsyMjYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9wb29sOwogICAgIH0KIAorICAgIGludCBzaXplT2ZDb25zdGFudFBvb2wo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtQ29uc3RzOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGNvcnJlY3REZWx0YXMoaW50IGluc25TaXplKQogICAgIHsKQEAgLTI3Niw3ICsy
ODgsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fbnVtQ29uc3RzID09IDApCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgobV9tYXhEaXN0YW5jZSA8IG5leHRJbnNu
U2l6ZSArIG1fbGFzdENvbnN0RGVsdGEgKyBiYXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQz
Ml90KSkpCisgICAgICAgIGludCBsYXN0Q29uc3REZWx0YSA9IG1fbGFzdENvbnN0RGVsdGEgPiBu
ZXh0SW5zblNpemUgPyBtX2xhc3RDb25zdERlbHRhIC0gbmV4dEluc25TaXplIDogMDsKKyAgICAg
ICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbGFzdENvbnN0RGVsdGEgKyBi
YXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQzMl90KSkpCiAgICAgICAgICAgICBmbHVzaENv
bnN0YW50UG9vbCgpOwogICAgIH0KIApAQCAtMjg0LDggKzI5Nyw4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBpZiAobV9udW1Db25zdHMgPT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbV9sYXN0Q29uc3REZWx0
YSArIGJhcnJpZXJTaXplICsgKGludClzaXplb2YodWludDMyX3QpKSB8fAotICAgICAgICAgICAg
KG1fbnVtQ29uc3RzICsgbmV4dENvbnN0U2l6ZSAvIHNpemVvZih1aW50MzJfdCkgPj0gbWF4UG9v
bFNpemUpKQorICAgICAgICBpZiAoKG1fbWF4RGlzdGFuY2UgPCBuZXh0SW5zblNpemUgKyBtX2xh
c3RDb25zdERlbHRhICsgbmV4dENvbnN0U2l6ZSArIGJhcnJpZXJTaXplICsgKGludClzaXplb2Yo
dWludDMyX3QpKSB8fAorICAgICAgICAgICAgKG1fbnVtQ29uc3RzICogc2l6ZW9mKHVpbnQzMl90
KSArIG5leHRDb25zdFNpemUgPj0gbWF4UG9vbFNpemUpKQogICAgICAgICAgICAgZmx1c2hDb25z
dGFudFBvb2woKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNLmgKaW5kZXggYjA0ZWQxMy4uMTljYmZjYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKQEAgLTMyNCwyMCArMzI0LDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBpbnQgdXNlQ29uc3RhbnRQb29sID0gMCkKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcF9yKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAgICB9CiAK
LSAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMy
IHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgSW1tMzIgcmlnaHQsIGludCB1c2VDb25zdGFudFBvb2wgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKHJpZ2h0Lm1faXNQb2ludGVyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJfdW5f
aW1tKEFSTTo6UzAsIHJpZ2h0Lm1fdmFsdWUpOwogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21w
X3IobGVmdCwgQVJNOjpTMCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0Lm1fdmFsdWUsIEFSTTo6UzAp
KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25k
KSkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNv
bmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCkBAIC00OTcsNyArNDk3
LDcgQEAgcHVibGljOgogICAgIENhbGwgbmVhckNhbGwoKQogICAgIHsKICAgICAgICAgcHJlcGFy
ZUNhbGwoKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENhbGw6Okxp
bmthYmxlTmVhcik7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcChBUk1Bc3Nl
bWJsZXI6OkFMLCB0cnVlKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKICAgICB9CiAKICAgICBDYWxs
IGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCkBAIC01ODcsNyArNTg3LDcgQEAgcHVibGljOgogICAg
IENhbGwgY2FsbCgpCiAgICAgewogICAgICAgICBwcmVwYXJlQ2FsbCgpOwotICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoKSwgQ2FsbDo6TGlua2FibGUpOworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoQVJNQXNzZW1ibGVyOjpBTCwgdHJ1ZSksIENhbGw6Okxp
bmthYmxlKTsKICAgICB9CiAKICAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKQEAgLTYxMCw4
ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIEFSTTo6UzEpOwotICAgICAgICBKdW1w
IGp1bXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBBUk06OlMxKTsKLSAgICAgICAganVtcC5lbmFi
bGVMYXRlUGF0Y2goKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29uZCwgbGVmdCwg
QVJNOjpTMSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBqdW1wOwogICAgIH0KIApAQCAtNjE5LDgg
KzYxOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06OlMxKTsK
ICAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgQVJN
OjpTMCk7Ci0gICAgICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNvbmQsIEFSTTo6UzAsIEFSTTo6
UzEpOwotICAgICAgICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICBKdW1wIGp1bXAg
PSBicmFuY2gzMihjb25kLCBBUk06OlMwLCBBUk06OlMxLCB0cnVlKTsKICAgICAgICAgcmV0dXJu
IGp1bXA7CiAgICAgfQogCkBAIC03MjIsOSArNzIwLDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFSTUFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsKICAgICB9
CiAKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNw
YWNlKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKICAg
ICB2b2lkIHByZXBhcmVDYWxsKCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNw
YWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CisgICAgICAgIGVuc3Vy
ZVNwYWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CiAKICAgICAgICAg
Ly8gUzAgbWlnaHQgYmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcKICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkX3IoQVJNOjpTMSwgQVJNOjpwYywgQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgMHg0
KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCBmYjU4MzYxLi5i
NWI4ODA4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCkBAIC0yMzEs
NyArMjMxLDYgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IGVuYWJsZUxhdGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQg
b2Zmc2V0KQogICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggOTNm
NDdkOS4uNzdiZTAxNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNTk1LDkgKzU5NSw2MiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9PYmogPSAxODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA0NjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICAg
ICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJs
ZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA0OworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDQ7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZz
ZXQgPSAyMDsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFy
ZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4K
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSA0
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRF
eHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdl
dEJ5SWRFeHRlcm5hbExvYWQgPSA0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMjg7CisjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBzdXBw
b3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFNsb3dDYXNlQ2FsbCA9IDM2OworI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMTI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAz
MjsKICNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKKyNpZiBQTEFURk9STShB
Uk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9
IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFj
ZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlTWV0aG9kQ2hlY2sKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrSW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlTWV0aG9kQ2hlY2tDb25zdGFudFNwYWNlID0gNjsK
KyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkSG90UGF0aAorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMjg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSAz
OworICAgICAgICAvLyBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZQorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFj
ZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlUHV0QnlJZAorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlUHV0QnlJZEluc3RydWN0aW9uU3BhY2UgPSAyODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRDb25zdGFudFNwYWNlID0gMzsKKyNlbmRpZgorCisj
aWYgVVNFKENPTlNUQU5UX1BPT0wpCisjZGVmaW5lIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVO
Q0UobmFtZSkgYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNw
YWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NF
UVVFTkNFKG5hbWUpIGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9u
U3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSkKKworICAgICAgICB2b2lkIGJlZ2luVW5pbnRl
cnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKKyAgICAgICAgdm9pZCBlbmRVbmludGVycnVwdGVk
U2VxdWVuY2UoaW50LCBpbnQpOworCisjZWxzZQorI2RlZmluZSBCRUdJTl9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKG5hbWUpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUp
CisjZW5kaWYKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2JpdG5vdChJbnN0cnVjdGlvbiopOwpAQCAtODM1LDYgKzg4OCwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaW50IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXI7CiAgICAgICAg
IHVuc2lnbmVkIG1fanVtcFRhcmdldHNQb3NpdGlvbjsKICNlbmRpZgorCisjaWZuZGVmIE5ERUJV
RworI2lmIFVTRShDT05TVEFOVF9QT09MKQorICAgICAgICBMYWJlbCBtX3VuaW50ZXJydXB0ZWRJ
bnN0cnVjdGlvblNlcXVlbmNlQmVnaW47CisgICAgICAgIGludCBtX3VuaW50ZXJydXB0ZWRDb25z
dGFudFNlcXVlbmNlQmVnaW47CisjZW5kaWYKKyNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdO
TUVOVDsKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggN2Zk
Yjg0NS4uYTE5ZmFlOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNjE3LDcgKzYxNywxMyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGxlYXZl
cyB0aGUgY2FsbGVlIGluIGVjeCwgdXNlZCB3aGVuIHNldHRpbmcgdXAgdGhlIHN0YWNrIGZyYW1l
IGJlbG93CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QyKTsKICAgICBE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKKworICAgIEJFR0lOX1VO
SU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VPcENhbGwpOworCiAgICAgSnVtcCBqdW1wVG9T
bG93ID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMiwgYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjaywgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisKKyAg
ICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7CisKICAgICBhZGRT
bG93Q2FzZShqdW1wVG9TbG93KTsKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4oYWRkcmVz
c09mTGlua2VkRnVuY3Rpb25DaGVjaywganVtcFRvU2xvdykgPT0gcGF0Y2hPZmZzZXRPcENhbGxD
b21wYXJlVG9KdW1wKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggYjVhYWFmYy4uMTg4
NmU0YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMDIsNiArMTAy
LDM5IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRy
IGZ1bmN0aW9uKQogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKKyNpZiBVU0UoQ09OU1RBTlRf
UE9PTCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVu
Y2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCit7CisjaWYgUExBVEZPUk0oQVJNKSAm
JiAhUExBVEZPUk1fQVJNX0FSQ0goNykKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gRW5zdXJlIHRo
ZSBsYWJlbCBhZnRlciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0CisgICAgaW5zblNwYWNlICs9
IHNpemVvZihBUk1Xb3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7Cisj
ZW5kaWYKKworICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisKKyNlbmRp
ZgorCisjaWYgVVNFKENPTlNUQU5UX1BPT0wpCisjaWZuZGVmIE5ERUJVRworICAgIG1fdW5pbnRl
cnJ1cHRlZEluc3RydWN0aW9uU2VxdWVuY2VCZWdpbiA9IGxhYmVsKCk7CisgICAgbV91bmludGVy
cnVwdGVkQ29uc3RhbnRTZXF1ZW5jZUJlZ2luID0gc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisjZW5k
aWYKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVk
U2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCit7CisjaWYgVVNFKENPTlNU
QU5UX1BPT0wpCisgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKG1fdW5pbnRlcnJ1cHRlZElu
c3RydWN0aW9uU2VxdWVuY2VCZWdpbiwgbGFiZWwoKSkgPT0gaW5zblNwYWNlKTsKKyAgICBBU1NF
UlQoc2l6ZU9mQ29uc3RhbnRQb29sKCkgLSBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVlbmNl
QmVnaW4gPT0gY29uc3RTcGFjZSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKICNpZiBQTEFURk9S
TShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkgfHwgKFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRGT1JN
X0FSTV9BUkNIKDcpKQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAppbmRleCA5ZGJhMmUyLi44NWE3MzFkIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTExMjIsMTMgKzExMjIsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgLy8gRG8gdGhlIG1ldGhvZCBjaGVjayAtIGNoZWNrIHRoZSBvYmplY3QgJiBpdHMgcHJvdG90
eXBlJ3Mgc3RydWN0dXJlIGlubGluZSAodGhpcyBpcyB0aGUgY29tbW9uIGNhc2UpLgogICAgIG1f
bWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5m
byhtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCkpOwogICAgIE1ldGhvZENhbGxDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpOwor
CiAgICAgSnVtcCBub3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBC
RUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlTWV0aG9kQ2hlY2spOworCiAgICAg
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgaW5mby5zdHJ1
Y3R1cmVUb0NvbXBhcmUsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5
SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIERhdGFMYWJlbFB0ciBwcm90b1N0cnVjdHVyZVRv
Q29tcGFyZSwgcHJvdG9PYmogPSBtb3ZlV2l0aFBhdGNoKEltbVB0cigwKSwgcmVnVDEpOwogICAg
IEp1bXAgcHJvdG9TdHJ1Y3R1cmVDaGVjayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcHJv
dG9TdHJ1Y3R1cmVUb0NvbXBhcmUsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRj
aEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogCiAgICAgLy8gVGhpcyB3aWxsIGJlIHJlbGlu
a2VkIHRvIGxvYWQgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgZG9pbmcgYSBsb2FkLgogICAgIERhdGFM
YWJlbFB0ciBwdXRGdW5jdGlvbiA9IG1vdmVXaXRoUGF0Y2goSW1tUHRyKDApLCByZWdUMCk7CisK
KyAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU1ldGhvZENoZWNrKTsKKwog
ICAgIEp1bXAgbWF0Y2ggPSBqdW1wKCk7CiAKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4o
aW5mby5zdHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3RvT2JqKSA9PSBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9PYmopOwpAQCAtMTE5Miw2ICsxMTk5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciosIHVuc2lnbmVkIHByb3Bl
cnQKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwog
CisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRo
KTsKKwogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJl
Z2luID0gaG90UGF0aEJlZ2luOwogCkBAIC0xMjEwLDYgKzEyMTksOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUdldEJ5SWRIb3RQYXRoKGludCwgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiwgdW5zaWdu
ZWQgcHJvcGVydAogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRp
c3BsYWNlbWVudExhYmVsKSA9PSBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7
CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CisKKyAgICBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKKwogICAgIEFTU0VSVChkaWZmZXJlbmNl
QmV0d2Vlbihob3RQYXRoQmVnaW4sIHB1dFJlc3VsdCkgPT0gcGF0Y2hPZmZzZXRHZXRCeUlkUHV0
UmVzdWx0KTsKIH0KIApAQCAtMTIzMyw2ICsxMjQ1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciogaWRl
bnQKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1
ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKICNlbmRpZgpAQCAtMTI0MSw2ICsxMjU1LDggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRp
ZmllciogaWRlbnQKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKICAg
ICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJlc3VsdFZSZWcpOwogCisgICAgRU5EX1VOSU5U
RVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOworCiAgICAgQVNTRVJU
KGRpZmZlcmVuY2VCZXR3ZWVuKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNh
bGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCkBAIC0x
MjY0LDYgKzEyODAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhl
ciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRv
ZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwogCisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5
SWQpOworCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwogICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRo
QmVnaW4gPSBob3RQYXRoQmVnaW47CiAKQEAgLTEyNzksNiArMTI5Nyw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEFT
U0VSVChkaWZmZXJlbmNlQmV0d2VlbihleHRlcm5hbExvYWQsIGV4dGVybmFsTG9hZENvbXBsZXRl
KSA9PSBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQpOwogCiAgICAgRGF0YUxhYmVsMzIg
ZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEs
IEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpKTsKKworICAgIEVORF9V
TklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CisKICAgICBBU1NFUlQoZGlm
ZmVyZW5jZUJldHdlZW4oaG90UGF0aEJlZ2luLCBkaXNwbGFjZW1lbnRMYWJlbCkgPT0gcGF0Y2hP
ZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwogfQogCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34560</attachid>
            <date>2009-08-11 08:22:20 -0700</date>
            <delta_ts>2009-08-12 15:15:44 -0700</delta_ts>
            <desc>Add optimize call and property access support for ARM JIT</desc>
            <filename>0001-Add-optimize-call-and-property-access-support-for-AR.patch</filename>
            <type>text/plain</type>
            <size>24503</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA1YmM3NDYzMTMyYTJjNDJiOWUzNTBkZDY1Yzg3N2RhMzgwODNjNmJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAxMSBBdWcgMjAwOSAxNjo0ODozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBv
cHRpbWl6ZSBjYWxsIGFuZCBwcm9wZXJ0eSBhY2Nlc3Mgc3VwcG9ydCBmb3IgQVJNIEpJVC4KClNp
Z25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MCArKysr
KysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAg
ICAgICAgICB8ICAgMjEgKysrKystLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oICAgICAgICAgICAgfCAgIDIyICsrKystLS0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oICAgICAgICAgIHwgICAgMSAtCiBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oICB8ICAgMTAgLS0tCiAuLi4vYXNzZW1ibGVy
L0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjMgKysrKysrLS0KIEph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oICAgICAgIHwgICAzMCAr
KysrKystLS0tCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggICAgICAg
ICAgICB8ICAgIDEgLQogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDYwICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKysKIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAgICAgICAgICAgIHwgICAzMyArKysrKysrKysrKwog
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCAgICAgICAgICAgfCAgIDIx
ICsrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmZWE1Zi4uN2IyNjE4ZiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUzIEBACisyMDA5LTA4LTExICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG9w
dGltaXplIGNhbGwgYW5kIHByb3BlcnR5IGFjY2VzcyBzdXBwb3J0IGZvciBBUk0gSklULgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAg
ICAgICBGb3IgdGlnaHRseSBjb3VwbGVkIHNlcXVlbmNlcyB0aGUgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRSBhbmQKKyAgICAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UgbWFjcm9z
IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdoaWNoIGVuc3VyZQorICAgICAgICBzcGFjZSBmb3IgaW5z
dHJ1Y3Rpb25zIGFuZCBjb25zdGFudHMgb2YgdGhlIG5hbWVkIHNlcXVlbmNlLiBUaGlzCisgICAg
ICAgIG1ldGhvZCBpcyB2aXRhbCBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlIHdoaWNoIGFyZSB1c2lu
ZyBjb25zdGFudCBwb29sLgorCisgICAgICAgIFRoZSAnbGF0ZVBhdGNoJyBtZXRob2QgLSB3aGlj
aCB3YXMgbGlua2VkIHRvIEptcFNyYyAtIGlzIHJlcGxhY2VkIHdpdGgKKyAgICAgICAgYSBwb3J0
IHNwZWNpZmljIHNvbHV0aW9uIChlYWNoIGNhbGxzIGFyZSBtYXJrZWQgdG8gcGxhY2UgdGhlaXIg
YWRkcmVzcworICAgICAgICBvbiB0aGUgY29uc3RhbnQgcG9vbCkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5r
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6IEFk
ZCBleHRyYSBhbGlnbiBmb3IgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMp
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6am1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sOjpmbHVzaElmTm9TcGFjZUZvcik6IEZpeCB0
aGUKKyAgICAgICAgY29tcHV0YXRpb24gb2YgdGhlIHJlbWFpbmluZyBzcGFjZS4KKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om5l
YXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmNhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbWV0aG9kX2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKwogMjAwOS0wOC0xMCAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
QW5kIGFub3RoZXIgYnVpbGQgZml4KS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5jcHAKaW5kZXggNjlkYWExNi4uYzhiMDdmYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5jcHAKQEAgLTQ5LDExICs0OSwxMSBAQCBBUk1Xb3JkKiBBUk1Bc3Nl
bWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMyX3QqIGNvbnN0UG9v
bCkKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGFkZHIgLSAoKmlu
c24gJiBTRFRfT0ZGU0VUX01BU0spKTsKIH0KIAotdm9pZCBBUk1Bc3NlbWJsZXI6OmxpbmtCcmFu
Y2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQordm9pZCBBUk1Bc3NlbWJsZXI6
OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvLCBpbnQgdXNlQ29u
c3RhbnRQb29sKQogewogICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdv
cmQqPihjb2RlKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKIAotICAgIGlm
ICghZnJvbS5tX2xhdGVQYXRjaCkgeworICAgIGlmICghdXNlQ29uc3RhbnRQb29sKSB7CiAgICAg
ICAgIGludCBkaWZmID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oaW5zbiArIDIpOwogCiAgICAgICAgIGlmICgoZGlmZiA8PSBCT0ZG
U0VUX01BWCAmJiBkaWZmID49IEJPRkZTRVRfTUlOKSkgewpAQCAtMzY3LDEzICszNjcsMjIgQEAg
dm9pZCBBUk1Bc3NlbWJsZXI6OmRvdWJsZVRyYW5zZmVyKGJvb2wgaXNMb2FkLCBGUFJlZ2lzdGVy
SUQgc3JjRHN0LCBSZWdpc3RlcklEIGIKIAogdm9pZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxl
Q29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQogeworICAgIC8vIDY0LWJpdCBhbGlnbm1l
bnQgaXMgcmVxdWlyZWQgZm9yIG5leHQgY29uc3RhbnQgcG9vbCBhbmQgSklUIGNvZGUgYXMgd2Vs
bAorICAgIG1fYnVmZmVyLmZsdXNoV2l0aG91dEJhcnJpZXIodHJ1ZSk7CisgICAgaWYgKG1fYnVm
ZmVyLnVuY2hlY2tlZFNpemUoKSAmIDB4NykKKyAgICAgICAgYmtwdCgwKTsKKwogICAgIGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5leGVjdXRhYmxlQ29weShh
bGxvY2F0b3IpKTsKIAogICAgIGZvciAoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEFSTVdvcmQq
IGxkckFkZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihkYXRhICsgKml0ZXIpOwotICAg
ICAgICBBUk1Xb3JkKiBvZmZzZXQgPSBnZXRMZHJJbW1BZGRyZXNzKGxkckFkZHIpOwotICAgICAg
ICBpZiAoKm9mZnNldCAhPSAweGZmZmZmZmZmKQotICAgICAgICAgICAgbGlua0JyYW5jaChkYXRh
LCBKbXBTcmMoKml0ZXIpLCBkYXRhICsgKm9mZnNldCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGJp
dCBpcyBzZXQgaWYgdGhlIGNvbnN0YW50IG11c3QgYmUgcGxhY2VkIG9uIGNvbnN0YW50IHBvb2wu
CisgICAgICAgIGludCBwb3MgPSAoKml0ZXIpICYgKH4weDEpOworICAgICAgICBBUk1Xb3JkKiBs
ZHJBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oZGF0YSArIHBvcyk7CisgICAgICAg
IEFSTVdvcmQgb2Zmc2V0ID0gKmdldExkckltbUFkZHJlc3MobGRyQWRkcik7CisgICAgICAgIGlm
IChvZmZzZXQgIT0gMHhmZmZmZmZmZikgeworICAgICAgICAgICAgSm1wU3JjIGptcFNyYyhwb3Mp
OworICAgICAgICAgICAgbGlua0JyYW5jaChkYXRhLCBqbXBTcmMsIGRhdGEgKyBvZmZzZXQsICgo
Kml0ZXIpICYgMSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGE7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKaW5kZXggZDNmZTc4Mi4uZDc3MDkyNCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMTgwLDIwICsxODAs
MTYgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIEptcFNy
YygpCiAgICAgICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICAgICAsIG1f
bGF0ZVBhdGNoKGZhbHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpIHsgbV9sYXRlUGF0Y2ggPSB0cnVlOyB9CiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBKbXBTcmMoaW50IG9mZnNldCkKICAgICAgICAgICAg
ICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKGZh
bHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgbV9v
ZmZzZXQgOiAzMTsKLSAgICAgICAgICAgIGludCBtX2xhdGVQYXRjaCA6IDE7CisgICAgICAgICAg
ICBpbnQgbV9vZmZzZXQ7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgSm1wRHN0IHsKQEAg
LTU2Nyw2ICs1NjMsMTEgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2UpOwogICAgICAgICB9CiAKKyAgICAgICAg
aW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICAgICAgfQorCiAgICAgICAgIEptcERz
dCBsYWJlbCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIu
c2l6ZSgpKTsKQEAgLTU4MCwxMSArNTgxLDEyIEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICAg
ICAgcmV0dXJuIGxhYmVsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKbXBTcmMgam1wKENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICBKbXBTcmMgam1wKENvbmRpdGlvbiBjYyA9IEFMLCBpbnQg
dXNlQ29uc3RhbnRQb29sID0gMCkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBzaXpl
KCk7CisgICAgICAgICAgICBlbnN1cmVTcGFjZShzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1X
b3JkKSk7CisgICAgICAgICAgICBpbnQgcyA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKICAg
ICAgICAgICAgIGxkcl91bl9pbW0oQVJNOjpwYywgMHhmZmZmZmZmZiwgY2MpOwotICAgICAgICAg
ICAgbV9qdW1wcy5hcHBlbmQocyk7CisgICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChzIHwgKHVz
ZUNvbnN0YW50UG9vbCAmIDB4MSkpOwogICAgICAgICAgICAgcmV0dXJuIEptcFNyYyhzKTsKICAg
ICAgICAgfQogCkBAIC01OTMsNyArNTk1LDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIC8v
IFBhdGNoaW5nIGhlbHBlcnMKIAogICAgICAgICBzdGF0aWMgQVJNV29yZCogZ2V0TGRySW1tQWRk
cmVzcyhBUk1Xb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sID0gMCk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgbGlua0JyYW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8sIGludCB1c2VDb25zdGFudFBvb2wgPSAwKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwYXRjaFBvaW50ZXJJbnRlcm5hbChpbnRwdHJfdCBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewpAQCAtNjYwLDcgKzY2Miw3IEBAIG5hbWVzcGFjZSBBUk0gewogCiAgICAgICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewotICAgICAgICAgICAgbGlua0JyYW5jaChjb2RlLCBmcm9tLCB0byk7CisgICAgICAgICAgICBs
aW5rQnJhbmNoKGNvZGUsIGZyb20sIHRvLCB0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IGY3ZTJmYjQuLjdjZjg4NzMgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCkBAIC00NDIsNyArNDQyLDYg
QEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxh
dGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQog
ICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBmOTI3ZWQyLi41MjVmZTk4IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKQEAgLTMyMCwxMSArMzIwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENhbGwo
anVtcC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbmFibGVM
YXRlUGF0Y2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ptcC5lbmFibGVMYXRlUGF0Y2go
KTsKLSAgICAgICAgfQotCiAgICAgICAgIEptcFNyYyBtX2ptcDsKICAgICBwcml2YXRlOgogICAg
ICAgICBGbGFncyBtX2ZsYWdzOwpAQCAtMzYxLDExICszNTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2ptcCwgbGFiZWwubV9sYWJlbCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOwotICAgICAgICB9Ci0KICAgICBwcml2
YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCmlu
ZGV4IGYxNWI3ZjMuLjI0MzEzNDggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaApAQCAtMzQsNiArMzQs
OCBAQAogI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KIAorI2RlZmluZSBXVEZfVVNFX0NPTlNUQU5UX1BPT0wgMQorCiBuYW1lc3Bh
Y2UgSlNDIHsKIAogLyoKQEAgLTE3Nyw2ICsxNzksMTEgQEAgcHVibGljOgogICAgICAgICByZXR1
cm4gQXNzZW1ibGVyQnVmZmVyOjpzaXplKCk7CiAgICAgfQogCisgICAgaW50IHVuY2hlY2tlZFNp
emUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgpOworICAg
IH0KKwogICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxvY2F0b3Ip
CiAgICAgewogICAgICAgICBmbHVzaENvbnN0YW50UG9vbChmYWxzZSk7CkBAIC0yMDcsMTAgKzIx
NCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gVGhpcyBmbHVzaGluZyBtZWNoYW5pc20g
Y2FuIGJlIGNhbGxlZCBhZnRlciBhbnkgdW5jb25kaXRpb25hbCBqdW1wcy4KLSAgICB2b2lkIGZs
dXNoV2l0aG91dEJhcnJpZXIoKQorICAgIHZvaWQgZmx1c2hXaXRob3V0QmFycmllcihib29sIGlz
Rm9yY2VkID0gZmFsc2UpCiAgICAgewogICAgICAgICAvLyBGbHVzaCBpZiBjb25zdGFudCBwb29s
IGlzIG1vcmUgdGhhbiA2MCUgZnVsbCB0byBhdm9pZCBvdmVydXNlIG9mIHRoaXMgZnVuY3Rpb24u
Ci0gICAgICAgIGlmICg1ICogbV9udW1Db25zdHMgPiAzICogbWF4UG9vbFNpemUgLyBzaXplb2Yo
dWludDMyX3QpKQorICAgICAgICBpZiAoaXNGb3JjZWQgfHwgNSAqIG1fbnVtQ29uc3RzID4gMyAq
IG1heFBvb2xTaXplIC8gc2l6ZW9mKHVpbnQzMl90KSkKICAgICAgICAgICAgIGZsdXNoQ29uc3Rh
bnRQb29sKGZhbHNlKTsKICAgICB9CiAKQEAgLTIxOSw2ICsyMjYsMTEgQEAgcHVibGljOgogICAg
ICAgICByZXR1cm4gbV9wb29sOwogICAgIH0KIAorICAgIGludCBzaXplT2ZDb25zdGFudFBvb2wo
KQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtQ29uc3RzOworICAgIH0KKwogcHJpdmF0ZToK
ICAgICB2b2lkIGNvcnJlY3REZWx0YXMoaW50IGluc25TaXplKQogICAgIHsKQEAgLTI3Niw3ICsy
ODgsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fbnVtQ29uc3RzID09IDApCiAg
ICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgobV9tYXhEaXN0YW5jZSA8IG5leHRJbnNu
U2l6ZSArIG1fbGFzdENvbnN0RGVsdGEgKyBiYXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQz
Ml90KSkpCisgICAgICAgIGludCBsYXN0Q29uc3REZWx0YSA9IG1fbGFzdENvbnN0RGVsdGEgPiBu
ZXh0SW5zblNpemUgPyBtX2xhc3RDb25zdERlbHRhIC0gbmV4dEluc25TaXplIDogMDsKKyAgICAg
ICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbGFzdENvbnN0RGVsdGEgKyBi
YXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQzMl90KSkpCiAgICAgICAgICAgICBmbHVzaENv
bnN0YW50UG9vbCgpOwogICAgIH0KIApAQCAtMjg0LDggKzI5Nyw4IEBAIHByaXZhdGU6CiAgICAg
ewogICAgICAgICBpZiAobV9udW1Db25zdHMgPT0gMCkKICAgICAgICAgICAgIHJldHVybjsKLSAg
ICAgICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbV9sYXN0Q29uc3REZWx0
YSArIGJhcnJpZXJTaXplICsgKGludClzaXplb2YodWludDMyX3QpKSB8fAotICAgICAgICAgICAg
KG1fbnVtQ29uc3RzICsgbmV4dENvbnN0U2l6ZSAvIHNpemVvZih1aW50MzJfdCkgPj0gbWF4UG9v
bFNpemUpKQorICAgICAgICBpZiAoKG1fbWF4RGlzdGFuY2UgPCBuZXh0SW5zblNpemUgKyBtX2xh
c3RDb25zdERlbHRhICsgbmV4dENvbnN0U2l6ZSArIGJhcnJpZXJTaXplICsgKGludClzaXplb2Yo
dWludDMyX3QpKSB8fAorICAgICAgICAgICAgKG1fbnVtQ29uc3RzICogc2l6ZW9mKHVpbnQzMl90
KSArIG5leHRDb25zdFNpemUgPj0gbWF4UG9vbFNpemUpKQogICAgICAgICAgICAgZmx1c2hDb25z
dGFudFBvb2woKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNz
ZW1ibGVyQVJNLmgKaW5kZXggYjA0ZWQxMy4uMTljYmZjYiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKQEAgLTMyNCwyMCArMzI0LDIwIEBAIHB1Ymxp
YzoKICAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICBKdW1wIGJyYW5j
aDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmlnaHQpCisg
ICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBSZWdpc3Rl
cklEIHJpZ2h0LCBpbnQgdXNlQ29uc3RhbnRQb29sID0gMCkKICAgICB7CiAgICAgICAgIG1fYXNz
ZW1ibGVyLmNtcF9yKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJs
ZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2Vt
Ymxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAgICB9CiAK
LSAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEltbTMy
IHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVm
dCwgSW1tMzIgcmlnaHQsIGludCB1c2VDb25zdGFudFBvb2wgPSAwKQogICAgIHsKICAgICAgICAg
aWYgKHJpZ2h0Lm1faXNQb2ludGVyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5sZHJfdW5f
aW1tKEFSTTo6UzAsIHJpZ2h0Lm1fdmFsdWUpOwogICAgICAgICAgICAgbV9hc3NlbWJsZXIuY21w
X3IobGVmdCwgQVJNOjpTMCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0Lm1fdmFsdWUsIEFSTTo6UzAp
KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25k
KSkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNv
bmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaDMyKENvbmRp
dGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCkBAIC00OTcsNyArNDk3
LDcgQEAgcHVibGljOgogICAgIENhbGwgbmVhckNhbGwoKQogICAgIHsKICAgICAgICAgcHJlcGFy
ZUNhbGwoKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENhbGw6Okxp
bmthYmxlTmVhcik7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcChBUk1Bc3Nl
bWJsZXI6OkFMLCB0cnVlKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKICAgICB9CiAKICAgICBDYWxs
IGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCkBAIC01ODcsNyArNTg3LDcgQEAgcHVibGljOgogICAg
IENhbGwgY2FsbCgpCiAgICAgewogICAgICAgICBwcmVwYXJlQ2FsbCgpOwotICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoKSwgQ2FsbDo6TGlua2FibGUpOworICAgICAgICByZXR1
cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoQVJNQXNzZW1ibGVyOjpBTCwgdHJ1ZSksIENhbGw6Okxp
bmthYmxlKTsKICAgICB9CiAKICAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKQEAgLTYxMCw4
ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29uZGl0aW9u
IGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIEltbVB0ciBp
bml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIGRhdGFMYWJlbCA9
IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIEFSTTo6UzEpOwotICAgICAgICBKdW1w
IGp1bXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBBUk06OlMxKTsKLSAgICAgICAganVtcC5lbmFi
bGVMYXRlUGF0Y2goKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29uZCwgbGVmdCwg
QVJNOjpTMSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBqdW1wOwogICAgIH0KIApAQCAtNjE5LDgg
KzYxOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06OlMxKTsK
ICAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1ZSwgQVJN
OjpTMCk7Ci0gICAgICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNvbmQsIEFSTTo6UzAsIEFSTTo6
UzEpOwotICAgICAgICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICBKdW1wIGp1bXAg
PSBicmFuY2gzMihjb25kLCBBUk06OlMwLCBBUk06OlMxLCB0cnVlKTsKICAgICAgICAgcmV0dXJu
IGp1bXA7CiAgICAgfQogCkBAIC03MjIsOSArNzIwLDE5IEBAIHByb3RlY3RlZDoKICAgICAgICAg
cmV0dXJuIHN0YXRpY19jYXN0PEFSTUFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsKICAgICB9
CiAKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNwYWNlKQor
ICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBjb25zdFNw
YWNlKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7CisgICAg
ICAgIHJldHVybiBtX2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9CisKICAg
ICB2b2lkIHByZXBhcmVDYWxsKCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmVuc3VyZVNw
YWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CisgICAgICAgIGVuc3Vy
ZVNwYWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CiAKICAgICAgICAg
Ly8gUzAgbWlnaHQgYmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcKICAgICAgICAgbV9hc3Nl
bWJsZXIuYWRkX3IoQVJNOjpTMSwgQVJNOjpwYywgQVJNQXNzZW1ibGVyOjpPUDJfSU1NIHwgMHg0
KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaCBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCBmYjU4MzYxLi5i
NWI4ODA4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVy
LmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCkBAIC0yMzEs
NyArMjMxLDYgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lk
IGVuYWJsZUxhdGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQg
b2Zmc2V0KQogICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZh
U2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5kZXggOTNm
NDdkOS4uNzdiZTAxNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNTk1LDkgKzU5NSw2MiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJv
dG9PYmogPSAxODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9TdHJ1Y3QgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNl
dE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA0NjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkKKyAgICAg
ICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRvIGVuYWJs
ZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA0OworICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9IDQ7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZz
ZXQgPSAyMDsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFy
ZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9ieV9pZC4K
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1cmUgPSA0
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5jaFRvU2xv
d0Nhc2UgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRF
eHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExlbmd0aEdl
dEJ5SWRFeHRlcm5hbExvYWQgPSA0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zm
c2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjA7CisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMjg7CisjaWYgRU5BQkxFKE9QQ09ERV9T
QU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHlldCBzdXBw
b3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJ
ZFNsb3dDYXNlQ2FsbCA9IDM2OworI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0
Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMTI7CisKKyAgICAgICAgc3RhdGljIGNvbnN0
IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsKKyAgICAg
ICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSAz
MjsKICNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKKyNpZiBQTEFURk9STShB
Uk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgICAgICAvLyBzZXF1ZW5jZU9wQ2FsbAor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25TcGFjZSA9
IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3RhbnRTcGFj
ZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlTWV0aG9kQ2hlY2sKKyAgICAgICAgc3RhdGljIGNv
bnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrSW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlTWV0aG9kQ2hlY2tDb25zdGFudFNwYWNlID0gNjsK
KyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkSG90UGF0aAorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMjg7CisgICAgICAg
IHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3BhY2UgPSAz
OworICAgICAgICAvLyBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZQorICAgICAgICBzdGF0aWMgY29u
c3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOworICAg
ICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3RhbnRTcGFj
ZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlUHV0QnlJZAorICAgICAgICBzdGF0aWMgY29uc3Qg
aW50IHNlcXVlbmNlUHV0QnlJZEluc3RydWN0aW9uU3BhY2UgPSAyODsKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRDb25zdGFudFNwYWNlID0gMzsKKyNlbmRpZgorCisj
aWYgVVNFKENPTlNUQU5UX1BPT0wpCisjZGVmaW5lIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVO
Q0UobmFtZSkgYmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNw
YWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NF
UVVFTkNFKG5hbWUpIGVuZFVuaW50ZXJydXB0ZWRTZXF1ZW5jZShuYW1lICMjIEluc3RydWN0aW9u
U3BhY2UsIG5hbWUgIyMgQ29uc3RhbnRTcGFjZSkKKworICAgICAgICB2b2lkIGJlZ2luVW5pbnRl
cnJ1cHRlZFNlcXVlbmNlKGludCwgaW50KTsKKyAgICAgICAgdm9pZCBlbmRVbmludGVycnVwdGVk
U2VxdWVuY2UoaW50LCBpbnQpOworCisjZWxzZQorI2RlZmluZSBCRUdJTl9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKG5hbWUpCisjZGVmaW5lIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKG5hbWUp
CisjZW5kaWYKKwogICAgICAgICB2b2lkIGVtaXRfb3BfYWRkKEluc3RydWN0aW9uKik7CiAgICAg
ICAgIHZvaWQgZW1pdF9vcF9iaXRhbmQoSW5zdHJ1Y3Rpb24qKTsKICAgICAgICAgdm9pZCBlbWl0
X29wX2JpdG5vdChJbnN0cnVjdGlvbiopOwpAQCAtODM1LDYgKzg4OCwxMyBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgaW50IG1fbGFzdFJlc3VsdEJ5dGVjb2RlUmVnaXN0ZXI7CiAgICAgICAg
IHVuc2lnbmVkIG1fanVtcFRhcmdldHNQb3NpdGlvbjsKICNlbmRpZgorCisjaWZuZGVmIE5ERUJV
RworI2lmIFVTRShDT05TVEFOVF9QT09MKQorICAgICAgICBMYWJlbCBtX3VuaW50ZXJydXB0ZWRJ
bnN0cnVjdGlvblNlcXVlbmNlQmVnaW47CisgICAgICAgIGludCBtX3VuaW50ZXJydXB0ZWRDb25z
dGFudFNlcXVlbmNlQmVnaW47CisjZW5kaWYKKyNlbmRpZgogICAgIH0gSklUX0NMQVNTX0FMSUdO
TUVOVDsKIH0gLy8gbmFtZXNwYWNlIEpTQwogCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9q
aXQvSklUQ2FsbC5jcHAgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKaW5kZXggN2Zk
Yjg0NS4uYTE5ZmFlOCAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3Bw
CisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcApAQCAtNjE3LDcgKzYxNywxMyBA
QCB2b2lkIEpJVDo6Y29tcGlsZU9wQ2FsbChPcGNvZGVJRCBvcGNvZGVJRCwgSW5zdHJ1Y3Rpb24q
IGluc3RydWN0aW9uLCB1bnNpZ25lZCBjYQogICAgIC8vIFRoaXMgZGVsaWJlcmF0ZWx5IGxlYXZl
cyB0aGUgY2FsbGVlIGluIGVjeCwgdXNlZCB3aGVuIHNldHRpbmcgdXAgdGhlIHN0YWNrIGZyYW1l
IGJlbG93CiAgICAgZW1pdEdldFZpcnR1YWxSZWdpc3RlcihjYWxsZWUsIHJlZ1QyKTsKICAgICBE
YXRhTGFiZWxQdHIgYWRkcmVzc09mTGlua2VkRnVuY3Rpb25DaGVjazsKKworICAgIEJFR0lOX1VO
SU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VPcENhbGwpOworCiAgICAgSnVtcCBqdW1wVG9T
bG93ID0gYnJhbmNoUHRyV2l0aFBhdGNoKE5vdEVxdWFsLCByZWdUMiwgYWRkcmVzc09mTGlua2Vk
RnVuY3Rpb25DaGVjaywgSW1tUHRyKEpTVmFsdWU6OmVuY29kZShKU1ZhbHVlKCkpKSk7CisKKyAg
ICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7CisKICAgICBhZGRT
bG93Q2FzZShqdW1wVG9TbG93KTsKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4oYWRkcmVz
c09mTGlua2VkRnVuY3Rpb25DaGVjaywganVtcFRvU2xvdykgPT0gcGF0Y2hPZmZzZXRPcENhbGxD
b21wYXJlVG9KdW1wKTsKICAgICBtX2NhbGxTdHJ1Y3R1cmVTdHViQ29tcGlsYXRpb25JbmZvW2Nh
bGxMaW5rSW5mb0luZGV4XS5ob3RQYXRoQmVnaW4gPSBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrOwpkaWZmIC0tZ2l0IGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaCBi
L0phdmFTY3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKaW5kZXggYjVhYWFmYy4uMTg4
NmU0YyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAor
KysgYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCkBAIC0xMDIsNiArMTAy
LDM5IEBAIEFMV0FZU19JTkxJTkUgSklUOjpDYWxsIEpJVDo6ZW1pdE5ha2VkQ2FsbChDb2RlUHRy
IGZ1bmN0aW9uKQogICAgIHJldHVybiBuYWtlZENhbGw7CiB9CiAKKyNpZiBVU0UoQ09OU1RBTlRf
UE9PTCkKKworQUxXQVlTX0lOTElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVu
Y2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCit7CisjaWYgUExBVEZPUk0oQVJNKSAm
JiAhUExBVEZPUk1fQVJNX0FSQ0goNykKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gRW5zdXJlIHRo
ZSBsYWJlbCBhZnRlciB0aGUgc2VxdWVuY2UgY2FuIGFsc28gZml0CisgICAgaW5zblNwYWNlICs9
IHNpemVvZihBUk1Xb3JkKTsKKyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7Cisj
ZW5kaWYKKworICAgIGVuc3VyZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisKKyNlbmRp
ZgorCisjaWYgVVNFKENPTlNUQU5UX1BPT0wpCisjaWZuZGVmIE5ERUJVRworICAgIG1fdW5pbnRl
cnJ1cHRlZEluc3RydWN0aW9uU2VxdWVuY2VCZWdpbiA9IGxhYmVsKCk7CisgICAgbV91bmludGVy
cnVwdGVkQ29uc3RhbnRTZXF1ZW5jZUJlZ2luID0gc2l6ZU9mQ29uc3RhbnRQb29sKCk7CisjZW5k
aWYKKyNlbmRpZgorfQorCitBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjplbmRVbmludGVycnVwdGVk
U2VxdWVuY2UoaW50IGluc25TcGFjZSwgaW50IGNvbnN0U3BhY2UpCit7CisjaWYgVVNFKENPTlNU
QU5UX1BPT0wpCisgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKG1fdW5pbnRlcnJ1cHRlZElu
c3RydWN0aW9uU2VxdWVuY2VCZWdpbiwgbGFiZWwoKSkgPT0gaW5zblNwYWNlKTsKKyAgICBBU1NF
UlQoc2l6ZU9mQ29uc3RhbnRQb29sKCkgLSBtX3VuaW50ZXJydXB0ZWRDb25zdGFudFNlcXVlbmNl
QmVnaW4gPT0gY29uc3RTcGFjZSk7CisjZW5kaWYKK30KKworI2VuZGlmCisKICNpZiBQTEFURk9S
TShYODYpIHx8IFBMQVRGT1JNKFg4Nl82NCkgfHwgKFBMQVRGT1JNKEFSTSkgJiYgIVBMQVRGT1JN
X0FSTV9BUkNIKDcpKQogCiBBTFdBWVNfSU5MSU5FIHZvaWQgSklUOjpwcmVzZXJ2ZVJldHVybkFk
ZHJlc3NBZnRlckNhbGwoUmVnaXN0ZXJJRCByZWcpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3Bl
cnR5QWNjZXNzLmNwcAppbmRleCA5ZGJhMmUyLi44NWE3MzFkIDEwMDY0NAotLS0gYS9KYXZhU2Ny
aXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCisrKyBiL0phdmFTY3JpcHRDb3JlL2pp
dC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAKQEAgLTExMjIsMTMgKzExMjIsMjAgQEAgdm9pZCBKSVQ6
OmVtaXRfb3BfbWV0aG9kX2NoZWNrKEluc3RydWN0aW9uKiBjdXJyZW50SW5zdHJ1Y3Rpb24pCiAg
ICAgLy8gRG8gdGhlIG1ldGhvZCBjaGVjayAtIGNoZWNrIHRoZSBvYmplY3QgJiBpdHMgcHJvdG90
eXBlJ3Mgc3RydWN0dXJlIGlubGluZSAodGhpcyBpcyB0aGUgY29tbW9uIGNhc2UpLgogICAgIG1f
bWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mby5hcHBlbmQoTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5m
byhtX3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleCkpOwogICAgIE1ldGhvZENhbGxDb21w
aWxhdGlvbkluZm8mIGluZm8gPSBtX21ldGhvZENhbGxDb21waWxhdGlvbkluZm8ubGFzdCgpOwor
CiAgICAgSnVtcCBub3RDZWxsID0gZW1pdEp1bXBJZk5vdEpTQ2VsbChyZWdUMCk7CisKKyAgICBC
RUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlTWV0aG9kQ2hlY2spOworCiAgICAg
SnVtcCBzdHJ1Y3R1cmVDaGVjayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwgQWRkcmVz
cyhyZWdUMCwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgaW5mby5zdHJ1
Y3R1cmVUb0NvbXBhcmUsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRjaEdldEJ5
SWREZWZhdWx0U3RydWN0dXJlKSkpOwogICAgIERhdGFMYWJlbFB0ciBwcm90b1N0cnVjdHVyZVRv
Q29tcGFyZSwgcHJvdG9PYmogPSBtb3ZlV2l0aFBhdGNoKEltbVB0cigwKSwgcmVnVDEpOwogICAg
IEp1bXAgcHJvdG9TdHJ1Y3R1cmVDaGVjayA9IGJyYW5jaFB0cldpdGhQYXRjaChOb3RFcXVhbCwg
QWRkcmVzcyhyZWdUMSwgT0JKRUNUX09GRlNFVE9GKEpTQ2VsbCwgbV9zdHJ1Y3R1cmUpKSwgcHJv
dG9TdHJ1Y3R1cmVUb0NvbXBhcmUsIEltbVB0cihyZWludGVycHJldF9jYXN0PHZvaWQqPihwYXRj
aEdldEJ5SWREZWZhdWx0U3RydWN0dXJlKSkpOwogCiAgICAgLy8gVGhpcyB3aWxsIGJlIHJlbGlu
a2VkIHRvIGxvYWQgdGhlIGZ1bmN0aW9uIHdpdGhvdXQgZG9pbmcgYSBsb2FkLgogICAgIERhdGFM
YWJlbFB0ciBwdXRGdW5jdGlvbiA9IG1vdmVXaXRoUGF0Y2goSW1tUHRyKDApLCByZWdUMCk7CisK
KyAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZU1ldGhvZENoZWNrKTsKKwog
ICAgIEp1bXAgbWF0Y2ggPSBqdW1wKCk7CiAKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4o
aW5mby5zdHJ1Y3R1cmVUb0NvbXBhcmUsIHByb3RvT2JqKSA9PSBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9PYmopOwpAQCAtMTE5Miw2ICsxMTk5LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkSG90UGF0aChpbnQsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciosIHVuc2lnbmVkIHByb3Bl
cnQKIAogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFzZVZSZWcpOwog
CisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRo
KTsKKwogICAgIExhYmVsIGhvdFBhdGhCZWdpbih0aGlzKTsKICAgICBtX3Byb3BlcnR5QWNjZXNz
Q29tcGlsYXRpb25JbmZvW3Byb3BlcnR5QWNjZXNzSW5zdHJ1Y3Rpb25JbmRleF0uaG90UGF0aEJl
Z2luID0gaG90UGF0aEJlZ2luOwogCkBAIC0xMjEwLDYgKzEyMTksOSBAQCB2b2lkIEpJVDo6Y29t
cGlsZUdldEJ5SWRIb3RQYXRoKGludCwgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiwgdW5zaWdu
ZWQgcHJvcGVydAogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRp
c3BsYWNlbWVudExhYmVsKSA9PSBwYXRjaE9mZnNldEdldEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7
CiAKICAgICBMYWJlbCBwdXRSZXN1bHQodGhpcyk7CisKKyAgICBFTkRfVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRIb3RQYXRoKTsKKwogICAgIEFTU0VSVChkaWZmZXJlbmNl
QmV0d2Vlbihob3RQYXRoQmVnaW4sIHB1dFJlc3VsdCkgPT0gcGF0Y2hPZmZzZXRHZXRCeUlkUHV0
UmVzdWx0KTsKIH0KIApAQCAtMTIzMyw2ICsxMjQ1LDggQEAgdm9pZCBKSVQ6OmNvbXBpbGVHZXRC
eUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRpZmllciogaWRl
bnQKICAgICBsaW5rU2xvd0Nhc2VJZk5vdEpTQ2VsbChpdGVyLCBiYXNlVlJlZyk7CiAgICAgbGlu
a1Nsb3dDYXNlKGl0ZXIpOwogCisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1
ZW5jZUdldEJ5SWRTbG93Q2FzZSk7CisKICNpZm5kZWYgTkRFQlVHCiAgICAgTGFiZWwgY29sZFBh
dGhCZWdpbih0aGlzKTsKICNlbmRpZgpAQCAtMTI0MSw2ICsxMjU1LDggQEAgdm9pZCBKSVQ6OmNv
bXBpbGVHZXRCeUlkU2xvd0Nhc2UoaW50IHJlc3VsdFZSZWcsIGludCBiYXNlVlJlZywgSWRlbnRp
ZmllciogaWRlbnQKICAgICBzdHViQ2FsbC5hZGRBcmd1bWVudChJbW1QdHIoaWRlbnQpKTsKICAg
ICBDYWxsIGNhbGwgPSBzdHViQ2FsbC5jYWxsKHJlc3VsdFZSZWcpOwogCisgICAgRU5EX1VOSU5U
RVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VHZXRCeUlkU2xvd0Nhc2UpOworCiAgICAgQVNTRVJU
KGRpZmZlcmVuY2VCZXR3ZWVuKGNvbGRQYXRoQmVnaW4sIGNhbGwpID09IHBhdGNoT2Zmc2V0R2V0
QnlJZFNsb3dDYXNlQ2FsbCk7CiAKICAgICAvLyBUcmFjayB0aGUgbG9jYXRpb24gb2YgdGhlIGNh
bGw7IHRoaXMgd2lsbCBiZSB1c2VkIHRvIHJlY292ZXIgcGF0Y2ggaW5mb3JtYXRpb24uCkBAIC0x
MjY0LDYgKzEyODAsOCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9wdXRfYnlfaWQoSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBKdW1wIHRvIGEgc2xvdyBjYXNlIGlmIGVpdGhl
ciB0aGUgYmFzZSBvYmplY3QgaXMgYW4gaW1tZWRpYXRlLCBvciBpZiB0aGUgU3RydWN0dXJlIGRv
ZXMgbm90IG1hdGNoLgogICAgIGVtaXRKdW1wU2xvd0Nhc2VJZk5vdEpTQ2VsbChyZWdUMCwgYmFz
ZVZSZWcpOwogCisgICAgQkVHSU5fVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZVB1dEJ5
SWQpOworCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMpOwogICAgIG1fcHJvcGVydHlBY2Nl
c3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4XS5ob3RQYXRo
QmVnaW4gPSBob3RQYXRoQmVnaW47CiAKQEAgLTEyNzksNiArMTI5Nyw5IEBAIHZvaWQgSklUOjpl
bWl0X29wX3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIEFT
U0VSVChkaWZmZXJlbmNlQmV0d2VlbihleHRlcm5hbExvYWQsIGV4dGVybmFsTG9hZENvbXBsZXRl
KSA9PSBwYXRjaExlbmd0aFB1dEJ5SWRFeHRlcm5hbExvYWQpOwogCiAgICAgRGF0YUxhYmVsMzIg
ZGlzcGxhY2VtZW50TGFiZWwgPSBzdG9yZVB0cldpdGhBZGRyZXNzT2Zmc2V0UGF0Y2gocmVnVDEs
IEFkZHJlc3MocmVnVDAsIHBhdGNoR2V0QnlJZERlZmF1bHRPZmZzZXQpKTsKKworICAgIEVORF9V
TklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CisKICAgICBBU1NFUlQoZGlm
ZmVyZW5jZUJldHdlZW4oaG90UGF0aEJlZ2luLCBkaXNwbGFjZW1lbnRMYWJlbCkgPT0gcGF0Y2hP
ZmZzZXRQdXRCeUlkUHJvcGVydHlNYXBPZmZzZXQpOwogfQogCi0tIAoxLjYuMC40Cgo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>34641</attachid>
            <date>2009-08-12 00:25:49 -0700</date>
            <delta_ts>2009-08-12 22:30:54 -0700</delta_ts>
            <desc>Add optimize call and property access support for ARM JIT v2</desc>
            <filename>0001-Add-optimize-call-and-property-access-support-for-AR.patch</filename>
            <type>text/plain</type>
            <size>24754</size>
            <attacher name="Gabor Loki">loki</attacher>
            
              <data encoding="base64">RnJvbSA1YmM3NDYzMTMyYTJjNDJiOWUzNTBkZDY1Yzg3N2RhMzgwODNjNmJhIE1vbiBTZXAgMTcg
MDA6MDA6MDAgMjAwMQpGcm9tOiBHYWJvciBMb2tpIDxsb2tpQGluZi51LXN6ZWdlZC5odT4KRGF0
ZTogVHVlLCAxMSBBdWcgMjAwOSAxNjo0ODozOSArMDIwMApTdWJqZWN0OiBbUEFUQ0hdIEFkZCBv
cHRpbWl6ZSBjYWxsIGFuZCBwcm9wZXJ0eSBhY2Nlc3Mgc3VwcG9ydCBmb3IgQVJNIEpJVC4KClNp
Z25lZC1vZmYtYnk6IEdhYm9yIExva2kgPGxva2lAaW5mLnUtc3plZ2VkLmh1PgotLS0KIEphdmFT
Y3JpcHRDb3JlL0NoYW5nZUxvZyAgICAgICAgICAgICAgICAgICAgICAgICAgIHwgICA1MCArKysr
KysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmNwcCAg
ICAgICAgICB8ICAgMjEgKysrKystLQogSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5oICAgICAgICAgICAgfCAgIDIyICsrKystLS0KIEphdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9BUk12N0Fzc2VtYmxlci5oICAgICAgICAgIHwgICAgMSAtCiBKYXZhU2NyaXB0Q29yZS9hc3Nl
bWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oICB8ICAgMTAgLS0tCiAuLi4vYXNzZW1ibGVy
L0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaCAgICB8ICAgMjMgKysrKysrLS0KIEph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oICAgICAgIHwgICAzMCAr
KysrKystLS0tCiBKYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNzZW1ibGVyLmggICAgICAg
ICAgICB8ICAgIDEgLQogSmF2YVNjcmlwdENvcmUvaml0L0pJVC5oICAgICAgICAgICAgICAgICAg
ICAgICAgICAgfCAgIDYwICsrKysrKysrKysrKysrKysrKysrCiBKYXZhU2NyaXB0Q29yZS9qaXQv
SklUQ2FsbC5jcHAgICAgICAgICAgICAgICAgICAgICB8ICAgIDYgKysKIEphdmFTY3JpcHRDb3Jl
L2ppdC9KSVRJbmxpbmVNZXRob2RzLmggICAgICAgICAgICAgIHwgICAzMyArKysrKysrKysrKwog
SmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcCAgICAgICAgICAgfCAgIDIx
ICsrKysrKysKIDEyIGZpbGVzIGNoYW5nZWQsIDIzNCBpbnNlcnRpb25zKCspLCA0NCBkZWxldGlv
bnMoLSkKCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cgYi9KYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cKaW5kZXggMWFmZWE1Zi4uN2IyNjE4ZiAxMDA2NDQKLS0tIGEvSmF2YVNj
cmlwdENvcmUvQ2hhbmdlTG9nCisrKyBiL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwpAQCAtMSwz
ICsxLDUzIEBACisyMDA5LTA4LTExICBHYWJvciBMb2tpICA8bG9raUBpbmYudS1zemVnZWQuaHU+
CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgQWRkIG9w
dGltaXplIGNhbGwgYW5kIHByb3BlcnR5IGFjY2VzcyBzdXBwb3J0IGZvciBBUk0gSklULgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjQ5ODYKKworICAg
ICAgICBGb3IgdGlnaHRseSBjb3VwbGVkIHNlcXVlbmNlcyB0aGUgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRSBhbmQKKyAgICAgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0UgbWFjcm9z
IGhhdmUgYmVlbiBpbnRyb2R1Y2VkIHdoaWNoIGVuc3VyZQorICAgICAgICBzcGFjZSBmb3IgaW5z
dHJ1Y3Rpb25zIGFuZCBjb25zdGFudHMgb2YgdGhlIG5hbWVkIHNlcXVlbmNlLiBUaGlzCisgICAg
ICAgIG1ldGhvZCBpcyB2aXRhbCBmb3IgdGhvc2UgYXJjaGl0ZWN0dXJlIHdoaWNoIGFyZSB1c2lu
ZyBjb25zdGFudCBwb29sLgorCisgICAgICAgIFRoZSAnbGF0ZVBhdGNoJyBtZXRob2QgLSB3aGlj
aCB3YXMgbGlua2VkIHRvIEptcFNyYyAtIGlzIHJlcGxhY2VkIHdpdGgKKyAgICAgICAgYSBwb3J0
IHNwZWNpZmljIHNvbHV0aW9uIChlYWNoIGNhbGxzIGFyZSBtYXJrZWQgdG8gcGxhY2UgdGhlaXIg
YWRkcmVzcworICAgICAgICBvbiB0aGUgY29uc3RhbnQgcG9vbCkuCisKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQVJNQXNzZW1ibGVyLmNwcDoKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpsaW5r
QnJhbmNoKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVyOjpleGVjdXRhYmxlQ29weSk6IEFk
ZCBleHRyYSBhbGlnbiBmb3IgY29uc3RhbnQgcG9vbC4KKyAgICAgICAgKiBhc3NlbWJsZXIvQVJN
QXNzZW1ibGVyLmg6CisgICAgICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6Sm1wU3JjOjpKbXBTcmMp
OgorICAgICAgICAoSlNDOjpBUk1Bc3NlbWJsZXI6OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAg
ICAgIChKU0M6OkFSTUFzc2VtYmxlcjo6am1wKToKKyAgICAgICAgKEpTQzo6QVJNQXNzZW1ibGVy
OjpsaW5rQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL0FSTXY3QXNzZW1ibGVyLmg6CisgICAg
ICAgICogYXNzZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaDoKKyAgICAgICAgKiBhc3Nl
bWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oOgorICAgICAgICAoSlNDOjpB
c3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sOjpmbHVzaElmTm9TcGFjZUZvcik6IEZpeCB0
aGUKKyAgICAgICAgY29tcHV0YXRpb24gb2YgdGhlIHJlbWFpbmluZyBzcGFjZS4KKyAgICAgICAg
KiBhc3NlbWJsZXIvTWFjcm9Bc3NlbWJsZXJBUk0uaDoKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3Nl
bWJsZXJBUk06OmJyYW5jaDMyKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06Om5l
YXJDYWxsKToKKyAgICAgICAgKEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmNhbGwpOgorICAgICAg
ICAoSlNDOjpNYWNyb0Fzc2VtYmxlckFSTTo6YnJhbmNoUHRyV2l0aFBhdGNoKToKKyAgICAgICAg
KEpTQzo6TWFjcm9Bc3NlbWJsZXJBUk06OmVuc3VyZVNwYWNlKToKKyAgICAgICAgKEpTQzo6TWFj
cm9Bc3NlbWJsZXJBUk06OnNpemVPZkNvbnN0YW50UG9vbCk6CisgICAgICAgIChKU0M6Ok1hY3Jv
QXNzZW1ibGVyQVJNOjpwcmVwYXJlQ2FsbCk6CisgICAgICAgICogYXNzZW1ibGVyL1g4NkFzc2Vt
Ymxlci5oOgorICAgICAgICAqIGppdC9KSVQuaDoKKyAgICAgICAgKiBqaXQvSklUQ2FsbC5jcHA6
CisgICAgICAgIChKU0M6OkpJVDo6Y29tcGlsZU9wQ2FsbCk6CisgICAgICAgICogaml0L0pJVElu
bGluZU1ldGhvZHMuaDoKKyAgICAgICAgKEpTQzo6SklUOjpiZWdpblVuaW50ZXJydXB0ZWRTZXF1
ZW5jZSk6CisgICAgICAgIChKU0M6OkpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKToKKyAg
ICAgICAgKiBqaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwOgorICAgICAgICAoSlNDOjpKSVQ6OmVt
aXRfb3BfbWV0aG9kX2NoZWNrKToKKyAgICAgICAgKEpTQzo6SklUOjpjb21waWxlR2V0QnlJZEhv
dFBhdGgpOgorICAgICAgICAoSlNDOjpKSVQ6OmNvbXBpbGVHZXRCeUlkU2xvd0Nhc2UpOgorICAg
ICAgICAoSlNDOjpKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKToKKwogMjAwOS0wOC0xMCAgT2xpdmVy
IEh1bnQgIDxvbGl2ZXJAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
QW5kIGFub3RoZXIgYnVpbGQgZml4KS4KZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2Vt
Ymxlci9BUk1Bc3NlbWJsZXIuY3BwIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2Vt
Ymxlci5jcHAKaW5kZXggNjlkYWExNi4uYzhiMDdmYyAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENv
cmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5jcHAKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1i
bGVyL0FSTUFzc2VtYmxlci5jcHAKQEAgLTQ5LDExICs0OSwxMSBAQCBBUk1Xb3JkKiBBUk1Bc3Nl
bWJsZXI6OmdldExkckltbUFkZHJlc3MoQVJNV29yZCogaW5zbiwgdWludDMyX3QqIGNvbnN0UG9v
bCkKICAgICAgICAgcmV0dXJuIHJlaW50ZXJwcmV0X2Nhc3Q8QVJNV29yZCo+KGFkZHIgLSAoKmlu
c24gJiBTRFRfT0ZGU0VUX01BU0spKTsKIH0KIAotdm9pZCBBUk1Bc3NlbWJsZXI6OmxpbmtCcmFu
Y2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKQordm9pZCBBUk1Bc3NlbWJsZXI6
OmxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvLCBpbnQgdXNlQ29u
c3RhbnRQb29sKQogewogICAgIEFSTVdvcmQqIGluc24gPSByZWludGVycHJldF9jYXN0PEFSTVdv
cmQqPihjb2RlKSArIChmcm9tLm1fb2Zmc2V0IC8gc2l6ZW9mKEFSTVdvcmQpKTsKIAotICAgIGlm
ICghZnJvbS5tX2xhdGVQYXRjaCkgeworICAgIGlmICghdXNlQ29uc3RhbnRQb29sKSB7CiAgICAg
ICAgIGludCBkaWZmID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4odG8pIC0gcmVpbnRlcnBy
ZXRfY2FzdDxBUk1Xb3JkKj4oaW5zbiArIDIpOwogCiAgICAgICAgIGlmICgoZGlmZiA8PSBCT0ZG
U0VUX01BWCAmJiBkaWZmID49IEJPRkZTRVRfTUlOKSkgewpAQCAtMzY3LDEzICszNjcsMjIgQEAg
dm9pZCBBUk1Bc3NlbWJsZXI6OmRvdWJsZVRyYW5zZmVyKGJvb2wgaXNMb2FkLCBGUFJlZ2lzdGVy
SUQgc3JjRHN0LCBSZWdpc3RlcklEIGIKIAogdm9pZCogQVJNQXNzZW1ibGVyOjpleGVjdXRhYmxl
Q29weShFeGVjdXRhYmxlUG9vbCogYWxsb2NhdG9yKQogeworICAgIC8vIDY0LWJpdCBhbGlnbm1l
bnQgaXMgcmVxdWlyZWQgZm9yIG5leHQgY29uc3RhbnQgcG9vbCBhbmQgSklUIGNvZGUgYXMgd2Vs
bAorICAgIG1fYnVmZmVyLmZsdXNoV2l0aG91dEJhcnJpZXIodHJ1ZSk7CisgICAgaWYgKG1fYnVm
ZmVyLnVuY2hlY2tlZFNpemUoKSAmIDB4NykKKyAgICAgICAgYmtwdCgwKTsKKwogICAgIGNoYXIq
IGRhdGEgPSByZWludGVycHJldF9jYXN0PGNoYXIqPihtX2J1ZmZlci5leGVjdXRhYmxlQ29weShh
bGxvY2F0b3IpKTsKIAogICAgIGZvciAoSnVtcHM6Okl0ZXJhdG9yIGl0ZXIgPSBtX2p1bXBzLmJl
Z2luKCk7IGl0ZXIgIT0gbV9qdW1wcy5lbmQoKTsgKytpdGVyKSB7Ci0gICAgICAgIEFSTVdvcmQq
IGxkckFkZHIgPSByZWludGVycHJldF9jYXN0PEFSTVdvcmQqPihkYXRhICsgKml0ZXIpOwotICAg
ICAgICBBUk1Xb3JkKiBvZmZzZXQgPSBnZXRMZHJJbW1BZGRyZXNzKGxkckFkZHIpOwotICAgICAg
ICBpZiAoKm9mZnNldCAhPSAweGZmZmZmZmZmKQotICAgICAgICAgICAgbGlua0JyYW5jaChkYXRh
LCBKbXBTcmMoKml0ZXIpLCBkYXRhICsgKm9mZnNldCk7CisgICAgICAgIC8vIFRoZSBsYXN0IGJp
dCBpcyBzZXQgaWYgdGhlIGNvbnN0YW50IG11c3QgYmUgcGxhY2VkIG9uIGNvbnN0YW50IHBvb2wu
CisgICAgICAgIGludCBwb3MgPSAoKml0ZXIpICYgKH4weDEpOworICAgICAgICBBUk1Xb3JkKiBs
ZHJBZGRyID0gcmVpbnRlcnByZXRfY2FzdDxBUk1Xb3JkKj4oZGF0YSArIHBvcyk7CisgICAgICAg
IEFSTVdvcmQgb2Zmc2V0ID0gKmdldExkckltbUFkZHJlc3MobGRyQWRkcik7CisgICAgICAgIGlm
IChvZmZzZXQgIT0gMHhmZmZmZmZmZikgeworICAgICAgICAgICAgSm1wU3JjIGptcFNyYyhwb3Mp
OworICAgICAgICAgICAgbGlua0JyYW5jaChkYXRhLCBqbXBTcmMsIGRhdGEgKyBvZmZzZXQsICgo
Kml0ZXIpICYgMSkpOworICAgICAgICB9CiAgICAgfQogCiAgICAgcmV0dXJuIGRhdGE7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmggYi9KYXZhU2Ny
aXB0Q29yZS9hc3NlbWJsZXIvQVJNQXNzZW1ibGVyLmgKaW5kZXggZDNmZTc4Mi4uZDc3MDkyNCAx
MDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL0FSTUFzc2VtYmxlci5oCisrKyBi
L0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk1Bc3NlbWJsZXIuaApAQCAtMTgwLDIwICsxODAs
MTYgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIHB1YmxpYzoKICAgICAgICAgICAgIEptcFNy
YygpCiAgICAgICAgICAgICAgICAgOiBtX29mZnNldCgtMSkKLSAgICAgICAgICAgICAgICAsIG1f
bGF0ZVBhdGNoKGZhbHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAg
ICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpIHsgbV9sYXRlUGF0Y2ggPSB0cnVlOyB9CiAgICAg
ICAgIHByaXZhdGU6CiAgICAgICAgICAgICBKbXBTcmMoaW50IG9mZnNldCkKICAgICAgICAgICAg
ICAgICA6IG1fb2Zmc2V0KG9mZnNldCkKLSAgICAgICAgICAgICAgICAsIG1fbGF0ZVBhdGNoKGZh
bHNlKQogICAgICAgICAgICAgewogICAgICAgICAgICAgfQogCi0gICAgICAgICAgICBpbnQgbV9v
ZmZzZXQgOiAzMTsKLSAgICAgICAgICAgIGludCBtX2xhdGVQYXRjaCA6IDE7CisgICAgICAgICAg
ICBpbnQgbV9vZmZzZXQ7CiAgICAgICAgIH07CiAKICAgICAgICAgY2xhc3MgSm1wRHN0IHsKQEAg
LTU2Nyw2ICs1NjMsMTEgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgICAgICBtX2J1ZmZlci5l
bnN1cmVTcGFjZShpbnNuU3BhY2UsIGNvbnN0U3BhY2UpOwogICAgICAgICB9CiAKKyAgICAgICAg
aW50IHNpemVPZkNvbnN0YW50UG9vbCgpCisgICAgICAgIHsKKyAgICAgICAgICAgIHJldHVybiBt
X2J1ZmZlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICAgICAgfQorCiAgICAgICAgIEptcERz
dCBsYWJlbCgpCiAgICAgICAgIHsKICAgICAgICAgICAgIHJldHVybiBKbXBEc3QobV9idWZmZXIu
c2l6ZSgpKTsKQEAgLTU4MCwxMSArNTgxLDEyIEBAIG5hbWVzcGFjZSBBUk0gewogICAgICAgICAg
ICAgcmV0dXJuIGxhYmVsKCk7CiAgICAgICAgIH0KIAotICAgICAgICBKbXBTcmMgam1wKENvbmRp
dGlvbiBjYyA9IEFMKQorICAgICAgICBKbXBTcmMgam1wKENvbmRpdGlvbiBjYyA9IEFMLCBpbnQg
dXNlQ29uc3RhbnRQb29sID0gMCkKICAgICAgICAgewotICAgICAgICAgICAgaW50IHMgPSBzaXpl
KCk7CisgICAgICAgICAgICBlbnN1cmVTcGFjZShzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1X
b3JkKSk7CisgICAgICAgICAgICBpbnQgcyA9IG1fYnVmZmVyLnVuY2hlY2tlZFNpemUoKTsKICAg
ICAgICAgICAgIGxkcl91bl9pbW0oQVJNOjpwYywgMHhmZmZmZmZmZiwgY2MpOwotICAgICAgICAg
ICAgbV9qdW1wcy5hcHBlbmQocyk7CisgICAgICAgICAgICBtX2p1bXBzLmFwcGVuZChzIHwgKHVz
ZUNvbnN0YW50UG9vbCAmIDB4MSkpOwogICAgICAgICAgICAgcmV0dXJuIEptcFNyYyhzKTsKICAg
ICAgICAgfQogCkBAIC01OTMsNyArNTk1LDcgQEAgbmFtZXNwYWNlIEFSTSB7CiAgICAgICAgIC8v
IFBhdGNoaW5nIGhlbHBlcnMKIAogICAgICAgICBzdGF0aWMgQVJNV29yZCogZ2V0TGRySW1tQWRk
cmVzcyhBUk1Xb3JkKiBpbnNuLCB1aW50MzJfdCogY29uc3RQb29sID0gMCk7Ci0gICAgICAgIHN0
YXRpYyB2b2lkIGxpbmtCcmFuY2godm9pZCogY29kZSwgSm1wU3JjIGZyb20sIHZvaWQqIHRvKTsK
KyAgICAgICAgc3RhdGljIHZvaWQgbGlua0JyYW5jaCh2b2lkKiBjb2RlLCBKbXBTcmMgZnJvbSwg
dm9pZCogdG8sIGludCB1c2VDb25zdGFudFBvb2wgPSAwKTsKIAogICAgICAgICBzdGF0aWMgdm9p
ZCBwYXRjaFBvaW50ZXJJbnRlcm5hbChpbnRwdHJfdCBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewpAQCAtNjYwLDcgKzY2Miw3IEBAIG5hbWVzcGFjZSBBUk0gewogCiAgICAgICAgIHN0YXRpYyB2
b2lkIGxpbmtDYWxsKHZvaWQqIGNvZGUsIEptcFNyYyBmcm9tLCB2b2lkKiB0bykKICAgICAgICAg
ewotICAgICAgICAgICAgbGlua0JyYW5jaChjb2RlLCBmcm9tLCB0byk7CisgICAgICAgICAgICBs
aW5rQnJhbmNoKGNvZGUsIGZyb20sIHRvLCB0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIHN0
YXRpYyB2b2lkIHJlbGlua0NhbGwodm9pZCogZnJvbSwgdm9pZCogdG8pCmRpZmYgLS1naXQgYS9K
YXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQVJNdjdBc3NlbWJsZXIuaCBiL0phdmFTY3JpcHRDb3Jl
L2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCmluZGV4IGY3ZTJmYjQuLjdjZjg4NzMgMTAwNjQ0
Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCisrKyBiL0ph
dmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BUk12N0Fzc2VtYmxlci5oCkBAIC00NDIsNyArNDQyLDYg
QEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxh
dGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNyYyhpbnQgb2Zmc2V0KQog
ICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQgYS9KYXZhU2NyaXB0Q29y
ZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxlci5oIGIvSmF2YVNjcmlwdENvcmUvYXNz
ZW1ibGVyL0Fic3RyYWN0TWFjcm9Bc3NlbWJsZXIuaAppbmRleCBmOTI3ZWQyLi41MjVmZTk4IDEw
MDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvQWJzdHJhY3RNYWNyb0Fzc2VtYmxl
ci5oCisrKyBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9BYnN0cmFjdE1hY3JvQXNzZW1ibGVy
LmgKQEAgLTMyMCwxMSArMzIwLDYgQEAgcHVibGljOgogICAgICAgICAgICAgcmV0dXJuIENhbGwo
anVtcC5tX2ptcCwgTGlua2FibGUpOwogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBlbmFibGVM
YXRlUGF0Y2goKQotICAgICAgICB7Ci0gICAgICAgICAgICBtX2ptcC5lbmFibGVMYXRlUGF0Y2go
KTsKLSAgICAgICAgfQotCiAgICAgICAgIEptcFNyYyBtX2ptcDsKICAgICBwcml2YXRlOgogICAg
ICAgICBGbGFncyBtX2ZsYWdzOwpAQCAtMzYxLDExICszNTYsNiBAQCBwdWJsaWM6CiAgICAgICAg
ICAgICBtYXNtLT5tX2Fzc2VtYmxlci5saW5rSnVtcChtX2ptcCwgbGFiZWwubV9sYWJlbCk7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpCi0gICAgICAgIHsKLSAg
ICAgICAgICAgIG1fam1wLmVuYWJsZUxhdGVQYXRjaCgpOwotICAgICAgICB9Ci0KICAgICBwcml2
YXRlOgogICAgICAgICBKbXBTcmMgbV9qbXA7CiAgICAgfTsKZGlmZiAtLWdpdCBhL0phdmFTY3Jp
cHRDb3JlL2Fzc2VtYmxlci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmggYi9KYXZh
U2NyaXB0Q29yZS9hc3NlbWJsZXIvQXNzZW1ibGVyQnVmZmVyV2l0aENvbnN0YW50UG9vbC5oCmlu
ZGV4IGYxNWI3ZjMuLjI0MzEzNDggMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxl
ci9Bc3NlbWJsZXJCdWZmZXJXaXRoQ29uc3RhbnRQb29sLmgKKysrIGIvSmF2YVNjcmlwdENvcmUv
YXNzZW1ibGVyL0Fzc2VtYmxlckJ1ZmZlcldpdGhDb25zdGFudFBvb2wuaApAQCAtMzQsNiArMzQs
OCBAQAogI2luY2x1ZGUgIkFzc2VtYmxlckJ1ZmZlci5oIgogI2luY2x1ZGUgPHd0Zi9TZWdtZW50
ZWRWZWN0b3IuaD4KIAorI2RlZmluZSBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wgMQorCiBu
YW1lc3BhY2UgSlNDIHsKIAogLyoKQEAgLTE3Nyw2ICsxNzksMTEgQEAgcHVibGljOgogICAgICAg
ICByZXR1cm4gQXNzZW1ibGVyQnVmZmVyOjpzaXplKCk7CiAgICAgfQogCisgICAgaW50IHVuY2hl
Y2tlZFNpemUoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIEFzc2VtYmxlckJ1ZmZlcjo6c2l6ZSgp
OworICAgIH0KKwogICAgIHZvaWQqIGV4ZWN1dGFibGVDb3B5KEV4ZWN1dGFibGVQb29sKiBhbGxv
Y2F0b3IpCiAgICAgewogICAgICAgICBmbHVzaENvbnN0YW50UG9vbChmYWxzZSk7CkBAIC0yMDcs
MTAgKzIxNCwxMCBAQCBwdWJsaWM6CiAgICAgfQogCiAgICAgLy8gVGhpcyBmbHVzaGluZyBtZWNo
YW5pc20gY2FuIGJlIGNhbGxlZCBhZnRlciBhbnkgdW5jb25kaXRpb25hbCBqdW1wcy4KLSAgICB2
b2lkIGZsdXNoV2l0aG91dEJhcnJpZXIoKQorICAgIHZvaWQgZmx1c2hXaXRob3V0QmFycmllcihi
b29sIGlzRm9yY2VkID0gZmFsc2UpCiAgICAgewogICAgICAgICAvLyBGbHVzaCBpZiBjb25zdGFu
dCBwb29sIGlzIG1vcmUgdGhhbiA2MCUgZnVsbCB0byBhdm9pZCBvdmVydXNlIG9mIHRoaXMgZnVu
Y3Rpb24uCi0gICAgICAgIGlmICg1ICogbV9udW1Db25zdHMgPiAzICogbWF4UG9vbFNpemUgLyBz
aXplb2YodWludDMyX3QpKQorICAgICAgICBpZiAoaXNGb3JjZWQgfHwgNSAqIG1fbnVtQ29uc3Rz
ID4gMyAqIG1heFBvb2xTaXplIC8gc2l6ZW9mKHVpbnQzMl90KSkKICAgICAgICAgICAgIGZsdXNo
Q29uc3RhbnRQb29sKGZhbHNlKTsKICAgICB9CiAKQEAgLTIxOSw2ICsyMjYsMTEgQEAgcHVibGlj
OgogICAgICAgICByZXR1cm4gbV9wb29sOwogICAgIH0KIAorICAgIGludCBzaXplT2ZDb25zdGFu
dFBvb2woKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG1fbnVtQ29uc3RzOworICAgIH0KKwogcHJp
dmF0ZToKICAgICB2b2lkIGNvcnJlY3REZWx0YXMoaW50IGluc25TaXplKQogICAgIHsKQEAgLTI3
Niw3ICsyODgsOCBAQCBwcml2YXRlOgogICAgIHsKICAgICAgICAgaWYgKG1fbnVtQ29uc3RzID09
IDApCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIGlmICgobV9tYXhEaXN0YW5jZSA8IG5l
eHRJbnNuU2l6ZSArIG1fbGFzdENvbnN0RGVsdGEgKyBiYXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9m
KHVpbnQzMl90KSkpCisgICAgICAgIGludCBsYXN0Q29uc3REZWx0YSA9IG1fbGFzdENvbnN0RGVs
dGEgPiBuZXh0SW5zblNpemUgPyBtX2xhc3RDb25zdERlbHRhIC0gbmV4dEluc25TaXplIDogMDsK
KyAgICAgICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbGFzdENvbnN0RGVs
dGEgKyBiYXJyaWVyU2l6ZSArIChpbnQpc2l6ZW9mKHVpbnQzMl90KSkpCiAgICAgICAgICAgICBm
bHVzaENvbnN0YW50UG9vbCgpOwogICAgIH0KIApAQCAtMjg0LDggKzI5Nyw4IEBAIHByaXZhdGU6
CiAgICAgewogICAgICAgICBpZiAobV9udW1Db25zdHMgPT0gMCkKICAgICAgICAgICAgIHJldHVy
bjsKLSAgICAgICAgaWYgKChtX21heERpc3RhbmNlIDwgbmV4dEluc25TaXplICsgbV9sYXN0Q29u
c3REZWx0YSArIGJhcnJpZXJTaXplICsgKGludClzaXplb2YodWludDMyX3QpKSB8fAotICAgICAg
ICAgICAgKG1fbnVtQ29uc3RzICsgbmV4dENvbnN0U2l6ZSAvIHNpemVvZih1aW50MzJfdCkgPj0g
bWF4UG9vbFNpemUpKQorICAgICAgICBpZiAoKG1fbWF4RGlzdGFuY2UgPCBuZXh0SW5zblNpemUg
KyBtX2xhc3RDb25zdERlbHRhICsgbmV4dENvbnN0U2l6ZSArIGJhcnJpZXJTaXplICsgKGludClz
aXplb2YodWludDMyX3QpKSB8fAorICAgICAgICAgICAgKG1fbnVtQ29uc3RzICogc2l6ZW9mKHVp
bnQzMl90KSArIG5leHRDb25zdFNpemUgPj0gbWF4UG9vbFNpemUpKQogICAgICAgICAgICAgZmx1
c2hDb25zdGFudFBvb2woKTsKICAgICB9CiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fz
c2VtYmxlci9NYWNyb0Fzc2VtYmxlckFSTS5oIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL01h
Y3JvQXNzZW1ibGVyQVJNLmgKaW5kZXggYjA0ZWQxMy4uMTljYmZjYiAxMDA2NDQKLS0tIGEvSmF2
YVNjcmlwdENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKKysrIGIvSmF2YVNjcmlw
dENvcmUvYXNzZW1ibGVyL01hY3JvQXNzZW1ibGVyQVJNLmgKQEAgLTMyNCwyMCArMzI0LDIwIEBA
IHB1YmxpYzoKICAgICAgICAgICAgIG1vdmUoc3JjLCBkZXN0KTsKICAgICB9CiAKLSAgICBKdW1w
IGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIFJlZ2lzdGVySUQgcmln
aHQpCisgICAgSnVtcCBicmFuY2gzMihDb25kaXRpb24gY29uZCwgUmVnaXN0ZXJJRCBsZWZ0LCBS
ZWdpc3RlcklEIHJpZ2h0LCBpbnQgdXNlQ29uc3RhbnRQb29sID0gMCkKICAgICB7CiAgICAgICAg
IG1fYXNzZW1ibGVyLmNtcF9yKGxlZnQsIHJpZ2h0KTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9h
c3NlbWJsZXIuam1wKEFSTUNvbmRpdGlvbihjb25kKSkpOworICAgICAgICByZXR1cm4gSnVtcCht
X2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0aW9uKGNvbmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAg
ICB9CiAKLSAgICBKdW1wIGJyYW5jaDMyKENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQs
IEltbTMyIHJpZ2h0KQorICAgIEp1bXAgYnJhbmNoMzIoQ29uZGl0aW9uIGNvbmQsIFJlZ2lzdGVy
SUQgbGVmdCwgSW1tMzIgcmlnaHQsIGludCB1c2VDb25zdGFudFBvb2wgPSAwKQogICAgIHsKICAg
ICAgICAgaWYgKHJpZ2h0Lm1faXNQb2ludGVyKSB7CiAgICAgICAgICAgICBtX2Fzc2VtYmxlci5s
ZHJfdW5faW1tKEFSTTo6UzAsIHJpZ2h0Lm1fdmFsdWUpOwogICAgICAgICAgICAgbV9hc3NlbWJs
ZXIuY21wX3IobGVmdCwgQVJNOjpTMCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgbV9h
c3NlbWJsZXIuY21wX3IobGVmdCwgbV9hc3NlbWJsZXIuZ2V0SW1tKHJpZ2h0Lm1fdmFsdWUsIEFS
TTo6UzApKTsKLSAgICAgICAgcmV0dXJuIEp1bXAobV9hc3NlbWJsZXIuam1wKEFSTUNvbmRpdGlv
bihjb25kKSkpOworICAgICAgICByZXR1cm4gSnVtcChtX2Fzc2VtYmxlci5qbXAoQVJNQ29uZGl0
aW9uKGNvbmQpLCB1c2VDb25zdGFudFBvb2wpKTsKICAgICB9CiAKICAgICBKdW1wIGJyYW5jaDMy
KENvbmRpdGlvbiBjb25kLCBSZWdpc3RlcklEIGxlZnQsIEFkZHJlc3MgcmlnaHQpCkBAIC00OTcs
NyArNDk3LDcgQEAgcHVibGljOgogICAgIENhbGwgbmVhckNhbGwoKQogICAgIHsKICAgICAgICAg
cHJlcGFyZUNhbGwoKTsKLSAgICAgICAgcmV0dXJuIENhbGwobV9hc3NlbWJsZXIuam1wKCksIENh
bGw6OkxpbmthYmxlTmVhcik7CisgICAgICAgIHJldHVybiBDYWxsKG1fYXNzZW1ibGVyLmptcChB
Uk1Bc3NlbWJsZXI6OkFMLCB0cnVlKSwgQ2FsbDo6TGlua2FibGVOZWFyKTsKICAgICB9CiAKICAg
ICBDYWxsIGNhbGwoUmVnaXN0ZXJJRCB0YXJnZXQpCkBAIC01ODcsNyArNTg3LDcgQEAgcHVibGlj
OgogICAgIENhbGwgY2FsbCgpCiAgICAgewogICAgICAgICBwcmVwYXJlQ2FsbCgpOwotICAgICAg
ICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoKSwgQ2FsbDo6TGlua2FibGUpOworICAgICAg
ICByZXR1cm4gQ2FsbChtX2Fzc2VtYmxlci5qbXAoQVJNQXNzZW1ibGVyOjpBTCwgdHJ1ZSksIENh
bGw6OkxpbmthYmxlKTsKICAgICB9CiAKICAgICBDYWxsIHRhaWxSZWN1cnNpdmVDYWxsKCkKQEAg
LTYxMCw4ICs2MTAsNyBAQCBwdWJsaWM6CiAgICAgSnVtcCBicmFuY2hQdHJXaXRoUGF0Y2goQ29u
ZGl0aW9uIGNvbmQsIFJlZ2lzdGVySUQgbGVmdCwgRGF0YUxhYmVsUHRyJiBkYXRhTGFiZWwsIElt
bVB0ciBpbml0aWFsUmlnaHRWYWx1ZSA9IEltbVB0cigwKSkKICAgICB7CiAgICAgICAgIGRhdGFM
YWJlbCA9IG1vdmVXaXRoUGF0Y2goaW5pdGlhbFJpZ2h0VmFsdWUsIEFSTTo6UzEpOwotICAgICAg
ICBKdW1wIGp1bXAgPSBicmFuY2gzMihjb25kLCBsZWZ0LCBBUk06OlMxKTsKLSAgICAgICAganVt
cC5lbmFibGVMYXRlUGF0Y2goKTsKKyAgICAgICAgSnVtcCBqdW1wID0gYnJhbmNoMzIoY29uZCwg
bGVmdCwgQVJNOjpTMSwgdHJ1ZSk7CiAgICAgICAgIHJldHVybiBqdW1wOwogICAgIH0KIApAQCAt
NjE5LDggKzYxOCw3IEBAIHB1YmxpYzoKICAgICB7CiAgICAgICAgIGxvYWQzMihsZWZ0LCBBUk06
OlMxKTsKICAgICAgICAgZGF0YUxhYmVsID0gbW92ZVdpdGhQYXRjaChpbml0aWFsUmlnaHRWYWx1
ZSwgQVJNOjpTMCk7Ci0gICAgICAgIEp1bXAganVtcCA9IGJyYW5jaDMyKGNvbmQsIEFSTTo6UzAs
IEFSTTo6UzEpOwotICAgICAgICBqdW1wLmVuYWJsZUxhdGVQYXRjaCgpOworICAgICAgICBKdW1w
IGp1bXAgPSBicmFuY2gzMihjb25kLCBBUk06OlMwLCBBUk06OlMxLCB0cnVlKTsKICAgICAgICAg
cmV0dXJuIGp1bXA7CiAgICAgfQogCkBAIC03MjIsOSArNzIwLDE5IEBAIHByb3RlY3RlZDoKICAg
ICAgICAgcmV0dXJuIHN0YXRpY19jYXN0PEFSTUFzc2VtYmxlcjo6Q29uZGl0aW9uPihjb25kKTsK
ICAgICB9CiAKKyAgICB2b2lkIGVuc3VyZVNwYWNlKGludCBpbnNuU3BhY2UsIGludCBjb25zdFNw
YWNlKQorICAgIHsKKyAgICAgICAgbV9hc3NlbWJsZXIuZW5zdXJlU3BhY2UoaW5zblNwYWNlLCBj
b25zdFNwYWNlKTsKKyAgICB9CisKKyAgICBpbnQgc2l6ZU9mQ29uc3RhbnRQb29sKCkKKyAgICB7
CisgICAgICAgIHJldHVybiBtX2Fzc2VtYmxlci5zaXplT2ZDb25zdGFudFBvb2woKTsKKyAgICB9
CisKICAgICB2b2lkIHByZXBhcmVDYWxsKCkKICAgICB7Ci0gICAgICAgIG1fYXNzZW1ibGVyLmVu
c3VyZVNwYWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CisgICAgICAg
IGVuc3VyZVNwYWNlKDMgKiBzaXplb2YoQVJNV29yZCksIHNpemVvZihBUk1Xb3JkKSk7CiAKICAg
ICAgICAgLy8gUzAgbWlnaHQgYmUgdXNlZCBmb3IgcGFyYW1ldGVyIHBhc3NpbmcKICAgICAgICAg
bV9hc3NlbWJsZXIuYWRkX3IoQVJNOjpTMSwgQVJNOjpwYywgQVJNQXNzZW1ibGVyOjpPUDJfSU1N
IHwgMHg0KTsKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJs
ZXIuaCBiL0phdmFTY3JpcHRDb3JlL2Fzc2VtYmxlci9YODZBc3NlbWJsZXIuaAppbmRleCBmYjU4
MzYxLi5iNWI4ODA4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9hc3NlbWJsZXIvWDg2QXNz
ZW1ibGVyLmgKKysrIGIvSmF2YVNjcmlwdENvcmUvYXNzZW1ibGVyL1g4NkFzc2VtYmxlci5oCkBA
IC0yMzEsNyArMjMxLDYgQEAgcHVibGljOgogICAgICAgICB7CiAgICAgICAgIH0KIAotICAgICAg
ICB2b2lkIGVuYWJsZUxhdGVQYXRjaCgpIHsgfQogICAgIHByaXZhdGU6CiAgICAgICAgIEptcFNy
YyhpbnQgb2Zmc2V0KQogICAgICAgICAgICAgOiBtX29mZnNldChvZmZzZXQpCmRpZmYgLS1naXQg
YS9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmggYi9KYXZhU2NyaXB0Q29yZS9qaXQvSklULmgKaW5k
ZXggOTNmNDdkOS4uNzdiZTAxNiAxMDA2NDQKLS0tIGEvSmF2YVNjcmlwdENvcmUvaml0L0pJVC5o
CisrKyBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVQuaApAQCAtNTk1LDkgKzU5NSw2MiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENo
ZWNrUHJvdG9PYmogPSAxODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1l
dGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyODsKICAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRj
aE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rpb24gPSA0NjsKKyNlbGlmIFBMQVRGT1JNKEFSTSkK
KyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZhbHVlIGFyZSB1c2VkIHRv
IGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX3B1dF9ieV9pZC4KKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldFB1dEJ5SWRTdHJ1Y3R1cmUgPSA0OworICAgICAg
ICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0UHV0QnlJZEV4dGVybmFsTG9hZCA9IDE2Owor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9hZCA9
IDQ7CisgICAgICAgIHN0YXRpYyBjb25zdCBpbnQgcGF0Y2hPZmZzZXRQdXRCeUlkUHJvcGVydHlN
YXBPZmZzZXQgPSAyMDsKKyAgICAgICAgLy8gVGhlc2UgYXJjaGl0ZWN0dXJlIHNwZWNpZmljIHZh
bHVlIGFyZSB1c2VkIHRvIGVuYWJsZSBwYXRjaGluZyAtIHNlZSBjb21tZW50IG9uIG9wX2dldF9i
eV9pZC4KKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdldEJ5SWRTdHJ1Y3R1
cmUgPSA0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0R2V0QnlJZEJyYW5j
aFRvU2xvd0Nhc2UgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldEdl
dEJ5SWRFeHRlcm5hbExvYWQgPSAxNjsKKyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaExl
bmd0aEdldEJ5SWRFeHRlcm5hbExvYWQgPSA0OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBh
dGNoT2Zmc2V0R2V0QnlJZFByb3BlcnR5TWFwT2Zmc2V0ID0gMjA7CisgICAgICAgIHN0YXRpYyBj
b25zdCBpbnQgcGF0Y2hPZmZzZXRHZXRCeUlkUHV0UmVzdWx0ID0gMjg7CisjaWYgRU5BQkxFKE9Q
Q09ERV9TQU1QTElORykKKyAgICAgICAgI2Vycm9yICJPUENPREVfU0FNUExJTkcgaXMgbm90IHll
dCBzdXBwb3J0ZWQiCisjZWxzZQorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHBhdGNoT2Zmc2V0
R2V0QnlJZFNsb3dDYXNlQ2FsbCA9IDM2OworI2VuZGlmCisgICAgICAgIHN0YXRpYyBjb25zdCBp
bnQgcGF0Y2hPZmZzZXRPcENhbGxDb21wYXJlVG9KdW1wID0gMTI7CisKKyAgICAgICAgc3RhdGlj
IGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9PYmogPSAxMjsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHJvdG9TdHJ1Y3QgPSAyMDsK
KyAgICAgICAgc3RhdGljIGNvbnN0IGludCBwYXRjaE9mZnNldE1ldGhvZENoZWNrUHV0RnVuY3Rp
b24gPSAzMjsKICNlbmRpZgogI2VuZGlmIC8vIFVTRShKU1ZBTFVFMzJfNjQpCiAKKyNpZiBQTEFU
Rk9STShBUk0pICYmICFQTEFURk9STV9BUk1fQVJDSCg3KQorICAgICAgICAvLyBzZXF1ZW5jZU9w
Q2FsbAorICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsSW5zdHJ1Y3Rpb25T
cGFjZSA9IDEyOworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlT3BDYWxsQ29uc3Rh
bnRTcGFjZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlTWV0aG9kQ2hlY2sKKyAgICAgICAgc3Rh
dGljIGNvbnN0IGludCBzZXF1ZW5jZU1ldGhvZENoZWNrSW5zdHJ1Y3Rpb25TcGFjZSA9IDQwOwor
ICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlTWV0aG9kQ2hlY2tDb25zdGFudFNwYWNl
ID0gNjsKKyAgICAgICAgLy8gc2VxdWVuY2VHZXRCeUlkSG90UGF0aAorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZEhvdFBhdGhJbnN0cnVjdGlvblNwYWNlID0gMjg7Cisg
ICAgICAgIHN0YXRpYyBjb25zdCBpbnQgc2VxdWVuY2VHZXRCeUlkSG90UGF0aENvbnN0YW50U3Bh
Y2UgPSAzOworICAgICAgICAvLyBzZXF1ZW5jZUdldEJ5SWRTbG93Q2FzZQorICAgICAgICBzdGF0
aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlSW5zdHJ1Y3Rpb25TcGFjZSA9IDQw
OworICAgICAgICBzdGF0aWMgY29uc3QgaW50IHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlQ29uc3Rh
bnRTcGFjZSA9IDI7CisgICAgICAgIC8vIHNlcXVlbmNlUHV0QnlJZAorICAgICAgICBzdGF0aWMg
Y29uc3QgaW50IHNlcXVlbmNlUHV0QnlJZEluc3RydWN0aW9uU3BhY2UgPSAyODsKKyAgICAgICAg
c3RhdGljIGNvbnN0IGludCBzZXF1ZW5jZVB1dEJ5SWRDb25zdGFudFNwYWNlID0gMzsKKyNlbmRp
ZgorCisjaWYgZGVmaW5lZChBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxF
Ul9IQVNfQ09OU1RBTlRfUE9PTAorI2RlZmluZSBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
KG5hbWUpIGJlZ2luVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKG5hbWUgIyMgSW5zdHJ1Y3Rpb25TcGFj
ZSwgbmFtZSAjIyBDb25zdGFudFNwYWNlKQorI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFV
RU5DRShuYW1lKSBlbmRVbmludGVycnVwdGVkU2VxdWVuY2UobmFtZSAjIyBJbnN0cnVjdGlvblNw
YWNlLCBuYW1lICMjIENvbnN0YW50U3BhY2UpCisKKyAgICAgICAgdm9pZCBiZWdpblVuaW50ZXJy
dXB0ZWRTZXF1ZW5jZShpbnQsIGludCk7CisgICAgICAgIHZvaWQgZW5kVW5pbnRlcnJ1cHRlZFNl
cXVlbmNlKGludCwgaW50KTsKKworI2Vsc2UKKyNkZWZpbmUgQkVHSU5fVU5JTlRFUlJVUFRFRF9T
RVFVRU5DRShuYW1lKQorI2RlZmluZSBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShuYW1lKQor
I2VuZGlmCisKICAgICAgICAgdm9pZCBlbWl0X29wX2FkZChJbnN0cnVjdGlvbiopOwogICAgICAg
ICB2b2lkIGVtaXRfb3BfYml0YW5kKEluc3RydWN0aW9uKik7CiAgICAgICAgIHZvaWQgZW1pdF9v
cF9iaXRub3QoSW5zdHJ1Y3Rpb24qKTsKQEAgLTgzNSw2ICs4ODgsMTMgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgIGludCBtX2xhc3RSZXN1bHRCeXRlY29kZVJlZ2lzdGVyOwogICAgICAgICB1
bnNpZ25lZCBtX2p1bXBUYXJnZXRzUG9zaXRpb247CiAjZW5kaWYKKworI2lmbmRlZiBOREVCVUcK
KyNpZiBkZWZpbmVkKEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9PTCkgJiYgQVNTRU1CTEVSX0hB
U19DT05TVEFOVF9QT09MCisgICAgICAgIExhYmVsIG1fdW5pbnRlcnJ1cHRlZEluc3RydWN0aW9u
U2VxdWVuY2VCZWdpbjsKKyAgICAgICAgaW50IG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2VxdWVu
Y2VCZWdpbjsKKyNlbmRpZgorI2VuZGlmCiAgICAgfSBKSVRfQ0xBU1NfQUxJR05NRU5UOwogfSAv
LyBuYW1lc3BhY2UgSlNDCiAKZGlmZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxs
LmNwcCBiL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRDYWxsLmNwcAppbmRleCA3ZmRiODQ1Li5hMTlm
YWU4IDEwMDY0NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUQ2FsbC5jcHAKKysrIGIvSmF2
YVNjcmlwdENvcmUvaml0L0pJVENhbGwuY3BwCkBAIC02MTcsNyArNjE3LDEzIEBAIHZvaWQgSklU
Ojpjb21waWxlT3BDYWxsKE9wY29kZUlEIG9wY29kZUlELCBJbnN0cnVjdGlvbiogaW5zdHJ1Y3Rp
b24sIHVuc2lnbmVkIGNhCiAgICAgLy8gVGhpcyBkZWxpYmVyYXRlbHkgbGVhdmVzIHRoZSBjYWxs
ZWUgaW4gZWN4LCB1c2VkIHdoZW4gc2V0dGluZyB1cCB0aGUgc3RhY2sgZnJhbWUgYmVsb3cKICAg
ICBlbWl0R2V0VmlydHVhbFJlZ2lzdGVyKGNhbGxlZSwgcmVnVDIpOwogICAgIERhdGFMYWJlbFB0
ciBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNoZWNrOworCisgICAgQkVHSU5fVU5JTlRFUlJVUFRF
RF9TRVFVRU5DRShzZXF1ZW5jZU9wQ2FsbCk7CisKICAgICBKdW1wIGp1bXBUb1Nsb3cgPSBicmFu
Y2hQdHJXaXRoUGF0Y2goTm90RXF1YWwsIHJlZ1QyLCBhZGRyZXNzT2ZMaW5rZWRGdW5jdGlvbkNo
ZWNrLCBJbW1QdHIoSlNWYWx1ZTo6ZW5jb2RlKEpTVmFsdWUoKSkpKTsKKworICAgIEVORF9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlT3BDYWxsKTsKKwogICAgIGFkZFNsb3dDYXNlKGp1
bXBUb1Nsb3cpOwogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2VlbihhZGRyZXNzT2ZMaW5rZWRG
dW5jdGlvbkNoZWNrLCBqdW1wVG9TbG93KSA9PSBwYXRjaE9mZnNldE9wQ2FsbENvbXBhcmVUb0p1
bXApOwogICAgIG1fY2FsbFN0cnVjdHVyZVN0dWJDb21waWxhdGlvbkluZm9bY2FsbExpbmtJbmZv
SW5kZXhdLmhvdFBhdGhCZWdpbiA9IGFkZHJlc3NPZkxpbmtlZEZ1bmN0aW9uQ2hlY2s7CmRpZmYg
LS1naXQgYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oIGIvSmF2YVNjcmlw
dENvcmUvaml0L0pJVElubGluZU1ldGhvZHMuaAppbmRleCBiNWFhYWZjLi4xODg2ZTRjIDEwMDY0
NAotLS0gYS9KYXZhU2NyaXB0Q29yZS9qaXQvSklUSW5saW5lTWV0aG9kcy5oCisrKyBiL0phdmFT
Y3JpcHRDb3JlL2ppdC9KSVRJbmxpbmVNZXRob2RzLmgKQEAgLTEwMiw2ICsxMDIsMzkgQEAgQUxX
QVlTX0lOTElORSBKSVQ6OkNhbGwgSklUOjplbWl0TmFrZWRDYWxsKENvZGVQdHIgZnVuY3Rpb24p
CiAgICAgcmV0dXJuIG5ha2VkQ2FsbDsKIH0KIAorI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19D
T05TVEFOVF9QT09MKSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6YmVnaW5VbmludGVycnVwdGVkU2VxdWVuY2UoaW50IGluc25TcGFjZSwg
aW50IGNvbnN0U3BhY2UpCit7CisjaWYgUExBVEZPUk0oQVJNKSAmJiAhUExBVEZPUk1fQVJNX0FS
Q0goNykKKyNpZm5kZWYgTkRFQlVHCisgICAgLy8gRW5zdXJlIHRoZSBsYWJlbCBhZnRlciB0aGUg
c2VxdWVuY2UgY2FuIGFsc28gZml0CisgICAgaW5zblNwYWNlICs9IHNpemVvZihBUk1Xb3JkKTsK
KyAgICBjb25zdFNwYWNlICs9IHNpemVvZih1aW50NjRfdCk7CisjZW5kaWYKKworICAgIGVuc3Vy
ZVNwYWNlKGluc25TcGFjZSwgY29uc3RTcGFjZSk7CisKKyNlbmRpZgorCisjaWYgZGVmaW5lZChB
U1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wpICYmIEFTU0VNQkxFUl9IQVNfQ09OU1RBTlRfUE9P
TAorI2lmbmRlZiBOREVCVUcKKyAgICBtX3VuaW50ZXJydXB0ZWRJbnN0cnVjdGlvblNlcXVlbmNl
QmVnaW4gPSBsYWJlbCgpOworICAgIG1fdW5pbnRlcnJ1cHRlZENvbnN0YW50U2VxdWVuY2VCZWdp
biA9IHNpemVPZkNvbnN0YW50UG9vbCgpOworI2VuZGlmCisjZW5kaWYKK30KKworQUxXQVlTX0lO
TElORSB2b2lkIEpJVDo6ZW5kVW5pbnRlcnJ1cHRlZFNlcXVlbmNlKGludCBpbnNuU3BhY2UsIGlu
dCBjb25zdFNwYWNlKQoreworI2lmIGRlZmluZWQoQVNTRU1CTEVSX0hBU19DT05TVEFOVF9QT09M
KSAmJiBBU1NFTUJMRVJfSEFTX0NPTlNUQU5UX1BPT0wKKyAgICBBU1NFUlQoZGlmZmVyZW5jZUJl
dHdlZW4obV91bmludGVycnVwdGVkSW5zdHJ1Y3Rpb25TZXF1ZW5jZUJlZ2luLCBsYWJlbCgpKSA9
PSBpbnNuU3BhY2UpOworICAgIEFTU0VSVChzaXplT2ZDb25zdGFudFBvb2woKSAtIG1fdW5pbnRl
cnJ1cHRlZENvbnN0YW50U2VxdWVuY2VCZWdpbiA9PSBjb25zdFNwYWNlKTsKKyNlbmRpZgorfQor
CisjZW5kaWYKKwogI2lmIFBMQVRGT1JNKFg4NikgfHwgUExBVEZPUk0oWDg2XzY0KSB8fCAoUExB
VEZPUk0oQVJNKSAmJiAhUExBVEZPUk1fQVJNX0FSQ0goNykpCiAKIEFMV0FZU19JTkxJTkUgdm9p
ZCBKSVQ6OnByZXNlcnZlUmV0dXJuQWRkcmVzc0FmdGVyQ2FsbChSZWdpc3RlcklEIHJlZykKZGlm
ZiAtLWdpdCBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAgYi9KYXZh
U2NyaXB0Q29yZS9qaXQvSklUUHJvcGVydHlBY2Nlc3MuY3BwCmluZGV4IDlkYmEyZTIuLjg1YTcz
MWQgMTAwNjQ0Ci0tLSBhL0phdmFTY3JpcHRDb3JlL2ppdC9KSVRQcm9wZXJ0eUFjY2Vzcy5jcHAK
KysrIGIvSmF2YVNjcmlwdENvcmUvaml0L0pJVFByb3BlcnR5QWNjZXNzLmNwcApAQCAtMTEyMiwx
MyArMTEyMiwyMCBAQCB2b2lkIEpJVDo6ZW1pdF9vcF9tZXRob2RfY2hlY2soSW5zdHJ1Y3Rpb24q
IGN1cnJlbnRJbnN0cnVjdGlvbikKICAgICAvLyBEbyB0aGUgbWV0aG9kIGNoZWNrIC0gY2hlY2sg
dGhlIG9iamVjdCAmIGl0cyBwcm90b3R5cGUncyBzdHJ1Y3R1cmUgaW5saW5lICh0aGlzIGlzIHRo
ZSBjb21tb24gY2FzZSkuCiAgICAgbV9tZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvLmFwcGVuZChN
ZXRob2RDYWxsQ29tcGlsYXRpb25JbmZvKG1fcHJvcGVydHlBY2Nlc3NJbnN0cnVjdGlvbkluZGV4
KSk7CiAgICAgTWV0aG9kQ2FsbENvbXBpbGF0aW9uSW5mbyYgaW5mbyA9IG1fbWV0aG9kQ2FsbENv
bXBpbGF0aW9uSW5mby5sYXN0KCk7CisKICAgICBKdW1wIG5vdENlbGwgPSBlbWl0SnVtcElmTm90
SlNDZWxsKHJlZ1QwKTsKKworICAgIEJFR0lOX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVu
Y2VNZXRob2RDaGVjayk7CisKICAgICBKdW1wIHN0cnVjdHVyZUNoZWNrID0gYnJhbmNoUHRyV2l0
aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QwLCBPQkpFQ1RfT0ZGU0VUT0YoSlNDZWxsLCBt
X3N0cnVjdHVyZSkpLCBpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50ZXJwcmV0
X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAgICAgRGF0YUxh
YmVsUHRyIHByb3RvU3RydWN0dXJlVG9Db21wYXJlLCBwcm90b09iaiA9IG1vdmVXaXRoUGF0Y2go
SW1tUHRyKDApLCByZWdUMSk7CiAgICAgSnVtcCBwcm90b1N0cnVjdHVyZUNoZWNrID0gYnJhbmNo
UHRyV2l0aFBhdGNoKE5vdEVxdWFsLCBBZGRyZXNzKHJlZ1QxLCBPQkpFQ1RfT0ZGU0VUT0YoSlND
ZWxsLCBtX3N0cnVjdHVyZSkpLCBwcm90b1N0cnVjdHVyZVRvQ29tcGFyZSwgSW1tUHRyKHJlaW50
ZXJwcmV0X2Nhc3Q8dm9pZCo+KHBhdGNoR2V0QnlJZERlZmF1bHRTdHJ1Y3R1cmUpKSk7CiAKICAg
ICAvLyBUaGlzIHdpbGwgYmUgcmVsaW5rZWQgdG8gbG9hZCB0aGUgZnVuY3Rpb24gd2l0aG91dCBk
b2luZyBhIGxvYWQuCiAgICAgRGF0YUxhYmVsUHRyIHB1dEZ1bmN0aW9uID0gbW92ZVdpdGhQYXRj
aChJbW1QdHIoMCksIHJlZ1QwKTsKKworICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNl
cXVlbmNlTWV0aG9kQ2hlY2spOworCiAgICAgSnVtcCBtYXRjaCA9IGp1bXAoKTsKIAogICAgIEFT
U0VSVChkaWZmZXJlbmNlQmV0d2VlbihpbmZvLnN0cnVjdHVyZVRvQ29tcGFyZSwgcHJvdG9PYmop
ID09IHBhdGNoT2Zmc2V0TWV0aG9kQ2hlY2tQcm90b09iaik7CkBAIC0xMTkyLDYgKzExOTksOCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRIb3RQYXRoKGludCwgaW50IGJhc2VWUmVnLCBJZGVu
dGlmaWVyKiwgdW5zaWduZWQgcHJvcGVydAogCiAgICAgZW1pdEp1bXBTbG93Q2FzZUlmTm90SlND
ZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAgICBCRUdJTl9VTklOVEVSUlVQVEVEX1NFUVVFTkNF
KHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOworCiAgICAgTGFiZWwgaG90UGF0aEJlZ2luKHRoaXMp
OwogICAgIG1fcHJvcGVydHlBY2Nlc3NDb21waWxhdGlvbkluZm9bcHJvcGVydHlBY2Nlc3NJbnN0
cnVjdGlvbkluZGV4XS5ob3RQYXRoQmVnaW4gPSBob3RQYXRoQmVnaW47CiAKQEAgLTEyMTAsNiAr
MTIxOSw5IEBAIHZvaWQgSklUOjpjb21waWxlR2V0QnlJZEhvdFBhdGgoaW50LCBpbnQgYmFzZVZS
ZWcsIElkZW50aWZpZXIqLCB1bnNpZ25lZCBwcm9wZXJ0CiAgICAgQVNTRVJUKGRpZmZlcmVuY2VC
ZXR3ZWVuKGhvdFBhdGhCZWdpbiwgZGlzcGxhY2VtZW50TGFiZWwpID09IHBhdGNoT2Zmc2V0R2V0
QnlJZFByb3BlcnR5TWFwT2Zmc2V0KTsKIAogICAgIExhYmVsIHB1dFJlc3VsdCh0aGlzKTsKKwor
ICAgIEVORF9VTklOVEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZEhvdFBhdGgpOwor
CiAgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKGhvdFBhdGhCZWdpbiwgcHV0UmVzdWx0KSA9
PSBwYXRjaE9mZnNldEdldEJ5SWRQdXRSZXN1bHQpOwogfQogCkBAIC0xMjMzLDYgKzEyNDUsOCBA
QCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJlZywgaW50IGJh
c2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudAogICAgIGxpbmtTbG93Q2FzZUlmTm90SlNDZWxsKGl0
ZXIsIGJhc2VWUmVnKTsKICAgICBsaW5rU2xvd0Nhc2UoaXRlcik7CiAKKyAgICBCRUdJTl9VTklO
VEVSUlVQVEVEX1NFUVVFTkNFKHNlcXVlbmNlR2V0QnlJZFNsb3dDYXNlKTsKKwogI2lmbmRlZiBO
REVCVUcKICAgICBMYWJlbCBjb2xkUGF0aEJlZ2luKHRoaXMpOwogI2VuZGlmCkBAIC0xMjQxLDYg
KzEyNTUsOCBAQCB2b2lkIEpJVDo6Y29tcGlsZUdldEJ5SWRTbG93Q2FzZShpbnQgcmVzdWx0VlJl
ZywgaW50IGJhc2VWUmVnLCBJZGVudGlmaWVyKiBpZGVudAogICAgIHN0dWJDYWxsLmFkZEFyZ3Vt
ZW50KEltbVB0cihpZGVudCkpOwogICAgIENhbGwgY2FsbCA9IHN0dWJDYWxsLmNhbGwocmVzdWx0
VlJlZyk7CiAKKyAgICBFTkRfVU5JTlRFUlJVUFRFRF9TRVFVRU5DRShzZXF1ZW5jZUdldEJ5SWRT
bG93Q2FzZSk7CisKICAgICBBU1NFUlQoZGlmZmVyZW5jZUJldHdlZW4oY29sZFBhdGhCZWdpbiwg
Y2FsbCkgPT0gcGF0Y2hPZmZzZXRHZXRCeUlkU2xvd0Nhc2VDYWxsKTsKIAogICAgIC8vIFRyYWNr
IHRoZSBsb2NhdGlvbiBvZiB0aGUgY2FsbDsgdGhpcyB3aWxsIGJlIHVzZWQgdG8gcmVjb3ZlciBw
YXRjaCBpbmZvcm1hdGlvbi4KQEAgLTEyNjQsNiArMTI4MCw4IEBAIHZvaWQgSklUOjplbWl0X29w
X3B1dF9ieV9pZChJbnN0cnVjdGlvbiogY3VycmVudEluc3RydWN0aW9uKQogICAgIC8vIEp1bXAg
dG8gYSBzbG93IGNhc2UgaWYgZWl0aGVyIHRoZSBiYXNlIG9iamVjdCBpcyBhbiBpbW1lZGlhdGUs
IG9yIGlmIHRoZSBTdHJ1Y3R1cmUgZG9lcyBub3QgbWF0Y2guCiAgICAgZW1pdEp1bXBTbG93Q2Fz
ZUlmTm90SlNDZWxsKHJlZ1QwLCBiYXNlVlJlZyk7CiAKKyAgICBCRUdJTl9VTklOVEVSUlVQVEVE
X1NFUVVFTkNFKHNlcXVlbmNlUHV0QnlJZCk7CisKICAgICBMYWJlbCBob3RQYXRoQmVnaW4odGhp
cyk7CiAgICAgbV9wcm9wZXJ0eUFjY2Vzc0NvbXBpbGF0aW9uSW5mb1twcm9wZXJ0eUFjY2Vzc0lu
c3RydWN0aW9uSW5kZXhdLmhvdFBhdGhCZWdpbiA9IGhvdFBhdGhCZWdpbjsKIApAQCAtMTI3OSw2
ICsxMjk3LDkgQEAgdm9pZCBKSVQ6OmVtaXRfb3BfcHV0X2J5X2lkKEluc3RydWN0aW9uKiBjdXJy
ZW50SW5zdHJ1Y3Rpb24pCiAgICAgQVNTRVJUKGRpZmZlcmVuY2VCZXR3ZWVuKGV4dGVybmFsTG9h
ZCwgZXh0ZXJuYWxMb2FkQ29tcGxldGUpID09IHBhdGNoTGVuZ3RoUHV0QnlJZEV4dGVybmFsTG9h
ZCk7CiAKICAgICBEYXRhTGFiZWwzMiBkaXNwbGFjZW1lbnRMYWJlbCA9IHN0b3JlUHRyV2l0aEFk
ZHJlc3NPZmZzZXRQYXRjaChyZWdUMSwgQWRkcmVzcyhyZWdUMCwgcGF0Y2hHZXRCeUlkRGVmYXVs
dE9mZnNldCkpOworCisgICAgRU5EX1VOSU5URVJSVVBURURfU0VRVUVOQ0Uoc2VxdWVuY2VQdXRC
eUlkKTsKKwogICAgIEFTU0VSVChkaWZmZXJlbmNlQmV0d2Vlbihob3RQYXRoQmVnaW4sIGRpc3Bs
YWNlbWVudExhYmVsKSA9PSBwYXRjaE9mZnNldFB1dEJ5SWRQcm9wZXJ0eU1hcE9mZnNldCk7CiB9
CiAKLS0gCjEuNi4wLjQKCg==
</data>
<flag name="review"
          id="18792"
          type_id="1"
          status="+"
          setter="barraclough"
    />
          </attachment>
      

    </bug>

</bugzilla>