From 27088ac224e150f4cf86c2daaec1c75b7c74b377 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sun, 15 Apr 2018 18:08:35 +0200 Subject: [PATCH 01/11] COM Call through the `com.sun.jna.platform.win32.COM.util.Factory` loose stack trace information The execution of business method invoked via com.sun.jna.platform.win32.COM.util.Factory is dispatched into a different thread, that has COM initialized. If the execution of one of these methods raises an Exception, the exception is unwrapped as far as possible. This in turn looses the call information on the call site. This is corrected here by concatenating the two stacktraces. While not strictly correct, it results in stack traces, that give enough information to trace them back to their origin. --- .../sun/jna/platform/win32/COM/util/Factory.java | 15 +++++++++++++++ .../win32/COM/util/ProxyObjectFactory_Test.java | 11 ++++++++++- .../COM/util/ProxyObjectObjectFactory_Test.java | 9 +++++++++ 3 files changed, 34 insertions(+), 1 deletion(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/COM/util/Factory.java b/contrib/platform/src/com/sun/jna/platform/win32/COM/util/Factory.java index f65da63663..f2c1c9a6d6 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/COM/util/Factory.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/COM/util/Factory.java @@ -177,10 +177,12 @@ private T runInComThread(Callable callable) { } catch (ExecutionException ex) { Throwable cause = ex.getCause(); if (cause instanceof RuntimeException) { + appendStacktrace(ex, cause); throw (RuntimeException) cause; } else if (cause instanceof InvocationTargetException) { cause = ((InvocationTargetException) cause).getTargetException(); if (cause instanceof RuntimeException) { + appendStacktrace(ex, cause); throw (RuntimeException) cause; } } @@ -188,6 +190,19 @@ private T runInComThread(Callable callable) { } } + /** + * Append the stack trace available via caughtException to the stack trace + * of toBeThrown. The combined stack trace is reassigned to toBeThrown + */ + private static void appendStacktrace(Exception caughtException, Throwable toBeThrown) { + StackTraceElement[] upperTrace = caughtException.getStackTrace(); + StackTraceElement[] lowerTrace = toBeThrown.getStackTrace(); + StackTraceElement[] trace = new StackTraceElement[upperTrace.length + lowerTrace.length]; + System.arraycopy(upperTrace, 0, trace, lowerTrace.length, upperTrace.length); + System.arraycopy(lowerTrace, 0, trace, 0, lowerTrace.length); + toBeThrown.setStackTrace(trace); + } + public ComThread getComThread() { return comThread; } diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectFactory_Test.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectFactory_Test.java index 4c66f4d5a1..d543bc7f81 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectFactory_Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectFactory_Test.java @@ -154,8 +154,17 @@ public void testFetchNotExistingObject() { assertNotNull("fetchObject on a non-running Object must raise an exception", exceptionRaised); assertEquals("Unexpected error code", exceptionRaised.getHresult().intValue(), WinError.MK_E_UNAVAILABLE); assertTrue("Error code not matched", exceptionRaised.matchesErrorCode(WinError.MK_E_UNAVAILABLE)); + boolean callingMethodPartOfStackTrace = false; + for(StackTraceElement ste: exceptionRaised.getStackTrace()) { + if("testFetchNotExistingObject".equals(ste.getMethodName()) + && getClass().getName().equals(ste.getClassName())) { + callingMethodPartOfStackTrace = true; + break; + } + } + assertTrue("The calling method must be part of the reported stack trace", callingMethodPartOfStackTrace); } - + @Test public void equals() { MsWordApp comObj1 = this.factory.createObject(MsWordApp.class); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectObjectFactory_Test.java b/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectObjectFactory_Test.java index 3bb51065ff..f1753a0b55 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectObjectFactory_Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/COM/util/ProxyObjectObjectFactory_Test.java @@ -158,6 +158,15 @@ public void testFetchNotExistingObject() { assertNotNull("fetchObject on a non-running Object must raise an exception", exceptionRaised); assertEquals("Unexpected error code", exceptionRaised.getHresult().intValue(), WinError.MK_E_UNAVAILABLE); assertTrue("Error code not matched", exceptionRaised.matchesErrorCode(WinError.MK_E_UNAVAILABLE)); + boolean callingMethodPartOfStackTrace = false; + for(StackTraceElement ste: exceptionRaised.getStackTrace()) { + if("testFetchNotExistingObject".equals(ste.getMethodName()) + && getClass().getName().equals(ste.getClassName())) { + callingMethodPartOfStackTrace = true; + break; + } + } + assertTrue("The calling method must be part of the reported stack trace", callingMethodPartOfStackTrace); } @Test From 38ba944b5c7d6a7457909bb7bd337a3651c24d88 Mon Sep 17 00:00:00 2001 From: James Howard Date: Thu, 29 Mar 2018 14:51:38 -0500 Subject: [PATCH 02/11] Add ACL constructor that tolerates files with unknown ACE types If an ACL contained supported (ACCESS_ALLOWED_ACE_TYPE, ACCESS_DENIED_ACE_TYPE) and unsupported types (i.e. ACCESS_ALLOWED_CALLBACK_ACE_TYPE) the constructor threw an IllegalArgumentException. The extraction logic for the ACEs was moved to the accessor function and unsupported ACEs are skipped. --- .../src/com/sun/jna/platform/win32/WinNT.java | 43 ++++++++++++------- 1 file changed, 27 insertions(+), 16 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index 884f7a40de..fbfb929240 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -23,6 +23,7 @@ */ package com.sun.jna.platform.win32; +import java.util.ArrayList; import java.util.Collections; import java.util.List; @@ -2553,8 +2554,6 @@ public static class ACL extends Structure { public short AceCount; public short Sbz2; - private ACCESS_ACEStructure[] ACEs; - public ACL() { super(); } @@ -2567,30 +2566,42 @@ public ACL(int size) { public ACL(Pointer pointer) { super(pointer); read(); - ACEs = new ACCESS_ACEStructure[AceCount]; + } + + public ACCESS_ACEStructure[] getACEStructures() { + return getACEStructures(false); + } + + public ACCESS_ACEStructure[] getACEStructures(boolean tolerateUnknownAceTypes) { + final List ACEs = new ArrayList(AceCount); + final Pointer pointer = this.getPointer(); int offset = size(); for (int i = 0; i < AceCount; i++) { - Pointer share = pointer.share(offset); - // ACE_HEADER.AceType - final byte aceType = share.getByte(0); - ACCESS_ACEStructure ace; + final Pointer share = pointer.share(offset); + final byte aceType = share.getByte(0); // ACE_HEADER.AceType + final short aceSize; switch (aceType) { case ACCESS_ALLOWED_ACE_TYPE: - ace = new ACCESS_ALLOWED_ACE(share); + final ACCESS_ALLOWED_ACE allowedAce = new ACCESS_ALLOWED_ACE(share); + aceSize = allowedAce.AceSize; + ACEs.add(allowedAce); break; case ACCESS_DENIED_ACE_TYPE: - ace = new ACCESS_DENIED_ACE(share); + final ACCESS_DENIED_ACE deniedAce = new ACCESS_DENIED_ACE(share); + aceSize = deniedAce.AceSize; + ACEs.add(deniedAce); break; default: - throw new IllegalArgumentException("Unknown ACE type " + aceType); + if (! tolerateUnknownAceTypes) { + throw new IllegalStateException("Unknown ACE type " + aceType); + } + final ACE_HEADER aceHeader = new ACE_HEADER(share); + aceSize = aceHeader.AceSize; + break; } - ACEs[i] = ace; - offset += ace.AceSize; + offset += aceSize; } - } - - public ACCESS_ACEStructure[] getACEStructures() { - return ACEs; + return ACEs.toArray(new ACCESS_ACEStructure[ACEs.size()]); } @Override From ab72bdb44141dd2fe88286d750aec337844483d9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sun, 8 Apr 2018 21:03:47 +0200 Subject: [PATCH 03/11] Unify ACEStructure and ACE_HEADER and return ACE_HEADER[] from ACL Instead of throwing an Exception or skipping ACEs, alle ACEs in an ACL are returned. If the ACE is an unsupported type, the base structure of all ACEs (ACE_HEADER) is returned. Users of the ACEs contained in the ACL need to check the type and downcast appropriately. --- CHANGES.md | 9 ++ .../sun/jna/platform/win32/Advapi32Util.java | 49 +++++++---- .../src/com/sun/jna/platform/win32/WinNT.java | 84 ++++++++----------- 3 files changed, 74 insertions(+), 68 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 8aac775410..0d71935e78 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -15,6 +15,7 @@ Features * [#797](https://github.com/java-native-access/jna/issues/797): Binding `Advapi32#EnumDependendServices`, `Advapi32#EnumServicesStatusEx` and `Advapi32#QueryServiceStatus`. `W32Service#stopService` was modified to be more resilent when stopping service - [@matthiasblaesing](https://github.com/matthiasblaesing). * Bind `com.sun.jna.platform.win32.Kernel32.ExpandEnvironmentStrings` and add helper method for it as `Kernel32Util#expandEnvironmentStrings` - [@matthiasblaesing](https://github.com/matthiasblaesing). * [#935](https://github.com/java-native-access/jna/pull/935): Add RegConnectRegistry to Advapi32 mappings. - [@cxcorp](https://github.com/cxcorp). +* [#947](https://github.com/java-native-access/jna/pull/947): Allow retrieval of `ACEs` from `com.sun.jna.platform.win32.WinNT.ACL` even if the contained `ACE` is not currently supported - [@jrobhoward](https://github.com/jrobhoward). Bug Fixes --------- @@ -84,6 +85,14 @@ Breaking Changes was changed from `PointerByReference` to `STRRET` and matching this, the first parameter of `com.sun.jna.platform.win32.Shlwapi.StrRetToStr` was changed identically. +* `ACE_HEADER` replaces `ACEStructure` as the base class for `ACEs`. + `com.sun.jna.platform.win32.WinNT.ACL` was modified to support ACLS, that contain + `ACEs` other than `ACCESS_ALLOWED_ACE_TYPE` and `ACCESS_DENIED_ACE_TYPE` by + widening the return type of `getACEStructures` to `ACE_HEADER[]` and renaming + the method to `getACEs`. In + consequence `com.sun.jna.platform.win32.Advapi32Util#getFileSecurity` was + changed similarly. The SID accessors `getSidString` and `getSID` were moved + from `ACEStructure` to `ACCESS_ACEStructure`. Release 4.5.0 ============= diff --git a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java index afa5985954..2c4eff7632 100755 --- a/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/Advapi32Util.java @@ -72,6 +72,7 @@ import com.sun.jna.platform.win32.WinDef.ULONGByReference; import com.sun.jna.platform.win32.WinNT.ACCESS_ACEStructure; import com.sun.jna.platform.win32.WinNT.ACCESS_ALLOWED_ACE; +import com.sun.jna.platform.win32.WinNT.ACE_HEADER; import com.sun.jna.platform.win32.WinNT.ACL; import com.sun.jna.platform.win32.WinNT.EVENTLOGRECORD; import com.sun.jna.platform.win32.WinNT.GENERIC_MAPPING; @@ -91,6 +92,7 @@ import com.sun.jna.ptr.LongByReference; import com.sun.jna.ptr.PointerByReference; import com.sun.jna.win32.W32APITypeMapper; +import java.util.List; /** * Advapi32 utility API. @@ -2200,7 +2202,12 @@ public void remove() { } } - public static ACCESS_ACEStructure[] getFileSecurity(String fileName, + /** + * @param fileName path to the file + * @param compact if true compatible ACEs are merged if possible + * @return + */ + public static ACE_HEADER[] getFileSecurity(String fileName, boolean compact) { int infoType = WinNT.DACL_SECURITY_INFORMATION; int nLength = 1024; @@ -2231,29 +2238,35 @@ public static ACCESS_ACEStructure[] getFileSecurity(String fileName, SECURITY_DESCRIPTOR_RELATIVE sdr = new WinNT.SECURITY_DESCRIPTOR_RELATIVE( memory); - memory.clear(); ACL dacl = sdr.getDiscretionaryACL(); - ACCESS_ACEStructure[] aceStructures = dacl.getACEStructures(); + ACE_HEADER[] aceStructures = dacl.getACEs(); if (compact) { + List result = new ArrayList(); Map aceMap = new HashMap(); - for (ACCESS_ACEStructure aceStructure : aceStructures) { - boolean inherted = ((aceStructure.AceFlags & WinNT.VALID_INHERIT_FLAGS) != 0); - String key = aceStructure.getSidString() + "/" + inherted + "/" - + aceStructure.getClass().getName(); - ACCESS_ACEStructure aceStructure2 = aceMap.get(key); - if (aceStructure2 != null) { - int accessMask = aceStructure2.Mask; - accessMask = accessMask | aceStructure.Mask; - aceStructure2.Mask = accessMask; - } else { - aceMap.put(key, aceStructure); - } + for (ACE_HEADER aceStructure : aceStructures) { + if(aceStructure instanceof ACCESS_ACEStructure) { + ACCESS_ACEStructure accessACEStructure = (ACCESS_ACEStructure) aceStructure; + boolean inherted = ((aceStructure.AceFlags & WinNT.VALID_INHERIT_FLAGS) != 0); + String key = accessACEStructure.getSidString() + "/" + inherted + "/" + + aceStructure.getClass().getName(); + ACCESS_ACEStructure aceStructure2 = aceMap.get(key); + if (aceStructure2 != null) { + int accessMask = aceStructure2.Mask; + accessMask = accessMask | accessACEStructure.Mask; + aceStructure2.Mask = accessMask; + } else { + aceMap.put(key, accessACEStructure); + result.add(aceStructure2); + } + } else { + result.add(aceStructure); + } } - return aceMap.values().toArray( - new ACCESS_ACEStructure[aceMap.size()]); + return result.toArray(new ACE_HEADER[result.size()]); } - return aceStructures; + + return aceStructures; } public static enum AccessCheckPermission { diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index fbfb929240..658240e6a9 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -2568,40 +2568,36 @@ public ACL(Pointer pointer) { read(); } - public ACCESS_ACEStructure[] getACEStructures() { - return getACEStructures(false); - } - - public ACCESS_ACEStructure[] getACEStructures(boolean tolerateUnknownAceTypes) { - final List ACEs = new ArrayList(AceCount); + /** + * Extract the contained ACEs from the ACL. + * + *

ACE types as decoded to their native JNA counterparts. ACE types, + * that are currently unsupported by JNA are returned as + * {@link WinNT.ACE_HEADER} objects.

+ * + * @return array holding the contained ACEs + */ + public ACE_HEADER[] getACEs() { + ACE_HEADER[] ACEs = new ACE_HEADER[AceCount]; final Pointer pointer = this.getPointer(); int offset = size(); for (int i = 0; i < AceCount; i++) { final Pointer share = pointer.share(offset); final byte aceType = share.getByte(0); // ACE_HEADER.AceType - final short aceSize; switch (aceType) { case ACCESS_ALLOWED_ACE_TYPE: - final ACCESS_ALLOWED_ACE allowedAce = new ACCESS_ALLOWED_ACE(share); - aceSize = allowedAce.AceSize; - ACEs.add(allowedAce); + ACEs[i] = new ACCESS_ALLOWED_ACE(share); break; case ACCESS_DENIED_ACE_TYPE: - final ACCESS_DENIED_ACE deniedAce = new ACCESS_DENIED_ACE(share); - aceSize = deniedAce.AceSize; - ACEs.add(deniedAce); + ACEs[i] = new ACCESS_DENIED_ACE(share); break; default: - if (! tolerateUnknownAceTypes) { - throw new IllegalStateException("Unknown ACE type " + aceType); - } - final ACE_HEADER aceHeader = new ACE_HEADER(share); - aceSize = aceHeader.AceSize; + ACEs[i] = new ACE_HEADER(share); break; } - offset += aceSize; + offset += ACEs[i].AceSize; } - return ACEs.toArray(new ACCESS_ACEStructure[ACEs.size()]); + return ACEs; } @Override @@ -2712,63 +2708,41 @@ protected List getFieldOrder() { } } - public static abstract class ACEStructure extends Structure { + public static class ACE_HEADER extends Structure { public static final List FIELDS = createFieldsOrder("AceType", "AceFlags", "AceSize"); public byte AceType; public byte AceFlags; public short AceSize; - PSID psid; - - public ACEStructure() { + public ACE_HEADER() { super(); } - public ACEStructure(Pointer p) { + public ACE_HEADER(Pointer p) { super(p); + read(); } - public ACEStructure(byte AceType, byte AceFlags, short AceSize, PSID psid) { + public ACE_HEADER(byte AceType, byte AceFlags, short AceSize) { super(); this.AceType = AceType; this.AceFlags = AceFlags; this.AceSize = AceSize; - this.psid = psid; write(); } - public String getSidString() { - return Advapi32Util.convertSidToStringSid(psid); - } - - public PSID getSID() { - return psid; - } - @Override protected List getFieldOrder() { return FIELDS; } } - - /* ACE header */ - public static class ACE_HEADER extends ACEStructure { - public ACE_HEADER() { - super(); - } - - public ACE_HEADER(Pointer p) { - super(p); - read(); - } - } - + /** * ACCESS_ALLOWED_ACE and ACCESS_DENIED_ACE have the same structure layout */ - public static abstract class ACCESS_ACEStructure extends ACEStructure { - public static final List FIELDS = createFieldsOrder(ACEStructure.FIELDS, "Mask", "SidStart"); + public static abstract class ACCESS_ACEStructure extends ACE_HEADER { + public static final List FIELDS = createFieldsOrder(ACE_HEADER.FIELDS, "Mask", "SidStart"); public int Mask; /** @@ -2777,6 +2751,8 @@ public static abstract class ACCESS_ACEStructure extends ACEStructure { */ public byte[] SidStart = new byte[4]; + PSID psid; + public ACCESS_ACEStructure() { super(); } @@ -2799,6 +2775,14 @@ public ACCESS_ACEStructure(Pointer p) { read(); } + public String getSidString() { + return Advapi32Util.convertSidToStringSid(psid); + } + + public PSID getSID() { + return psid; + } + /** * Write override due to psid not being a managed field */ From 4bfcb1183f93f3fdca2f405e1a59096430a31a5f Mon Sep 17 00:00:00 2001 From: Andreas Loth Date: Mon, 16 Apr 2018 21:48:19 +0200 Subject: [PATCH 04/11] Add string <--> byte[] conversion API using Charset --- src/com/sun/jna/Native.java | 107 ++++++++++++++++++++++--------- test/com/sun/jna/NativeTest.java | 21 ++++++ 2 files changed, 99 insertions(+), 29 deletions(-) diff --git a/src/com/sun/jna/Native.java b/src/com/sun/jna/Native.java index bc4113a06c..0068ffa022 100644 --- a/src/com/sun/jna/Native.java +++ b/src/com/sun/jna/Native.java @@ -48,6 +48,8 @@ import java.nio.Buffer; import java.nio.ByteBuffer; import java.nio.charset.Charset; +import java.nio.charset.IllegalCharsetNameException; +import java.nio.charset.UnsupportedCharsetException; import java.security.AccessController; import java.security.PrivilegedAction; import java.util.ArrayList; @@ -107,7 +109,8 @@ */ public final class Native implements Version { - public static final String DEFAULT_ENCODING = Charset.defaultCharset().name(); + public static final Charset DEFAULT_CHARSET = Charset.defaultCharset(); + public static final String DEFAULT_ENCODING = Native.DEFAULT_CHARSET.name(); public static boolean DEBUG_LOAD = Boolean.getBoolean("jna.debug_load"); public static boolean DEBUG_JNA_LOAD = Boolean.getBoolean("jna.debug_load.jna"); @@ -346,6 +349,35 @@ public static Pointer getDirectBufferPointer(Buffer b) { private static native long _getDirectBufferPointer(Buffer b); + /** + * Gets the charset belonging to the given {@code encoding}. + * @param encoding The encoding - if {@code null} then the default platform + * encoding is used. + * @return The charset belonging to the given {@code encoding} or the platform default. + * Never {@code null}. + */ + private static Charset getCharset(String encoding) { + Charset charset = null; + if (encoding != null) { + try { + charset = Charset.forName(encoding); + } + catch(IllegalCharsetNameException e) { + System.err.println("JNA Warning: Encoding '" + + encoding + "' is unsupported (" + e.getMessage() + ")"); + } + catch(UnsupportedCharsetException e) { + System.err.println("JNA Warning: Encoding '" + + encoding + "' is unsupported (" + e.getMessage() + ")"); + } + } + if (charset == null) { + System.err.println("JNA Warning: Using fallback encoding " + System.getProperty("file.encoding")); + charset = Native.DEFAULT_CHARSET; + } + return charset; + } + /** * Obtain a Java String from the given native byte array. If there is * no NUL terminator, the String will comprise the entire array. The @@ -367,11 +399,27 @@ public static String toString(byte[] buf) { * holds a {@code char} array. This means only single-byte encodings are * supported.

* - * @param buf The buffer containing the encoded bytes + * @param buf The buffer containing the encoded bytes. Must not be {@code null}. * @param encoding The encoding name - if {@code null} then the platform * default encoding will be used */ public static String toString(byte[] buf, String encoding) { + return Native.toString(buf, Native.getCharset(encoding)); + } + + /** + * Obtain a Java String from the given native byte array, using the given + * encoding. If there is no NUL terminator, the String will comprise the + * entire array. + * + *

Usage note: This function assumes, that {@code buf} + * holds a {@code char} array. This means only single-byte encodings are + * supported.

+ * + * @param buf The buffer containing the encoded bytes. Must not be {@code null}. + * @param charset The charset to decode {@code buf}. Must not be {@code null}. + */ + public static String toString(byte[] buf, Charset charset) { int len = buf.length; // find out the effective length for (int index = 0; index < len; index++) { @@ -385,18 +433,7 @@ public static String toString(byte[] buf, String encoding) { return ""; } - if (encoding != null) { - try { - return new String(buf, 0, len, encoding); - } - catch(UnsupportedEncodingException e) { - System.err.println("JNA Warning: Encoding '" - + encoding + "' is unsupported"); - } - } - - System.err.println("JNA Warning: Decoding with fallback " + System.getProperty("file.encoding")); - return new String(buf, 0, len); + return new String(buf, 0, len, charset); } /** @@ -744,7 +781,7 @@ static byte[] getBytes(String s) { } /** - * @param s The string + * @param s The string. Must not be {@code null}. * @param encoding The encoding - if {@code null} then the default platform * encoding is used * @return A byte array corresponding to the given String, using the given @@ -752,18 +789,17 @@ static byte[] getBytes(String s) { * encoding. */ static byte[] getBytes(String s, String encoding) { - if (encoding != null) { - try { - return s.getBytes(encoding); - } - catch(UnsupportedEncodingException e) { - System.err.println("JNA Warning: Encoding '" - + encoding + "' is unsupported"); - } - } - System.err.println("JNA Warning: Encoding with fallback " - + System.getProperty("file.encoding")); - return s.getBytes(); + return Native.getBytes(s, Native.getCharset(encoding)); + } + + /** + * @param s The string. Must not be {@code null}. + * @param charset The charset used to encode {@code s}. Must not be {@code null}. + * @return A byte array corresponding to the given String, using the given + * charset. + */ + static byte[] getBytes(String s, Charset charset) { + return s.getBytes(charset); } /** @@ -777,13 +813,26 @@ public static byte[] toByteArray(String s) { } /** - * @param s The string + * @param s The string. Must not be {@code null}. + * @param encoding The encoding - if {@code null} then the default platform + * encoding is used * @return A NUL-terminated byte buffer equivalent to the given String, * using the given encoding. * @see #getBytes(String, String) */ public static byte[] toByteArray(String s, String encoding) { - byte[] bytes = getBytes(s, encoding); + return Native.toByteArray(s, Native.getCharset(encoding)); + } + + /** + * @param s The string. Must not be {@code null}. + * @param charset The charset used to encode {@code s}. Must not be {@code null}. + * @return A NUL-terminated byte buffer equivalent to the given String, + * using the given charset. + * @see #getBytes(String, String) + */ + public static byte[] toByteArray(String s, Charset charset) { + byte[] bytes = Native.getBytes(s, charset); byte[] buf = new byte[bytes.length+1]; System.arraycopy(bytes, 0, buf, 0, bytes.length); return buf; diff --git a/test/com/sun/jna/NativeTest.java b/test/com/sun/jna/NativeTest.java index 132e695f06..b5443a4ae5 100644 --- a/test/com/sun/jna/NativeTest.java +++ b/test/com/sun/jna/NativeTest.java @@ -391,6 +391,15 @@ public void testToByteArrayWithEncoding() throws Exception { assertEquals("Wrong byte array contents", VALUE, new String(buf, 0, buf.length-1, ENCODING)); } + public void testToByteArrayWithCharset() throws Exception { + final Charset CHARSET = Charset.forName("UTF-8"); + final String VALUE = getName() + UNICODE; + byte[] buf = Native.toByteArray(VALUE, CHARSET); + assertEquals("Wrong byte array length", VALUE.getBytes(CHARSET).length+1, buf.length); + assertEquals("Missing NUL terminator", (byte)0, buf[buf.length-1]); + assertEquals("Wrong byte array contents", VALUE, new String(buf, 0, buf.length-1, CHARSET)); + } + public void testToCharArray() { final String VALUE = getName() + UNICODE; char[] buf = Native.toCharArray(VALUE); @@ -443,6 +452,12 @@ public void testStringConversionWithEncoding() throws Exception { assertEquals("Encoded C string improperly converted", getName() + UNICODE, Native.toString(buf, "utf8")); } + public void testStringConversionWithCharset() throws Exception { + final Charset CHARSET_UTF8 = Charset.forName("UTF-8"); + byte[] buf = (getName() + UNICODE + NUL).getBytes(CHARSET_UTF8); + assertEquals("Encoded C string improperly converted", getName() + UNICODE, Native.toString(buf, CHARSET_UTF8)); + } + public void testWideStringConversion() { char[] buf = (getName() + NUL).toCharArray(); assertEquals("Wide C string improperly converted", getName(), Native.toString(buf)); @@ -453,6 +468,12 @@ public void testGetBytes() throws Exception { assertEquals("Incorrect native bytes from Java String", getName() + UNICODE, new String(buf, "utf8")); } + public void testGetBytesWithCharset() throws Exception { + final Charset CHARSET_UTF8 = Charset.forName("UTF-8"); + byte[] buf = Native.getBytes(getName() + UNICODE, CHARSET_UTF8); + assertEquals("Incorrect native bytes from Java String", getName() + UNICODE, new String(buf, CHARSET_UTF8)); + } + public void testGetBytesBadEncoding() throws Exception { byte[] buf = Native.getBytes(getName(), "unsupported"); assertEquals("Incorrect fallback bytes with bad encoding", From 11bc1d4c681c86a3935a529b7b94d5ff0a525791 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sat, 24 Mar 2018 17:21:15 +0100 Subject: [PATCH 05/11] Support building on JDK 10 (minimum build JDK is now 8, run time java version is 6) - Support for JDK 10 requires removal of usage of javah, which was replaced by the javac of JDK8, which can generate headers while processing the java classes (bumping the minimum build JDK to 8) - A new build target "native-build-package" was introduced, to create a zip file with the files necessary to build the native libraries, only requireing the JDK present on the build system, but can be an older JDK. Properties to select the build.os.name, build.os.arch and build.os.endianess were added to allow cross-system generation of the build package - the native Makefile is not modified by the build.xml anymore, as the two parameters JNA_JNI_VERSION and CHECKSUM are already passed in via command line parameters - Support for "-d32" and "-d64" datamodel selectors was removed as it was only needed for solaris and JDK8 (minimum build JDK) on solaris only supports 64 bit Closes: #902 Closes: #943 --- CHANGES.md | 12 ++ build.xml | 211 ++++++++++++++++++++-------------- native/Makefile | 6 +- src/com/sun/jna/Function.java | 6 + 4 files changed, 145 insertions(+), 90 deletions(-) diff --git a/CHANGES.md b/CHANGES.md index 0d71935e78..bafdaf5a5a 100644 --- a/CHANGES.md +++ b/CHANGES.md @@ -30,6 +30,18 @@ Bug Fixes * [#894](https://github.com/java-native-access/jna/issues/894): NullPointerException can be caused by calling `com.sun.jna.platform.win32.COM.util.ProxyObject#dispose` multiple times - [@matthiasblaesing](https://github.com/matthiasblaesing). * [#925](https://github.com/java-native-access/jna/issues/925): Optimize `Structure#validate` and prevent `ArrayIndexOutOfBoundsException` in `SAFEARRAY#read` for zero dimensions - [@matthiasblaesing](https://github.com/matthiasblaesing). * [#340](https://github.com/java-native-access/jna/issues/340): Guard registry handling against out-of-bounds reads by ensuring all read strings are NULL terminated - [@matthiasblaesing](https://github.com/matthiasblaesing). +* [#902](https://github.com/java-native-access/jna/issues/902): Allow building JNA on JDK 10. `javah` + was removed from the JDK and `javac` is now used to create the necessary headers. + JNA now has JDK 8 as the minimum build version, at runtime Java 6 is the minimum version.
+ Native code for platforms with a JDK version lower than 8 can still be build by (demonstrated for Solaris x86): +
    +
  1. Run `ant -Dbuild.os.name=SunOS -Dbuild.os.arch=x86 native-build-package`
  2. +
  3. Transfer the `build/build-package-sunos-x86-5.2.1.zip` file to the target system. The file holds the native sources, the necessary headers and and a shell script for the build.
  4. +
  5. Expand the zip on the target system.
  6. +
  7. Setup `JAVA_HOME` to point to the JDK sources.
  8. +
  9. Change into the expanded directory and run `bash build.sh`.
  10. +
  11. The resulting `sunos-x86.jar` is copied back to the original build system to `lib/native/sunos-x86.jar`
  12. +
- [@matthiasblaesing](https://github.com/matthiasblaesing). Breaking Changes ---------------- diff --git a/build.xml b/build.xml index 38ae002965..e70b59fb22 100644 --- a/build.xml +++ b/build.xml @@ -156,6 +156,20 @@ + + + + + + + + + + + + + + @@ -185,43 +199,6 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - @@ -239,62 +216,62 @@ - + - + - + - + - - + + - + - + - + - + - + - + - + - + - + - + - + - + @@ -314,16 +291,19 @@ value="${java.home}/lib/${libarch}/libjsig.so" else=""> - + + - + + + @@ -336,10 +316,11 @@ java.home=${java.home} java.library.path=${java.library.path} os.prefix=${os.prefix} - os.name=${os.name} - os.arch=${os.arch} (${sun.cpu.endian}) + os.name=${build.os.name} + os.arch=${build.os.arch} (${build.os.endianess}) build=${build} build.native=${build.native} + build.headers=${build.headers} build.aar=${build.aar} @@ -377,7 +358,8 @@ includeantruntime="false" deprecation="on" debug="${debug}" - encoding="UTF-8"> + encoding="UTF-8" + nativeheaderdir="${build.headers}"> @@ -665,11 +647,6 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - - - - - @@ -681,12 +658,12 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - - + @@ -703,6 +680,10 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc flags="m" file="${md5.file}"/> + + + + @@ -755,7 +736,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + @@ -790,16 +771,8 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc file="${rsrc}" byline="true"/> - + - - - @@ -840,7 +813,7 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + @@ -899,24 +872,24 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - + - + - + - - - - - + + + + + @@ -928,10 +901,73 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc + + + #!/bin/sh +cwd=$(pwd) +if [ -z "$JAVA_HOME" ]; then + echo "Please make sure JAVA_HOME is set" + exit 1 +fi +cd native +${make}\ + JAVA_HOME=$JAVA_HOME\ + JAVAH=$cwd/headers\ + DEBUG=${debug.native}\ + CFLAGS_EXTRA=${cflags_extra.native}\ + DYNAMIC_LIBFFI=${dynlink.native}\ + ${make.CC}\ + ${make.USE_MSVC}\ + BUILD=../build\ + ${make.SDKROOT}\ + ${make.ARCH}\ + ${make.PATH}\ + ${make.OS}\ + ${make.OPTS}\ + JNA_JNI_VERSION=${jni.version}\ + CHECKSUM=${jni.md5} +cd .. +cd build +zip ../${os.prefix}.jar libjnidispatch.so jnidispatch.dll +cd .. + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + - + @@ -1132,7 +1168,6 @@ osname=macosx;processor=x86;processor=x86-64;processor=ppc - diff --git a/native/Makefile b/native/Makefile index 6f9ad25bdc..1bea2dc77b 100644 --- a/native/Makefile +++ b/native/Makefile @@ -336,7 +336,9 @@ endif ifeq ($(CC),gcc) GCC_MAJOR_VERSION = $(shell gcc -dumpversion | cut -f 1 -d '.') ifneq ($(GCC_MAJOR_VERSION),4) - LOC_CC_OPTS=-Wno-unknown-warning-option -Werror -Wno-clobbered -Wno-unused-variable + ifneq ($(GCC_MAJOR_VERSION),3) + LOC_CC_OPTS=-Wno-unknown-warning-option -Werror -Wno-clobbered -Wno-unused-variable + endif endif else LOC_CC_OPTS=-Wno-unknown-warning-option -Werror -Wno-clobbered -Wno-unused-variable @@ -478,7 +480,7 @@ $(FFI_LIB): @mkdir -p $(FFI_BUILD) @if [ ! -f $(FFI_SRC)/configure ]; then \ echo "Generating configure"; \ - (cd $(FFI_SRC); ./autogen.sh); \ + (cd $(FFI_SRC); /bin/sh autogen.sh); \ fi @if [ ! -f $(FFI_BUILD)/Makefile ]; then \ echo "Configuring libffi ($(ARCH))"; \ diff --git a/src/com/sun/jna/Function.java b/src/com/sun/jna/Function.java index 2d31827f02..300a982d00 100644 --- a/src/com/sun/jna/Function.java +++ b/src/com/sun/jna/Function.java @@ -60,17 +60,23 @@ public interface PostCallRead { } /** Maximum number of arguments supported by a JNA function call. */ + @java.lang.annotation.Native public static final int MAX_NARGS = 256; /** Standard C calling convention. */ + @java.lang.annotation.Native public static final int C_CONVENTION = 0; /** First alternate convention (currently used only for w32 stdcall). */ + @java.lang.annotation.Native public static final int ALT_CONVENTION = 0x3F; + @java.lang.annotation.Native private static final int MASK_CC = 0x3F; /** Whether to throw an exception if last error is non-zero after call. */ + @java.lang.annotation.Native public static final int THROW_LAST_ERROR = 0x40; /** Mask for number of fixed args (1-3) for varargs calls. */ + @java.lang.annotation.Native public static final int USE_VARARGS = 0x180; static final Integer INTEGER_TRUE = Integer.valueOf(-1); From 83cb5cb8f4446f02ab882655bb7d84e2938cd8df Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Thu, 26 Apr 2018 00:37:25 +0200 Subject: [PATCH 06/11] Fix travis build (requires newer ant version) --- .travis.yml | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/.travis.yml b/.travis.yml index 7ea0e88fb7..8a6514f6c9 100644 --- a/.travis.yml +++ b/.travis.yml @@ -3,12 +3,8 @@ dist: trusty language: java -addons: - apt: - packages: - - ant-optional - install: + - '[ "${TRAVIS_OS_NAME}" = "linux" ] && wget http://apache.mirror.iphh.net/ant/binaries/apache-ant-1.9.11-bin.tar.gz && tar xzf apache-ant-1.9.11-bin.tar.gz && sudo mv apache-ant-1.9.11 /usr/local/apache-ant-1.9.11 && sudo rm -f /usr/local/ant && sudo ln -s /usr/local/apache-ant-1.9.11 /usr/local/ant && sudo ln -s /usr/local/apache-ant-1.9.11/bin/ant /usr/local/bin/ant || true' - '[ "${TRAVIS_OS_NAME}" = "osx" ] && brew update || true' - '[ "${TRAVIS_OS_NAME}" = "osx" ] && brew uninstall libtool && brew install libtool || true' - '[ "${TRAVIS_OS_NAME}" = "osx" ] && brew install ant || true' From 2325c457bedd69e71ee0c0db78d44b143c2771eb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Sat, 24 Mar 2018 17:21:33 +0100 Subject: [PATCH 07/11] Update native binary for SunOS/Solaris x86/sparc/sparcv9 --- lib/native/sunos-sparc.jar | Bin 508 -> 48846 bytes lib/native/sunos-sparcv9.jar | Bin 508 -> 50436 bytes lib/native/sunos-x86.jar | Bin 508 -> 48041 bytes 3 files changed, 0 insertions(+), 0 deletions(-) diff --git a/lib/native/sunos-sparc.jar b/lib/native/sunos-sparc.jar index 6716399ab65ff2aa137fbe6021402a820a487975..35fa23c7af2b5b38e8f00327285d103476d3e3d6 100644 GIT binary patch literal 48846 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
O(F6;n82EOZ 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 PlvnGO)inb2e@Fihegb8^ literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 diff --git a/lib/native/sunos-sparcv9.jar b/lib/native/sunos-sparcv9.jar index 6716399ab65ff2aa137fbe6021402a820a487975..8280bb9f5fc69320f5a5e9ac3b4460b68088daa2 100755 GIT binary patch literal 50436 zcmYg$1yCGKv^4|^PC{^52uW}V3Bg$c1h?QWfndSiStJA!B)GcaV}vRQ0XtbI(2Zc30QTR8N0a!onuNz<7#*F_V#|jPZXid<<+16&Wo_ZUt3Y zUepK%#^?V>eTp&tNEIsh;0b!9mp--^kL~|cRU}mvWMwq9cvNIBRK`Y?mAHAPh?TfG zCdMH38gFOc!**Q9q@TNR$tzFDYh(Pve9e7DMC{X=8L2_8q@n4a#UV+{bxE{IJWk}1 zKotFg9~t>P!A*lA^CFVqJo33x&>Nd`SD#(V?ZVyS-J~EKGTDrMntwDLuP_~mc;rcL ze{Y@DxL{JOx7bTkf6JNh6J=0N(iE%BE`v7)2R$7uiD6`fY|`bd4z2CnU06bqrM=g!D+6i^No z&u<+b`%#!!TxKC4X{OJh?O1NXY09I{l~&+q6`oDiPg1#O#tA5m@5s)inbTHxhVslG z4U--K5jTH;jcV&*cTyFehL40XY5YOhLGQ>;1yP&MVV^y{2{lm3H3liwN|K{lWqr3N zqI}8a{s7wZWzMR6WlCVI8PMlwpX%Dy`i>R|mRl&ik<@ozQ%Y`r>mRfKn>ldeIjE`2 zog1-rPFaewpD`l5|NV6uFnp2aPn<-QG8l63%>6*lJ%GkoZmxe5J%DO{(3f2-u0u3a zzI`!Y$1%JK^?WzFFCtWeg6Y35T6-_oI!oVjfVER{ErFN{|OO3Gb)Lx z8ljoS^Q9G&ZaWt*xceU1Hmc@zd%_b_n8S1MkFwJdmcFD~9y#o^d2v6yOf11)DfgR~ zAz%Z5JGc-At(7+&M%Mrax^h#n3%X)&S|46{gNiT9XK!TgggPar&_tHA;WhHg@LKwN zyD>|iH;ZgSJi%KUZHy{#KIaG^F}liZ7Ow}YCp6T{#~6d}to)sYIOeajaJXUf*SL7!+MRPx#vC)DPV~F4Mv9FytW~Jyr6xP%6Ef4#i zREV;-Hnl2%7M0u+hb6~Due6~@0$y`>!lCEfU<)ev%yB_3lG0O48}p8M{DU)+DCQp4 z0*JwT+Lb(U0MjD{_d7?3Z9FSQ^6nv(L?m$KlHAcQLfJtU?~R>;u`UWsXRZ=x1G9fv z(9uJBYK=oqzFSby&$&O)({~p@yTi9goezI(`3Rw&f`LNUGY=_y{unX3dtT!7l0qgk zv(S&$<+!S?rmv_5yMbc}r`*eobCEcwv+hqKk@ULTKpqBz6x%A^lt46f3}=y@utW<% zO!-F3k1AHahwgvQW3g4%-;Pc3!1Q;~t@~nk0in3OGeKSJ(5&f`_PxU*w3tNx`AcTJopi{N55J7X{A`b!jt+-PfOj-(*!F z-T-;wuJ{>N@=w&+=K%+OsbMTy2w6Zcv(*x7`6M#_{LSl%g zw^^gpo3XH3FxdtJ;DC{16CGuJLL`5hp^X5ovi5?NPG8~!O+#|xVJ1IO{P=+>1g6yS zut8k^_3BNh3r={jP#~&^!1UD+Xm15w+ILdixv= z_3Cc>qBiyYcP($=xSC!KDN->^cgjD!lVQy$jF*_rn)C81IgrC&hNpK815noI#@1xm zYsyuijff}vOX%BZWEnj+AjXcQ|7TRP39n=U24}xk3UhjPcl$hsKH$NS;3XnC(dvm5 zz^?T3MhZE)lSjr{d&9#26V`t1;pYwA00q}z2JSLrF7i)-7_NHjv9LlA;iXJ6DG@@f zc(YvwK#Z~xF8}Qm%@-u9EmAMj{=?HuMSY__1RJl@V9xVPYYY-f;4cu4er)U zQMiy!6EInFg^vXUIbc95r}g1)?qE6d3tBBXNb)ON2ki~gpNk|%!*{$C zsQ1rUgG~=;C`{rcoh2-quqgs_Qq@AeZRra7PD;FOWROc7NXa-XsrH(+(ms&P-9U>q zX95DB3^<^$0(l*nuI=Lx-(7k0jQ-H(zEkT28bLB(Y*;YBdi(zRq3K2o(f=I~el*Qg zwfw5{q0Kl%33a<&#Ifr5KEe+d#8-ePyO+y&=7fDswS`BUD6a!j6t-1Pe=h}Jr^FA; z0%oNeZVpn9Pct17y6{{5#0<>C?BME?;N*JEgisjsr3jSY9+vNx+_@-ui3&2YSXaM- z6$q`~Q1?ja{ChD)O$v{*5Ya+N7>z7FIeI71Mdw>zDq%scE#AQxi^!}ffNTYUS`AJf z=RWw^WC>WF6~AqNg5w7kUfpHt&12wRgpZaIoa zN8Vx#LpMoEFVP8`9M_sIl^lU0JL;(=gAdYm1sO0iaEp_+NX{%-PA&-imI9^wETtzq z=I>dYFj=J14%DTx%P8i+`0msw3BqTdjbSu$_Q&9a?xka>5s9|RXoXB!AbmLTzIfTR zzKU;6C`hC$X}NLo{a#**@gVQjGkRqH0+WK1Dn9yoQck|b04qYKx?EetqYsh?J@knD zCGod9Xe$@}&yq~dw^HLwSHq}L@}YB{4u;mKypf3mw_&2>@B@FqCQmMXCDvsvj{m@Q zJ5db0L(6AJ8tW?uiJ#=gUUQpOc$re5x+2g$)+hKJNQ;q~$!cHd?(|Og&3W+1Ds@7( zTyXadkJi;&^=;v3jBe8~s>qIK6P<#42PHQ;NjZYQ$t7UAouuXNMwmE`q?kz20N_25 z=EH_U9$;Aa-l%LE^g*cz%4(RC1N16KbQk;ZUP6FnYfBI|wVI%gfWWFg^y?wb+!El2 zco0EgPjiB!rhltt6C_|rb0}2a zMfQ}`rTD~=ol!#!jF`MJ#JaQA7Wvz)YnGf9b#+iVy#$qaj(|T5{W&H5YeE^@3^k%a zrA0t`bi0c*=*fLC#Bc6Pf1yp1zoQcgoQgfaqn1u0W&>sDu_XR^shU=y_&88_=9!y# zEd%J#Cp1HL4<$+{rgH~aJ(`#!utsC21XM)eR3c;+j9BWH-CwXVc>+h>b#wjGykyZk zfxZ?JzZvot>d8N!VcVtIa0-$(UB|>Cg7v??lj8Yf-D8jC|NB?B+BSL^62O5>eZh(+ z#@$FYwJuqeN=mf1py*3^Msq2~#5PF0|2s1mj>(KAqS1X@6(IrhQVlNyMaEJshq*-% zn5x`n;0%RMXeCWZ(xUSNvN&Ihn0I0|u)uLk*YNK{fLWri{GWkyvqXwoI)5yS4k^HO z(s)@(Av2^-!fkZ_Z_g)AtBW_G5($-B1wg?cbR)MqGgA27DM=G07879VHzu?{Xy* zchZUpln(1=)S952gvSnYbiDrPyhj=?#?)94I|7LXYaw-}AX2Neb-J`_KYbWuErtzo z{ZVrmsBHd;q+RJB{x(7Av=?w0`XEpK?e7G^>vV#+ z0G{OQqVi;(!JH*d9q-QdRjHFYiZG=*U2iuf!bqi#rSf^U=449i>amO6DudQ@ljIED z%w~HZ1zVHaX7?gNYnd;SCiszBN#wWx#*IxfQ#41Ccaqi(3_3VU+_hcSL;NDo$=+r_ z+bB68oY`p^hMBq=eFWztR+yXTA(jgi+b?$egrx`~$y{Art~(=q!RM=DQr13pijnnh zik(I+wK7YCMHbaVFYC|iBbD@iA}}kGF-X^uhasyJK7(T!&2Ly;`6S$S?N2fDZ*g9(++JBn@xeU@6+R}ZJ{n>x%qHpG2Q zf(H}7)eLpyPw#}`lqJ7p_AFNqybU|2yeP!fP8%86%{=UZO6Hd)!bTn`nE-JB0^Nr$>a#Yj8vxhqFHN z6fd)blfdox?44;rCkMFr3##GJ|0<7GP5u>UZ`}s@L0}&n9)&eX>!hF6#)H zv;Q}}(=%KaQn!QCs=J%4(&B3CxSrHH8vIhoPSV7)wiz3R6@bz4Ju<7FUMZdxW47J( zHoar@>2QW-gf^V-e7vtN1Sv*_!>0s8{Ssr*`ozi3#baqyNsqth3O`Hc<{iJ``OEWn z%Uy>eqCF&JfzBl`Z1Fs#DD2naLeIG6S5D^)%h8^4SDmjZiCm_>)y>X-*I=jXeRFzb zug50FwFAv8KbAYc-iW={$2Vwnw&e#!B^Ks-IyMP^tLNt74!S<>jJ8`94Mz*!i@?;s zb(cLg+I=2yrhJlQ#j77@{Ykr<=q^Opo6kl^ty1jS5L@-&yp)RPS=fNkF-M~QZ%n7Qck{7@bG?AWiUd(ZJz6yA<3pVp>reGTaxbGk|84t=#j9NkDykP{t`#8!GkW@G=hGeX?pBKi zEWNr_&<;{9AgCv4$^0HC{o;6Fk$bpYxYeV(eEOMxWBo z%kZsK-x|6YBq-wdi~4P-ym!hJjFhbII&^flJ?X#^l%<^xp|k$t)XlUKMXi&fo1T>b zvSYuN75Dh=GyC*YW(2?79!00{X?Y^+^Y!*PV436`SmXHo+fBeqh_LO{a=Le;qG-Ff z{!cHDbmjt^TCw8UKc4gN1Y3PL&lN8kUa;2JWj-h3ko}(YBKZ696D5cI_125`)mg&O z3}Neu$_4IIo>ZSBYVAuQXwUqaMfPevF;`>)4=`Z9B0OOYCd z;OqUy8l*QXF3f#8tJC(PQ`vn;%$l8x=?)gQ^yXXGqIwJeGCNppd!d|Fnx(thS)2Wp zzm5A3AF9=0dcUyE$g&W25exg6SdNWghE(;k=Sv@O$-cbgwXDdeN_(wrP21z0v{lRg z%jEgA@bFqxq{6>{-l{LBRasEAA}fnmb1qNZc@*!Q>{AYwG~WH3u7v8;JQ4L|SxzlZ z7ZyK(C?8vRk*N#gj;``ZA6DL`x?MNmkMW&kCt5`rU2N05cO*Y{8Z*?_8^fd0!XvT& zUh-+cz_?{qFW6Xsyj~!((}-D?!Fj}Tsx#e(zGE%wHBK1$bqK+H;^ri&Xl>DCEP?Bo zFH4l!2t_Z*dB|;{ z=g)0y!-^)q|9Sq5FOlBYM-o$SwD9C$diX*)%IJC0h>dyj7xokH@ynpSK%%9b)iC{< z()3d{kB}v$F#|TwuxFOE%#|Eu;*i_04-uws5F^zqrSSYe0eCJ9J7Td*Pr=5m1j`s+ zG}6x3w1T}5y#(=TgyFlbnj8cz5gA5GD!?_On)?~eSj zANu9K@}|m2qa}n&UFz$sI~CDUG8NB19mv|%q=nUdhyJaP@J(XHyNNl(>3fch&qhQ{ ztzsvF6NNq`mH74Io{{>y52FmZt$lSwz@y|5#bfT^S$kWmxR;s=+fi|@7xQ0f$@6IB z=2~Qox39(KWi}1J*08!Kgpu0`{h2Vv382<}>TZwIy7xs`=B7*>A1CBbb{GWoJWrlv zu^%^P>zn1%%x2}k6prvJyrc4(!(~6GzJHVnlp{&c*Qk9o`2}&K<2XZ23;gUcx=0ULJYH8x39bj97p&re`zV6U-G+41*b7A{3JOjH!4BWRvkHu zf3Irpp_rupao>;`;OI+uGdI|GMcs;vfa1z=A)DmUiK6=woZ%j*O5MKVR*RWnzMsi0 zbu#Lad4BJ>?pAMOWTYjFXjtZ~OqLmOYR~L2r}l?4kUS_dUrz}Ym>G_nrzd+(w~3p^MIh?Rp0;aZ-it&#|B830#V zTPXs!Og;j(?jc+)P1HA2z);dZX>|+xsJSW;?$_rmKDzZ0&`Ed`m;D24p{;W?QQWdc?!`jvW|xM)Y$OEYQVnM; zK4iJaN*omb-EvZy%6_ly0(pI$h9ryef_amY7?J+I7tMePVS-Iz2u^y?k1aq{^~Kh` z)(SOLv-f6l(?r#uq#ZMc^l=(4IExQ$2gP$*oG5N?Hw~Cp(QMb^n_Z@>e&LY~U0+5} z-6=t8tL;(ua$r77$eZKaes~jlFfkyGJhcw+{01*lJieuy@@8vuU3ZlbL9Kbcw}BE} zO}N9QcY1FLdV8EU@X+5PxHz5|FxcYs{6=BZMA838bfP=go5C0B)Km4*cy4ae`gK2Q^z za_<2mf6TO1BD(J$LG&9`^@snsz3(=coM=*5~%>=VeZVaI>YH zqa_|UWLUen+X4o=)sW4t{Lb;s+%i}avZq?aVv#Ug+LjEMBXQ=kjNuR5Y{gS9;>_)D z7dEiMaDg0LRbRW&g&qZngAA?EQjtS6F5}AC6orYK87iO340qH)<`iC5W5)PIYSj;8n|yiJZ?omut+lLeonHSfuYPjY`78Q{Q>c z^tk8^fISR^&Ryb2R>u=vqA8CpMq1&E zB0L}6=!VCLZUej+B;=3?Y)gqkF>%x1s{Kd&-&Fel5rO~dNIi18^B+raIv|4gPiZl< zM4CMg8Wj0oeMyhzr2Nt8_22Le{u4I07E;|fZ3R5af&Pn4`7dwWe{#70$*Da;YBP^% z__8*H7>3{(4UeAx4UB!%0#rR}F+7q%d5=BQvd7+mXuk_V6hy^#V;JrBpA6N1hV{`% zX#Q8)f1LXNMy>KVe`_F(M~rm#QJ>-+QZQ%M8ncGldSR7|lLSJ_NFdB8M%n7sNGTAr zbb^iOZ?^!dHu718f1fvrizP2p?0BX1jJ!c>5SxKwj7oRIRTPP73JU)%?5t7qvNvVU zS$EQ$xa~;Z&2Vzu`ijwCbi1a8ZCU0~MZ{j7Zm&v(vratDAkpNDhhernXPqA1YJSYD z>Brkv=)(a!j>dn(*fI<+ z4?V!*>)mckHPZ-P7~eNS6{bvUI(WGJ`vU68O5C#u_=uMruJOyB*wS&nX3>eFg9*5K z$wPz&46u`igTkHZ>TgQrz0G(>@R49`A>$U-d7Y%aC!(vDm?;cq#1^6I=X=Au%M9ep zPcQGDbiT-k2gPvU{&SGO++i6f=Ib?a^xRS{jP%82Xx=*cAxd*Vd?y|7#7Ql0O|qKC zsG4EN`fF$31M7Fwr$9!3@$E$iLK1S+TuZ7N0T?4%1m?t?DBLKzo3Q1fnv5aR!0+o> zXzyINq3ztsy=NURDKU>r8EW}0Ym9kM=hatu0hjzq4S2jpxd2YXn%rAQi~+ZXyrVkT zJ#gnkds5M*(j0$W#pT^ZZTa-Fq@Tm(Q}W z6>p>(dyo=u6vMOas_5EC_jm4|Sb%D$ZIi4XcQi3oAIJYQ!&pU3FpYiQEQzW|FQoIi zgvSqGl*q$Le6}4(UcB2sY?QzkSX=;Ch|kvi2+=L|op5Z$5NkL%eXF&}jOk6yb~b6B zUrij}6(aGrS^)N8Hf@0ho#^c$ObB7n_A#FRvX7Ux;lJ4^d&*?qCR-&FZxl?(q#GV% z#H;996k^1iYqY4QHBg)r6xgT92o%I~jQ~hbn7Oq0R6XasDUuh%mw z0kvfVG~Bt}IAW~&hpqx50i6%Q7<5TADAsA6!x0aE&b==}4GExA5%I1>wg<}}64EGP z<3A-Fd~3m1A3GP!#PxV5Q$w!g#iBpJ*fCnR$f)-32}iJ6G>M!8g8WLAsUGCc*iDO0 z8*$J58bAYRT0MzN%ZBJ_aQ&wi(?a$Hq8bs*goBU1Fl(>Ga0m+b{8I57d0?x`aH}T6 z9E&UK_qd~k(yCWBtc)(C4@D!teA~Ciwls~1d~mYKpHU%uF}vP|EWb!J+^5_L*;-}! zlwG{4i3k_t)jzFnuuyNh2%wo*c}Fk(5grO#Ow}`OWv&&g;d`@~0dKw*Mg8!}t;nbz z{l*C7E4EUS(^t7I<@>M_lQJhJ+t!A&eDQMs#2XFmSv6O#Av(8JlQtR`05QQ+#Y5L3 zF0-5FTK6+k=ta%Sg}u!_`h>ee!H13ll>hjB?M9kiMQ@jq-R;|z-jhHom!|hCeWDP} zzz_@E(*im0J@xj@;j>7{lN~>Ca~E($Xv?J7n1k*4ycm%M4rdgdIWFaoZaYt$%8&OO zjUU|{6yq90Zn=q>sAjv1UdHItegtmg3@Iv{`q9D5)AbM2HaxfQwdi|;7J4zHfeOdG zmaTl(Oh(gAWS1*E|GbPN4FnXeCnxTijrJH1J_T}qd=qQ=HLRdx>z@*ma+aZ?Nc@jP zZm%2Ou;?Aek#;4lry{(7U$HD?238$JpyvHv+G=jiFh|Z&m6%!;vpB3hVjvBb+KOW&ZU2wd^kfQGc}ne;ynksZF-jebo2>=FG2xh* z8uz_6qp9)Z9XzfU+D3#}_FUi0vIo`^u8=GZ=H4-H zen80ikQf7}A`#LaSkpVyfjGZ$=8#_KtI3%8FYTe!D`Q)=D{TVf;4P<69COESv6U8> zk=@G<45>80*6gr~7wCjU#7RHGv@{y6IOaLZC#oO4wU~pGlSsoCFkyg)J`4|tM1GlC`C%0U_Rx*SdqVso+pEMK7|DLTdaFqi~ZMz9a`b*Hn zN6l-w59{xquJAU9+f4>gG*p5sBth&s?M=|@r-;k`#dVYP5ahkg1jlwwNJjymT3C}| z3{rsWYX!r|=j{F1uT3lrg~6^l=Ljh_!SnB~p^W~+3-~P{`mf+7qAMzk45>8@R7TXp zL6fx5ZW%jR#PFj@g=RwY%GL5)#QKN5dSBn5>oqk;PQ~{2BZ3D{ua%;wCqXXiuRy9% z4dM|v&9BoMI+>0CYmMU6MM44y!iShlz<+R zYuqFI8LqDMwWGXN$qM1{>$RGC6vcy%v3pk?jOp*y)6Fk*gP!uhY}}(up@H;&9*cry z7glyJx_yUk8{>0M7yGxQH#r$TUbv|O{Hc(mn5Yl_hMJS^NZeNQcTFA_e5)aH>I;qL zL?r`Hq6ig?SlL3WT_wd7`F3R!bZtr2*NQ|1wR_6Su;3rhM@ZoElv|8j_; zoTS%yrZR)azhap#U-I`tfnxCVQz7@>c?;GNz}#x=ts~$yrI~0XI4}(IQ(08T?In+g z>h`>oZT416toAe~2o>HjS0<7bekTcy^B%`A39U29!CoFNhs`KA6H6O+mUj8&=8)*r zoV$@0Au>sea5GUKbGeDwC)zUwM36jMeI-ieqgM>R|~7r{m4N3j|d zO9N*7zcIC_rx)03yZQT)?6etAhP;bwor@N0CdO{uVXA(h9R1ATVZ0$N-T}Zc286kK zNu@12&IY^Dd1)|wfUAQ|b5|QbznP2{F_AMWvpDdXJ$sp$fn!ZbD$i)qmUr(gWB;7-iIv;6f)p&cj^IfoR)wCAl}eI8nf7U_75@t!D%$;ex! zXG@ri7TIOunTvB_^eB{UUHUw<7A;cs$!Py(xd4vFV!W`{Q!+?I{&>yAll*K;F;`y- z;va5Cgqe-|#Xr~eQdy0?pc2d5Rla51_>72#(o7#f3^ z=yP*uoVa{D)WPxE1ggOZ{P4t;qpCFmP z1NLxH01VKdc{%0N989G5>52md{{rT9d#jlLxz{ALFL!iJF5u0<3}Q9r#S-gwBk`v# zgUf2CfYo^%t`^NB-rJ08RUtxTj}RsXOv_Mz|K7eRFibaJ+3LS!{|KQWc|= z6s7xhWx+FxZOsl)OuERkQX{+QeKtW|>VmMc5XZ-LnxH5TkBd zBDfXs2cmd(e3d*01i#&(nHL*(D>WH$EB(g2kT)z&b#x2Zf|~(Q?Sr^=T{SxEtRov*r56E_5qZx*{p|EBKC7>LK9g4ebU% zvAgjh5k_YtcJ+xL+Bi8xvXvS(f@=wty2}@vUbeVARNZl@OqMINem`3;B`4t+@X*2~ zKB?yDzILzgto)GCTX)xNJArr07UqxCEDXDl6p{_Qmn+nZ3v&BZGWxB|>l!o!g;n|- zF4;D^tmLiJhV!mkE_$OFpQm`_tcNd%HJ|=+%(EDUOtbVL-#h+jIZRwD z+%#_34HzMoZ4E7;?my^XPv6&Z8t=yd{JQFCKbbpC>M`Cm}2D421_QYdI$)9Fvb`M9y2<=ph3^l(u_@2fGNB zb$Ym<7|U7RKVt=4Bj}?UbI5Z-zlcgL)hHWhj)vI1$CEa3W12{rgjIs*7R>WW3^oKe z8LsC6!M?l02a4=nQz8`%o43f#~$I7X6WqsetKNv3lU?xgm=YPp1ISjX@DH*|gn95O??ErAO)xYTxHhw`* z;++(Mbz@p^zrRT8{b~7fOn!6$HsOD3)43FbP2M%%p!{poE?nzm-f>n`tHi_r+R$IB zd$Oh5l4)}SW^KvT<2~xkLUnMuEY(q*cDnD+E&gla)i#BB_*|UNvEXN` zw`U2vYW>nEkOweQI27i_TaKzLJh=X6l`=(3`NNKkZq!-K znSF(*NM|0pJp)XcODddRgn6zI%T95x9xM83D_4%L!awsZ_Wft-t*qw{ ztpD^Y@JpYc7p$5;5LaFdiGeZsbNcQUOg0oT^q=P%>wVn4O}y9pbc_XzXa#P^{=-`k z_WuH6ij9R?WpKg-cN2&sLz406LMf-k&xH;m-!)jPw7vsga~@!d`FQY8(DiN6oX+q4 z6~#eT^m{H~h!{h1z+3*l4;S+HkuPhiN$5daKgO=`^G1r>Lz>>y5MTF>=e8%m%)z?f zY)mj-U)?AakiBNU0i0DpQC1>TS^0gFMLe9PMOyAL7K%bwszUEY zdsHTS#fwAfFjikMtdcOSssv?}g|1YD-amzjxI2f6w2)~gzZ=QGqFvKbX!9s=>>q)i z{5veUcp}m~BP`>l0(Z0CTg?Zd{ULDA>x$K-tQM=#p}C9Eep5iG%auu1hptm~FNSTk zdXRKV&Vls=Up2SgpNoJQi9hsx~aIbK_Cbs%3YYLT@ajf%Aj zELev(L7YC{`E}_+eqYdYPXaDH6y_so2KG6cABHmcfKJ;7{4VqoXy)8Fws}VFvn!<* zlnu(_JTtvj?{~ygb@y-V5 zWQpP83|gV$xUS=HeqjrQ-w@4gcX;}c;p{9XRF&$p7A?hhsDt4jv?PA_um}o1Q*r@s<tmhnjI8LW)p%t8tfb0Vyo=$n4*-*z9sGoU zvGbC#_n}+7y*qaXJLNshPa!sCsZH(Iu+9j<)O^l>iz|4KL5`gsRnONwrC(N%`6Hw}{Pl=fV4 zGI7vD)mFq(*G!+S{*QwVlR(?pHTGe_&O5#EDYqgo^9S0%=B;#Y(&UvF)Y&2K>nhd2 zpA8?qOdEa5)y$R4BZwC>#DXUQ03rK0#Gt^l(sphg{ZRtf+I|raB@e4FT`#LUrLxE8 z-E1$l@UPlDF1O>|53vJ;gQ-f2?HLkPrjm~yQp_aQ;X#4UVr?}3&vquy^A;cOu2sN# z8vW)tR5#{Kz^b!v?Q6f`)xD}ZLS7AP+rPz{^TfpDeQrz9S@3#u`gf@lG*dT_${Aj- zs+g)Y)WZc(?chu62Z_%Q(Gp}?*~@v6caSa_2pc>pyxX8vbhp6jbOkH5WW%J5)r=^t zb%k8>*R;R|3VxR|1-Y5N7{S9n?Ua?ZCQUarYgS*$S`ZnjG=qK~4nw2OSoc8v-@a6sJ)~`b~(@ix>h)As(*at6GyfjP# zkfGaiGcPaXP3jC>?OE`H)ju9cGN5k(&31EsZ#^1#{J6<0PYt*RmW;Mp@5R&l|7eES z!A?_HTNjsIWOO3DC=Yq%ENhq%t0dlaA27S4vp>rgfOA&&h+u&mD4ph=ZcHca%cRbQ z;`0ZQrXPcjqoFE}k##1mD2EEd%Y@aZ52Djg7#wWPFhzlc?k!6_0kzCgNdUkNwpav+ z-uW!b@?)~J8C<=RKV~XfZI}oYy^|y&0-u~G8dVxM=_;{N>X%9Z)4D@;Tx(((ZbU z&P;cRBpHNt%*>##nfQSZ6C#}p57+!w8Jn{B5!65PuAh|*bhOAZ>KpF&=>%qnCWdd! zYi|5zLObUI88!Bs@~flw+0Y^0QqcOoE9*^Kgvj)ErNpn(`LHqHMe+s?i22$cT^1sw zO~U50J38r7?3!~x{IF8uUz4>z*YB`=hxaEQ4aECi+z6K~DXPoAJa~6c@1$6o@wZJG zQ6`LbPB}Z31eDb5HbHAA{T-y$>NzSH31I(dLYD`R&+R44F$ke!QDQ`FPPME_(7Y?q zYuq+CdSewEX(q0cZFcTQXq+V0y?c48|KWP+B0IkhEqOO{*6pMAlBeq8699XSQF57$ zWkK**`^W!F%=Rh=J6oMk28V^YROeFQUUZM^JokeLXKMrxM`m0^|t8^;MIL zs59LqCY`t7X`|+6suUKj%WPJyrHP!i0w4rifmK?a70!E7r4`-5Fm;|ySkNJ!n~|UA zr!0MQ!8q+=CA+r*1c7gpuYn%U{MXISPV`MG>(%;3z@R~C`#(V!Z}(;b z39Lnp7B&Myg+mGao5t@k<$BcYg3YI{9q(5m18qfbEO|CJbkv5|aQ%Ba3lLnS6M$3k z3jZUGhrE>O05T=`<{kXigeGqa0Q~Wio>$+Xe|s(?<*i=-Ws()~j6#4uSHfP}Y4V$0 zEaUG#SjWVzL2MtsLtL#ay7f24^fg^*CM?=2NpaV7rhfkfQh4V)zNn61@?)9{yAeKT z7OPcE)v27={^8S3so>RtJ~v1cPaiymx$BtNfuq{Zj;+r#s#XHVw1RFU9@*dM>pY84 z3kV}W_!E0gT7GLX-jD0XbU@o`YO^3P_U~^+EG40X!1DpA1=>|LU*9}Vz(|Fhfgi%3{xZe)!X?dG_XFp{7IRl1`AFYlUc_(a z#DFs9^btK@e4hC8mVMlvr}N0TyP zheF%8{CgBP+3{J&I_9V)K5l;ogKuY znf_?6M-ZY8si!)N-x?$RcWsyFWwx*S`htT&Ca!6uuyy6gOj^RQCV4ldi)Nz&Cn9G4 zO_oo(=ATpdUCl678QpO4E=6rqH%E<2kKKTQpYuDJ%57e$)f5rwky#csXi!Yj-ReS3 zSBb+FvoJ0OQj)8nYA`Jnq94EKvs**pF+Nc+W#_qDL2l=1M!!gU*48ZhWy05}An4?4 zkS`Z3htlYPrTW5UrTRW)f;OjGRXPeU@I-sp2GSYqAQB(`8HM#QITft~auvNy%c$(# zt`xu(K9ESsBk|42<};}m*yJ2vewqu~#Vj?gh+m;^EZDnpP22dVb{@z*jY4YNE6qFj zrEO?&71)Agtd2-Wj6y7Dy+8WRkNMD*ZE%;V zfUtpJ;YsbVZ$wOqZ8m%K1V6yLIBf!D(*fA`-~Be;D2+z0rQDs)l-|LsZN$ONJUjkK zp)9+-%<4?FF;=lQH22xrk$s;V2i(b~>w*rDRf?)6&p)`oaT)i>>h;0NlDXB$*DVB5 zUUsENyE*t-9FWF@(wB-M2iG3|+WQvegP4ef`w-ZI8I4qd7O3wQlLRFYwOh^n;ha+z z%0?Drb_OpTmix4)yK!Hv{K{R#92?++%RNJE5R>lIP(PuFCe4yAeg?fRk_vgeCRx1Q znPBaaw|rjJcL6Qct|F|vhJShcm_?u^t(0&MkrVzFP#0VT3t_ms^U@y#y+b?Y7?1e9 zYBhy$kb=6ryvD#eI;YmYUEjYG?dsvR{#{PwP$F`>Ul7K!yppa}15QA#E8NUI7 zXYL4qtc8u(@@{mK6~6DP?p}39VnZ+Zo|x8kd3-N_KJ=Gm<%Hlm2}+pHj;2n8ykm!& zmiSX{m$Urw7f$p#4s(q)e3NrNf7r}u?m5ho%}WYmkVT!X5$m4a2+l4X(%gO|=<5HX zrtI9Z0zBaK{T)ho!0PLd?j9pNS40X0?@|pz?5Jc$S(4DCY$t+jIk-E}t(`5RD;KOp zFS3d zoZOw$TD`8_@S>gJGj(avNSp4;y)#Syc{c|i#A3$dN^+4lHats<>;S9m(H}n`gMfg) zA8%9@-t1)YwG=WT%%DWTYb;upr>ne*?F-l(frezANva?E0dtTN%}P1#QJ|J&}8J zU>f6Lf_6PRxda<606D8c8)w1-sqO^!Zcps7g-6RXVrsW9YV@5VaAqcEtPYgzJwa3g z?P$E3rF_QaioGW*_CJEhr}+gAVjQfJ!+#$KwU7y^t-Q)uw6dXUqPcr;cz?0Nxcmm) zw`{fhEMR5Kza+dV4Yzh8Ft91D6|yMsK1Z;5d<+i4SV5MBH=P-ot-PRF+&yMo95QA^ z9UAW~TtH?7(%v-v-Rl#ekqB}ax||f~BDBvi!ELI&niRm9bX*saSZVo9voiD$*XjU6 z-84muE=sR_HP%~cX+C&F8-@f*B`47$*1puxhgJELy-zEd9OXboPnVC3&W*uQ3v4HQ z6(|mYJ;twFkd897JFK0JVBmcBlwrV&lMi1JE&*~Ms+w!smWoE|tM;ooQX$hAS6e5j zl9BG@d2+jjrzKg?d%iU#qHWW{0Estn((NC}Yp1LQ;`VxFq@4*B>O(ahBIpF)ZqxApjVLS3)*mjiOqVGrP zZ9>+-S}r>n`=#MGqnrbO#K0Dlh{Ms)LdBG%s8WOn;9p1Xq#-v8Fb(OZfu(w?;G1@ z#$j{Y!2R!Sn;C!Xp>4KaVB2gmu+3vVu+8-H@F%CC-JCg3+mxEvW@Q()S@{FlW_}NC z6S%;(8EashlpfmV3CIzA=V_aMCbo&~!Zxwr-!{|#(L>u*U0B;pKcsJ)>91*RBikf6 zuKFC=A{F}n!v=EUw@LB4LR*kekZT*)nZs|B?3L6Av`qB2#c=PLTQ7H>{)B-%zvSkbPwV5%Z%(eDuWH^ z7*>5&$CfSwTPE^x5R?)A*^Iu$g7(vnp#2Sp&(iGhS(_X_+v#!D-(mST##Ns|zMIEY zpG7)Npyx>anc=@7jxq1kPS9AURg7iC_aJCbE84_t{6Ax()8*)FlW8X7|7l%}|EG0l z{EzFf9VT)aj{mt$Al`Jg$+VaCZ8Gge?buZL*2MH>RdEqIQLzg2{z(^l-%5J_Z_;}f zeP52g-Ly=+3pMJUoP?9S0lx>OkHcdb*^NQ`8f;^B2ez?_g!>q_GvxD~1UGvpy;^sT zEZVd|x1CKZF|p~2E^NA@J2q`FZD-SNFtaH>bJnrx90QxW5iUQc#y$ysY6HVHzSBBP zZ2M6cw!N5adqlJ;vdPr)@JCNU|L&J;;)vJ;=)W^YY17@0ebf4z*d(qCo5X$p*f;ev zQ=7y^e}UJ26o}!|C85LTwuH0Y}6-7c9~Kh4w;Sr4Pw|-lkxx5F2?^;yEFdp zB8E*h9RC~lOH+p!*kypWUy6=lQ|o&k!=`j-V_0xf^;sPoEQ8#j*2o5px;B{dk+BV? zyk~9$xZe#MG@9CA%1fp;xI-^ro3dBm22*x(8{DDhYkVxg{I({@eH)=|fbVm9nE&e7 zA=HH(enoa@6L|v8X9Bz#-y31lHY^ac5)ABev3}c_@-q{=ly+g4(k{mb8EhgSAMpK_ zHQNqwAD!|5uFJu1h0(hWla&1r>i5E=@8*n?zvH@D`KGNO_f)mQeSxn#cFbVI&hI(J zlr#f-PtdkG1G~A%ZvPYns|CA6nz0~v;*&hZ}fi`8Q6%lp3+zfI$ZmmBd7bW&wqMB8xk zMiU$UvI`sjvK!C4TFv9oJWAr)}59n|IS|s&(|v-~Vx*dVkbJ z@9VnI`??=M?>Rlx`;ZNBHPt_m-mf>%`)sY=kBsT0_etg95B>=KYv}yqPTG|wdLP|| z-ba7`xRVxhesQO!T8TR~HA>v6`K=OnYM%Sy;?AUF`gWM~vDOZ!_3dyo#GUhu|C8P{ zw!@@Gb34HO?`?-kJN{p2hxG<_@OQF9StmP8ED!&UfB)zF;?Sh!CU#iTg&mfB|2Q;h zX3yf#q;Gz>I5a86K<}eE>3x!}-XDiJWa$6sKRSBvW1@F^7kamMNAFm#vEC2HN2I#fbr? z>{VS-q}{7p3-LgFV-|kfrQeb7*wX%@MCtv{4j9{~LfzMDz9ruazX6Hgqkmxr?)RCP zDDN+#eTW-1=YZz=_rLk%ppSeNWqAZ*!!-QfAJBJH(f988JL-Y9qPr!>@I4*Y2J2@2 zZUN(wb&sZ%bC%FUMAMI5#Z z@U=K7)3JBtK^`B`->6+AYT8ARXv~%B9)UE}y6bg#_SI3jS)J`xUa4cZ7P8wVCU#2_ z_as^&QMVLtnkn9lHK8>|q7|#qy3eIUtBz=0W8A2iJC{F~qLx4CF({u#&{O4!A>UYIz(Wo3u*Zal-w7V1b{NC^_{3L& znl@NVIvwAchx;9}PA38WzL6gXuzze>9Yh~Y)b&s0-XMvG#AqH~&C>8tLwcAg`333j ztOxsWgShXaa{r^ldyRqqwkmDaazxl&;}7p39O(d!V^~(f@uf;Q2Mv6wuCwjWxlwLv z7a2Nj(n&IGLm8BMAJ}S8?=KAMU9VFwzBkvY<8ujAUtwpRm3w5JZI7!Sw}*f4!j(UW zF&K}r_zj8KkTYI=8{QAZRc}E!-Um4DZ+F7IoA92sY37YnfiAvt_P|Bufqik+1F$W& zEpjI*-^6ga-1e(>;J$I;Bea$X`m9{>EG=Ot)NgHk@Tw|$4|3}w+?#&YtDkvtTkzYa zo0UE6!?!gm?^UUbb2Uv$2I)e`yr2NGULgXb~8+p594 zNrM-s;Juol!JDm5?_jM4Z;AoE4h>$aKD}368obd4ctsk#Bm@2&8oYt}c=c`#p2I*6 zO}!J&8PL<%W5RKLdaqPz@V?N;JD8!t3mM>P>^q@NAFsYfgZGvJy;B;z1_OFp{^|_y zwDfjs@M1|XSsJ{Z26!6(oA9JQUMG304Dd95I$^yAFUG)b_Zi@&Y4C~->eb@q>*F2F z*WfMI$9uI!gSWr{Ph0QxG9Jb_#8ciGGGUfHwpL}V_iJcO*4IV7rY%kwr;m5APJ?%u z0iM=JMi}5}>y6jPdsQ>HG9k_YPZI;ipEbbK#Io_<82CuD2JiFeciim9c`tW`(`RoO zgWtg8Imp&=%s#$6e8jsu=A$ai5%8Ot)}Z^^4bF=#8{+EUmfyW^b+hq&-K)3$h}sXc z0{))`}Yax@kMn14St=-VHsqxjd&>xF360T0aIR0rFHy-e+5~n5b_{YD| z$aNM_atW42xr-h0)|5KM)}P|q7|f-5pH6?Fg1={G!rR90ju{`2-W`*HeDUw7!aZ#B zoB8{Sl({Rw-K0Nfg>7nlf!wA@HfXyKq)4*mVOeKkxCZsC(V5m4@09f*;YGzs<^49} zGcn)6Z#bgO2=AB<-gSgmiS>hCey)6fUhn-s<0J3?aTJFC#LKhMGcD?SbFyfjEwwz{ zR=Ydq7?8pG?4!I} z`TnL4zj2ow{f&;8&BH*JFTK?#LGQN4yZrb~J$$EaD*3}ud>18+S83ibW5>$j zhXni*d>^?1trg;)L~D&q>k^=~Jt@b9^O1m`-%@JGSGKq((W;VZT?VvvChbVr850}` z_zPP~4fS=4xF^x7k!g(qTDy`yaqfx<4g&n^TS|jQv}TEW60M+2>vEt~lYEJzCMGx- z@Taz{GSt`A;+{mSUHEDASUQI(@jvEA{9W!)My92~86|Kex*hs-mz<(9BaP`saE3^9 ztqR@y90qhds7zlIx&p_hL)WFHi_gE;CG2Q^E+%M&GILs1b*76jxR<^Tze@r4nmwOZ zV%a9or~Y9`yR7G>ReK=Pz6zC4YcZNbghwrm<;CnC--t4XZ zaNBEqp3y4t5nQM6acN7DpJ82y+vGXwL>gERmWTUEcwZx1mVu3Fjy9%`iH+;TGdRGr z=*fxv3pr6{EQ|6YUnno~wNV+%TZL?hLvq!kT*$Mv!T$LMqOUKT{UaUO@(pC8c_;fZ z6WMB1+3bJ60I~%n*_yhL?VyfqYYb$g=Uw(cn8>zOl5NKYkgZCR?a?k|TdN~mm4R&Z zyvkl|B3q>-TmA)*%`eH8)rD*sI|^!&{}-b6N!B-@w^AX}Cs+kh@)i_?+K zsGq0jMz#|svSp~U*}fFAp*%?E3y=}zK^ajVXCJhq{s5 z8qu>7J)Bz~!k9L&&rYRhpHby2mGaiJqI?sSje&CO5?(Eu3}+bo zS?eyEp5MCI&2a37a~nACA=(Jh@e`e+I(+c&w{!Uycanb%m3vo~ze$llfHV~O&u+!C za@(ZxMO6MZoqB5{dhc9sK9wufDOYDw&PV04<#JrliDz4Y=VP1(t-)wr>}P5`ux6n> zl{oPXe-A$wuq@T*q57t4{bMTXCh=gxfr}n+B0i4M@q0&``B*=SXD87} z5j4<#NTYQTpA#60cCNc<2F{TsQS3>gvJNUcL@Jvsm%Rqc?j3nBRay7L%O+A;MrEx! zI^G(2e!9r7(eX2lT21{P zlltq3hF6b97xmXt+4)l04xRdaCiT}4js1Ewx~M-uWp^6)FWWny{`{%*4E?}G_XUv- zw!ugnhB}BIwIRzdjQc!JuP72HJM%$Ae{&jZjA;Z!yINx0e{&js6B?qe-DsSP za2k~+G(@{glW1u2BcySr#e{}vi4PD;4}dZc)Y1I=ARg~u=>WPN>iqbRw(|Kj^k>DdL3cY) z<|M%<&BHL@)phzV&TE{Qs|7x5BJ)9IxK{bcds~#fqHe&u44*||4vclj^EJ`stSZsv z$GThY3ObRS#%{pxnpr<$2l#vXe>51M z)A04bQ+?Q%*>Ft*$|Kd`(bRDS>p=SaTgsW?f8+P9XdOyQ)ZBMw_zS4>O0093@_fju z@ROc`{9xV4i`#z1*Ds{|qMo0C?pvIN;SZ4)g|CD8aQ!}A!~J@^e?-0iDqjCpy?(`o z-&s)cU-iNDn^O5xaD7O+kJqnD^*QjpPP7JxRV4Ua4R;0cJIzl8Vf;dMRKoQ>i6%a; z*&|)!^P}C;bp~8NCtdsDdY5!v2iM!B>kwT3rzDdTuAh{y)8KlubX^438>H(1T>nbC zZieeer0Wj2UN7kobygu=d*J#3=^EwzsdQZn*Q+I+VfkW7r)%K4K)SAh>$}zKgInQx zsdOLZUn0q$3fGGze)0aDQhg}@?Gin#{}zcJ%6pS^eGIOzm+(=abEIpm?^@{^<)0y4 zqx@5(Ym|SYbdB^UNc?5N^;qc|%U>Z~2jP0Oq)+s@QPMTaH&VJr`iYW$(5Ht=@*(|! z5r((oDD1|BozXJpL1SD9 zA;v96T=D!GpYylibN&X_+rKM-_s1$_#e9N~_uCj3@cslhv!gtbeLGvYiCJtH0wu%?Hx&Oc6rV{DPl?q=8QvAc(#T8!_bMo%)SsV$DMWmP5Ed5KK;GD0;M;O>PR_I9hfb!h<@?W%gT^VqG1kPD-u7tA(&ghlx!D06lrpj|Xo@ip8#j&9)J z*}0;Du0I5xCsjFJRTWm3tD$Vi5y(fJ`+)!6jsBPbl;7ucS?ioG+fFzd$+l2Os1@oK z^>EvIYn}&Qdez{42@m-acs01L@{qgNu4tV04eFRSVHe;)9$!y+-SpOI>SPy}ykE8!e>k%I5%gAJ30`_)XEk?~(o@S61U)Y(xcfk7z9NIU5(b zM*u7X>Q87a;=etO_TZ34mwQM9oGV!Q=l+1tnwG)he;*UD9AD%rvNriEp-uC4xoLWU zed<}}1iPMu_L(ny5%bG!jec5V?H_?<_r-=B{%8He!M{IzF2-kngRi9pc@{3^YtFfE zkUZ8uF$dmj2At-Fqw)S=xc@xOAtwO8{62oWu*vfo&c_W>{6Se;+vu(N5b%#Qmb%=E ze@AlKgqJ3{SUczebd=xbtvPf!ZpWL7e_uWd?0RG)eajbo#KL7sybpXJmwyx8mM;HFZA&S+dTnVB$cJsI_nG=h z+Z9{#HU)j-RoJe8_qUPOriu8??-Zo(M4kozz;}Y;+bM4e-a+?=k?#$0J5B-*ZBTD2 zw2gV~-W?~QedI%X;qyjt??@}?g4T`<0lz#tguXe8d-0;z9i>dGQr0MqS9EcC3&{UA z=oj6;?#(}T$d?3wzETjKe)l_@?%@z>*+j8 z+co(D|8`yHeK9_Kj*<+zT7@=%YiGN%UkSfglnA=^fIaMZAN6d&%&C9tMo5QU)H)fP}#CLfU#~_Enn+2<^!?j2-m%n{4;mQe3Y=2_t!4lMunGK ztKzCZ6#hrg=+XDCjQAd;DOi6;Y#_4llfI`2^<0kM4j93r*NI_Wqj$%Ievfo%uSu{< zTK5mR(9}B05hR=r4bFrE>Yf7&>W4o|!1b@(X1RXt{x}@xZlp5GzUACX>E6f#>b<04 zyk2Gh2dAyftw-%&gEH}gPs*Qy+VxjfHycEL;*#MIZ~EZ=SjsCR`wdjv`8aRFwy4*w zJU7Tb#`kL~-%pIxh2Ip!vi!X?ik?T8hu?Y&@`TyAj+Czp3~`LDF6Bbj({AWp+# zmlOIU8-BwR_bY>++=_l8<(LY7X80uH4&&>IU8y+k#(WUR-SMa^o)b0zK6T*3> z_%0^B*Asbr7TQ}4-&3&|`c99pS#3wvC((wu54!PA9_NF~Je!NYy>6L{bvN|)1!#Z& zk03vdMIWq)b=lUYD!E_<^Nn1aT4aac_NOoLTPose%GbsEst(v{4jveQ-|u#_3eZU- zw9`!!d7hfI>55wD^L@zkD^+p6gvQ0bB5Tn9bN?=`r^<#{-jFSF{=M@%mHrZP zA0NutIwxRn06A(g_X+U#S|^D77I@kEFy^=!e#>Dmv$Zew)oteObj)v&-ex8DD&Le2 zxE`)ch`Y}g@p&m+lZiPo(Dn!1$qAX^e<4jOmw;oJ!;5`Y;9oqR;hy^gWCI%4xFTzc z(FZcvR}BzT)cd|Q;(l~F#gA$2c{0*151%`W_mR$o4Avj%*pxXO3yv|W5@*!m7z6A* zS&Uf}KN?-GIB{-i)06t04#RGRs=9U8^U^KJ~g`%rvGFdB!z!a(U3>*H|9?0_81X-m2yOhOY+S%h#y9lP?*^EE{=T9euPa)|Y0a zbC5N_{RZpeK4yV&nf+4XXBEyIMtk$EVsAdm)4Vv~Xj<&cN4XFW`Fjt1XD74+jQ2bH z)_1glyq}i2t(^WshVp(1vZG#JM47P+mR}ELkj8pPxC3c7L74_9i|^unJTN>3@PGSG zT9E4X<)a?49MaV2b2h!l?>9)F)6(z=V`~fYhm z+ZTMk4)G8laMKBQjUKK8SUhJ(|&P zo`HU0Zg>HWX~dWk2-qfMhEE|L@`XA_+E7O; z&Q$|19Y~wUUp@~yUChg-ig{VUNyT=gEyB7Qa=f7(Er*|m2z3dFx;I}QSmHt-3`J*QvR&@Lr@|HiU~I1lUBxKotWj z#%o4F1da+-Y*8sQAsLcX$c(uGwwh@OG3q%z@ls2BdhB>9;rRA~l_Js}8Pgb3&gqeQ zwBA~q*0$Q)PwI~%QpmjD?^7MgvmWJzkj!SL2b{?a70mK|bDnK60f6$Zftm z)qd;}EA=g0V#aI&dd-h^Q{BmI|VkS2CzO>KV`%>T9oO8u~p6RncAahXovs<}# z#%~UG_(M*fDcpB<@4J1R59to^ovY7vfPZ|RI3Mz&Y)$H&DnIAR+LOuq4+VQ)vc84Q z@47hq68BIJ?8gKCS$q%YbpwDHEx)mF>WxVue=On{MiNiTr&7{4cjA+<|V6M;%|jxUJe}K z(V0hd9ACODq~(U~L+R^|v!A7}wCXC{=jFh?47h);eB=x4bK>mY*C6}1paZ|a80$6I z&kJI{kUHV*eTzKn3-T>ov)(8TwI~p&z5z*TUmfcd+kVKa=z^#wQs^ zHgjA`A0Wn18S~em9sFW`Gzu+KBwlRugU`xJ9AfWJfE!+EaMc-i~-J3LQpTl?ziYHYZ= z5B2Q%8M(e-&C{X1yEwn|nBV&L{8@#Zs~K1uFb=hZ`~xka-F%;4&M&6+c+xIPP~NTP z9V;z(fAH~lpXC@Y`1pq?@9A#|#n1-d?<>Xq8vI`0<28$At|Z!Dcf2JO;@lg`ci{dO z&I>1IhmdoIkSCn^DL&ipef$@=ukSx66z3c&+nNO)#!Joaq0c1zLm0CTiE--emxp+c zgv7V6(+Ii1r?+-u>?h7Xpj|@OCM`26cgcKH$fAF3sGfaFL}R6B^M2{etCG-%>)?A> zzT;4NZ2BOse_R_{^ZT_So*7jl^=kHKURiETKhzp4{U-W$s5LNU0Oj`@i75kX5>v_& ziO0oy%i2(Mz(`E(Hj;lp&gh3o1wRtI-*CZ)EhcWXxn^KZthC=h z#Qe}nAItp={WoI_<&P6K7GrSd(Cq=4FF%o(?hY8A;h77R3&*{bJI1{AmVBN*FY5d? z=-_;%qW!l*ma}71l|Op!3FNEjU;Thuf3fx|r{vxmDBUG;qcg9u_=H^iS@MXy>hV6F ze5mB#17E%jxfkD^6fx(_G5e*CO+cHo_*{?uzNnbjLB0l?DEpQEz9{MrSaa=rgnphm zPm|5PY-2#kCNZ5nABrZ(`yHh7m1T+PN7f3R`-_^RFC7p(O_V|=R}gj(&sh8|TA6(E zUPoYx+B4$s|4hQ!58fhf`O&v%pBbAg(FK1Yf=|9S}h!@qj`{%Qhthky0#mpW(fEz-vP zLiVfdN16<-AzfdZS5e8bFI}>`68)}LbBIg!iGAdczstFpFIB{i*TMgnforcj1l=o3 z_Q?0|4LP5B=j&1@%igf&Q=wPl{n-IG=M#pe_?8))3OuG`zqkFlSZ}DfIABD)hI`ic z;d8g27j<>{f4Qsctc0t7O#);7gc$Q@;UD};S-r-;JM-}G3Y~u{r!oZ1;!Kh|wY;tD ze4VeCqR#%ApJ!ZJ%>8ldp8Eo-c;D%tRSy5S>rLn&a*ooUdLMsF%{60OU)Iy(4ppi- zacO%ccfJSs1KK*rKN0@=S}~_Sfwm4A`a$1p#F7cfm0m&L#GV$5CbY?Y4Zmi)_|3J8 zU#j2Szw);F&Akn8so$jkb@iM3eqL3-xnJXD^*g}*Km0BAsLyFJ@0 zdR(#YxTCBt`59B89#PjF8TZ!pAJsLMqx|DuTXMkb z^FKFyM2%NwwI^R(fH?hnd-BB3lr4-R|38>#PIV3hJV%;Le_tW{w*qpc9MT?W0H zjr`98J&z*)3rQV5^A6^6YOTSLYYlhR>uU{aeAO+_Z8ApZK4Z;rvrLY&Ok)AEm9LvOc4{zfI2PI1_=hMLrOeeH!q`ee}s4Ml!jr zGK5$VaCR8T1KYU17cdY@jQ%O6?;!ql7y*|BAM_9T2JkNyPZVsg3%L8y7Wcley?Mv0 z-ep_c%j5nI;ND&l_k%v8(>RdaUKxjt#vGkS+;R7oCmf_p$gg6EdH=!GeDliW8>F$z zI#U$o?01I;y$;QjV|4mwn!<O5hr}hQO0NR?eiAjI5y`vp8n0E6VLc7BgsFAyvf7+ zIC1=(H1Yc@3de2Qde1ZDRj1-Td22lfpS*7$_YJHOXVlKZ^Lw5RM;S+cpq&vBIM%%D zJ70yrR%6W)wJ&HY+7UT}{yo0qvM$$lr>VLQRkt&v?kcoX_LcXHV$BA|!`7`i5wZ8W z!>EaIJtVf%aL%iz%_7fV6Y}vKWdREr-a~6bTyyi!JJ$Xo>jJNsU+M914~pS))+JA< z+~JF)Mdgkk5~kAw8fLa9U-&<;!~YDp%?HKa1o)y3uQ``9$&x*xLEV=3x=ex@x>g4iNG|$ zOVyu(DO09Uex3gKn!Vx-X4B{w`)Ov+;XJ^eHoY#2PF595R-0{89LlG3~4J3}f2U4xatkw=^K=DqvqgTW9g( zL!^)UnU@#uhx4~Z&Y~K)Y^v?+x8T7a$J+uC*(X+7A ziSa)AvfBt0@0k{cEMb{+vG2V0-F=wX{ zaEf&-ufg>zCv@Y{Lu-b7lu4|&Jqg?XXY!NlM&xPXi(-F0^ljGLhd?LwfwHAs` zR3#tw&vJt2UPap@7SD?qPsDRGpB47%6tTmB_I=X!XFjdL$3m}upGlYVaQn|lSBiGT zancC7%Cy{t{e2Ynw*$Fi(=7O;c&WLJXRGwBHGR&(z&9;_F3!dB)`Vi+A!kv@SRdPI z9xkpou88fdYDaG1hTn1nHpN#D`S?w9kH;LpXWW5f+ZI9A7+W3%9orWrn47!G>Ww<# zgDMRt=bb1!$`QKbqi!HROh2|J?jH!6(C3(|EabS8F>o*#LLQrN7ls_Su>S*5jGd!H z#li;sAy@xq}S~p#I!`(9b@;?G3qOj}I~4zsUZwU$LDrhc9Go>NEo-xJMrXCFLPwGkJ>V$~ypu zy_Ue=`v*4T-j6&lI^^3kCGI*Bji=~!Mv_0>XK??J`C*T@roJ#)^$O{>@?5}wN4ScK z|4NxyWwH2yB>H>v9_ZPzAmd6^G65fre`Yp5!494wuSk12l?9hO5g+xH?S3g&ft@;R`rBO~cWHSOR)Z(*N}!-fU;=g}uYy_~f3D0Aw0cG7Uhc zuED3~8$Mg6#&4udLw@k0Sgfm?G0+g2Sy}IRsuR5F@W)+!pdGf&T+QDHyC(0%d0OCG zdvbUVab(k3@bV_|2X%$*AeNUh$2-<$?_ofHXZk_~Qv|=fMoB;T#hBa${(vqapZ;h- zv<*DB9obxUOxQ`{%3fiQvMmSn`+UG@L&cOm?BqP&lTUk%&_#PaiITnJ63*Dp1odLx zUQc{EXyvWpT)g9fwxYzk35A*!F*kgtRIhYf17{0t_6=-lA-CVN@zt?~c2Xxwr`!(#_yqAnW zvo9%{L0<>z?}e;Mb8*NKkvZ9n`^DZGzd5F_EY*MVI;hS$yFu)QShSnIW#??T;>YuAmXvZ`J(I2*yH9* z@VJ0up}WtoK+bPo++_my{2uPX;#{qZKAL)dG>Easxa5hwa}p)!dvOW;+qR0sRnCFF zZtf{z{Nz2_c8fg`L9?9ugzv?_XSQD8IEEP1G1Vx&Z%d0K_Qga2Z1@j|y>7NmnR4v4 z?Q^w`SU1MF0p|m-)8V~{2VW@?UH(<05Ef}n43o2#qTo2EnK;8p1m ze(J2Gjr8yy{>HI)eggNy_Z&SNW7%Wv|3NyPA71fqB6jfkoe5`2-SAHOthY(~2Vm5fr=>I&iX?mQ~V;t?a?87V8lQ*^<4liT8 z01u482x z1s=M{OU987|BwT+@(r{ZF2?h+!PsQPV_!G??tK-zT_R_h3*YMq6bv#ZAeO;~o$OE1 zGG`BCTIZC6^Iq=vgN_bDhX!vC6(77EzW;W!n7H_E-(eMV_ju|5LXQ46#Q3(D!)min zwRtz%Jcu?s;dkzyYq*#Xv0dt6?4AI}{AVyX>Y5O6p-tz2XfvK_6a6eEt|MsAA36C$ z>O_0;M77)tFnkO3qCI(XX)4at4fjY{)U2X^??XK3XFL$T8GZusfckS7Ig4|^v6=Qa zxQ6Ff#C`WV3>RWb0sQDs?{#wRCyqSnz;Tv~dl_?_R?OkE17bg3qM$5fLV|g#_vi#- zd51Anacpx<&tNoQ2t9+|S4NVT8H~C2N&Y(a;l9HW z@*`gQ)1dz`@-vM}U$8aiGq zboNpD_Tj69?`Rt;J_@@6U9LUw8*Gzp^+P9+j|#tgAI3MaM?>Jd(|;ryDCvZ+I4atS z3!7#;u;l{y4f+hD(;IMhO-Z=AmHpCRid+`9OaI}IoOqRf6yu-bw_zjn#o+aP6?fe8 zBFRrE+bS-PB+L1`%ad?1-=oaPJLYy>7&mnIhQRB9n`^&a$k)4Zk3PGRGrIego{L

ZkII}5@!GL{fz0WUBRILwbNk#? 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 diff --git a/lib/native/sunos-x86.jar b/lib/native/sunos-x86.jar index 6716399ab65ff2aa137fbe6021402a820a487975..2263d1ee296cadcb782e304c1c5bb8e0913c6366 100755 GIT binary patch literal 48041 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 F`afE91IYjY literal 508 zcmWIWW@Zs#-~hr4p0VZ(NPv@pg~8V~#8KDN&rSc|DFy~+h5&DN4v-2asImZ@nni#r z;F^6M{XE@VgG2Ou-9G!CIql=Et9OytTUYDcne&^246YbIcv__A<*VcAd$DvC3+IfN zl1HQ^v@=+yKhyk?rY8PWJX~!0l4oMt70*;(XMQUBSi}f+$f0kh{q8_(Kp5eW#c00Z z2Fm(}hQ#~3#k)9$xN@I7p%dnD`iy5N!=;}~Rk?mh)a0sMxl;2em+DV0 z&y`%RD?OLav{a1&+q9svdYd8891srhW@Hj!Kn*ciaDYM#6~Kc46n^Mhkv#wkF9fg! pGT~a0LJ!#lkVlan2J$EZ90M|uydB`p$_A2T2EuJX+JF(n0{}1IYw-X8 From 18ee9228468eed4dabb111c881040beedee77e24 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Mon, 30 Apr 2018 21:52:48 +0200 Subject: [PATCH 08/11] DLLCallback needs to export DLL_FPTRS to native build --- src/com/sun/jna/win32/DLLCallback.java | 1 + 1 file changed, 1 insertion(+) diff --git a/src/com/sun/jna/win32/DLLCallback.java b/src/com/sun/jna/win32/DLLCallback.java index 9daf909bc5..c39269efbb 100644 --- a/src/com/sun/jna/win32/DLLCallback.java +++ b/src/com/sun/jna/win32/DLLCallback.java @@ -33,5 +33,6 @@ */ public interface DLLCallback extends Callback { /** Total number of DLL callbacks available for allocation. */ + @java.lang.annotation.Native int DLL_FPTRS = 16; } From 164000f1a90539597b81bc035c47ddbfc672a297 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Mon, 30 Apr 2018 22:17:38 +0200 Subject: [PATCH 09/11] Cleanup 'lastError' state before test and remove undocumented checks This explicitly cleans the lastError state before running the unittests and removes the check for the last error where the MSDN documentation does not document, that the error state might be checked. --- .../com/sun/jna/platform/win32/User32Test.java | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) diff --git a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java index a124243e55..7069d97c1c 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java @@ -49,6 +49,7 @@ import com.sun.jna.platform.win32.WinUser.MONITORENUMPROC; import com.sun.jna.platform.win32.WinUser.MONITORINFO; import com.sun.jna.platform.win32.WinUser.MONITORINFOEX; +import org.junit.Before; /** * @author dblock[at]dblock[dot]org @@ -58,7 +59,12 @@ public class User32Test extends AbstractWin32TestSupport { public static void main(String[] args) { JUnitCore.runClasses(User32Test.class); } - + + @Before + public void setUp() { + Native.setLastError(0); + } + /** * Iterates over all currently available Desktop windows and searches for * the window with the associated process whose full PE file path ends with @@ -339,7 +345,6 @@ public void testIsWindowEnabled() { public void testIsWindow() { boolean iwResult = User32.INSTANCE.IsWindow(null); assertFalse("IsWindow result should be false", iwResult); - assertEquals("GetLastError should be ERROR_SUCCESS.", WinError.ERROR_SUCCESS, Native.getLastError()); } @Test @@ -356,7 +361,6 @@ public void testGetAncestor() { HWND result = User32.INSTANCE.GetAncestor(desktopWindow, WinUser.GA_PARENT); assertNull("GetAncestor result should be null", result); - assertEquals("GetLastError should be ERROR_SUCCESS.", WinError.ERROR_SUCCESS, Native.getLastError()); } @Test @@ -414,10 +418,8 @@ public void testGetClassLong() { @Test public void testGetActiveWindow() { - HWND result = User32.INSTANCE.GetActiveWindow(); - assertNull("GetActiveWindow result should be null", result); - assertEquals("GetLastError should be ERROR_SUCCESS.", WinError.ERROR_SUCCESS, Native.getLastError()); + assertNull("GetActiveWindow result should be null (there is no active window)", result); } @Test From db667072752774fcff8fa8aa96156abfa4911b2a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Tue, 1 May 2018 09:08:46 +0200 Subject: [PATCH 10/11] Fix W32Service test The classloader structure of java was changed with JDK 9. The requirement for this case is, that the locations for the JNA and JNA platform jars can be determined. Instead of relying on the classloader, use the ProtectionDomain as basis. --- .../jna/platform/win32/Win32ServiceDemo.java | 37 +++++++++---------- 1 file changed, 18 insertions(+), 19 deletions(-) diff --git a/contrib/platform/test/com/sun/jna/platform/win32/Win32ServiceDemo.java b/contrib/platform/test/com/sun/jna/platform/win32/Win32ServiceDemo.java index 551ad1f98e..e06b0aa94d 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/Win32ServiceDemo.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/Win32ServiceDemo.java @@ -22,6 +22,7 @@ */ package com.sun.jna.platform.win32; +import com.sun.jna.Native; import com.sun.jna.Pointer; import com.sun.jna.platform.win32.Winsvc.HandlerEx; import com.sun.jna.platform.win32.Winsvc.SC_HANDLE; @@ -33,7 +34,7 @@ import java.io.File; import java.net.URISyntaxException; import java.net.URL; -import java.net.URLClassLoader; +import java.security.ProtectionDomain; import java.util.HashSet; import java.util.Set; import java.util.logging.Level; @@ -100,29 +101,27 @@ public static boolean install() { // a) an URLClassLoader // b) holds all relevant dependencies String invocation; - ClassLoader cl = W32ServiceTest.class.getClassLoader(); - if (cl instanceof URLClassLoader) { - StringBuilder sb = new StringBuilder(); - for (URL u : ((URLClassLoader) cl).getURLs()) { - if ("file".equals(u.getProtocol())) { - try { - File f = new File(u.toURI()); - if (SUFFIXES.contains(f.getName())) { - if (sb.length() != 0) { - sb.append(";"); - } - sb.append(f.getAbsolutePath()); + StringBuilder sb = new StringBuilder(); + for(Class c : new Class[]{W32ServiceTest.class,Native.class,W32Service.class}) { + ProtectionDomain pd = c.getProtectionDomain(); + URL u = pd.getCodeSource().getLocation(); + + if ("file".equals(u.getProtocol())) { + try { + File f = new File(u.toURI()); + if (SUFFIXES.contains(f.getName())) { + if (sb.length() != 0) { + sb.append(";"); } - } catch (URISyntaxException ex) { - Logger.getLogger(W32ServiceTest.class.getName()).log(Level.SEVERE, null, ex); + sb.append(f.getAbsolutePath()); } + } catch (URISyntaxException ex) { + Logger.getLogger(W32ServiceTest.class.getName()).log(Level.SEVERE, null, ex); } } - invocation = String.format("java.exe -cp %s com.sun.jna.platform.win32.Win32ServiceDemo", sb.toString()); - System.out.println("Invocation: " + invocation); - } else { - throw new IllegalStateException("Classloader loading Win32ServiceDemo must be an URLClassLoader"); } + invocation = String.format("java.exe -cp %s com.sun.jna.platform.win32.Win32ServiceDemo", sb.toString()); + System.out.println("Invocation: " + invocation); SERVICE_DESCRIPTION desc = new SERVICE_DESCRIPTION(); desc.lpDescription = description; From 418d2b3d60ace78d7f35bed2fa96af41642a1809 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Bl=C3=A4sing?= Date: Tue, 1 May 2018 10:25:20 +0200 Subject: [PATCH 11/11] ACCESS_ACEStructure can't be constructed from pointer The ACCESS_ACEStructure can't be constructed from pointer because the super class ACE_HEADER call Structure#read to initialize the values. Structure#read requires, that array fields are initialized so that it can determine the correct layout. This has not yet happend when the ACE_HEADER constructor calls into read and so initialization has to be taken care of by the read implementation. --- contrib/platform/src/com/sun/jna/platform/win32/WinNT.java | 3 +++ .../platform/test/com/sun/jna/platform/win32/User32Test.java | 4 ++-- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java index 658240e6a9..2b19d7b2b2 100644 --- a/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java +++ b/contrib/platform/src/com/sun/jna/platform/win32/WinNT.java @@ -2802,6 +2802,9 @@ public void write() { @Override public void read() { + if(SidStart == null) { + SidStart = new byte[4]; + } super.read(); int offsetOfSID = super.fieldOffset("SidStart"); int sizeOfSID = super.AceSize - super.fieldOffset("SidStart"); diff --git a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java index 7069d97c1c..ebd371e421 100644 --- a/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java +++ b/contrib/platform/test/com/sun/jna/platform/win32/User32Test.java @@ -59,12 +59,12 @@ public class User32Test extends AbstractWin32TestSupport { public static void main(String[] args) { JUnitCore.runClasses(User32Test.class); } - + @Before public void setUp() { Native.setLastError(0); } - + /** * Iterates over all currently available Desktop windows and searches for * the window with the associated process whose full PE file path ends with