From 3a7100b32c442ba00ad79a9ffe64e18ab45aef7c Mon Sep 17 00:00:00 2001 From: Static-Flow Date: Sat, 8 Oct 2022 12:10:48 -0500 Subject: [PATCH] Fixed some formatting and removed comments for the time being. --- pom.xml | 27 +- src/burp/IBurpCollaboratorClientContext.java | 97 -- src/burp/IBurpCollaboratorInteraction.java | 41 - src/burp/IBurpExtender.java | 31 - src/burp/IBurpExtenderCallbacks.java | 1089 ----------------- src/burp/IContextMenuFactory.java | 39 - src/burp/IContextMenuInvocation.java | 156 --- src/burp/ICookie.java | 61 - src/burp/IExtensionHelpers.java | 356 ------ src/burp/IExtensionStateListener.java | 27 - src/burp/IHttpListener.java | 37 - src/burp/IHttpRequestResponse.java | 102 -- src/burp/IHttpRequestResponsePersisted.java | 25 - src/burp/IHttpRequestResponseWithMarkers.java | 44 - src/burp/IHttpService.java | 39 - src/burp/IInterceptedProxyMessage.java | 116 -- src/burp/IIntruderAttack.java | 31 - src/burp/IIntruderPayloadGenerator.java | 50 - .../IIntruderPayloadGeneratorFactory.java | 40 - src/burp/IIntruderPayloadProcessor.java | 45 - src/burp/IMenuItemHandler.java | 36 - src/burp/IMessageEditor.java | 78 -- src/burp/IMessageEditorController.java | 49 - src/burp/IMessageEditorTab.java | 104 -- src/burp/IMessageEditorTabFactory.java | 38 - src/burp/IParameter.java | 104 -- src/burp/IProxyListener.java | 37 - src/burp/IRequestInfo.java | 95 -- src/burp/IResponseInfo.java | 73 -- src/burp/IResponseKeywords.java | 58 - src/burp/IResponseVariations.java | 62 - src/burp/IScanIssue.java | 123 -- src/burp/IScanQueueItem.java | 80 -- src/burp/IScannerCheck.java | 83 -- src/burp/IScannerInsertionPoint.java | 174 --- src/burp/IScannerInsertionPointProvider.java | 38 - src/burp/IScannerListener.java | 30 - src/burp/IScopeChangeListener.java | 25 - src/burp/ISessionHandlingAction.java | 51 - src/burp/ITab.java | 39 - src/burp/ITempFile.java | 33 - src/burp/ITextEditor.java | 91 -- src/teamextension/BurpTeamPanel.java | 23 +- target/BurpSuiteCollaborationClient.jar | Bin 14474074 -> 14476089 bytes 44 files changed, 24 insertions(+), 3953 deletions(-) delete mode 100644 src/burp/IBurpCollaboratorClientContext.java delete mode 100644 src/burp/IBurpCollaboratorInteraction.java delete mode 100644 src/burp/IBurpExtender.java delete mode 100644 src/burp/IBurpExtenderCallbacks.java delete mode 100644 src/burp/IContextMenuFactory.java delete mode 100644 src/burp/IContextMenuInvocation.java delete mode 100644 src/burp/ICookie.java delete mode 100644 src/burp/IExtensionHelpers.java delete mode 100644 src/burp/IExtensionStateListener.java delete mode 100644 src/burp/IHttpListener.java delete mode 100644 src/burp/IHttpRequestResponse.java delete mode 100644 src/burp/IHttpRequestResponsePersisted.java delete mode 100644 src/burp/IHttpRequestResponseWithMarkers.java delete mode 100644 src/burp/IHttpService.java delete mode 100644 src/burp/IInterceptedProxyMessage.java delete mode 100644 src/burp/IIntruderAttack.java delete mode 100644 src/burp/IIntruderPayloadGenerator.java delete mode 100644 src/burp/IIntruderPayloadGeneratorFactory.java delete mode 100644 src/burp/IIntruderPayloadProcessor.java delete mode 100644 src/burp/IMenuItemHandler.java delete mode 100644 src/burp/IMessageEditor.java delete mode 100644 src/burp/IMessageEditorController.java delete mode 100644 src/burp/IMessageEditorTab.java delete mode 100644 src/burp/IMessageEditorTabFactory.java delete mode 100644 src/burp/IParameter.java delete mode 100644 src/burp/IProxyListener.java delete mode 100644 src/burp/IRequestInfo.java delete mode 100644 src/burp/IResponseInfo.java delete mode 100644 src/burp/IResponseKeywords.java delete mode 100644 src/burp/IResponseVariations.java delete mode 100644 src/burp/IScanIssue.java delete mode 100644 src/burp/IScanQueueItem.java delete mode 100644 src/burp/IScannerCheck.java delete mode 100644 src/burp/IScannerInsertionPoint.java delete mode 100644 src/burp/IScannerInsertionPointProvider.java delete mode 100644 src/burp/IScannerListener.java delete mode 100644 src/burp/IScopeChangeListener.java delete mode 100644 src/burp/ISessionHandlingAction.java delete mode 100644 src/burp/ITab.java delete mode 100644 src/burp/ITempFile.java delete mode 100644 src/burp/ITextEditor.java diff --git a/pom.xml b/pom.xml index 1e68627..f26e767 100644 --- a/pom.xml +++ b/pom.xml @@ -12,54 +12,49 @@ com.google.code.gson gson - 2.8.6 + 2.9.0 com.sun.xml.bind jaxb-core - 2.3.0.1 + 4.0.1 javax.xml.bind jaxb-api - 2.3.1 - - - com.sun.xml.bind - jaxb-impl - 2.3.1 + 2.4.0-b180830.0359 org.java-websocket Java-WebSocket - 1.5.0 + 1.5.3 net.portswigger.burp.extender burp-extender-api - 2.1 + 2.3 software.amazon.awssdk bom - 2.16.99 + 2.17.285 pom runtime software.amazon.awssdk cognitoidentity - 2.16.99 + 2.17.285 software.amazon.awssdk cognitoidentityprovider - 2.16.99 + 2.17.285 software.amazon.awssdk cognitosync - 2.16.99 + 2.17.285 @@ -84,8 +79,8 @@ maven-compiler-plugin 2.3.2 - 1.8 - 1.8 + 14 + 14 diff --git a/src/burp/IBurpCollaboratorClientContext.java b/src/burp/IBurpCollaboratorClientContext.java deleted file mode 100644 index 0ffe19a..0000000 --- a/src/burp/IBurpCollaboratorClientContext.java +++ /dev/null @@ -1,97 +0,0 @@ -package burp; - -/* - * @(#)IBurpCollaboratorClientContext.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * This interface represents an instance of a Burp Collaborator client context, - * which can be used to generate Burp Collaborator payloads and poll the - * Collaborator server for any network interactions that result from using those - * payloads. Extensions can obtain new instances of this class by calling - * IBurpExtenderCallbacks.createBurpCollaboratorClientContext(). - * Note that each Burp Collaborator client context is tied to the Collaborator - * server configuration that was in place at the time the context was created. - */ -public interface IBurpCollaboratorClientContext -{ - - /** - * This method is used to generate new Burp Collaborator payloads. - * - * @param includeCollaboratorServerLocation Specifies whether to include the - * Collaborator server location in the generated payload. - * @return The payload that was generated. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - String generatePayload(boolean includeCollaboratorServerLocation); - - /** - * This method is used to retrieve all interactions received by the - * Collaborator server resulting from payloads that were generated for this - * context. - * - * @return The Collaborator interactions that have occurred resulting from - * payloads that were generated for this context. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - List fetchAllCollaboratorInteractions(); - - /** - * This method is used to retrieve interactions received by the Collaborator - * server resulting from a single payload that was generated for this - * context. - * - * @param payload The payload for which interactions will be retrieved. - * @return The Collaborator interactions that have occurred resulting from - * the given payload. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - List fetchCollaboratorInteractionsFor(String payload); - - /** - * This method is used to retrieve all interactions made by Burp Infiltrator - * instrumentation resulting from payloads that were generated for this - * context. - * - * @return The interactions triggered by the Burp Infiltrator - * instrumentation that have occurred resulting from payloads that were - * generated for this context. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - List fetchAllInfiltratorInteractions(); - - /** - * This method is used to retrieve interactions made by Burp Infiltrator - * instrumentation resulting from a single payload that was generated for - * this context. - * - * @param payload The payload for which interactions will be retrieved. - * @return The interactions triggered by the Burp Infiltrator - * instrumentation that have occurred resulting from the given payload. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - List fetchInfiltratorInteractionsFor(String payload); - - /** - * This method is used to retrieve the network location of the Collaborator - * server. - * - * @return The hostname or IP address of the Collaborator server. - * - * @throws IllegalStateException if Burp Collaborator is disabled - */ - String getCollaboratorServerLocation(); -} diff --git a/src/burp/IBurpCollaboratorInteraction.java b/src/burp/IBurpCollaboratorInteraction.java deleted file mode 100644 index 4299c7b..0000000 --- a/src/burp/IBurpCollaboratorInteraction.java +++ /dev/null @@ -1,41 +0,0 @@ -package burp; - -/* - * @(#)IBurpCollaboratorInteraction.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.Map; - -/** - * This interface represents a network interaction that occurred with the Burp - * Collaborator server. - */ -public interface IBurpCollaboratorInteraction -{ - - /** - * This method is used to retrieve a property of the interaction. Properties - * of all interactions are: interaction_id, type, client_ip, and time_stamp. - * Properties of DNS interactions are: query_type and raw_query. The - * raw_query value is Base64-encoded. Properties of HTTP interactions are: - * protocol, request, and response. The request and response values are - * Base64-encoded. - * - * @param name The name of the property to retrieve. - * @return A string representing the property value, or null if not present. - */ - String getProperty(String name); - - /** - * This method is used to retrieve a map containing all properties of the - * interaction. - * - * @return A map containing all properties of the interaction. - */ - Map getProperties(); -} diff --git a/src/burp/IBurpExtender.java b/src/burp/IBurpExtender.java deleted file mode 100644 index 8cb7390..0000000 --- a/src/burp/IBurpExtender.java +++ /dev/null @@ -1,31 +0,0 @@ -package burp; - -/* - * @(#)IBurpExtender.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * All extensions must implement this interface. - * - * Implementations must be called BurpExtender, in the package burp, must be - * declared public, and must provide a default (public, no-argument) - * constructor. - */ -public interface IBurpExtender -{ - /** - * This method is invoked when the extension is loaded. It registers an - * instance of the - * IBurpExtenderCallbacks interface, providing methods that may - * be invoked by the extension to perform various actions. - * - * @param callbacks An - * IBurpExtenderCallbacks object. - */ - void registerExtenderCallbacks(IBurpExtenderCallbacks callbacks); -} diff --git a/src/burp/IBurpExtenderCallbacks.java b/src/burp/IBurpExtenderCallbacks.java deleted file mode 100644 index 58e552c..0000000 --- a/src/burp/IBurpExtenderCallbacks.java +++ /dev/null @@ -1,1089 +0,0 @@ -package burp; - -/* - * @(#)IBurpExtenderCallbacks.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import java.awt.*; -import java.io.OutputStream; -import java.util.List; -import java.util.Map; - -/** - * This interface is used by Burp Suite to pass to extensions a set of callback - * methods that can be used by extensions to perform various actions within - * Burp. - * - * When an extension is loaded, Burp invokes its - * registerExtenderCallbacks() method and passes an instance of the - * IBurpExtenderCallbacks interface. The extension may then invoke - * the methods of this interface as required in order to extend Burp's - * functionality. - */ -public interface IBurpExtenderCallbacks -{ - - /** - * Flag used to identify Burp Suite as a whole. - */ - int TOOL_SUITE = 0x00000001; - /** - * Flag used to identify the Burp Target tool. - */ - int TOOL_TARGET = 0x00000002; - /** - * Flag used to identify the Burp Proxy tool. - */ - int TOOL_PROXY = 0x00000004; - /** - * Flag used to identify the Burp Spider tool. - */ - int TOOL_SPIDER = 0x00000008; - /** - * Flag used to identify the Burp Scanner tool. - */ - int TOOL_SCANNER = 0x00000010; - /** - * Flag used to identify the Burp Intruder tool. - */ - int TOOL_INTRUDER = 0x00000020; - /** - * Flag used to identify the Burp Repeater tool. - */ - int TOOL_REPEATER = 0x00000040; - /** - * Flag used to identify the Burp Sequencer tool. - */ - int TOOL_SEQUENCER = 0x00000080; - /** - * Flag used to identify the Burp Decoder tool. - */ - int TOOL_DECODER = 0x00000100; - /** - * Flag used to identify the Burp Comparer tool. - */ - int TOOL_COMPARER = 0x00000200; - /** - * Flag used to identify the Burp Extender tool. - */ - int TOOL_EXTENDER = 0x00000400; - - /** - * This method is used to set the display name for the current extension, - * which will be displayed within the user interface for the Extender tool. - * - * @param name The extension name. - */ - void setExtensionName(String name); - - /** - * This method is used to obtain an IExtensionHelpers object, - * which can be used by the extension to perform numerous useful tasks. - * - * @return An object containing numerous helper methods, for tasks such as - * building and analyzing HTTP requests. - */ - IExtensionHelpers getHelpers(); - - /** - * This method is used to obtain the current extension's standard output - * stream. Extensions should write all output to this stream, allowing the - * Burp user to configure how that output is handled from within the UI. - * - * @return The extension's standard output stream. - */ - OutputStream getStdout(); - - /** - * This method is used to obtain the current extension's standard error - * stream. Extensions should write all error messages to this stream, - * allowing the Burp user to configure how that output is handled from - * within the UI. - * - * @return The extension's standard error stream. - */ - OutputStream getStderr(); - - /** - * This method prints a line of output to the current extension's standard - * output stream. - * - * @param output The message to print. - */ - void printOutput(String output); - - /** - * This method prints a line of output to the current extension's standard - * error stream. - * - * @param error The message to print. - */ - void printError(String error); - - /** - * This method is used to register a listener which will be notified of - * changes to the extension's state. Note: Any extensions that start - * background threads or open system resources (such as files or database - * connections) should register a listener and terminate threads / close - * resources when the extension is unloaded. - * - * @param listener An object created by the extension that implements the - * IExtensionStateListener interface. - */ - void registerExtensionStateListener(IExtensionStateListener listener); - - /** - * This method is used to retrieve the extension state listeners that are - * registered by the extension. - * - * @return A list of extension state listeners that are currently registered - * by this extension. - */ - List getExtensionStateListeners(); - - /** - * This method is used to remove an extension state listener that has been - * registered by the extension. - * - * @param listener The extension state listener to be removed. - */ - void removeExtensionStateListener(IExtensionStateListener listener); - - /** - * This method is used to register a listener which will be notified of - * requests and responses made by any Burp tool. Extensions can perform - * custom analysis or modification of these messages by registering an HTTP - * listener. - * - * @param listener An object created by the extension that implements the - * IHttpListener interface. - */ - void registerHttpListener(IHttpListener listener); - - /** - * This method is used to retrieve the HTTP listeners that are registered by - * the extension. - * - * @return A list of HTTP listeners that are currently registered by this - * extension. - */ - List getHttpListeners(); - - /** - * This method is used to remove an HTTP listener that has been registered - * by the extension. - * - * @param listener The HTTP listener to be removed. - */ - void removeHttpListener(IHttpListener listener); - - /** - * This method is used to register a listener which will be notified of - * requests and responses being processed by the Proxy tool. Extensions can - * perform custom analysis or modification of these messages, and control - * in-UI message interception, by registering a proxy listener. - * - * @param listener An object created by the extension that implements the - * IProxyListener interface. - */ - void registerProxyListener(IProxyListener listener); - - /** - * This method is used to retrieve the Proxy listeners that are registered - * by the extension. - * - * @return A list of Proxy listeners that are currently registered by this - * extension. - */ - List getProxyListeners(); - - /** - * This method is used to remove a Proxy listener that has been registered - * by the extension. - * - * @param listener The Proxy listener to be removed. - */ - void removeProxyListener(IProxyListener listener); - - /** - * This method is used to register a listener which will be notified of new - * issues that are reported by the Scanner tool. Extensions can perform - * custom analysis or logging of Scanner issues by registering a Scanner - * listener. - * - * @param listener An object created by the extension that implements the - * IScannerListener interface. - */ - void registerScannerListener(IScannerListener listener); - - /** - * This method is used to retrieve the Scanner listeners that are registered - * by the extension. - * - * @return A list of Scanner listeners that are currently registered by this - * extension. - */ - List getScannerListeners(); - - /** - * This method is used to remove a Scanner listener that has been registered - * by the extension. - * - * @param listener The Scanner listener to be removed. - */ - void removeScannerListener(IScannerListener listener); - - /** - * This method is used to register a listener which will be notified of - * changes to Burp's suite-wide target scope. - * - * @param listener An object created by the extension that implements the - * IScopeChangeListener interface. - */ - void registerScopeChangeListener(IScopeChangeListener listener); - - /** - * This method is used to retrieve the scope change listeners that are - * registered by the extension. - * - * @return A list of scope change listeners that are currently registered by - * this extension. - */ - List getScopeChangeListeners(); - - /** - * This method is used to remove a scope change listener that has been - * registered by the extension. - * - * @param listener The scope change listener to be removed. - */ - void removeScopeChangeListener(IScopeChangeListener listener); - - /** - * This method is used to register a factory for custom context menu items. - * When the user invokes a context menu anywhere within Burp, the factory - * will be passed details of the invocation event, and asked to provide any - * custom context menu items that should be shown. - * - * @param factory An object created by the extension that implements the - * IContextMenuFactory interface. - */ - void registerContextMenuFactory(IContextMenuFactory factory); - - /** - * This method is used to retrieve the context menu factories that are - * registered by the extension. - * - * @return A list of context menu factories that are currently registered by - * this extension. - */ - List getContextMenuFactories(); - - /** - * This method is used to remove a context menu factory that has been - * registered by the extension. - * - * @param factory The context menu factory to be removed. - */ - void removeContextMenuFactory(IContextMenuFactory factory); - - /** - * This method is used to register a factory for custom message editor tabs. - * For each message editor that already exists, or is subsequently created, - * within Burp, the factory will be asked to provide a new instance of an - * IMessageEditorTab object, which can provide custom rendering - * or editing of HTTP messages. - * - * @param factory An object created by the extension that implements the - * IMessageEditorTabFactory interface. - */ - void registerMessageEditorTabFactory(IMessageEditorTabFactory factory); - - /** - * This method is used to retrieve the message editor tab factories that are - * registered by the extension. - * - * @return A list of message editor tab factories that are currently - * registered by this extension. - */ - List getMessageEditorTabFactories(); - - /** - * This method is used to remove a message editor tab factory that has been - * registered by the extension. - * - * @param factory The message editor tab factory to be removed. - */ - void removeMessageEditorTabFactory(IMessageEditorTabFactory factory); - - /** - * This method is used to register a provider of Scanner insertion points. - * For each base request that is actively scanned, Burp will ask the - * provider to provide any custom scanner insertion points that are - * appropriate for the request. - * - * @param provider An object created by the extension that implements the - * IScannerInsertionPointProvider interface. - */ - void registerScannerInsertionPointProvider( - IScannerInsertionPointProvider provider); - - /** - * This method is used to retrieve the Scanner insertion point providers - * that are registered by the extension. - * - * @return A list of Scanner insertion point providers that are currently - * registered by this extension. - */ - List getScannerInsertionPointProviders(); - - /** - * This method is used to remove a Scanner insertion point provider that has - * been registered by the extension. - * - * @param provider The Scanner insertion point provider to be removed. - */ - void removeScannerInsertionPointProvider( - IScannerInsertionPointProvider provider); - - /** - * This method is used to register a custom Scanner check. When performing - * scanning, Burp will ask the check to perform active or passive scanning - * on the base request, and report any Scanner issues that are identified. - * - * @param check An object created by the extension that implements the - * IScannerCheck interface. - */ - void registerScannerCheck(IScannerCheck check); - - /** - * This method is used to retrieve the Scanner checks that are registered by - * the extension. - * - * @return A list of Scanner checks that are currently registered by this - * extension. - */ - List getScannerChecks(); - - /** - * This method is used to remove a Scanner check that has been registered by - * the extension. - * - * @param check The Scanner check to be removed. - */ - void removeScannerCheck(IScannerCheck check); - - /** - * This method is used to register a factory for Intruder payloads. Each - * registered factory will be available within the Intruder UI for the user - * to select as the payload source for an attack. When this is selected, the - * factory will be asked to provide a new instance of an - * IIntruderPayloadGenerator object, which will be used to - * generate payloads for the attack. - * - * @param factory An object created by the extension that implements the - * IIntruderPayloadGeneratorFactory interface. - */ - void registerIntruderPayloadGeneratorFactory( - IIntruderPayloadGeneratorFactory factory); - - /** - * This method is used to retrieve the Intruder payload generator factories - * that are registered by the extension. - * - * @return A list of Intruder payload generator factories that are currently - * registered by this extension. - */ - List - getIntruderPayloadGeneratorFactories(); - - /** - * This method is used to remove an Intruder payload generator factory that - * has been registered by the extension. - * - * @param factory The Intruder payload generator factory to be removed. - */ - void removeIntruderPayloadGeneratorFactory( - IIntruderPayloadGeneratorFactory factory); - - /** - * This method is used to register a custom Intruder payload processor. Each - * registered processor will be available within the Intruder UI for the - * user to select as the action for a payload processing rule. - * - * @param processor An object created by the extension that implements the - * IIntruderPayloadProcessor interface. - */ - void registerIntruderPayloadProcessor(IIntruderPayloadProcessor processor); - - /** - * This method is used to retrieve the Intruder payload processors that are - * registered by the extension. - * - * @return A list of Intruder payload processors that are currently - * registered by this extension. - */ - List getIntruderPayloadProcessors(); - - /** - * This method is used to remove an Intruder payload processor that has been - * registered by the extension. - * - * @param processor The Intruder payload processor to be removed. - */ - void removeIntruderPayloadProcessor(IIntruderPayloadProcessor processor); - - /** - * This method is used to register a custom session handling action. Each - * registered action will be available within the session handling rule UI - * for the user to select as a rule action. Users can choose to invoke an - * action directly in its own right, or following execution of a macro. - * - * @param action An object created by the extension that implements the - * ISessionHandlingAction interface. - */ - void registerSessionHandlingAction(ISessionHandlingAction action); - - /** - * This method is used to retrieve the session handling actions that are - * registered by the extension. - * - * @return A list of session handling actions that are currently registered - * by this extension. - */ - List getSessionHandlingActions(); - - /** - * This method is used to remove a session handling action that has been - * registered by the extension. - * - * @param action The extension session handling action to be removed. - */ - void removeSessionHandlingAction(ISessionHandlingAction action); - - /** - * This method is used to unload the extension from Burp Suite. - */ - void unloadExtension(); - - /** - * This method is used to add a custom tab to the main Burp Suite window. - * - * @param tab An object created by the extension that implements the - * ITab interface. - */ - void addSuiteTab(ITab tab); - - /** - * This method is used to remove a previously-added tab from the main Burp - * Suite window. - * - * @param tab An object created by the extension that implements the - * ITab interface. - */ - void removeSuiteTab(ITab tab); - - /** - * This method is used to customize UI components in line with Burp's UI - * style, including font size, colors, table line spacing, etc. The action - * is performed recursively on any child components of the passed-in - * component. - * - * @param component The UI component to be customized. - */ - void customizeUiComponent(Component component); - - /** - * This method is used to create a new instance of Burp's HTTP message - * editor, for the extension to use in its own UI. - * - * @param controller An object created by the extension that implements the - * IMessageEditorController interface. This parameter is - * optional and may be null. If it is provided, then the - * message editor will query the controller when required to obtain details - * about the currently displayed message, including the - * IHttpService for the message, and the associated request or - * response message. If a controller is not provided, then the message - * editor will not support context menu actions, such as sending requests to - * other Burp tools. - * @param editable Indicates whether the editor created should be editable, - * or used only for message viewing. - * @return An object that implements the IMessageEditor - * interface, and which the extension can use in its own UI. - */ - IMessageEditor createMessageEditor(IMessageEditorController controller, - boolean editable); - - /** - * This method returns the command line arguments that were passed to Burp - * on startup. - * - * @return The command line arguments that were passed to Burp on startup. - */ - String[] getCommandLineArguments(); - - /** - * This method is used to save configuration settings for the extension in a - * persistent way that survives reloads of the extension and of Burp Suite. - * Saved settings can be retrieved using the method - * loadExtensionSetting(). - * - * @param name The name of the setting. - * @param value The value of the setting. If this value is null - * then any existing setting with the specified name will be removed. - */ - void saveExtensionSetting(String name, String value); - - /** - * This method is used to load configuration settings for the extension that - * were saved using the method saveExtensionSetting(). - * - * @param name The name of the setting. - * @return The value of the setting, or null if no value is - * set. - */ - String loadExtensionSetting(String name); - - /** - * This method is used to create a new instance of Burp's plain text editor, - * for the extension to use in its own UI. - * - * @return An object that implements the ITextEditor interface, - * and which the extension can use in its own UI. - */ - ITextEditor createTextEditor(); - - /** - * This method can be used to send an HTTP request to the Burp Repeater - * tool. The request will be displayed in the user interface, but will not - * be issued until the user initiates this action. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @param tabCaption An optional caption which will appear on the Repeater - * tab containing the request. If this value is null then a - * default tab index will be displayed. - */ - void sendToRepeater( - String host, - int port, - boolean useHttps, - byte[] request, - String tabCaption); - - /** - * This method can be used to send an HTTP request to the Burp Intruder - * tool. The request will be displayed in the user interface, and markers - * for attack payloads will be placed into default locations within the - * request. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - */ - void sendToIntruder( - String host, - int port, - boolean useHttps, - byte[] request); - - /** - * This method can be used to send an HTTP request to the Burp Intruder - * tool. The request will be displayed in the user interface, and markers - * for attack payloads will be placed into the specified locations within - * the request. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @param payloadPositionOffsets A list of index pairs representing the - * payload positions to be used. Each item in the list must be an int[2] - * array containing the start and end offsets for the payload position. - */ - void sendToIntruder( - String host, - int port, - boolean useHttps, - byte[] request, - List payloadPositionOffsets); - - /** - * This method can be used to send data to the Comparer tool. - * - * @param data The data to be sent to Comparer. - */ - void sendToComparer(byte[] data); - - /** - * This method can be used to send a seed URL to the Burp Spider tool. If - * the URL is not within the current Spider scope, the user will be asked if - * they wish to add the URL to the scope. If the Spider is not currently - * running, it will be started. The seed URL will be requested, and the - * Spider will process the application's response in the normal way. - * - * @param url The new seed URL to begin spidering from. - */ - void sendToSpider( - java.net.URL url); - - /** - * This method can be used to send an HTTP request to the Burp Scanner tool - * to perform an active vulnerability scan. If the request is not within the - * current active scanning scope, the user will be asked if they wish to - * proceed with the scan. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @return The resulting scan queue item. - */ - IScanQueueItem doActiveScan( - String host, - int port, - boolean useHttps, - byte[] request); - - /** - * This method can be used to send an HTTP request to the Burp Scanner tool - * to perform an active vulnerability scan, based on a custom list of - * insertion points that are to be scanned. If the request is not within the - * current active scanning scope, the user will be asked if they wish to - * proceed with the scan. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @param insertionPointOffsets A list of index pairs representing the - * positions of the insertion points that should be scanned. Each item in - * the list must be an int[2] array containing the start and end offsets for - * the insertion point. - * @return The resulting scan queue item. - */ - IScanQueueItem doActiveScan( - String host, - int port, - boolean useHttps, - byte[] request, - List insertionPointOffsets); - - /** - * This method can be used to send an HTTP request to the Burp Scanner tool - * to perform a passive vulnerability scan. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @param response The full HTTP response. - */ - void doPassiveScan( - String host, - int port, - boolean useHttps, - byte[] request, - byte[] response); - - /** - * This method can be used to issue HTTP requests and retrieve their - * responses. - * - * @param httpService The HTTP service to which the request should be sent. - * @param request The full HTTP request. - * @return An object that implements the IHttpRequestResponse - * interface, and which the extension can query to obtain the details of the - * response. - */ - IHttpRequestResponse makeHttpRequest(IHttpService httpService, - byte[] request); - - /** - * This method can be used to issue HTTP requests and retrieve their - * responses. - * - * @param host The hostname of the remote HTTP server. - * @param port The port of the remote HTTP server. - * @param useHttps Flags whether the protocol is HTTPS or HTTP. - * @param request The full HTTP request. - * @return The full response retrieved from the remote server. - */ - byte[] makeHttpRequest( - String host, - int port, - boolean useHttps, - byte[] request); - - /** - * This method can be used to query whether a specified URL is within the - * current Suite-wide scope. - * - * @param url The URL to query. - * @return Returns true if the URL is within the current - * Suite-wide scope. - */ - boolean isInScope(java.net.URL url); - - /** - * This method can be used to include the specified URL in the Suite-wide - * scope. - * - * @param url The URL to include in the Suite-wide scope. - */ - void includeInScope(java.net.URL url); - - /** - * This method can be used to exclude the specified URL from the Suite-wide - * scope. - * - * @param url The URL to exclude from the Suite-wide scope. - */ - void excludeFromScope(java.net.URL url); - - /** - * This method can be used to display a specified message in the Burp Suite - * alerts tab. - * - * @param message The alert message to display. - */ - void issueAlert(String message); - - /** - * This method returns details of all items in the Proxy history. - * - * @return The contents of the Proxy history. - */ - IHttpRequestResponse[] getProxyHistory(); - - /** - * This method returns details of items in the site map. - * - * @param urlPrefix This parameter can be used to specify a URL prefix, in - * order to extract a specific subset of the site map. The method performs a - * simple case-sensitive text match, returning all site map items whose URL - * begins with the specified prefix. If this parameter is null, the entire - * site map is returned. - * - * @return Details of items in the site map. - */ - IHttpRequestResponse[] getSiteMap(String urlPrefix); - - /** - * This method returns all of the current scan issues for URLs matching the - * specified literal prefix. - * - * @param urlPrefix This parameter can be used to specify a URL prefix, in - * order to extract a specific subset of scan issues. The method performs a - * simple case-sensitive text match, returning all scan issues whose URL - * begins with the specified prefix. If this parameter is null, all issues - * are returned. - * @return Details of the scan issues. - */ - IScanIssue[] getScanIssues(String urlPrefix); - - /** - * This method is used to generate a report for the specified Scanner - * issues. The report format can be specified. For all other reporting - * options, the default settings that appear in the reporting UI wizard are - * used. - * - * @param format The format to be used in the report. Accepted values are - * HTML and XML. - * @param issues The Scanner issues to be reported. - * @param file The file to which the report will be saved. - */ - void generateScanReport(String format, IScanIssue[] issues, - java.io.File file); - - /** - * This method is used to retrieve the contents of Burp's session handling - * cookie jar. Extensions that provide an - * ISessionHandlingAction can query and update the cookie jar - * in order to handle unusual session handling mechanisms. - * - * @return A list of ICookie objects representing the contents - * of Burp's session handling cookie jar. - */ - List getCookieJarContents(); - - /** - * This method is used to update the contents of Burp's session handling - * cookie jar. Extensions that provide an - * ISessionHandlingAction can query and update the cookie jar - * in order to handle unusual session handling mechanisms. - * - * @param cookie An ICookie object containing details of the - * cookie to be updated. If the cookie jar already contains a cookie that - * matches the specified domain and name, then that cookie will be updated - * with the new value and expiration, unless the new value is - * null, in which case the cookie will be removed. If the - * cookie jar does not already contain a cookie that matches the specified - * domain and name, then the cookie will be added. - */ - void updateCookieJar(ICookie cookie); - - /** - * This method can be used to add an item to Burp's site map with the - * specified request/response details. This will overwrite the details of - * any existing matching item in the site map. - * - * @param item Details of the item to be added to the site map - */ - void addToSiteMap(IHttpRequestResponse item); - - /** - * This method can be used to restore Burp's state from a specified saved - * state file. This method blocks until the restore operation is completed, - * and must not be called from the event dispatch thread. - * - * @param file The file containing Burp's saved state. - * @deprecated State files have been replaced with Burp project files. - */ - @Deprecated - void restoreState(java.io.File file); - - /** - * This method can be used to save Burp's state to a specified file. This - * method blocks until the save operation is completed, and must not be - * called from the event dispatch thread. - * - * @param file The file to save Burp's state in. - * @deprecated State files have been replaced with Burp project files. - */ - @Deprecated - void saveState(java.io.File file); - - /** - * This method is no longer supported. Please use saveConfigAsJson() instead. - * - * @return A Map of name/value Strings reflecting Burp's current - * configuration. - * @deprecated Use saveConfigAsJson() instead. - */ - @Deprecated - Map saveConfig(); - - /** - * This method is no longer supported. Please use loadConfigFromJson() instead. - * - * @param config A map of name/value Strings to use as Burp's new - * configuration. - * @deprecated Use loadConfigFromJson() instead. - */ - @Deprecated - void loadConfig(Map config); - - /** - * This method causes Burp to save its current project-level configuration - * in JSON format. This is the same format that can be saved and loaded via - * the Burp user interface. To include only certain sections of the - * configuration, you can optionally supply the path to each section that - * should be included, for example: "project_options.connections". If no - * paths are provided, then the entire configuration will be saved. - * - * @param configPaths A list of Strings representing the path to each - * configuration section that should be included. - * @return A String representing the current configuration in JSON format. - */ - String saveConfigAsJson(String... configPaths); - - /** - * This method causes Burp to load a new project-level configuration from - * the JSON String provided. This is the same format that can be saved and - * loaded via the Burp user interface. Partial configurations are - * acceptable, and any settings not specified will be left unmodified. - * - * Any user-level configuration options contained in the input will be - * ignored. - * - * @param config A JSON String containing the new configuration. - */ - void loadConfigFromJson(String config); - - /** - * This method sets the master interception mode for Burp Proxy. - * - * @param enabled Indicates whether interception of Proxy messages should be - * enabled. - */ - void setProxyInterceptionEnabled(boolean enabled); - - /** - * This method retrieves information about the version of Burp in which the - * extension is running. It can be used by extensions to dynamically adjust - * their behavior depending on the functionality and APIs supported by the - * current version. - * - * @return An array of Strings comprised of: the product name (e.g. Burp - * Suite Professional), the major version (e.g. 1.5), the minor version - * (e.g. 03) - */ - String[] getBurpVersion(); - - /** - * This method retrieves the absolute path name of the file from which the - * current extension was loaded. - * - * @return The absolute path name of the file from which the current - * extension was loaded. - */ - String getExtensionFilename(); - - /** - * This method determines whether the current extension was loaded as a BApp - * (a Burp App from the BApp Store). - * - * @return Returns true if the current extension was loaded as a BApp. - */ - boolean isExtensionBapp(); - - /** - * This method can be used to shut down Burp programmatically, with an - * optional prompt to the user. If the method returns, the user canceled the - * shutdown prompt. - * - * @param promptUser Indicates whether to prompt the user to confirm the - * shutdown. - */ - void exitSuite(boolean promptUser); - - /** - * This method is used to create a temporary file on disk containing the - * provided data. Extensions can use temporary files for long-term storage - * of runtime data, avoiding the need to retain that data in memory. - * - * @param buffer The data to be saved to a temporary file. - * @return An object that implements the ITempFile interface. - */ - ITempFile saveToTempFile(byte[] buffer); - - /** - * This method is used to save the request and response of an - * IHttpRequestResponse object to temporary files, so that they - * are no longer held in memory. Extensions can used this method to convert - * IHttpRequestResponse objects into a form suitable for - * long-term storage. - * - * @param httpRequestResponse The IHttpRequestResponse object - * whose request and response messages are to be saved to temporary files. - * @return An object that implements the - * IHttpRequestResponsePersisted interface. - */ - IHttpRequestResponsePersisted saveBuffersToTempFiles( - IHttpRequestResponse httpRequestResponse); - - /** - * This method is used to apply markers to an HTTP request or response, at - * offsets into the message that are relevant for some particular purpose. - * Markers are used in various situations, such as specifying Intruder - * payload positions, Scanner insertion points, and highlights in Scanner - * issues. - * - * @param httpRequestResponse The IHttpRequestResponse object - * to which the markers should be applied. - * @param requestMarkers A list of index pairs representing the offsets of - * markers to be applied to the request message. Each item in the list must - * be an int[2] array containing the start and end offsets for the marker. - * The markers in the list should be in sequence and not overlapping. This - * parameter is optional and may be null if no request markers - * are required. - * @param responseMarkers A list of index pairs representing the offsets of - * markers to be applied to the response message. Each item in the list must - * be an int[2] array containing the start and end offsets for the marker. - * The markers in the list should be in sequence and not overlapping. This - * parameter is optional and may be null if no response markers - * are required. - * @return An object that implements the - * IHttpRequestResponseWithMarkers interface. - */ - IHttpRequestResponseWithMarkers applyMarkers( - IHttpRequestResponse httpRequestResponse, - List requestMarkers, - List responseMarkers); - - /** - * This method is used to obtain the descriptive name for the Burp tool - * identified by the tool flag provided. - * - * @param toolFlag A flag identifying a Burp tool ( TOOL_PROXY, - * TOOL_SCANNER, etc.). Tool flags are defined within this - * interface. - * @return The descriptive name for the specified tool. - */ - String getToolName(int toolFlag); - - /** - * This method is used to register a new Scanner issue. Note: - * Wherever possible, extensions should implement custom Scanner checks - * using IScannerCheck and report issues via those checks, so - * as to integrate with Burp's user-driven workflow, and ensure proper - * consolidation of duplicate reported issues. This method is only designed - * for tasks outside of the normal testing workflow, such as importing - * results from other scanning tools. - * - * @param issue An object created by the extension that implements the - * IScanIssue interface. - */ - void addScanIssue(IScanIssue issue); - - /** - * This method is used to create a new Burp Collaborator client context, - * which can be used to generate Burp Collaborator payloads and poll the - * Collaborator server for any network interactions that result from using - * those payloads. - * - * @return A new instance of IBurpCollaboratorClientContext - * that can be used to generate Collaborator payloads and retrieve - * interactions. - */ - IBurpCollaboratorClientContext createBurpCollaboratorClientContext(); - - /** - * This method parses the specified request and returns details of each - * request parameter. - * - * @param request The request to be parsed. - * @return An array of: String[] { name, value, type } - * containing details of the parameters contained within the request. - * @deprecated Use IExtensionHelpers.analyzeRequest() instead. - */ - @Deprecated - String[][] getParameters(byte[] request); - - /** - * This method parses the specified request and returns details of each HTTP - * header. - * - * @param message The request to be parsed. - * @return An array of HTTP headers. - * @deprecated Use IExtensionHelpers.analyzeRequest() or - * IExtensionHelpers.analyzeResponse() instead. - */ - @Deprecated - String[] getHeaders(byte[] message); - - /** - * This method can be used to register a new menu item which will appear on - * the various context menus that are used throughout Burp Suite to handle - * user-driven actions. - * - * @param menuItemCaption The caption to be displayed on the menu item. - * @param menuItemHandler The handler to be invoked when the user clicks on - * the menu item. - * @deprecated Use registerContextMenuFactory() instead. - */ - @Deprecated - void registerMenuItem( - String menuItemCaption, - IMenuItemHandler menuItemHandler); -} diff --git a/src/burp/IContextMenuFactory.java b/src/burp/IContextMenuFactory.java deleted file mode 100644 index 4df82fd..0000000 --- a/src/burp/IContextMenuFactory.java +++ /dev/null @@ -1,39 +0,0 @@ -package burp; - -/* - * @(#)IContextMenuFactory.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import javax.swing.*; -import java.util.List; - -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerContextMenuFactory() to register - * a factory for custom context menu items. - */ -public interface IContextMenuFactory -{ - /** - * This method will be called by Burp when the user invokes a context menu - * anywhere within Burp. The factory can then provide any custom context - * menu items that should be displayed in the context menu, based on the - * details of the menu invocation. - * - * @param invocation An object that implements the - * IContextMenuInvocation interface, which the extension can - * query to obtain details of the context menu invocation. - * @return A list of custom menu items (which may include sub-menus, - * checkbox menu items, etc.) that should be displayed. Extensions may - * return - * null from this method, to indicate that no menu items are - * required. - */ - List createMenuItems(IContextMenuInvocation invocation); -} diff --git a/src/burp/IContextMenuInvocation.java b/src/burp/IContextMenuInvocation.java deleted file mode 100644 index 032d107..0000000 --- a/src/burp/IContextMenuInvocation.java +++ /dev/null @@ -1,156 +0,0 @@ -package burp; - -/* - * @(#)IContextMenuInvocation.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.awt.event.InputEvent; - -/** - * This interface is used when Burp calls into an extension-provided - * IContextMenuFactory with details of a context menu invocation. - * The custom context menu factory can query this interface to obtain details of - * the invocation event, in order to determine what menu items should be - * displayed. - */ -public interface IContextMenuInvocation -{ - /** - * Used to indicate that the context menu is being invoked in a request - * editor. - */ - static final byte CONTEXT_MESSAGE_EDITOR_REQUEST = 0; - /** - * Used to indicate that the context menu is being invoked in a response - * editor. - */ - static final byte CONTEXT_MESSAGE_EDITOR_RESPONSE = 1; - /** - * Used to indicate that the context menu is being invoked in a non-editable - * request viewer. - */ - static final byte CONTEXT_MESSAGE_VIEWER_REQUEST = 2; - /** - * Used to indicate that the context menu is being invoked in a non-editable - * response viewer. - */ - static final byte CONTEXT_MESSAGE_VIEWER_RESPONSE = 3; - /** - * Used to indicate that the context menu is being invoked in the Target - * site map tree. - */ - static final byte CONTEXT_TARGET_SITE_MAP_TREE = 4; - /** - * Used to indicate that the context menu is being invoked in the Target - * site map table. - */ - static final byte CONTEXT_TARGET_SITE_MAP_TABLE = 5; - /** - * Used to indicate that the context menu is being invoked in the Proxy - * history. - */ - static final byte CONTEXT_PROXY_HISTORY = 6; - /** - * Used to indicate that the context menu is being invoked in the Scanner - * results. - */ - static final byte CONTEXT_SCANNER_RESULTS = 7; - /** - * Used to indicate that the context menu is being invoked in the Intruder - * payload positions editor. - */ - static final byte CONTEXT_INTRUDER_PAYLOAD_POSITIONS = 8; - /** - * Used to indicate that the context menu is being invoked in an Intruder - * attack results. - */ - static final byte CONTEXT_INTRUDER_ATTACK_RESULTS = 9; - /** - * Used to indicate that the context menu is being invoked in a search - * results window. - */ - static final byte CONTEXT_SEARCH_RESULTS = 10; - - /** - * This method can be used to retrieve the native Java input event that was - * the trigger for the context menu invocation. - * - * @return The InputEvent that was the trigger for the context - * menu invocation. - */ - InputEvent getInputEvent(); - - /** - * This method can be used to retrieve the Burp tool within which the - * context menu was invoked. - * - * @return A flag indicating the Burp tool within which the context menu was - * invoked. Burp tool flags are defined in the - * IBurpExtenderCallbacks interface. - */ - int getToolFlag(); - - /** - * This method can be used to retrieve the context within which the menu was - * invoked. - * - * @return An index indicating the context within which the menu was - * invoked. The indices used are defined within this interface. - */ - byte getInvocationContext(); - - /** - * This method can be used to retrieve the bounds of the user's selection - * into the current message, if applicable. - * - * @return An int[2] array containing the start and end offsets of the - * user's selection in the current message. If the user has not made any - * selection in the current message, both offsets indicate the position of - * the caret within the editor. If the menu is not being invoked from a - * message editor, the method returns null. - */ - int[] getSelectionBounds(); - - /** - * This method can be used to retrieve details of the HTTP requests / - * responses that were shown or selected by the user when the context menu - * was invoked. - * - * Note: For performance reasons, the objects returned from this - * method are tied to the originating context of the messages within the - * Burp UI. For example, if a context menu is invoked on the Proxy intercept - * panel, then the - * IHttpRequestResponse returned by this method will reflect - * the current contents of the interception panel, and this will change when - * the current message has been forwarded or dropped. If your extension - * needs to store details of the message for which the context menu has been - * invoked, then you should query those details from the - * IHttpRequestResponse at the time of invocation, or you - * should use - * IBurpExtenderCallbacks.saveBuffersToTempFiles() to create a - * persistent read-only copy of the - * IHttpRequestResponse. - * - * @return An array of IHttpRequestResponse objects - * representing the items that were shown or selected by the user when the - * context menu was invoked. This method returns null if no - * messages are applicable to the invocation. - */ - IHttpRequestResponse[] getSelectedMessages(); - - /** - * This method can be used to retrieve details of the Scanner issues that - * were selected by the user when the context menu was invoked. - * - * @return An array of IScanIssue objects representing the - * issues that were selected by the user when the context menu was invoked. - * This method returns null if no Scanner issues are applicable - * to the invocation. - */ - IScanIssue[] getSelectedIssues(); -} diff --git a/src/burp/ICookie.java b/src/burp/ICookie.java deleted file mode 100644 index 8c3aaa1..0000000 --- a/src/burp/ICookie.java +++ /dev/null @@ -1,61 +0,0 @@ -package burp; - -/* - * @(#)ICookie.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.Date; - -/** - * This interface is used to hold details about an HTTP cookie. - */ -public interface ICookie -{ - /** - * This method is used to retrieve the domain for which the cookie is in - * scope. - * - * @return The domain for which the cookie is in scope. Note: For - * cookies that have been analyzed from responses (by calling - * IExtensionHelpers.analyzeResponse() and then - * IResponseInfo.getCookies(), the domain will be - * null if the response did not explicitly set a domain - * attribute for the cookie. - */ - String getDomain(); - - /** - * This method is used to retrieve the path for which the cookie is in - * scope. - * - * @return The path for which the cookie is in scope or null if none is set. - */ - String getPath(); - - /** - * This method is used to retrieve the expiration time for the cookie. - * - * @return The expiration time for the cookie, or - * null if none is set (i.e., for non-persistent session - * cookies). - */ - Date getExpiration(); - - /** - * This method is used to retrieve the name of the cookie. - * - * @return The name of the cookie. - */ - String getName(); - - /** - * This method is used to retrieve the value of the cookie. - * @return The value of the cookie. - */ - String getValue(); -} diff --git a/src/burp/IExtensionHelpers.java b/src/burp/IExtensionHelpers.java deleted file mode 100644 index 49beb97..0000000 --- a/src/burp/IExtensionHelpers.java +++ /dev/null @@ -1,356 +0,0 @@ -package burp; - -/* - * @(#)IExtensionHelpers.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.net.URL; -import java.util.List; - -/** - * This interface contains a number of helper methods, which extensions can use - * to assist with various common tasks that arise for Burp extensions. - * - * Extensions can call IBurpExtenderCallbacks.getHelpers to obtain - * an instance of this interface. - */ -public interface IExtensionHelpers -{ - - /** - * This method can be used to analyze an HTTP request, and obtain various - * key details about it. - * - * @param request An IHttpRequestResponse object containing the - * request to be analyzed. - * @return An IRequestInfo object that can be queried to obtain - * details about the request. - */ - IRequestInfo analyzeRequest(IHttpRequestResponse request); - - /** - * This method can be used to analyze an HTTP request, and obtain various - * key details about it. - * - * @param httpService The HTTP service associated with the request. This is - * optional and may be null, in which case the resulting - * IRequestInfo object will not include the full request URL. - * @param request The request to be analyzed. - * @return An IRequestInfo object that can be queried to obtain - * details about the request. - */ - IRequestInfo analyzeRequest(IHttpService httpService, byte[] request); - - /** - * This method can be used to analyze an HTTP request, and obtain various - * key details about it. The resulting IRequestInfo object will - * not include the full request URL. To obtain the full URL, use one of the - * other overloaded analyzeRequest() methods. - * - * @param request The request to be analyzed. - * @return An IRequestInfo object that can be queried to obtain - * details about the request. - */ - IRequestInfo analyzeRequest(byte[] request); - - /** - * This method can be used to analyze an HTTP response, and obtain various - * key details about it. - * - * @param response The response to be analyzed. - * @return An IResponseInfo object that can be queried to - * obtain details about the response. - */ - IResponseInfo analyzeResponse(byte[] response); - - /** - * This method can be used to retrieve details of a specified parameter - * within an HTTP request. Note: Use analyzeRequest() to - * obtain details of all parameters within the request. - * - * @param request The request to be inspected for the specified parameter. - * @param parameterName The name of the parameter to retrieve. - * @return An IParameter object that can be queried to obtain - * details about the parameter, or null if the parameter was - * not found. - */ - IParameter getRequestParameter(byte[] request, String parameterName); - - /** - * This method can be used to URL-decode the specified data. - * - * @param data The data to be decoded. - * @return The decoded data. - */ - String urlDecode(String data); - - /** - * This method can be used to URL-encode the specified data. Any characters - * that do not need to be encoded within HTTP requests are not encoded. - * - * @param data The data to be encoded. - * @return The encoded data. - */ - String urlEncode(String data); - - /** - * This method can be used to URL-decode the specified data. - * - * @param data The data to be decoded. - * @return The decoded data. - */ - byte[] urlDecode(byte[] data); - - /** - * This method can be used to URL-encode the specified data. Any characters - * that do not need to be encoded within HTTP requests are not encoded. - * - * @param data The data to be encoded. - * @return The encoded data. - */ - byte[] urlEncode(byte[] data); - - /** - * This method can be used to Base64-decode the specified data. - * - * @param data The data to be decoded. - * @return The decoded data. - */ - byte[] base64Decode(String data); - - /** - * This method can be used to Base64-decode the specified data. - * - * @param data The data to be decoded. - * @return The decoded data. - */ - byte[] base64Decode(byte[] data); - - /** - * This method can be used to Base64-encode the specified data. - * - * @param data The data to be encoded. - * @return The encoded data. - */ - String base64Encode(String data); - - /** - * This method can be used to Base64-encode the specified data. - * - * @param data The data to be encoded. - * @return The encoded data. - */ - String base64Encode(byte[] data); - - /** - * This method can be used to convert data from String form into an array of - * bytes. The conversion does not reflect any particular character set, and - * a character with the hex representation 0xWXYZ will always be converted - * into a byte with the representation 0xYZ. It performs the opposite - * conversion to the method bytesToString(), and byte-based - * data that is converted to a String and back again using these two methods - * is guaranteed to retain its integrity (which may not be the case with - * conversions that reflect a given character set). - * - * @param data The data to be converted. - * @return The converted data. - */ - byte[] stringToBytes(String data); - - /** - * This method can be used to convert data from an array of bytes into - * String form. The conversion does not reflect any particular character - * set, and a byte with the representation 0xYZ will always be converted - * into a character with the hex representation 0x00YZ. It performs the - * opposite conversion to the method stringToBytes(), and - * byte-based data that is converted to a String and back again using these - * two methods is guaranteed to retain its integrity (which may not be the - * case with conversions that reflect a given character set). - * - * @param data The data to be converted. - * @return The converted data. - */ - String bytesToString(byte[] data); - - /** - * This method searches a piece of data for the first occurrence of a - * specified pattern. It works on byte-based data in a way that is similar - * to the way the native Java method String.indexOf() works on - * String-based data. - * - * @param data The data to be searched. - * @param pattern The pattern to be searched for. - * @param caseSensitive Flags whether or not the search is case-sensitive. - * @param from The offset within data where the search should - * begin. - * @param to The offset within data where the search should - * end. - * @return The offset of the first occurrence of the pattern within the - * specified bounds, or -1 if no match is found. - */ - int indexOf(byte[] data, - byte[] pattern, - boolean caseSensitive, - int from, - int to); - - /** - * This method builds an HTTP message containing the specified headers and - * message body. If applicable, the Content-Length header will be added or - * updated, based on the length of the body. - * - * @param headers A list of headers to include in the message. - * @param body The body of the message, of null if the message - * has an empty body. - * @return The resulting full HTTP message. - */ - byte[] buildHttpMessage(List headers, byte[] body); - - /** - * This method creates a GET request to the specified URL. The headers used - * in the request are determined by the Request headers settings as - * configured in Burp Spider's options. - * - * @param url The URL to which the request should be made. - * @return A request to the specified URL. - */ - byte[] buildHttpRequest(URL url); - - /** - * This method adds a new parameter to an HTTP request, and if appropriate - * updates the Content-Length header. - * - * @param request The request to which the parameter should be added. - * @param parameter An IParameter object containing details of - * the parameter to be added. Supported parameter types are: - * PARAM_URL, PARAM_BODY and - * PARAM_COOKIE. - * @return A new HTTP request with the new parameter added. - */ - byte[] addParameter(byte[] request, IParameter parameter); - - /** - * This method removes a parameter from an HTTP request, and if appropriate - * updates the Content-Length header. - * - * @param request The request from which the parameter should be removed. - * @param parameter An IParameter object containing details of - * the parameter to be removed. Supported parameter types are: - * PARAM_URL, PARAM_BODY and - * PARAM_COOKIE. - * @return A new HTTP request with the parameter removed. - */ - byte[] removeParameter(byte[] request, IParameter parameter); - - /** - * This method updates the value of a parameter within an HTTP request, and - * if appropriate updates the Content-Length header. Note: This - * method can only be used to update the value of an existing parameter of a - * specified type. If you need to change the type of an existing parameter, - * you should first call removeParameter() to remove the - * parameter with the old type, and then call addParameter() to - * add a parameter with the new type. - * - * @param request The request containing the parameter to be updated. - * @param parameter An IParameter object containing details of - * the parameter to be updated. Supported parameter types are: - * PARAM_URL, PARAM_BODY and - * PARAM_COOKIE. - * @return A new HTTP request with the parameter updated. - */ - byte[] updateParameter(byte[] request, IParameter parameter); - - /** - * This method can be used to toggle a request's method between GET and - * POST. Parameters are relocated between the URL query string and message - * body as required, and the Content-Length header is created or removed as - * applicable. - * - * @param request The HTTP request whose method should be toggled. - * @return A new HTTP request using the toggled method. - */ - byte[] toggleRequestMethod(byte[] request); - - /** - * This method constructs an IHttpService object based on the - * details provided. - * - * @param host The HTTP service host. - * @param port The HTTP service port. - * @param protocol The HTTP service protocol. - * @return An IHttpService object based on the details - * provided. - */ - IHttpService buildHttpService(String host, int port, String protocol); - - /** - * This method constructs an IHttpService object based on the - * details provided. - * - * @param host The HTTP service host. - * @param port The HTTP service port. - * @param useHttps Flags whether the HTTP service protocol is HTTPS or HTTP. - * @return An IHttpService object based on the details - * provided. - */ - IHttpService buildHttpService(String host, int port, boolean useHttps); - - /** - * This method constructs an IParameter object based on the - * details provided. - * - * @param name The parameter name. - * @param value The parameter value. - * @param type The parameter type, as defined in the IParameter - * interface. - * @return An IParameter object based on the details provided. - */ - IParameter buildParameter(String name, String value, byte type); - - /** - * This method constructs an IScannerInsertionPoint object - * based on the details provided. It can be used to quickly create a simple - * insertion point based on a fixed payload location within a base request. - * - * @param insertionPointName The name of the insertion point. - * @param baseRequest The request from which to build scan requests. - * @param from The offset of the start of the payload location. - * @param to The offset of the end of the payload location. - * @return An IScannerInsertionPoint object based on the - * details provided. - */ - IScannerInsertionPoint makeScannerInsertionPoint( - String insertionPointName, - byte[] baseRequest, - int from, - int to); - - /** - * This method analyzes one or more responses to identify variations in a - * number of attributes and returns an IResponseVariations - * object that can be queried to obtain details of the variations. - * - * @param responses The responses to analyze. - * @return An IResponseVariations object representing the - * variations in the responses. - */ - IResponseVariations analyzeResponseVariations(byte[]... responses); - - /** - * This method analyzes one or more responses to identify the number of - * occurrences of the specified keywords and returns an - * IResponseKeywords object that can be queried to obtain - * details of the number of occurrences of each keyword. - * - * @param keywords The keywords to look for. - * @param responses The responses to analyze. - * @return An IResponseKeywords object representing the counts - * of the keywords appearing in the responses. - */ - IResponseKeywords analyzeResponseKeywords(List keywords, byte[]... responses); -} diff --git a/src/burp/IExtensionStateListener.java b/src/burp/IExtensionStateListener.java deleted file mode 100644 index dad60ee..0000000 --- a/src/burp/IExtensionStateListener.java +++ /dev/null @@ -1,27 +0,0 @@ -package burp; - -/* - * @(#)IExtensionStateListener.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerExtensionStateListener() to - * register an extension state listener. The listener will be notified of - * changes to the extension's state. Note: Any extensions that start - * background threads or open system resources (such as files or database - * connections) should register a listener and terminate threads / close - * resources when the extension is unloaded. - */ -public interface IExtensionStateListener -{ - /** - * This method is called when the extension is unloaded. - */ - void extensionUnloaded(); -} diff --git a/src/burp/IHttpListener.java b/src/burp/IHttpListener.java deleted file mode 100644 index b781c12..0000000 --- a/src/burp/IHttpListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package burp; - -/* - * @(#)IHttpListener.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerHttpListener() to register an - * HTTP listener. The listener will be notified of requests and responses made - * by any Burp tool. Extensions can perform custom analysis or modification of - * these messages by registering an HTTP listener. - */ -public interface IHttpListener -{ - /** - * This method is invoked when an HTTP request is about to be issued, and - * when an HTTP response has been received. - * - * @param toolFlag A flag indicating the Burp tool that issued the request. - * Burp tool flags are defined in the - * IBurpExtenderCallbacks interface. - * @param messageIsRequest Flags whether the method is being invoked for a - * request or response. - * @param messageInfo Details of the request / response to be processed. - * Extensions can call the setter methods on this object to update the - * current message and so modify Burp's behavior. - */ - void processHttpMessage(int toolFlag, - boolean messageIsRequest, - IHttpRequestResponse messageInfo); -} diff --git a/src/burp/IHttpRequestResponse.java b/src/burp/IHttpRequestResponse.java deleted file mode 100644 index 7a239de..0000000 --- a/src/burp/IHttpRequestResponse.java +++ /dev/null @@ -1,102 +0,0 @@ -package burp; - -/* - * @(#)IHttpRequestResponse.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to retrieve and update details about HTTP messages. - * - * Note: The setter methods generally can only be used before the message - * has been processed, and not in read-only contexts. The getter methods - * relating to response details can only be used after the request has been - * issued. - */ -public interface IHttpRequestResponse -{ - /** - * This method is used to retrieve the request message. - * - * @return The request message. - */ - byte[] getRequest(); - - /** - * This method is used to update the request message. - * - * @param message The new request message. - */ - void setRequest(byte[] message); - - /** - * This method is used to retrieve the response message. - * - * @return The response message. - */ - byte[] getResponse(); - - /** - * This method is used to update the response message. - * - * @param message The new response message. - */ - void setResponse(byte[] message); - - /** - * This method is used to retrieve the user-annotated comment for this item, - * if applicable. - * - * @return The user-annotated comment for this item, or null if none is set. - */ - String getComment(); - - /** - * This method is used to update the user-annotated comment for this item. - * - * @param comment The comment to be assigned to this item. - */ - void setComment(String comment); - - /** - * This method is used to retrieve the user-annotated highlight for this - * item, if applicable. - * - * @return The user-annotated highlight for this item, or null if none is - * set. - */ - String getHighlight(); - - /** - * This method is used to update the user-annotated highlight for this item. - * - * @param color The highlight color to be assigned to this item. Accepted - * values are: red, orange, yellow, green, cyan, blue, pink, magenta, gray, - * or a null String to clear any existing highlight. - */ - void setHighlight(String color); - - /** - * This method is used to retrieve the HTTP service for this request / - * response. - * - * @return An - * IHttpService object containing details of the HTTP service. - */ - IHttpService getHttpService(); - - /** - * This method is used to update the HTTP service for this request / - * response. - * - * @param httpService An - * IHttpService object containing details of the new HTTP - * service. - */ - void setHttpService(IHttpService httpService); - -} diff --git a/src/burp/IHttpRequestResponsePersisted.java b/src/burp/IHttpRequestResponsePersisted.java deleted file mode 100644 index 6ba9f6f..0000000 --- a/src/burp/IHttpRequestResponsePersisted.java +++ /dev/null @@ -1,25 +0,0 @@ -package burp; - -/* - * @(#)IHttpRequestResponsePersisted.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used for an - * IHttpRequestResponse object whose request and response messages - * have been saved to temporary files using - * IBurpExtenderCallbacks.saveBuffersToTempFiles(). - */ -public interface IHttpRequestResponsePersisted extends IHttpRequestResponse -{ - /** - * This method is deprecated and no longer performs any action. - */ - @Deprecated - void deleteTempFiles(); -} diff --git a/src/burp/IHttpRequestResponseWithMarkers.java b/src/burp/IHttpRequestResponseWithMarkers.java deleted file mode 100644 index de06e9b..0000000 --- a/src/burp/IHttpRequestResponseWithMarkers.java +++ /dev/null @@ -1,44 +0,0 @@ -package burp; - -/* - * @(#)IHttpRequestResponseWithMarkers.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * This interface is used for an - * IHttpRequestResponse object that has had markers applied. - * Extensions can create instances of this interface using - * IBurpExtenderCallbacks.applyMarkers(), or provide their own - * implementation. Markers are used in various situations, such as specifying - * Intruder payload positions, Scanner insertion points, and highlights in - * Scanner issues. - */ -public interface IHttpRequestResponseWithMarkers extends IHttpRequestResponse -{ - /** - * This method returns the details of the request markers. - * - * @return A list of index pairs representing the offsets of markers for the - * request message. Each item in the list is an int[2] array containing the - * start and end offsets for the marker. The method may return - * null if no request markers are defined. - */ - List getRequestMarkers(); - - /** - * This method returns the details of the response markers. - * - * @return A list of index pairs representing the offsets of markers for the - * response message. Each item in the list is an int[2] array containing the - * start and end offsets for the marker. The method may return - * null if no response markers are defined. - */ - List getResponseMarkers(); -} diff --git a/src/burp/IHttpService.java b/src/burp/IHttpService.java deleted file mode 100644 index d137838..0000000 --- a/src/burp/IHttpService.java +++ /dev/null @@ -1,39 +0,0 @@ -package burp; - -/* - * @(#)IHttpService.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to provide details about an HTTP service, to which - * HTTP requests can be sent. - */ -public interface IHttpService -{ - /** - * This method returns the hostname or IP address for the service. - * - * @return The hostname or IP address for the service. - */ - String getHost(); - - /** - * This method returns the port number for the service. - * - * @return The port number for the service. - */ - int getPort(); - - /** - * This method returns the protocol for the service. - * - * @return The protocol for the service. Expected values are "http" or - * "https". - */ - String getProtocol(); -} diff --git a/src/burp/IInterceptedProxyMessage.java b/src/burp/IInterceptedProxyMessage.java deleted file mode 100644 index cead7f4..0000000 --- a/src/burp/IInterceptedProxyMessage.java +++ /dev/null @@ -1,116 +0,0 @@ -package burp; - -/* - * @(#)IInterceptedProxyMessage.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.net.InetAddress; - -/** - * This interface is used to represent an HTTP message that has been intercepted - * by Burp Proxy. Extensions can register an - * IProxyListener to receive details of proxy messages using this - * interface. * - */ -public interface IInterceptedProxyMessage -{ - /** - * This action causes Burp Proxy to follow the current interception rules to - * determine the appropriate action to take for the message. - */ - int ACTION_FOLLOW_RULES = 0; - /** - * This action causes Burp Proxy to present the message to the user for - * manual review or modification. - */ - int ACTION_DO_INTERCEPT = 1; - /** - * This action causes Burp Proxy to forward the message to the remote server - * or client, without presenting it to the user. - */ - int ACTION_DONT_INTERCEPT = 2; - /** - * This action causes Burp Proxy to drop the message. - */ - int ACTION_DROP = 3; - /** - * This action causes Burp Proxy to follow the current interception rules to - * determine the appropriate action to take for the message, and then make a - * second call to processProxyMessage. - */ - int ACTION_FOLLOW_RULES_AND_REHOOK = 0x10; - /** - * This action causes Burp Proxy to present the message to the user for - * manual review or modification, and then make a second call to - * processProxyMessage. - */ - int ACTION_DO_INTERCEPT_AND_REHOOK = 0x11; - /** - * This action causes Burp Proxy to skip user interception, and then make a - * second call to processProxyMessage. - */ - int ACTION_DONT_INTERCEPT_AND_REHOOK = 0x12; - - /** - * This method retrieves a unique reference number for this - * request/response. - * - * @return An identifier that is unique to a single request/response pair. - * Extensions can use this to correlate details of requests and responses - * and perform processing on the response message accordingly. - */ - int getMessageReference(); - - /** - * This method retrieves details of the intercepted message. - * - * @return An IHttpRequestResponse object containing details of - * the intercepted message. - */ - IHttpRequestResponse getMessageInfo(); - - /** - * This method retrieves the currently defined interception action. The - * default action is - * ACTION_FOLLOW_RULES. If multiple proxy listeners are - * registered, then other listeners may already have modified the - * interception action before it reaches the current listener. This method - * can be used to determine whether this has occurred. - * - * @return The currently defined interception action. Possible values are - * defined within this interface. - */ - int getInterceptAction(); - - /** - * This method is used to update the interception action. - * - * @param interceptAction The new interception action. Possible values are - * defined within this interface. - */ - void setInterceptAction(int interceptAction); - - /** - * This method retrieves the name of the Burp Proxy listener that is - * processing the intercepted message. - * - * @return The name of the Burp Proxy listener that is processing the - * intercepted message. The format is the same as that shown in the Proxy - * Listeners UI - for example, "127.0.0.1:8080". - */ - String getListenerInterface(); - - /** - * This method retrieves the client IP address from which the request for - * the intercepted message was received. - * - * @return The client IP address from which the request for the intercepted - * message was received. - */ - InetAddress getClientIpAddress(); -} diff --git a/src/burp/IIntruderAttack.java b/src/burp/IIntruderAttack.java deleted file mode 100644 index 8aa6b6b..0000000 --- a/src/burp/IIntruderAttack.java +++ /dev/null @@ -1,31 +0,0 @@ -package burp; - -/* - * @(#)IIntruderAttack.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to hold details about an Intruder attack. - */ -public interface IIntruderAttack -{ - /** - * This method is used to retrieve the HTTP service for the attack. - * - * @return The HTTP service for the attack. - */ - IHttpService getHttpService(); - - /** - * This method is used to retrieve the request template for the attack. - * - * @return The request template for the attack. - */ - byte[] getRequestTemplate(); - -} diff --git a/src/burp/IIntruderPayloadGenerator.java b/src/burp/IIntruderPayloadGenerator.java deleted file mode 100644 index 7458620..0000000 --- a/src/burp/IIntruderPayloadGenerator.java +++ /dev/null @@ -1,50 +0,0 @@ -package burp; - -/* - * @(#)IIntruderPayloadGenerator.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used for custom Intruder payload generators. Extensions - * that have registered an - * IIntruderPayloadGeneratorFactory must return a new instance of - * this interface when required as part of a new Intruder attack. - */ -public interface IIntruderPayloadGenerator -{ - /** - * This method is used by Burp to determine whether the payload generator is - * able to provide any further payloads. - * - * @return Extensions should return - * false when all the available payloads have been used up, - * otherwise - * true. - */ - boolean hasMorePayloads(); - - /** - * This method is used by Burp to obtain the value of the next payload. - * - * @param baseValue The base value of the current payload position. This - * value may be - * null if the concept of a base value is not applicable (e.g. - * in a battering ram attack). - * @return The next payload to use in the attack. - */ - byte[] getNextPayload(byte[] baseValue); - - /** - * This method is used by Burp to reset the state of the payload generator - * so that the next call to - * getNextPayload() returns the first payload again. This - * method will be invoked when an attack uses the same payload generator for - * more than one payload position, for example in a sniper attack. - */ - void reset(); -} diff --git a/src/burp/IIntruderPayloadGeneratorFactory.java b/src/burp/IIntruderPayloadGeneratorFactory.java deleted file mode 100644 index b0ef9f0..0000000 --- a/src/burp/IIntruderPayloadGeneratorFactory.java +++ /dev/null @@ -1,40 +0,0 @@ -package burp; - -/* - * @(#)IIntruderPayloadGeneratorFactory.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerIntruderPayloadGeneratorFactory() - * to register a factory for custom Intruder payloads. - */ -public interface IIntruderPayloadGeneratorFactory -{ - /** - * This method is used by Burp to obtain the name of the payload generator. - * This will be displayed as an option within the Intruder UI when the user - * selects to use extension-generated payloads. - * - * @return The name of the payload generator. - */ - String getGeneratorName(); - - /** - * This method is used by Burp when the user starts an Intruder attack that - * uses this payload generator. - * - * @param attack An - * IIntruderAttack object that can be queried to obtain details - * about the attack in which the payload generator will be used. - * @return A new instance of - * IIntruderPayloadGenerator that will be used to generate - * payloads for the attack. - */ - IIntruderPayloadGenerator createNewInstance(IIntruderAttack attack); -} diff --git a/src/burp/IIntruderPayloadProcessor.java b/src/burp/IIntruderPayloadProcessor.java deleted file mode 100644 index bf993c9..0000000 --- a/src/burp/IIntruderPayloadProcessor.java +++ /dev/null @@ -1,45 +0,0 @@ -package burp; - -/* - * @(#)IIntruderPayloadProcessor.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerIntruderPayloadProcessor() to - * register a custom Intruder payload processor. - */ -public interface IIntruderPayloadProcessor -{ - /** - * This method is used by Burp to obtain the name of the payload processor. - * This will be displayed as an option within the Intruder UI when the user - * selects to use an extension-provided payload processor. - * - * @return The name of the payload processor. - */ - String getProcessorName(); - - /** - * This method is invoked by Burp each time the processor should be applied - * to an Intruder payload. - * - * @param currentPayload The value of the payload to be processed. - * @param originalPayload The value of the original payload prior to - * processing by any already-applied processing rules. - * @param baseValue The base value of the payload position, which will be - * replaced with the current payload. - * @return The value of the processed payload. This may be - * null to indicate that the current payload should be skipped, - * and the attack will move directly to the next payload. - */ - byte[] processPayload( - byte[] currentPayload, - byte[] originalPayload, - byte[] baseValue); -} diff --git a/src/burp/IMenuItemHandler.java b/src/burp/IMenuItemHandler.java deleted file mode 100644 index 34313df..0000000 --- a/src/burp/IMenuItemHandler.java +++ /dev/null @@ -1,36 +0,0 @@ -package burp; - -/* - * @(#)IMenuItemHandler.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerMenuItem() to register a custom - * context menu item. - * - * @deprecated Use - * IContextMenuFactory instead. - */ -@Deprecated -public interface IMenuItemHandler -{ - /** - * This method is invoked by Burp Suite when the user clicks on a custom - * menu item which the extension has registered with Burp. - * - * @param menuItemCaption The caption of the menu item which was clicked. - * This parameter enables extensions to provide a single implementation - * which handles multiple different menu items. - * @param messageInfo Details of the HTTP message(s) for which the context - * menu was displayed. - */ - void menuItemClicked( - String menuItemCaption, - IHttpRequestResponse[] messageInfo); -} diff --git a/src/burp/IMessageEditor.java b/src/burp/IMessageEditor.java deleted file mode 100644 index d841a77..0000000 --- a/src/burp/IMessageEditor.java +++ /dev/null @@ -1,78 +0,0 @@ -package burp; - -/* - * @(#)IMessageEditor.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import java.awt.*; - -/** - * This interface is used to provide extensions with an instance of Burp's HTTP - * message editor, for the extension to use in its own UI. Extensions should - * call IBurpExtenderCallbacks.createMessageEditor() to obtain an - * instance of this interface. - */ -public interface IMessageEditor -{ - - /** - * This method returns the UI component of the editor, for extensions to add - * to their own UI. - * - * @return The UI component of the editor. - */ - Component getComponent(); - - /** - * This method is used to display an HTTP message in the editor. - * - * @param message The HTTP message to be displayed. - * @param isRequest Flags whether the message is an HTTP request or - * response. - */ - void setMessage(byte[] message, boolean isRequest); - - /** - * This method is used to retrieve the currently displayed message, which - * may have been modified by the user. - * - * @return The currently displayed HTTP message. - */ - byte[] getMessage(); - - /** - * This method is used to determine whether the current message has been - * modified by the user. - * - * @return An indication of whether the current message has been modified by - * the user since it was first displayed. - */ - boolean isMessageModified(); - - /** - * This method returns the data that is currently selected by the user. - * - * @return The data that is currently selected by the user, or - * null if no selection is made. - */ - byte[] getSelectedData(); - - /** - * This method can be used to retrieve the bounds of the user's selection - * into the displayed message, if applicable. - * - * @return An int[2] array containing the start and end offsets of the - * user's selection within the displayed message. If the user has not made - * any selection in the current message, both offsets indicate the position - * of the caret within the editor. For some editor views, the concept of - * selection within the message does not apply, in which case this method - * returns null. - */ - int[] getSelectionBounds(); -} diff --git a/src/burp/IMessageEditorController.java b/src/burp/IMessageEditorController.java deleted file mode 100644 index df0eb16..0000000 --- a/src/burp/IMessageEditorController.java +++ /dev/null @@ -1,49 +0,0 @@ -package burp; - -/* - * @(#)IMessageEditorController.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used by an - * IMessageEditor to obtain details about the currently displayed - * message. Extensions that create instances of Burp's HTTP message editor can - * optionally provide an implementation of - * IMessageEditorController, which the editor will invoke when it - * requires further information about the current message (for example, to send - * it to another Burp tool). Extensions that provide custom editor tabs via an - * IMessageEditorTabFactory will receive a reference to an - * IMessageEditorController object for each tab instance they - * generate, which the tab can invoke if it requires further information about - * the current message. - */ -public interface IMessageEditorController -{ - /** - * This method is used to retrieve the HTTP service for the current message. - * - * @return The HTTP service for the current message. - */ - IHttpService getHttpService(); - - /** - * This method is used to retrieve the HTTP request associated with the - * current message (which may itself be a response). - * - * @return The HTTP request associated with the current message. - */ - byte[] getRequest(); - - /** - * This method is used to retrieve the HTTP response associated with the - * current message (which may itself be a request). - * - * @return The HTTP response associated with the current message. - */ - byte[] getResponse(); -} diff --git a/src/burp/IMessageEditorTab.java b/src/burp/IMessageEditorTab.java deleted file mode 100644 index bb8a312..0000000 --- a/src/burp/IMessageEditorTab.java +++ /dev/null @@ -1,104 +0,0 @@ -package burp; - -/* - * @(#)IMessageEditorTab.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import java.awt.*; - -/** - * Extensions that register an - * IMessageEditorTabFactory must return instances of this - * interface, which Burp will use to create custom tabs within its HTTP message - * editors. - */ -public interface IMessageEditorTab -{ - /** - * This method returns the caption that should appear on the custom tab when - * it is displayed. Note: Burp invokes this method once when the tab - * is first generated, and the same caption will be used every time the tab - * is displayed. - * - * @return The caption that should appear on the custom tab when it is - * displayed. - */ - String getTabCaption(); - - /** - * This method returns the component that should be used as the contents of - * the custom tab when it is displayed. Note: Burp invokes this - * method once when the tab is first generated, and the same component will - * be used every time the tab is displayed. - * - * @return The component that should be used as the contents of the custom - * tab when it is displayed. - */ - Component getUiComponent(); - - /** - * The hosting editor will invoke this method before it displays a new HTTP - * message, so that the custom tab can indicate whether it should be enabled - * for that message. - * - * @param content The message that is about to be displayed, or a zero-length - * array if the existing message is to be cleared. - * @param isRequest Indicates whether the message is a request or a - * response. - * @return The method should return - * true if the custom tab is able to handle the specified - * message, and so will be displayed within the editor. Otherwise, the tab - * will be hidden while this message is displayed. - */ - boolean isEnabled(byte[] content, boolean isRequest); - - /** - * The hosting editor will invoke this method to display a new message or to - * clear the existing message. This method will only be called with a new - * message if the tab has already returned - * true to a call to - * isEnabled() with the same message details. - * - * @param content The message that is to be displayed, or - * null if the tab should clear its contents and disable any - * editable controls. - * @param isRequest Indicates whether the message is a request or a - * response. - */ - void setMessage(byte[] content, boolean isRequest); - - /** - * This method returns the currently displayed message. - * - * @return The currently displayed message. - */ - byte[] getMessage(); - - /** - * This method is used to determine whether the currently displayed message - * has been modified by the user. The hosting editor will always call - * getMessage() before calling this method, so any pending - * edits should be completed within - * getMessage(). - * - * @return The method should return - * true if the user has modified the current message since it - * was first displayed. - */ - boolean isModified(); - - /** - * This method is used to retrieve the data that is currently selected by - * the user. - * - * @return The data that is currently selected by the user. This may be - * null if no selection is currently made. - */ - byte[] getSelectedData(); -} diff --git a/src/burp/IMessageEditorTabFactory.java b/src/burp/IMessageEditorTabFactory.java deleted file mode 100644 index 6aae96e..0000000 --- a/src/burp/IMessageEditorTabFactory.java +++ /dev/null @@ -1,38 +0,0 @@ -package burp; - -/* - * @(#)IMessageEditorTabFactory.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerMessageEditorTabFactory() to - * register a factory for custom message editor tabs. This allows extensions to - * provide custom rendering or editing of HTTP messages, within Burp's own HTTP - * editor. - */ -public interface IMessageEditorTabFactory -{ - /** - * Burp will call this method once for each HTTP message editor, and the - * factory should provide a new instance of an - * IMessageEditorTab object. - * - * @param controller An - * IMessageEditorController object, which the new tab can query - * to retrieve details about the currently displayed message. This may be - * null for extension-invoked message editors where the - * extension has not provided an editor controller. - * @param editable Indicates whether the hosting editor is editable or - * read-only. - * @return A new - * IMessageEditorTab object for use within the message editor. - */ - IMessageEditorTab createNewInstance(IMessageEditorController controller, - boolean editable); -} diff --git a/src/burp/IParameter.java b/src/burp/IParameter.java deleted file mode 100644 index 1beb804..0000000 --- a/src/burp/IParameter.java +++ /dev/null @@ -1,104 +0,0 @@ -package burp; - -/* - * @(#)IParameter.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to hold details about an HTTP request parameter. - */ -public interface IParameter -{ - /** - * Used to indicate a parameter within the URL query string. - */ - byte PARAM_URL = 0; - /** - * Used to indicate a parameter within the message body. - */ - byte PARAM_BODY = 1; - /** - * Used to indicate an HTTP cookie. - */ - byte PARAM_COOKIE = 2; - /** - * Used to indicate an item of data within an XML structure. - */ - byte PARAM_XML = 3; - /** - * Used to indicate the value of a tag attribute within an XML structure. - */ - byte PARAM_XML_ATTR = 4; - /** - * Used to indicate the value of a parameter attribute within a multi-part - * message body (such as the name of an uploaded file). - */ - byte PARAM_MULTIPART_ATTR = 5; - /** - * Used to indicate an item of data within a JSON structure. - */ - byte PARAM_JSON = 6; - - /** - * This method is used to retrieve the parameter type. - * - * @return The parameter type. The available types are defined within this - * interface. - */ - byte getType(); - - /** - * This method is used to retrieve the parameter name. - * - * @return The parameter name. - */ - String getName(); - - /** - * This method is used to retrieve the parameter value. - * - * @return The parameter value. - */ - String getValue(); - - /** - * This method is used to retrieve the start offset of the parameter name - * within the HTTP request. - * - * @return The start offset of the parameter name within the HTTP request, - * or -1 if the parameter is not associated with a specific request. - */ - int getNameStart(); - - /** - * This method is used to retrieve the end offset of the parameter name - * within the HTTP request. - * - * @return The end offset of the parameter name within the HTTP request, or - * -1 if the parameter is not associated with a specific request. - */ - int getNameEnd(); - - /** - * This method is used to retrieve the start offset of the parameter value - * within the HTTP request. - * - * @return The start offset of the parameter value within the HTTP request, - * or -1 if the parameter is not associated with a specific request. - */ - int getValueStart(); - - /** - * This method is used to retrieve the end offset of the parameter value - * within the HTTP request. - * - * @return The end offset of the parameter value within the HTTP request, or - * -1 if the parameter is not associated with a specific request. - */ - int getValueEnd(); -} diff --git a/src/burp/IProxyListener.java b/src/burp/IProxyListener.java deleted file mode 100644 index e8fb903..0000000 --- a/src/burp/IProxyListener.java +++ /dev/null @@ -1,37 +0,0 @@ -package burp; - -/* - * @(#)IProxyListener.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerProxyListener() to register a - * Proxy listener. The listener will be notified of requests and responses being - * processed by the Proxy tool. Extensions can perform custom analysis or - * modification of these messages, and control in-UI message interception, by - * registering a proxy listener. - */ -public interface IProxyListener -{ - /** - * This method is invoked when an HTTP message is being processed by the - * Proxy. - * - * @param messageIsRequest Indicates whether the HTTP message is a request - * or a response. - * @param message An - * IInterceptedProxyMessage object that extensions can use to - * query and update details of the message, and control whether the message - * should be intercepted and displayed to the user for manual review or - * modification. - */ - void processProxyMessage( - boolean messageIsRequest, - IInterceptedProxyMessage message); -} diff --git a/src/burp/IRequestInfo.java b/src/burp/IRequestInfo.java deleted file mode 100644 index 013a650..0000000 --- a/src/burp/IRequestInfo.java +++ /dev/null @@ -1,95 +0,0 @@ -package burp; - -/* - * @(#)IRequestInfo.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.net.URL; -import java.util.List; - -/** - * This interface is used to retrieve key details about an HTTP request. - * Extensions can obtain an - * IRequestInfo object for a given request by calling - * IExtensionHelpers.analyzeRequest(). - */ -public interface IRequestInfo -{ - /** - * Used to indicate that there is no content. - */ - byte CONTENT_TYPE_NONE = 0; - /** - * Used to indicate URL-encoded content. - */ - byte CONTENT_TYPE_URL_ENCODED = 1; - /** - * Used to indicate multi-part content. - */ - byte CONTENT_TYPE_MULTIPART = 2; - /** - * Used to indicate XML content. - */ - byte CONTENT_TYPE_XML = 3; - /** - * Used to indicate JSON content. - */ - byte CONTENT_TYPE_JSON = 4; - /** - * Used to indicate AMF content. - */ - byte CONTENT_TYPE_AMF = 5; - /** - * Used to indicate unknown content. - */ - byte CONTENT_TYPE_UNKNOWN = -1; - - /** - * This method is used to obtain the HTTP method used in the request. - * - * @return The HTTP method used in the request. - */ - String getMethod(); - - /** - * This method is used to obtain the URL in the request. - * - * @return The URL in the request. - */ - URL getUrl(); - - /** - * This method is used to obtain the HTTP headers contained in the request. - * - * @return The HTTP headers contained in the request. - */ - List getHeaders(); - - /** - * This method is used to obtain the parameters contained in the request. - * - * @return The parameters contained in the request. - */ - List getParameters(); - - /** - * This method is used to obtain the offset within the request where the - * message body begins. - * - * @return The offset within the request where the message body begins. - */ - int getBodyOffset(); - - /** - * This method is used to obtain the content type of the message body. - * - * @return An indication of the content type of the message body. Available - * types are defined within this interface. - */ - byte getContentType(); -} diff --git a/src/burp/IResponseInfo.java b/src/burp/IResponseInfo.java deleted file mode 100644 index a887d2f..0000000 --- a/src/burp/IResponseInfo.java +++ /dev/null @@ -1,73 +0,0 @@ -package burp; - -/* - * @(#)IResponseInfo.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * This interface is used to retrieve key details about an HTTP response. - * Extensions can obtain an - * IResponseInfo object for a given response by calling - * IExtensionHelpers.analyzeResponse(). - */ -public interface IResponseInfo -{ - /** - * This method is used to obtain the HTTP headers contained in the response. - * - * @return The HTTP headers contained in the response. - */ - List getHeaders(); - - /** - * This method is used to obtain the offset within the response where the - * message body begins. - * - * @return The offset within the response where the message body begins. - */ - int getBodyOffset(); - - /** - * This method is used to obtain the HTTP status code contained in the - * response. - * - * @return The HTTP status code contained in the response. - */ - short getStatusCode(); - - /** - * This method is used to obtain details of the HTTP cookies set in the - * response. - * - * @return A list of ICookie objects representing the cookies - * set in the response, if any. - */ - List getCookies(); - - /** - * This method is used to obtain the MIME type of the response, as stated in - * the HTTP headers. - * - * @return A textual label for the stated MIME type, or an empty String if - * this is not known or recognized. The possible labels are the same as - * those used in the main Burp UI. - */ - String getStatedMimeType(); - - /** - * This method is used to obtain the MIME type of the response, as inferred - * from the contents of the HTTP message body. - * - * @return A textual label for the inferred MIME type, or an empty String if - * this is not known or recognized. The possible labels are the same as - * those used in the main Burp UI. - */ - String getInferredMimeType(); -} diff --git a/src/burp/IResponseKeywords.java b/src/burp/IResponseKeywords.java deleted file mode 100644 index 924e9dc..0000000 --- a/src/burp/IResponseKeywords.java +++ /dev/null @@ -1,58 +0,0 @@ -package burp; - -/* - * @(#)IResponseKeywords.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * This interface is used to represent the counts of keywords appearing in a - * number of HTTP responses. - */ -public interface IResponseKeywords -{ - - /** - * This method is used to obtain the list of keywords whose counts vary - * between the analyzed responses. - * - * @return The keywords whose counts vary between the analyzed responses. - */ - List getVariantKeywords(); - - /** - * This method is used to obtain the list of keywords whose counts do not - * vary between the analyzed responses. - * - * @return The keywords whose counts do not vary between the analyzed - * responses. - */ - List getInvariantKeywords(); - - /** - * This method is used to obtain the number of occurrences of an individual - * keyword in a response. - * - * @param keyword The keyword whose count will be retrieved. - * @param responseIndex The index of the response. Note responses are - * indexed from zero in the order they were originally supplied to the - * IExtensionHelpers.analyzeResponseKeywords() and - * IResponseKeywords.updateWith() methods. - * @return The number of occurrences of the specified keyword for the - * specified response. - */ - int getKeywordCount(String keyword, int responseIndex); - - /** - * This method is used to update the analysis based on additional responses. - * - * @param responses The new responses to include in the analysis. - */ - void updateWith(byte[]... responses); -} diff --git a/src/burp/IResponseVariations.java b/src/burp/IResponseVariations.java deleted file mode 100644 index 39cee40..0000000 --- a/src/burp/IResponseVariations.java +++ /dev/null @@ -1,62 +0,0 @@ -package burp; - -/* - * @(#)IResponseVariations.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * This interface is used to represent variations between a number HTTP - * responses, according to various attributes. - */ -public interface IResponseVariations -{ - - /** - * This method is used to obtain the list of attributes that vary between - * the analyzed responses. - * - * @return The attributes that vary between the analyzed responses. - */ - List getVariantAttributes(); - - /** - * This method is used to obtain the list of attributes that do not vary - * between the analyzed responses. - * - * @return The attributes that do not vary between the analyzed responses. - */ - List getInvariantAttributes(); - - /** - * This method is used to obtain the value of an individual attribute in a - * response. Note that the values of some attributes are intrinsically - * meaningful (e.g. a word count) while the values of others are less so - * (e.g. a checksum of the HTML tag names). - * - * @param attributeName The name of the attribute whose value will be - * retrieved. Extension authors can obtain the list of supported attributes - * by generating an IResponseVariations object for a single - * response and calling - * IResponseVariations.getInvariantAttributes(). - * @param responseIndex The index of the response. Note that responses are - * indexed from zero in the order they were originally supplied to the - * IExtensionHelpers.analyzeResponseVariations() and - * IResponseVariations.updateWith() methods. - * @return The value of the specified attribute for the specified response. - */ - int getAttributeValue(String attributeName, int responseIndex); - - /** - * This method is used to update the analysis based on additional responses. - * - * @param responses The new responses to include in the analysis. - */ - void updateWith(byte[]... responses); -} diff --git a/src/burp/IScanIssue.java b/src/burp/IScanIssue.java deleted file mode 100644 index 9529cbb..0000000 --- a/src/burp/IScanIssue.java +++ /dev/null @@ -1,123 +0,0 @@ -package burp; - -/* - * @(#)IScanIssue.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to retrieve details of Scanner issues. Extensions can - * obtain details of issues by registering an IScannerListener or - * by calling IBurpExtenderCallbacks.getScanIssues(). Extensions - * can also add custom Scanner issues by registering an - * IScannerCheck or calling - * IBurpExtenderCallbacks.addScanIssue(), and providing their own - * implementations of this interface. Note that issue descriptions and other - * text generated by extensions are subject to an HTML whitelist that allows - * only formatting tags and simple hyperlinks. - */ -public interface IScanIssue -{ - - /** - * This method returns the URL for which the issue was generated. - * - * @return The URL for which the issue was generated. - */ - java.net.URL getUrl(); - - /** - * This method returns the name of the issue type. - * - * @return The name of the issue type (e.g. "SQL injection"). - */ - String getIssueName(); - - /** - * This method returns a numeric identifier of the issue type. See the Burp - * Scanner help documentation for a listing of all the issue types. - * - * @return A numeric identifier of the issue type. - */ - int getIssueType(); - - /** - * This method returns the issue severity level. - * - * @return The issue severity level. Expected values are "High", "Medium", - * "Low", "Information" or "False positive". - * - */ - String getSeverity(); - - /** - * This method returns the issue confidence level. - * - * @return The issue confidence level. Expected values are "Certain", "Firm" - * or "Tentative". - */ - String getConfidence(); - - /** - * This method returns a background description for this type of issue. - * - * @return A background description for this type of issue, or - * null if none applies. A limited set of HTML tags may be - * used. - */ - String getIssueBackground(); - - /** - * This method returns a background description of the remediation for this - * type of issue. - * - * @return A background description of the remediation for this type of - * issue, or null if none applies. A limited set of HTML tags - * may be used. - */ - String getRemediationBackground(); - - /** - * This method returns detailed information about this specific instance of - * the issue. - * - * @return Detailed information about this specific instance of the issue, - * or null if none applies. A limited set of HTML tags may be - * used. - */ - String getIssueDetail(); - - /** - * This method returns detailed information about the remediation for this - * specific instance of the issue. - * - * @return Detailed information about the remediation for this specific - * instance of the issue, or null if none applies. A limited - * set of HTML tags may be used. - */ - String getRemediationDetail(); - - /** - * This method returns the HTTP messages on the basis of which the issue was - * generated. - * - * @return The HTTP messages on the basis of which the issue was generated. - * Note: The items in this array should be instances of - * IHttpRequestResponseWithMarkers if applicable, so that - * details of the relevant portions of the request and response messages are - * available. - */ - IHttpRequestResponse[] getHttpMessages(); - - /** - * This method returns the HTTP service for which the issue was generated. - * - * @return The HTTP service for which the issue was generated. - */ - IHttpService getHttpService(); - -} diff --git a/src/burp/IScanQueueItem.java b/src/burp/IScanQueueItem.java deleted file mode 100644 index 47d9f34..0000000 --- a/src/burp/IScanQueueItem.java +++ /dev/null @@ -1,80 +0,0 @@ -package burp; - -/* - * @(#)IScanQueueItem.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to retrieve details of items in the Burp Scanner - * active scan queue. Extensions can obtain references to scan queue items by - * calling - * IBurpExtenderCallbacks.doActiveScan(). - */ -public interface IScanQueueItem -{ - /** - * This method returns a description of the status of the scan queue item. - * - * @return A description of the status of the scan queue item. - */ - String getStatus(); - - /** - * This method returns an indication of the percentage completed for the - * scan queue item. - * - * @return An indication of the percentage completed for the scan queue - * item. - */ - byte getPercentageComplete(); - - /** - * This method returns the number of requests that have been made for the - * scan queue item. - * - * @return The number of requests that have been made for the scan queue - * item. - */ - int getNumRequests(); - - /** - * This method returns the number of network errors that have occurred for - * the scan queue item. - * - * @return The number of network errors that have occurred for the scan - * queue item. - */ - int getNumErrors(); - - /** - * This method returns the number of attack insertion points being used for - * the scan queue item. - * - * @return The number of attack insertion points being used for the scan - * queue item. - */ - int getNumInsertionPoints(); - - /** - * This method allows the scan queue item to be canceled. - */ - void cancel(); - - /** - * This method returns details of the issues generated for the scan queue - * item. Note: different items within the scan queue may contain - * duplicated versions of the same issues - for example, if the same request - * has been scanned multiple times. Duplicated issues are consolidated in - * the main view of scan results. Extensions can register an - * IScannerListener to get details only of unique, newly - * discovered Scanner issues post-consolidation. - * - * @return Details of the issues generated for the scan queue item. - */ - IScanIssue[] getIssues(); -} diff --git a/src/burp/IScannerCheck.java b/src/burp/IScannerCheck.java deleted file mode 100644 index 976f3d7..0000000 --- a/src/burp/IScannerCheck.java +++ /dev/null @@ -1,83 +0,0 @@ -package burp; - -/* - * @(#)IScannerCheck.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerScannerCheck() to register a - * custom Scanner check. When performing scanning, Burp will ask the check to - * perform active or passive scanning on the base request, and report any - * Scanner issues that are identified. - */ -public interface IScannerCheck -{ - - /** - * The Scanner invokes this method for each base request / response that is - * passively scanned. Note: Extensions should only analyze the - * HTTP messages provided during passive scanning, and should not make any - * new HTTP requests of their own. - * - * @param baseRequestResponse The base HTTP request / response that should - * be passively scanned. - * @return A list of IScanIssue objects, or null - * if no issues are identified. - */ - List doPassiveScan(IHttpRequestResponse baseRequestResponse); - - /** - * The Scanner invokes this method for each insertion point that is actively - * scanned. Extensions may issue HTTP requests as required to carry out - * active scanning, and should use the - * IScannerInsertionPoint object provided to build scan - * requests for particular payloads. - * Note: - * Scan checks should submit raw non-encoded payloads to insertion points, - * and the insertion point has responsibility for performing any data - * encoding that is necessary given the nature and location of the insertion - * point. - * - * @param baseRequestResponse The base HTTP request / response that should - * be actively scanned. - * @param insertionPoint An IScannerInsertionPoint object that - * can be queried to obtain details of the insertion point being tested, and - * can be used to build scan requests for particular payloads. - * @return A list of IScanIssue objects, or null - * if no issues are identified. - */ - List doActiveScan( - IHttpRequestResponse baseRequestResponse, - IScannerInsertionPoint insertionPoint); - - /** - * The Scanner invokes this method when the custom Scanner check has - * reported multiple issues for the same URL path. This can arise either - * because there are multiple distinct vulnerabilities, or because the same - * (or a similar) request has been scanned more than once. The custom check - * should determine whether the issues are duplicates. In most cases, where - * a check uses distinct issue names or descriptions for distinct issues, - * the consolidation process will simply be a matter of comparing these - * features for the two issues. - * - * @param existingIssue An issue that was previously reported by this - * Scanner check. - * @param newIssue An issue at the same URL path that has been newly - * reported by this Scanner check. - * @return An indication of which issue(s) should be reported in the main - * Scanner results. The method should return -1 to report the - * existing issue only, 0 to report both issues, and - * 1 to report the new issue only. - */ - int consolidateDuplicateIssues( - IScanIssue existingIssue, - IScanIssue newIssue); -} diff --git a/src/burp/IScannerInsertionPoint.java b/src/burp/IScannerInsertionPoint.java deleted file mode 100644 index f38d8ac..0000000 --- a/src/burp/IScannerInsertionPoint.java +++ /dev/null @@ -1,174 +0,0 @@ -package burp; - -/* - * @(#)IScannerInsertionPoint.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to define an insertion point for use by active Scanner - * checks. Extensions can obtain instances of this interface by registering an - * IScannerCheck, or can create instances for use by Burp's own - * scan checks by registering an - * IScannerInsertionPointProvider. - */ -public interface IScannerInsertionPoint -{ - - /** - * Used to indicate where the payload is inserted into the value of a URL - * parameter. - */ - byte INS_PARAM_URL = 0x00; - /** - * Used to indicate where the payload is inserted into the value of a body - * parameter. - */ - byte INS_PARAM_BODY = 0x01; - /** - * Used to indicate where the payload is inserted into the value of an HTTP - * cookie. - */ - byte INS_PARAM_COOKIE = 0x02; - /** - * Used to indicate where the payload is inserted into the value of an item - * of data within an XML data structure. - */ - byte INS_PARAM_XML = 0x03; - /** - * Used to indicate where the payload is inserted into the value of a tag - * attribute within an XML structure. - */ - byte INS_PARAM_XML_ATTR = 0x04; - /** - * Used to indicate where the payload is inserted into the value of a - * parameter attribute within a multi-part message body (such as the name of - * an uploaded file). - */ - byte INS_PARAM_MULTIPART_ATTR = 0x05; - /** - * Used to indicate where the payload is inserted into the value of an item - * of data within a JSON structure. - */ - byte INS_PARAM_JSON = 0x06; - /** - * Used to indicate where the payload is inserted into the value of an AMF - * parameter. - */ - byte INS_PARAM_AMF = 0x07; - /** - * Used to indicate where the payload is inserted into the value of an HTTP - * request header. - */ - byte INS_HEADER = 0x20; - /** - * Used to indicate where the payload is inserted into a URL path folder. - */ - byte INS_URL_PATH_FOLDER = 0x21; - /** - * Used to indicate where the payload is inserted into a URL path folder. - * This is now deprecated; use INS_URL_PATH_FOLDER instead. - */ - @Deprecated - byte INS_URL_PATH_REST = INS_URL_PATH_FOLDER; - /** - * Used to indicate where the payload is inserted into the name of an added - * URL parameter. - */ - byte INS_PARAM_NAME_URL = 0x22; - /** - * Used to indicate where the payload is inserted into the name of an added - * body parameter. - */ - byte INS_PARAM_NAME_BODY = 0x23; - /** - * Used to indicate where the payload is inserted into the body of the HTTP - * request. - */ - byte INS_ENTIRE_BODY = 0x24; - /** - * Used to indicate where the payload is inserted into the URL path - * filename. - */ - byte INS_URL_PATH_FILENAME = 0x25; - /** - * Used to indicate where the payload is inserted at a location manually - * configured by the user. - */ - byte INS_USER_PROVIDED = 0x40; - /** - * Used to indicate where the insertion point is provided by an - * extension-registered - * IScannerInsertionPointProvider. - */ - byte INS_EXTENSION_PROVIDED = 0x41; - /** - * Used to indicate where the payload is inserted at an unknown location - * within the request. - */ - byte INS_UNKNOWN = 0x7f; - - /** - * This method returns the name of the insertion point. - * - * @return The name of the insertion point (for example, a description of a - * particular request parameter). - */ - String getInsertionPointName(); - - /** - * This method returns the base value for this insertion point. - * - * @return the base value that appears in this insertion point in the base - * request being scanned, or null if there is no value in the - * base request that corresponds to this insertion point. - */ - String getBaseValue(); - - /** - * This method is used to build a request with the specified payload placed - * into the insertion point. There is no requirement for extension-provided - * insertion points to adjust the Content-Length header in requests if the - * body length has changed, although Burp-provided insertion points will - * always do this and will return a request with a valid Content-Length - * header. - * Note: - * Scan checks should submit raw non-encoded payloads to insertion points, - * and the insertion point has responsibility for performing any data - * encoding that is necessary given the nature and location of the insertion - * point. - * - * @param payload The payload that should be placed into the insertion - * point. - * @return The resulting request. - */ - byte[] buildRequest(byte[] payload); - - /** - * This method is used to determine the offsets of the payload value within - * the request, when it is placed into the insertion point. Scan checks may - * invoke this method when reporting issues, so as to highlight the relevant - * part of the request within the UI. - * - * @param payload The payload that should be placed into the insertion - * point. - * @return An int[2] array containing the start and end offsets of the - * payload within the request, or null if this is not applicable (for - * example, where the insertion point places a payload into a serialized - * data structure, the raw payload may not literally appear anywhere within - * the resulting request). - */ - int[] getPayloadOffsets(byte[] payload); - - /** - * This method returns the type of the insertion point. - * - * @return The type of the insertion point. Available types are defined in - * this interface. - */ - byte getInsertionPointType(); -} diff --git a/src/burp/IScannerInsertionPointProvider.java b/src/burp/IScannerInsertionPointProvider.java deleted file mode 100644 index 41472a1..0000000 --- a/src/burp/IScannerInsertionPointProvider.java +++ /dev/null @@ -1,38 +0,0 @@ -package burp; - -/* - * @(#)IScannerInsertionPointProvider.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -import java.util.List; - -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerScannerInsertionPointProvider() - * to register a factory for custom Scanner insertion points. - */ -public interface IScannerInsertionPointProvider -{ - /** - * When a request is actively scanned, the Scanner will invoke this method, - * and the provider should provide a list of custom insertion points that - * will be used in the scan. Note: these insertion points are used in - * addition to those that are derived from Burp Scanner's configuration, and - * those provided by any other Burp extensions. - * - * @param baseRequestResponse The base request that will be actively - * scanned. - * @return A list of - * IScannerInsertionPoint objects that should be used in the - * scanning, or - * null if no custom insertion points are applicable for this - * request. - */ - List getInsertionPoints( - IHttpRequestResponse baseRequestResponse); -} diff --git a/src/burp/IScannerListener.java b/src/burp/IScannerListener.java deleted file mode 100644 index 0bd51d9..0000000 --- a/src/burp/IScannerListener.java +++ /dev/null @@ -1,30 +0,0 @@ -package burp; - -/* - * @(#)IScannerListener.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerScannerListener() to register a - * Scanner listener. The listener will be notified of new issues that are - * reported by the Scanner tool. Extensions can perform custom analysis or - * logging of Scanner issues by registering a Scanner listener. - */ -public interface IScannerListener -{ - /** - * This method is invoked when a new issue is added to Burp Scanner's - * results. - * - * @param issue An - * IScanIssue object that the extension can query to obtain - * details about the new issue. - */ - void newScanIssue(IScanIssue issue); -} diff --git a/src/burp/IScopeChangeListener.java b/src/burp/IScopeChangeListener.java deleted file mode 100644 index a289388..0000000 --- a/src/burp/IScopeChangeListener.java +++ /dev/null @@ -1,25 +0,0 @@ -package burp; - -/* - * @(#)IScopeChangeListener.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerScopeChangeListener() to register - * a scope change listener. The listener will be notified whenever a change - * occurs to Burp's suite-wide target scope. - */ -public interface IScopeChangeListener -{ - /** - * This method is invoked whenever a change occurs to Burp's suite-wide - * target scope. - */ - void scopeChanged(); -} diff --git a/src/burp/ISessionHandlingAction.java b/src/burp/ISessionHandlingAction.java deleted file mode 100644 index c953e22..0000000 --- a/src/burp/ISessionHandlingAction.java +++ /dev/null @@ -1,51 +0,0 @@ -package burp; - -/* - * @(#)ISessionHandlingAction.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * Extensions can implement this interface and then call - * IBurpExtenderCallbacks.registerSessionHandlingAction() to - * register a custom session handling action. Each registered action will be - * available within the session handling rule UI for the user to select as a - * rule action. Users can choose to invoke an action directly in its own right, - * or following execution of a macro. - */ -public interface ISessionHandlingAction -{ - /** - * This method is used by Burp to obtain the name of the session handling - * action. This will be displayed as an option within the session handling - * rule editor when the user selects to execute an extension-provided - * action. - * - * @return The name of the action. - */ - String getActionName(); - - /** - * This method is invoked when the session handling action should be - * executed. This may happen as an action in its own right, or as a - * sub-action following execution of a macro. - * - * @param currentRequest The base request that is currently being processed. - * The action can query this object to obtain details about the base - * request. It can issue additional requests of its own if necessary, and - * can use the setter methods on this object to update the base request. - * @param macroItems If the action is invoked following execution of a - * macro, this parameter contains the result of executing the macro. - * Otherwise, it is - * null. Actions can use the details of the macro items to - * perform custom analysis of the macro to derive values of non-standard - * session handling tokens, etc. - */ - void performAction( - IHttpRequestResponse currentRequest, - IHttpRequestResponse[] macroItems); -} diff --git a/src/burp/ITab.java b/src/burp/ITab.java deleted file mode 100644 index c114593..0000000 --- a/src/burp/ITab.java +++ /dev/null @@ -1,39 +0,0 @@ -package burp; - -/* - * @(#)ITab.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import java.awt.*; - -/** - * This interface is used to provide Burp with details of a custom tab that will - * be added to Burp's UI, using a method such as - * IBurpExtenderCallbacks.addSuiteTab(). - */ -public interface ITab -{ - /** - * Burp uses this method to obtain the caption that should appear on the - * custom tab when it is displayed. - * - * @return The caption that should appear on the custom tab when it is - * displayed. - */ - String getTabCaption(); - - /** - * Burp uses this method to obtain the component that should be used as the - * contents of the custom tab when it is displayed. - * - * @return The component that should be used as the contents of the custom - * tab when it is displayed. - */ - Component getUiComponent(); -} diff --git a/src/burp/ITempFile.java b/src/burp/ITempFile.java deleted file mode 100644 index d20785c..0000000 --- a/src/burp/ITempFile.java +++ /dev/null @@ -1,33 +0,0 @@ -package burp; - -/* - * @(#)ITempFile.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ -/** - * This interface is used to hold details of a temporary file that has been - * created via a call to - * IBurpExtenderCallbacks.saveToTempFile(). - * - */ -public interface ITempFile -{ - /** - * This method is used to retrieve the contents of the buffer that was saved - * in the temporary file. - * - * @return The contents of the buffer that was saved in the temporary file. - */ - byte[] getBuffer(); - - /** - * This method is deprecated and no longer performs any action. - */ - @Deprecated - void delete(); -} diff --git a/src/burp/ITextEditor.java b/src/burp/ITextEditor.java deleted file mode 100644 index f1f2720..0000000 --- a/src/burp/ITextEditor.java +++ /dev/null @@ -1,91 +0,0 @@ -package burp; - -/* - * @(#)ITextEditor.java - * - * Copyright PortSwigger Ltd. All rights reserved. - * - * This code may be used to extend the functionality of Burp Suite Community Edition - * and Burp Suite Professional, provided that this usage does not violate the - * license terms for those products. - */ - -import java.awt.*; - -/** - * This interface is used to provide extensions with an instance of Burp's raw - * text editor, for the extension to use in its own UI. Extensions should call - * IBurpExtenderCallbacks.createTextEditor() to obtain an instance - * of this interface. - */ -public interface ITextEditor -{ - /** - * This method returns the UI component of the editor, for extensions to add - * to their own UI. - * - * @return The UI component of the editor. - */ - Component getComponent(); - - /** - * This method is used to control whether the editor is currently editable. - * This status can be toggled on and off as required. - * - * @param editable Indicates whether the editor should be currently - * editable. - */ - void setEditable(boolean editable); - - /** - * This method is used to update the currently displayed text in the editor. - * - * @param text The text to be displayed. - */ - void setText(byte[] text); - - /** - * This method is used to retrieve the currently displayed text. - * - * @return The currently displayed text. - */ - byte[] getText(); - - /** - * This method is used to determine whether the user has modified the - * contents of the editor. - * - * @return An indication of whether the user has modified the contents of - * the editor since the last call to - * setText(). - */ - boolean isTextModified(); - - /** - * This method is used to obtain the currently selected text. - * - * @return The currently selected text, or - * null if the user has not made any selection. - */ - byte[] getSelectedText(); - - /** - * This method can be used to retrieve the bounds of the user's selection - * into the displayed text, if applicable. - * - * @return An int[2] array containing the start and end offsets of the - * user's selection within the displayed text. If the user has not made any - * selection in the current message, both offsets indicate the position of - * the caret within the editor. - */ - int[] getSelectionBounds(); - - /** - * This method is used to update the search expression that is shown in the - * search bar below the editor. The editor will automatically highlight any - * regions of the displayed text that match the search expression. - * - * @param expression The search expression. - */ - void setSearchExpression(String expression); -} diff --git a/src/teamextension/BurpTeamPanel.java b/src/teamextension/BurpTeamPanel.java index 293cb80..a05de3b 100644 --- a/src/teamextension/BurpTeamPanel.java +++ b/src/teamextension/BurpTeamPanel.java @@ -262,18 +262,20 @@ public void ancestorMoved(AncestorEvent event) { gridBagConstraints.gridy = 0; add(infoPanel, gridBagConstraints); infoPanel.setLayout(new GridLayout(1, 1, 0, 0)); - JLabel explainer = new JLabel(); - explainer.setHorizontalAlignment(SwingConstants.CENTER); + JTextArea explainer = new JTextArea(); + explainer.setLineWrap(true); + explainer.setWrapStyleWord(true); + explainer.setEditable(false); + //explainer.setHorizontalAlignment(SwingConstants.CENTER); + explainer.setText("Welcome to Burp Suite Team Collaborator!\n" + + "This extension allows you to work in tandem with multiple BurpSuite users by sharing their requests with you.\n" + + "Any request that comes through their proxy will show up in your site map as well!"); infoPanel.add(explainer); - explainer.setText("Welcome to the Burp Suite Team " + - "Collaborator!
This extension allows you to work in " + - "tandem with multiple BurpSuite users by sharing their requests " + - "with you. Any request that comes through their proxy will " + - "show up in your site map as well.\n"); + JPanel statusPanel = generatePanel(0, "Server Alerts"); statusPanel.setLayout(new BorderLayout(0, 0)); - + statusText = new JTextPane(); statusText.setEditable(false); JScrollPane scrollPane = new JScrollPane(statusText); @@ -667,11 +669,12 @@ public void ancestorRemoved(AncestorEvent event) { } @Override - public void ancestorMoved(AncestorEvent event) { + public void ancestorMoved(AncestorEvent event) { //Not needed } }); - optionsPane.addTab("Comments", commentsScrollPane); + //disabling comments. Not convinced it's all that useful, may revisit. + //optionsPane.addTab("Comments", commentsScrollPane); //end comments panel } diff --git a/target/BurpSuiteCollaborationClient.jar b/target/BurpSuiteCollaborationClient.jar index 81a51c9f525772010aaebf6d7dfe57888d1ea7e2..3c690aa23ef4a84501a73ebd302f3b5fc3784062 100644 GIT binary patch delta 101723 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
  • Vc?M;iC#XeZs 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 YlN>dmqv1|DL&Y*lRIk<)0B1;@naY zXD~TGV$f4uRj_g&W8fcR(B%TNxx72QI=_6EgMr<^&XU&!4qzQL5H&9fD$%<8a99yHh>;BfDtx;88(0w zHh>*AfD<-=+d62Z?2M_=V0Ym^|011E;Kn5TOPyi?aQ~+uK4S*Iv z2cQQq02l#G0A>ISfEB<7U67!U#o1%v^@0TF;mKolSv5Cez>!~x;~34laE5+E6n0!Rg<0nz~( zfJ{IZARCYa$OYs9@&N^aLO>DV2cQ^G0w@KP0m=atfJ#6Wpc+sEs0Gvk>H!UaMnDsw z8PEb~1+)R$0Udx&Ko_7J&;#fN^Z|YX`T+xgLBJ4T7%&1D1&jg40Tb;~;h_s;)@)*jWeQ7VVlsMG)-$N` zR_CdDTkVCz((#Nmlthbe?}7hBNxC%tEY_^_yJ%OF%#&Q`YQCn~HP}r~rQHbqL43`1 zO?Z0!3Hk@MPaeR@8t=JvM}De%Zy>NMB|8=zgw06rBs10&q_Mr+Xaeg0ro&V%>nAss z9i-@2=q9w>=uk+&vvNv7L_+Wjj=SL3+wwP1!*BU9dkBbu(|BZKBi?nh$~ZXU(y%NcP%EbC%*S2FgQD^r|ihQNIcFEZe_YpOxg)M6=kk#^em9 zb#f)K$Sg*v8||jL%ZliP8q13K&W}sNkLae-V@hjd-83br zl_;}aaEG#;m|E)tXLidZaA<-fZ6JP}sMc*aMCZE^1TUk;ka)vl$+VkqEh@;pf|;(n zm5x`E-bBNYC*izElK1~A?+vdoZn^20P+4$obEqu=2mg%^af<{()K)YJu=WsOKp^f+ zeb$bEE-9k8zBd=a{77krgSD4V=q|ZS<9ZsVu^E)}tuuF=H>0s`uPJF(ce1ngeNsM& ziZC!Cp=mB9wae0kLM9OjYmqh6j+)?DRGgTZiX>^-- zFq6-Uq{{O%Fe3zMdc{{$IGP|J`tN`0ifeb9nc$z{t|wKh%S(xA`bS|JusRz;ortzh zk#+JM9CSq`M_aI7S!}qsk(8>@Y)no-2rfHyG4I!?CQc~4r@{=|3obfw%jeeiHRc*1 zy|VSqvl5*$!*)|XFgyq~@0W&zJJ}_KLRn|X`$g5`t0aSF;a6f|!heopVC?NzLhrDQ z*fbsZ6+L9XVee(V5eql8Ahpw{?vzgJXPFC25ICa4NPcM&KEI8umW+`&zb-dV3cB|g zCLqw(pICTPZWd>Ix8>55ZL4*NVX>z388mOnbK^1eH6FW&Tiw$twZB7W8aGk4V-+m! zkL=N2bFTpH>gKT*aW6PE@f(YFINCK-xkztW;a1WUlRvLWiMrMnWv%C`BSc{MQ9!6u za4~VwH1(v}Z5~twNg5}fgg}ID##x{QqsaKRdL&K#F7CgLo~2I{Ftlr8uaZg+p~I}M zm-9lTi_5Puq`z!LMC!1?2tC^x##ek?;*W#zZC93$ zT237^w^#~YgRhwitw(2cW`lv%--RIe{fw3iYHE`;of!_u$@PgJKPHJ3&zZC;8~fT) zqjY_^?)uBuO21rsPhxA3IQIEmzl9}#E2y&noXG7X_(q~s?#c^KA5H$csQU*x(@`kO zlUg8Xm;K$Z@F#dK<54OKqFUepd$^xb2Y75Mo2*e&tQO=P?mKFoNw_eM!awD+H%lZPE=tKe5tkoxTF18|_J}{et*ZXh{|H6kdH z^F^v(^2yD1+*c@j;=eW=#WIoCph~*9re`Py9pLY6q5g*9;NQI(|o^1trFr z91juDG1n8Nzj0k8mm%-(noCL*u0=Mat-mLBeV$rkYt+5>!5KLX&4c%)s|z(L&k44f z346Ls-V=IU81Z))XLB>D8c@QvG!`@4S`?W6kNDX%+f+qGOj+*3=Yz63Ual6K)HK;{ zOiTGZy)}9nnKS6E(59o#p*+Spzx{f@SFihkq;SQp;*4*$BUN0aO19#xxZLdAe7Q6| z{{D-rk_suc=g$(Kd~H&+uwyvmMQZDqtr+uainLZO zo*j~z(w8yQ<1vj9r&g*}^((34@9X65w1~=`%UfR2oYW}R&0BJx= zmUFf``!=o75>sW&xWc-L800f(HXW_y>_4HeCQ1Eu?wRwdQo)mpW>HqUrjgKn1fQI) zeP7#zp5by=x8~_G`ohJ?^Xz zH=V==C|hyE8TOyGsY184HX!_>fjQJK?8&f<*w2G>hp=;lyy zVymf>-o%jQ;&2Lio=WVuoE<+FG5p!JEQZ_YN8xZ+#$Bg2xwJapoc-Kc)IRGi>v&vd zlE_!8lM=aU>AMscjPB|m{V8iZ-)f4uXmVcV2j;MFTNIBHs*ip~c<>Z}gXof^vSgPA zXW#Qfne5tbARE-u~ z?$En1Ah@hP$dxfPQJrv-pE|_+MMQj>=25bcxBUxT*)=;#=J#|x&T+jUN$?dkL@@H} z=%rjqRGS{FoK`O1T#LB-KFA@LL$;HSxnOIC&@r6~>CdIPGeR{d=r{uQpb3IcXiBS^ z=Qp%&sTx-k*2_-dh|WkmeLR#ugQ~}>TPV?!eV$)(G3MyS++|Z{X1$lT;dCdB-NEl< zO{U{W#^XNduvBdZ24VWNsTk$XUr}?M(JdUAjip86Q>qrLr{9m5CP8s6gs1Y)Gc`lp zw{@Z>Q!`v)unAf1}NyP^xfeW72F2J7MU2 z?w;nrKBL_H3@alz<~|@T*s4Sz93>O_v%uJT4@L-vNmXkTjX$Iuis_Cx*7?e|C@JHC zNJ1$!1Q(kj_!$zA^9C}w0wEQVXT#hW>B0_}{L%k~K=qF(lZm zZ0o?*x--#EbBO1HhPvZgMMrhyFC?E$5lWi3AQJJ#1lWSHaeu__$cl(2$UPV~kzTqw zMf5#N>^m>2%@9~spX8*t;*=&jtRoXDh?wQPvU0pdCfL6OG;W~W3(6xnO1UB-rB|0F zFSsN9D}#=(KR;e^78VS}Ezx{`_{!icsHcS9SSg|XG0Sbg&)4PP3^6wNxzUxU;eEjig??Ja&+FKGz6tW;RvV-QdHc{)L^SuD` zlXIq#{w!<5J9j9hW-Q`&gbf&Tb8k3;7cxoh`KWE$xB3II4 z$0I$ZRQg9w0<*&t756fp(!c{xL_6l0eqCHGsT?(Xkd%aROHR#zJ8tyzOSn^)m)p1f z-UinG&zuO-bqgH4RTqW4GKRZyyi?K2v}`o~Wl4dUszaPRv=QIvAQEbEDv|i zFG+}reK2lcsu?@BmRXO4ov)Gs=`f~;170suc(%~saL%UuJI@RC)duQox5B~!;9g;I z*cJ`Tl7Z!9>0&jooPSGQwpbuFFqB+G4F#>sW8?Qy+i;JgTZE0&l&nwwfL{tM8H2hh zf{cttDd%NU%U(~8bFaSVpIvFo%hNw5wNy1Z=8B~0k@7EQUy)|aqUG4Cs@nZDW3E+A zvp$!b0-H@QUra>wMFirVhQ!mDAJ+* zhpu&xn4r;yNo@i&OJQ&OCz8pn0KVadP2r4X^XR`pF`A&D0u>Ve}63YYr-(j|UK^}sK0;rI*oS1#}T zNpAx;7-`7s=7(#a>&?dBIS}X{k`bYBTOp3BOLzGpe3`mDIaT`~dSWBV0UCNt`LX*- zLCX_vnszq^Au*7o32{~CSTQd)rFkP(0R_QWvRY$}2~>ja9aMhB(>KL|s^D@&B7tqZ zah$({Ha;?tVC|4Y&vvwLZR-eO1nc?Lb3~TqxYT>M%;2mQ9 z>c)RHoq=wP7-v04nX=i`#*iMf<$X~9&?A;QTVv^D83+2)_ECpQP->328GH#Ze0@iX z`s97R{0eiEScIeCIFNTVnttLdv1Zo6nL6(9KvXBN-TK5g=L+cwx88y0Rp<9RG7G_f zt2MIRjzscSl$laruE)tL<-F646H&&qYfrg1c@Hx@HZ6ODL!6BA2pkI1c48xaYUqbj zFh^2>8yg zh>CIPFFx;s3kPQ=DtzCXk+E1voC1_CKB1lJ0wd^DBb{nJth})B04A}`D<8(hMQ;%z z6h0c?qoK%1bBOqb3-OSGesn2CudziD5w9!WuYx+L=#|qPv39Z5rv7P-;l@*r*8wKM zn+?@M4RVf-Y@0Pwm{myfE2q1pC#7P83&A$dDZXbkx%7&cU#{F&qbSxHA{wO;=>ne0 zJ2OzuC4ve_5?=X7)t8O>p6{qlA5sxE2!hIDRVDoH;D&VP&3E_n3@M6jVy#(q`Nniq zh2I*SN^!BHi|khUS5=m=9za4DYX&~UcWv%dkBm~ku+iKniXyr$7fu2nv5TknJM~h& zO4ffxR}^_OGcx2_%^EsZ^9sGHoGS`Vi^&Cbv1NOOoK1>eRAf_|am^HHE95(#s|>~H zC!q+M%7u2J-9Nb}%}In_yeZ}q$Wt&!!j~6Y5Tn^XPb?w2Yv*Z)1-w&qiGKPuzIgCi zeBrk~MJ-KQMcRgZ#@ShnEDD-!JH8`mI36b$PIg?ltHvDhZQ;Q{z2e?2_eEKNjYa|8 zk)iIC$Vv)lqnn4-#4O8%)hGW9Nt=Je2uNxdo>vonH2j|5E78+j3Yk{Xh^`|ykL*Mi zPXEg!YazWB%a*3mSci*!2IiL$uFyA2M7dTMeM$}$iZz82xt~R6T-v~Tj6V|l!HAGP zCvcXUZR%#wNVQ@8>s7P$$Fz#q1hF`%@fS^&HY_5UNdB!UrcBqwTTj)nWu^wk`cE&J zKs4}F3g!v%PI3?7Ubj_04&|u|Bt2H|NMsqWD_<}>Xz-25$iyu`$K%-NH?cOix7P>58iinOHx`fCw4U{&ned1itsC#9A+{m5 z>B@X#tf}DS%M|Vu?-WQRU5pWf962TvJ#h+;CwE>)WhPC}DrfB~r|6oCXm6_0quH8y zvsIU&Eiit{9Be{0{nAU(OY+;<_%8`CxDCg7qq&-+4V}x)V4~$|sEp*R8po^~2@a=B zP}q*7m5%1QqaR$Tz2I%{HexC*#-aq~BX5cgldNY&>3l^O&(%a)2KfPnpL_w`ag)eQTeBLaZg$ zY2DXfQ)nMyYL5lQ8sz`AC7W@~tGVPbFRh~wPhz11=l<8M_Y@L-l;!Y;Xi;tk-^HLh z1Id(mmE2Zu@wkiZGEIvX>$EBjmP5Vt$FZ#}7j{~!j(Z($LQ^)oQVI5=34a#?G4NMd%*+fYL0o+t@BA>+OD{^CBH2_ z5$|{|axQTg8Zi+CT~LH34{UGuo7X4vUvwgtx3%B+QKA1Zqq4X?(CVVTQ(i^0%Fs$? zlFLhGQcn+8t+9_yQk`n~^SII71S(LPS({FiNZW#4jPRk#I58 zWZy_LvYhG&*VOx}UUvzz zC>jg{ex9$@cfT91tf;T7{C(JbRl0!+>^!9DG?Ge-QOtrz!O_>V(sP@-BYXi#uiHwo zEZH5Kq=X9LVO||%2r+-?K~i327$d%{-e^7i%;GDt+2I|^feyC=tE8I{XCRl#E! zn(Fj`^3=21>;c;I0l=zqBIgzOHr`kMb591!e5xjj1sVdzj%%1dHB@t-K>!&HI$%`-CC+U#(n-sH< z=?~#X+=8h$%a0hM&q-U*I}h=lC*Eg};rJWXzoq!krlX%(N1EG@twcW?k3esKb(#M$ z9C^Nd#rac-YJ@YcWQ>C?qt%&Bfsm8f(cqe7i_^sT5IQI!gafs$C*32FL^&!wNEX$Y zj7t-BpG=!R3@MX3eut{v>XbYvQOQUhEt8zdIHag-gA*}s5>0yqGO40OZjBi-Q)Vuc zIdsB%VRi206-CD~D>326Njrx75gmi4H=R1nDAR$OD*4k8VfD}QcWDH&^=+i~2NI##Uh!Rf<2SBcchjZufnC>X~T zwuf_p#tH7aw`F?ecW~fr^+%0<5Ic?&!1?;uZ5n+ivU&)|d@KcGYMi`*F@ zrzfD6YH_U+N?=*BU^E8(uA)!fW`63{qL^#@k_sxdtZ-E#_^3FsP99@GvO__g8|#ai$v`JEP+1Nisp3Ps=}61wqQFjgra$F5E>e7^3GH zvqT#dHrnd(!eXzVb??lg3A;yJh||1rzv-3_!(rAS6jGB#UJ~pK=4%0+vWe)L|yZp0ht`3RudFptG;xne$C*>!To>XcM@au6A@-uL6c>i4X0ajKg-DZfSg z(Bi{gCoUYmK&}f#i$Vk>7=V<%KgAZ(?q{vN`-L;FyCRxX@|=Wm zf;0*H2OP_=#t2Z9+;`>WrXLyaN@8=xA1DV`l8p-MWe_6pKl1m#2}`ueU@b|-*mn{$ z;noqrHe1I$yO)e9YzF>zI1vhUF>MvazsB3W3yjg#w>_N^D$A$eb*PU>&rW2_S;wPS zi3Ify(@Ni~B6M! zHJQu580D7q-i20HHjnOwU%D>t!Qt$$A-fAD7`{m9jENUd9Eiiy(%iR&pN&S(u)0Q+ zTGX7(^cVl0;n%WH&%crExvev#W)eCxTp3XPDl=D&NA2v3I$Oqz#tS zPz&hBf`GfO_V9NurFR?W>S}w5USF^clrbLzSexpo>qLrl+M>S2Ofwm3G@M%U5G!rF zUy<@=6PeEO-n*!HjfN=7KCp$;R7xoD4qtIdA0NUur&~sg&Umg|(1ec?LCUF-ZyX@5 zvm}Aq*fakl`CFNd3|xrYMax!RGt<~aYFQez2^M7R zi_~Ozr#q!As+%szC}7j(@)bJ8+{-uz(T$k?qhI%~4g7Wp2EJ!f+;kCL z#^smJq!$*O<}}5W(z>HH_svO5XmtG0fP=X&MV3>Q$f`t7AF~J5R{Hmf%@Y;Su%B}a zIrhFweoh{|b8N8c{df4N=n8DEWUY!wl1PbY-t<(`c#Kw9zOO+}?szDr9T82G7g&v% z&@s@B;%IUs>@uA6CY@SEk<<%}QP>hKhb9s&QAbz{iZ!7Ged*#6!iVee5F61s%dA-rr$m(M)m&%q_1n9y;DEK}=n* zMu#$PyQ57eHH>x_X9Aq|82e)_hncn7NP&(6MF-j$;)uxX^5V$ro>6RBFe%kTH3~!0*Q$5C zHR=t}II@S%5`qJx{srr$krnGR=fcC3bL$e_vPM zeZZeKw=#&>)xCjtsYTU_=gOZe`ZkS}D9wRdgsdR%NL>chQx>^4LSXG;E{8IqMK_Q- zoYTYVNOx#|ueiBxH$gix$kqI0?w=v`Q;H^i9sPk#d=HA?@82X=IO+V7$k!2=#*Mga zMfyWAh*v zQ#0>lFZc-vVguRKk3KT=nUYq$C;KV={9K_$srv610J95uL%nLHy+sRf24$g-%OTSzT2ftOANQlG$(3MzJ$5>}4Tr7+%sot)ay z?J-6<^Ejb+(s6Jw4`+*dPHo4!Gp6ixcagAZ%3W3n=56*!7P2aTepfFDD6`>g8ANZd z44ARBq8fshW8xQ4IQ`4BsxVN%qQseSTI!nZKzbThtcwug{+JSJWF5Iv6{_V8?q8Sx zt#GUy)ag^PF!GfPdcowc-PPT%qYPDF)ejX%y)t975~M#@gPW$Hs@u2&-8a_eP{FO{wWc;wy2zsm8;7o_>*E7Vxr9>GW&r zw5+&$&rsYPFH6iX?F{47xiK*Df^FnFoDe zuV{sOLymQX+6)eI>c=2uU?xwmVp(24D!(c;K(f}pQC`D?XQQGNsF-&I!M}kwP|Vjo zgC3cz6YF6YVR-7M+zLvRW^s3ap}`J8pnWu={)ho{Ajvf{cW3G|FlVxJP5a+t7c>L+S5?IknG)~x(lIIHZgp)oY` zU>+Rd%I~<{i#5U+G7Gh>g3;Z_zV~eVz@0`!+eh}NvOecsZ`%MvfM8VDTPsqS%i0Df zjOwviN=Bk=KysU#>af}|&)oU+@rOvK)};o8&{Bh?ndg=~$=8~m_9lVhGf=J@WRx4PO$RIR^+yywq@&LUe+sHFRW0#!m9W+Ps~;q!@5+ZI>7#66WOx18$=~~r8OQR( z4@JsBek&(`JC^OAW>8bfZ`aFTRs%LOEqLe58p+obOIBc%Q&N?KsdMI0#n0miaqB#F zY7J;4(`7`<5p<#1A&KmNG;162`iiM~NU0DBVbfV4dw`x#9C{>S0t={Lw>Ip7#)jL4 ztyfz$_hjO$cp%?J&Lv1(lYr|6NPF z6(O2FZ&jZ(+!*nhx5^ci%NO6s@q^WYOMP_i7(R~PKyD@BFR;c)3mrR5-)&!eJV=_V{q=qlx4QS*IaEcHlxiJ1tbZ-YB3{fi{YB=Gb0`On0 zn(n18*OqD+K5h9cgRB(+a%w+| zu^C!F^6&nA0hQoau4{-EM|Pi}XXix@8ndmW5>#cK@@~)15%Y@nn|>FuUn>62cL|2S zBp=CWF7(&t+_SY0SBN-Cyd`7yYm3)1TM?!=?2`XyM?T#u*i}p6QZy z?Svo(_~zGvq#2Hve!|f7EZ=?FPGj#^{{Fwc(eqcG+rW>G zs_lCnDNGGy&<~rQ`shI$Vze->c4Jp;11W-@T<$TQi>2PE2;`xzR>cYSF*@xt#DRC( z4=0{n)G!QpJ_EeaTkn9f8=k})CH&C22oZg`{0%%PrD^b|XLlW>5aWV1h476mN!2N? z9h)wbo+IkIB=crdPa5rxiKHAQ{B2=DSTxt0_z_nP@V}5sg5(DVxYuv1E!S|b`5Dee^#(8>N^=?dCHU_ zQqF<#I`~in*2~}*LAlva?q@&vvlL&$FQ1_Z3-B2SydBAj%wy;s;0*ipHNmzG&~+mc zPG6aWKm-j$4#OD61P;MDtY3JJux*5q97Z_yJ$k;}^xN($_7Jrli8;JfD)WHAWD87aR*2SG(&cTPgh#KEiSay_tjDYA6WD|-q2`f{hxQF)5=08& zJ;gw-R1(W64AmZDPUU?Ok7d6|?IG+%pjysjOBKpPxd{yt*da*!CivJi_m1I7QOp-n z?Oif6(u`@tjCs=zEFqux*giPeKBmC%=&6VN7+LXN(8O%fhon~!P1XmqpiT&fxj<MUG zrKB*=s0xN1 z!c*&bi0E{LGo`0!+R;%}i*aL}?7(Mz3e>;Ug?%DO;rRVA%b)_IIyD(WA)`Ufth;i4 zMV^;Pl5_dP&Oy9UX3k`5HVI5{3Uz*C!Sq4ST-Y>Tx+w3o2|qzhjJSaw&P&j?B9Xm= zs+EJPwL^qOmM&s|iN;&t(e%~b66`oObVEQ#@Kk6u9K4Y^aL);dGCxci6G)yy4K%vtideXxF>wjMdsUjT>A|2bI%FP**vN7i=4`&p+Fl zm>hCRx6~cP(L_+$G?QiOO+WU|x!tmQ*wR((^oY964%x0Drx@j0utf-JM;Rbm@hIQ1 zrWmB%K5vmS_H}nitybTtFA?6L$WUh2Fd@~Xkj#_Y4AI83WtX3EVQZ55x` zxneLvq1{%m2ZZ5FSJtiv5!P98yMMbRqU((WO3^;U(BTq(^mX!r=32VsWRNE{3jJ`2 zwdLAAtXfyB^9H>6OBYx9IA*fLRGx?gRHj)V*~15d&=%J%{L5kxYdU_X9rC*p0 znw>a$*P%Loq)2565@NDmqK%SM`Ef}o;~Mq`G3f`z=gItmpHSN9$9Nj)Orjk={aI!v zJ8#18(`fpNipZr*xjR&zKvT@xgOV?Mm+}1dR=%mAIi;sp%g|AhnOw+ySis{WAhF_- zjvtqSH6p);tlPQs?n%s9FNc_Hc8v`ygqoYgE>f!dH^ta3XeWz&Z6tMHKN-zbMh`k8 zDoG4CtP)%=pOcqH$je$Uuv2`-zfJa%nO5E$#C1FmMjm7oL%}!|XfzS%^p$Ko5v?fc zhv7TqgGY({epxJrmI#?@2@*fGh<&1h1$p=%cXsrf5N6aU7Mv+Bu{zAM>dO@8 z(ezElIfs>O9he@nN7%a;n4Ln zyz4$rA#3J@c6=QJm-i8PZZsZ*%ljBsb222cFl?C`d;uW_`H(F0kKf@1=9-0KuAH!O zK~=vQxrskv{_CKPxQ^GH;(z&~DfEAL&@#SZO|gOE)NGaTMKHfYOo{1XHL5E&s#TN! z*oyFfw@NFsM%;vqlMzN{-KY!FpJXme;5=8dNePz8d4hS8;_7WK92bov$?Oz3+xDI7 zb&lzjExD9K} z5y}J#Ps;W(#A!>x@mOKEA7CwTg{+T6iD$JRVsBlGSDo=p;l@4u-F1$O0TxknHDJwKKH>T4?P0@S*O+H5>X7x zcuNmQs;3Mgf-GI&pj?l^Rdo$HFWdOynA;1a_^w5DW}R^H7g>56HOyTvU*!bTX$^HZ_3KGV`#|fG%eya$%}lp7CmR z<8)jNRe$KhvkLvC@QA%=Zz>RV+FxN%EM+fP@sl|1-Nb1ybx0qy^-r0f&IA~c-|KyY zWWaw>`vl>EqyH5|hn*i_bXc%VuBjJKrBOZSXn2x^=yNLr1NpRqQ4wk4!}`%IM{FgF zIigBeiqgYKpRq!b6!$yFn$G$kZcAs55%ss~tVqjMJ$0rt4&Umi6pF5bV{h4jI5(+; z6aNMEx5o^Nyt3XY(3SJyO+EmaIl%ugm#giHFQYISAt zXs{~fVOv_JsCk9Z>|&pRFDtty<$33FmhbcBeb1dJ ze;IPmpK^D;utm))Qt#!v_U(20o#ozM{rfkk^z+NF0h|@9kt2BILM0JgC0Z}^zwqRd zph@29!bKbuTHImPX(9bES4O_MX%6`jFFcc81bHL|+yRL)$!b(f>Vau0=vcarSm&}j z+RVGkYWRF}`e57G?%AdZ8$lR_qVX~_O7jv*wXWu_B@b~?*J&&r9mdW!~)Uw2i{Ka?$yJmMa)G8K_JAUd)l>av_eQR=T$SE1bIi6z_?R9vR=&F-hJ zgYd{A!9KH`VMJV+~rI*WMUkaqG(g> zp%&;)y4zICiERxRtmauyv?wk$&nUD=N;6RduxK}0-jENVtLh0B}6I)(S7Scj6(S`#oHv-zcIm7FNAU)(@d-0hyTSRLUn?FZ~e$EscBX z-Q@eWXiwfU&-?sX0s7rB7$Q4y?yLfz4FdZD2+dSnW5qITmTS1GzAb2#_Q z2t9_B&>e#Hl!hs1uB|vTy*2hfDK%{5SJqRC2p5DBa@1jBuluk&p?B0sAcF>if)%?Y z{H54fr;4_2;yyWjPKxb{B7~*11{y7^sK0OBW|n6|FO+sGc@>5*@p+qGCVwHNenZmm z2#5q&%+bK|R3K1D7!b(aN+;5}SRk;(?wJXaw1hzowBLPi@aop0SW7>69`ELRpkI4< zT{{`m>YIFGRZY1Z48_8E0g>|zpQ8(X#!w2oj%~QjeNN`?DIDmDVMk6hQEY>ySR$8} zlJgE6S*&cqy-*8O%h=PVwFth+g!3pPNis2frSvM{XWMa(u$otKZO3_5p(BLa?BbIh zMAj{-l~{1Zg$S2col-tqO?DLC^6vjD;ebGT@I%+YtT-OYHzRZx8}z8CxT#~;`9-Yk z)giVpMij$KxrTefhFQs(`O>>5x+3lLaYSZ1B|qMPv%k_MYC#SH(<K3ET z6fd?@DJ0vkzI8wPN`r)d2*yP3eQ%#NYdn!#=lf@=X3z<@S18 z^A4qf<~*T|4(5wibn%|3qL zpu1m$%!lkAKgb9kL>~5&^}1C186#8f5shU5Yv$E>SBmqSuhc>wgB}h}+Gp4^`vam( zU(q*V^>f@JEw*EIr1izDk$>G(G1m-^6A}wYTyddCE%|qMG|rR0`J;G_EU^ZHrz5gB zL$)X%2>;a!ba>o+y_dkQGb>;?`Trak%IM{tV#=r|o`MBw{87Qs#Qn^J)Y8`Igol@` zh0KBE{MK300Ewp!;K|VY}WK)GVKu;)jg4l9hTEhC-Bk$<4jTH~R z+oG?l$d(yZHeM{qKkMfbR%AZP03WWn`W{g<_QZHo;C%?9nt3EcbDY-6J zAI_dDFsQS-v)#I;k2B}Ah8|A~l-oUOv=49h0af&+81*@ZlJ<+c^9WtH_B-i(a~@Q1 z&C84+?}^$tD1*9EtvO$;J#^2j2G~C;-s&4gIx}7AM^I*VBI8{36$f=e632*$`>{a= zPk6j>0T7l+roXaZ1o5N`GOB+SHX{|dk*!r4PkbYu!oR`O8t@NSjTWA1SCgC&mbmNh z7xSw+-~eWFw)=73RE9L6`=Hmpvl<0WBS0j88f=V^P;h5?ZlPRgTMnHjS4@ocwNfJv zsJXbV13N_Hbo9=`P(5a{0d)fl$}Ox_(^BZ;NErC@9bcD zkm}d%*v_ABS;edqA*2`eLyhcD)X3l|%jNv-jA-*U_~rN(*(gQFVAcU~e|~ff=0(G* z`NU_abX1GZI*rlI*A^ayi7zsudh=JyPt%u@$K~sPX>`9mVY!rTtZMQR_3=Je{f=0U zu`x=oZkV$99Ycd&CCkXAk$eiPk{6ky0y1yAUh+NFzaac4^w>8za|lOr z5e{3WPMtq3c*q1@i63a~C1=89F{QmJ(9uORPd#z6SqB-Cmt4UY`uRr=3uq!e(bI$; z54cVI1xS0Dt< z?C>XnJ=wixT*_tC>r+$_gj)Z~1xusKM$5>OIzchcXF{gEr9ZH<3(ax!MnB0V{{;9* zdF9gB!g@w$Sn%xjm*QUv{vfNON%N8YuLWInbyH}cpsES`LeRA_1-+Zk?}!qPhT<)C z(X%FIuOhIo0}P`y@IzIr>IHB~fOI*c>mo0<@kiQAid?w)_+KbmA{KtR=Hl*%{NaA0 zi%z>PG$oLN9Ln5Dv(Wb+?`+QZNP<A6np$@kwzxy9b3Iet)8>ztHbnz@ge<4zIV zNNvh2@~zJNJ@z-&Gsbm7aii(#XH9YM)c9Y7z4LdbT@xjobZpypI<{@ww(Yy4J5D;b z?T&5RM#nZfPEVfaT{H8|dS`ue{($9>L1{SUO_b22{rkrDOQc-3KRkcxyaT-FL6Yn8` z=2FC&g5|Cw@|@-qD8|9NJ|p=r4pcmxi|d)k3R5fu+g*+e?zS%;RO?ve9DguhU`POb z6+nr0486>Q!biAje9TrdCF~MjBV9fYJC=l=I3neW?~f4~gY2C?*o>_@5jn$J2zWPW7(x)>cMcLao$&x8O$CcQVqCUvV-RpoC4)9UZx{y0#yZul&6+23P# z)Rm3%D*8jjo924bq=pPgYm%EXChT=C8?x^xGeToa`Jxbu1_#C3#HXj=26hBIGhbPw zNA?`m27g3+5aYg22C@LOL z`oC>S(|y!tC=B)oTHN2oS|A_EXfk)Ut*d1gJtXDEx|2q@W>ki_-gdGBNkqJ*2<&_a zHglR92pK&j=7#SX)J`EWn%Dr+mQPklz_l7DpWoVKI&E23tp+u2F7_RUd%UeOg4Hmu z5z@QAPCR}{*!UagTf(La`OIr(90}lxMzkFpMZ6sUME$-z(rMBO>Po2qMy zM6Zv%_YL)@8{NLXp5wQAnpY%9>!~!`-oLnk_%UFCzi+&{L0=TXaRS5v0XfmZ2-KAk zze(ah*nuja;eZlQb_`;?H?RQ&JuBiQT(5|m!W0_RaQMz%DH#D*oS0FBXqaY!xJ!F@ zv<=*#c{DlMuWAI!d2FaaZ6v`h#QYT7vlz`zM$lN-CsO~^Qmx3a^W<*O7ZWdhej`l0 z$O-JaFV5WW2lgKN3Z=MadN00py=>jgzW*rcJS#u^rdWa-bU`!(sy-?DZ1hKPq#U)t z=AD~R#<@RSzb=4NcL2fcDM)s(n8-v5%GZnWJ~3- zSq8vvWG0!i^gG%(>m(`*x2}0p9cRY>zCW$}2C3QGKxcXG?PFprb%KR}Ql&oIjSNO| zUK*B!ku$92`gL1J2oS*OXYabR{)UH#xBf~mzEF%_a@!`_J8#6mTNBRuBUl ztedJ5vh+hTJ{(&DuWpB+4i^sRMF!KNeRrI6YV$w^d~GiowXW3vbi^EZyJ@`hjw)JT z!Pn>1xhu>3`?682byOF0$_%$+Dwu-s^|ebdeX*Q5nqZGx7f>V?>s`TU>GgK&Qr13i z%9T99NqAe@iR{#-m!?dMtcQAI#Y(w|Z|F@hsG2|+ku`mNfH*I59&a@==xkGIUx%uC zGdc_}T5q@n zlYqP}nh2I63hbK70tgWt%PLke`bmO%1ZFr(<;%YCuY0=i(bS6#nRj}2{j+BDw2Wg$k-hgqj}d(vkwZ^>&UTs3&X!8<0Z1I4j+*qn4jttRy~&@i4rp! zH;;bBY44?*^v@{R2Rviilu@hHK1J{hiDM2LWfb`bU6&$8VDl_#$J4|E;opBBr_(w1 z44xYp2*}9)=63!kwexS;!Z^DL1qe-;aaa&S9`0#cXm#IWL-U~StgPa%hrC6p|q z2A%*1T_MBI^C!IBWjXmWWHa6iywzzJg$o2#iVp-SG|fGTMyl1oo1gXVg_E`8ZU1=X z8sy5z6w;kOlgVjGXd@&RgS{G8i`59PmC}emC1Kv-!V<^)+v7Xa_=WB_S%85;K&}M$ z7`;reRsS~~A!C}19cM^Oswzppt>p1n$d4b&O*3h) zqP91*jht!A+a?;mozl*qsoqh`=HpUEF(z{9g@ds6-o95UQlS*NhBtXcmaaQppP zQ;%^bo4jgvz7>--(RW(l_^RQWJGJNY;}PeF?P|;(X-(zI8|3g!pl~x1f?tRoc$DZf zw(PjeKrfZna$NzSo0}k4;wPuko&|U=4%3Y{cqPiF%61bqtQIHrt~~)B&lMB)+h#gK zr~J%@snG^}u<+C$%VX>k*uWj%JtpKDM_&hvVv=)Rv$g^KT{Dc_ z%n!$WvP|$;cAA?G7s;WUd*)&EbwQfD3K6op)f>YBLxFt&J$HQ)SHvfO;R&x=dy8YN z@CEG&U3X0{^A_4Jpe?hW6geEPU#=zol?E$a&N1{A>TH>lHO4cN0U5CpTt8Bf+|{aF z9_!E#mFjyRsVHZwo&(t)zZ zy~e|Wzi5g8W!q1DZFC2FG;AGm6f@2Bvb5fFwxf}))?s_uKX)pE5{JE8_Phkl4X}i# z8rb@qF< zo1C{GzfYc*2R-xrr?W{jB3NkQ7q-Mx_^n~m*XqH(H0hRqY^Vh)JKg}`HdfEj!T zw$pc{m}nBahZ_S(FPwulY5Pmp(hE<={t!kUz-^nv$QmcNE+7kJ-#u4$73r&kb6;_p z+bHM&6jZTNXuK`d?c+6t$#0o|)XP6OvBEDEUqa%=R*CN)nfIeH6gzW{phml zAWTf0|j0YOXnqx%E!p8%12J#v_nlYwu8Y#{)D3jso20qPI!Sq z1Im-!bSr7BsNOT@X%>youzpdUIGPZ1JfpV*Q%L5;9=PFO>3#~op=icliq04hPqR4# zIJP*3fSK4YFsxK4gmA?CJ}C7S1+^C9JH>$L^OqtE4@{4pWlOon5)FrT=J?u_ zq1%*6u#+K?pkU>cjC_3RCmJ_GnbW*{yXDM!#h#RdGsXh%-BF>lo(R_{*0X=L+VT4f z`vCvI2xtJqHs%+EbbihI|6gDP!1kYFGgR$E6-^R5;14PncMWX8Dy@!{H9{Q)sPz)$ zLIO4&ZZax7!$%sSr!H6L1&b%v!AyNNhx>c}{>&%m^s1t6>9xarh*G$#>kR+()mzu~ z_CjhL0F)`r5z-0&S{u9X4RbzCA0aG0w0m zKYM8f{8+&Q*FatU_vdUM`|L2fX&)iFk%@WtpbE5C83zVRby)a61;~8#kP7I|s3X4O z=~?N8NwGdI%INq{p8yH!^L|sV^bA@@Ze9gSr$LDlV)I@C;YevkSlA?~@&g4onl1g` zdk%6u8rCa^U*p%2a_Bgaw4XqyJs&BcxBaio2*PJG73Egifj7P^LE_Dv;);hZJp=CA zQJ<5$^KJ(bO_~LnY#()02V$~2zs!-$c~<8s2^cgEg`J`pWx!C)mvbTKFROh@hji+V z)@qHbos^gk*c5cX5+iM42s+BEwK9{X!DEhYC52@s<2_kC!(Cgv;~UC>w(S@TE_bO% zc(QDrjZ0Img#nV#LdMG*a~j)FAAH%m9ok9?!T_oP+)`Ei7(%WM48p4$Ct)v{x(i9> z7%`Tn5=5t2XMjGTcp@uSLjyco*NC&dP0af5`qrdk;auOLcaQAHDT~-Pjq-{!lJ(kOS)~E6dPT-Yi=S}>e+eIWaBRnyB%yhczleI z0$9ugS~fjY7^Q8p0S1D0ah;8di4G|lMg~buxc2I0kO22|Y~Wu{$rEbLlv-zToB_ST7;1NKa#s|(6nAHv41C;?I83A%m?1Wmo|ki_v2(i zu&Hii^RxY7FjSNZqbHsh45Gl5I=Lnz*TnD+={5uVkhh^+e~=18bSqoR4<@kTywL%Z z+~}_(Vgfw;%D!fUj1U+>+1G@}>oJ~uCOD1}WU_sas2nzIHSQD|ddB;W``2i~tNgq^ z6Q|{@K#+n`XGw3CrRxnhLF$UxOnx9A!e&6Xs2HBLok7U3J#aS+>T9HUb0zY%SpWkl z-S64>*}+xYLnC+E#b(Z0(xCw0+XDQD$F{@KR138KN(dMJJ0UdSnBW2!J1#IG`#Z=q zSmZP0n+Eq$lL@WMizN&BfsoAENQrKRG}`>$8eaca&d=@8(i1u;vthXTHjQb};lk!OwujVR9h# z4uo5BSr}^TFbH#vCZ5y^Kr62U=%_y(7Wx@Hv2DyI_*L*C`@v9pAV^xmnvJ}Pl5OnC0 zpi3iuyz7cP6L8Lf!_J7zzyA`kbnPWPT&1tQ$0^QxhgkVE@%}TYExx4P@#FZT@BUXL zd%v?&M_F62d%ZdRKBM2=w@3!lPxYgtf73t8BJiOHP;?NGps(BU-@wfVsMdn<(o@Iy zbiA7EoP21~ZdYh8CMiy=wwB#!l+H{jlFnqYwnb9`!|)&LB(Kf(cJ#WZl&(zK3tEP7 z#!?=HP}Z}GSI9#dgb=TyW~APWgkx;o8Gm{?J?6faZ&3L5n(pU%wArxbI^*GZH`+5J z2x7#V16P1@i|j#?-#Zxwzz7mk>1!eZ|G5)dOJarpayate=0$1&?D&&(61A}GgH5(F zgdpvScD^$?zMu>{Sl%c@dNMs@<9&DuTpfV`8K*Z*S@W)mCk1DekKjo;g&E^26bf0JDU3xrfEq?&EI_~(0L!lx zseIf!WY1&Jin(k6kJh&iQygB|6tAlg^}MNTcQLx7VGzufTXxH@u?VXg>(Mauv1(#* zHljNAdaO`3nGAF_wv;dxI`kf+^{Dn7+UQzeLg>X3AOh;fv5K^ea}~L6E{W6aWI^2i zoV*^qn5>Z9s7Wr3OTD{i~Yovo85etF?9vtu^o7{aWEOMzC;0iV5kR2 zpII>{4r;~v;1%5%sdYw7VY6Cqsx9x%5>uZb^F#?BM#{V-=eq7p9~<)B;uh3AEK@ufi5l+%QljD3xzbHyKxhVKr=qb^}r@H)&8p5R zTmKE^KFezVHMGnw={Y1F!*Y6an_xhz0s*?I8Ga7|JFMo1`BdozlB;@4EKs`#2j4xq zBMVOm=ucJmgFs^aqmB``V@u2EgxM1-iQy+Y#Ce+*>E9|c)N*4F@mu*;pRZ=m_qjWW zO6?uQ5`(XNFYGx!l4xHUL$FT~<6Uk@^|>w5a3_^EVCbL}=Z!u1H`6mi@NegM^rlQv zoy~A>OHLXc+ML}2Eq2e7GG|MgJG;fs1VTp-Kt&`syh?|8SQ(aS?F!e zGc?D~wrpIv(^yU4Mq#r8bAFvL3mdTZOBqIzv91*RtY31HQJh2N`e=*eY>lLsleL-m zCA)MaE9AygA}(D6GNlh?@ucRly&0nqr_AC%7Db- z0B%ozIr->ZeE9-6DrjIw)e3~x=%KRFQ9=KLOhut&KwfIUbD5|0gvF$>N|m2+?y1ow zT)?R*)UTRQB)B~~jk=(m{vlY72^0>qzs4*ZE$6v!HpxY=$W+(|k5K>=ZB?TiCQu3@ zSev-v(G2)%h}D>A%tgN_RMm)THmj%}0Q`7E8oLGf#T^R}+;-XdW=t({TU?bI9<^F9 z70=%}sME7$O#wolI*nePsd|deYwBXYV_x>Wj&tKOY)>N)Tt-E`P0SyJGk*x(H}GHC zNE6AA@TGXAuO|CXUmsG!&yPTklL+B1H?s$H>c6~x-8#nHpg^%CA{P{6M-W<60h(eZ zVLv>dS`X&x*Sye=1UyZA!F=^&wG({XCnqc{O$kaZ@9&GLo(jXyi%2Toceqf2AFRdep zfHYB}k&&9FMf1!{L1LplGA|tn2S^l6VBguY@MUMkTv0vDF^lDzDp_^sEC1^#=Qz>k zPG{lL_R51G>8Nyr6xj6rgwJhiiXlt|x3}ZOkwIB&RFSU#{lU7=0lE=&Ih^kmLL^!J zn3z^F-ZMqR+lmaE7-y9D4|4ZlV!uHn7~}A=75?qz)!I0(FfPe@g*|+IDPWZo7SLz| zADE*|jdKu3vdRiXu0Dzpxx^mu6T!M55*1c--ldK_^JmnVEEBwVvixNQALR=>P^hIs z1PwL(tFe?tP9xPE*+X1bOAUrjRouGpkbj6yqOM*58&LxYw)zYpk6sM{t{#a?; zNIvE-{y4Ut3c(+9rGVDq5r7(zDpuCO`q{4@%3#@arL#I%J)7R*c8hnpN3&!Y?Y|** z-LmeSE*Rg|{H-U58!9STwLDuZq&C&an=O#b$MXszv&uX1)Gdeae+nZU3X4lkkC?Q9 z9M*#@)g!ytLr>LX`yPt8jf-N{wM~(P-{9>V@ha_-s8Pk7G?bJIMqs$+* zs1s@q4|QqLqSPIdS)&|3AXFxKiqu(SY@YBpDeV+tn<&%e{4fwVJEtV~AdW<=NOe&L zesBp4&_W-ec)SIDATi=kyxu&~ZhC-I^2}?z3G< zBGrieq&J8mTg#}~^EsY*P!Tw2FY=L_DekAF-AVn4PPg0+A82kEF)qyc2${F%bFPfEBe{zD*wCkjh zdT8_H@B@tuR7dvILF|orCjhD6sn8RB#EILO!mJQwduIOPDfgCh9DrRrCh^%s?h0lQ zhWDS&$Ta95NxUzUqE6KRN~r#)tPT;t^1phoo@nCe0hH1Wmmc}~wU}Z`!BcQQRX~T9 ztqZXR@2A2X8f;M zJ&zPVU*DbtLG=bXRnrDCZCcAr2~*wldd&$OckK~0-3F5>Vm&GAY5+$u)}2wEz$f$z ze}YWv6DFmsVfCaECj_FC!H0ZcJ@6cU;i)Zg6HT}`Gsw8Pe&YH*YhcTwhSq<>zJ_)1 zFqVK^6GuU#Xvf#Y5SH^7Kc}YETQ#n>gNr5?Y^!lc^CW9k@i1vvV$nH#U4dnMNP6UD z)Bjplk;R3II8 zN`P?)n1h{JmlM;<5asDaerrY~ zoIo@E1#Um*U_SQ5-|jsE%ZC5d&D~jG5*BFrO9>Ccj6YGgPBCC}CC*+R@D_a*nqHAEFbBbNc#}vAW?SbWb5T ztokS)Rxob(xEgfKK+ z^Jl(bu2q>i3Yswx<6Ua`I(`UgbicH_ncn`@9Y8+NDx!FZ^U5aX!QRO%8H-WmBhv6d zL(JQ`k}E1ucz#h&&S4#9EmGdA*J^4+y3lt~7$15DsrW!{)?dLojy< z^G&ALrySCn76~IGU;Za@o`w^I5BL-Zjd9?rWqRx)p>hSmc~WP0kMjIwT+9M#%N-s<>EW9Nfw* z#?#DRV$>(-aVkPs=d^sX?dw~oqnDnGtk1G=!0kL5zqOEOxwLIK`^u69Xdp+NYsv@1 zzZLYaEx6Mjxt#M|BU5s9Wgm-&@zt3lS4moiW{s0R5{gMs`_4u3ZMf|DCE_Xgk$yiY z8CshP6C0ieaDJ1vn&B#POTp+W0%uvT=*vnFKfY}zX4wlEY2;{S_Yk{aFA`T(McXG$ ziPo;a^OJD3RZ3ko1}#;Q$MfE5l)k6;T$WSsBj_yOfyvUG4ND86pr7!P?c4B@6j{kH zl7Wr~i@nsU(wZ~!Y~I;I2J)JBmhSj7JsPoyaF=3Nfbo=y?M}UQSA@Z~XFqfhfe3UV$uejqXc$ZX7>zHb+ z76)yYY0DuME;hqbjWtRJ>HL!coNAEqxTUqqBdTjYc)utb>-eloA_#Fv^s#WKDb^57 z;5JMEVVi|EtSwJRZA~UR5WBAjFsAYgSiJ3l3mNh(S6cd!B?`UaH^Cg9m|pR$VZd!7 zeauFS4dax3b`5<&H1ZB7-`C&L0$j&St$@LRaTzSS4xaB)4b7xn40`HMTs zlS4HkLp~E?oo?$38-t{RJdrofg^AKjDyAa#L`5PBgghX3OWs`PdzV*U&h4100QE;t zNepqSMa{tpiCa~h7B77s!K^<}x}E_sRy~Q^f;RM${1aVPBdT8OP59!I4SeLJ=qtj< zf8ErnF)YNzt%B5$P-UQp^~IBt`dHRIVxv1rH!s$(Qr^Y9DHq9kRvLOl{dS9WV)SSV z{gDV{cc=A3#!p_qiN1AysB-BI(_ne74`sigf{pAE=4B$2ishc0r}2RX6!2KQN7KBE z5Y-skvXp4p7OSL@9h{coX)hS2olyaDT?@NJ1Rn2E1=FUOcXXK0jXZ>%n+5gIVQtjveZ98xM({>J>8MKy*$pqdg z!pN(FS<|8*J3&;a6_Ea%56Y`plpP^d)|_sy&;Gfx_wA?99;g>IxxqIFWRqo>65`$U zJ0HtG7o4oTZ!gDTiXd0U{)8BM4MrwwVhcfm82pWLRT)lldQ_{5$$PC>?b7`)`3Z#J z5w4lDC#4qvMDK)pnII{5qL{rx{aZdyj4&jzXC@`#c44b#xMW-35SQAzNy(66I` zV6mQC!qhoFf_IxvGcjQHGg;=@-;CR!&o`6NG4&3e6C`d+t{W7c);~l&FBICx&V{

    Wkj#8+2$30+7rq#wTr*&XVGrF!;rK{w`vYlIFvvL{5qT8y&iH!0LWY~ptdG%k- zbtF_0XE`m}9n^~Utu8Asbec8B59ak(Cf(4jR1WL-F|)0=+7R6`jK9r}pG?(wOV_!+3&?k+sa{)x|M--@7-0rKgdRspRS-kQ zAcfbPe$f1tl)a(O#`L|R{h2mRVEEzbA5AqLbc&Z+;mcRY`P+YYod3NlzveeF05K}| zifF>f0VVuCE9Wp67|EW+L^2S%(7)Nl?0=+X0mb^C4%_?F&mCMl#Q$Q#K<+^Seh7|p z`Jx7f=uMhCT3Y0KAEmE-Jid)6g6L|M4-D9a!%T*H1$h&}31Gso`zB;)#Qj3nr2*b$ zCXW~Cxc`p1p97Wr6PmC_2idKl4zOu~nYdIrI3wvhKMy3A8!AsA8W|usM?e4vvmzDazKvBwne!`f$xhs(RZkHJ>+=B#7ZItgl`? zY9)@WASyMS7S*XAV&ow@Bv#w2J%ja6M_uPlL(p1YsL$>IVwm&P#q4I@#dirye)PN8 z@#(NR|BXCHxJJZqn-)$jQ#4==WmK@evHpP6y@_M!Wg|qlL;9O(AH2pPyH??)b}+fa zd`;N%UYbUK_p*f{_5QC%>ttt+Z_QU^$^M&5{@);gwD1K2|2w?CU*Uy7Q92O64AVi= zi3lJjM!{vGq+*W0@o%efI%?n8bO`J*Ck=e=Bie~$nIs%c9sK_W`1XFo6Xg4CBO(%# z=w_ctxHsQj-HB<0QUg`F^&@mtU9t)FOtl*2Qbh;rv?LV%3vtpU2X-qUy<*V;MPt2q z)G`dbwiYUZ38z%%DlSZtMG#pMN3z5;JN!cFp#0u3I44mke4B>iK7cYh{(>=8-MY&} z{85nyCsPYgR?B82cc}a%l651wRAucdhj-K6f+V7KRs;q(OMS8pyUa%%LiEU`cwnG2 z`dRs0VY++ep`Ku!Sg{Xyn$I~2j5~y;^TN-E6cpL1qAI&Llf^UE{;Sf&k4#4AD!?#C zDc34{dcG?~r*K%OzEQIQltQ(ZJ0H@i9m(M9_V|$@PZd*5TMOdulxb(5-%o_>kz@FS zC$-GaxHbs#uWdAFHJOR;AIQ*-G;r97x?8Kc!9|7@yln#76F&%L{ruNV8aL-7r{^SUtY8zIfNP*hnsL%}qm8&V2rQb|{Z}&ZU00<>f_v@9&)EY{s)3F^VXb!}FKr zgc~NrN|Pr2iPbpT%(J{o#x@3HDb9_BqmCox*J`X_l*{8TrR4_^ zG@U*?sxgwa`mLA_Dtio1JZen$&PZ0!EcLRL#mh&F&OlCgo<|0RV>Txs zWjbq@lHfp2E4rU{m9(*MiK*lWtb>3wo$Ds%GBRkG{6-QPeBVvUXbuDr=uAb1-8?L> zJBgm6+An{XBu;nf44|5-hPcW&>*!p~(=%eCwAXFj$9&@Z>SuHEQn*F)ttU8BUNYx& z|8&m|$~HcMe;Q1EhKSUsnrQHrW)s^yHC-;)u8=M(Po!+gqR)p9 z%_v;ZBuE|gQ14GT7z?4Pf+uO=57*n#=!?7f9D_McKmgT610-x_9(fC@j8ju6i$;n} zb8+A-g(d53&~4_(Gek6!oANiOU{aK_7vW@}eQouq-$~e&3U!5XH+0*C>nEro=>?O8 zi%rMDRX%_z-6io7p12M7))~!8ocqa4?6lpRxN1ur4hp7yz?KG? z!X!nX{E|Tx1Ay22F*K_z>ZB91rqU`L3Re?lZG^)y5W7B)=k(L^B%|;b9}0SR*SI*7 zVe`sOGbmOLXhaYY1FTYO!D+6S_m{LcSn5s9*Q~-?FGgqWE*Kcm9vSe%T%q>oj4oEN zUof-RwsSBG)w?Sq&NFs%U?ukKO+=vLZF(S+Pnj!3kgI3+;VX}%E$?JJ9QudKH^J1%lvRf%pGVy~sX?HO>9CIt58nEzc-$eUyv7GnR z1_)`MS*Mne>|}01ibOV>MeP)6TBZv`P2Xy4SwM$PGpbtC4LnJOhRub{qEu)`SQFKr@_OBU~f+qqB^qfA>UVy4y zG$4SDQAV!{?or^aY5RBYRbF>EuxCz7Y{7liGe5g6Mu=~ITQ4L4i{ZgsP7)Dwt{vO@ zw+oc6rHqEXxZU|1*rof)8&rHZDUSnjV_j2MWP2hAuS37m#3gUks(T`7{u61=GlqW4 zXu6MJl5k@}uwh=Xe}uyyj6Zd?*5m%c)PT1Xi4V^-qu=}JZ=j4Fv9cGEdKQAav>m%) z+p@y$`}q81=vGJ{hAznd^q8wLFf~avg#DZh+~LT$bLS zfANR!KewR`dIJP=7jXhCZvREl_)}v%*e`$Xng7G4{@Mb||C zWQ=ZR(-cNWS7HMWIx9h?ilIfrAj=K^K!uVfw`Fw=UCz03ZpUNFwD|p`Zi<&UYQG2An+`RD%VeLh4ZwP`eoM=>pNR*O5&r{9Omuo{;+4T zeN`!j>fgClTS)YD+DZiF2EPMJfV7tn%NH%_<*gPLD2zaZU>zt<23*Rz>YPd#KB=dqS;_4;N9LmuJ<22Ww$f0+e2L7=*s>ERY<{p4Dy=0s@l8!2q(sq-H2Lt z#$n$yG6P?sm&M&+1LYLY5W&LvFQs++7EFPP<-18`|W}dq}|=dtI@e zMG98o2T*1EfzBz>)ry-BJM62qJ!JMnMyYBTmFF8=Vop5Irm2~zna}*KD^1e`{4Xq$ z)zJXzAx2(vZpNiNN$&v#o!|tnaFPf-r@}!SJ*qlj>iHaf9i}KQkU|bWfeT)i6ihdm zEPe_&lyxj9dXjzv*sharO#Qo z=^TXfQr@HJtlGth(7eqUJogeE$VB~zxxbd`jM~TDPV^!ovU*n9Bg>j~QrR=jN_Yk@ zW%HxG#StjoruBwan^_xQ%i*Zc8INxaVQ1%UF)vLV!Y6315kK~OS(c#&31BGv?-7*=U z=JzVozQF;}Nfcf09_LJ0HK4`JbObFqAh5b($IRqUNN3@_%yiA?LcGE2XQWrH*(raK z^QhYDi{yDM@35&I^h~JWz%DB=+Z09sn51R{eW8%b(Zl8jzCk>${pmSdko4)0GcO*K z-?~5rjWN2>FtT>z`Oy!3Q(O}J3_N7%ue`lQ(dZbLrHyK)CD0%h8GBGPb~L}RU+FiX zmq*0oPQK!#H*5`tQp@ZgFqhR3~v$WaBEN{63Zhihu+R&twN z{HD)gcxWx~4m$0ld`mxDDHKBjup%CuOTXlLDT%M+y@Rfw5C7+Olnt0~Crj`;Kg zi9fUHegu83f$4F3f->|$l`4!5utf>&0Kqj5-W8< zH~Gf$D`Ji(*N(Vb7;erzFc-3FM1nYPmA5#MO9!rd$XM)Kbwo--8sHlMFf=Wc73zTs zz$}CCRtr&+CG;UoJ|>=ULV<(Z6!%s;RQ5;35~(&h7f<$ESV*KTh`WL3*Qw38S4)&4RFr!-gq9cc(S>NQZRR zf|F3;0@}1kx<1sxMcf^1_Pu+=`W9?DipW`7uiyL@EdWb!AL*9v6QxJK@^R3tn(9}C zAB-J|j_AwpR=p)Dl4eLKcQl71j=Y|Pjk-YUZ1l`;tp5?V^?s+uV*i5MuKz#UDbDcA z$O0@d)SMWZ(Iq|#mmQq^2PrXDC^W8|3HcB8ZiX>*?X8Ov56&N-FyB9e)sg3*1baCv z7w-(K>Myiaq|o;UrXSpLuLStFcyj^%@8CO#Ih+L$oChwdp+qDY1JISwCSpU>4(!J8 zC>Z-`KS!k7HXX=YXxcW_nPYGu8ep%OZvgsJ(CaD5iqH+Cvjl+hOPjZ^Qis!%)Rv}F ziC$^~U$iT8A$x~Q6tIb*V{p;&k1<6wJ=SGEq_s*04LnTNiu{(oSsIMGxIvPQS5zNX zQ+-e$(TaRL{ZUJ3SH3-75zJt9w1u5@GvkbTv7$<$j!6m4MOi*~Y~H?6(?y>)z-0Vh zV-AHz_orxzG4a7aJ{1mP7qAO4$K}Qbrrsw zblA~jTxxrf>CE(DSHvWnS;^{5Bg}CSu^{W*I&;Hwfe;W;_)oV#OkpNq3-FP?813YJ z6hgXi=c-*8Nqm@C@*G+zXTAXdk0kCnEC&~dFvNpq7YglF=Xy%LP9Fw`cBL0<<7ka! zwO=30Sn^d52l;i?lU?e9%a)tFsHgi{!H=t|b6)P1i3UA4{fT!&JOd^+>vZ@gdM;*m zg?%n<|8XGQ2z?E2y`ueJY8+e-aFnre9UqZo2h^SP(WZMnuwaoZ>yH?~4Q!lpG+Y#y zbaK5L4di$^Ur}ixen4=^X0ZuJRa!d68~kN{k1~s7r6_kO2}{jrN?^B=oPn<_MTSMH zU9{e+EwJYPFQ1Et%W@9=U&Z=`*y$l^Cg91`?E;?K!aA)bT3$A!y3NVC5EV6_v@*}i z{1s9heqg9%oDy0<+`1=#@CLQ|5ghz2$RVMF&r;B57RoCDURuu?=i~4P)Qxx9!6>sI zRCp*-U#zmG$OjZPyd$&za#Bk?Dz1zby)cFN6wV<@h60CyNW+2Z`7Ml+->=#eWW9~+R@p&Mco%J<)xR(Mxz}mu8@?;}2h8(nje}{wckP@e% zz6hH3|Jow*j|UQ2>JIh}^ehUN)AzR4I0Q!?{=a>PI1Pn;|i6zqN3McYF>}02-S$SA%ZEu=F`S|Ujn{Ndop7?T1J;K~w|sDeZh zX@Z{mu7^8S{L#t=Osvbgm>C1jirz1ZPQ1-Z@-<3M>qST7zbQ^Tz)W-%4^7((3{N}5 zT-Y>e*PXoStura1wD2}+Oq&|RZ%LaFOLkzMVL0j-3UsLJWk7U^3f?lw*QK8qONOG1 z8p@h9zN2ucTMS+pV!3h$v_Zw9%C_oUVum^0=ffN9V$!vl_Uj*FR&JTZ=;9Ao+in#A zJ9I~q%QLjD1BXmR5GnAu*2*FV^o>4+As1chBWO5m_n_tRPXm|epJ|nw|#8X+3j=pF>Hn)lc!s&`iG)katN%sON z=Sm{%3851-Xd-M#j{<*&cZhdTHs7Cwk0B!2nR=6&lA*4VKr>+Y02Xs2WIQ> z8KCv-%qciUp>YY$!4WI$&!0Lt1F@8{jvz=BT%#Jgh`9w<;1H*0o`MqZ4So8CUTQn@ zoCE488E<S~Rr>tJ_Igz|{W#JT+9Ce8wN(~fAJGj%toeQe#L zc)5BKL)&E0JbiZvT?MY@2D{`ua-n#{pr~LJc-WnLp#DSx_~|zcT2AgnYM#4v`A#78 z`3^7v4-s)SyV7_V%V&XrhqLk$kMSy-@x z4H?f-x_sAx$3qcz5#ODx>8QT956Qy6RO)t4zR)?`(jM2g4V`EGonqKFO8>n$D1g*S zwmm<%LFg3+u;e6^33UnOA`npEO-DVbs-h(T9*ABNx(|^atIJ4em(fB;h&82h`q$1Cr5EzEho2Q>|N2+t))c8wqe&=eIV(-07zCNZ`wjuJ_E)=b9d z=%v%S$4w@_IA{yGu^1+X65`V;6ul&iXFT{gwbGX;n8B3mAnutlH4yB@ix$r?gfTbl z!sFzRsbsKlt0We3J^4Cik*_ofGAF)`F=s_Tj(!}1I&e>uO&oYhP*aJI!{}v{jY)6L znJLf$*tmy+8@yT@2Jx>U3LShtjX`8*UG;;JmK29)TU2(f+gP}=WyR^hnJ z38cBhja%V0`6O52V$v#cFj^?lC@#*PIq+s4?0qFp#M^|$1|v^{X}Qe5n&PF-J0ZjX zsYJ!|GKEcyV*z>`CXnhO-@wZvBw=c#_={q^e50X4nTn33R>1oq>8crK30V`qHpUJk zUS*LZ;sjm-wM$S&Y|qH-IdlS4A&F~~DeaA^ld7k^RtaMs}#mv9hLKKb}WVQZ-X5ES?;??znM zrAy2eRo~$VdqDe?F|6|l;WWSphATXBJkJ=!kgp@9_!){o7^o_Ag(N$pGM~mrtLm*Q5a_)(taHuW3p2hTe z-RqDc@4vVusk1_9E>@VbPf5%3DgCZznY9?xY$d~u#ycm46D`tFO${FR$)LNR(~(cy ziT@*{G>mMu+QeugE&2gDP~tof5E@lQfBd=BIKOmy&(&$?N5q;wlcI#TLY#`C*d7(x8|yVx|A1-myU)pVkmXygc!{4L8?subjPGm-J1dx}rEWN_ z#NvZ#qYHyajuyYX7Ih`X@~ZrJMLC#I|i)6Wg|J+n980+qP|U!pS5P+jb^S=H`FzJ-1HX^Uzh@ z)i3?fRcr0N*YErMUFAz^dt-H1x*cN4sVGg&*+kqotPVL;iC~kW?;oTRg94;HzQoj7G>q&Ri&DODYoK_sIPTTA{O_7J^8g){_E-*<|ky?0>DO(J5 zX*HhK%w}pFl0Oya;1SNZTy^l)m4RMb4Q(-SD;5uTvR|^s364ddXJoatcCKadPn6Xh z)@*_uZ?D^nX%8T-uiFY~@zZRsXwBjHs&`;zCIlyCS2gt1sb zVPX7{u{Ez_{MZm>u%9ro19>clvB%L-qP@axw#`nXm(v07}3vMB&=Bs?FKoQ1Bii&Ma!s$rz zU>>P8^jsb?LWpUs#Gm=T*q^M)lJ?cn;9U3wn{evtsHI4k3g^AnHo&#KDzZk}-@VH> z(5FIpV4~#_IgOikBU~Zfn{=*WzJ~wRaga3zoljd28{v zFWgKtm6D+%9B`3Bqn4R|D%=GXwf`ny5SeTJUdGx_NJx`xSU+A(o^7o<@1>wvKP^>1 zeJ~l5znJ}FOZF}!6_|DM@G(c!eE)FTP8j-_yq`b`yoOqz^}qeEdlHmBy;42-JUIX2E&LLeU1JAp3) z)IN%!sHfe=rH~P8f>xh#O!aaK+I6{=)}FRTQG>c>`4DwO6h(pP6`wb?`&~F)_LeI| zS{AG%91;Nd_SzM2^w@DUUaN=K!3vFn`)7DqPP|~FS)0FD%a`_r#Nsev`R0Emhcw`Z zLIh4VAVn+^4$4J&5zZq78g0ogKf{bfz4UT~{>%u==PsdokxEOrRwR#?C0b`JD>iYAKXB=1PF*na zs!Rbol@m7S0=rKUW;ZEV z`xprw20nu8V{;C!H;zEY<)6cDof?D^yFX}C4DhYXPn6O*TyhzgU7Lg*$m16l$R647 z7Tmo%YQ(X(#^r+p$bR*&J_{+@g(p*riM8s^T%(~q@A0{C0n_!U=eo)?QMXiKY zh$cnOvnJTj*kz>e%6!xgb&V7vl1RWJI5ABBb$~W!^PuX8AW;oSGH+ct+9Qny+XE!Y z?GstK7So39Q@_$f$qNki{pUd0e^pZwd@TYDvA0se(NqG`jjIQz*l?{KZQ4%OiV}0X zBdF2$4x5L!x5ij+YNG|mHd`Ur-a+|8VfeE{rJ!3>3taNal7WhKrjdk^B;F3KX?T8oQjg+q2h|R0)X3)C1!>ML zeCr5|4zmViLF%~!4gI#C35>cFzqyxh8nX*fURy~Hmgo8g{NB$R6bI~EG=aLE=3Y>= zfFA45COP^$90&iZ0&95XR4j3X1+Ba6^zA=$3i?%Oj;}gZuws|3e}0H8l`z&rn)CDg zPJB&}VwTHkzYkgq+|j9bn5zgpEDX!#+tOF#f-J0%tSFl@r4UCMpE4wlk#jthcvI?R zoi|FDR2V>e&1~kjv!pt^BL}=)1T$Q5?$P!0Xcdcl>Gx}l1q;<$$M+JKXoDRStr#RH zY9|*CaY{xjD#dHnd&3hHxmEK@r&0D#_!SY-jVMd;?cH?i$(cNmOuY6n&%oyOvNIEGTBc<$^!13j1{1cT1dZq!W3H(^S-vY36WgbExZbsl^~uW%{tN5&P}w9GD z;yuXi>XF@&m*s2ac_B>MgkAk?*!neM7G<-nBiZ=Ge`lb-MaAounUMPt$&wq|Ynbkv zaN${hF@FHo_0B)OO6W?{toZvd82{p5U~+gztz#bBt7t~$6d>pV048BbY@+r*wDg5_ zrl>wF9F={U{|rEWxA7m?mb*O-+|Sy-ZPPLrhuEeVJFi{Ng4GuwC0aZ%?efzTsGKT4 zSjh5|NdGl??Dk^$f+a6dKZSJ=?Z%4NE|ktR(Qk8SuHQ#$xOiaO<){BCpX_*YCyz)> za8C#NE|KPt4!GMe)o5YGs9xAO#B^;?ZSS?m5Hgi@`RQt$dtpE%-VwaiF>WVcpWlJK z6jBP#AC7N~S1j5~WVGLDAl9FQ?fTrYnfarmI9V}kr{^>OEx!{D`G9hJDVzFraLn)K zm=&qBlt%U;QupUD{fOfC)t@Nyn zG>~wQ2;$_zD|Rb#7}J3n>%1s)w3x8|32lk6nrh2KUbT)n_s6l*AGRpS{I%)!OvyGk zS#=ukqX1h41~bY)$2v=0LPgbIbJgO)^H=&T*N{@9#M|Ng&eZ@@++k;#o~(}#6@d^9 z1{en`3@tQL?NHZ0O|vv-6~Ie)Wnv4RF(1AZzgt$|5E0wWGQPFtH{E%++A^|=E0-*lI9sjN=Pf?07XpDg%PvG0n0F8fCcuC% zJa-oHvFhM4DSqBsmyap`f{B_Y$D2Q_&`&ayC$VG|y3tTnI30!JENh2F;w)D!vWsiQ z#zW}+F}ifWYFLnM9hu$ZrZ!bN_bN+eWMeTZpRL{cI-_^m6Gl4&L0Vf|yA7cbD(}!B z3faQqhY-O}lSk5;j~7u~=wp+$JYbPZBF$2fw*rajT$YM)9>zVnsm*Qb%zo;ol#Ly1 zyR-#Htf=J@V^IXI@XgD;!QiCm9QAL>r5g-Gzvs_w4C1CZ997@sHjOcCw*y?9VEc=G14V zm5VHxx!PXM&FWjroXx5$BS3C*IZ=w@^2j-rs+S*M&fjQn2GR{;?W90bEEy90Rd;;T zdm>rQmk+y23q1m-`9$l|daqdMhgdD%3}dX6f)(zaR<(N`&I6Mwkpv=z7>~0CyEv)* z!Fe{c)*!fKyAUg38R<>8Cr%pXHdYtXJvkCs}_UR!?7rF z>b~EkCCS%bscV;q4){W1y+&VK>7Wf2>yusf9;M*2RS+fh_ssGp=qa-EA({xX45N-+ zdj>qAqJsmKN-CF)`hm6gA?DT47cV=-p>vpnyhW`Tcf&QX(H#nj^|h%5|~DU|K8 z5@?2-gpT_{RLgtjCXEzY4h#9W_UiFk!>xl(E8Jk_+(9PZwSLb zw-A1bpc^S(gEx;-(ZYj#z(vb^1Qc#EiL!%jRT;NLg0B`zWJ^ms316~+Np#?gPzxWj z12j%!Bc%l<$AiRAqV3Oqjx7C0dEP!tx^1UL@cl8q89+I!C;h^aZ)siO+KU-CeTeoO zHsY`ow+7fAi5i+0^@qkDt-3+1t(re}ow_$do$8AZ-L}yoUhTV64TV6qnm5}=oK!WD zbbql^G%b<+Eu5BjZtAkGcW^46#+KFLS08d$km}fahe?N|?M)Y^PS|+&wX(XS9-}rC zV;ybG1?Df+&Ou>YfXB&zUTXwh6g+(US?Gq#WyF(eAw)P0&NLn5%#3$5jL!vsBtk|%mK(yc zf{x<3%X0QF)kZ}%_?s6!p(R2|loK?l_@DCOMBtm?AvKMnd#0i(gchWO7GkJUt=2hZ z;;7CIMBS(ph_P$-7DTbFG|d}@ksM_`#z-}W3rWtHtYTDT{{Wht0atFwK8c>Z-(C22 z6{IuD$A;j?!-8kZb;-N$Bw5NoA#bunK^1@ULqTPK)aK&t)f9cHm%lN^e zegH2m-4{tIGoNDoA zNd%^J-O8h=0dlVaq)n9JB80&S{?DNE9Q?Q_T#gVnmGU_aIDaZ}x#}sr%&#EVUHp!3 zv%#`EejV`sFq(s-)@w)!K;)O6d&NdN|7E zG{uvUC~&!noLJe31cwssmE0xuyiIk&ys+|QOb8&>VrI%{%F2P7|bxg~?@V}9x z^}@=nqA^?=A^6e)#@#C*Dtl6F=+$B$UybRnZ*y;=5f9a1C!dnqDVdy1T*PULg0Aqz zUAQYHjGfW9lBY3fB7lhrY06MF?$MfxuZj2{++KkyQ`S}Djm}zj)9%$yikcm)_9(JN z++^Zp_MJVJw0d%kPO~siHRz0GPQNrdX4x%w$v0e8I%d(YI$_(XXMUrjTzS)MkcR4B z-Q+21Y=SU?c6RLq>6AC4`B&0kip;Oo)6xiZR4n;AQ|YN>9s^Tkg#8wT>91~v2B3`V z8DdkKR_SayfwTsLqaudJo%M5?4OsrBDi|qmuzsPwyX_jOX5I7Y*K}qYDOgSlU>#9j z2Ad!bsFU`P+WoQv9C~Cy=Umr8=e8KOhW=C=2?Y$ZWqZGWcdg1_`cQ48D6QvPG?kmiO6o9`!QMb0i#=?(yxJsWKsLH?Wg-`8ru^z6HX@RbvEI1%HdfIx=b8XAJJO#96a(ybkv(Q-kXdr<`|Ep#}C(+|U6B z->5C4Bq{K{UXZOGr4J=)Il^W8ruQbDydLFyediLbSKrc`2vyGt2ouT;MbQi0af^YW zh80ukoPn}cJ?f1*+@(6+q~s z$fhLcIj^r%O`}DUo7o~TGG^{?E9@m-$s0N{nH@Knw^{N~HC|iaF zxL_!9LJ_%$a-Ar;c69zwgSro2W{4)HK@pDXdEvTyf!yzK(1&?8g7=mEyywLaLJc<| zd8GyzMt^gmj_*_F#Q5_i*hD)C>V=s)VZ@CxbO?Um2XRZn3+HWsSEQVVbB6qcwA}m4 z1?M=t>cuoW2<6Nu5FLGsp%>)1ukxP3CPUQj)6-Ecqm)fgwf?~VMpX~(Zy z(!RrI@NHMW;A>w00i+yMLARqF$yw0%6>exj=eQxJ9E|5uS4RIsy%0lQ+mLndl%LKH z7=)JHKi%`_duH#&8t+|LroCgauX?nB7^f`;ncS!7#M$ss>SI@vn0tGcrI%K&ftOnB zW0wflbjGpnum~5;%8VUatY-a%5&UI8m%8E6z&fAC0St7g&bDY#{eEOR zJqwntOOxdDe3NG29Ll-m z2u0G`pivx;GHz)sipRdHV)-Zv(!P+nMO3`FP53K#6MGaDHw#R%h ziDk6}L~DWq$WL4bp_-}<&$T@mfMkPTlrRv!j9fFIOw2TBTd8*PEPOF`E|o@V8ERGT z?gZwQ8!bk#C51l9?kMZbxtlsSt-d3#hAZaE3GP@nZ*)BTjJPF|ga|nI#m4W{lAkIa zx2J4}wFm#=2qAsqbz*>bWhiX*q#6wCK65775^q3R!_*4$G-XJ!ISxR&CSfGIHDG&f zU%LuciTdQd0Q=?mj4t-#vcUZ#B_N(C$XBD`m-GOY{*86*Q?tS|ABdqIVjm1zk0Hg5 zEyPE6(5ERUy3U;MPClTfm03+SUb@P0GUg&3N4e)?uQ3{a3eN1Ve{!2*p zH^h8hZk~ht9GENWU*lnBB7enaML{(0waixLUR?mtZY~|LYYP6!hWn2Psw>=$C_r7L z?8cOU(M0?xh-@!V>Om;o)8`WEfl?iTa%y;HmM;jk4u2Wkq5ex)wM+D(0ZRiV43mHL z&kT-t8P~3k0T_FtfxByHjZm~Y1hSUI>-dkt-;C}>DYKa(X417+`I0ViuO+w60U2U5 z+=p!%JC7td7xT_Bw08k~J8g1t_ zsQOLjkuaBO`Ropfoj-DjWMrV7i5rKz%wkJJ*qu0(zyz658y~HF7`Jt^l&zl}i}XF0 zfU&e|Ve1vrxrnDd)e(9zRbb~+ab4F~4-Cw-qLDBt9E@I!c#4i^x9?muvoR7T+)6M7 zGz@-;QUon$ps30dxxpEzS-?n5@I({g(odnRe_Yd#MB%&1&naEyzPR~~Bi)HsFGQ1B zrkkiWK-Qm7QCljHB1Q3)qtl^X*NO#*^6)qO;TJuY$a?DU@-otmM58Xm+15!xN~G-~ zm3Abdp+-G+p|Ch%+N?z-S;mi+vK--iRmt??0^#M!(+(LyK-mw`qIh7=Sl1CIqyj;G-$hseoxn0ja{K4M=5V05l*H) zfQ3(>DP9@IEb};P^ta#BZ>sm$hnM_E|IOCj{G#c@|OSwC;XyE&jdqjV2`JvzCDIhu$Dn z(oV9}%>=m@1dKo^c)m=KBGsVfU(#oLFtm-~>wvT!OJp<)wnDh4dWuyfFX(Y)jkJN= zT&=!4fAUVMx-9m@?@!WNG0E5CQ7Ns|z&5eW01f1z5lcqTJ93f>we+cMvQrRjo=~b5 zV~IF7wBdMvVn}I1yyH$bv2^yEU7-Up&u2NCr2;cVRsncclgtEHC0cosRVt$D_db*d z?pI{RaL`1_qQl|OqHmOuA{iu6DPC~X3U&~)YC%P`nXvQ$U@84O>Rf7(7XcrIfKucI zIe(vdw4QnIAiCSaZc7UDkw#APQ3|YGFM5U#2|-WnwHCZ-ns{v1Ksq~`b*4e4&Y45& zpK>ZEi7K!|kXr{G&8L8H(y>G@!!`1lCP{7?@vaIP{4cb&PdfOHwAZyIEHj&Gz`9hx zx^w`qQ~<9p%8rh1fUOVojex%q0MoGH!&ma*gn1p_jK)P}DmdawQ_vacapb!2U?Z5Q ze5x;7Pqe0I*wT@woag7q&SZ6bIoOGsG@x>S)XM8r;$6B%z%|*!a|ua5CgW9(oC{M9&4{>YY6zMN;(#Q?~MX1l3b+^ZcAZVCV$yf z%?3&>BSAr@ybjYQRheE*O`nN@*31RPi2?~79b z)5B}+7ha9NFLAx@%U_MYg~|0=zwFfdwz~-pfwk!p)pzpz0Q_;Kai?%3zddqL1KIHE zWa%;0k;(@)Sxecq(&meKZjV#GZnr@Ft~o}1vvkIGSdSdBk5eR%Q$>$cobCrp z=gEKnJO8?Lss*}E{q38v(f>gI%*jp@rW2)2!2{&~*Siv`y8fRWJb!jbhr3=HsOLK0FpnwUUVQ(l?QjPMXpSRKO!-exC;{#m5tI^?+RES`Ud+%<4^;0Fgc@wts*Ca{tM*0FJ zG40qH)Qog8)Q5shjq!LP33XROZ41nek>soL+Ie9OSJ!3pfuCYS4G;h9coaEAe-JLm zR9ewlyZl0nml`<^pzS_+bD>+m<=2%J!$+5s`jQDG<;ru#p8!cA@Y#>% zYjj2^_+f81S>=y4o*-M+JsXx$PK1Q1V z8H@j7_W#$1Q@t1UIC>wa`j$9 zjInVuTsL09IMKoKnRW1Z-agWeq<2rV_Iyv`+JPCHtKpZjhu8D!^Zwcp0P6tbjBuW= z&KL*^;uV(LW5dYbuZv=GQgpbkmNHTvOb2L#w3L3wm!$ZW?%9?c*hr7EYA}*8d}x#& z;9(#&V2+6Lslf0T8|e>14i|Kn^X_s(WW%pzS;P9S?!=Mdhdr^??O-^c!7lt}U~98e zryX+Bv_}m)Mmy-P$nMHE%ZPjUo=d|Fo>rS=ggtvwwo;+t5t@744Jj?brjdvT;Q*Yw zT*HASVGhUUb?kDJI(M4YX3F+>DYeyBX`5h2Pn$iyu*BnR(2u9lPa$uRi!P#5^#PU+ z+Rkbiap&g~JW5S+d%uYiH|pDj9ImdSi&~Ty%Eg^elKP8xSVWo2)8(%;>|Nx15X)JP z#i-JA{2a6&0~@fq6Kqj2=zCM7WPqC-_10(;_4Gq*YlZi=mNJ>LnIdCu@E*nu{_2ul zT{DiJ=yTjMWaEsp)S@u_JJ>ucY9rY}Pu#Y~(p_IZ^_$=@qFc1orDAn=ce1u2eG+3& z_ILO?BTZ2hbd?<}2y+DAIh+DxA}CyVHS`QzdVE^0d86UqHz-4Dk6T|u(SWn?B2SaG zyLrc5S4ga?F*XnKucjcI3+S_$N~zwt_mS90)4Mo+)L-*1yY449ESy85JPwnXYI~7s zqJA0WH!8yAY)k5c1u3C)o|pW|uJ%pj<4WCfk6pEzvyLV?R*zObA{`!$XM&zX5E6zq4fH<_B+%5gS$0m(IE=up0%R7jg~SQ_Knw4wnb+ zS#*%YGg7>ESj{80dG|?{XSH4ePMe}c>~uMzU5|HsW!u=PN7ziMe$rcO$W+-LuWFup zRTP=B^kJzUwDx4DfK%dl0oO4C*U}+%Hj<4nCh@HX#7*j~se?~z53nW50LGDYbr)qN ztH_FXni1p1eYZ+w-L<7(M(HpYZ5OnaL64qf8m|HJD!s!wJr- zf4M%9K*2Hb>Nkv`Z-rhO8DrrA?MYTKee5lMHQPT$buN2E{&_q=tiXZWU{@G7^eKOi zlxjjdrg++Zwy|hQE-3xK+j_h1j{ZyOTs6uRX#yxDeooEFokYMJQQ8 z!R{SiQ8s9&1o;mP8^iKGGV?@ad&zmJqlx{GJ-}b$maZm56dC03*>^&_By+>FH&4X+2TI=+a!Y9Y|qS3eX{~ez8L8Eo!n$EZfseD0v`$FKO}OiPIcPAZE1>s7(VJlnXuU=YYPHjx<|#e(cUi^a zI&prjj}|rbP)It3&0dfQ9+h|bnrOYfzNT^gMLNR9?ExE(jc0qX;2(^3Bc@+&VBpvP zYv>N0;&C5l{$*}qi}VTOxP!N63z_#2M((UJj`Td-t8;35u9KFcw>|FcoFNds0_q16 z4o2rRskHr)yf}y=o1cczH!vV*Nq5oaULwn*Ow1>IdDD{4hP?^0VAZX9c z{9R%z9ow*ISKFaby1vdt|G58F9KAgXIZ{RT`Ol-#LEYq7%@N3M^z^Vem`#eE6sa#eUxP_x$I#?V z$nRHp0>rCAVFQFd(jL#VD12f>JGQLkGf=NI#vD7AuvE1w!x$k&XPVPV^EVK|6GYH@ zBCDN3#cFg`RYI{G$rVD?Rt1N6L+Q}hN{>Q1Sm5@4)kl{9 znOpIHoc!PQ5gmXrLO;a#{M;mOwhPNaUipTK?9@!|5TU^=oDwo@B|?uUEeh+=#5=HK zVVRkWFw)khgyOrhCWCaTZ*PA|0gJbEjH| z>3!?b6D+=UIx5#AJ2b;blyKv~M0-p4*&#mUOVRTyS|_Yxuoe~3S9zSs-AfSZ>%B13 zS*8m#(H?;V-T38mLrDD1xTNjS#WjOH z-Q8di5+3Y^gw)G;NeNv=jj9#1Rgt6Gh!o5#J&`YlbZX0w{M8b{;A&r2OEq@SuN*_o zB7`$=$hw_*5xE3UUMa=4F^fi(XPtfrEmcBH2TH1wU=~ldOFc)~RaNCUNR<|Pb#at~ zlquTSuvrlp+L8|}!v5|Wb68N;shHTP83}{fSu$oH$a-RrU}l&HUcym6qAJ`(A;?j9 ztlGqW*CU%d&Y$eF=HmOkGR6Q(k?RxUQGc;ya#nV5lVI~eBdVO5yD%){7Hwkneu*qQ z4e0A6Dsc;#+tsaBW@W?uGOO%&)+tv>rY`EKnR_wmx=^s@s%j2ecjO*#MAOo$$hBmG zo7}~Z3NSl!7RZMwPvT}*BqdywQ{@0ZI+6{^7&IYQmyeuSQoafM6M=9th4rgR%0Djo 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