<html><head><meta http-equiv="Content-Type" content="text/html charset=windows-1252"><base href="x-msg://14202/"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">Hi Weiming,<div><br></div><div>This looks great, please apply.</div><div><br></div><div>The Select* methods can stay as-is for now. That interface is old and predates the convention. It should be cleaned up, but it's not a big deal for now.</div><div><br></div><div>Thanks again for your previous patch and for this follow up.</div><div><br></div><div>-Jim</div><div><br><div><div>On Nov 16, 2012, at 3:37 PM, Weiming Zhao <<a href="mailto:weimingz@codeaurora.org">weimingz@codeaurora.org</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div lang="EN-US" link="blue" vlink="purple" style="font-family: Helvetica; font-size: medium; font-style: normal; font-variant: normal; font-weight: normal; letter-spacing: normal; line-height: normal; orphans: 2; text-align: -webkit-auto; text-indent: 0px; text-transform: none; white-space: normal; widows: 2; word-spacing: 0px; -webkit-text-size-adjust: auto; -webkit-text-stroke-width: 0px; "><div class="WordSection1" style="page: WordSection1; "><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">Hi Jim,<o:p></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "> </span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">Attached is the follw-up patch, which renames PairXRegs to createXRegPairNode and QuadXRegs => createQuadXRegsNode to meet the coding style requirement.<o:p></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "> </span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">There are also tons of SelectXYZ() functions that should be selectXYZ(). Since there are so many, I’m not sure if they should be corrected or not.<o:p></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "> </span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">Thanks,<o:p></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">Weiming<o:p></o:p></span></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "> </span></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); ">Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by The Linux Foundation</span><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "><o:p></o:p></span></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><span style="font-size: 11pt; font-family: Calibri, sans-serif; color: rgb(31, 73, 125); "> </span></div><div><div style="border-style: solid none none; border-top-width: 1pt; border-top-color: rgb(181, 196, 223); padding: 3pt 0in 0in; "><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><b><span style="font-size: 10pt; font-family: Tahoma, sans-serif; ">From:</span></b><span style="font-size: 10pt; font-family: Tahoma, sans-serif; "><span class="Apple-converted-space"> </span>Jim Grosbach [mailto:grosbach@<a href="http://apple.com" style="color: purple; text-decoration: underline; ">apple.com</a>]<span class="Apple-converted-space"> </span><br><b>Sent:</b><span class="Apple-converted-space"> </span>Thursday, November 15, 2012 1:22 PM<br><b>To:</b><span class="Apple-converted-space"> </span><a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a><br><b>Cc:</b><span class="Apple-converted-space"> </span>'Jakob Stoklund Olesen';<span class="Apple-converted-space"> </span><a href="mailto:llvm-commits@cs.uiuc.edu" style="color: purple; text-decoration: underline; ">llvm-commits@cs.uiuc.edu</a>;<span class="Apple-converted-space"> </span><a href="mailto:zinob@codeaurora.org" style="color: purple; text-decoration: underline; ">zinob@codeaurora.org</a><br><b>Subject:</b><span class="Apple-converted-space"> </span>Re: [llvm-commits] Fixing Bug 13662: paired register for inline asm with 64-bit data on ARM<o:p></o:p></span></div></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Hi Weiming,<o:p></o:p></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">A few stylistic notes are the only cleanups I'd like to see. The core code is looking great. <o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Jakob, do you have any additional changes you would like to see?<o:p></o:p></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">-Jim<o:p></o:p></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div><div><div><blockquote style="margin-top: 5pt; margin-bottom: 5pt; "><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+/// PairRRegs - Form a GPRPair pseudo register from a pair of G registers.<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+///<o:p></o:p></div></div></blockquote></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">The DOxygen style preferences have changed a bit recently. Have a look at <a href="http://llvm.org/docs/CodingStandards.html#doxygen-use-in-documentation-comments" style="color: purple; text-decoration: underline; ">http://llvm.org/docs/CodingStandards.html#doxygen-use-in-documentation-comments</a> for the gory details.<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><blockquote style="margin-top: 5pt; margin-bottom: 5pt; "><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+SDNode *ARMDAGToDAGISel::PairGRegs(EVT VT, SDValue V0, SDValue V1) {<o:p></o:p></div></blockquote></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">This function name could be clearer and should adhere to the coding syle guidelines (start w/ a verb, camel-case w/ the first letter being lower case). Something like createGPRPairNode(), perhaps.<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><blockquote style="margin-top: 5pt; margin-bottom: 5pt; "><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  DebugLoc dl = V0.getNode()->getDebugLoc();<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  SDValue RegClass =<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+    CurDAG->getTargetConstant(ARM::GPRPairRegClassID, MVT::i32);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  SDValue SubReg0 = CurDAG->getTargetConstant(ARM::gsub_0, MVT::i32);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  SDValue SubReg1 = CurDAG->getTargetConstant(ARM::gsub_1, MVT::i32);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  const SDValue Ops[] = { RegClass, V0, SubReg0, V1, SubReg1 };<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  return CurDAG->getMachineNode(TargetOpcode::REG_SEQUENCE, dl, VT, Ops, 5);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+}<o:p></o:p></div></div></blockquote></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><blockquote style="margin-top: 5pt; margin-bottom: 5pt; "><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">--- a/lib/Target/ARM/ARMISelLowering.cpp<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+++ b/lib/Target/ARM/ARMISelLowering.cpp<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">@@ -5771,12 +5771,16 @@ ARMTargetLowering::EmitAtomicBinary64(MachineInstr *MI, MachineBasicBlock *BB,<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">   // for ldrexd must be different.<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">   BB = loopMBB;<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">   // Load<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  unsigned gpair0 = MRI.createVirtualRegister(&ARM::GPRPairRegClass);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+  unsigned gpair1 = MRI.createVirtualRegister(&ARM::GPRPairRegClass);<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+<o:p></o:p></div></div></blockquote><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Variables should start with upper case. Perhaps RegPair0 and RegPair? Yes, some of the surrounding code sets a bad example about this. :( Fixing some of that as a separate follow-up patch would be very welcome (though in no way required for this patch to go in).<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><blockquote style="margin-top: 5pt; margin-bottom: 5pt; "><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">+    unsigned undef = MRI.createVirtualRegister(&ARM::GPRPairRegClass);<o:p></o:p></div></div></blockquote><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Ditto. Perhaps UndefPair?<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">-Jim<o:p></o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div><div><div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">On Nov 2, 2012, at 10:08 AM, Weiming Zhao <<a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a>> wrote:<o:p></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Hi Jim,<br><br>Thanks for your review and suggestion.<br>RegisterOperand does make the code cleaner.  I also add more explanations on<br>Disassembler and AsmParser.<br><br>Please help to review.<br><br>Thanks,<br>Weiming<br><br>Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum, hosted by<br>The Linux Foundation<br><br><br>-----Original Message-----<br>From: Jim Grosbach [mailto:grosbach@<a href="http://apple.com" style="color: purple; text-decoration: underline; ">apple.com</a>]<span class="Apple-converted-space"> </span><br>Sent: Thursday, November 01, 2012 5:16 PM<br>To:<span class="Apple-converted-space"> </span><a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a><br>Cc: 'Jakob Stoklund Olesen';<span class="Apple-converted-space"> </span><a href="mailto:llvm-commits@cs.uiuc.edu" style="color: purple; text-decoration: underline; ">llvm-commits@cs.uiuc.edu</a>;<span class="Apple-converted-space"> </span><a href="mailto:zinob@codeaurora.org" style="color: purple; text-decoration: underline; ">zinob@codeaurora.org</a><br>Subject: Re: [llvm-commits] Fixing Bug 13662: paired register for inline asm<br>with 64-bit data on ARM<br><br>Hi Weiming,<br><br>You may want to consider a RegisterOperand here, which allows a custom print<br>method on a register class. You can just use the RegisterOperand wherever<br>you'd normally use a RegisterClass in the (ins) and (outs) lists. For<br>example, def GPRPairOp : RegisterOperand<GPRPair, "printGPRPair">;<br><br>Then the printOperand() method doesn't need to perform the special "is this<br>a gprpair?" check for every register operand, which is a speed improvement<br>on the common path. There's a dedicated print method that's only used for<br>these operands.<br><br>The asm parser bit seems ok. It's a pretty ugly hack, but that's somewhat<br>necessary at this stage, as the parsers don't have any way to express these<br>kinds of constraints, so we have to do it manually in C++ code. Please add a<br>FIXME there with a very descriptive comment about why this is necessary.<br><br>-Jim<br><br>On Nov 1, 2012, at 3:35 PM, Weiming Zhao <<a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a>> wrote:<br><br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Hi Jakob & Jim,<br><br>I updated the instruction def of ldrexd/strexd to let them use GPRPair<span class="Apple-converted-space"> </span><br>Reg class.<br>I also fixed ldrexd/strexd intrinsics and atomic_64 lowering accordingly.<br>Disassembler and AsmParser are adjusted to fit the new instruction def.<br>The original test case "atomic-64bit.ll" is updated, so it's not<span class="Apple-converted-space"> </span><br>checking hardcoded R0,R1 or R2,R3<br><br>It passes the "make check", especially atomic-64bit.ll, ldstrexd,ll,<span class="Apple-converted-space"> </span><br>MC/ARM/basic-asm-instrucions.s, MC/ARM/diagnstics.s and<span class="Apple-converted-space"> </span><br>MC/Disassembler/ARM/ basic-arm-instructions.txt<br><br>Please help to review it.<br><br>Thanks,<br>Weiming<br><br>Qualcomm Innovation Center, Inc. is a member of Code Aurora Forum,<span class="Apple-converted-space"> </span><br>hosted by The Linux Foundation<br><br><br>-----Original Message-----<br>From: Jim Grosbach [mailto:grosbach@<a href="http://apple.com" style="color: purple; text-decoration: underline; ">apple.com</a>]<br>Sent: Wednesday, October 31, 2012 3:24 PM<br>To: Jakob Stoklund Olesen<br>Cc:<span class="Apple-converted-space"> </span><a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a>;<span class="Apple-converted-space"> </span><a href="mailto:llvm-commits@cs.uiuc.edu" style="color: purple; text-decoration: underline; ">llvm-commits@cs.uiuc.edu</a>;<span class="Apple-converted-space"> </span><br><a href="mailto:zinob@codeaurora.org" style="color: purple; text-decoration: underline; ">zinob@codeaurora.org</a><br>Subject: Re: [llvm-commits] Fixing Bug 13662: paired register for<span class="Apple-converted-space"> </span><br>inline asm with 64-bit data on ARM<br><br><br>On Oct 31, 2012, at 3:17 PM, Jakob Stoklund Olesen <<a href="mailto:stoklund@2pi.dk" style="color: purple; text-decoration: underline; ">stoklund@2pi.dk</a>><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">wrote:<br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>On Oct 31, 2012, at 3:15 PM, "Weiming Zhao" <<a href="mailto:weimingz@codeaurora.org" style="color: purple; text-decoration: underline; ">weimingz@codeaurora.org</a>><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">wrote:<br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">Hi Jakob,<br><br>I'm changing the ldrexd/strexd of ARMInstrInfo.td to def LDREXD:<span class="Apple-converted-space"> </span><br>AIldrex<0b01, (outs GPRPair:$Rt),(ins addr_offset_none:$addr),<br>                  NoItinerary, "ldrexd", "\t$Rt, $addr", []> { let<span class="Apple-converted-space"> </span><br>DecoderMethod = "DecodeDoubleRegLoad"; }<br><br>def STREXD : AIstrex<0b01, (outs GPR:$Rd),<br>                (ins GPRPair:$Rt, addr_offset_none:$addr),<br>                NoItinerary, "strexd", "\t$Rd, $Rt, $addr", []> {<span class="Apple-converted-space"> </span><br>let DecoderMethod = "DecodeDoubleRegStore"; }<br><br>Is this the way you're referring to?<o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>Exactly.<br><br><br><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; ">So far, it almost works but I need to deal with printing "R0_R1" for<span class="Apple-converted-space"> </span><br>the GPRPair reg name. I'm planning to do it in<span class="Apple-converted-space"> </span><br>InstPrinter/ARMInstPrinter.cpp::printOperand().<o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>I think that's right. Jim?<o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br>Sure, that'll work. Changing the instruction definitions like this<span class="Apple-converted-space"> </span><br>will require some work in the AsmParser, too, though. I'm surprised<span class="Apple-converted-space"> </span><br>you're not seeing a "make check" failure on basic-arm-instructions.s<span class="Apple-converted-space"> </span><br>with these changes.<br><br>-Jim<br><0002-Remove-hard-coded-registers-in-ARM-ldrexd-and-strexd.patch><o:p></o:p></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><br><0003-Remove-hard-coded-registers-in-ARM-ldrexd-and-strexd.patch><o:p></o:p></div></div><div style="margin: 0in 0in 0.0001pt; font-size: 12pt; font-family: 'Times New Roman', serif; "><o:p> </o:p></div></div></div></div></div><span><refactor.patch></span></div></blockquote></div><br></div></body></html>