Thread deadlocked on itself?

Hi,
we have a production server, where threads become occassionally unresponsive. At that time, we take a thread dump. A few of those thread dumps show a thread is waiting to lock an object. Strangely, a few lines down in the stack trace, the same thread has the object locked. No other thread has the particular object locked or waits on it.
How is it possible that a thread can be waitin for an object that, it has locked itself?
FYI, the first time, I saw this, I thought it was a fluke. Perhaps the thread wasn't really waiting, but in the progress of getting the lock. Though, this issues is showing up a few times a week.
Because the entire thread dump is very huge (long stack traces, lots of threads), here are only the last lines of the relevant stack trace:
"/atg/dynamo/server/DrpServer-11:ipaddr=68.212.254.42;path=/store/web/login/login.jsp;sessionid=54ACNL0PIMC5UCQ2M5SSAOQKDRT4IIV0" prio=1 tid=0x85252f08 nid=0x3b15 in Object.wait() [86c88000..86c8a8c4]
at java.lang.Object.wait(Native Method)
- waiting on <0x71c4bfc8> (a atg.service.lockmanager.ClientLockEntry)
at atg.service.lockmanager.ClientLockEntry.acquireReadLock(ClientLockEntry.java:597)
- locked <0x71c4bfc8> (a atg.service.lockmanager.ClientLockEntry)
at atg.service.lockmanager.ClientLockManager.acquireReadLock(ClientLockManager.java:977)
at atg.adapter.gsa.ItemTransactionState.acquireReadLock(ItemTransactionState.java:719)
at atg.adapter.gsa.GSAItem.getPersistentPropertyValue(GSAItem.java:583)
at atg.adapter.gsa.GSAItem.getPropertyValue(GSAItem.java:478)
at atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:1471)
at atg.adapter.gsa.GSAItem.getItemTransactionState(GSAItem.java:1351)
at atg.adapter.gsa.GSAItem.getItemTransactionStateUnchecked(GSAItem.java:1543)
at atg.adapter.gsa.GSAItem.getPropertyValue(GSAItem.java:735)
at atg.repository.RepositoryItemImpl.getPropertyValue(RepositoryItemImpl.java:127)

we have a production server, where threads become
occassionally unresponsive. At that time, we take a
thread dump. A few of those thread dumps show a
thread is waiting to lock an object. Strangely, a few
lines down in the stack trace, the same thread has
the object locked. No other thread has the particular
object locked or waits on it.You said occasionally...you mean not frequently, don�t you? Just a wild guess: perhaps the notify() method is being used instead of notifyAll(). When you use notify() you wake up only one thread. Therefore, if some problem occur in this only one awaken thread, so that it is not able to wake up the other threads, then you will have a big deadlock like the problem you are describing.
The problem that might happen with that only one awaken thread I mentioned can be everything unpredictable you can imagine. The JVM environment is subject to any kind of unpredictable problems. Not only JVM, but also any other software is subject to these same kinds of problem. Although these problems are rare, they can happen.
If notifyAll() is used instead of notify(), at least all the threads are supposed to be awaken, and then, even if some problem occur with the awaken thread that is holding the monitor, other threads are permitted to hold the monitor, since all of them are awaken, and therefore the probability of occurring that big unpredictable deadlock decreases significantly.
Maybe it sounds like notifyAll() is always better than notify(). I am not saying that. I am just saying something that is possibly happening in your case. I suggest you reviewing all the code where the handling of threads is being done. Try to find some suspicious piece of code that is causing the problem, related to those basic issues about threads. And after you are sure that everything related to the basic rules of thumb about thread handling is ok, then think about what I said (about those unpredictable and rare problems), and check if using notifyAll() instead of notify() makes your application works better.

Similar Messages

  • Config changes to avoid JMS thread deadlock

              From various postings and Weblogic documentation I'm trying to understand the specifics
              of
              how to avoid a JMS thread deadlock problem. The Performance and Tuning Guide states
              "...consider a servlet that reads messages from a designated JMS queue. If all
              execute threads in a server are used to process the servlet requests, then no
              threads are available to
              deliver messages from the JMS queue. A deadlock condition exists,...". I believe
              that is
              what I have, and am trying to understand whether the solution is to create a separate
              execute queue for the servlets, or change the settings on the Execute and JMS
              Thread queues,
              or both, or something else, and if so, what are the settings I should use?
              Specifically, I have servlets that use connections to a custom resource adapter,
              and each
              custom adapter connection writes to a single (for all adapter connection instances)
              permanent JMS queue and reads a response from a one-per-adapter-connection temporary
              queue. Messages are read from the permanent JMS queue by a client process (running
              outside of WLS). My servlets use the default execute queue - i.e., the don't use
              a custom execute queue - and my reads on the temporary JMS queues are timing out,
              I believe because
              no threads are available to process the JMS message
              So can I avoid deadlocks by:
              1. creating a custom execute queue that has n threads
              2. allowing a maximum of n custom adapter connection instances
              3. Setting my JMS thread pool to n (assuming I have no other JMS activity)
              i.e., using the same number - n - for all three settings? I'm about to try this
              and see,
              but if it works I'd still like to have a better understanding as to why (and of
              course if it doesn't,
              I need that understanding even more).
              Or, is text somewhere describing the specifics of how all of the Weblogic thread
              queues
              and JMS play together? There seem to be pieces scattered in various Weblogic documents,
              but
              nowhere have I found a single, coherent and complete description of how all of
              these factors
              interact.
              

              Tom Barnes <[email protected]> wrote:
              >Thanks for the info. Allocating the servlets to their own execute queue solved
              my problem.
              >
              >Glen wrote:
              >
              >> From various postings and Weblogic documentation I'm trying to understand
              >the specifics
              >> of
              >> how to avoid a JMS thread deadlock problem. The Performance and Tuning
              >Guide states
              >> "...consider a servlet that reads messages from a designated JMS queue.
              >If all
              >> execute threads in a server are used to process the servlet requests,
              >then no
              >> threads are available to
              >> deliver messages from the JMS queue. A deadlock condition exists,...".
              > I believe
              >> that is
              >> what I have,
              >
              >You can often verify by inspecting a thread dump. Note that there
              >are other possible reasons for dead-lock, including
              >programming errors at the application level - and if that is
              >the case, the thread dump will likely reveal that as well.
              >
              >> and am trying to understand whether the solution is to create a separate
              >> execute queue for the servlets, or change the settings on the Execute
              >and JMS
              >> Thread queues,
              >> or both, or something else, and if so, what are the settings I should
              >use?
              >>
              >> Specifically, I have servlets that use connections to a custom resource
              >adapter,
              >> and each
              >> custom adapter connection writes to a single (for all adapter connection
              >instances)
              >> permanent JMS queue and reads a response from a one-per-adapter-connection
              >temporary
              >> queue. Messages are read from the permanent JMS queue by a client process
              >(running
              >> outside of WLS). My servlets use the default execute queue - i.e.,
              >the don't use
              >> a custom execute queue - and my reads on the temporary JMS queues are
              >timing out,
              >> I believe because
              >> no threads are available to process the JMS message
              >>
              >> So can I avoid deadlocks by:
              >> 1. creating a custom execute queue that has n threads
              >
              >yes, or configuring more threads for the default pool
              >(somewhat more than you have concurrent servlets)
              >
              >> 2. allowing a maximum of n custom adapter connection instances
              >
              >no - i think your servlets would just end up blocking waiting
              >for adapter connections (instead of blocking waiting for
              >response messages)
              >
              >> 3. Setting my JMS thread pool to n (assuming I have no other JMS
              >activity)
              >
              >i'm not sure, but I don't think this will help in your case - JMS
              >uses the JMS thread pool for a limited purpose, and
              >still uses the default thread pool otherwise (as documented in
              >the perf guide). Plus the default thread pool is needed for
              >RMI/timers/etc.
              >
              >If servlets are truly "stealing" all of the default threads,
              >I think the best option is give
              >the servlets their own thread-pool.
              >
              >> i.e., using the same number - n - for all three settings? I'm about
              >to try this
              >> and see,
              >> but if it works I'd still like to have a better understanding as to
              >why (and of
              >> course if it doesn't,
              >> I need that understanding even more).
              >>
              >> Or, is text somewhere describing the specifics of how all of the Weblogic
              >thread
              >> queues
              >> and JMS play together?
              >
              >The JMS performance guide
              >white-paper is probably the best resource at the moment, it seems
              >to be pointing you in the right direction (provided you confirm
              >the problem is thread pool limits)
              >
              >> There seem to be pieces scattered in various Weblogic documents,
              >> but
              >> nowhere have I found a single, coherent and complete description of
              >how all of
              >> these factors
              >> interact.
              >
              >You are welcome to email a suggestion to bea support.
              >Customer suggestions tend to have more weight than internally
              >generated suggestions.
              >
              >
              

  • Multi-processor Multi-Threaded deadlock

    Hi all-
    I've posted this over at jGuru.com and haven't come up with an effective solution but I wanted to try here before I reported this as a bug. This deals with kicking off many threads at once (such as might happen when requests are coming in over a socket).
    I'm looking for a way to find out when all of my threads have finished processing. I have several different implementations that work on a single processor machine:
    inst is an array of 1000+ threads. The type of inst is a class that extends threads (and thus implements the runable interface).
    for (i = 0;i<Count;i++)
    inst[ i ].start()
    for (i = 0;i<Count;i++)
    inst[ i ].join();
    however this never terminates on a multiprocessor machine. I've also tried an isAlive loop instead of join that waits until all threads have terminated until it goes on. Again, this works on the single processor but not the multi-processor machine. Additionally someone suggested a solution with a third "counter" class that is synchronized and decremented in each thread as processing finishes, then a notifyAll is called. The main thread is waiting after it starts all the threads, wakes up to check if the count is zero, and if it's not it goes back to sleep. Again this will work on the single processor but not the multi-processor.
    The thread itself ends up doing a JNI call which in turn calls another DLL which I just finished making thread safe (this has been tested via C programs). The procedures are mathematically intensive but calculation time is around half a second on a P3 800Mhz.
    Any help on this is greatly appreciated. My next step will likely be tearing down the application to exclude the calculating part just to test the JVM behavior. Is there a spec with the JVM behavior on a multi processor machine, I haven't seen one and it's hard to know what to expect from join() (joining across to processors seems like wierd concept), getCurrentThread() (since 2+ threads are running at the same time), etc.

    My next step will likely be tearing down the application to
    exclude the calculating part just to test the JVM behavior.Sounds like a really good idea.
    Is there a spec with the JVM behavior on a multi processor machine, The behaviour of threads is defined in the specs.
    You might want to check the bug database also. There are bug fixes for various versions of java.

  • Thread deadlock in ClassMetaData

    Within a single JVM we are running 4-5 Threads that each create and use
    their own PM. The multiThreaded option is set to true, even though the
    threads don't share any common data or variables.
    We have an intermittent problem where all threads appear to hang from which
    they never recover. While it doesn't always occur, it seems to happen more
    often when the application run and the threads are first started. When first
    started they are all trying to perform queries which ends in the deadlock.
    Could you please look into this and suggest a work around that doesn't
    invlove upgrading to 3.1.
    Regards
    Nathan
    OS Win 2k3 and XP
    Kodo 2.5.8
    See attached for Stacktrace and properties
    begin 666 JVM Full Hang Thread States.txt
    M,C P-"TP-2TQ." Q-#HS,3HS-2PQ-3$@1$5"54<@;6%I;B @(" @(" @(" @
    M(" @(" M($-O;G1R;VQL97(N<G5N*"D@+2!E;G1E<@T*,C P-"TP-2TQ." Q
    M-#HS,3HS-2PR-S8@1$5"54<@;6%I;B @(" @(" @(" @(" @(" M(%!R;W!E
    M<G1I97,@9FEL92 B:V]D;RYP<F]P97)T:65S(B!H87,@8F5E;B!R96%D(&%N
    M9"!C86-H960@9F]R(&-U<G)E;G0@2E9-#0HR,# T+3 U+3$X(#$T.C,Q.C,U
    M+#(W-B!$14)51R!M86EN(" @(" @(" @(" @(" @("T@4')O<&5R=&EE<R!F
    M:6QE(")#;VYF:6=U<F%T:6]N4WES=&5M+G!R;W!E<G1I97,B(&AA<R!B965N
    M(')E860@86YD(&-A8VAE9"!F;W(@8W5R<F5N="!*5DT-"C(P,#0M,#4M,3@@
    M,30Z,S$Z,S4L,C<V($E.1D\@(&UA:6X@(" @(" @(" @(" @(" @+2!097)S
    M:7-T96YC94UA;F%G97)&86-T;W)I97,@=VEL;"!B92!C<F5A=&5D('5S:6YG
    M('1H92!097)S:7-T)W,@8VQA<W-L;V%D97(N#0HR,# T+3 U+3$X(#$T.C,Q
    M.C,W+#DQ-R!$14)51R!M86EN(" @(" @(" @(" @(" @("T@3F5W(%!E<G-I
    M<W0@3V)T86EN960@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y097)S
    M:7-T96YC94UA;F%G97));7!L0&%D8C%D- T*,C P-"TP-2TQ." Q-#HS,3HT
    M,"PP-3<@1$5"54<@;6%I;B @(" @(" @(" @(" @(" M($)E86Y#;VYT<F]L
    M;&5R+G!R;V-E<W,H*2 M($EN<W1A;G1I871I;F<@5V]R:V5R5&AR96%D.C(P
    M,@T*,C P-"TP-2TQ." Q-#HS,3HT,"PP-S,@1$5"54<@;6%I;B @(" @(" @
    M(" @(" @(" M($YE=R!097)S:7-T($]B=&%I;F5D(&-O;2YS;VQA<FUE=')I
    M8RYK;V1O+G)U;G1I;64N4&5R<VES=&5N8V5-86YA9V5R26UP;$ Q-CDQ-V5E
    M#0HR,# T+3 U+3$X(#$T.C,Q.C0P+#$S-2!$14)51R!M86EN(" @(" @(" @
    M(" @(" @("T@0F5A;D-O;G1R;VQL97(N<')O8V5S<R@I("T@26YS=&%N=&EA
    M=&EN9R!7;W)K97)4:')E860Z,C S#0HR,# T+3 U+3$X(#$T.C,Q.C0P+#$S
    M-2!$14)51R!M86EN(" @(" @(" @(" @(" @("T@3F5W(%!E<G-I<W0@3V)T
    M86EN960@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y097)S:7-T96YC
    M94UA;F%G97));7!L0#$T.3$P-6(-"C(P,#0M,#4M,3@@,30Z,S$Z-# L,C8P
    M($1%0E5'(&UA:6X@(" @(" @(" @(" @(" @+2!"96%N0V]N=')O;&QE<BYP
    M<F]C97-S*"D@+2!);G-T86YT:6%T:6YG(%=O<FME<E1H<F5A9#HR,#$-"C(P
    M,#0M,#4M,3@@,30Z,S$Z-# L,C<V($1%0E5'(&UA:6X@(" @(" @(" @(" @
    M(" @+2!.97<@4&5R<VES="!/8G1A:6YE9"!C;VTN<V]L87)M971R:6,N:V]D
    M;RYR=6YT:6UE+E!E<G-I<W1E;F-E36%N86=E<DEM<&Q 8V%F-F,Q#0HR,# T
    M+3 U+3$X(#$T.C,Q.C0P+#4R-B!$14)51R!M86EN(" @(" @(" @(" @(" @
    M("T@0F5A;D-O;G1R;VQL97(N<')O8V5S<R@I("T@26YS=&%N=&EA=&EN9R!7
    M;W)K97)4:')E860Z,C T#0HR,# T+3 U+3$X(#$T.C,Q.C0P+#4R-B!$14)5
    M1R!M86EN(" @(" @(" @(" @(" @("T@3F5W(%!E<G-I<W0@3V)T86EN960@
    M8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y097)S:7-T96YC94UA;F%G
    M97));7!L0#%E8V9E,#<-"C(P,#0M,#4M,3@@,30Z,S$Z-# L-C@R($1%0E5'
    M($5V96YT0F5A;CHR,#(@(" @(" @+2!;4W1A<G1=(&-O;2YM86QL97-O;G,N
    M;&%W;6%N+F%P+F5X8VAA;F=E+E!R;V-E<W-&;VQD97(-"C(P,#0M,#4M,3@@
    M,30Z,S$Z-# L.#<P($1%0E5'($5V96YT0F5A;CHR,#,@(" @(" @+2!;4W1A
    M<G1=(&-O;2YM86QL97-O;G,N;&%W;6%N+F%P+FEM86YA9V4N4')O8V5S<U!R
    M;VIE8W0-"C(P,#0M,#4M,3@@,30Z,S$Z-#0L-3<S($1%0E5'($5V96YT0F5A
    M;CHR,#(@(" @(" @+2!.97<@4&5R<VES="!/8G1A:6YE9"!C;VTN<V]L87)M
    M971R:6,N:V]D;RYR=6YT:6UE+E!E<G-I<W1E;F-E36%N86=E<DEM<&Q 9#8Q
    M865F#0HR,# T+3 U+3$X(#$T.C,Q.C0T+#8V-R!$14)51R!%=F5N=$)E86XZ
    M,C R(" @(" @("T@3&]C:R!O8G1A:6YE9"!I;B P;7,@(&]N(")C;VTN;6%L
    M;&5S;VYS+FQA=VUA;BYA<"YE>&-H86YG92Y%>&-H86YG949O;&1E<B(@*R B
    M-S0W,C(B#0HR,# T+3 U+3$X(#$T.C,Q.C0T+#8V-R!$14)51R!%=F5N=$)E
    M86XZ,C R(" @(" @("T@4&5R<VES="YS:'5T9&]W;B@I("T@<&T@8VQO<V5D
    M(#H@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y097)S:7-T96YC94UA
    M;F%G97));7!L0&0V,6%E9@T*,C P-"TP-2TQ." Q-#HS,3HT-"PY.34@1$5"
    M54<@179E;G1"96%N.C(P,R @(" @(" M($YE=R!097)S:7-T($]B=&%I;F5D
    M(&-O;2YS;VQA<FUE=')I8RYK;V1O+G)U;G1I;64N4&5R<VES=&5N8V5-86YA
    M9V5R26UP;$ R9&$U838-"C(P,#0M,#4M,3@@,30Z,S$Z-#4L,#$P($1%0E5'
    M($5V96YT0F5A;CHR,#(@(" @(" @+2!.97<@4&5R<VES="!/8G1A:6YE9"!C
    M;VTN<V]L87)M971R:6,N:V]D;RYR=6YT:6UE+E!E<G-I<W1E;F-E36%N86=E
    M<DEM<&Q 830Q-6$S#0HR,# T+3 U+3$X(#$T.C,Q.C0U+# T,B!$14)51R!%
    M=F5N=$)E86XZ,C S(" @(" @("T@3&]C:R!O8G1A:6YE9"!I;B P;7,@(&]N
    M(")C;VTN;6%L;&5S;VYS+FQA=VUA;BYA<"YI;6%N86=E+DEM86YA9V50<F]J
    M96-T4F]L92(@*R B-S0X,3$B#0HR,# T+3 U+3$X(#$T.C,Q.C0U+# U-R!$
    M14)51R!%=F5N=$)E86XZ,C S(" @(" @("T@4&5R<VES="YS:'5T9&]W;B@I
    M("T@<&T@8VQO<V5D(#H@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y0
    M97)S:7-T96YC94UA;F%G97));7!L0#)D835A-@T*,C P-"TP-2TQ." Q-#HS
    M,3HT-2PP-S,@1$5"54<@179E;G1"96%N.C(P,R @(" @(" M($EM86Y#;VYN
    M96-T:6]N+F%D;6EN3&]G:6X@+2!E;G1E<@T*,C P-"TP-2TQ." Q-#HS,3HT
    M-2PP.#D@1$5"54<@179E;G1"96%N.C(P,B @(" @(" M($QO8VL@;V)T86EN
    M960@:6X@,&US("!O;B B8V]M+FUA;&QE<V]N<RYL87=M86XN86$N9F]L9&5R
    M+D9O;&1E<B(@*R B-S0W,C(B#0HR,# T+3 U+3$X(#$T.C,Q.C0U+#$P-"!$
    M14)51R!%=F5N=$)E86XZ,C R(" @(" @("T@4&5R<VES="YS:'5T9&]W;B@I
    M("T@<&T@8VQO<V5D(#H@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y0
    M97)S:7-T96YC94UA;F%G97));7!L0&$T,35A,PT*,C P-"TP-2TQ." Q-#HS
    M,3HT-2PX,SD@1$5"54<@179E;G1"96%N.C(P,B @(" @(" M($%B;W5T('1O
    M(&=E="!W<F%P<&5R+BXN#0HR,# T+3 U+3$X(#$T.C,Q.C0U+#@S.2!$14)5
    M1R!%=F5N=$)E86XZ,C R(" @(" @("T@9V5T3F5W5W)A<'!E<B@I("T@96YT
    M97(-"C(P,#0M,#4M,3@@,30Z,S$Z-#<L,#4W($1%0E5'($5V96YT0F5A;CHR
    M,#(@(" @(" @+2!G971.97=7<F%P<&5R*"D@+2!E>&ET#0HR,# T+3 U+3$X
    M(#$T.C,Q.C0W+# U-R!$14)51R!%=F5N=$)E86XZ,C R(" @(" @("T@9V]T
    M('=R87!P97(-"C(P,#0M,#4M,3@@,30Z,S$Z-#<L,#4W($1%0E5'($5V96YT
    M0F5A;CHR,#(@(" @(" @+2!G971397-S:6]N1G)O;5=R87!P97(H*2 M($=E
    M='1I;F<@0V1O4V5S<VEO;@T*,C P-"TP-2TQ." Q-#HS,3HT-RPU-3<@1$5"
    M54<@179E;G1"96%N.C(P,R @(" @(" M($EM86Y#;VYN96-T:6]N+F%D;6EN
    M3&]G:6X@+2!E>&ET#0HR,# T+3 U+3$X(#$T.C,Q.C0X+#@P-R!$14)51R!%
    M=F5N=$)E86XZ,C S(" @(" @("T@0D%#4D]#2T4@861D960@=&\@9W)O=7 @
    M;&%W;6%N-S0Y-3D-"C(P,#0M,#4M,3@@,30Z,S$Z-#DL,C(Y($1%0E5'($5V
    M96YT0F5A;CHR,#,@(" @(" @+2!*4TU)5$@@861D960@=&\@9W)O=7 @;&%W
    M;6%N-S0Y-3D-"C(P,#0M,#4M,3@@,30Z,S$Z-#DL,S(S($1%0E5'($5V96YT
    M0F5A;CHR,#,@(" @(" @+2!.97<@4&5R<VES="!/8G1A:6YE9"!C;VTN<V]L
    M87)M971R:6,N:V]D;RYR=6YT:6UE+E!E<G-I<W1E;F-E36%N86=E<DEM<&Q
    M-S5F-6(W#0HR,# T+3 U+3$X(#$T.C,Q.C0Y+#0Q-R!$14)51R!%=F5N=$)E
    M86XZ,C S(" @(" @("T@3&]C:R!O8G1A:6YE9"!I;B P;7,@(&]N(")C;VTN
    M;6%L;&5S;VYS+FQA=VUA;BYA<"YI;6%N86=E+DEM86YA9V50<F]J96-T4F]L
    M92(@*R B-S0X,3 B#0HR,# T+3 U+3$X(#$T.C,Q.C0Y+#0Q-R!$14)51R!%
    M=F5N=$)E86XZ,C S(" @(" @("T@4&5R<VES="YS:'5T9&]W;B@I("T@<&T@
    M8VQO<V5D(#H@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y097)S:7-T
    M96YC94UA;F%G97));7!L0#<U9C5B-PT*,C P-"TP-2TQ." Q-#HS,3HT.2PW
    M-#4@1$5"54<@179E;G1"96%N.C(P,R @(" @(" M($)!0U)/0TM%(&%D9&5D
    M('1O(&=R;W5P(&QA=VUA;C<T.38R#0HR,# T+3 U+3$X(#$T.C,Q.C0Y+#DQ
    M-R!$14)51R!%=F5N=$)E86XZ,C S(" @(" @("T@2E--251((&%D9&5D('1O
    M(&=R;W5P(&QA=VUA;C<T.38R#0I&=6QL('1H<F5A9"!D=6UP($IA=F$@2&]T
    M4W!O="A432D@0VQI96YT(%9-("@Q+C0N,E\P-"UB,#4@;6EX960@;6]D92DZ
    M#0H-"B)01%5-86YA9V5R26UP;"UO<&5N0V]N;F5C=&EO;B(@9&%E;6]N('!R
    M:6\]-2!T:60],'@P,F1D-3$X."!N:60],'AA96,@<G5N;F%B;&4@6S-D868P
    M,# N+C-D869D.3!=#0H@(" @(" @(&%T(&IA=F$N;F5T+E-O8VME=$EN<'5T
    M4W1R96%M+G-O8VME=%)E860P*$YA=&EV92!-971H;V0I#0H@(" @(" @(&%T
    M(&IA=F$N;F5T+E-O8VME=$EN<'5T4W1R96%M+G)E860H56YK;F]W;B!3;W5R
    M8V4I#0H@(" @(" @(&%T(&IA=F$N:6\N1&%T84EN<'5T4W1R96%M+G)E861&
    M=6QL>2A5;FMN;W=N(%-O=7)C92D-"B @(" @(" @870@8V]M+FQI;F%R+FII
    M;G1E9W)A+E!$54UA;F%G97));7!L+G)U;BA5;FMN;W=N(%-O=7)C92D-"B @
    M(" @(" @870@:F%V82YL86YG+E1H<F5A9"YR=6XH56YK;F]W;B!3;W5R8V4I
    M#0H-"B)01%5-86YA9V5R26UP;"UO<&5N0V]N;F5C=&EO;B(@9&%E;6]N('!R
    M:6\]-2!T:60],'@P,F1D-#@R."!N:60],'@Y,#0@<G5N;F%B;&4@6S-D-F8P
    M,# N+C-D-F9D.3!=#0H@(" @(" @(&%T(&IA=F$N;F5T+E-O8VME=$EN<'5T
    M4W1R96%M+G-O8VME=%)E860P*$YA=&EV92!-971H;V0I#0H@(" @(" @(&%T
    M(&IA=F$N;F5T+E-O8VME=$EN<'5T4W1R96%M+G)E860H56YK;F]W;B!3;W5R
    M8V4I#0H@(" @(" @(&%T(&IA=F$N:6\N1&%T84EN<'5T4W1R96%M+G)E861&
    M=6QL>2A5;FMN;W=N(%-O=7)C92D-"B @(" @(" @870@8V]M+FQI;F%R+FII
    M;G1E9W)A+E!$54UA;F%G97));7!L+G)U;BA5;FMN;W=N(%-O=7)C92D-"B @
    M(" @(" @870@:F%V82YL86YG+E1H<F5A9"YR=6XH56YK;F]W;B!3;W5R8V4I
    M#0H-"B)01%5-86YA9V5R26UP;"UO<&5N0V]N;F5C=&EO;B(@9&%E;6]N('!R
    M:6\]-2!T:60],'@P,F1D-#4Y."!N:60],'AF-S0@<G5N;F%B;&4@6S-D,F8P
    M,# N+C-D,F9D.3!=#0H@(" @(" @(&%T(&IA=F$N;F5T+E-O8VME=$EN<'5T
    M4W1R96%M+G-O8VME=%)E860P*$YA=&EV92!-971H;V0I#0H@(" @(" @(&%T
    M(&IA=F$N;F5T+E-O8VME=$EN<'5T4W1R96%M+G)E860H56YK;F]W;B!3;W5R
    M8V4I#0H@(" @(" @(&%T(&IA=F$N:6\N1&%T84EN<'5T4W1R96%M+G)E861&
    M=6QL>2A5;FMN;W=N(%-O=7)C92D-"B @(" @(" @870@8V]M+FQI;F%R+FII
    M;G1E9W)A+E!$54UA;F%G97));7!L+G)U;BA5;FMN;W=N(%-O=7)C92D-"B @
    M(" @(" @870@:F%V82YL86YG+E1H<F5A9"YR=6XH56YK;F]W;B!3;W5R8V4I
    M#0H-"B)*+4EN=&5G<F$@:6YT97)N86P@=&EM97(@=&AR96%D(&9O<B!*:6YT
    M96=R82!296U/6$E$4F5S;VQV97(@9F]R.B!.970]>WL@,'@W+"!S=%!%=V]R
    M:S Q?2P@>R P>#<L(#$W,BXQ."XR,BXV.'U](%-E8SU[>R P>#DL(#!X9F9F
    M9BP@?2P@>R P>#$P+" P>&9F9@T*9BP@?2P@>R P>&$L(#!X9F9F9BP@?2P@
    M>R P>&4L(#!X9F9F9BP@?2P@>R P>#$Q+" P>&9F9F8L('TL('L@,'@Q,BP@
    M,'AF9F9F+"!]?2(@9&%E;6]N('!R:6\]-2!T:60],'@P,F1B8CDQ,"!N:60]
    M,'AB,#@@=V%I=&EN9R!O;B!C;VYD:71I;VX@6S-C968P,# N#0HN,V-E9F0Y
    M,%T-"B @(" @(" @870@:F%V82YL86YG+E1H<F5A9"YS;&5E<"A.871I=F4@
    M365T:&]D*0T*(" @(" @("!A="!C;VTN;&EN87(N:FEN=&5G<F$N8VDN<G5N
    M*%5N:VYO=VX@4V]U<F-E*0T*#0HB4$1536%N86=E<DEM<&PM;W!E;D-O;FYE
    M8W1I;VXB(&1A96UO;B!P<FEO/34@=&ED/3!X,#)D8C$U8C @;FED/3!X,38T
    M(')U;FYA8FQE(%LS8V%F,# P+BXS8V%F9#DP70T*(" @(" @("!A="!J879A
    M+FYE="Y3;V-K971);G!U=%-T<F5A;2YS;V-K971296%D,"A.871I=F4@365T
    M:&]D*0T*(" @(" @("!A="!J879A+FYE="Y3;V-K971);G!U=%-T<F5A;2YR
    M96%D*%5N:VYO=VX@4V]U<F-E*0T*(" @(" @("!A="!J879A+FEO+D1A=&%)
    M;G!U=%-T<F5A;2YR96%D1G5L;'DH56YK;F]W;B!3;W5R8V4I#0H@(" @(" @
    M(&%T(&-O;2YL:6YA<BYJ:6YT96=R82Y01%5-86YA9V5R26UP;"YR=6XH56YK
    M;F]W;B!3;W5R8V4I#0H@(" @(" @(&%T(&IA=F$N;&%N9RY4:')E860N<G5N
    M*%5N:VYO=VX@4V]U<F-E*0T*#0HB4$1536%N86=E<DEM<&PM;W!E;D-O;FYE
    M8W1I;VXB(&1A96UO;B!P<FEO/34@=&ED/3!X,#)D8C8Y,S@@;FED/3!X8V$T
    M(')U;FYA8FQE(%LS8S9F,# P+BXS8S9F9#DP70T*(" @(" @("!A="!J879A
    M+FYE="Y3;V-K971);G!U=%-T<F5A;2YS;V-K971296%D,"A.871I=F4@365T
    M:&]D*0T*(" @(" @("!A="!J879A+FYE="Y3;V-K971);G!U=%-T<F5A;2YR
    M96%D*%5N:VYO=VX@4V]U<F-E*0T*(" @(" @("!A="!J879A+FEO+D1A=&%)
    M;G!U=%-T<F5A;2YR96%D1G5L;'DH56YK;F]W;B!3;W5R8V4I#0H@(" @(" @
    M(&%T(&-O;2YL:6YA<BYJ:6YT96=R82Y01%5-86YA9V5R26UP;"YR=6XH56YK
    M;F]W;B!3;W5R8V4I#0H@(" @(" @(&%T(&IA=F$N;&%N9RY4:')E860N<G5N
    M*%5N:VYO=VX@4V]U<F-E*0T*#0HB2BU);G1E9W)A(&EN=&5R;F%L('1I;65R
    M('1H<F5A9"!F;W(@2FEN=&5G<F$@4F5M3UA)1%)E<V]L=F5R(&9O<CH@3F5T
    M/7M[(#!X-RP@,3(W+C N,"XQ6S$S-5U]?2!396,]>WTB(&1A96UO;B!P<FEO
    M/34@=&ED/3!X,#)D-C@R,S @;FED/3!X-C$X('=A:71I;F<-"B!O;B!C;VYD
    M:71I;VX@6S-C,F8P,# N+C-C,F9D.3!=#0H@(" @(" @(&%T(&IA=F$N;&%N
    M9RY4:')E860N<VQE97 H3F%T:79E($UE=&AO9"D-"B @(" @(" @870@8V]M
    M+FQI;F%R+FII;G1E9W)A+F-I+G)U;BA5;FMN;W=N(%-O=7)C92D-"@T*(D5V
    M96YT0F5A;CHR,#0B(&1A96UO;B!P<FEO/34@=&ED/3!X,#)D,F4P,#@@;FED
    M/3!X-65C('=A:71I;F<@9F]R(&UO;FET;W(@96YT<GD@6S-B968P,# N+C-B
    M969D.3!=#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+FUE=&$N
    M0VQA<W--971A1&%T82YG971);G-T86YC92A#;&%S<TUE=&%$871A+FIA=F$Z
    M,3@U*0T*(" @(" @(" M('=A:71I;F<@=&\@;&]C:R \,'@Q-#(T.&9F,#X@
    M*&$@:F%V82YL86YG+D-L87-S*0T*(" @(" @("!A="!C;VTN<V]L87)M971R
    M:6,N:V]D;RYQ=65R>2Y1=65R>4EM<&PD1&%T87-T;W)E475E<GE%>&5C=71O
    M<BX\:6YI=#XH475E<GE);7!L+FIA=F$Z,34S-"D-"B @(" @(" @870@8V]M
    M+G-O;&%R;65T<FEC+FMO9&\N<75E<GDN475E<GE);7!L)%%U97)Y17AE8W5T
    M:6]N36%N86=E<BYG9711=65R>45X96-U=&]R*%%U97)Y26UP;"YJ879A.C$S
    M-C@I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+G%U97)Y+E%U
    M97)Y26UP;"YI;G1E<FYA;$-O;7!I;&4H475E<GE);7!L+FIA=F$Z-#<T*0T*
    M(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYQ=65R>2Y1=65R>4EM
    M<&PN97AE8W5T95%U97)Y5VET:$UA<"A1=65R>4EM<&PN:F%V83HV.#(I#0H@
    M(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+G%U97)Y+E%U97)Y26UP
    M;"YE>&5C=71E5VET:$UA<"A1=65R>4EM<&PN:F%V83HU-#4I#0H@(" @(" @
    M(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+G%U97)Y+E%U97)Y26UP;"YE>&5C
    M=71E5VET:$%R<F%Y*%%U97)Y26UP;"YJ879A.C4S,2D-"B @(" @(" @870@
    M8V]M+G-O;&%R;65T<FEC+FMO9&\N<75E<GDN475E<GE);7!L+F5X96-U=&4H
    M475E<GE);7!L+FIA=F$Z-3 Q*0T*(" @(" @("!A="!C;VTN;6%L;&5S;VYS
    M+FQA=VUA;BYT82YS:&%R960N0D]1=65R>2YE>&5C=71E*$)/475E<GDN:F%V
    M83HQ,S4I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+G1A+F5V
    M96YT+D5V96YT5&AR96%D+F=E=$YE>'1%=F5N="A%=F5N=$-O;G1R;VQL97(N
    M:F%V83HR-C@I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+G1A
    M+F5V96YT+D5V96YT5&AR96%D+G!R;V-E<W,H179E;G1#;VYT<F]L;&5R+FIA
    M=F$Z.3<I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+G1A+F5V
    M96YT+E=O<FME<E1H<F5A9"YR=6XH5V]R:V5R5&AR96%D+FIA=F$Z-S$I#0H-
    M"B)%=F5N=$)E86XZ,C Q(B!D865M;VX@<')I;STU('1I9#TP># S,#4T-#8X
    M(&YI9#TP>&(T-"!I;B!/8FIE8W0N=V%I="@I(%LS8CEF,# P+BXS8CEF9#DP
    M70T*(" @(" @("!A="!J879A+FQA;F<N0VQA<W,N9F]R3F%M93 H3F%T:79E
    M($UE=&AO9"D-"B @(" @(" @870@:F%V82YL86YG+D-L87-S+F9O<DYA;64H
    M56YK;F]W;B!3;W5R8V4I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK
    M;V1O+FUE=&$N0VQA<W--971A1&%T82YN97=);G-T86YC92A#;&%S<TUE=&%$
    M871A+FIA=F$Z,CDU*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D
    M;RYM971A+D-L87-S365T841A=&$N9V5T26YS=&%N8V4H0VQA<W--971A1&%T
    M82YJ879A.C(S.2D-"B @(" @(" @+2!L;V-K960@/#!X,30R-#AF9C ^("AA
    M(&IA=F$N;&%N9RY#;&%S<RD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC
    M+FMO9&\N;65T82Y#;&%S<TUE=&%$871A+F=E=$EN<W1A;F-E*$-L87-S365T
    M841A=&$N:F%V83HQ.#4I#0H@(" @(" @("T@;&]C:V5D(#PP>#$T,C0X9F8P
    M/B H82!J879A+FQA;F<N0VQA<W,I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE
    M=')I8RYK;V1O+FEM<&PN:F1B8RYS8VAE;6$N9&EC="Y344Q397)V97)$:6-T
    M:6]N87)Y+G)E9VES=&5R0VQA<W,H4U%,4V5R=F5R1&EC=&EO;F%R>2YJ879A
    M.C(U-BD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ
    M9&)C+G-C:&5M82YD:6-T+E-13%-E<G9E<D1I8W1I;VYA<GDN86-C97-S)# P
    M,"A344Q397)V97)$:6-T:6]N87)Y+FIA=F$Z,S4I#0H@(" @(" @(&%T(&-O
    M;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RYS8VAE;6$N9&EC="Y344Q3
    M97)V97)$:6-T:6]N87)Y)#$N869T97)#;VYN96-T*%-13%-E<G9E<D1I8W1I
    M;VYA<GDN:F%V83HR-#8I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK
    M;V1O+FEM<&PN:F1B8RY!8G-T<F%C=%-13$5X96-U=&EO;DQI<W1E;F5R+F5V
    M96YT3V-C=7)R960H06)S=')A8W1344Q%>&5C=71I;VY,:7-T96YE<BYJ879A
    M.CDQ*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI;7!L+FID
    M8F,N4U%,17AE8W5T:6]N36%N86=E<DEM<&PN9FER945V96YT*%-13$5X96-U
    M=&EO;DUA;F%G97));7!L+FIA=F$Z,3 W-BD-"B @(" @(" @870@8V]M+G-O
    M;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+E-13$5X96-U=&EO;DUA;F%G97))
    M;7!L+F9I<F5%=F5N="A344Q%>&5C=71I;VY-86YA9V5R26UP;"YJ879A.CDX
    M-2D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C
    M+E-13$5X96-U=&EO;DUA;F%G97));7!L+F=E=$-O;FYE8W1I;VXH4U%,17AE
    M8W5T:6]N36%N86=E<DEM<&PN:F%V83HQ-C(I#0H@(" @(" @(&%T(&-O;2YS
    M;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RYR=6YT:6UE+DI$0D-3=&]R94UA
    M;F%G97(N;F5W4U%,17AE8W5T:6]N36%N86=E<BA*1$)#4W1O<F5-86YA9V5R
    M+FIA=F$Z.#(X*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI
    M;7!L+FID8F,N<G5N=&EM92Y*1$)#4W1O<F5-86YA9V5R+F=E=%-13$5X96-U
    M=&EO;DUA;F%G97(H2D1"0U-T;W)E36%N86=E<BYJ879A.C<Q-"D-"B @(" @
    M(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+G)U;G1I;64N
    M2D1"0U-T;W)E36%N86=E<BYE>&5C=71E475E<GDH2D1"0U-T;W)E36%N86=E
    M<BYJ879A.C$Q,C<I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O
    M+FEM<&PN:F1B8RYQ=65R>2Y*1$)#475E<GDN97AE8W5T95%U97)Y*$I$0D-1
    M=65R>2YJ879A.C$R-BD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO
    M9&\N<75E<GDN475E<GE);7!L)$1A=&%S=&]R95%U97)Y17AE8W5T;W(N97AE
    M8W5T95%U97)Y*%%U97)Y26UP;"YJ879A.C$U-C4I#0H@(" @(" @(&%T(&-O
    M;2YS;VQA<FUE=')I8RYK;V1O+G%U97)Y+E%U97)Y26UP;"YE>&5C=71E475E
    M<GE7:71H36%P*%%U97)Y26UP;"YJ879A.C8X-2D-"B @(" @(" @870@8V]M
    M+G-O;&%R;65T<FEC+FMO9&\N<75E<GDN475E<GE);7!L+F5X96-U=&57:71H
    M36%P*%%U97)Y26UP;"YJ879A.C4T-2D-"B @(" @(" @870@8V]M+G-O;&%R
    M;65T<FEC+FMO9&\N<75E<GDN475E<GE);7!L+F5X96-U=&57:71H07)R87DH
    M475E<GE);7!L+FIA=F$Z-3,Q*0T*(" @(" @("!A="!C;VTN<V]L87)M971R
    M:6,N:V]D;RYQ=65R>2Y1=65R>4EM<&PN97AE8W5T92A1=65R>4EM<&PN:F%V
    M83HU,#$I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+G1A+G-H
    M87)E9"Y"3U%U97)Y+F5X96-U=&4H0D]1=65R>2YJ879A.C$S-2D-"B @(" @
    M(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N979E;G0N179E;G14:')E
    M860N9V5T3F5X=$5V96YT*$5V96YT0V]N=')O;&QE<BYJ879A.C(V."D-"B @
    M(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N979E;G0N179E;G14
    M:')E860N<')O8V5S<RA%=F5N=$-O;G1R;VQL97(N:F%V83HY-RD-"B @(" @
    M(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N979E;G0N5V]R:V5R5&AR
    M96%D+G)U;BA7;W)K97)4:')E860N:F%V83HW,2D-"@T*(D5V96YT0F5A;CHR
    M,#,B(&1A96UO;B!P<FEO/34@=&ED/3!X,#)F93,T-3 @;FED/3!X,3(X('=A
    M:71I;F<@9F]R(&UO;FET;W(@96YT<GD@6S-B-68P,# N+C-B-69D.3!=#0H@
    M(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+FUE=&$N0VQA<W--971A
    M1&%T82YG971);G-T86YC92A#;&%S<TUE=&%$871A+FIA=F$Z,C$T*0T*(" @
    M(" @(" M('=A:71I;F<@=&\@;&]C:R \,'@Q-#(T.&9F,#X@*&$@:F%V82YL
    M86YG+D-L87-S*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI
    M;7!L+FID8F,N2D1"0U!E<G-I<W1E;F-E36%N86=E<D9A8W1O<GDN<F5G:7-T
    M97)#;&%S<TEN=&5R;F%L*$I$0D-097)S:7-T96YC94UA;F%G97)&86-T;W)Y
    M+FIA=F$Z-#0X*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI
    M;7!L+FID8F,N2D1"0U!E<G-I<W1E;F-E36%N86=E<D9A8W1O<GDN<F5G:7-T
    M97)#;&%S<RA*1$)#4&5R<VES=&5N8V5-86YA9V5R1F%C=&]R>2YJ879A.C,S
    M."D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C
    M+E)E9VES=&5R3&ES=&5N97(N<F5G:7-T97)#;&%S<RA296=I<W1E<DQI<W1E
    M;F5R+FIA=F$Z-3,I#0H@(" @(" @(&%T(&IA=F%X+FID;RYS<&DN2D1/26UP
    M;$AE;'!E<BYR96=I<W1E<D-L87-S*$I$3TEM<&Q(96QP97(N:F%V83HR-CDI
    M#0H@(" @(" @("T@;&]C:V5D(#PP>#$P-3$X9C4X/B H82!J879A+G5T:6PN
    M07)R87E,:7-T*0T*(" @(" @("!A="!C;VTN;6%L;&5S;VYS+FQA=VUA;BYA
    M82YI;G1E<F%C=&EO;BY!;'1);G1E<F%C=&EO;D1O8W5M96YT+CQC;&EN:70^
    M*$%L=$EN=&5R86-T:6]N1&]C=6UE;G0N:F%V82D-"B @(" @(" @870@:F%V
    M82YL86YG+D-L87-S+F9O<DYA;64P*$YA=&EV92!-971H;V0I#0H@(" @(" @
    M(&%T(&IA=F$N;&%N9RY#;&%S<RYF;W).86UE*%5N:VYO=VX@4V]U<F-E*0T*
    M(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYU=&EL+DUU;'1I3&]A
    M9&5R0VQA<W-297-O;'9E<BYR97-O;'9E0VQA<W,H375L=&E,;V%D97)#;&%S
    M<U)E<V]L=F5R+FIA=F$Z.#4I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I
    M8RYK;V1O+G)U;G1I;64N2D1/0VQA<W-297-O;'9E<BYR97-O;'9E0VQA<W,H
    M2D1/0VQA<W-297-O;'9E<BYJ879A.C8Y*0T*(" @(" @("!A="!C;VTN<V]L
    M87)M971R:6,N:V]D;RYI;7!L+FID8F,N;W)M87!P:6YG+E-U8F-L87-S4')O
    M=FED97));7!L+F=E=%1Y<&4H4W5B8VQA<W-0<F]V:61E<DEM<&PN:F%V83HQ
    M,3DI#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B
    M8RYO<FUA<'!I;F<N4W5B8VQA<W-0<F]V:61E<DEM<&PN9V5T4W5B8VQA<W-E
    M<RA3=6)C;&%S<U!R;W9I9&5R26UP;"YJ879A.C(V.2D-"B @(" @(" @870@
    M8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+F]R;6%P<&EN9RY#;&%S
    M<TUA<'!I;F<N9V5T4')I;6%R>4UA<'!I;F=&:65L9',H0VQA<W--87!P:6YG
    M+FIA=F$Z,3$R,"D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N
    M:6UP;"YJ9&)C+F]R;6%P<&EN9RY#;&%S<TUA<'!I;F<N;&]A9$)Y4$LH0VQA
    M<W--87!P:6YG+FIA=F$Z.3(T*0T*(" @(" @("!A="!C;VTN<V]L87)M971R
    M:6,N:V]D;RYI;7!L+FID8F,N<G5N=&EM92Y*1$)#4W1O<F5-86YA9V5R+FEN
    M:71I86QI>F4H2D1"0U-T;W)E36%N86=E<BYJ879A.C,X."D-"B @(" @(" @
    M870@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y3=&%T94UA;F%G97))
    M;7!L+FQO861);FET:6%L4W1A=&4H4W1A=&5-86YA9V5R26UP;"YJ879A.C(Q
    M."D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N<G5N=&EM92Y0
    M97)S:7-T96YC94UA;F%G97));7!L+F=E=$]B:F5C=$)Y261&:6QT97(H4&5R
    M<VES=&5N8V5-86YA9V5R26UP;"YJ879A.C$R-S@I#0H@(" @(" @(&%T(&-O
    M;2YS;VQA<FUE=')I8RYK;V1O+G)U;G1I;64N4&5R<VES=&5N8V5-86YA9V5R
    M26UP;"YG971/8FIE8W1">4ED*%!E<G-I<W1E;F-E36%N86=E<DEM<&PN:F%V
    M83HQ,3DV*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI;7!L
    M+FID8F,N;W)M87!P:6YG+D]N951O3VYE36%P<&EN9RYL;V%D*$]N951O3VYE
    M36%P<&EN9RYJ879A.C$U,2D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC
    M+FMO9&\N:6UP;"YJ9&)C+G)U;G1I;64N2D1"0U-T;W)E36%N86=E<BYL;V%D
    M*$I$0D-3=&]R94UA;F%G97(N:F%V83HT.30I#0H@(" @(" @(&%T(&-O;2YS
    M;VQA<FUE=')I8RYK;V1O+G)U;G1I;64N4W1A=&5-86YA9V5R26UP;"YL;V%D
    M1FEE;&0H4W1A=&5-86YA9V5R26UP;"YJ879A.C(R-C I#0H@(" @(" @(&%T
    M(&-O;2YS;VQA<FUE=')I8RYK;V1O+G)U;G1I;64N4W1A=&5-86YA9V5R26UP
    M;"YI<TQO861E9"A3=&%T94UA;F%G97));7!L+FIA=F$Z.3(X*0T*(" @(" @
    M("!A="!C;VTN;6%L;&5S;VYS+FQA=VUA;BYT82YA=61I="Y"3T$N:F1O1V5T
    M8W5R<F5N=$%L=&5R871I;VXH0D]!+FIA=F$I#0H@(" @(" @(&%T(&-O;2YM
    M86QL97-O;G,N;&%W;6%N+G1A+F%U9&ET+D)/02YG971#=7)R96YT06QT97)A
    M=&EO;BA"3T$N:F%V83HR,#8I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N
    M;&%W;6%N+G1A+F%U9&ET+D)/02YG971#=7)R96YT06QT97)A=&EO;BA"3T$N
    M:F%V83HR,# I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+F%P
    M+FEM86YA9V4N4')O8V5S<U!R;VIE8W0N:&%S4')O:F5C=$-H86YG960H4')O
    M8V5S<U!R;VIE8W0N:F%V83HY,BD-"B @(" @(" @870@8V]M+FUA;&QE<V]N
    M<RYL87=M86XN87 N:6UA;F%G92Y0<F]C97-S4')O:F5C="YP<F]C97-S*%!R
    M;V-E<W-0<F]J96-T+FIA=F$Z-3,I#0H@(" @(" @(&%T(&-O;2YM86QL97-O
    M;G,N;&%W;6%N+G1A+F5V96YT+D5V96YT5&AR96%D+G!R;V-E<W,H179E;G1#
    M;VYT<F]L;&5R+FIA=F$Z,30U*0T*(" @(" @("!A="!C;VTN;6%L;&5S;VYS
    M+FQA=VUA;BYT82YE=F5N="Y7;W)K97)4:')E860N<G5N*%=O<FME<E1H<F5A
    M9"YJ879A.C<Q*0T*#0HB179E;G1"96%N.C(P,B(@9&%E;6]N('!R:6\]-2!T
    M:60],'@P,S(S-C0Y."!N:60],'AC9C @=V%I=&EN9R!F;W(@;6]N:71O<B!E
    M;G1R>2!;,V(Q9C P,"XN,V(Q9F0Y,%T-"B @(" @(" @870@8V]M+G-O;&%R
    M;65T<FEC+FMO9&\N;65T82Y#;&%S<TUE=&%$871A+F=E=$EN<W1A;F-E*$-L
    M87-S365T841A=&$N:F%V83HQ.#4I#0H@(" @(" @("T@=V%I=&EN9R!T;R!L
    M;V-K(#PP>#$T,C0X9F8P/B H82!J879A+FQA;F<N0VQA<W,I#0H@(" @(" @
    M(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+G%U97)Y+E%U97)Y26UP;"1$871A
    M<W1O<F51=65R>45X96-U=&]R+CQI;FET/BA1=65R>4EM<&PN:F%V83HQ-3,T
    M*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYQ=65R>2Y1=65R
    M>4EM<&PD475E<GE%>&5C=71I;VY-86YA9V5R+F=E=%%U97)Y17AE8W5T;W(H
    M475E<GE);7!L+FIA=F$Z,3,V."D-"B @(" @(" @870@8V]M+G-O;&%R;65T
    M<FEC+FMO9&\N<75E<GDN475E<GE);7!L+FEN=&5R;F%L0V]M<&EL92A1=65R
    M>4EM<&PN:F%V83HT-S0I#0H@(" @(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK
    M;V1O+G%U97)Y+E%U97)Y26UP;"YE>&5C=71E475E<GE7:71H36%P*%%U97)Y
    M26UP;"YJ879A.C8X,BD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO
    M9&\N<75E<GDN475E<GE);7!L+F5X96-U=&57:71H36%P*%%U97)Y26UP;"YJ
    M879A.C4T-2D-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N
    M<VAA<F5D+D)/475E<GDN97AE8W5T95=I=&A-87 H0D]1=65R>2YJ879A.C$U
    M.2D-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N<VAA<F5D
    M+E!E<G-I<W0N9V5T0D]S0GE#;VQU;6Y686QU97,H4&5R<VES="YJ879A.C4S
    M-RD-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N<VAA<F5D
    M+E!E<G-I<W0N9V5T0D]S0GE#;VQU;6Y686QU97,H4&5R<VES="YJ879A.C0U
    M,RD-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN=&$N<VAA<F5D
    M+E!E<G-I<W0N9V5T56YI<75E0D]">4-O;'5M;E9A;'5E<RA097)S:7-T+FIA
    M=F$Z-C(T*0T*(" @(" @("!A="!C;VTN;6%L;&5S;VYS+FQA=VUA;BYT82YS
    M:&%R960N4&5R<VES="YG9715;FEQ=65"3T)Y0V]L=6UN5F%L=64H4&5R<VES
    M="YJ879A.C<P,2D-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN
    M=&$N<VAA<F5D+E!E<G-I<W0N9V5T56YI<75E0D]">4-O;'5M;E9A;'5E*%!E
    M<G-I<W0N:F%V83HV.#(I#0H@(" @(" @(&%T(&-O;2YM86QL97-O;G,N;&%W
    M;6%N+F%A+G!R;VIE8W0N4')O:F5C="YG971">4AO;65&;VQD97(H4')O:F5C
    M="YJ879A.C$V-RD-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M86XN
    M87 N97AC:&%N9V4N17AC:&%N9V5&;VQD97(N9V5T4')O:F5C="A%>&-H86YG
    M949O;&1E<BYJ879A.CDV-BD-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL
    M87=M86XN87 N97AC:&%N9V4N17AC:&%N9V5&;VQD97(N<V5T2&]M97!A9V4H
    M17AC:&%N9V5&;VQD97(N:F%V83HQ-3<Q*0T*(" @(" @("!A="!C;VTN;6%L
    M;&5S;VYS+FQA=VUA;BYA<"YE>&-H86YG92Y%>&-H86YG949O;&1E<BYS>6YC
    M1G)O;45D9V4H17AC:&%N9V5&;VQD97(N:F%V83HW-C I#0H@(" @(" @(&%T
    M(&-O;2YM86QL97-O;G,N;&%W;6%N+F%P+F5X8VAA;F=E+D5X8VAA;F=E1F]L
    M9&5R+F=E=%-Y;F-H<F]N:7-E9$9R;VU%9&=E*$5X8VAA;F=E1F]L9&5R+FIA
    M=F$Z-#$T*0T*(" @(" @("!A="!C;VTN;6%L;&5S;VYS+FQA=VUA;BYA<"YE
    M>&-H86YG92Y%>&-H86YG949O;&1E<BYG9713>6YC:')O;FES961&<F]M161G
    M92A%>&-H86YG949O;&1E<BYJ879A.C,R.2D-"B @(" @(" @870@8V]M+FUA
    M;&QE<V]N<RYL87=M86XN87 N97AC:&%N9V4N4')O8V5S<T9O;&1E<BYP<F]C
    M97-S*%!R;V-E<W-&;VQD97(N:F%V83HU,"D-"B @(" @(" @870@8V]M+FUA
    M;&QE<V]N<RYL87=M86XN=&$N979E;G0N179E;G14:')E860N<')O8V5S<RA%
    M=F5N=$-O;G1R;VQL97(N:F%V83HQ-#4I#0H@(" @(" @(&%T(&-O;2YM86QL
    M97-O;G,N;&%W;6%N+G1A+F5V96YT+E=O<FME<E1H<F5A9"YR=6XH5V]R:V5R
    M5&AR96%D+FIA=F$Z-S$I#0H-"B)3:6=N86P@1&ES<&%T8VAE<B(@9&%E;6]N
    M('!R:6\],3 @=&ED/3!X,# Y9C0X,#@@;FED/3!X-3DP('=A:71I;F<@;VX@
    M8V]N9&ET:6]N(%LP+BXP70T*#0HB1FEN86QI>F5R(B!D865M;VX@<')I;STY
    M('1I9#TP># P.6)B8C8P(&YI9#TP>&1C(&EN($]B:F5C="YW86ET*"D@6S)B
    M-68P,# N+C)B-69D.3!=#0H@(" @(" @(&%T(&IA=F$N;&%N9RY/8FIE8W0N
    M=V%I="A.871I=F4@365T:&]D*0T*(" @(" @(" M('=A:71I;F<@;VX@/#!X
    M,3 U,#-E93 ^("AA(&IA=F$N;&%N9RYR968N4F5F97)E;F-E475E=64D3&]C
    M:RD-"B @(" @(" @870@:F%V82YL86YG+G)E9BY2969E<F5N8V51=65U92YR
    M96UO=F4H56YK;F]W;B!3;W5R8V4I#0H@(" @(" @("T@;&]C:V5D(#PP>#$P
    M-3 S964P/B H82!J879A+FQA;F<N<F5F+E)E9F5R96YC95%U975E)$QO8VLI
    M#0H@(" @(" @(&%T(&IA=F$N;&%N9RYR968N4F5F97)E;F-E475E=64N<F5M
    M;W9E*%5N:VYO=VX@4V]U<F-E*0T*(" @(" @("!A="!J879A+FQA;F<N<F5F
    M+D9I;F%L:7IE<B1&:6YA;&EZ97)4:')E860N<G5N*%5N:VYO=VX@4V]U<F-E
    M*0T*#0HB4F5F97)E;F-E($AA;F1L97(B(&1A96UO;B!P<FEO/3$P('1I9#TP
    M># P.6)A-S(X(&YI9#TP>&$W8R!I;B!/8FIE8W0N=V%I="@I(%LR8C%F,# P
    M+BXR8C%F9#DP70T*(" @(" @("!A="!J879A+FQA;F<N3V)J96-T+G=A:70H
    M3F%T:79E($UE=&AO9"D-"B @(" @(" @+2!W86ET:6YG(&]N(#PP>#$P-3 S
    M9C0X/B H82!J879A+FQA;F<N<F5F+E)E9F5R96YC921,;V-K*0T*(" @(" @
    M("!A="!J879A+FQA;F<N3V)J96-T+G=A:70H56YK;F]W;B!3;W5R8V4I#0H@
    M(" @(" @(&%T(&IA=F$N;&%N9RYR968N4F5F97)E;F-E)%)E9F5R96YC94AA
    M;F1L97(N<G5N*%5N:VYO=VX@4V]U<F-E*0T*(" @(" @(" M(&QO8VME9" \
    M,'@Q,#4P,V8T.#X@*&$@:F%V82YL86YG+G)E9BY2969E<F5N8V4D3&]C:RD-
    M"@T*(FUA:6XB('!R:6\]-2!T:60],'@P,# S-V,Y."!N:60],'@Q.3@@=V%I
    M=&EN9R!F;W(@;6]N:71O<B!E;G1R>2!;-V8P,# N+C=F8S-C70T*(" @(" @
    M("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYM971A+D-L87-S365T841A=&$N
    M9V5T26YS=&%N8V4H0VQA<W--971A1&%T82YJ879A.C$X-2D-"B @(" @(" @
    M+2!W86ET:6YG('1O(&QO8VL@/#!X,30R-#AF9C ^("AA(&IA=F$N;&%N9RY#
    M;&%S<RD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ
    M9&)C+G-C:&5M82YD:6-T+E-13%-E<G9E<D1I8W1I;VYA<GDN<F5G:7-T97)#
    M;&%S<RA344Q397)V97)$:6-T:6]N87)Y+FIA=F$Z,C4V*0T*(" @(" @("!A
    M="!C;VTN<V]L87)M971R:6,N:V]D;RYI;7!L+FID8F,N<V-H96UA+F1I8W0N
    M4U%,4V5R=F5R1&EC=&EO;F%R>2YA8V-E<W,D,# P*%-13%-E<G9E<D1I8W1I
    M;VYA<GDN:F%V83HS-2D-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO
    M9&\N:6UP;"YJ9&)C+G-C:&5M82YD:6-T+E-13%-E<G9E<D1I8W1I;VYA<GDD
    M,2YA9G1E<D-O;FYE8W0H4U%,4V5R=F5R1&EC=&EO;F%R>2YJ879A.C(T-BD-
    M"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+D%B
    M<W1R86-T4U%,17AE8W5T:6]N3&ES=&5N97(N979E;G1/8V-U<G)E9"A!8G-T
    M<F%C=%-13$5X96-U=&EO;DQI<W1E;F5R+FIA=F$Z.3$I#0H@(" @(" @(&%T
    M(&-O;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RY344Q%>&5C=71I;VY-
    M86YA9V5R26UP;"YF:7)E179E;G0H4U%,17AE8W5T:6]N36%N86=E<DEM<&PN
    M:F%V83HQ,#<V*0T*(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYI
    M;7!L+FID8F,N4U%,17AE8W5T:6]N36%N86=E<DEM<&PN9FER945V96YT*%-1
    M3$5X96-U=&EO;DUA;F%G97));7!L+FIA=F$Z.3@U*0T*(" @(" @("!A="!C
    M;VTN<V]L87)M971R:6,N:V]D;RYI;7!L+FID8F,N4U%,17AE8W5T:6]N36%N
    M86=E<DEM<&PN9V5T0V]N;F5C=&EO;BA344Q%>&5C=71I;VY-86YA9V5R26UP
    M;"YJ879A.C$V,BD-"B @(" @(" @870@8V]M+G-O;&%R;65T<FEC+FMO9&\N
    M:6UP;"YJ9&)C+G)U;G1I;64N2D1"0U-T;W)E36%N86=E<BYN97=344Q%>&5C
    M=71I;VY-86YA9V5R*$I$0D-3=&]R94UA;F%G97(N:F%V83HX,C@I#0H@(" @
    M(" @(&%T(&-O;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RYR=6YT:6UE
    M+DI$0D-3=&]R94UA;F%G97(N9V5T4U%,17AE8W5T:6]N36%N86=E<BA*1$)#
    M4W1O<F5-86YA9V5R+FIA=F$Z-S$T*0T*(" @(" @("!A="!C;VTN<V]L87)M
    M971R:6,N:V]D;RYI;7!L+FID8F,N<G5N=&EM92Y*1$)#4W1O<F5-86YA9V5R
    M+F-H96-K5F5R<VEO;BA*1$)#4W1O<F5-86YA9V5R+FIA=F$Z,S,P*0T*(" @
    M(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYR=6YT:6UE+E-T871E36%N
    M86=E<DEM<&PN<F5F<F5S:"A3=&%T94UA;F%G97));7!L+FIA=F$Z-S8X*0T*
    M(" @(" @("!A="!C;VTN<V]L87)M971R:6,N:V]D;RYR=6YT:6UE+E!E<G-I
    M<W1E;F-E36%N86=E<DEM<&PN<F5F<F5S:$9I;'1E<BA097)S:7-T96YC94UA
    M;F%G97));7!L+FIA=F$Z,3<T-"D-"B @(" @(" @870@8V]M+G-O;&%R;65T
    M<FEC+FMO9&\N<G5N=&EM92Y097)S:7-T96YC94UA;F%G97));7!L+G)E9G)E
    M<V@H4&5R<VES=&5N8V5-86YA9V5R26UP;"YJ879A.C$W,C(I#0H@(" @(" @
    M(&%T(&-O;2YM86QL97-O;G,N;&%W;6%N+G1A+G-H87)E9"Y097)S:7-T+G)E
    M;&]A9$)/*%!E<G-I<W0N:F%V83HW.30I#0H@(" @(" @(&%T(&-O;2YM86QL
    M97-O;G,N;&%W;6%N+G1A+F5V96YT+D-O;G1R;VQL97(N<W1A<G0H0V]N=')O
    M;&QE<BYJ879A.C(T,BD-"B @(" @(" @870@8V]M+FUA;&QE<V]N<RYL87=M
    M86XN=&$N979E;G0N0V]N=')O;&QE<BYM86EN*$-O;G1R;VQL97(N:F%V83HQ
    M,C,I#0H-"B)632!4:')E860B('!R:6\]-2!T:60],'@P,#EF,S9D,"!N:60]
    M,'@X9&,@<G5N;F%B;&4-"@T*(E9-(%!E<FEO9&EC(%1A<VL@5&AR96%D(B!P
    M<FEO/3$P('1I9#TP># P.68W,# X(&YI9#TP>&8T."!W86ET:6YG(&]N(&-O
    M;F1I=&EO;@T*(E-U<W!E;F0@0VAE8VME<B!4:')E860B('!R:6\],3 @=&ED
    @/3!X,# Y8F1E-3 @;FED/3!X-3(X(')U;FYA8FQE#0H`
    `
    end
    begin 666 kodo.properties
    M(R!+;V1O($I$3R!0<F]P97)T:65S(&-O;F9I9W5R871I;VX-"B,@4UE35$5-
    M(%1%4U0-"@T*8V]M+G-O;&%R;65T<FEC+FMO9&\N3&EC96YS94ME>3H@>'AX
    M>'@-"F-O;2YS;VQA<FUE=')I8RYK;V1O+F5E+DUA;F%G9612=6YT:6UE4')O
    M<&5R=&EE<SU4<F%N<V%C=&EO;DUA;F%G97).86UE/51R86YS86-T:6]N1F%C
    M=&]R>0T*#0IJ879A>"YJ9&\N4&5R<VES=&5N8V5-86YA9V5R1F%C=&]R>4-L
    M87-S/6-O;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RY*1$)#4&5R<VES
    M=&5N8V5-86YA9V5R1F%C=&]R>0T*#0HC35,@4U%,('9I82!-4R!*1$)##0IJ
    M879A>"YJ9&\N;W!T:6]N+D-O;FYE8W1I;VY$<FEV97).86UE/6-O;2YM:6-R
    M;W-O9G0N:F1B8RYS<6QS97)V97(N4U%,4V5R=F5R1')I=F5R#0IJ879A>"YJ
    M9&\N;W!T:6]N+D-O;FYE8W1I;VY5<V5R3F%M93UX>'@-"FIA=F%X+FID;RYO
    M<'1I;VXN0V]N;F5C=&EO;E!A<W-W;W)D/7AX> T*:F%V87@N:F1O+F]P=&EO
    M;BY#;VYN96-T:6]N55),/6ID8F,Z;6EC<F]S;V9T.G-Q;'-E<G9E<CHO+U-4
    M4U%,,#$Z,30S,SM396QE8W1-971H;V0]8W5R<V]R.T1A=&%B87-E3F%M93UX
    M>'AX#0H-"FIA=F%X+FID;RYO<'1I;VXN4F5T86EN5F%L=65S/71R=64-"FIA
    M=F%X+FID;RYO<'1I;VXN4F5S=&]R959A;'5E<SUT<G5E#0IJ879A>"YJ9&\N
    M;W!T:6]N+D]P=&EM:7-T:6,]=')U90T*:F%V87@N:F1O+F]P=&EO;BY.;VYT
    M<F%N<V%C=&EO;F%L5W)I=&4]9F%L<V4-"FIA=F%X+FID;RYO<'1I;VXN3F]N
    M=')A;G-A8W1I;VYA;%)E860]=')U90T*:F%V87@N:F1O+F]P=&EO;BY-=6QT
    M:71H<F5A9&5D/71R=64-"FIA=F%X+FID;RYO<'1I;VXN37-786ET/34P,# -
    M"FIA=F%X+FID;RYO<'1I;VXN36EN4&]O;#TU#0IJ879A>"YJ9&\N;W!T:6]N
    M+DUA>%!O;VP]-# -"FIA=F%X+FID;RYO<'1I;VXN26=N;W)E0V%C:&4]=')U
    M90T*#0IC;VTN<V]L87)M971R:6,N:V]D;RYI;7!L+FID8F,N<V-H96UA+D1"
    M4V5Q=65N8V5&86-T;W)Y/3(P#0IC;VTN<V]L87)M971R:6,N:V]D;RYI;7!L
    M+FID8F,N4W1A=&5M96YT0V%C:&5-87A3:7IE/3 -"F-O;2YS;VQA<FUE=')I
    M8RYK;V1O+FEM<&PN:F1B8RY787)N3VY097)S:7-T96YT5'EP949A:6QU<F4]
    M=')U90T*8V]M+G-O;&%R;65T<FEC+FMO9&\N:6UP;"YJ9&)C+E-E<75E;F-E
    M1F%C=&]R>4-L87-S/6-O;2YS;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RYS
    M8VAE;6$N1$)397%U96YC949A8W1O<GD-"F-O;2YS;VQA<FUE=')I8RYK;V1O
    M+FEM<&PN:F1B8RY&;&%T26YH97)I=&%N8V5-87!P:6YG/71R=64-"F-O;2YS
    M;VQA<FUE=')I8RYK;V1O+FEM<&PN:F1B8RY!=71O4F5T=7)N5&EM96]U=#TQ
    M, T*8V]M+G-O;&%R;65T<FEC+FMO9&\N3&]G9V5R/7-T9&]U= T*8V]M+G-O
    M;&%R;65T<FEC+FMO9&\N16YA8FQE475E<GE%>'1E;G-I;VYS/71R=64-"F-O
    M;2YS;VQA<FUE=')I8RYK;V1O+D1E9F%U;'1&971C:%1H<F5S:&]L9#TU, T*
    M8V]M+G-O;&%R;65T<FEC+FMO9&\N1&5F875L=$9E=&-H0F%T8VA3:7IE/34P
    M#0IC;VTN<V]L87)M971R:6,N:V]D;RYI;7!L+FID8F,N5')A;G-A8W1I;VY)
    M<V]L871I;VX]4D5!1%]#3TU-2514140-"F-O;2YS;VQA<FUE=')I8RYK;V1O
    M+F5E+DUA;F%G9612=6YT:6UE4')O<&5R=&EE<SU4<F%N<V%C=&EO;DUA;F%G
    M97)-971H;V0]8V]M+FEB;2YE:G,N:G1S+FIT82Y4<F%N<V%C=&EO;DUA;F%G
    M97)&86-T;W)Y+F=E=%1R86YS86-T:6]N36%N86=E<@T*8V]M+G-O;&%R;65T
    M<FEC+FMO9&\N964N36%N86=E9%)U;G1I;65#;&%S<SUC;VTN<V]L87)M971R
    C:6,N:V]D;RYE92Y);G9O8V%T:6]N36%N86=E9%)U;G1I;64`
    `
    end

    Could you send a thread dump? Also, you may want to increase the size of
    your connection pool, if that's an option. Also, it looks like you may be
    hanging on getting class metadata. You may be able to get rid of this by
    trying to access the metadata for each of your PC classes when getting the
    PMF for the first time (before you go multithreaded).
    Thanks,
    Greg
    "nathan boyes" <[email protected]> wrote in message
    news:c8e65a$jph$[email protected]..
    Within a single JVM we are running 4-5 Threads that each create and use
    their own PM. The multiThreaded option is set to true, even though the
    threads don't share any common data or variables.
    We have an intermittent problem where all threads appear to hang fromwhich
    they never recover. While it doesn't always occur, it seems to happen more
    often when the application run and the threads are first started. Whenfirst
    started they are all trying to perform queries which ends in the deadlock.
    Could you please look into this and suggest a work around that doesn't
    invlove upgrading to 3.1.
    Regards
    Nathan
    OS Win 2k3 and XP
    Kodo 2.5.8
    See attached for Stacktrace and properties

  • Help on resolving thread deadlock?

    How to do you eliminate the problem of having
    deadlock or invalid values during Thread
    method access to a certain data variable. While getting
    the data from the method. Someone is updating
    it to the current data.

    You have to use the synchronized keyword on all methods that could access the data, which puts a lock on an object while a thread is "in" the body of the method. No other threads can enter a synchronized method while there is a lock on the given object (if the other synchronized methods use that same object for a lock).
    The problem of deadlock can come from many possibilities, too many to just sit here and suppose. For that you'll have to post code. If you do, be sure to use [ code ] tags ( http://forum.java.sun.com/faq.jsp#messageformat ).

  • Weblogic Threads Deadlock

    We are experiencing a problem with web services communicating within a weblogic managed server configured with 15 threads. When we have 2 web services in the managed server (named A and B), after flooding A with 20 or more simultaneous requests, we begin to get socket timeouts on the inbound side of A. The throughput goes to zero and the number of queued requests continues to climb.
    This does not happen if we flood the inbound side of B. It happily handles over 100 requests.
    Are there restrictions on running multiple web services within weblogic managed servers?

    Hi,
    There is no restriction on the number of services that may run on a managed server. Can you tell the WL version you are using? Is the service using SSL? WL 8.1.5 (or 8.1.6, I am not sure) fixes an SSL bug that causes something similar to what you are experiencing.
    Regards,
    LG

  • Thread deadlock inside Tuxedo?

    Hi,
    We are running a simple multithreaded server in Tuxedo 8 on HPUX 11. We occasionally
    experience a strange error in the ULOG. The error is:
    082327.wblvh067!gws_tuxedo_i.20931.1.-2: LIBTUX_CAT:6314: ERROR: Invalid message
    found, diagnostic=0/0/0x4002cd60/0x4002cee0/0
    082327.wblvh067!gws_tuxedo_i.20931.1.-2: LIBTUX_CAT:2021: ERROR: Unable to expand
    message
    After this error the process is hanging at 100% utilisation. Looking at the process
    using tusc we see:
    {6789} #0 In user-mode ...........................................................................
    [running]
    {6830} #2 ksleep(PTH_CONDVAR_OBJECT, 0x40041594, 0x4004159c, NULL) ....[sleeping]
    {6831} #3 ksleep(PTH_CONDVAR_OBJECT, 0x400414a4, 0x400414ac, NULL) ....[sleeping]
    {6832} #4 ksleep(PTH_CONDVAR_OBJECT, 0x400413b4, 0x400413bc, NULL) ....[sleeping]
    The thread id #0 is the internal thread, all user dispatch threads gets id's >1
    so it seems it is running and blocking the others. We are about to log a case
    we'd quickly like to find out if anyone else has seen a similiar behavior and
    knows what the problem is?
    Regards,
    Mikael

    Hi,
    We are running a simple multithreaded server in Tuxedo 8 on HPUX 11. We occasionally
    experience a strange error in the ULOG. The error is:
    082327.wblvh067!gws_tuxedo_i.20931.1.-2: LIBTUX_CAT:6314: ERROR: Invalid message
    found, diagnostic=0/0/0x4002cd60/0x4002cee0/0
    082327.wblvh067!gws_tuxedo_i.20931.1.-2: LIBTUX_CAT:2021: ERROR: Unable to expand
    message
    After this error the process is hanging at 100% utilisation. Looking at the process
    using tusc we see:
    {6789} #0 In user-mode ...........................................................................
    [running]
    {6830} #2 ksleep(PTH_CONDVAR_OBJECT, 0x40041594, 0x4004159c, NULL) ....[sleeping]
    {6831} #3 ksleep(PTH_CONDVAR_OBJECT, 0x400414a4, 0x400414ac, NULL) ....[sleeping]
    {6832} #4 ksleep(PTH_CONDVAR_OBJECT, 0x400413b4, 0x400413bc, NULL) ....[sleeping]
    The thread id #0 is the internal thread, all user dispatch threads gets id's >1
    so it seems it is running and blocking the others. We are about to log a case
    we'd quickly like to find out if anyone else has seen a similiar behavior and
    knows what the problem is?
    Regards,
    Mikael

  • Making a Thread that can stop itself

    I made a Thread this way;
    new Thread(new Runnable(){
    public void run(){
    }).start();
    how can I get this Thread to stop itself???

    What happens when an unstoppable thread hits an unmoveable block of code?I'd like to see that tested experementally at CERN :-)

  • RFC: Introduce new 'Article/Tutorial (Comment) Threads' in the Web Dynpro Forum

    Some time ago I've suggested on SCN Support is both forum moderator and most active articles wrtiter
    Valery Silaev
    SaM Solutions
    http://www.sam-solutions.net
    Message was edited by: Bertram Ganz
    This thread was branched from forum thread: How to print the data of a Model node.

    Hi Valery,
    thanks for this great idea. Indeed, there is no channel set up to communicate feedback/suggestions/questions to Web Dynpro tutorials or articles in a standardized way.
    WebLogs can be commented on the WebLog page itself and they are announced in a special ;\ New Web Dynpro Weblogs which can be opened via the <a href="https://www.sdn.sap.comhttp://www.sdn.sap.comhttp://www.sdn.sap.com/irj/servlet/prt/portal/prtroot/com.sap.km.cm.docs/library/uuid/49f2ea90-0201-0010-ce8e-de18b94aee2d">Web Dynpro Feature2Sample Matrix</a>. Actually the section 'Further Information' lists all related articles, WebLogs etc. These links are regularly updated so that the Sample Description Pages helps to keep all links to valuable information in a central place.
    The 'Sample Description Page' should additionally comprise a section <b>'Discussion'</b> with a link to the above 'Article Comment Thread' in the Web Dynpro forum. The reader downloads the material from the sample description page and also finds a link to the related 'Article Comment Thread' there.
    For all new articles (which are combined with a related 'Article Comment Thread') the <i>Further Information</i> links could point to the 'Article Comment Thread' (which then itself links to the article) but not directly to the article resource. The reader can then also have look at the existing comments to the related resource. As an alternative the article PDF itself should have a permanent link to the 'Article Comment Thread' in the Web Dynpro Forum.
    Please post your comments on this idea.
    Regards, Bertram

  • How to kill parent and child thread in sequnece

    Hello freinds,
    I have one class FirstClass which creates one thread Pserver and Pserver creates three threads then how to kill parent Pserver and child threads.........

    define a method that requests that the parent thread terminate itself, and within the code called when the thread is shutting itself down, have it do something similar to its child threads: call methods that request they shutdown themselves.
    One common way to do this is to interrupt the thread.

  • Self tuning Thread Weblogic 9.2

    Hi, I'm using Weblogic 9.2.
    Weblogic 9.2 has a self tuning thread, which adapts itself in order to optimize the throughput.
    The problem is that anytime you restart the server, the thread pool restarts from a low number of threads and takes some time to reach the optimal number of threads again. This is a major issue, since it means that whenever you restart the server, you cannot handle the same amount of traffic as before the restart.
    Is there a way to tell Weblogic to start with a certain number of threads in the thread pool?
    Thanks in advance

    Thanks for sharing this usefule information about self-tuning thread.
    We are using WebLogic 10.2, and also have some issues with self-tuning threads. I suspect that we need to adjust either min or max size for the self-tuning thread tool. I checked our config.xml, there is no information set there. Does this mean we use the default value from WebLogic? If yes, can you tell me what the default values are so I can decide if they are proper or not for our application.
    Thanks,
    David,

  • Threads - Multithreaded app. - How to cancel one and start another?

    I've searched through the forums for some direction on this but have been unsuccessful in finding anything I could use yet.
    What I am trying to accomplish is the following:
    1. I have a multithreaded application
    2. User can enter login information and then initiate the login thread by clicking the login button
    3. Login button turns into a Cancel button during login attempt
    4. If user changes their mind, they can initiate the cancel login thread by clicking the cancel button
    How can I stop the login thread and start the cancel thread? Reading through the API (1.3.1), it seems that necessary methods have been depreciated. Could anyone offer me any insight/examples?
    Thanks,
    KJ

    Have a boolean variable in the login thread which is checked at various points through the process and set to true when login starts. When the user clicks cancel, set it to false, then the login thread will end itself next time it checks the boolean.

  • Is Oracle JDBC driver thread safe

    Is the Oracle JDBC driver thread safe?

    Seems that this is not totally true.
    We have a Problem with Oracle JDBC driver 9.2.0.5.0 (thin)
    Using an IBM JDK 1.4
    Szenario:
    Thread 1 access to a CLOB via
    ResulSet.getCharacterStream(int)
    Thread 2 normal access via some select and
    ResulSet.getString(int)
    (Both using the same connection)
    The following threads appear to be in a circular deadlock.
    Further information can be found by looking in the Overall Thread Analysis
    section of this tool.
    Multi-threaded deadlock 1:
    "Servlet.Engine.Transports : 6" of (sys:0x39778800) (TID:0x104590D0)
    Holding Resource: oracle.jdbc.ttc7.TTC7Protocol@1ADEB358/1ADEB360
    Thread Waiting: "ProcessNotificationTask" (sys:0x3C51FC18) (TID:0x103B4C40)
    "ProcessNotificationTask" of (sys:0x3C51FC18) (TID:0x103B4C40)
    Holding Resource: oracle.jdbc.driver.OracleConnection@1AE45160/1AE45168
    Thread Waiting: "Servlet.Engine.Transports : 6" (sys:0x39778800) (TID:0x104590D0)
    4XESTACKTRACE at oracle.jdbc.driver.OracleStatement.doExecuteQuery(OracleStatement.java:2667)
    4XESTACKTRACE at oracle.jdbc.driver.OracleStatement.doExecuteWithTimeout(OracleStatement.java:2840)
    4XESTACKTRACE at oracle.jdbc.driver.OraclePreparedStatement.executeUpdate(OraclePreparedStatement.java:608)
    4XESTACKTRACE at oracle.jdbc.driver.OraclePreparedStatement.executeQuery(OraclePreparedStatement.java:536)
    4XESTACKTRACE at com.top_logic.knowledge.service.db.DBKnowledgeBase.getObjectsByAttribute(Unknown Source)
    4XESTACKTRACE at oracle.jdbc.ttc7.TTC7Protocol.getLobChunkSize(TTC7Protocol.java:3050)
    4XESTACKTRACE at oracle.sql.LobDBAccessImpl.getChunkSize(LobDBAccessImpl.java:687)
    4XESTACKTRACE at oracle.sql.CLOB.getChunkSize(CLOB.java:692)
    4XESTACKTRACE at oracle.sql.CLOB.getBufferSize(CLOB.java:717)
    4XESTACKTRACE at oracle.sql.CLOB.getCharacterStream(CLOB.java:345)
    4XESTACKTRACE at oracle.sql.CLOB.characterStreamValue(CLOB.java:1377)
    4XESTACKTRACE at oracle.jdbc.driver.OracleStatement.getCharacterStreamValue(OracleStatement.java:5817)
    4XESTACKTRACE at oracle.jdbc.driver.OracleResultSetImpl.getCharacterStream(OracleResultSetImpl.java:1230)
    It seems that the access to the CLOB needs another,
    internal SELECT to the Database and this way
    TTC7Protocol and OracleConnection lock out each other.
    This only happens on a true multiprocessor machine.
    We tried to reprodcue it on a Single Processor
    and some HyperThreading Machine but had no real sucess.
    Now where can I sumbit this as a Bug ?

  • Java Thread Priority

    I am working on a system where I have a couple of background threads processing some non-time critical tasks. The desired behaviour of the system is that the background threads would adapt itself when the load of the system is increasing/descreasing... So as to ensure the normal operation of the system performing the main tasks.
    How reliable is with the use of java thread priority... I thought of something like lowering the priority of the background threads gradually when the load increases and then boosting the priority to a max of NORMAL_PRIORITY when the load descreases... what about the use of yield()? I am using some application facts to predicts the load of the system... Does anybody has a clue whether it is possible to query general information about the system load through some java APIs (without using native libs)?
    Your advice and help is much appreciated...

    It is very platform dependant. Windows screws
    everything up when it comes to threads. They favor
    GUI threads natively over non GUI threads. So instead
    of letting the programmer setup thread priorities
    Microsoft figures your a moron and adjusts it for
    you... Plus the 10 levels of priorities doesn't map
    well at all between unix and Windows. If you look
    even deeper inside you will see just what a joke
    Windows threads are.I don't think I can just rely on the reliability of Java Thread Scheduling... I need something more than that. I need to reach a confidence level that the background threads will not affect the operation of the main worker threads. Though "sleeping" to give up control may not have result in good utilization, but it indirectly create more chances for the worker threads to run. I need to play around with a good sleep time, or best, sleep longer when the load is high/increasing and shorter when the load is low/decreasing... By the way, do u think the context switches incurred when will be significant?

  • Shutting down a panel in one thread from another thread.

    For various reasons, I have a program with two threads (actually more than two, but only two are concerned here). One is the main panel that runs at startup, another is a Virtual O'Scope panel with a real-time display. Everything works more or less well, until it's time to exit the program.
    The main program starts by calling a routine to display the VO'scope; this routine calls CmtScheduleThreadPoolFunctionAdv to schedule the VOscope thread with the function VOscopePanelMain.
    VOscopePanelMain initializes things, displays the VOscope panel, and then calls RunUserInterface(); to process events in the VOscope panel.
    When it comes time to close the window, closing the panel (the X box in the upper right corner) triggers the panel callback CB_VoscopePanel, which processes the EVENT_CLOSE: event by calling QuitUserInterface(0); which, in turn, causes RunUserInterface to return to VOscopePanelMain, which then shuts things down, closes the panel properly, and exits. So far so good.
    int CVICALLBACK CB_VoscopePanel (int panel, int event, void *callbackData,
            int eventData1, int eventData2)
        int    iPanelHeight, iPanelWidth, iV2ControlLeft, iV2ControlWidth, iWidth,
            iT2ControlTop, iT2ControlHeight, iHeight, iLeft, iGap, iScreenTop, iScreenLeft,
            iTop, iBoxWidth;
        switch (event) {
            break;
        case EVENT_GOT_FOCUS: //happens when first displayed or refreshed
        case EVENT_PANEL_SIZE: //size the controls on the panel
           ... do stuff here;
            break;
        case EVENT_CLOSE:
            QuitUserInterface(0);  //stop VOscopePanelMain, which in turn closes the panel and cleans stuff up.
            break;
        return 0;
    However, I also want the panel to stop when I close the main program. The only way that I know how to do this cleanly is to have the main program (which has closed all of its panels and is in the process of shutting down) call VOSCOPE_Close_VOScope () which, in turn, calls CallPanelCallback (iHandle_VOscope, EVENT_CLOSE, 0, 0, 0); (which forces a call to CB_VoscopePanel above with the EVENT_CLOSE event), which should call QuitUserInterface, which should cause the RunUserInterface in VOscopePanelMain to return and let it continue to shut down. In addition, after calling CallPanelCallback, the shutdown routine calls CmtWaitForThreadPoolFunctionCompletion to wait for the VOscopePanelMain thread to actually quit and clean up before proceeding.
    But, of course, it doesn't since, and it took me a while to realize this. The call to QuitUserInterface isn't coming from inside of the VOscopePanelMain thread, it's coming from the main panel's thread - which is already in the process of shutting down. So, the main panel thread is telling itself to quit, VOscopePanelMain never gets the QuitUserInterface message, and things stall.
    So: how do I have one thread tell a panel in another thread to cleanly close? Or do I have to get complicated and either replace RunUserInterface in VOscopePanelMain with a loop that processes events manually and looks for a flag, or figure out something with a thread-safe queue? Any help appreciated.
    Attachments:
    Voscope.c ‏76 KB

    Sorry for delay in answering, it took me a while to find time to build up a working example.
    The attached program spawns a thread in a new thread pool and permit you to choose whether to close it from the main thread or the spawned thread itself.
    It appears that in such a minimal configuration the process works as expected. There may be some different configuration in your actual program that prevents this.
    Proud to use LW/CVI from 3.1 on.
    My contributions to the Developer Zone Community
    If I have helped you, why not giving me a kudos?
    Attachments:
    ThreadPoolWithGUI.zip ‏7 KB

Maybe you are looking for