From dfc0a215e04a0172e255e9d6c4251e2a44fb8744 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Mon, 9 Nov 2020 01:36:15 +0000 Subject: [PATCH 01/83] fix: upgrade com.github.spullara.mustache.java:compiler from 0.9.6-scm1 to 0.9.7 Snyk has created this PR to upgrade com.github.spullara.mustache.java:compiler from 0.9.6-scm1 to 0.9.7. See this package in Maven Repository: https://mvnrepository.com/artifact/com.github.spullara.mustache.java/compiler/ See this project in Snyk: https://app.snyk.io/org/scm-manager/project/e67572ee-5940-4f2b-93b0-dced62d7ed85?utm_source=github&utm_medium=upgrade-pr --- scm-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index adb0f51980..0af34e6770 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -691,7 +691,7 @@ 0.11.2 2.53.1 1.0 - 0.9.6-scm1 + 0.9.7 Tomcat e1 javascript:S3827 From 23317662f2299a7ba9c4c976ce8c647e93dacb36 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Fri, 6 Nov 2020 12:15:19 +0100 Subject: [PATCH 02/83] Implement mercurial hooks over sockets --- .../hooks/DefaultHookHandlerFactory.java | 51 +++++ .../scm/repository/hooks/HgHookHandler.java | 157 ++++++++++++++ .../scm/repository/hooks/HookEnvironment.java | 60 ++++++ .../repository/hooks/HookHandlerFactory.java | 37 ++++ .../scm/repository/hooks/HookServer.java | 118 +++++++++++ .../sonia/scm/repository/hooks/Sockets.java | 56 +++++ .../repository/hooks/HgHookHandlerTest.java | 191 ++++++++++++++++++ .../scm/repository/hooks/HookServerTest.java | 135 +++++++++++++ .../org.mockito.plugins.MockMaker | 1 + 9 files changed, 806 insertions(+) create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java new file mode 100644 index 0000000000..93f0915486 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java @@ -0,0 +1,51 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.spi.HookEventFacade; + +import javax.inject.Inject; +import javax.inject.Provider; +import java.net.Socket; + +public class DefaultHookHandlerFactory implements HookHandlerFactory { + + private final HgRepositoryHandler handler; + private final HookEventFacade hookEventFacade; + private final Provider hookEnvironment; + + @Inject + public DefaultHookHandlerFactory(HgRepositoryHandler handler, HookEventFacade hookEventFacade, Provider hookEnvironment) { + this.handler = handler; + this.hookEventFacade = hookEventFacade; + this.hookEnvironment = hookEnvironment; + } + + @Override + public HgHookHandler create(Socket socket) { + return new HgHookHandler(handler, hookEventFacade, hookEnvironment, socket); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java new file mode 100644 index 0000000000..e2398b4498 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java @@ -0,0 +1,157 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.subject.Subject; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.RepositoryHookType; +import sonia.scm.repository.api.HgHookMessage; +import sonia.scm.repository.spi.HgHookContextProvider; +import sonia.scm.repository.spi.HookEventFacade; +import sonia.scm.security.BearerToken; +import sonia.scm.security.CipherUtil; + +import javax.annotation.Nonnull; +import javax.inject.Provider; +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.Socket; +import java.util.List; + +import static java.util.Collections.singletonList; + +class HgHookHandler implements Runnable { + + private static final Logger LOG = LoggerFactory.getLogger(HgHookHandler.class); + + private final HgRepositoryHandler handler; + private final HookEventFacade hookEventFacade; + private final Provider environmentProvider; + private final Socket socket; + + HgHookHandler(HgRepositoryHandler handler, HookEventFacade hookEventFacade, Provider environmentProvider, Socket socket) { + this.handler = handler; + this.hookEventFacade = hookEventFacade; + this.environmentProvider = environmentProvider; + this.socket = socket; + } + + @Override + public void run() { + try (InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream()) { + handleHookRequest(input, output); + } catch (IOException e) { + LOG.warn("failed to read hook request", e); + } finally { + close(); + } + } + + private void handleHookRequest(InputStream input, OutputStream output) throws IOException { + Request request = Sockets.read(input, Request.class); + Response response = handleHookRequest(request); + Sockets.send(output, response); + } + + private Response handleHookRequest(Request request) { + HookEnvironment environment = environmentProvider.get(); + try { + if (!environment.isAcceptAble(request.getChallenge())) { + return error("invalid hook challenge"); + } + + authenticate(request); + environment.setPending(request.getType() == RepositoryHookType.PRE_RECEIVE); + + HgHookContextProvider context = createHookContextProvider(request); + hookEventFacade.handle(request.getRepositoryId()).fireHookEvent(request.getType(), context); + + return new Response(context.getHgMessageProvider().getMessages(), false); + } catch (AuthenticationException ex) { + LOG.warn("hook authentication failed", ex); + return error("hook authentication failed"); + } catch (Exception ex) { + LOG.warn("unknown error on hook occurred", ex); + return error("unknown error"); + } finally { + environment.clearPendingState(); + } + } + + @Nonnull + private HgHookContextProvider createHookContextProvider(Request request) { + File repositoryDirectory = handler.getDirectory(request.getRepositoryId()); + return new HgHookContextProvider( + handler, repositoryDirectory, null, request.node, request.type + ); + } + + private void authenticate(Request request) { + String token = CipherUtil.getInstance().decode(request.getToken()); + BearerToken bearer = BearerToken.valueOf(token); + Subject subject = SecurityUtils.getSubject(); + subject.login(bearer); + } + + private Response error(String message) { + return new Response( + singletonList(new HgHookMessage(HgHookMessage.Severity.ERROR, message)), + true + ); + } + + private void close() { + try { + socket.close(); + } catch (IOException e) { + LOG.debug("failed to close hook socket", e); + } + } + + @Data + @AllArgsConstructor + public static class Request { + private String token; + private RepositoryHookType type; + private String repositoryId; + private String challenge; + private String node; + } + + @Data + @AllArgsConstructor + public static class Response { + private List messages; + private boolean abort; + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java new file mode 100644 index 0000000000..a1d205a9d5 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookEnvironment.java @@ -0,0 +1,60 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import javax.inject.Singleton; +import java.util.UUID; + +@Singleton +public class HookEnvironment { + + private final ThreadLocal threadEnvironment = new ThreadLocal<>(); + private final String challenge = UUID.randomUUID().toString(); + + public String getChallenge() { + return challenge; + } + + public boolean isAcceptAble(String challenge) { + return this.challenge.equals(challenge); + } + + void setPending(boolean pending) { + threadEnvironment.set(pending); + } + + void clearPendingState() { + threadEnvironment.remove(); + } + + public boolean isPending() { + Boolean threadState = threadEnvironment.get(); + if (threadState != null) { + return threadState; + } + return false; + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java new file mode 100644 index 0000000000..61d3a1340d --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java @@ -0,0 +1,37 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import com.google.inject.ImplementedBy; + +import java.net.Socket; + +@FunctionalInterface +@ImplementedBy(DefaultHookHandlerFactory.class) +interface HookHandlerFactory { + + Runnable create(Socket socket); + +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java new file mode 100644 index 0000000000..0ecbe180c4 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -0,0 +1,118 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import com.google.common.util.concurrent.ThreadFactoryBuilder; +import org.apache.shiro.concurrent.SubjectAwareExecutorService; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import javax.annotation.Nonnull; +import javax.inject.Inject; +import javax.inject.Singleton; +import java.io.IOException; +import java.net.InetAddress; +import java.net.ServerSocket; +import java.net.Socket; +import java.util.concurrent.ExecutorService; +import java.util.concurrent.Executors; + +@Singleton +public class HookServer implements AutoCloseable { + + private static final Logger LOG = LoggerFactory.getLogger(HookServer.class); + + private final HookHandlerFactory handlerFactory; + + private ExecutorService acceptor; + private ExecutorService workerPool; + private ServerSocket serverSocket; + + @Inject + public HookServer(HookHandlerFactory handlerFactory) { + this.handlerFactory = handlerFactory; + } + + private ExecutorService createAcceptor() { + return new SubjectAwareExecutorService(Executors.newSingleThreadExecutor( + new ThreadFactoryBuilder().setNameFormat("HgHookAcceptor").build() + )); + } + + private ExecutorService createWorkerPool() { + return new SubjectAwareExecutorService(Executors.newCachedThreadPool( + new ThreadFactoryBuilder().setNameFormat("HgHookWorker-%d").build() + ) + ); + } + + public int start() throws IOException { + acceptor = createAcceptor(); + workerPool = createWorkerPool(); + serverSocket = createServerSocket(); + // set timeout to 2 min, to avoid blocking clients + serverSocket.setSoTimeout(2 * 60 * 1000); + + accept(); + + int port = serverSocket.getLocalPort(); + LOG.info("open hg hook server on port {}", port); + return port; + } + + private void accept() { + acceptor.submit(() -> { + while (!serverSocket.isClosed()) { + try { + Socket clientSocket = serverSocket.accept(); + LOG.trace("accept incoming hook client from {}", clientSocket.getInetAddress()); + workerPool.submit(handlerFactory.create(clientSocket)); + } catch (IOException ex) { + LOG.debug("failed to accept socket, possible closed", ex); + } + } + }); + } + + @Nonnull + private ServerSocket createServerSocket() throws IOException { + return new ServerSocket(0, 0, InetAddress.getLoopbackAddress()); + } + + @Override + public void close() throws IOException { + if (serverSocket != null) { + serverSocket.close(); + } + shutdown(acceptor); + shutdown(workerPool); + } + + private void shutdown(ExecutorService acceptor) { + if (acceptor != null) { + acceptor.shutdown(); + } + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java new file mode 100644 index 0000000000..e6b748643b --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java @@ -0,0 +1,56 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import com.fasterxml.jackson.databind.ObjectMapper; + +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +class Sockets { + + private static final ObjectMapper objectMapper = new ObjectMapper(); + + private Sockets() { + } + + static void send(OutputStream out, Object object) throws IOException { + byte[] bytes = objectMapper.writeValueAsBytes(object); + out.write(bytes); + out.write('\0'); + } + + static T read(InputStream in, Class type) throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + int c = in.read(); + while (c != '\0') { + buffer.write(c); + c = in.read(); + } + return objectMapper.readValue(buffer.toByteArray(), type); + } +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java new file mode 100644 index 0000000000..516b66c4a3 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java @@ -0,0 +1,191 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import com.google.inject.util.Providers; +import org.apache.shiro.authc.AuthenticationException; +import org.apache.shiro.authc.AuthenticationToken; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ThreadContext; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryHookType; +import sonia.scm.repository.api.HgHookMessage; +import sonia.scm.repository.spi.HgHookContextProvider; +import sonia.scm.repository.spi.HookEventFacade; +import sonia.scm.security.CipherUtil; + +import javax.annotation.Nonnull; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; +import java.net.Socket; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.ArgumentMatchers.eq; +import static org.mockito.Mockito.*; + +@ExtendWith(MockitoExtension.class) +class HgHookHandlerTest { + + @Mock + private HgRepositoryHandler repositoryHandler; + + @Mock + private HookEventFacade hookEventFacade; + + @Mock + private HookEventFacade.HookEventHandler hookEventHandler; + + @Mock + private Socket socket; + + private HookEnvironment hookEnvironment; + + private HgHookHandler handler; + + @Mock + private Subject subject; + + @BeforeEach + void setUp() { + ThreadContext.bind(subject); + + hookEnvironment = new HookEnvironment(); + DefaultHookHandlerFactory factory = new DefaultHookHandlerFactory( + repositoryHandler, hookEventFacade, Providers.of(hookEnvironment) + ); + + handler = factory.create(socket); + } + + @AfterEach + void tearDown() { + ThreadContext.unbindSubject(); + } + + @Test + void shouldFireHook() throws IOException { + when(hookEventFacade.handle("42")).thenReturn(hookEventHandler); + + HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + HgHookHandler.Response response = send(request); + + assertSuccess(response, RepositoryHookType.POST_RECEIVE); + assertThat(hookEnvironment.isPending()).isFalse(); + } + + @Test + void shouldSetPendingStateOnPreReceiveHooks() throws IOException { + when(hookEventFacade.handle("42")).thenReturn(hookEventHandler); + + HgHookHandler.Request request = createRequest(RepositoryHookType.PRE_RECEIVE); + HgHookHandler.Response response = send(request); + + assertSuccess(response, RepositoryHookType.PRE_RECEIVE); + assertThat(hookEnvironment.isPending()).isTrue(); + } + + @Test + void shouldHandleAuthenticationFailure() throws IOException { + doThrow(IllegalStateException.class) + .when(hookEventFacade) + .handle("42"); + + HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + HgHookHandler.Response response = send(request); + + assertError(response, "unknown"); + } + + @Test + void shouldHandleUnknownFailure() throws IOException { + doThrow(AuthenticationException.class) + .when(subject) + .login(any(AuthenticationToken.class)); + + HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + HgHookHandler.Response response = send(request); + + assertError(response, "authentication"); + } + + @Test + void shouldReturnErrorWithInvalidChallenge() throws IOException { + HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE, "something-different"); + HgHookHandler.Response response = send(request); + + assertError(response, "challenge"); + } + + private void assertSuccess(HgHookHandler.Response response, RepositoryHookType type) { + assertThat(response.getMessages()).isEmpty(); + assertThat(response.isAbort()).isFalse(); + + verify(hookEventHandler).fireHookEvent(eq(type), any(HgHookContextProvider.class)); + } + + private void assertError(HgHookHandler.Response response, String message) { + assertThat(response.isAbort()).isTrue(); + assertThat(response.getMessages()).hasSize(1); + HgHookMessage hgHookMessage = response.getMessages().get(0); + assertThat(hgHookMessage.getSeverity()).isEqualTo(HgHookMessage.Severity.ERROR); + assertThat(hgHookMessage.getMessage()).contains(message); + } + + @Nonnull + private HgHookHandler.Request createRequest(RepositoryHookType type) { + return createRequest(type, hookEnvironment.getChallenge()); + } + + @Nonnull + private HgHookHandler.Request createRequest(RepositoryHookType type, String challenge) { + String secret = CipherUtil.getInstance().encode("secret"); + return new HgHookHandler.Request( + secret, type, "42", challenge, "abc" + ); + } + + private HgHookHandler.Response send(HgHookHandler.Request request) throws IOException { + ByteArrayOutputStream buffer = new ByteArrayOutputStream(); + Sockets.send(buffer, request); + ByteArrayInputStream input = new ByteArrayInputStream(buffer.toByteArray()); + when(socket.getInputStream()).thenReturn(input); + ByteArrayOutputStream output = new ByteArrayOutputStream(); + when(socket.getOutputStream()).thenReturn(output); + + handler.run(); + + return Sockets.read(new ByteArrayInputStream(output.toByteArray()), HgHookHandler.Response.class); + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java new file mode 100644 index 0000000000..afd485c477 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java @@ -0,0 +1,135 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.mgt.DefaultSecurityManager; +import org.apache.shiro.subject.SimplePrincipalCollection; +import org.apache.shiro.subject.Subject; +import org.apache.shiro.util.ThreadContext; +import org.junit.jupiter.api.AfterEach; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; + +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; +import java.net.InetAddress; +import java.net.Socket; + +import static org.assertj.core.api.Assertions.assertThat; + +@ExtendWith(MockitoExtension.class) +class HookServerTest { + + private static final Logger LOG = LoggerFactory.getLogger(HookServerTest.class); + + @BeforeEach + void setUp() { + DefaultSecurityManager securityManager = new DefaultSecurityManager(); + ThreadContext.bind(securityManager); + Subject subject = new Subject.Builder().principals(new SimplePrincipalCollection("Tricia", "Testing")).buildSubject(); + ThreadContext.bind(subject); + } + + @AfterEach + void tearDown() { + ThreadContext.unbindSubject(); + ThreadContext.unbindSecurityManager(); + } + + @Test + void shouldStartHookServer() throws IOException { + Response response = send(new Request("Joe")); + assertThat(response.getGreeting()).isEqualTo("Hello Joe"); + assertThat(response.getGreeter()).isEqualTo("Tricia"); + } + + private Response send(Request request) throws IOException { + try (HookServer server = new HookServer(HelloHandler::new)) { + int port = server.start(); + try ( + Socket socket = new Socket(InetAddress.getLoopbackAddress(), port); + InputStream input = socket.getInputStream(); + OutputStream output = socket.getOutputStream() + ) { + Sockets.send(output, request); + return Sockets.read(input, Response.class); + } catch (IOException ex) { + throw new RuntimeException("failed", ex); + } + } + } + + public static class HelloHandler implements Runnable { + + private final Socket socket; + + private HelloHandler(Socket socket) { + this.socket = socket; + } + + @Override + public void run() { + try (InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream()) { + Request request = Sockets.read(input, Request.class); + Subject subject = SecurityUtils.getSubject(); + Sockets.send(output, new Response("Hello " + request.getName(), subject.getPrincipal().toString())); + } catch (IOException ex) { + throw new RuntimeException("failed", ex); + } finally { + try { + socket.close(); + } catch (IOException e) { + LOG.error("failed to close socket", e); + } + } + } + } + + @Data + @AllArgsConstructor + public static class Request { + + private String name; + + } + + @Data + @AllArgsConstructor + public static class Response { + + private String greeting; + private String greeter; + + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker b/scm-plugins/scm-hg-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker new file mode 100644 index 0000000000..1f0955d450 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/resources/mockito-extensions/org.mockito.plugins.MockMaker @@ -0,0 +1 @@ +mock-maker-inline From d518af4ccc7dda0afb3bb10208eed9fae65a33c6 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 7 Nov 2020 15:52:22 +0100 Subject: [PATCH 03/83] Refactor nearly the whole scm-hg-plugin for new hook implementation --- .../scm/api/v2/resources/HgConfigDto.java | 6 +- .../scm/repository/AbstractHgHandler.java | 391 --------------- .../DefaultHgEnvironmentBuilder.java | 129 +++++ .../java/sonia/scm/repository/HgConfig.java | 27 +- .../java/sonia/scm/repository/HgContext.java | 121 ----- .../scm/repository/HgContextProvider.java | 96 ---- .../sonia/scm/repository/HgEnvironment.java | 127 ----- ...stStore.java => HgEnvironmentBuilder.java} | 27 +- .../sonia/scm/repository/HgHookManager.java | 354 -------------- .../scm/repository/HgRepositoryFactory.java | 106 +++++ .../scm/repository/HgRepositoryHandler.java | 90 +--- .../java/sonia/scm/repository/HgVersion.java | 15 +- .../scm/repository/api/HgHookMessage.java | 68 +-- ...okHandler.java => DefaultHookHandler.java} | 36 +- .../HookContextProviderFactory.java} | 67 +-- .../scm/repository/hooks/HookHandler.java | 28 ++ .../repository/hooks/HookHandlerFactory.java | 5 +- ...ookHandlerFactory.java => HookModule.java} | 31 +- .../scm/repository/hooks/HookServer.java | 39 +- .../scm/repository/spi/HgCommandContext.java | 132 +----- .../spi/HgHookChangesetProvider.java | 112 +---- .../repository/spi/HgHookContextProvider.java | 79 +--- .../spi/HgRepositoryServiceProvider.java | 38 +- .../spi/HgRepositoryServiceResolver.java | 17 +- .../scm/repository/spi/HgVersionCommand.java | 114 +++++ .../spi/SimpleHgWorkingCopyFactory.java | 20 +- .../main/java/sonia/scm/web/HgCGIServlet.java | 60 +-- .../sonia/scm/web/HgHookCallbackServlet.java | 446 ------------------ .../web/HgRepositoryEnvironmentBuilder.java | 80 ---- .../java/sonia/scm/web/HgServletModule.java | 26 +- .../src/main/java/sonia/scm/web/HgUtil.java | 155 +----- .../resources/sonia/scm/python/scmhooks.py | 109 ++--- .../HgConfigDtoToHgConfigMapperTest.java | 4 +- .../DefaultHgEnvironmentBuilderTest.java | 149 ++++++ .../EmptyHgEnvironmentBuilder.java} | 30 +- .../scm/repository/HgContextProviderTest.java | 111 ----- .../repository/HgRepositoryFactoryTest.java | 125 +++++ .../repository/HgRepositoryHandlerTest.java | 29 +- .../java/sonia/scm/repository/HgTestUtil.java | 54 +-- ...rTest.java => DefaultHookHandlerTest.java} | 83 ++-- .../HookContextProviderFactoryTest.java} | 60 +-- .../scm/repository/hooks/HookServerTest.java | 2 +- .../spi/AbstractHgCommandTestBase.java | 20 +- .../repository/spi/HgBranchCommandTest.java | 6 +- .../repository/spi/HgIncomingCommandTest.java | 17 +- .../spi/HgModificationsCommandTest.java | 27 +- .../repository/spi/HgModifyCommandTest.java | 8 +- .../repository/spi/HgOutgoingCommandTest.java | 17 +- .../repository/spi/HgVersionCommandTest.java | 137 ++++++ .../spi/IncomingOutgoingTestBase.java | 4 +- .../spi/SimpleHgWorkingCopyFactoryTest.java | 7 +- .../scm/web/HgHookCallbackServletTest.java | 60 --- .../lifecycle/modules/ScmSecurityModule.java | 4 +- 53 files changed, 1230 insertions(+), 2875 deletions(-) delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/{HgContextRequestStore.java => HgEnvironmentBuilder.java} (59%) delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/{HgHookHandler.java => DefaultHookHandler.java} (81%) rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/{spi/AbstractHgCommand.java => hooks/HookContextProviderFactory.java} (52%) create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandler.java rename scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/{DefaultHookHandlerFactory.java => HookModule.java} (60%) create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgVersionCommand.java delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java delete mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgRepositoryEnvironmentBuilder.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java rename scm-plugins/scm-hg-plugin/src/{main/java/sonia/scm/repository/HgVersionHandler.java => test/java/sonia/scm/repository/EmptyHgEnvironmentBuilder.java} (66%) delete mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgContextProviderTest.java create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java rename scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/{HgHookHandlerTest.java => DefaultHookHandlerTest.java} (63%) rename scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/{HgEnvironmentTest.java => hooks/HookContextProviderFactoryTest.java} (52%) create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgVersionCommandTest.java delete mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java index b5039cbb44..464e896767 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -30,9 +30,10 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; -@NoArgsConstructor @Getter @Setter +@NoArgsConstructor +@SuppressWarnings("java:S2160") // we don't need equals for dto public class HgConfigDto extends HalRepresentation { private boolean disabled; @@ -44,7 +45,6 @@ public class HgConfigDto extends HalRepresentation { private boolean useOptimizedBytecode; private boolean showRevisionInId; private boolean enableHttpPostArgs; - private boolean disableHookSSLValidation; @Override @SuppressWarnings("squid:S1185") // We want to have this method available in this package diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java deleted file mode 100644 index a74fdf9b21..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/AbstractHgHandler.java +++ /dev/null @@ -1,391 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -//~--- non-JDK imports -------------------------------------------------------- - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sonia.scm.SCMContext; -import sonia.scm.util.IOUtil; -import sonia.scm.util.Util; -import sonia.scm.web.HgUtil; - -import javax.xml.bind.JAXBException; -import java.io.File; -import java.io.IOException; -import java.io.InputStream; -import java.util.ArrayList; -import java.util.Arrays; -import java.util.HashMap; -import java.util.Iterator; -import java.util.List; -import java.util.Map; - -//~--- JDK imports ------------------------------------------------------------ - -/** - * - * @author Sebastian Sdorra - */ -public class AbstractHgHandler -{ - - /** Field description */ - protected static final String ENV_ID_REVISION = "SCM_ID_REVISION"; - - /** Field description */ - protected static final String ENV_NODE = "HG_NODE"; - - /** Field description */ - protected static final String ENV_PAGE_LIMIT = "SCM_PAGE_LIMIT"; - - /** Field description */ - protected static final String ENV_PAGE_START = "SCM_PAGE_START"; - - /** Field description */ - protected static final String ENV_PATH = "SCM_PATH"; - - /** Field description */ - protected static final String ENV_REPOSITORY_PATH = "SCM_REPOSITORY_PATH"; - - /** Field description */ - protected static final String ENV_REVISION = "SCM_REVISION"; - - /** Field description */ - protected static final String ENV_REVISION_END = "SCM_REVISION_END"; - - /** Field description */ - protected static final String ENV_REVISION_START = "SCM_REVISION_START"; - - /** Field description */ - private static final String ENCODING = "UTF-8"; - - /** mercurial encoding */ - private static final String ENV_HGENCODING = "HGENCODING"; - - /** Field description */ - private static final String ENV_PENDING = "HG_PENDING"; - - /** python encoding */ - private static final String ENV_PYTHONIOENCODING = "PYTHONIOENCODING"; - - /** Field description */ - private static final String ENV_PYTHONPATH = "PYTHONPATH"; - - /** - * the logger for AbstractHgCommand - */ - private static final Logger logger = - LoggerFactory.getLogger(AbstractHgHandler.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * - * @param handler - * @param context - * @param repository - */ - protected AbstractHgHandler(HgRepositoryHandler handler, HgContext context, - Repository repository) - { - this(handler, context, repository, handler.getDirectory(repository.getId())); - } - - /** - * Constructs ... - * - * - * - * @param handler - * @param context - * @param repository - * @param repositoryDirectory - */ - protected AbstractHgHandler(HgRepositoryHandler handler, HgContext context, - Repository repository, File repositoryDirectory) - { - this.handler = handler; - this.context = context; - this.repository = repository; - this.repositoryDirectory = repositoryDirectory; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param revision - * @param path - * - * @return - */ - protected Map createEnvironment(String revision, String path) - { - Map env = new HashMap<>(); - - env.put(ENV_REVISION, HgUtil.getRevision(revision)); - env.put(ENV_PATH, Util.nonNull(path)); - - return env; - } - - /** - * Method description - * - * - * @param args - * - * @return - * - * @throws IOException - */ - protected Process createHgProcess(String... args) throws IOException - { - return createHgProcess(new HashMap(), args); - } - - /** - * Method description - * - * - * @param extraEnv - * @param args - * - * @return - * - * @throws IOException - */ - protected Process createHgProcess(Map extraEnv, - String... args) - throws IOException - { - return createProcess(extraEnv, handler.getConfig().getHgBinary(), args); - } - - /** - * Method description - * - * - * @param script - * @param extraEnv - * - * @return - * - * @throws IOException - */ - protected Process createScriptProcess(HgPythonScript script, - Map extraEnv) - throws IOException - { - return createProcess(extraEnv, handler.getConfig().getPythonBinary(), - script.getFile(SCMContext.getContext()).getAbsolutePath()); - } - - /** - * Method description - * - * - * @param errorStream - */ - protected void handleErrorStream(final InputStream errorStream) - { - if (errorStream != null) - { - new Thread(new Runnable() - { - @Override - public void run() - { - try - { - String content = IOUtil.getContent(errorStream); - - if (Util.isNotEmpty(content)) - { - logger.error(content.trim()); - } - } - catch (IOException ex) - { - logger.error("error during logging", ex); - } - } - }).start(); - } - } - - //~--- get methods ---------------------------------------------------------- - - protected T getResultFromScript(Class resultType, HgPythonScript script) throws IOException { - return getResultFromScript(resultType, script, - new HashMap()); - } - - @SuppressWarnings("unchecked") - protected T getResultFromScript(Class resultType, - HgPythonScript script, Map extraEnv) - throws IOException - { - Process p = createScriptProcess(script, extraEnv); - - handleErrorStream(p.getErrorStream()); - try (InputStream input = p.getInputStream()) { - return (T) handler.getJaxbContext().createUnmarshaller().unmarshal(input); - } catch (JAXBException ex) { - logger.error("could not parse result", ex); - - throw new InternalRepositoryException(repository, "could not parse result", ex); - } - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param extraEnv - * @param cmd - * @param args - * - * @return - * - * @throws IOException - */ - private Process createProcess(Map extraEnv, String cmd, - String... args) - throws IOException - { - HgConfig config = handler.getConfig(); - List cmdList = new ArrayList(); - - cmdList.add(cmd); - - if (Util.isNotEmpty(args)) - { - cmdList.addAll(Arrays.asList(args)); - } - - if (logger.isDebugEnabled()) - { - StringBuilder msg = new StringBuilder("create process for ["); - Iterator it = cmdList.iterator(); - - while (it.hasNext()) - { - msg.append(it.next()); - - if (it.hasNext()) - { - msg.append(", "); - } - } - - msg.append("]"); - logger.debug(msg.toString()); - } - - ProcessBuilder pb = new ProcessBuilder(cmdList); - - pb.directory(repositoryDirectory); - - Map env = pb.environment(); - - // force utf-8 encoding for mercurial and python - env.put(ENV_PYTHONIOENCODING, ENCODING); - env.put(ENV_HGENCODING, ENCODING); - - //J- - env.put(ENV_ID_REVISION, - String.valueOf(handler.getConfig().isShowRevisionInId()) - ); - //J+ - - if (context.isSystemEnvironment()) - { - env.putAll(System.getenv()); - } - - if (context.isPending()) - { - if (logger.isDebugEnabled()) - { - logger.debug("enable hg pending for {}", - repositoryDirectory.getAbsolutePath()); - } - - env.put(ENV_PENDING, repositoryDirectory.getAbsolutePath()); - - if (extraEnv.containsKey(ENV_REVISION_START)) - { - env.put(ENV_NODE, extraEnv.get(ENV_REVISION_START)); - } - } - - env.put(ENV_PYTHONPATH, HgUtil.getPythonPath(config)); - env.put(ENV_REPOSITORY_PATH, repositoryDirectory.getAbsolutePath()); - env.putAll(extraEnv); - - if (logger.isTraceEnabled()) - { - StringBuilder msg = new StringBuilder("start process in directory '"); - - msg.append(repositoryDirectory.getAbsolutePath()).append( - "' with env: \n"); - - for (Map.Entry e : env.entrySet()) - { - msg.append(" ").append(e.getKey()); - msg.append(" = ").append(e.getValue()); - msg.append("\n"); - } - - logger.trace(msg.toString()); - } - - return pb.start(); - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - protected Repository repository; - - /** Field description */ - protected File repositoryDirectory; - - /** Field description */ - private HgContext context; - - /** Field description */ - private HgRepositoryHandler handler; -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java new file mode 100644 index 0000000000..c4f37bda3b --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java @@ -0,0 +1,129 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.collect.ImmutableMap; +import sonia.scm.repository.hooks.HookEnvironment; +import sonia.scm.repository.hooks.HookServer; +import sonia.scm.security.AccessToken; +import sonia.scm.security.AccessTokenBuilderFactory; +import sonia.scm.security.CipherUtil; +import sonia.scm.web.HgUtil; + +import javax.inject.Inject; +import java.io.File; +import java.io.IOException; +import java.util.Map; + +public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder { + + @VisibleForTesting + static final String ENV_PYTHON_PATH = "PYTHONPATH"; + @VisibleForTesting + static final String ENV_HOOK_PORT = "SCM_HOOK_PORT"; + @VisibleForTesting + static final String ENV_CHALLENGE = "SCM_CHALLENGE"; + @VisibleForTesting + static final String ENV_BEARER_TOKEN = "SCM_BEARER_TOKEN"; + @VisibleForTesting + static final String ENV_REPOSITORY_NAME = "REPO_NAME"; + @VisibleForTesting + static final String ENV_REPOSITORY_PATH = "SCM_REPOSITORY_PATH"; + @VisibleForTesting + static final String ENV_REPOSITORY_ID = "SCM_REPOSITORY_ID"; + @VisibleForTesting + static final String ENV_HTTP_POST_ARGS = "SCM_HTTP_POST_ARGS"; + + private final AccessTokenBuilderFactory accessTokenBuilderFactory; + private final HgRepositoryHandler repositoryHandler; + private final HookEnvironment hookEnvironment; + private final HookServer server; + + private int hookPort = -1; + + @Inject + public DefaultHgEnvironmentBuilder( + AccessTokenBuilderFactory accessTokenBuilderFactory, HgRepositoryHandler repositoryHandler, + HookEnvironment hookEnvironment, HookServer server + ) { + this.accessTokenBuilderFactory = accessTokenBuilderFactory; + this.repositoryHandler = repositoryHandler; + this.hookEnvironment = hookEnvironment; + this.server = server; + } + + + @Override + public Map read(Repository repository) { + ImmutableMap.Builder env = ImmutableMap.builder(); + read(env, repository); + return env.build(); + } + + @Override + public Map write(Repository repository) { + ImmutableMap.Builder env = ImmutableMap.builder(); + read(env, repository); + write(env); + return env.build(); + } + + private void read(ImmutableMap.Builder env, Repository repository) { + HgConfig config = repositoryHandler.getConfig(); + env.put(ENV_PYTHON_PATH, HgUtil.getPythonPath(config)); + + File directory = repositoryHandler.getDirectory(repository.getId()); + + env.put(ENV_REPOSITORY_NAME, repository.getNamespace() + "/" + repository.getName()); + env.put(ENV_REPOSITORY_ID, repository.getId()); + env.put(ENV_REPOSITORY_PATH, directory.getAbsolutePath()); + + // enable experimental httppostargs protocol of mercurial + // Issue 970: https://goo.gl/poascp + env.put(ENV_HTTP_POST_ARGS, String.valueOf(config.isEnableHttpPostArgs())); + } + + private void write(ImmutableMap.Builder env) { + env.put(ENV_HOOK_PORT, String.valueOf(getHookPort())); + AccessToken accessToken = accessTokenBuilderFactory.create().build(); + env.put(ENV_BEARER_TOKEN, CipherUtil.getInstance().encode(accessToken.compact())); + env.put(ENV_CHALLENGE, hookEnvironment.getChallenge()); + } + + private synchronized int getHookPort() { + if (hookPort > 0) { + return hookPort; + } + try { + hookPort = server.start(); + } catch (IOException ex) { + throw new IllegalStateException("failed to start mercurial hook server"); + } + return hookPort; + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java index daf3414a63..3189239dbd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgConfig.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; @@ -36,20 +36,10 @@ import javax.xml.bind.annotation.XmlTransient; * @author Sebastian Sdorra */ @XmlRootElement(name = "config") -public class HgConfig extends RepositoryConfig -{ +public class HgConfig extends RepositoryConfig { public static final String PERMISSION = "hg"; - /** - * Constructs ... - * - */ - public HgConfig() {} - - //~--- get methods ---------------------------------------------------------- - - @Override @XmlTransient // Only for permission checks, don't serialize to XML public String getId() { @@ -123,10 +113,6 @@ public class HgConfig extends RepositoryConfig return useOptimizedBytecode; } - public boolean isDisableHookSSLValidation() { - return disableHookSSLValidation; - } - public boolean isEnableHttpPostArgs() { return enableHttpPostArgs; } @@ -216,10 +202,6 @@ public class HgConfig extends RepositoryConfig this.useOptimizedBytecode = useOptimizedBytecode; } - public void setDisableHookSSLValidation(boolean disableHookSSLValidation) { - this.disableHookSSLValidation = disableHookSSLValidation; - } - //~--- fields --------------------------------------------------------------- /** Field description */ @@ -242,9 +224,4 @@ public class HgConfig extends RepositoryConfig private boolean enableHttpPostArgs = false; - /** - * disable validation of ssl certificates for mercurial hook - * @see Issue 959 - */ - private boolean disableHookSSLValidation = false; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java deleted file mode 100644 index 2791fff3c0..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContext.java +++ /dev/null @@ -1,121 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -//~--- non-JDK imports -------------------------------------------------------- - -/** - * - * @author Sebastian Sdorra - */ -public class HgContext -{ - - /** - * Constructs ... - * - */ - public HgContext() {} - - /** - * Constructs ... - * - * - * @param pending - */ - public HgContext(boolean pending) - { - this.pending = pending; - } - - /** - * Constructs ... - * - * - * @param pending - * @param systemEnvironment - */ - public HgContext(boolean pending, boolean systemEnvironment) - { - this.pending = pending; - this.systemEnvironment = systemEnvironment; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public boolean isPending() - { - return pending; - } - - /** - * Method description - * - * - * @return - */ - public boolean isSystemEnvironment() - { - return systemEnvironment; - } - - //~--- set methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param pending - */ - public void setPending(boolean pending) - { - this.pending = pending; - } - - /** - * Method description - * - * - * @param systemEnvironment - */ - public void setSystemEnvironment(boolean systemEnvironment) - { - this.systemEnvironment = systemEnvironment; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private boolean pending = false; - - /** Field description */ - private boolean systemEnvironment = true; -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java deleted file mode 100644 index 6b09416db2..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextProvider.java +++ /dev/null @@ -1,96 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -//~--- non-JDK imports -------------------------------------------------------- - - -import com.google.common.annotations.VisibleForTesting; -import com.google.inject.OutOfScopeException; -import com.google.inject.Provider; -import com.google.inject.ProvisionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - -import javax.inject.Inject; - -/** - * Injection provider for {@link HgContext}. - * This provider returns an instance {@link HgContext} from request scope, if no {@link HgContext} could be found in - * request scope (mostly because the scope is not available) a new {@link HgContext} gets returned. - * - * @author Sebastian Sdorra - */ -public class HgContextProvider implements Provider -{ - - /** - * the LOG for HgContextProvider - */ - private static final Logger LOG = - LoggerFactory.getLogger(HgContextProvider.class); - - //~--- get methods ---------------------------------------------------------- - - private Provider requestStoreProvider; - - @Inject - public HgContextProvider(Provider requestStoreProvider) { - this.requestStoreProvider = requestStoreProvider; - } - - @VisibleForTesting - public HgContextProvider() { - } - - @Override - public HgContext get() { - HgContext context = fetchContextFromRequest(); - if (context != null) { - LOG.trace("return HgContext from request store"); - return context; - } - LOG.trace("could not find context in request scope, returning new instance"); - return new HgContext(); - } - - private HgContext fetchContextFromRequest() { - try { - if (requestStoreProvider != null) { - return requestStoreProvider.get().get(); - } else { - LOG.trace("no request store provider defined, could not return context from request"); - return null; - } - } catch (ProvisionException ex) { - if (ex.getCause() instanceof OutOfScopeException) { - LOG.trace("we are currently out of request scope, failed to retrieve context"); - return null; - } else { - throw ex; - } - } - } -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java deleted file mode 100644 index a997bb2069..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironment.java +++ /dev/null @@ -1,127 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.inject.ProvisionException; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sonia.scm.security.AccessToken; -import sonia.scm.security.CipherUtil; -import sonia.scm.security.Xsrf; -import sonia.scm.web.HgUtil; - -import javax.servlet.http.HttpServletRequest; -import java.util.Map; - -//~--- JDK imports ------------------------------------------------------------ - -/** - * - * @author Sebastian Sdorra - */ -public final class HgEnvironment -{ - - private static final Logger LOG = LoggerFactory.getLogger(HgEnvironment.class); - - /** Field description */ - public static final String ENV_PYTHON_PATH = "PYTHONPATH"; - - /** Field description */ - private static final String ENV_CHALLENGE = "SCM_CHALLENGE"; - - /** Field description */ - private static final String ENV_URL = "SCM_URL"; - - private static final String SCM_BEARER_TOKEN = "SCM_BEARER_TOKEN"; - - private static final String SCM_XSRF = "SCM_XSRF"; - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ - private HgEnvironment() {} - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param environment - * @param handler - * @param hookManager - */ - public static void prepareEnvironment(Map environment, - HgRepositoryHandler handler, HgHookManager hookManager) - { - prepareEnvironment(environment, handler, hookManager, null); - } - - /** - * Method description - * - * - * @param environment - * @param handler - * @param hookManager - * @param request - */ - public static void prepareEnvironment(Map environment, - HgRepositoryHandler handler, HgHookManager hookManager, - HttpServletRequest request) - { - String hookUrl; - - if (request != null) - { - hookUrl = hookManager.createUrl(request); - } - else - { - hookUrl = hookManager.createUrl(); - } - - try { - AccessToken accessToken = hookManager.getAccessToken(); - environment.put(SCM_BEARER_TOKEN, CipherUtil.getInstance().encode(accessToken.compact())); - extractXsrfKey(environment, accessToken); - } catch (ProvisionException e) { - LOG.debug("could not create bearer token; looks like currently we are not in a request; probably you can ignore the following exception:", e); - } - environment.put(ENV_PYTHON_PATH, HgUtil.getPythonPath(handler.getConfig())); - environment.put(ENV_URL, hookUrl); - environment.put(ENV_CHALLENGE, hookManager.getChallenge()); - } - - private static void extractXsrfKey(Map environment, AccessToken accessToken) { - environment.put(SCM_XSRF, accessToken.getCustom(Xsrf.TOKEN_KEY).orElse("-")); - } -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironmentBuilder.java similarity index 59% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironmentBuilder.java index 3fa04bd1e6..3738d92d88 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgContextRequestStore.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgEnvironmentBuilder.java @@ -21,28 +21,15 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; -import com.google.inject.servlet.RequestScoped; +import com.google.inject.ImplementedBy; -/** - * Holds an instance of {@link HgContext} in the request scope. - * - *

The problem seems to be that guice had multiple options for injecting HgContext. {@link HgContextProvider} - * bound via Module and {@link HgContext} bound void {@link RequestScoped} annotation. It looks like that Guice 4 - * injects randomly the one or the other, in SCMv1 (Guice 3) everything works as expected.

- * - *

To fix the problem we have created this class annotated with {@link RequestScoped}, which holds an instance - * of {@link HgContext}. This way only the {@link HgContextProvider} is used for injection.

- */ -@RequestScoped -public class HgContextRequestStore { - - private final HgContext context = new HgContext(); - - public HgContext get() { - return context; - } +import java.util.Map; +@ImplementedBy(DefaultHgEnvironmentBuilder.class) +public interface HgEnvironmentBuilder { + Map read(Repository repository); + Map write(Repository repository); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java deleted file mode 100644 index 3d333015ee..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgHookManager.java +++ /dev/null @@ -1,354 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.github.legman.Subscribe; -import com.google.common.base.MoreObjects; -import com.google.inject.Inject; -import com.google.inject.OutOfScopeException; -import com.google.inject.Provider; -import com.google.inject.ProvisionException; -import com.google.inject.Singleton; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sonia.scm.config.ScmConfiguration; -import sonia.scm.config.ScmConfigurationChangedEvent; -import sonia.scm.net.ahc.AdvancedHttpClient; -import sonia.scm.security.AccessToken; -import sonia.scm.security.AccessTokenBuilderFactory; -import sonia.scm.util.HttpUtil; -import sonia.scm.util.Util; - -import javax.servlet.http.HttpServletRequest; -import java.io.IOException; -import java.util.UUID; - -//~--- JDK imports ------------------------------------------------------------ - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class HgHookManager { - - @SuppressWarnings("java:S1075") // this url is fixed - private static final String URL_HOOKPATH = "/hook/hg/"; - - /** - * the logger for HgHookManager - */ - private static final Logger logger = - LoggerFactory.getLogger(HgHookManager.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * @param configuration - * @param httpServletRequestProvider - * @param httpClient - * @param accessTokenBuilderFactory - */ - @Inject - public HgHookManager(ScmConfiguration configuration, - Provider httpServletRequestProvider, - AdvancedHttpClient httpClient, AccessTokenBuilderFactory accessTokenBuilderFactory) - { - this.configuration = configuration; - this.httpServletRequestProvider = httpServletRequestProvider; - this.httpClient = httpClient; - this.accessTokenBuilderFactory = accessTokenBuilderFactory; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param config - */ - @Subscribe(async = false) - public void configChanged(ScmConfigurationChangedEvent config) - { - hookUrl = null; - } - - /** - * Method description - * - * - * @param request - * - * @return - */ - public String createUrl(HttpServletRequest request) - { - if (hookUrl == null) - { - synchronized (this) - { - if (hookUrl == null) - { - buildHookUrl(request); - - if (logger.isInfoEnabled() && Util.isNotEmpty(hookUrl)) - { - logger.info("use {} for mercurial hooks", hookUrl); - } - } - } - } - - return hookUrl; - } - - /** - * Method description - * - * - * @return - */ - public String createUrl() - { - String url = hookUrl; - - if (url == null) - { - HttpServletRequest request = getHttpServletRequest(); - - if (request != null) - { - url = createUrl(request); - } - else - { - url = createConfiguredUrl(); - logger.warn( - "created url {} without request, in some cases this could cause problems", - url); - } - } - - return url; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public String getChallenge() - { - return challenge; - } - - /** - * Method description - * - * - * @param challenge - * - * @return - */ - public boolean isAcceptAble(String challenge) - { - return this.challenge.equals(challenge); - } - - public AccessToken getAccessToken() - { - return accessTokenBuilderFactory.create().build(); - } - - private void buildHookUrl(HttpServletRequest request) { - if (configuration.isForceBaseUrl()) { - logger.debug("create hook url from configured base url because force base url is enabled"); - - hookUrl = createConfiguredUrl(); - if (!isUrlWorking(hookUrl)) { - disableHooks(); - } - } else { - logger.debug("create hook url from request"); - - hookUrl = HttpUtil.getCompleteUrl(request, URL_HOOKPATH); - if (!isUrlWorking(hookUrl)) { - logger.warn("hook url {} from request does not work, try now localhost", hookUrl); - - hookUrl = createLocalUrl(request); - if (!isUrlWorking(hookUrl)) { - logger.warn("localhost hook url {} does not work, try now from configured base url", hookUrl); - - hookUrl = createConfiguredUrl(); - if (!isUrlWorking(hookUrl)) { - disableHooks(); - } - } - } - } - } - - /** - * Method description - * - * - * @return - */ - private String createConfiguredUrl() - { - //J- - return HttpUtil.getUriWithoutEndSeperator( - MoreObjects.firstNonNull( - configuration.getBaseUrl(), - "http://localhost:8080/scm" - ) - ).concat(URL_HOOKPATH); - //J+ - } - - /** - * Method description - * - * - * @param request - * - * @return - */ - private String createLocalUrl(HttpServletRequest request) - { - StringBuilder sb = new StringBuilder(request.getScheme()); - - sb.append("://localhost:").append(request.getLocalPort()); - sb.append(request.getContextPath()).append(URL_HOOKPATH); - - return sb.toString(); - } - - /** - * Method description - * - */ - private void disableHooks() - { - if (logger.isErrorEnabled()) - { - logger.error( - "disabling mercurial hooks, because hook url {} seems not to work", - hookUrl); - } - - hookUrl = Util.EMPTY_STRING; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - private HttpServletRequest getHttpServletRequest() - { - HttpServletRequest request = null; - - try - { - request = httpServletRequestProvider.get(); - } - catch (ProvisionException | OutOfScopeException ex) - { - logger.debug("http servlet request is not available"); - } - - return request; - } - - /** - * Method description - * - * - * @param url - * - * @return - */ - private boolean isUrlWorking(String url) - { - boolean result = false; - - try - { - url = url.concat("?ping=true"); - - logger.trace("check hook url {}", url); - //J- - int sc = httpClient.get(url) - .disableHostnameValidation(true) - .disableCertificateValidation(true) - .ignoreProxySettings(true) - .disableTracing() - .request() - .getStatus(); - //J+ - result = sc == 204; - } - catch (IOException ex) - { - if (logger.isTraceEnabled()) - { - logger.trace("url test failed for url ".concat(url), ex); - } - } - - return result; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private String challenge = UUID.randomUUID().toString(); - - /** Field description */ - private ScmConfiguration configuration; - - /** Field description */ - private volatile String hookUrl; - - /** Field description */ - private AdvancedHttpClient httpClient; - - /** Field description */ - private Provider httpServletRequestProvider; - - private final AccessTokenBuilderFactory accessTokenBuilderFactory; -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java new file mode 100644 index 0000000000..5b17ad8bd4 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryFactory.java @@ -0,0 +1,106 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import com.aragost.javahg.RepositoryConfiguration; +import com.google.common.annotations.VisibleForTesting; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.repository.hooks.HookEnvironment; +import sonia.scm.repository.spi.javahg.HgFileviewExtension; + +import javax.inject.Inject; +import javax.inject.Singleton; +import java.io.File; +import java.nio.charset.Charset; +import java.nio.charset.StandardCharsets; +import java.nio.charset.UnsupportedCharsetException; +import java.util.Map; +import java.util.function.Function; + +@Singleton +public class HgRepositoryFactory { + + private static final Logger LOG = LoggerFactory.getLogger(HgRepositoryFactory.class); + + private final HgRepositoryHandler handler; + private final HookEnvironment hookEnvironment; + private final HgEnvironmentBuilder environmentBuilder; + private final Function directoryResolver; + + @Inject + public HgRepositoryFactory(HgRepositoryHandler handler, HookEnvironment hookEnvironment, HgEnvironmentBuilder environmentBuilder) { + this( + handler, hookEnvironment, environmentBuilder, + repository -> handler.getDirectory(repository.getId()) + ); + } + + @VisibleForTesting + public HgRepositoryFactory(HgRepositoryHandler handler, HookEnvironment hookEnvironment, HgEnvironmentBuilder environmentBuilder, Function directoryResolver) { + this.handler = handler; + this.hookEnvironment = hookEnvironment; + this.environmentBuilder = environmentBuilder; + this.directoryResolver = directoryResolver; + } + + public com.aragost.javahg.Repository openForRead(Repository repository) { + return open(repository, environmentBuilder.read(repository)); + } + + public com.aragost.javahg.Repository openForWrite(Repository repository) { + return open(repository, environmentBuilder.write(repository)); + } + + private com.aragost.javahg.Repository open(Repository repository, Map environment) { + File directory = directoryResolver.apply(repository); + + RepositoryConfiguration repoConfiguration = RepositoryConfiguration.DEFAULT; + repoConfiguration.getEnvironment().putAll(environment); + repoConfiguration.addExtension(HgFileviewExtension.class); + + boolean pending = hookEnvironment.isPending(); + repoConfiguration.setEnablePendingChangesets(pending); + + Charset encoding = encoding(); + repoConfiguration.setEncoding(encoding); + + repoConfiguration.setHgBin(handler.getConfig().getHgBinary()); + + LOG.trace("open hg repository {}: encoding: {}, pending: {}", directory, encoding, pending); + + return com.aragost.javahg.Repository.open(repoConfiguration, directory); + } + + private Charset encoding() { + String charset = handler.getConfig().getEncoding(); + try { + return Charset.forName(charset); + } catch (UnsupportedCharsetException ex) { + LOG.warn("unknown charset {} in hg config, fallback to utf-8", charset); + return StandardCharsets.UTF_8; + } + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java index bdc36eb54b..14cd54866d 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgRepositoryHandler.java @@ -27,11 +27,9 @@ package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- import com.google.inject.Inject; -import com.google.inject.Provider; import com.google.inject.Singleton; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.ConfigurationException; import sonia.scm.SCMContextProvider; import sonia.scm.autoconfig.AutoConfigurator; import sonia.scm.installer.HgInstaller; @@ -43,14 +41,14 @@ import sonia.scm.io.INISection; import sonia.scm.plugin.Extension; import sonia.scm.plugin.PluginLoader; import sonia.scm.repository.spi.HgRepositoryServiceProvider; +import sonia.scm.repository.spi.HgVersionCommand; import sonia.scm.repository.spi.HgWorkingCopyFactory; import sonia.scm.store.ConfigurationStoreFactory; import sonia.scm.util.IOUtil; import sonia.scm.util.SystemUtil; -import javax.xml.bind.JAXBContext; -import javax.xml.bind.JAXBException; import java.io.File; +import java.io.FileNotFoundException; import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; @@ -63,14 +61,15 @@ import java.util.Optional; public class HgRepositoryHandler extends AbstractSimpleRepositoryHandler { - public static final String PATH_HOOK = ".hook-1.8"; public static final String RESOURCE_VERSION = "sonia/scm/version/scm-hg-plugin"; public static final String TYPE_DISPLAYNAME = "Mercurial"; public static final String TYPE_NAME = "hg"; - public static final RepositoryType TYPE = new RepositoryType(TYPE_NAME, + public static final RepositoryType TYPE = new RepositoryType( + TYPE_NAME, TYPE_DISPLAYNAME, HgRepositoryServiceProvider.COMMANDS, - HgRepositoryServiceProvider.FEATURES); + HgRepositoryServiceProvider.FEATURES + ); private static final Logger logger = LoggerFactory.getLogger(HgRepositoryHandler.class); @@ -78,28 +77,14 @@ public class HgRepositoryHandler private static final String CONFIG_SECTION_SCMM = "scmm"; private static final String CONFIG_KEY_REPOSITORY_ID = "repositoryid"; - private final Provider hgContextProvider; - private final HgWorkingCopyFactory workingCopyFactory; - private final JAXBContext jaxbContext; - @Inject public HgRepositoryHandler(ConfigurationStoreFactory storeFactory, - Provider hgContextProvider, RepositoryLocationResolver repositoryLocationResolver, PluginLoader pluginLoader, HgWorkingCopyFactory workingCopyFactory) { super(storeFactory, repositoryLocationResolver, pluginLoader); - this.hgContextProvider = hgContextProvider; this.workingCopyFactory = workingCopyFactory; - - try { - this.jaxbContext = JAXBContext.newInstance(BrowserResult.class, - BlameResult.class, Changeset.class, ChangesetPagingResult.class, - HgVersion.class); - } catch (JAXBException ex) { - throw new ConfigurationException("could not create jaxbcontext", ex); - } } public void doAutoConfiguration(HgConfig autoConfig) { @@ -107,8 +92,7 @@ public class HgRepositoryHandler try { if (logger.isDebugEnabled()) { - logger.debug("installing mercurial with {}", - installer.getClass().getName()); + logger.debug("installing mercurial with {}", installer.getClass().getName()); } installer.install(baseDirectory, autoConfig); @@ -154,16 +138,6 @@ public class HgRepositoryHandler } } - public HgContext getHgContext() { - HgContext context = hgContextProvider.get(); - - if (context == null) { - context = new HgContext(); - } - - return context; - } - @Override public ImportHandler getImportHandler() { return new HgImportHandler(this); @@ -176,28 +150,14 @@ public class HgRepositoryHandler @Override public String getVersionInformation() { - String version = getStringFromResource(RESOURCE_VERSION, - DEFAULT_VERSION_INFORMATION); + return getVersionInformation(new HgVersionCommand(getConfig())); + } - try { - HgVersion hgVersion = new HgVersionHandler(this, hgContextProvider.get(), - baseDirectory).getVersion(); - - if (hgVersion != null) { - if (logger.isDebugEnabled()) { - logger.debug("mercurial/python informations: {}", hgVersion); - } - - version = MessageFormat.format(version, hgVersion.getPython(), - hgVersion.getMercurial()); - } else if (logger.isWarnEnabled()) { - logger.warn("could not retrieve version informations"); - } - } catch (Exception ex) { - logger.error("could not read version informations", ex); - } - - return version; + String getVersionInformation(HgVersionCommand command) { + String version = getStringFromResource(RESOURCE_VERSION, DEFAULT_VERSION_INFORMATION); + HgVersion hgVersion = command.get(); + logger.debug("mercurial/python informations: {}", hgVersion); + return MessageFormat.format(version, hgVersion.getPython(), hgVersion.getMercurial()); } @Override @@ -253,28 +213,24 @@ public class HgRepositoryHandler logger.debug("write python script {}", script.getName()); } - InputStream content = null; - OutputStream output = null; - - try { - content = HgRepositoryHandler.class.getResourceAsStream( - script.getResourcePath()); - output = new FileOutputStream(script.getFile(context)); + try (InputStream content = input(script); OutputStream output = output(context, script)) { IOUtil.copy(content, output); } catch (IOException ex) { logger.error("could not write script", ex); - } finally { - IOUtil.close(content); - IOUtil.close(output); } } } + private InputStream input(HgPythonScript script) { + return HgRepositoryHandler.class.getResourceAsStream(script.getResourcePath()); + } + + private OutputStream output(SCMContextProvider context, HgPythonScript script) throws FileNotFoundException { + return new FileOutputStream(script.getFile(context)); + } + public HgWorkingCopyFactory getWorkingCopyFactory() { return workingCopyFactory; } - public JAXBContext getJaxbContext() { - return jaxbContext; - } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java index 36bd6abfa3..a517c2fe08 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersion.java @@ -24,10 +24,8 @@ package sonia.scm.repository; -import lombok.EqualsAndHashCode; -import lombok.Getter; -import lombok.Setter; -import lombok.ToString; +import lombok.AllArgsConstructor; +import lombok.Data; import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; @@ -37,13 +35,14 @@ import javax.xml.bind.annotation.XmlRootElement; * * @author Sebastian Sdorra */ +@Data +@AllArgsConstructor @XmlRootElement(name = "version") @XmlAccessorType(XmlAccessType.FIELD) -@EqualsAndHashCode -@Getter -@Setter -@ToString public class HgVersion { + + public static final String UNKNOWN = "x.y.z (unknown)"; + private String mercurial; private String python; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/api/HgHookMessage.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/api/HgHookMessage.java index ea1671d7ab..0cd78ac932 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/api/HgHookMessage.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/api/HgHookMessage.java @@ -21,75 +21,31 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.api; //~--- JDK imports ------------------------------------------------------------ +import lombok.AccessLevel; +import lombok.AllArgsConstructor; +import lombok.Getter; +import lombok.NoArgsConstructor; + import java.io.Serializable; /** * * @author Sebastian Sdorra */ -public final class HgHookMessage implements Serializable -{ +@Getter +@AllArgsConstructor +@NoArgsConstructor(access = AccessLevel.PROTECTED) +public final class HgHookMessage implements Serializable { - /** Field description */ private static final long serialVersionUID = 1804492842452344326L; - //~--- constant enums ------------------------------------------------------- - - /** - * Enum description - * - */ - public static enum Severity { NOTE, ERROR; } - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - * - * @param severity - * @param message - */ - public HgHookMessage(Severity severity, String message) - { - this.severity = severity; - this.message = message; - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @return - */ - public String getMessage() - { - return message; - } - - /** - * Method description - * - * - * @return - */ - public Severity getSeverity() - { - return severity; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ + private Severity severity; private String message; - /** Field description */ - private Severity severity; + public enum Severity { NOTE, ERROR } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java similarity index 81% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index e2398b4498..f4d8ba2a08 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HgHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -24,6 +24,7 @@ package sonia.scm.repository.hooks; +import com.google.inject.assistedinject.Assisted; import lombok.AllArgsConstructor; import lombok.Data; import org.apache.shiro.SecurityUtils; @@ -31,7 +32,7 @@ import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; import sonia.scm.repository.spi.HgHookContextProvider; @@ -39,9 +40,7 @@ import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.security.BearerToken; import sonia.scm.security.CipherUtil; -import javax.annotation.Nonnull; -import javax.inject.Provider; -import java.io.File; +import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; @@ -50,19 +49,20 @@ import java.util.List; import static java.util.Collections.singletonList; -class HgHookHandler implements Runnable { +class DefaultHookHandler implements HookHandler { - private static final Logger LOG = LoggerFactory.getLogger(HgHookHandler.class); + private static final Logger LOG = LoggerFactory.getLogger(DefaultHookHandler.class); - private final HgRepositoryHandler handler; private final HookEventFacade hookEventFacade; - private final Provider environmentProvider; + private final HookEnvironment environment; + private final HookContextProviderFactory hookContextProviderFactory; private final Socket socket; - HgHookHandler(HgRepositoryHandler handler, HookEventFacade hookEventFacade, Provider environmentProvider, Socket socket) { - this.handler = handler; + @Inject + public DefaultHookHandler(HookContextProviderFactory hookContextProviderFactory, HookEventFacade hookEventFacade, HookEnvironment environment, @Assisted Socket socket) { + this.hookContextProviderFactory = hookContextProviderFactory; this.hookEventFacade = hookEventFacade; - this.environmentProvider = environmentProvider; + this.environment = environment; this.socket = socket; } @@ -84,7 +84,6 @@ class HgHookHandler implements Runnable { } private Response handleHookRequest(Request request) { - HookEnvironment environment = environmentProvider.get(); try { if (!environment.isAcceptAble(request.getChallenge())) { return error("invalid hook challenge"); @@ -93,13 +92,16 @@ class HgHookHandler implements Runnable { authenticate(request); environment.setPending(request.getType() == RepositoryHookType.PRE_RECEIVE); - HgHookContextProvider context = createHookContextProvider(request); + HgHookContextProvider context = hookContextProviderFactory.create(request.getRepositoryId(), request.getNode()); hookEventFacade.handle(request.getRepositoryId()).fireHookEvent(request.getType(), context); return new Response(context.getHgMessageProvider().getMessages(), false); } catch (AuthenticationException ex) { LOG.warn("hook authentication failed", ex); return error("hook authentication failed"); + } catch (NotFoundException ex) { + LOG.warn("could not find repository with id {}", request.getRepositoryId(), ex); + return error("repository not found"); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); return error("unknown error"); @@ -108,14 +110,6 @@ class HgHookHandler implements Runnable { } } - @Nonnull - private HgHookContextProvider createHookContextProvider(Request request) { - File repositoryDirectory = handler.getDirectory(request.getRepositoryId()); - return new HgHookContextProvider( - handler, repositoryDirectory, null, request.node, request.type - ); - } - private void authenticate(Request request) { String token = CipherUtil.getInstance().decode(request.getToken()); BearerToken bearer = BearerToken.valueOf(token); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/AbstractHgCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java similarity index 52% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/AbstractHgCommand.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java index 259996e2ed..04f88189ce 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/AbstractHgCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookContextProviderFactory.java @@ -21,60 +21,37 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - -package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- +package sonia.scm.repository.hooks; -import sonia.scm.repository.AbstractHgHandler; -import sonia.scm.repository.HgContext; +import sonia.scm.NotFoundException; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.spi.HgHookContextProvider; -//~--- JDK imports ------------------------------------------------------------ +import javax.inject.Inject; -import java.io.File; +public class HookContextProviderFactory { -import java.util.Map; + private final RepositoryManager repositoryManager; + private final HgRepositoryHandler repositoryHandler; + private final HgRepositoryFactory repositoryFactory; -/** - * - * @author Sebastian Sdorra - */ -public class AbstractHgCommand extends AbstractHgHandler -{ - - /** - * Constructs ... - * - * - * @param handler - * @param context - * @param repository - * @param repositoryDirectory - */ - protected AbstractHgCommand(HgRepositoryHandler handler, HgContext context, - Repository repository, File repositoryDirectory) - { - super(handler, context, repository, repositoryDirectory); + @Inject + public HookContextProviderFactory(RepositoryManager repositoryManager, HgRepositoryHandler repositoryHandler, HgRepositoryFactory repositoryFactory) { + this.repositoryManager = repositoryManager; + this.repositoryHandler = repositoryHandler; + this.repositoryFactory = repositoryFactory; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param revision - * @param path - * - * @param request - * - * @return - */ - protected Map createEnvironment(FileBaseCommandRequest request) - { - return createEnvironment(request.getRevision(), request.getPath()); + HgHookContextProvider create(String repositoryId, String node) { + Repository repository = repositoryManager.get(repositoryId); + if (repository == null) { + throw new NotFoundException(Repository.class, repositoryId); + } + return new HgHookContextProvider(repositoryHandler, repositoryFactory, repository, node); } + } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandler.java new file mode 100644 index 0000000000..f2f7e7ccdd --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandler.java @@ -0,0 +1,28 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +public interface HookHandler extends Runnable { +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java index 61d3a1340d..4eaf205bdd 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookHandlerFactory.java @@ -24,14 +24,11 @@ package sonia.scm.repository.hooks; -import com.google.inject.ImplementedBy; - import java.net.Socket; @FunctionalInterface -@ImplementedBy(DefaultHookHandlerFactory.class) interface HookHandlerFactory { - Runnable create(Socket socket); + HookHandler create(Socket socket); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookModule.java similarity index 60% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java rename to scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookModule.java index 93f0915486..2eed226a09 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandlerFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookModule.java @@ -24,28 +24,17 @@ package sonia.scm.repository.hooks; -import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.spi.HookEventFacade; - -import javax.inject.Inject; -import javax.inject.Provider; -import java.net.Socket; - -public class DefaultHookHandlerFactory implements HookHandlerFactory { - - private final HgRepositoryHandler handler; - private final HookEventFacade hookEventFacade; - private final Provider hookEnvironment; - - @Inject - public DefaultHookHandlerFactory(HgRepositoryHandler handler, HookEventFacade hookEventFacade, Provider hookEnvironment) { - this.handler = handler; - this.hookEventFacade = hookEventFacade; - this.hookEnvironment = hookEnvironment; - } +import com.google.inject.AbstractModule; +import com.google.inject.assistedinject.FactoryModuleBuilder; +import sonia.scm.plugin.Extension; +@Extension +public class HookModule extends AbstractModule { @Override - public HgHookHandler create(Socket socket) { - return new HgHookHandler(handler, hookEventFacade, hookEnvironment, socket); + protected void configure() { + install(new FactoryModuleBuilder() + .implement(HookHandler.class, DefaultHookHandler.class) + .build(HookHandlerFactory.class) + ); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java index 0ecbe180c4..40fb4a68e3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -25,7 +25,9 @@ package sonia.scm.repository.hooks; import com.google.common.util.concurrent.ThreadFactoryBuilder; -import org.apache.shiro.concurrent.SubjectAwareExecutorService; +import org.apache.shiro.SecurityUtils; +import org.apache.shiro.mgt.SecurityManager; +import org.apache.shiro.util.ThreadContext; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -38,6 +40,7 @@ import java.net.ServerSocket; import java.net.Socket; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; +import java.util.concurrent.ThreadFactory; @Singleton public class HookServer implements AutoCloseable { @@ -56,18 +59,24 @@ public class HookServer implements AutoCloseable { } private ExecutorService createAcceptor() { - return new SubjectAwareExecutorService(Executors.newSingleThreadExecutor( - new ThreadFactoryBuilder().setNameFormat("HgHookAcceptor").build() - )); + return Executors.newSingleThreadExecutor( + createThreadFactory("HgHookAcceptor") + ); } private ExecutorService createWorkerPool() { - return new SubjectAwareExecutorService(Executors.newCachedThreadPool( - new ThreadFactoryBuilder().setNameFormat("HgHookWorker-%d").build() - ) + return Executors.newCachedThreadPool( + createThreadFactory("HgHookWorker-%d") ); } + @Nonnull + private ThreadFactory createThreadFactory(String hgHookAcceptor) { + return new ThreadFactoryBuilder() + .setNameFormat(hgHookAcceptor) + .build(); + } + public int start() throws IOException { acceptor = createAcceptor(); workerPool = createWorkerPool(); @@ -83,12 +92,14 @@ public class HookServer implements AutoCloseable { } private void accept() { + SecurityManager securityManager = SecurityUtils.getSecurityManager(); acceptor.submit(() -> { while (!serverSocket.isClosed()) { try { Socket clientSocket = serverSocket.accept(); LOG.trace("accept incoming hook client from {}", clientSocket.getInetAddress()); - workerPool.submit(handlerFactory.create(clientSocket)); + HookHandler hookHandler = handlerFactory.create(clientSocket); + workerPool.submit(associateSecurityManager(securityManager, hookHandler)); } catch (IOException ex) { LOG.debug("failed to accept socket, possible closed", ex); } @@ -96,6 +107,18 @@ public class HookServer implements AutoCloseable { }); } + private Runnable associateSecurityManager(SecurityManager securityManager, HookHandler hookHandler) { + return () -> { + ThreadContext.bind(securityManager); + try { + hookHandler.run(); + } finally { + ThreadContext.unbindSubject(); + ThreadContext.unbindSecurityManager(); + } + }; + } + @Nonnull private ServerSocket createServerSocket() throws IOException { return new ServerSocket(0, 0, InetAddress.getLoopbackAddress()); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java index 39181d3d67..5169d3c389 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgCommandContext.java @@ -27,18 +27,12 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.Repository; -import com.google.common.base.Strings; import sonia.scm.repository.HgConfig; -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.RepositoryProvider; -import sonia.scm.web.HgUtil; import java.io.Closeable; -import java.io.File; -import java.io.IOException; -import java.util.Map; -import java.util.function.BiConsumer; //~--- JDK imports ------------------------------------------------------------ @@ -46,105 +40,32 @@ import java.util.function.BiConsumer; * * @author Sebastian Sdorra */ -public class HgCommandContext implements Closeable, RepositoryProvider -{ +public class HgCommandContext implements Closeable, RepositoryProvider { - /** Field description */ - private static final String PROPERTY_ENCODING = "hg.encoding"; + private final HgRepositoryHandler handler; + private final HgRepositoryFactory factory; + private final sonia.scm.repository.Repository scmRepository; - //~--- constructors --------------------------------------------------------- + private Repository repository; - /** - * Constructs ... - * - * - * @param hookManager - * @param handler - * @param repository - * @param directory - */ - public HgCommandContext(HgHookManager hookManager, - HgRepositoryHandler handler, sonia.scm.repository.Repository repository, - File directory) - { - this(hookManager, handler, repository, directory, - handler.getHgContext().isPending()); - } - - /** - * Constructs ... - * - * - * @param hookManager - * @param handler - * @param repository - * @param directory - * @param pending - */ - public HgCommandContext(HgHookManager hookManager, - HgRepositoryHandler handler, sonia.scm.repository.Repository repository, - File directory, boolean pending) - { - this.hookManager = hookManager; + public HgCommandContext(HgRepositoryHandler handler, HgRepositoryFactory factory, sonia.scm.repository.Repository scmRepository) { this.handler = handler; - this.directory = directory; - this.scmRepository = repository; - this.encoding = repository.getProperty(PROPERTY_ENCODING); - this.pending = pending; - - if (Strings.isNullOrEmpty(encoding)) - { - encoding = handler.getConfig().getEncoding(); - } + this.factory = factory; + this.scmRepository = scmRepository; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @throws IOException - */ - @Override - public void close() throws IOException - { - if (repository != null) - { - repository.close(); + public Repository open() { + if (repository == null) { + repository = factory.openForRead(scmRepository); } - } - - /** - * Method description - * - * - * @return - */ - public Repository open() - { - if (repository == null) - { - repository = HgUtil.open(handler, hookManager, directory, encoding, pending); - } - return repository; } - public Repository openWithSpecialEnvironment(BiConsumer> prepareEnvironment) - { - return HgUtil.open(handler, directory, encoding, - pending, environment -> prepareEnvironment.accept(scmRepository, environment)); + public Repository openForWrite() { + return factory.openForWrite(scmRepository); } - //~--- get methods ---------------------------------------------------------- - /** - * Method description - * - * - * @return - */ public HgConfig getConfig() { return handler.getConfig(); @@ -159,25 +80,12 @@ public class HgCommandContext implements Closeable, RepositoryProvider return getScmRepository(); } - //~--- fields --------------------------------------------------------------- - /** Field description */ - private File directory; + @Override + public void close() { + if (repository != null) { + repository.close(); + } + } - /** Field description */ - private String encoding; - - /** Field description */ - private HgRepositoryHandler handler; - - /** Field description */ - private HgHookManager hookManager; - - /** Field description */ - private boolean pending; - - /** Field description */ - private Repository repository; - - private final sonia.scm.repository.Repository scmRepository; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java index 10fe43bcf7..98bddd8c7c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookChangesetProvider.java @@ -21,85 +21,56 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - -package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- +package sonia.scm.repository.spi; import com.aragost.javahg.Repository; import org.slf4j.Logger; import org.slf4j.LoggerFactory; -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.spi.javahg.HgLogChangesetCommand; import sonia.scm.web.HgUtil; -import java.io.File; - -//~--- JDK imports ------------------------------------------------------------ - /** * * @author Sebastian Sdorra */ -public class HgHookChangesetProvider implements HookChangesetProvider -{ +public class HgHookChangesetProvider implements HookChangesetProvider { - /** - * the logger for HgHookChangesetProvider - */ - private static final Logger logger = - LoggerFactory.getLogger(HgHookChangesetProvider.class); + private static final Logger LOG = LoggerFactory.getLogger(HgHookChangesetProvider.class); - //~--- constructors --------------------------------------------------------- + private final HgRepositoryHandler handler; + private final HgRepositoryFactory factory; + private final sonia.scm.repository.Repository scmRepository; + private final String startRev; - public HgHookChangesetProvider(HgRepositoryHandler handler, - File repositoryDirectory, HgHookManager hookManager, String startRev, - RepositoryHookType type) - { + private HookChangesetResponse response; + + public HgHookChangesetProvider(HgRepositoryHandler handler, HgRepositoryFactory factory, sonia.scm.repository.Repository scmRepository, String startRev) { this.handler = handler; - this.repositoryDirectory = repositoryDirectory; - this.hookManager = hookManager; + this.factory = factory; + this.scmRepository = scmRepository; this.startRev = startRev; - this.type = type; } - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * - * @return - */ @Override - public synchronized HookChangesetResponse handleRequest(HookChangesetRequest request) - { - if (response == null) - { + public synchronized HookChangesetResponse handleRequest(HookChangesetRequest request) { + if (response == null) { Repository repository = null; - try - { - repository = open(); + try { + repository = factory.openForRead(scmRepository); - HgLogChangesetCommand cmd = HgLogChangesetCommand.on(repository, - handler.getConfig()); + HgLogChangesetCommand cmd = HgLogChangesetCommand.on(repository, handler.getConfig()); response = new HookChangesetResponse( - cmd.rev(startRev.concat(":").concat(HgUtil.REVISION_TIP)).execute()); - } - catch (Exception ex) - { - logger.error("could not retrieve changesets", ex); - } - finally - { - if (repository != null) - { + cmd.rev(startRev.concat(":").concat(HgUtil.REVISION_TIP)).execute() + ); + } catch (Exception ex) { + LOG.error("could not retrieve changesets", ex); + } finally { + if (repository != null) { repository.close(); } } @@ -108,39 +79,4 @@ public class HgHookChangesetProvider implements HookChangesetProvider return response; } - /** - * Method description - * - * - * @return - */ - private Repository open() - { - // use HG_PENDING only for pre receive hooks - boolean pending = type == RepositoryHookType.PRE_RECEIVE; - - // TODO get repository encoding - return HgUtil.open(handler, hookManager, repositoryDirectory, null, - pending); - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private HgRepositoryHandler handler; - - /** Field description */ - private HgHookManager hookManager; - - /** Field description */ - private File repositoryDirectory; - - /** Field description */ - private HookChangesetResponse response; - - /** Field description */ - private String startRev; - - /** Field description */ - private RepositoryHookType type; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java index 1f72d56e24..0282729baa 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgHookContextProvider.java @@ -21,14 +21,14 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.RepositoryHookType; +import sonia.scm.repository.Repository; import sonia.scm.repository.api.HgHookBranchProvider; import sonia.scm.repository.api.HgHookMessageProvider; import sonia.scm.repository.api.HgHookTagProvider; @@ -37,7 +37,6 @@ import sonia.scm.repository.api.HookFeature; import sonia.scm.repository.api.HookMessageProvider; import sonia.scm.repository.api.HookTagProvider; -import java.io.File; import java.util.EnumSet; import java.util.Set; @@ -45,55 +44,40 @@ import java.util.Set; /** * Mercurial implementation of {@link HookContextProvider}. - * + * * @author Sebastian Sdorra */ -public class HgHookContextProvider extends HookContextProvider -{ +public class HgHookContextProvider extends HookContextProvider { - private static final Set SUPPORTED_FEATURES = - EnumSet.of(HookFeature.CHANGESET_PROVIDER, HookFeature.MESSAGE_PROVIDER, - HookFeature.BRANCH_PROVIDER, HookFeature.TAG_PROVIDER); + private static final Set SUPPORTED_FEATURES = EnumSet.of( + HookFeature.CHANGESET_PROVIDER, + HookFeature.MESSAGE_PROVIDER, + HookFeature.BRANCH_PROVIDER, + HookFeature.TAG_PROVIDER + ); - //~--- constructors --------------------------------------------------------- + private final HgHookChangesetProvider hookChangesetProvider; + private HgHookMessageProvider hgMessageProvider; + private HgHookBranchProvider hookBranchProvider; + private HgHookTagProvider hookTagProvider; - /** - * Constructs a new instance. - * - * @param handler mercurial repository handler - * @param repositoryDirectory the directory of the changed repository - * @param hookManager mercurial hook manager - * @param startRev start revision - * @param type type of hook - */ - public HgHookContextProvider(HgRepositoryHandler handler, - File repositoryDirectory, HgHookManager hookManager, String startRev, - RepositoryHookType type) - { - this.hookChangesetProvider = new HgHookChangesetProvider(handler, repositoryDirectory, hookManager, startRev, type); + public HgHookContextProvider(HgRepositoryHandler handler, HgRepositoryFactory factory, Repository repository, String startRev) { + this.hookChangesetProvider = new HgHookChangesetProvider(handler, factory, repository, startRev); } - //~--- get methods ---------------------------------------------------------- - @Override - public HookBranchProvider getBranchProvider() - { - if (hookBranchProvider == null) - { + public HookBranchProvider getBranchProvider() { + if (hookBranchProvider == null) { hookBranchProvider = new HgHookBranchProvider(hookChangesetProvider); } - return hookBranchProvider; } @Override - public HookTagProvider getTagProvider() - { - if (hookTagProvider == null) - { + public HookTagProvider getTagProvider() { + if (hookTagProvider == null) { hookTagProvider = new HgHookTagProvider(hookChangesetProvider); } - return hookTagProvider; } @@ -102,14 +86,11 @@ public class HgHookContextProvider extends HookContextProvider { return hookChangesetProvider; } - - public HgHookMessageProvider getHgMessageProvider() - { - if (hgMessageProvider == null) - { + + public HgHookMessageProvider getHgMessageProvider() { + if (hgMessageProvider == null) { hgMessageProvider = new HgHookMessageProvider(); } - return hgMessageProvider; } @@ -119,21 +100,9 @@ public class HgHookContextProvider extends HookContextProvider return SUPPORTED_FEATURES; } - //~--- methods -------------------------------------------------------------- - @Override protected HookMessageProvider createMessageProvider() { return getHgMessageProvider(); } - - //~--- fields --------------------------------------------------------------- - - private final HgHookChangesetProvider hookChangesetProvider; - - private HgHookMessageProvider hgMessageProvider; - - private HgHookBranchProvider hookBranchProvider; - - private HgHookTagProvider hookTagProvider; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java index ce64b06982..0188078b77 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceProvider.java @@ -26,13 +26,12 @@ package sonia.scm.repository.spi; import com.google.common.io.Closeables; import sonia.scm.repository.Feature; -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; import sonia.scm.repository.api.Command; import sonia.scm.repository.api.CommandNotSupportedException; -import java.io.File; import java.io.IOException; import java.util.EnumSet; import java.util.Set; @@ -41,11 +40,8 @@ import java.util.Set; * * @author Sebastian Sdorra */ -public class HgRepositoryServiceProvider extends RepositoryServiceProvider -{ +public class HgRepositoryServiceProvider extends RepositoryServiceProvider { - /** Field description */ - //J- public static final Set COMMANDS = EnumSet.of( Command.BLAME, Command.BROWSE, @@ -61,25 +57,19 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider Command.PULL, Command.MODIFY ); - //J+ - /** Field description */ - public static final Set FEATURES = - EnumSet.of(Feature.COMBINED_DEFAULT_BRANCH); + public static final Set FEATURES = EnumSet.of(Feature.COMBINED_DEFAULT_BRANCH); - //~--- constructors --------------------------------------------------------- + private final HgRepositoryHandler handler; + private final HgCommandContext context; - HgRepositoryServiceProvider(HgRepositoryHandler handler, - HgHookManager hookManager, Repository repository) - { + HgRepositoryServiceProvider(HgRepositoryHandler handler, HgRepositoryFactory factory, Repository repository) { this.handler = handler; - this.repositoryDirectory = handler.getDirectory(repository.getId()); - this.context = new HgCommandContext(hookManager, handler, repository, - repositoryDirectory); + this.context = new HgCommandContext(handler, factory, repository); } - //~--- methods -------------------------------------------------------------- + /** * Method description * @@ -91,9 +81,9 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider { Closeables.close(context, true); } - //~--- get methods ---------------------------------------------------------- + /** * Method description * @@ -271,14 +261,4 @@ public class HgRepositoryServiceProvider extends RepositoryServiceProvider return new HgTagsCommand(context); } - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private HgCommandContext context; - - /** Field description */ - private HgRepositoryHandler handler; - - /** Field description */ - private File repositoryDirectory; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java index 4af799f30a..87a5d6d6fb 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgRepositoryServiceResolver.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; import com.google.inject.Inject; import sonia.scm.plugin.Extension; -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; @@ -35,18 +35,15 @@ import sonia.scm.repository.Repository; * @author Sebastian Sdorra */ @Extension -public class HgRepositoryServiceResolver implements RepositoryServiceResolver -{ +public class HgRepositoryServiceResolver implements RepositoryServiceResolver { private final HgRepositoryHandler handler; - private final HgHookManager hookManager; + private final HgRepositoryFactory factory; @Inject - public HgRepositoryServiceResolver(HgRepositoryHandler handler, - HgHookManager hookManager) - { + public HgRepositoryServiceResolver(HgRepositoryHandler handler, HgRepositoryFactory factory) { this.handler = handler; - this.hookManager = hookManager; + this.factory = factory; } @Override @@ -54,7 +51,7 @@ public class HgRepositoryServiceResolver implements RepositoryServiceResolver HgRepositoryServiceProvider provider = null; if (HgRepositoryHandler.TYPE_NAME.equalsIgnoreCase(repository.getType())) { - provider = new HgRepositoryServiceProvider(handler, hookManager, repository); + provider = new HgRepositoryServiceProvider(handler, factory, repository); } return provider; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgVersionCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgVersionCommand.java new file mode 100644 index 0000000000..7ea5b97dde --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgVersionCommand.java @@ -0,0 +1,114 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import com.google.common.annotations.VisibleForTesting; +import com.google.common.io.ByteStreams; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; +import sonia.scm.repository.HgConfig; +import sonia.scm.repository.HgVersion; + +import javax.annotation.Nonnull; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.List; + +public class HgVersionCommand { + + private static final Logger LOG = LoggerFactory.getLogger(HgVersionCommand.class); + + @VisibleForTesting + static final String[] HG_ARGS = { + "version", "--template", "{ver}" + }; + + @VisibleForTesting + static final String[] PYTHON_ARGS = { + "-c", "import sys; print(sys.version)" + }; + + private final HgConfig config; + private final ProcessExecutor executor; + + public HgVersionCommand(HgConfig config) { + this(config, command -> new ProcessBuilder(command).start()); + } + + HgVersionCommand(HgConfig config, ProcessExecutor executor) { + this.config = config; + this.executor = executor; + } + + public HgVersion get() { + return new HgVersion(getHgVersion(), getPythonVersion()); + } + + @Nonnull + private String getPythonVersion() { + try { + String content = exec(config.getPythonBinary(), PYTHON_ARGS); + int index = content.indexOf(' '); + if (index > 0) { + return content.substring(0, index); + } + } catch (IOException ex) { + LOG.warn("failed to get python version", ex); + } + return HgVersion.UNKNOWN; + } + + @Nonnull + private String getHgVersion() { + try { + return exec(config.getHgBinary(), HG_ARGS).trim(); + } catch (IOException ex) { + LOG.warn("failed to get mercurial version", ex); + return HgVersion.UNKNOWN; + } + } + + @SuppressWarnings("UnstableApiUsage") + private String exec(String command, String[] args) throws IOException { + List cmd = new ArrayList<>(); + cmd.add(command); + cmd.addAll(Arrays.asList(args)); + + Process process = executor.execute(cmd); + byte[] bytes = ByteStreams.toByteArray(process.getInputStream()); + int exitCode = process.exitValue(); + if (exitCode != 0) { + throw new IOException("process ends with exit code " + exitCode); + } + return new String(bytes, StandardCharsets.UTF_8); + } + + @FunctionalInterface + interface ProcessExecutor { + Process execute(List command) throws IOException; + } +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java index 4e4c4cf80c..c11e15ee4c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java @@ -36,27 +36,21 @@ import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.work.SimpleWorkingCopyFactory; import sonia.scm.repository.work.WorkingCopyPool; import sonia.scm.util.IOUtil; -import sonia.scm.web.HgRepositoryEnvironmentBuilder; import javax.inject.Inject; -import javax.inject.Provider; import java.io.File; import java.io.IOException; -import java.util.Map; -import java.util.function.BiConsumer; public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory implements HgWorkingCopyFactory { - private final Provider hgRepositoryEnvironmentBuilder; - @Inject - public SimpleHgWorkingCopyFactory(Provider hgRepositoryEnvironmentBuilder, WorkingCopyPool workdirProvider) { + public SimpleHgWorkingCopyFactory(WorkingCopyPool workdirProvider) { super(workdirProvider); - this.hgRepositoryEnvironmentBuilder = hgRepositoryEnvironmentBuilder; } + @Override public ParentAndClone initialize(HgCommandContext context, File target, String initialBranch) { - Repository centralRepository = openCentral(context); + Repository centralRepository = context.openForWrite(); CloneCommand cloneCommand = CloneCommandFlags.on(centralRepository); if (initialBranch != null) { cloneCommand.updaterev(initialBranch); @@ -76,7 +70,7 @@ public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory reclaim(HgCommandContext context, File target, String initialBranch) throws ReclaimFailedException { - Repository centralRepository = openCentral(context); + Repository centralRepository = context.openForWrite(); try { BaseRepository clone = Repository.open(target); for (String unknown : StatusCommand.on(clone).execute().getUnknown()) { @@ -89,12 +83,6 @@ public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory> repositoryMapBiConsumer = - (repository, environment) -> hgRepositoryEnvironmentBuilder.get().buildFor(repository, null, environment); - return context.openWithSpecialEnvironment(repositoryMapBiConsumer); - } - private void delete(File directory, String unknownFile) throws IOException { IOUtil.delete(new File(directory, unknownFile)); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java index 9762431d05..90fc52a77c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgCGIServlet.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; import com.google.common.base.Stopwatch; @@ -32,6 +32,7 @@ import org.slf4j.LoggerFactory; import sonia.scm.SCMContext; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.HgConfig; +import sonia.scm.repository.HgEnvironmentBuilder; import sonia.scm.repository.HgPythonScript; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.Repository; @@ -42,29 +43,21 @@ import sonia.scm.web.cgi.CGIExecutor; import sonia.scm.web.cgi.CGIExecutorFactory; import sonia.scm.web.cgi.EnvList; -//~--- JDK imports ------------------------------------------------------------ - -import java.io.File; -import java.io.IOException; - -import java.util.Enumeration; - import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; -import javax.servlet.http.HttpSession; +import java.io.File; +import java.io.IOException; + +//~--- JDK imports ------------------------------------------------------------ /** * * @author Sebastian Sdorra */ @Singleton -public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet -{ - - /** Field description */ - public static final String ENV_SESSION_PREFIX = "SCM_"; +public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet { /** Field description */ private static final long serialVersionUID = -3492811300905099810L; @@ -80,13 +73,13 @@ public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet ScmConfiguration configuration, HgRepositoryHandler handler, RepositoryRequestListenerUtil requestListenerUtil, - HgRepositoryEnvironmentBuilder hgRepositoryEnvironmentBuilder) + HgEnvironmentBuilder environmentBuilder) { this.cgiExecutorFactory = cgiExecutorFactory; this.configuration = configuration; this.handler = handler; this.requestListenerUtil = requestListenerUtil; - this.hgRepositoryEnvironmentBuilder = hgRepositoryEnvironmentBuilder; + this.environmentBuilder = environmentBuilder; this.exceptionHandler = new HgCGIExceptionHandler(); this.command = HgPythonScript.HGWEB.getFile(SCMContext.getContext()); } @@ -108,11 +101,7 @@ public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet { handleRequest(request, response, repository); } - catch (ServletException ex) - { - exceptionHandler.handleException(request, response, ex); - } - catch (IOException ex) + catch (ServletException | IOException ex) { exceptionHandler.handleException(request, response, ex); } @@ -146,29 +135,6 @@ public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet } } - /** - * Method description - * - * - * @param env - * @param session - */ - @SuppressWarnings("unchecked") - private void passSessionAttributes(EnvList env, HttpSession session) - { - Enumeration enm = session.getAttributeNames(); - - while (enm.hasMoreElements()) - { - String key = enm.nextElement(); - - if (key.startsWith(ENV_SESSION_PREFIX)) - { - env.set(key, session.getAttribute(key).toString()); - } - } - } - /** * Method description * @@ -192,7 +158,9 @@ public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet executor.setExceptionHandler(exceptionHandler); executor.setStatusCodeHandler(exceptionHandler); executor.setContentLengthWorkaround(true); - hgRepositoryEnvironmentBuilder.buildFor(repository, request, executor.getEnvironment().asMutableMap()); + + EnvList env = executor.getEnvironment(); + environmentBuilder.write(repository).forEach(env::set); String interpreter = getInterpreter(); @@ -248,5 +216,5 @@ public class HgCGIServlet extends HttpServlet implements ScmProviderHttpServlet /** Field description */ private final RepositoryRequestListenerUtil requestListenerUtil; - private final HgRepositoryEnvironmentBuilder hgRepositoryEnvironmentBuilder; + private final HgEnvironmentBuilder environmentBuilder; } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java deleted file mode 100644 index 5b0609cc72..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgHookCallbackServlet.java +++ /dev/null @@ -1,446 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.web; - -//~--- non-JDK imports -------------------------------------------------------- - -import com.google.common.base.Preconditions; -import com.google.common.base.Strings; -import com.google.common.io.Closeables; -import com.google.inject.Inject; -import com.google.inject.Provider; -import com.google.inject.Singleton; -import org.apache.shiro.SecurityUtils; -import org.apache.shiro.authc.AuthenticationToken; -import org.apache.shiro.subject.Subject; -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; -import sonia.scm.NotFoundException; -import sonia.scm.repository.HgContext; -import sonia.scm.repository.HgHookManager; -import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.RepositoryHookType; -import sonia.scm.repository.api.HgHookMessage; -import sonia.scm.repository.api.HgHookMessage.Severity; -import sonia.scm.repository.spi.HgHookContextProvider; -import sonia.scm.repository.spi.HookEventFacade; -import sonia.scm.security.BearerToken; -import sonia.scm.security.CipherUtil; -import sonia.scm.util.HttpUtil; -import sonia.scm.util.Util; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServlet; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.File; -import java.io.IOException; -import java.io.PrintWriter; -import java.util.List; -import java.util.regex.Matcher; -import java.util.regex.Pattern; - -//~--- JDK imports ------------------------------------------------------------ - -/** - * - * @author Sebastian Sdorra - */ -@Singleton -public class HgHookCallbackServlet extends HttpServlet -{ - - /** Field description */ - public static final String HGHOOK_POST_RECEIVE = "changegroup"; - - /** Field description */ - public static final String HGHOOK_PRE_RECEIVE = "pretxnchangegroup"; - - /** Field description */ - public static final String PARAM_REPOSITORYID = "repositoryId"; - - /** Field description */ - private static final String PARAM_CHALLENGE = "challenge"; - - /** Field description */ - private static final String PARAM_TOKEN = "token"; - - /** Field description */ - private static final String PARAM_NODE = "node"; - - /** Field description */ - private static final String PARAM_PING = "ping"; - - /** Field description */ - private static final Pattern REGEX_URL = - Pattern.compile("^/hook/hg/([^/]+)$"); - - /** the logger for HgHookCallbackServlet */ - private static final Logger logger = - LoggerFactory.getLogger(HgHookCallbackServlet.class); - - /** Field description */ - private static final long serialVersionUID = 3531596724828189353L; - - //~--- constructors --------------------------------------------------------- - - @Inject - public HgHookCallbackServlet(HookEventFacade hookEventFacade, - HgRepositoryHandler handler, HgHookManager hookManager, - Provider contextProvider) - { - this.hookEventFacade = hookEventFacade; - this.handler = handler; - this.hookManager = hookManager; - this.contextProvider = contextProvider; - } - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param request - * @param response - * - * @throws IOException - * @throws ServletException - */ - @Override - protected void doGet(HttpServletRequest request, HttpServletResponse response) - { - String ping = request.getParameter(PARAM_PING); - - if (Util.isNotEmpty(ping) && Boolean.parseBoolean(ping)) - { - response.setStatus(HttpServletResponse.SC_NO_CONTENT); - } - else - { - response.setStatus(HttpServletResponse.SC_NOT_FOUND); - } - } - - @Override - protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { - try { - handlePostRequest(request, response); - } catch (IOException ex) { - logger.warn("error in hook callback execution, sending internal server error", ex); - response.setStatus(HttpServletResponse.SC_INTERNAL_SERVER_ERROR); - } - } - - private void handlePostRequest(HttpServletRequest request, HttpServletResponse response) throws IOException - { - String strippedURI = HttpUtil.getStrippedURI(request); - Matcher m = REGEX_URL.matcher(strippedURI); - - if (m.matches()) - { - String repositoryId = getRepositoryId(request); - String type = m.group(1); - String challenge = request.getParameter(PARAM_CHALLENGE); - - if (Util.isNotEmpty(challenge)) - { - String node = request.getParameter(PARAM_NODE); - - if (Util.isNotEmpty(node)) - { - String token = request.getParameter(PARAM_TOKEN); - - if (Util.isNotEmpty(token)) - { - authenticate(token); - } - - hookCallback(response, type, repositoryId, challenge, node); - } - else if (logger.isDebugEnabled()) - { - logger.debug("node parameter not found"); - } - } - else if (logger.isDebugEnabled()) - { - logger.debug("challenge parameter not found"); - } - } - else - { - if (logger.isDebugEnabled()) - { - logger.debug("url does not match"); - } - - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } - } - - private void authenticate(String token) - { - try - { - token = CipherUtil.getInstance().decode(token); - - if (Util.isNotEmpty(token)) - { - Subject subject = SecurityUtils.getSubject(); - - AuthenticationToken accessToken = createToken(token); - - //J- - subject.login(accessToken); - } - } - catch (Exception ex) - { - logger.error("could not authenticate user", ex); - } - } - - private AuthenticationToken createToken(String tokenString) - { - return BearerToken.valueOf(tokenString); - } - - private void fireHook(HttpServletResponse response, String repositoryId, String node, RepositoryHookType type) - throws IOException - { - HgHookContextProvider context = null; - - try - { - if (type == RepositoryHookType.PRE_RECEIVE) - { - contextProvider.get().setPending(true); - } - - File repositoryDirectory = handler.getDirectory(repositoryId); - context = new HgHookContextProvider(handler, repositoryDirectory, hookManager, - node, type); - - hookEventFacade.handle(repositoryId).fireHookEvent(type, context); - - printMessages(response, context); - } - catch (NotFoundException ex) - { - logger.error(ex.getMessage()); - - logger.trace("repository not found", ex); - - response.sendError(HttpServletResponse.SC_NOT_FOUND); - } - catch (Exception ex) - { - sendError(response, context, ex); - } - } - - private void hookCallback(HttpServletResponse response, String typeName, String repositoryId, String challenge, String node) throws IOException { - if (hookManager.isAcceptAble(challenge)) - { - RepositoryHookType type = null; - - if (HGHOOK_PRE_RECEIVE.equals(typeName)) - { - type = RepositoryHookType.PRE_RECEIVE; - } - else if (HGHOOK_POST_RECEIVE.equals(typeName)) - { - type = RepositoryHookType.POST_RECEIVE; - } - - if (type != null) - { - fireHook(response, repositoryId, node, type); - } - else - { - if (logger.isWarnEnabled()) - { - logger.warn("unknown hook type {}", typeName); - } - - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } - } - else - { - if (logger.isWarnEnabled()) - { - logger.warn("hg hook challenge is not accept able"); - } - - response.sendError(HttpServletResponse.SC_BAD_REQUEST); - } - } - - /** - * Method description - * - * - * @param writer - * @param msg - */ - private void printMessage(PrintWriter writer, HgHookMessage msg) - { - writer.append('_'); - - if (msg.getSeverity() == Severity.ERROR) - { - writer.append("e[SCM] Error: "); - } - else - { - writer.append("n[SCM] "); - } - - writer.println(msg.getMessage()); - } - - /** - * Method description - * - * - * @param response - * @param context - * - * @throws IOException - */ - private void printMessages(HttpServletResponse response, - HgHookContextProvider context) - throws IOException - { - List msgs = context.getHgMessageProvider().getMessages(); - - if (Util.isNotEmpty(msgs)) - { - PrintWriter writer = null; - - try - { - writer = response.getWriter(); - - printMessages(writer, msgs); - } - finally - { - Closeables.close(writer, false); - } - } - } - - /** - * Method description - * - * - * @param writer - * @param msgs - */ - private void printMessages(PrintWriter writer, List msgs) - { - for (HgHookMessage msg : msgs) - { - printMessage(writer, msg); - } - } - - /** - * Method description - * - * - * @param response - * @param context - * @param ex - * - * @throws IOException - */ - private void sendError(HttpServletResponse response, - HgHookContextProvider context, Exception ex) - throws IOException - { - logger.warn("hook ended with exception", ex); - response.setStatus(HttpServletResponse.SC_CONFLICT); - - String msg = ex.getMessage(); - List msgs = null; - - if (context != null) - { - msgs = context.getHgMessageProvider().getMessages(); - } - - if (!Strings.isNullOrEmpty(msg) || Util.isNotEmpty(msgs)) - { - PrintWriter writer = null; - - try - { - writer = response.getWriter(); - - if (Util.isNotEmpty(msgs)) - { - printMessages(writer, msgs); - } - - if (!Strings.isNullOrEmpty(msg)) - { - printMessage(writer, new HgHookMessage(Severity.ERROR, msg)); - } - } - finally - { - Closeables.close(writer, true); - } - } - } - - //~--- get methods ---------------------------------------------------------- - - private String getRepositoryId(HttpServletRequest request) - { - String id = request.getParameter(PARAM_REPOSITORYID); - Preconditions.checkArgument(!Strings.isNullOrEmpty(id), "repository id not found in request"); - return id; - } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private final Provider contextProvider; - - /** Field description */ - private final HgRepositoryHandler handler; - - /** Field description */ - private final HookEventFacade hookEventFacade; - - /** Field description */ - private final HgHookManager hookManager; -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgRepositoryEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgRepositoryEnvironmentBuilder.java deleted file mode 100644 index 6b626b5c33..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgRepositoryEnvironmentBuilder.java +++ /dev/null @@ -1,80 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.web; - -import sonia.scm.repository.HgEnvironment; -import sonia.scm.repository.HgHookManager; -import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.Repository; - -import javax.inject.Inject; -import javax.servlet.http.HttpServletRequest; -import java.io.File; -import java.util.Map; - -public class HgRepositoryEnvironmentBuilder { - - private static final String ENV_REPOSITORY_NAME = "REPO_NAME"; - private static final String ENV_REPOSITORY_PATH = "SCM_REPOSITORY_PATH"; - private static final String ENV_REPOSITORY_ID = "SCM_REPOSITORY_ID"; - private static final String ENV_PYTHON_HTTPS_VERIFY = "PYTHONHTTPSVERIFY"; - private static final String ENV_HTTP_POST_ARGS = "SCM_HTTP_POST_ARGS"; - - private final HgRepositoryHandler handler; - private final HgHookManager hookManager; - - @Inject - public HgRepositoryEnvironmentBuilder(HgRepositoryHandler handler, HgHookManager hookManager) { - this.handler = handler; - this.hookManager = hookManager; - } - - public void buildFor(Repository repository, HttpServletRequest request, Map environment) { - File directory = handler.getDirectory(repository.getId()); - - environment.put(ENV_REPOSITORY_NAME, repository.getNamespace() + "/" + repository.getName()); - environment.put(ENV_REPOSITORY_ID, repository.getId()); - environment.put(ENV_REPOSITORY_PATH, - directory.getAbsolutePath()); - - // add hook environment - if (handler.getConfig().isDisableHookSSLValidation()) { - // disable ssl validation - // Issue 959: https://goo.gl/zH5eY8 - environment.put(ENV_PYTHON_HTTPS_VERIFY, "0"); - } - - // enable experimental httppostargs protocol of mercurial - // Issue 970: https://goo.gl/poascp - environment.put(ENV_HTTP_POST_ARGS, String.valueOf(handler.getConfig().isEnableHttpPostArgs())); - - HgEnvironment.prepareEnvironment( - environment, - handler, - hookManager, - request - ); - } -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java index 5271751faa..64a27990a8 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgServletModule.java @@ -34,9 +34,6 @@ import sonia.scm.api.v2.resources.HgConfigPackagesToDtoMapper; import sonia.scm.api.v2.resources.HgConfigToHgConfigDtoMapper; import sonia.scm.installer.HgPackageReader; import sonia.scm.plugin.Extension; -import sonia.scm.repository.HgContext; -import sonia.scm.repository.HgContextProvider; -import sonia.scm.repository.HgHookManager; import sonia.scm.repository.spi.HgWorkingCopyFactory; import sonia.scm.repository.spi.SimpleHgWorkingCopyFactory; @@ -45,26 +42,10 @@ import sonia.scm.repository.spi.SimpleHgWorkingCopyFactory; * @author Sebastian Sdorra */ @Extension -public class HgServletModule extends ServletModule -{ +public class HgServletModule extends ServletModule { - /** Field description */ - public static final String MAPPING_HG = "/hg/*"; - - /** Field description */ - public static final String MAPPING_HOOK = "/hook/hg/*"; - - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - */ @Override - protected void configureServlets() - { - bind(HgContext.class).toProvider(HgContextProvider.class); - bind(HgHookManager.class); + protected void configureServlets() { bind(HgPackageReader.class); bind(HgConfigDtoToHgConfigMapper.class).to(Mappers.getMapper(HgConfigDtoToHgConfigMapper.class).getClass()); @@ -72,9 +53,6 @@ public class HgServletModule extends ServletModule bind(HgConfigPackagesToDtoMapper.class).to(Mappers.getMapper(HgConfigPackagesToDtoMapper.class).getClass()); bind(HgConfigInstallationsToDtoMapper.class); - // bind servlets - serve(MAPPING_HOOK).with(HgHookCallbackServlet.class); - bind(HgWorkingCopyFactory.class).to(SimpleHgWorkingCopyFactory.class); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java index 234580ed6f..3ba797aff2 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/web/HgUtil.java @@ -21,189 +21,48 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.web; -//~--- non-JDK imports -------------------------------------------------------- - -import com.aragost.javahg.Repository; -import com.aragost.javahg.RepositoryConfiguration; - -import com.google.common.base.Strings; - -import org.slf4j.Logger; -import org.slf4j.LoggerFactory; - import sonia.scm.SCMContext; import sonia.scm.repository.HgConfig; -import sonia.scm.repository.HgEnvironment; -import sonia.scm.repository.HgHookManager; import sonia.scm.repository.HgPythonScript; -import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.spi.javahg.HgFileviewExtension; -import sonia.scm.util.HttpUtil; import sonia.scm.util.Util; -//~--- JDK imports ------------------------------------------------------------ - import java.io.File; -import java.nio.charset.Charset; -import java.util.Map; -import java.util.function.Consumer; - -import javax.servlet.http.HttpServletRequest; - /** * * @author Sebastian Sdorra */ -public final class HgUtil -{ +public final class HgUtil { - /** Field description */ public static final String REVISION_TIP = "tip"; - /** Field description */ - private static final String USERAGENT_HG = "mercurial/"; - - /** - * the logger for HgUtil - */ - private static final Logger logger = LoggerFactory.getLogger(HgUtil.class); - - //~--- constructors --------------------------------------------------------- - - /** - * Constructs ... - * - */ private HgUtil() {} - //~--- methods -------------------------------------------------------------- - - /** - * Method description - * - * - * @param handler - * @param hookManager - * @param directory - * @param encoding - * @param pending - * - * @return - */ - public static Repository open(HgRepositoryHandler handler, - HgHookManager hookManager, File directory, String encoding, boolean pending) - { - return open( - handler, - directory, - encoding, - pending, - environment -> HgEnvironment.prepareEnvironment(environment, handler, hookManager) - ); - } - - public static Repository open(HgRepositoryHandler handler, - File directory, String encoding, boolean pending, - Consumer> prepareEnvironment) - { - String enc = encoding; - - if (Strings.isNullOrEmpty(enc)) - { - enc = handler.getConfig().getEncoding(); - } - - RepositoryConfiguration repoConfiguration = RepositoryConfiguration.DEFAULT; - - prepareEnvironment.accept(repoConfiguration.getEnvironment()); - - repoConfiguration.addExtension(HgFileviewExtension.class); - repoConfiguration.setEnablePendingChangesets(pending); - - try - { - Charset charset = Charset.forName(enc); - - logger.trace("set encoding {} for mercurial", enc); - - repoConfiguration.setEncoding(charset); - } - catch (IllegalArgumentException ex) - { - logger.error("could not set encoding for mercurial", ex); - } - - repoConfiguration.setHgBin(handler.getConfig().getHgBinary()); - - logger.debug("open hg repository {}: encoding: {}, pending: {}", directory, enc, pending); - - return Repository.open(repoConfiguration, directory); - } - - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param config - * - * @return - */ - public static String getPythonPath(HgConfig config) - { + public static String getPythonPath(HgConfig config) { String pythonPath = Util.EMPTY_STRING; - if (config != null) - { + if (config != null) { pythonPath = Util.nonNull(config.getPythonPath()); } - if (Util.isNotEmpty(pythonPath)) - { + if (Util.isNotEmpty(pythonPath)) { pythonPath = pythonPath.concat(File.pathSeparator); } - //J- pythonPath = pythonPath.concat( HgPythonScript.getScriptDirectory( SCMContext.getContext() ).getAbsolutePath() ); - //J+ return pythonPath; } - /** - * Method description - * - * - * @param revision - * - * @return - */ - public static String getRevision(String revision) - { - return Util.isEmpty(revision) - ? REVISION_TIP - : revision; + public static String getRevision(String revision) { + return Util.isEmpty(revision) ? REVISION_TIP : revision; } - /** - * Returns true if the request comes from a mercurial client. - * - * - * @param request servlet request - * - * @return true if the client is mercurial - */ - public static boolean isHgClient(HttpServletRequest request) - { - return HttpUtil.userAgentStartsWith(request, USERAGENT_HG); - } } diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py index eb7718bb87..f6166fab1a 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py @@ -29,87 +29,40 @@ # changegroup.scm = python:scmhooks.callback # -import os, sys - -client = None - -# compatibility layer between python 2 and 3 urllib implementations -if sys.version_info[0] < 3: - import urllib, urllib2 - # create type alias for url error - URLError = urllib2.URLError - - class Python2Client: - def post(self, url, values): - data = urllib.urlencode(values) - # open url but ignore proxy settings - proxy_handler = urllib2.ProxyHandler({}) - opener = urllib2.build_opener(proxy_handler) - req = urllib2.Request(url, data) - req.add_header("X-XSRF-Token", xsrf) - return opener.open(req) - - client = Python2Client() -else: - import urllib.parse, urllib.request, urllib.error - # create type alias for url error - URLError = urllib.error.URLError - - class Python3Client: - def post(self, url, values): - data = urllib.parse.urlencode(values) - # open url but ignore proxy settings - proxy_handler = urllib.request.ProxyHandler({}) - opener = urllib.request.build_opener(proxy_handler) - req = urllib.request.Request(url, data.encode()) - req.add_header("X-XSRF-Token", xsrf) - return opener.open(req) - - client = Python3Client() +import os, sys, json, socket # read environment -baseUrl = os.environ['SCM_URL'] +port = os.environ['SCM_HOOK_PORT'] challenge = os.environ['SCM_CHALLENGE'] token = os.environ['SCM_BEARER_TOKEN'] -xsrf = os.environ['SCM_XSRF'] repositoryId = os.environ['SCM_REPOSITORY_ID'] -def printMessages(ui, msgs): - for raw in msgs: - line = raw - if hasattr(line, "encode"): - line = line.encode() - if line.startswith(b"_e") or line.startswith(b"_n"): - line = line[2:] - ui.warn(b'%s\n' % line.rstrip()) +def print_messages(ui, messages): + for message in messages: + ui.warn(b'%s: %s\n' % message['severity'], message['message']) -def callHookUrl(ui, repo, hooktype, node): +def fire_hook(ui, repo, hooktype, node): abort = True try: - url = baseUrl + hooktype.decode("utf-8") - ui.debug( b"send scm-hook to " + url.encode() + b" and " + node + b"\n" ) - values = {'node': node.decode("utf-8"), 'challenge': challenge, 'token': token, 'repositoryPath': repo.root, 'repositoryId': repositoryId} - conn = client.post(url, values) - if 200 <= conn.code < 300: - ui.debug( b"scm-hook " + hooktype + b" success with status code " + str(conn.code).encode() + b"\n" ) - printMessages(ui, conn) - abort = False - else: - ui.warn( b"ERROR: scm-hook failed with error code " + str(conn.code).encode() + b"\n" ) - except URLError as e: - msg = None - # some URLErrors have no read method - if hasattr(e, "read"): - msg = e.read() - elif hasattr(e, "code"): - msg = "scm-hook failed with error code " + e.code + "\n" - else: - msg = str(e) - if len(msg) > 0: - printMessages(ui, msg.splitlines(True)) - else: - ui.warn( b"ERROR: scm-hook failed with an unknown error\n" ) - ui.traceback() + values = {'token': token, 'type': hooktype, 'repositoryId': repositoryId, 'challenge': challenge, 'node': node.decode('utf8') } + ui.debug( b"send scm-hook for " + node + b"\n" ) + s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) + s.connect(("127.0.0.1", int(port))) + s.sendall(json.dumps(values).encode('utf-8')) + s.sendall(b'\0') + + received = [] + received = s.recv(1) + while b != b'\0': + received.append(b) + received = s.recv(1) + + message = b''.join(bytes).decode('utf-8') + response = json.loads(message) + + abort = response['abort'] + print_messages(ui, response['messages']) + except ValueError: ui.warn( b"scm-hook failed with an exception\n" ) ui.traceback() @@ -118,8 +71,8 @@ def callHookUrl(ui, repo, hooktype, node): def callback(ui, repo, hooktype, node=None): abort = True if node != None: - if len(baseUrl) > 0: - abort = callHookUrl(ui, repo, hooktype, node) + if len(port) > 0: + abort = fire_hook(ui, repo, hooktype, node) else: ui.warn(b"ERROR: scm-manager hooks are disabled, please check your configuration and the scm-manager log for details\n") abort = False @@ -127,7 +80,7 @@ def callback(ui, repo, hooktype, node=None): ui.warn(b"changeset node is not available") return abort -def preHook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): +def pre_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): # older mercurial versions if pending != None: pending() @@ -146,7 +99,7 @@ def preHook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): ui.debug(b"mercurial does not support currenttransation") # do nothing - return callback(ui, repo, hooktype, node) + return callback(ui, repo, "PRE_RECEIVE", node) -def postHook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): - return callback(ui, repo, hooktype, node) +def post_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): + return callback(ui, repo, "POST_RECEIVE", node) diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigDtoToHgConfigMapperTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigDtoToHgConfigMapperTest.java index 028276cd62..7779380638 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigDtoToHgConfigMapperTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/api/v2/resources/HgConfigDtoToHgConfigMapperTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import org.junit.Test; @@ -52,7 +52,6 @@ public class HgConfigDtoToHgConfigMapperTest { assertEquals("/etc/", config.getPythonPath()); assertTrue(config.isShowRevisionInId()); assertTrue(config.isUseOptimizedBytecode()); - assertTrue(config.isDisableHookSSLValidation()); assertTrue(config.isEnableHttpPostArgs()); } @@ -65,7 +64,6 @@ public class HgConfigDtoToHgConfigMapperTest { configDto.setPythonPath("/etc/"); configDto.setShowRevisionInId(true); configDto.setUseOptimizedBytecode(true); - configDto.setDisableHookSSLValidation(true); configDto.setEnableHttpPostArgs(true); return configDto; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java new file mode 100644 index 0000000000..53ae99e631 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java @@ -0,0 +1,149 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.Answers; +import org.mockito.InjectMocks; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.SCMContext; +import sonia.scm.repository.hooks.HookEnvironment; +import sonia.scm.repository.hooks.HookServer; +import sonia.scm.security.AccessToken; +import sonia.scm.security.AccessTokenBuilderFactory; +import sonia.scm.security.CipherUtil; + +import javax.annotation.Nonnull; +import java.io.File; +import java.io.IOException; +import java.nio.file.Path; +import java.util.Map; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; +import static sonia.scm.repository.DefaultHgEnvironmentBuilder.*; + + +@ExtendWith(MockitoExtension.class) +class DefaultHgEnvironmentBuilderTest { + + @Mock(answer = Answers.RETURNS_DEEP_STUBS) + private AccessTokenBuilderFactory accessTokenBuilderFactory; + + @Mock + private HgRepositoryHandler repositoryHandler; + + @Mock + private HookEnvironment hookEnvironment; + + @Mock + private HookServer server; + + @InjectMocks + private DefaultHgEnvironmentBuilder builder; + + private Path directory; + + @BeforeEach + void setBaseDir(@TempDir Path directory) { + this.directory = directory; + TempSCMContextProvider context = (TempSCMContextProvider) SCMContext.getContext(); + context.setBaseDirectory(directory.resolve("home").toFile()); + } + + @Test + void shouldReturnReadEnvironment() { + Repository heartOfGold = prepareForRead("/usr/lib/python", "42"); + + Map env = builder.read(heartOfGold); + assertReadEnv(env, "/usr/lib/python", "42"); + } + + @Test + void shouldReturnWriteEnvironment() throws IOException { + Repository heartOfGold = prepareForWrite("/opt/python", "21"); + + Map env = builder.write(heartOfGold); + assertReadEnv(env, "/opt/python", "21"); + + String bearer = CipherUtil.getInstance().decode(env.get(ENV_BEARER_TOKEN)); + assertThat(bearer).isEqualTo("secretAC"); + assertThat(env) + .containsEntry(ENV_CHALLENGE, "challenge") + .containsEntry(ENV_HOOK_PORT, "2042"); + } + + @Test + void shouldThrowIllegalStateIfServerCouldNotBeStarted() throws IOException { + when(server.start()).thenThrow(new IOException("failed to start")); + Repository repository = prepareForRead("/usr", "42"); + assertThrows(IllegalStateException.class, () -> builder.write(repository)); + } + + private Repository prepareForWrite(String pythonPath, String id) throws IOException { + Repository heartOfGold = prepareForRead(pythonPath, id); + applyAccessToken("secretAC"); + when(server.start()).thenReturn(2042); + when(hookEnvironment.getChallenge()).thenReturn("challenge"); + return heartOfGold; + } + + private void applyAccessToken(String compact) { + AccessToken accessToken = mock(AccessToken.class); + when(accessTokenBuilderFactory.create().build()).thenReturn(accessToken); + when(accessToken.compact()).thenReturn(compact); + } + + + private void assertReadEnv(Map env, String pythonPath, String repositoryId) { + assertThat(env) + .containsEntry(ENV_REPOSITORY_ID, repositoryId) + .containsEntry(ENV_REPOSITORY_NAME, "hitchhiker/HeartOfGold") + .containsEntry(ENV_HTTP_POST_ARGS, "false") + .containsEntry(ENV_REPOSITORY_PATH, directory.resolve("repo").toAbsolutePath().toString()) + .containsEntry(ENV_PYTHON_PATH, pythonPath + File.pathSeparator + directory.resolve("home/lib/python")); + } + + @Nonnull + private Repository prepareForRead(String pythonPath, String id) { + when(repositoryHandler.getDirectory(id)).thenReturn(directory.resolve("repo").toFile()); + + HgConfig config = new HgConfig(); + config.setPythonPath(pythonPath); + when(repositoryHandler.getConfig()).thenReturn(config); + + Repository heartOfGold = RepositoryTestData.createHeartOfGold(); + heartOfGold.setId(id); + + return heartOfGold; + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/EmptyHgEnvironmentBuilder.java similarity index 66% rename from scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java rename to scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/EmptyHgEnvironmentBuilder.java index 7ee499741f..140802ce7f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgVersionHandler.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/EmptyHgEnvironmentBuilder.java @@ -21,30 +21,20 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; -//~--- JDK imports ------------------------------------------------------------ +import java.util.Collections; +import java.util.Map; -import java.io.File; -import java.io.IOException; - -/** - * - * @author Sebastian Sdorra - */ -public class HgVersionHandler extends AbstractHgHandler -{ - - public HgVersionHandler(HgRepositoryHandler handler, HgContext context, - File directory) - { - super(handler, context, null, directory); +public class EmptyHgEnvironmentBuilder implements HgEnvironmentBuilder { + @Override + public Map read(Repository repository) { + return Collections.emptyMap(); } - //~--- get methods ---------------------------------------------------------- - - public HgVersion getVersion() throws IOException { - return getResultFromScript(HgVersion.class, HgPythonScript.VERSION); + @Override + public Map write(Repository repository) { + return Collections.emptyMap(); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgContextProviderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgContextProviderTest.java deleted file mode 100644 index a65e4cd8e2..0000000000 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgContextProviderTest.java +++ /dev/null @@ -1,111 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.repository; - -import com.google.inject.AbstractModule; -import com.google.inject.Guice; -import com.google.inject.Injector; -import com.google.inject.Key; -import com.google.inject.OutOfScopeException; -import com.google.inject.Provider; -import com.google.inject.ProvisionException; -import com.google.inject.Scope; -import com.google.inject.servlet.RequestScoped; -import com.google.inject.util.Providers; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; - -import static org.assertj.core.api.Assertions.assertThat; -import static org.junit.jupiter.api.Assertions.assertThrows; -import static org.mockito.ArgumentMatchers.any; -import static org.mockito.Mockito.when; - -@ExtendWith(MockitoExtension.class) -class HgContextProviderTest { - - @Mock - private Scope scope; - - @Test - void shouldThrowNonOutOfScopeProvisionExceptions() { - Provider provider = () -> { - throw new RuntimeException("something different"); - }; - - when(scope.scope(any(Key.class), any(Provider.class))).thenReturn(provider); - - Injector injector = Guice.createInjector(new HgContextModule(scope)); - - assertThrows(ProvisionException.class, () -> injector.getInstance(HgContext.class)); - } - - @Test - void shouldCreateANewInstanceIfOutOfRequestScope() { - Provider provider = () -> { - throw new OutOfScopeException("no request"); - }; - when(scope.scope(any(Key.class), any(Provider.class))).thenReturn(provider); - - Injector injector = Guice.createInjector(new HgContextModule(scope)); - - HgContext contextOne = injector.getInstance(HgContext.class); - HgContext contextTwo = injector.getInstance(HgContext.class); - - assertThat(contextOne).isNotSameAs(contextTwo); - } - - @Test - void shouldInjectFromRequestScope() { - HgContextRequestStore requestStore = new HgContextRequestStore(); - Provider provider = Providers.of(requestStore); - - when(scope.scope(any(Key.class), any(Provider.class))).thenReturn(provider); - - Injector injector = Guice.createInjector(new HgContextModule(scope)); - - HgContext contextOne = injector.getInstance(HgContext.class); - HgContext contextTwo = injector.getInstance(HgContext.class); - - assertThat(contextOne).isSameAs(contextTwo); - } - - private static class HgContextModule extends AbstractModule { - - private Scope scope; - - private HgContextModule(Scope scope) { - this.scope = scope; - } - - @Override - protected void configure() { - bindScope(RequestScoped.class, scope); - bind(HgContextRequestStore.class); - bind(HgContext.class).toProvider(HgContextProvider.class); - } - } -} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java new file mode 100644 index 0000000000..ffeb42f613 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryFactoryTest.java @@ -0,0 +1,125 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import com.aragost.javahg.Repository; +import com.google.common.collect.ImmutableMap; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.junit.jupiter.api.io.TempDir; +import org.mockito.Mock; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.repository.hooks.HookEnvironment; + +import javax.annotation.Nonnull; +import java.nio.charset.StandardCharsets; +import java.nio.file.Path; + +import static org.assertj.core.api.AssertionsForInterfaceTypes.assertThat; +import static org.junit.jupiter.api.Assumptions.assumeTrue; +import static org.mockito.Mockito.verify; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class HgRepositoryFactoryTest { + + private HgRepositoryHandler handler; + + @Mock + private HookEnvironment hookEnvironment; + + @Mock + private HgEnvironmentBuilder environmentBuilder; + + private HgRepositoryFactory factory; + + private sonia.scm.repository.Repository heartOfGold; + + @BeforeEach + void setUpFactory(@TempDir Path directory) { + handler = HgTestUtil.createHandler(directory.toFile()); + assumeTrue(handler.isConfigured()); + + factory = new HgRepositoryFactory(handler, hookEnvironment, environmentBuilder); + heartOfGold = createRepository(); + } + + @Test + void shouldOpenRepositoryForRead() { + Repository repository = factory.openForRead(heartOfGold); + + assertThat(repository).isNotNull(); + verify(environmentBuilder).read(heartOfGold); + } + + @Test + void shouldOpenRepositoryForWrite() { + Repository repository = factory.openForWrite(heartOfGold); + + assertThat(repository).isNotNull(); + verify(environmentBuilder).write(heartOfGold); + } + + @Test + void shouldFallbackToUTF8OnUnknownEncoding() { + handler.getConfig().setEncoding("unknown"); + + Repository repository = factory.openForRead(heartOfGold); + + assertThat(repository.getBaseRepository().getConfiguration().getEncoding()).isEqualTo(StandardCharsets.UTF_8); + } + + @Test + void shouldSetPendingChangesetState() { + when(hookEnvironment.isPending()).thenReturn(true); + + Repository repository = factory.openForRead(heartOfGold); + + assertThat(repository.getBaseRepository().getConfiguration().isEnablePendingChangesets()) + .isTrue(); + } + + @Test + void shouldPassEnvironment() { + when(environmentBuilder.read(heartOfGold)).thenReturn(ImmutableMap.of("spaceship", "heartOfGold")); + + Repository repository = factory.openForRead(heartOfGold); + + assertThat(repository.getBaseRepository().getConfiguration().getEnvironment()) + .containsEntry("spaceship", "heartOfGold"); + } + + @Nonnull + private sonia.scm.repository.Repository createRepository() { + sonia.scm.repository.Repository heartOfGold = RepositoryTestData.createHeartOfGold("hg"); + heartOfGold.setId("42"); + + handler.create(heartOfGold); + return heartOfGold; + } + + +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java index e91659e841..7d0dc6f6db 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgRepositoryHandlerTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -32,13 +32,17 @@ import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import org.mockito.junit.MockitoJUnitRunner; +import sonia.scm.plugin.PluginLoader; +import sonia.scm.repository.spi.HgVersionCommand; import sonia.scm.store.ConfigurationStoreFactory; import java.io.File; +import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.mock; import static org.mockito.Mockito.when; //~--- JDK imports ------------------------------------------------------------ @@ -52,9 +56,6 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { @Mock private ConfigurationStoreFactory factory; - @Mock - private com.google.inject.Provider provider; - @Override protected void checkDirectory(File directory) { File hgDirectory = new File(directory, ".hg"); @@ -70,7 +71,7 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { @Override protected RepositoryHandler createRepositoryHandler(ConfigurationStoreFactory factory, RepositoryLocationResolver locationResolver, File directory) { - HgRepositoryHandler handler = new HgRepositoryHandler(factory, new HgContextProvider(), locationResolver, null, null); + HgRepositoryHandler handler = new HgRepositoryHandler(factory, locationResolver, null, null); handler.init(contextProvider); HgTestUtil.checkForSkip(handler); @@ -80,7 +81,7 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { @Test public void getDirectory() { - HgRepositoryHandler repositoryHandler = new HgRepositoryHandler(factory, provider, locationResolver, null, null); + HgRepositoryHandler repositoryHandler = new HgRepositoryHandler(factory, locationResolver, null, null); HgConfig hgConfig = new HgConfig(); hgConfig.setHgBinary("hg"); @@ -91,4 +92,20 @@ public class HgRepositoryHandlerTest extends SimpleRepositoryHandlerTestBase { File path = repositoryHandler.getDirectory(repository.getId()); assertEquals(repoPath.toString() + File.separator + RepositoryDirectoryHandler.REPOSITORIES_NATIVE_DIRECTORY, path.getAbsolutePath()); } + + @Test + public void shouldReturnVersionInformation() { + PluginLoader pluginLoader = mock(PluginLoader.class); + when(pluginLoader.getUberClassLoader()).thenReturn(HgRepositoryHandler.class.getClassLoader()); + + HgVersionCommand versionCommand = mock(HgVersionCommand.class); + when(versionCommand.get()).thenReturn(new HgVersion("5.2.0", "3.7.2")); + + HgRepositoryHandler handler = new HgRepositoryHandler( + factory, locationResolver, pluginLoader, null + ); + + String versionInformation = handler.getVersionInformation(versionCommand); + assertThat(versionInformation).startsWith("scm-hg-version/").endsWith("python/3.7.2 mercurial/5.2.0"); + } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java index 72d276b2b6..48b8e4c506 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgTestUtil.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository; //~--- non-JDK imports -------------------------------------------------------- @@ -29,16 +29,13 @@ package sonia.scm.repository; import org.junit.Assume; import sonia.scm.SCMContext; import sonia.scm.TempDirRepositoryLocationResolver; -import sonia.scm.security.AccessToken; +import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.store.InMemoryConfigurationStoreFactory; -import javax.servlet.http.HttpServletRequest; import java.io.File; -import java.nio.file.Path; import static org.mockito.Mockito.any; import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; //~--- JDK imports ------------------------------------------------------------ @@ -80,49 +77,26 @@ public final class HgTestUtil } } - /** - * Method description - * - * - * @param directory - * - * @return - */ - public static HgRepositoryHandler createHandler(File directory) { - TempSCMContextProvider context = - (TempSCMContextProvider) SCMContext.getContext(); + public static HgRepositoryHandler createHandler(File directory) { + TempSCMContextProvider context = (TempSCMContextProvider) SCMContext.getContext(); context.setBaseDirectory(directory); - RepositoryDAO repoDao = mock(RepositoryDAO.class); - RepositoryLocationResolver repositoryLocationResolver = new TempDirRepositoryLocationResolver(directory); - HgRepositoryHandler handler = - new HgRepositoryHandler(new InMemoryConfigurationStoreFactory(), new HgContextProvider(), repositoryLocationResolver, null, null); + HgRepositoryHandler handler = new HgRepositoryHandler( + new InMemoryConfigurationStoreFactory(), + repositoryLocationResolver, + null, + null + ); handler.init(context); return handler; } - /** - * Method description - * - * - * @return - */ - public static HgHookManager createHookManager() - { - HgHookManager hookManager = mock(HgHookManager.class); - - when(hookManager.getChallenge()).thenReturn("challenge"); - when(hookManager.createUrl()).thenReturn( - "http://localhost:8081/scm/hook/hg/"); - when(hookManager.createUrl(any(HttpServletRequest.class))).thenReturn( - "http://localhost:8081/scm/hook/hg/"); - AccessToken accessToken = mock(AccessToken.class); - when(accessToken.compact()).thenReturn(""); - when(hookManager.getAccessToken()).thenReturn(accessToken); - - return hookManager; + public static HgRepositoryFactory createFactory(HgRepositoryHandler handler, File directory) { + return new HgRepositoryFactory( + handler, new HookEnvironment(), new EmptyHgEnvironmentBuilder(), repository -> directory + ); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java similarity index 63% rename from scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java rename to scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 516b66c4a3..45a9bc5aa5 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HgHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -24,7 +24,6 @@ package sonia.scm.repository.hooks; -import com.google.inject.util.Providers; import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.authc.AuthenticationToken; import org.apache.shiro.subject.Subject; @@ -35,10 +34,10 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.repository.HgRepositoryHandler; -import sonia.scm.repository.Repository; +import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; +import sonia.scm.repository.api.HgHookMessageProvider; import sonia.scm.repository.spi.HgHookContextProvider; import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.security.CipherUtil; @@ -48,6 +47,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.Socket; +import java.util.concurrent.atomic.AtomicReference; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -55,10 +55,13 @@ import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) -class HgHookHandlerTest { +class DefaultHookHandlerTest { @Mock - private HgRepositoryHandler repositoryHandler; + private HookContextProviderFactory hookContextProviderFactory; + + @Mock + private HgHookContextProvider contextProvider; @Mock private HookEventFacade hookEventFacade; @@ -71,7 +74,7 @@ class HgHookHandlerTest { private HookEnvironment hookEnvironment; - private HgHookHandler handler; + private DefaultHookHandler handler; @Mock private Subject subject; @@ -81,11 +84,13 @@ class HgHookHandlerTest { ThreadContext.bind(subject); hookEnvironment = new HookEnvironment(); - DefaultHookHandlerFactory factory = new DefaultHookHandlerFactory( - repositoryHandler, hookEventFacade, Providers.of(hookEnvironment) - ); - handler = factory.create(socket); + handler = new DefaultHookHandler(hookContextProviderFactory, hookEventFacade, hookEnvironment, socket); + } + + private void mockMessageProvider() { + when(hookContextProviderFactory.create("42", "abc")).thenReturn(contextProvider); + when(contextProvider.getHgMessageProvider()).thenReturn(new HgHookMessageProvider()); } @AfterEach @@ -95,10 +100,11 @@ class HgHookHandlerTest { @Test void shouldFireHook() throws IOException { + mockMessageProvider(); when(hookEventFacade.handle("42")).thenReturn(hookEventHandler); - HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); - HgHookHandler.Response response = send(request); + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); assertSuccess(response, RepositoryHookType.POST_RECEIVE); assertThat(hookEnvironment.isPending()).isFalse(); @@ -106,13 +112,22 @@ class HgHookHandlerTest { @Test void shouldSetPendingStateOnPreReceiveHooks() throws IOException { + mockMessageProvider(); when(hookEventFacade.handle("42")).thenReturn(hookEventHandler); - HgHookHandler.Request request = createRequest(RepositoryHookType.PRE_RECEIVE); - HgHookHandler.Response response = send(request); + // we have to capture the pending state, when the hook is fired + // because the state is cleared before the method ends + AtomicReference ref = new AtomicReference<>(Boolean.FALSE); + doAnswer(ic -> { + ref.set(hookEnvironment.isPending()); + return null; + }).when(hookEventHandler).fireHookEvent(RepositoryHookType.PRE_RECEIVE, contextProvider); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.PRE_RECEIVE); + DefaultHookHandler.Response response = send(request); assertSuccess(response, RepositoryHookType.PRE_RECEIVE); - assertThat(hookEnvironment.isPending()).isTrue(); + assertThat(ref.get()).isTrue(); } @Test @@ -121,8 +136,8 @@ class HgHookHandlerTest { .when(hookEventFacade) .handle("42"); - HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); - HgHookHandler.Response response = send(request); + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); assertError(response, "unknown"); } @@ -133,28 +148,40 @@ class HgHookHandlerTest { .when(subject) .login(any(AuthenticationToken.class)); - HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); - HgHookHandler.Response response = send(request); + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); assertError(response, "authentication"); } + @Test + void shouldHandleNotFoundException() throws IOException { + doThrow(NotFoundException.class) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + assertError(response, "not found"); + } + @Test void shouldReturnErrorWithInvalidChallenge() throws IOException { - HgHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE, "something-different"); - HgHookHandler.Response response = send(request); + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE, "something-different"); + DefaultHookHandler.Response response = send(request); assertError(response, "challenge"); } - private void assertSuccess(HgHookHandler.Response response, RepositoryHookType type) { + private void assertSuccess(DefaultHookHandler.Response response, RepositoryHookType type) { assertThat(response.getMessages()).isEmpty(); assertThat(response.isAbort()).isFalse(); verify(hookEventHandler).fireHookEvent(eq(type), any(HgHookContextProvider.class)); } - private void assertError(HgHookHandler.Response response, String message) { + private void assertError(DefaultHookHandler.Response response, String message) { assertThat(response.isAbort()).isTrue(); assertThat(response.getMessages()).hasSize(1); HgHookMessage hgHookMessage = response.getMessages().get(0); @@ -163,19 +190,19 @@ class HgHookHandlerTest { } @Nonnull - private HgHookHandler.Request createRequest(RepositoryHookType type) { + private DefaultHookHandler.Request createRequest(RepositoryHookType type) { return createRequest(type, hookEnvironment.getChallenge()); } @Nonnull - private HgHookHandler.Request createRequest(RepositoryHookType type, String challenge) { + private DefaultHookHandler.Request createRequest(RepositoryHookType type, String challenge) { String secret = CipherUtil.getInstance().encode("secret"); - return new HgHookHandler.Request( + return new DefaultHookHandler.Request( secret, type, "42", challenge, "abc" ); } - private HgHookHandler.Response send(HgHookHandler.Request request) throws IOException { + private DefaultHookHandler.Response send(DefaultHookHandler.Request request) throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); Sockets.send(buffer, request); ByteArrayInputStream input = new ByteArrayInputStream(buffer.toByteArray()); @@ -185,7 +212,7 @@ class HgHookHandlerTest { handler.run(); - return Sockets.read(new ByteArrayInputStream(output.toByteArray()), HgHookHandler.Response.class); + return Sockets.read(new ByteArrayInputStream(output.toByteArray()), DefaultHookHandler.Response.class); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgEnvironmentTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookContextProviderFactoryTest.java similarity index 52% rename from scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgEnvironmentTest.java rename to scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookContextProviderFactoryTest.java index b290eb229a..b5b74509ee 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/HgEnvironmentTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookContextProviderFactoryTest.java @@ -21,58 +21,50 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - -package sonia.scm.repository; +package sonia.scm.repository.hooks; import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; -import sonia.scm.security.AccessToken; -import sonia.scm.security.Xsrf; +import sonia.scm.NotFoundException; +import sonia.scm.repository.HgRepositoryFactory; +import sonia.scm.repository.HgRepositoryHandler; +import sonia.scm.repository.RepositoryManager; +import sonia.scm.repository.RepositoryTestData; +import sonia.scm.repository.spi.HgHookContextProvider; -import java.util.HashMap; -import java.util.Map; - -import static java.util.Optional.empty; -import static java.util.Optional.of; import static org.assertj.core.api.Assertions.assertThat; -import static org.assertj.core.api.Assertions.entry; -import static org.mockito.Mockito.mock; +import static org.junit.jupiter.api.Assertions.assertThrows; import static org.mockito.Mockito.when; @ExtendWith(MockitoExtension.class) -class HgEnvironmentTest { +class HookContextProviderFactoryTest { @Mock - HgRepositoryHandler handler; + private RepositoryManager repositoryManager; + @Mock - HgHookManager hookManager; + private HgRepositoryHandler repositoryHandler; + + @Mock + private HgRepositoryFactory repositoryFactory; + + @InjectMocks + private HookContextProviderFactory factory; @Test - void shouldExtractXsrfTokenWhenSet() { - AccessToken accessToken = mock(AccessToken.class); - when(accessToken.compact()).thenReturn(""); - when(accessToken.getCustom(Xsrf.TOKEN_KEY)).thenReturn(of("XSRF Token")); - when(hookManager.getAccessToken()).thenReturn(accessToken); - - Map environment = new HashMap<>(); - HgEnvironment.prepareEnvironment(environment, handler, hookManager); - - assertThat(environment).contains(entry("SCM_XSRF", "XSRF Token")); + void shouldCreateHookContextProvider() { + when(repositoryManager.get("42")).thenReturn(RepositoryTestData.create42Puzzle()); + HgHookContextProvider provider = factory.create("42", "xyz"); + assertThat(provider).isNotNull(); } @Test - void shouldIgnoreXsrfWhenNotSetButStillContainDummy() { - AccessToken accessToken = mock(AccessToken.class); - when(accessToken.compact()).thenReturn(""); - when(accessToken.getCustom(Xsrf.TOKEN_KEY)).thenReturn(empty()); - when(hookManager.getAccessToken()).thenReturn(accessToken); - - Map environment = new HashMap<>(); - HgEnvironment.prepareEnvironment(environment, handler, hookManager); - - assertThat(environment).containsKeys("SCM_XSRF"); + void shouldThrowNotFoundExceptionWithoutRepository() { + assertThrows(NotFoundException.class, () -> factory.create("42", "xyz")); } + } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java index afd485c477..95467edc25 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java @@ -89,7 +89,7 @@ class HookServerTest { } } - public static class HelloHandler implements Runnable { + public static class HelloHandler implements HookHandler { private final Socket socket; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java index f026169f87..d115123c52 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/AbstractHgCommandTestBase.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- @@ -29,13 +29,16 @@ package sonia.scm.repository.spi; import org.junit.After; import org.junit.Before; +import sonia.scm.repository.HgRepositoryFactory; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.RepositoryTestData; +import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.util.MockUtil; //~--- JDK imports ------------------------------------------------------------ +import java.io.File; import java.io.IOException; /** @@ -49,31 +52,22 @@ public class AbstractHgCommandTestBase extends ZippedRepositoryTestBase * Method description * * - * @throws IOException */ @After - public void close() throws IOException - { + public void close() { if (cmdContext != null) { cmdContext.close(); } } - /** - * Method description - * - * - * @throws IOException - */ @Before public void initHgHandler() throws IOException { this.handler = HgTestUtil.createHandler(tempFolder.newFolder()); - HgTestUtil.checkForSkip(handler); - cmdContext = new HgCommandContext(HgTestUtil.createHookManager(), handler, - RepositoryTestData.createHeartOfGold(), repositoryDirectory); + HgRepositoryFactory factory = HgTestUtil.createFactory(handler, repositoryDirectory); + cmdContext = new HgCommandContext(handler, factory, RepositoryTestData.createHeartOfGold()); } //~--- set methods ---------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java index f3a632fa59..241d416d2c 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchCommandTest.java @@ -29,12 +29,10 @@ import com.google.inject.util.Providers; import org.junit.Before; import org.junit.Test; import sonia.scm.repository.Branch; -import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.api.BranchRequest; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; import sonia.scm.repository.work.WorkdirProvider; -import sonia.scm.web.HgRepositoryEnvironmentBuilder; import java.util.List; @@ -47,10 +45,8 @@ public class HgBranchCommandTest extends AbstractHgCommandTestBase { @Before public void initWorkingCopyFactory() { - HgRepositoryEnvironmentBuilder hgRepositoryEnvironmentBuilder = - new HgRepositoryEnvironmentBuilder(handler, HgTestUtil.createHookManager()); - workingCopyFactory = new SimpleHgWorkingCopyFactory(Providers.of(hgRepositoryEnvironmentBuilder), new NoneCachingWorkingCopyPool(new WorkdirProvider())) { + workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())) { @Override public void configure(PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java index a128e23075..9d04255027 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgIncomingCommandTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- @@ -110,17 +110,10 @@ public class HgIncomingCommandTest extends IncomingOutgoingTestBase cmd.getIncomingChangesets(request); } - /** - * Method description - * - * - * @return - */ - private HgIncomingCommand createIncomingCommand() - { + private HgIncomingCommand createIncomingCommand() { return new HgIncomingCommand( - new HgCommandContext( - HgTestUtil.createHookManager(), handler, incomingRepository, - incomingDirectory), handler); + new HgCommandContext(handler, HgTestUtil.createFactory(handler, incomingDirectory), incomingRepository), + handler + ); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java index 914a063790..2e645c04c7 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModificationsCommandTest.java @@ -40,12 +40,11 @@ import static org.assertj.core.api.Assertions.assertThat; public class HgModificationsCommandTest extends IncomingOutgoingTestBase { - private HgModificationsCommand outgoingModificationsCommand; @Before public void init() { - HgCommandContext outgoingContext = new HgCommandContext(HgTestUtil.createHookManager(), handler, outgoingRepository, outgoingDirectory); + HgCommandContext outgoingContext = new HgCommandContext(handler, HgTestUtil.createFactory(handler, outgoingDirectory), outgoingRepository); outgoingModificationsCommand = new HgModificationsCommand(outgoingContext); } @@ -116,10 +115,10 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { assertThat(modifications).isNotNull(); assertThat(modifications.getAdded()) .as("added files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getModified()) .as("modified files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRemoved()) .as("removed files modifications") .hasSize(1) @@ -136,10 +135,10 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { assertThat(modifications).isNotNull(); assertThat(modifications.getAdded()) .as("added files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getModified()) .as("modified files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRemoved()) .as("removed files modifications") .isEmpty(); @@ -161,10 +160,10 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { assertThat(modifications).isNotNull(); assertThat(modifications.getAdded()) .as("added files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getModified()) .as("modified files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRemoved()) .as("removed files modifications") .isEmpty(); @@ -189,7 +188,7 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { assertThat(modifications).isNotNull(); assertThat(modifications.getAdded()) .as("added files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getModified()) .as("modified files modifications") .hasSize(1) @@ -197,10 +196,10 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { .containsOnly(file); assertThat(modifications.getRemoved()) .as("removed files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRenamed()) .as("renamed files modifications") - .hasSize(0); + .isEmpty(); }; } @@ -214,13 +213,13 @@ public class HgModificationsCommandTest extends IncomingOutgoingTestBase { .containsOnly(addedFile); assertThat(modifications.getModified()) .as("modified files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRemoved()) .as("removed files modifications") - .hasSize(0); + .isEmpty(); assertThat(modifications.getRenamed()) .as("renamed files modifications") - .hasSize(0); + .isEmpty(); }; } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java index d55005f675..0ccc7d94c6 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgModifyCommandTest.java @@ -24,7 +24,6 @@ package sonia.scm.repository.spi; -import com.google.inject.util.Providers; import org.junit.Before; import org.junit.Rule; import org.junit.Test; @@ -32,12 +31,9 @@ import org.junit.rules.TemporaryFolder; import sonia.scm.AlreadyExistsException; import sonia.scm.NoChangesMadeException; import sonia.scm.NotFoundException; -import sonia.scm.repository.HgHookManager; -import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.Person; import sonia.scm.repository.work.NoneCachingWorkingCopyPool; import sonia.scm.repository.work.WorkdirProvider; -import sonia.scm.web.HgRepositoryEnvironmentBuilder; import java.io.File; import java.io.FileOutputStream; @@ -54,9 +50,7 @@ public class HgModifyCommandTest extends AbstractHgCommandTestBase { @Before public void initHgModifyCommand() { - HgHookManager hookManager = HgTestUtil.createHookManager(); - HgRepositoryEnvironmentBuilder environmentBuilder = new HgRepositoryEnvironmentBuilder(handler, hookManager); - SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(Providers.of(environmentBuilder), new NoneCachingWorkingCopyPool(new WorkdirProvider())) { + SimpleHgWorkingCopyFactory workingCopyFactory = new SimpleHgWorkingCopyFactory(new NoneCachingWorkingCopyPool(new WorkdirProvider())) { @Override public void configure(com.aragost.javahg.commands.PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java index 192b425e6c..426eff8537 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgOutgoingCommandTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- @@ -106,17 +106,10 @@ public class HgOutgoingCommandTest extends IncomingOutgoingTestBase System.out.println(cpr.getChangesets()); } - /** - * Method description - * - * - * @return - */ - private HgOutgoingCommand createOutgoingCommand() - { + private HgOutgoingCommand createOutgoingCommand() { return new HgOutgoingCommand( - new HgCommandContext( - HgTestUtil.createHookManager(), handler, outgoingRepository, - outgoingDirectory), handler); + new HgCommandContext(handler, HgTestUtil.createFactory(handler, outgoingDirectory), outgoingRepository), + handler + ); } } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgVersionCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgVersionCommandTest.java new file mode 100644 index 0000000000..6c020efcc0 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgVersionCommandTest.java @@ -0,0 +1,137 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import com.google.common.base.Joiner; +import org.junit.jupiter.api.BeforeEach; +import org.junit.jupiter.api.Test; +import org.junit.jupiter.api.extension.ExtendWith; +import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.repository.HgConfig; +import sonia.scm.repository.HgVersion; + +import javax.annotation.Nonnull; +import java.io.ByteArrayInputStream; +import java.io.IOException; +import java.nio.charset.StandardCharsets; +import java.util.ArrayList; +import java.util.Arrays; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.mockito.Mockito.mock; +import static org.mockito.Mockito.when; + +@ExtendWith(MockitoExtension.class) +class HgVersionCommandTest { + + private static final String PYTHON_OUTPUT = String.join("\n", + "3.9.0 (default, Oct 27 2020, 14:15:17)", + "[Clang 12.0.0 (clang-1200.0.32.21)]" + ); + + private Map outputs; + + @BeforeEach + void setUpOutputs() { + outputs = new HashMap<>(); + } + + @Test + void shouldReturnHgVersion() { + command("/usr/local/bin/hg", HgVersionCommand.HG_ARGS, "5.5.2", 0); + command("/opt/python/bin/python", HgVersionCommand.PYTHON_ARGS, PYTHON_OUTPUT, 0); + + HgVersion hgVersion = getVersion("/usr/local/bin/hg", "/opt/python/bin/python"); + assertThat(hgVersion.getMercurial()).isEqualTo("5.5.2"); + assertThat(hgVersion.getPython()).isEqualTo("3.9.0"); + } + + @Test + void shouldReturnUnknownMercurialVersionOnNonZeroExitCode() { + command("hg", HgVersionCommand.HG_ARGS, "", 1); + command("python", HgVersionCommand.PYTHON_ARGS, PYTHON_OUTPUT, 0); + + HgVersion hgVersion = getVersion("hg", "python"); + assertThat(hgVersion.getMercurial()).isEqualTo(HgVersion.UNKNOWN); + assertThat(hgVersion.getPython()).isEqualTo("3.9.0"); + } + + @Test + void shouldReturnUnknownPythonVersionOnNonZeroExitCode() { + command("hg", HgVersionCommand.HG_ARGS, "4.4.2", 0); + command("python", HgVersionCommand.PYTHON_ARGS, "", 1); + + HgVersion hgVersion = getVersion("hg", "python"); + assertThat(hgVersion.getMercurial()).isEqualTo("4.4.2"); + assertThat(hgVersion.getPython()).isEqualTo(HgVersion.UNKNOWN); + } + + @Test + void shouldReturnUnknownForInvalidPythonOutput() { + command("hg", HgVersionCommand.HG_ARGS, "1.0.0", 0); + command("python", HgVersionCommand.PYTHON_ARGS, "abcdef", 0); + + HgVersion hgVersion = getVersion("hg", "python"); + assertThat(hgVersion.getMercurial()).isEqualTo("1.0.0"); + assertThat(hgVersion.getPython()).isEqualTo(HgVersion.UNKNOWN); + } + + @Test + void shouldReturnUnknownForIOException() { + HgVersionCommand command = new HgVersionCommand(new HgConfig(), cmd -> { + throw new IOException("failed"); + }); + + HgVersion hgVersion = command.get(); + assertThat(hgVersion.getMercurial()).isEqualTo(HgVersion.UNKNOWN); + assertThat(hgVersion.getPython()).isEqualTo(HgVersion.UNKNOWN); + } + + private Process command(String command, String[] args, String content, int exitValue) { + Process process = mock(Process.class); + when(process.getInputStream()).thenReturn(new ByteArrayInputStream(content.getBytes(StandardCharsets.UTF_8))); + when(process.exitValue()).thenReturn(exitValue); + + List cmdLine = new ArrayList<>(); + cmdLine.add(command); + cmdLine.addAll(Arrays.asList(args)); + + outputs.put(Joiner.on(' ').join(cmdLine), process); + + return process; + } + + @Nonnull + private HgVersion getVersion(String hg, String python) { + HgConfig config = new HgConfig(); + config.setHgBinary(hg); + config.setPythonBinary(python); + return new HgVersionCommand(config, command -> outputs.get(Joiner.on(' ').join(command))).get(); + } + +} diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java index 6162351148..a5b103ed93 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/IncomingOutgoingTestBase.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- @@ -39,7 +39,6 @@ import org.junit.Rule; import org.junit.rules.TemporaryFolder; import sonia.scm.AbstractTestBase; import sonia.scm.repository.HgConfig; -import sonia.scm.repository.HgContext; import sonia.scm.repository.HgRepositoryHandler; import sonia.scm.repository.HgTestUtil; import sonia.scm.user.User; @@ -88,7 +87,6 @@ public abstract class IncomingOutgoingTestBase extends AbstractTestBase when(handler.getDirectory(outgoingRepository.getId())).thenReturn( outgoingDirectory); when(handler.getConfig()).thenReturn(temp.getConfig()); - when(handler.getHgContext()).thenReturn(new HgContext()); } //~--- set methods ---------------------------------------------------------- diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java index 8a8164e072..d429371a04 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactoryTest.java @@ -30,12 +30,11 @@ import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.rules.TemporaryFolder; -import sonia.scm.repository.HgHookManager; +import sonia.scm.repository.HgEnvironmentBuilder; import sonia.scm.repository.HgTestUtil; import sonia.scm.repository.work.SimpleCachingWorkingCopyPool; import sonia.scm.repository.work.WorkdirProvider; import sonia.scm.repository.work.WorkingCopy; -import sonia.scm.web.HgRepositoryEnvironmentBuilder; import java.io.File; import java.io.IOException; @@ -57,9 +56,7 @@ public class SimpleHgWorkingCopyFactoryTest extends AbstractHgCommandTestBase { @Before public void bindScmProtocol() throws IOException { workdirProvider = new WorkdirProvider(temporaryFolder.newFolder()); - HgHookManager hookManager = HgTestUtil.createHookManager(); - HgRepositoryEnvironmentBuilder environmentBuilder = new HgRepositoryEnvironmentBuilder(handler, hookManager); - workingCopyFactory = new SimpleHgWorkingCopyFactory(Providers.of(environmentBuilder), new SimpleCachingWorkingCopyPool(workdirProvider)) { + workingCopyFactory = new SimpleHgWorkingCopyFactory(new SimpleCachingWorkingCopyPool(workdirProvider)) { @Override public void configure(com.aragost.javahg.commands.PullCommand pullCommand) { // we do not want to configure http hooks in this unit test diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java deleted file mode 100644 index b7dd2346c5..0000000000 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/web/HgHookCallbackServletTest.java +++ /dev/null @@ -1,60 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.web; - -import org.junit.Test; -import sonia.scm.repository.HgRepositoryHandler; - -import javax.servlet.ServletException; -import javax.servlet.http.HttpServletRequest; -import javax.servlet.http.HttpServletResponse; -import java.io.IOException; - -import static org.mockito.ArgumentMatchers.anyInt; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.never; -import static org.mockito.Mockito.verify; -import static org.mockito.Mockito.when; -import static sonia.scm.web.HgHookCallbackServlet.PARAM_REPOSITORYID; - -public class HgHookCallbackServletTest { - - @Test - public void shouldExtractCorrectRepositoryId() throws ServletException, IOException { - HgRepositoryHandler handler = mock(HgRepositoryHandler.class); - HgHookCallbackServlet servlet = new HgHookCallbackServlet(null, handler, null, null); - HttpServletRequest request = mock(HttpServletRequest.class); - HttpServletResponse response = mock(HttpServletResponse.class); - - when(request.getContextPath()).thenReturn("http://example.com/scm"); - when(request.getRequestURI()).thenReturn("http://example.com/scm/hook/hg/pretxnchangegroup"); - String path = "/tmp/hg/12345"; - when(request.getParameter(PARAM_REPOSITORYID)).thenReturn(path); - - servlet.doPost(request, response); - - verify(response, never()).sendError(anyInt()); - } -} diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java index 985c53ddbd..6a7375f925 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java @@ -114,14 +114,14 @@ public class ScmSecurityModule extends ShiroWebModule } // bind constant - bindConstant().annotatedWith(Names.named("shiro.loginUrl")).to( - "/index.html"); + bindConstant().annotatedWith(Names.named("shiro.loginUrl")).to("/index.html"); // disable access to mustache resources addFilterChain("/**.mustache", filterConfig(ROLES, "nobody")); // disable session addFilterChain("/**", NO_SESSION_CREATION); + bindConstant().annotatedWith(Names.named("shiro.sessionStorageEnabled")).to(false); } /** From d86b2f70c33506fdb7d3baa7afd68dcedb1785d2 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 8 Nov 2020 12:23:15 +0100 Subject: [PATCH 04/83] Disable xsrf for mercurial hook tokens --- .../scm/repository/DefaultHgEnvironmentBuilder.java | 12 ++++++++++-- .../repository/DefaultHgEnvironmentBuilderTest.java | 3 ++- .../sonia/scm/security/JwtAccessTokenBuilder.java | 10 +++++----- 3 files changed, 17 insertions(+), 8 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java index c4f37bda3b..215025da43 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java @@ -32,6 +32,7 @@ import sonia.scm.repository.hooks.HookServer; import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.CipherUtil; +import sonia.scm.security.Xsrf; import sonia.scm.web.HgUtil; import javax.inject.Inject; @@ -109,11 +110,18 @@ public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder { private void write(ImmutableMap.Builder env) { env.put(ENV_HOOK_PORT, String.valueOf(getHookPort())); - AccessToken accessToken = accessTokenBuilderFactory.create().build(); - env.put(ENV_BEARER_TOKEN, CipherUtil.getInstance().encode(accessToken.compact())); + env.put(ENV_BEARER_TOKEN, accessToken()); env.put(ENV_CHALLENGE, hookEnvironment.getChallenge()); } + private String accessToken() { + AccessToken accessToken = accessTokenBuilderFactory.create() + // disable xsrf protection, because we can not access the http servlet request for verification + .custom(Xsrf.TOKEN_KEY, null) + .build(); + return CipherUtil.getInstance().encode(accessToken.compact()); + } + private synchronized int getHookPort() { if (hookPort > 0) { return hookPort; diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java index 53ae99e631..c28bb21e78 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java @@ -38,6 +38,7 @@ import sonia.scm.repository.hooks.HookServer; import sonia.scm.security.AccessToken; import sonia.scm.security.AccessTokenBuilderFactory; import sonia.scm.security.CipherUtil; +import sonia.scm.security.Xsrf; import javax.annotation.Nonnull; import java.io.File; @@ -118,7 +119,7 @@ class DefaultHgEnvironmentBuilderTest { private void applyAccessToken(String compact) { AccessToken accessToken = mock(AccessToken.class); - when(accessTokenBuilderFactory.create().build()).thenReturn(accessToken); + when(accessTokenBuilderFactory.create().custom(Xsrf.TOKEN_KEY, null).build()).thenReturn(accessToken); when(accessToken.compact()).thenReturn(compact); } diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java index 2455a01eba..c0d8521220 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java @@ -30,6 +30,7 @@ import com.google.common.collect.Maps; import io.jsonwebtoken.Claims; import io.jsonwebtoken.Jwts; import io.jsonwebtoken.SignatureAlgorithm; +import io.jsonwebtoken.security.Keys; import org.apache.shiro.SecurityUtils; import org.apache.shiro.authz.AuthorizationException; import org.apache.shiro.subject.Subject; @@ -87,8 +88,6 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { @Override public JwtAccessTokenBuilder custom(String key, Object value) { - Preconditions.checkArgument(!Strings.isNullOrEmpty(key), "null or empty value not allowed"); - Preconditions.checkArgument(value != null, "null or empty value not allowed"); this.custom.put(key, value); return this; } @@ -183,8 +182,8 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { if (refreshableFor > 0) { - long refreshExpiration = refreshableForUnit.toMillis(refreshableFor); - claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, new Date(now.toEpochMilli() + refreshExpiration).getTime()); + long re = refreshableForUnit.toMillis(refreshableFor); + claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, new Date(now.toEpochMilli() + re).getTime()); } else if (refreshExpiration != null) { claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, Date.from(refreshExpiration)); } @@ -198,10 +197,11 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { claims.setIssuer(issuer); } + // sign token and create compact version String compact = Jwts.builder() .setClaims(claims) - .signWith(SignatureAlgorithm.HS256, key.getBytes()) + .signWith(Keys.hmacShaKeyFor(key.getBytes()), SignatureAlgorithm.HS256) .compact(); return new JwtAccessToken(claims, compact); From 36aa05986f4123a312c31d48c7d4b2b400e58f2c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 8 Nov 2020 12:25:25 +0100 Subject: [PATCH 05/83] Disable shiro session storage We use JWT for session management, so we can disable shiro session management and this allows usage of SecurityManager outside of a http request. --- .../scm/lifecycle/modules/ScmSecurityModule.java | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java index 6a7375f925..291bb7c047 100644 --- a/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java +++ b/scm-webapp/src/main/java/sonia/scm/lifecycle/modules/ScmSecurityModule.java @@ -36,6 +36,9 @@ import org.apache.shiro.authc.pam.ModularRealmAuthenticator; import org.apache.shiro.authz.permission.PermissionResolver; import org.apache.shiro.crypto.hash.DefaultHashService; import org.apache.shiro.guice.web.ShiroWebModule; +import org.apache.shiro.mgt.DefaultSessionStorageEvaluator; +import org.apache.shiro.mgt.DefaultSubjectDAO; +import org.apache.shiro.mgt.SubjectDAO; import org.apache.shiro.realm.Realm; import org.slf4j.Logger; @@ -120,8 +123,18 @@ public class ScmSecurityModule extends ShiroWebModule addFilterChain("/**.mustache", filterConfig(ROLES, "nobody")); // disable session + disableSession(); + } + + private void disableSession() { addFilterChain("/**", NO_SESSION_CREATION); bindConstant().annotatedWith(Names.named("shiro.sessionStorageEnabled")).to(false); + + DefaultSubjectDAO subjectDAO = new DefaultSubjectDAO(); + DefaultSessionStorageEvaluator sessionStorageEvaluator = new DefaultSessionStorageEvaluator(); + sessionStorageEvaluator.setSessionStorageEnabled(false); + subjectDAO.setSessionStorageEvaluator(sessionStorageEvaluator); + bind(SubjectDAO.class).toInstance(subjectDAO); } /** From e774c77b2733059ecc7126b55c4806d5a90ba82c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 8 Nov 2020 12:26:38 +0100 Subject: [PATCH 06/83] Rename mercurial hooks to match python coding specs --- .../repository/spi/SimpleHgWorkingCopyFactory.java | 4 ++-- .../src/main/resources/sonia/scm/python/hgweb.py | 4 ++-- .../main/resources/sonia/scm/python/scmhooks.py | 14 +++++++------- 3 files changed, 11 insertions(+), 11 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java index c11e15ee4c..8c01c369ff 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/SimpleHgWorkingCopyFactory.java @@ -99,7 +99,7 @@ public class SimpleHgWorkingCopyFactory extends SimpleWorkingCopyFactory Date: Tue, 10 Nov 2020 09:57:53 +0100 Subject: [PATCH 07/83] Improve logging for mercurial hooks --- .../repository/hooks/DefaultHookHandler.java | 5 +++++ .../scm/repository/hooks/HookServer.java | 2 ++ .../sonia/scm/repository/hooks/Sockets.java | 1 + .../scm/repository/spi/HgModifyCommand.java | 22 +++++++++++++++---- 4 files changed, 26 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index f4d8ba2a08..b7ebefca3b 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -68,11 +68,13 @@ class DefaultHookHandler implements HookHandler { @Override public void run() { + LOG.trace("start handling hook protocol"); try (InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream()) { handleHookRequest(input, output); } catch (IOException e) { LOG.warn("failed to read hook request", e); } finally { + LOG.trace("close client socket"); close(); } } @@ -84,8 +86,10 @@ class DefaultHookHandler implements HookHandler { } private Response handleHookRequest(Request request) { + LOG.trace("process {} hook for node {}", request.getType(), request.getNode()); try { if (!environment.isAcceptAble(request.getChallenge())) { + LOG.warn("received hook with invalid challenge: {}", request.getChallenge()); return error("invalid hook challenge"); } @@ -111,6 +115,7 @@ class DefaultHookHandler implements HookHandler { } private void authenticate(Request request) { + LOG.trace("authenticate hook request"); String token = CipherUtil.getInstance().decode(request.getToken()); BearerToken bearer = BearerToken.valueOf(token); Subject subject = SecurityUtils.getSubject(); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java index 40fb4a68e3..ac27323018 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -96,6 +96,7 @@ public class HookServer implements AutoCloseable { acceptor.submit(() -> { while (!serverSocket.isClosed()) { try { + LOG.trace("wait for next hook connection"); Socket clientSocket = serverSocket.accept(); LOG.trace("accept incoming hook client from {}", clientSocket.getInetAddress()); HookHandler hookHandler = handlerFactory.create(clientSocket); @@ -104,6 +105,7 @@ public class HookServer implements AutoCloseable { LOG.debug("failed to accept socket, possible closed", ex); } } + LOG.warn("ServerSocket is closed"); }); } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java index e6b748643b..9791e99c31 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java @@ -42,6 +42,7 @@ class Sockets { byte[] bytes = objectMapper.writeValueAsBytes(object); out.write(bytes); out.write('\0'); + out.flush(); } static T read(InputStream in, Class type) throws IOException { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java index 012592c7a4..10e444b03a 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgModifyCommand.java @@ -31,6 +31,8 @@ import com.aragost.javahg.commands.ExecutionException; import com.aragost.javahg.commands.PullCommand; import com.aragost.javahg.commands.RemoveCommand; import com.aragost.javahg.commands.StatusCommand; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; import sonia.scm.NoChangesMadeException; import sonia.scm.repository.InternalRepositoryException; import sonia.scm.repository.work.WorkingCopy; @@ -40,9 +42,12 @@ import java.io.IOException; import java.nio.file.Path; import java.util.List; +@SuppressWarnings("java:S3252") // it is ok for javahg classes to access static method of subtype public class HgModifyCommand implements ModifyCommand { - private HgCommandContext context; + private static final Logger LOG = LoggerFactory.getLogger(HgModifyCommand.class); + + private final HgCommandContext context; private final HgWorkingCopyFactory workingCopyFactory; public HgModifyCommand(HgCommandContext context, HgWorkingCopyFactory workingCopyFactory) { @@ -52,7 +57,6 @@ public class HgModifyCommand implements ModifyCommand { @Override public String execute(ModifyCommandRequest request) { - try (WorkingCopy workingCopy = workingCopyFactory.createWorkingCopy(context, request.getBranch())) { Repository workingRepository = workingCopy.getWorkingRepository(); request.getRequests().forEach( @@ -97,12 +101,21 @@ public class HgModifyCommand implements ModifyCommand { } } ); + if (StatusCommand.on(workingRepository).lines().isEmpty()) { throw new NoChangesMadeException(context.getScmRepository()); } - CommitCommand.on(workingRepository).user(String.format("%s <%s>", request.getAuthor().getName(), request.getAuthor().getMail())).message(request.getCommitMessage()).execute(); + + LOG.trace("commit changes in working copy"); + CommitCommand.on(workingRepository) + .user(String.format("%s <%s>", request.getAuthor().getName(), request.getAuthor().getMail())) + .message(request.getCommitMessage()).execute(); + List execute = pullModifyChangesToCentralRepository(request, workingCopy); - return execute.get(0).getNode(); + + String node = execute.get(0).getNode(); + LOG.debug("successfully pulled changes from working copy, new node {}", node); + return node; } catch (ExecutionException e) { throwInternalRepositoryException("could not execute command on repository", e); return null; @@ -110,6 +123,7 @@ public class HgModifyCommand implements ModifyCommand { } private List pullModifyChangesToCentralRepository(ModifyCommandRequest request, WorkingCopy workingCopy) { + LOG.trace("pull changes from working copy"); try { com.aragost.javahg.commands.PullCommand pullCommand = PullCommand.on(workingCopy.getCentralRepository()); workingCopyFactory.configure(pullCommand); From 51182945242b6af9fc13e407db41bd098560a9ac Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 09:58:55 +0100 Subject: [PATCH 08/83] Fix multiple accessor threads --- .../java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java index 215025da43..597a56af15 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java @@ -36,10 +36,12 @@ import sonia.scm.security.Xsrf; import sonia.scm.web.HgUtil; import javax.inject.Inject; +import javax.inject.Singleton; import java.io.File; import java.io.IOException; import java.util.Map; +@Singleton public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder { @VisibleForTesting From e038eebde653f690c849204a281a195329be205f Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 10:01:16 +0100 Subject: [PATCH 09/83] Improve connection handling of mercurial hook python client --- .../resources/sonia/scm/python/scmhooks.py | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py index 9704fe156e..8e89bb1f06 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py @@ -44,19 +44,20 @@ def print_messages(ui, messages): def fire_hook(ui, repo, hooktype, node): abort = True + ui.debug( b"send scm-hook for " + node + b"\n" ) + connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: values = {'token': token, 'type': hooktype, 'repositoryId': repositoryId, 'challenge': challenge, 'node': node.decode('utf8') } - ui.debug( b"send scm-hook for " + node + b"\n" ) - s = socket.socket(socket.AF_INET, socket.SOCK_STREAM) - s.connect(("127.0.0.1", int(port))) - s.sendall(json.dumps(values).encode('utf-8')) - s.sendall(b'\0') + + connection.connect(("127.0.0.1", int(port))) + connection.send(json.dumps(values).encode('utf-8')) + connection.sendall(b'\0') received = [] - byte = s.recv(1) + byte = connection.recv(1) while byte != b'\0': received.append(byte) - byte = s.recv(1) + byte = connection.recv(1) message = b''.join(received).decode('utf-8') response = json.loads(message) @@ -67,6 +68,8 @@ def fire_hook(ui, repo, hooktype, node): except ValueError: ui.warn( b"scm-hook failed with an exception\n" ) ui.traceback() + finally: + connection.close() return abort def callback(ui, repo, hooktype, node=None): @@ -103,3 +106,4 @@ def pre_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs) def post_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs): return callback(ui, repo, "POST_RECEIVE", node) + From 70969b5161c73b8f032abb49fdabf53a3c05c749 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 10:07:15 +0100 Subject: [PATCH 10/83] Update changelog --- CHANGELOG.md | 3 +++ 1 file changed, 3 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 695fa92aa3..a464d82ad0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,9 @@ The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). ## Unreleased +### Changed +- Send mercurial hook callbacks over separate tcp socket instead of http ([#1415](https://github.com/scm-manager/scm-manager/pull/1415)) + ### Fixed - Error on repository initialization with least-privilege user ([#1414](https://github.com/scm-manager/scm-manager/pull/1414)) From 8b4f92fa5c76e1c5d8807fb330b27df9c09ad619 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 10:14:40 +0100 Subject: [PATCH 11/83] Remove version script because it is not longer required --- .../sonia/scm/repository/HgPythonScript.java | 66 +++---------------- .../resources/sonia/scm/python/version.py | 45 ------------- 2 files changed, 8 insertions(+), 103 deletions(-) delete mode 100644 scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/version.py diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgPythonScript.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgPythonScript.java index a7c5ef6069..0e4b05b101 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgPythonScript.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/HgPythonScript.java @@ -38,80 +38,30 @@ import java.io.File; */ public enum HgPythonScript { - HOOK("scmhooks.py"), HGWEB("hgweb.py"), VERSION("version.py"); + HOOK("scmhooks.py"), HGWEB("hgweb.py"); - /** Field description */ - private static final String BASE_DIRECTORY = - "lib".concat(File.separator).concat("python"); - - /** Field description */ + private static final String BASE_DIRECTORY = "lib".concat(File.separator).concat("python"); private static final String BASE_RESOURCE = "/sonia/scm/python/"; - //~--- constructors --------------------------------------------------------- + private final String name; - /** - * Constructs ... - * - * - * @param name - */ - private HgPythonScript(String name) - { + HgPythonScript(String name) { this.name = name; } - //~--- get methods ---------------------------------------------------------- - - /** - * Method description - * - * - * @param context - * - * @return - */ - public static File getScriptDirectory(SCMContextProvider context) - { + public static File getScriptDirectory(SCMContextProvider context) { return new File(context.getBaseDirectory(), BASE_DIRECTORY); } - /** - * Method description - * - * - * @param context - * - * @return - */ - public File getFile(SCMContextProvider context) - { + public File getFile(SCMContextProvider context) { return new File(getScriptDirectory(context), name); } - /** - * Method description - * - * - * @return - */ - public String getName() - { + public String getName() { return name; } - /** - * Method description - * - * - * @return - */ - public String getResourcePath() - { + public String getResourcePath() { return BASE_RESOURCE.concat(name); } - - //~--- fields --------------------------------------------------------------- - - /** Field description */ - private String name; } diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/version.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/version.py deleted file mode 100644 index 25c35fe8a2..0000000000 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/version.py +++ /dev/null @@ -1,45 +0,0 @@ -# -# MIT License -# -# Copyright (c) 2020-present Cloudogu GmbH and Contributors -# -# Permission is hereby granted, free of charge, to any person obtaining a copy -# of this software and associated documentation files (the "Software"), to deal -# in the Software without restriction, including without limitation the rights -# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell -# copies of the Software, and to permit persons to whom the Software is -# furnished to do so, subject to the following conditions: -# -# The above copyright notice and this permission notice shall be included in all -# copies or substantial portions of the Software. -# -# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR -# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, -# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE -# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER -# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, -# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE -# SOFTWARE. -# - -import sys -from mercurial import util -from xml.dom.minidom import Document - -pyVersion = sys.version_info -pyVersion = str(pyVersion.major) + "." + str(pyVersion.minor) + "." + str(pyVersion.micro) -hgVersion = util.version() - -doc = Document() -root = doc.createElement('version') - -pyNode = doc.createElement('python') -pyNode.appendChild(doc.createTextNode(pyVersion)) -root.appendChild(pyNode) - -hgNode = doc.createElement('mercurial') -hgNode.appendChild(doc.createTextNode(hgVersion)) -root.appendChild(hgNode) - -doc.appendChild(root) -doc.writexml(sys.stdout, encoding='UTF-8') \ No newline at end of file From 3fe678e4a0a9da71afa3fbdca90e39aa65bb398e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 10:18:03 +0100 Subject: [PATCH 12/83] Remove disableHookSSLValidation field from mercurial settings form --- scm-plugins/scm-hg-plugin/src/main/js/HgConfigurationForm.tsx | 2 -- .../scm-hg-plugin/src/main/resources/locales/de/plugins.json | 2 -- .../scm-hg-plugin/src/main/resources/locales/en/plugins.json | 2 -- 3 files changed, 6 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/js/HgConfigurationForm.tsx b/scm-plugins/scm-hg-plugin/src/main/js/HgConfigurationForm.tsx index 6b72cb9477..bbcf11c012 100644 --- a/scm-plugins/scm-hg-plugin/src/main/js/HgConfigurationForm.tsx +++ b/scm-plugins/scm-hg-plugin/src/main/js/HgConfigurationForm.tsx @@ -33,7 +33,6 @@ type Configuration = { encoding: string; useOptimizedBytecode: boolean; showRevisionInId: boolean; - disableHookSSLValidation: boolean; enableHttpPostArgs: boolean; _links: Links; }; @@ -139,7 +138,6 @@ class HgConfigurationForm extends React.Component { {this.checkbox("showRevisionInId")}
- {this.checkbox("disableHookSSLValidation")} {this.checkbox("enableHttpPostArgs")}
diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/locales/de/plugins.json b/scm-plugins/scm-hg-plugin/src/main/resources/locales/de/plugins.json index 6a4a639812..2d4b08cd2d 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/locales/de/plugins.json +++ b/scm-plugins/scm-hg-plugin/src/main/resources/locales/de/plugins.json @@ -25,8 +25,6 @@ "showRevisionInIdHelpText": "Die Revision als Teil der Node ID anzeigen.", "enableHttpPostArgs": "HttpPostArgs Protocol aktivieren", "enableHttpPostArgsHelpText": "Aktiviert das experimentelle HttpPostArgs Protokoll von Mercurial. Das HttpPostArgs Protokoll verwendet den Post Request Body anstatt des HTTP Headers um Meta Informationen zu versenden. Dieses Vorgehen reduziert die Header Größe der Mercurial Requests. HttpPostArgs wird seit Mercurial 3.8 unterstützt.", - "disableHookSSLValidation": "SSL Validierung für Hooks deaktivieren", - "disableHookSSLValidationHelpText": "Deaktiviert die Validierung von SSL Zertifikaten für den Mercurial Hook, der die Repositoryänderungen wieder zurück an den SCM-Manager leitet. Diese Option sollte nur benutzt werden, wenn der SCM-Manager ein selbstsigniertes Zertifikat verwendet.", "disabled": "Deaktiviert", "disabledHelpText": "Aktiviert oder deaktiviert das Mercurial Plugin.", "required": "Dieser Konfigurationswert wird benötigt" diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/locales/en/plugins.json b/scm-plugins/scm-hg-plugin/src/main/resources/locales/en/plugins.json index 87f4d80ac4..9082862174 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/locales/en/plugins.json +++ b/scm-plugins/scm-hg-plugin/src/main/resources/locales/en/plugins.json @@ -25,8 +25,6 @@ "showRevisionInIdHelpText": "Show revision as part of the node id.", "enableHttpPostArgs": "Enable HttpPostArgs Protocol", "enableHttpPostArgsHelpText": "Enables the experimental HttpPostArgs Protocol of mercurial. The HttpPostArgs Protocol uses the body of post requests to send the meta information instead of http headers. This helps to reduce the header size of mercurial requests. HttpPostArgs is supported since mercurial 3.8.", - "disableHookSSLValidation": "Disable SSL Validation on Hooks", - "disableHookSSLValidationHelpText": "Disables the validation of ssl certificates for the mercurial hook, which forwards the repository changes back to scm-manager. This option should only be used, if SCM-Manager uses a self signed certificate.", "disabled": "Disabled", "disabledHelpText": "Enable or disable the Mercurial plugin.", "required": "This configuration value is required" From 84aa8b4bde6ccaa8aaca6cd29dd5875045a84ee5 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Tue, 10 Nov 2020 11:03:00 +0100 Subject: [PATCH 13/83] Update pull request link --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index a464d82ad0..83c05e5423 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -7,7 +7,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Changed -- Send mercurial hook callbacks over separate tcp socket instead of http ([#1415](https://github.com/scm-manager/scm-manager/pull/1415)) +- Send mercurial hook callbacks over separate tcp socket instead of http ([#1416](https://github.com/scm-manager/scm-manager/pull/1416)) ### Fixed - Error on repository initialization with least-privilege user ([#1414](https://github.com/scm-manager/scm-manager/pull/1414)) From c2df6d2372ea73aed5851db8c3022d8dde4192ac Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 18 Nov 2020 10:44:28 +0100 Subject: [PATCH 14/83] Update storybook components to be compatible with jest 26 --- scm-ui/ui-components/package.json | 9 +- yarn.lock | 2052 +++++++++++++++++------------ 2 files changed, 1219 insertions(+), 842 deletions(-) diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index c78531db56..8990acba03 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -19,9 +19,9 @@ }, "devDependencies": { "@scm-manager/ui-tests": "^2.10.0-SNAPSHOT", - "@storybook/addon-actions": "^5.2.3", - "@storybook/addon-storyshots": "^5.2.3", - "@storybook/react": "^5.2.3", + "@storybook/addon-actions": "^6.0.28", + "@storybook/addon-storyshots": "^6.0.28", + "@storybook/react": "^6.0.28", "@types/classnames": "^2.2.9", "@types/css": "^0.0.31", "@types/enzyme": "^3.10.3", @@ -35,7 +35,6 @@ "@types/react-select": "^2.0.19", "@types/react-syntax-highlighter": "^11.0.1", "@types/refractor": "^3.0.0", - "@types/storybook__addon-storyshots": "^5.1.1", "@types/styled-components": "^5.1.0", "@types/to-camel-case": "^1.0.0", "css": "^3.0.0", @@ -45,7 +44,7 @@ "i18next-fetch-backend": "^2.2.0", "raf": "^3.4.0", "react-test-renderer": "^16.10.2", - "storybook-addon-i18next": "^1.2.1", + "storybook-addon-i18next": "^1.3.0", "to-camel-case": "^1.0.0", "typescript": "^3.7.2", "worker-plugin": "^3.2.0" diff --git a/yarn.lock b/yarn.lock index 9b752f6242..bb5ab73e0a 100644 --- a/yarn.lock +++ b/yarn.lock @@ -2,13 +2,6 @@ # yarn lockfile v1 -"@babel/code-frame@7.5.5": - version "7.5.5" - resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.5.5.tgz#bc0782f6d69f7b7d49531219699b988f669a8f9d" - integrity sha512-27d4lZoomVyo51VegxI20xZPuSHusqbQag/ztrBC7wegWoQ1nLREPVSKSW8byhTlzTKyNE4ifaTA6lCp7JjpFw== - dependencies: - "@babel/highlight" "^7.0.0" - "@babel/code-frame@7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/code-frame/-/code-frame-7.8.3.tgz#33e25903d7481181534e12ec0a25f16b6fcf419e" @@ -32,7 +25,12 @@ invariant "^2.2.4" semver "^5.5.0" -"@babel/core@^7.1.0", "@babel/core@^7.4.5", "@babel/core@^7.6.3", "@babel/core@^7.7.5": +"@babel/compat-data@^7.12.1", "@babel/compat-data@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/compat-data/-/compat-data-7.12.5.tgz#f56db0c4bb1bbbf221b4e81345aab4141e7cb0e9" + integrity sha512-DTsS7cxrsH3by8nqQSpFSyjSfSYl57D6Cf4q8dW3LK83tBKBDCkfcay1nYkXq1nIHXnpX8WMMb/O25HOy3h1zg== + +"@babel/core@^7.1.0", "@babel/core@^7.6.3", "@babel/core@^7.7.5": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.11.6.tgz#3a9455dc7387ff1bac45770650bc13ba04a15651" integrity sha512-Wpcv03AGnmkgm6uS6k8iwhIwTrcP0m17TL1n1sy7qD0qelDu4XNeW0dN0mHfa+Gei211yDaLoEe/VlbXQzM4Bg== @@ -54,6 +52,28 @@ semver "^5.4.1" source-map "^0.5.0" +"@babel/core@^7.12.3": + version "7.12.3" + resolved "https://registry.yarnpkg.com/@babel/core/-/core-7.12.3.tgz#1b436884e1e3bff6fb1328dc02b208759de92ad8" + integrity sha512-0qXcZYKZp3/6N2jKYVxZv0aNCsxTSVCiK72DTiTYZAu7sjg73W0/aynWjMbiGd87EQL4WyA8reiJVh92AVla9g== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.1" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helpers" "^7.12.1" + "@babel/parser" "^7.12.3" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + convert-source-map "^1.7.0" + debug "^4.1.0" + gensync "^1.0.0-beta.1" + json5 "^2.1.2" + lodash "^4.17.19" + resolve "^1.3.2" + semver "^5.4.1" + source-map "^0.5.0" + "@babel/generator@^7.11.5", "@babel/generator@^7.11.6", "@babel/generator@^7.4.0": version "7.11.6" resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.11.6.tgz#b868900f81b163b4d464ea24545c61cbac4dc620" @@ -63,6 +83,15 @@ jsesc "^2.5.1" source-map "^0.5.0" +"@babel/generator@^7.12.1", "@babel/generator@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/generator/-/generator-7.12.5.tgz#a2c50de5c8b6d708ab95be5e6053936c1884a4de" + integrity sha512-m16TQQJ8hPt7E+OS/XVQg/7U184MLXtvuGbCdA7na61vha+ImkyyNM/9DDA0unYCVZn3ZOhng+qz48/KBOT96A== + dependencies: + "@babel/types" "^7.12.5" + jsesc "^2.5.1" + source-map "^0.5.0" + "@babel/helper-annotate-as-pure@^7.0.0", "@babel/helper-annotate-as-pure@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-annotate-as-pure/-/helper-annotate-as-pure-7.10.4.tgz#5bf0d495a3f757ac3bda48b5bf3b3ba309c72ba3" @@ -87,6 +116,15 @@ "@babel/helper-module-imports" "^7.10.4" "@babel/types" "^7.11.5" +"@babel/helper-builder-react-jsx-experimental@^7.12.1": + version "7.12.4" + resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx-experimental/-/helper-builder-react-jsx-experimental-7.12.4.tgz#55fc1ead5242caa0ca2875dcb8eed6d311e50f48" + integrity sha512-AjEa0jrQqNk7eDQOo0pTfUOwQBMF+xVqrausQwT9/rTKy0g04ggFNaJpaE09IQMn9yExluigWMJcj0WC7bq+Og== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-module-imports" "^7.12.1" + "@babel/types" "^7.12.1" + "@babel/helper-builder-react-jsx@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-builder-react-jsx/-/helper-builder-react-jsx-7.10.4.tgz#8095cddbff858e6fa9c326daee54a2f2732c1d5d" @@ -106,6 +144,16 @@ levenary "^1.1.1" semver "^5.5.0" +"@babel/helper-compilation-targets@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-compilation-targets/-/helper-compilation-targets-7.12.5.tgz#cb470c76198db6a24e9dbc8987275631e5d29831" + integrity sha512-+qH6NrscMolUlzOYngSBMIOQpKUGPPsc61Bu5W10mg84LxZ7cmvnBHzARKbDoFxVvqqAbj6Tg6N7bSrWSPXMyw== + dependencies: + "@babel/compat-data" "^7.12.5" + "@babel/helper-validator-option" "^7.12.1" + browserslist "^4.14.5" + semver "^5.5.0" + "@babel/helper-create-class-features-plugin@^7.10.4", "@babel/helper-create-class-features-plugin@^7.10.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.10.5.tgz#9f61446ba80e8240b0a5c85c6fdac8459d6f259d" @@ -118,6 +166,17 @@ "@babel/helper-replace-supers" "^7.10.4" "@babel/helper-split-export-declaration" "^7.10.4" +"@babel/helper-create-class-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-class-features-plugin/-/helper-create-class-features-plugin-7.12.1.tgz#3c45998f431edd4a9214c5f1d3ad1448a6137f6e" + integrity sha512-hkL++rWeta/OVOBTRJc9a5Azh5mt5WgZUGAKMD8JM141YsE08K//bp1unBBieO6rUKkIPyUE0USQ30jAy3Sk1w== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + "@babel/helper-create-regexp-features-plugin@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.10.4.tgz#fdd60d88524659a0b6959c0579925e425714f3b8" @@ -127,6 +186,15 @@ "@babel/helper-regex" "^7.10.4" regexpu-core "^4.7.0" +"@babel/helper-create-regexp-features-plugin@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-create-regexp-features-plugin/-/helper-create-regexp-features-plugin-7.12.1.tgz#18b1302d4677f9dc4740fe8c9ed96680e29d37e8" + integrity sha512-rsZ4LGvFTZnzdNZR5HZdmJVuXK8834R5QkF3WvcnBhrlVtF0HSIUC6zbreL9MgjTywhKokn8RIYRiq99+DLAxA== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + regexpu-core "^4.7.1" + "@babel/helper-define-map@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/helper-define-map/-/helper-define-map-7.10.5.tgz#b53c10db78a640800152692b13393147acb9bb30" @@ -173,6 +241,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-member-expression-to-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-member-expression-to-functions/-/helper-member-expression-to-functions-7.12.1.tgz#fba0f2fcff3fba00e6ecb664bb5e6e26e2d6165c" + integrity sha512-k0CIe3tXUKTRSoEx1LQEPFU9vRQfqHtl+kf8eNnDqb4AUJEy5pz6aIiog+YWtVm2jpggjS1laH68bPsR+KWWPQ== + dependencies: + "@babel/types" "^7.12.1" + "@babel/helper-module-imports@^7.0.0", "@babel/helper-module-imports@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.10.4.tgz#4c5c54be04bd31670a7382797d75b9fa2e5b5620" @@ -180,6 +255,13 @@ dependencies: "@babel/types" "^7.10.4" +"@babel/helper-module-imports@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-module-imports/-/helper-module-imports-7.12.5.tgz#1bfc0229f794988f76ed0a4d4e90860850b54dfb" + integrity sha512-SR713Ogqg6++uexFRORf/+nPXMmWIn80TALu0uaFb+iQIUoR7bOC7zBWyzBs5b3tBBJXuyD0cRu1F15GyzjOWA== + dependencies: + "@babel/types" "^7.12.5" + "@babel/helper-module-transforms@^7.10.4", "@babel/helper-module-transforms@^7.10.5", "@babel/helper-module-transforms@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.11.0.tgz#b16f250229e47211abdd84b34b64737c2ab2d359" @@ -193,6 +275,21 @@ "@babel/types" "^7.11.0" lodash "^4.17.19" +"@babel/helper-module-transforms@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-module-transforms/-/helper-module-transforms-7.12.1.tgz#7954fec71f5b32c48e4b303b437c34453fd7247c" + integrity sha512-QQzehgFAZ2bbISiCpmVGfiGux8YVFXQ0abBic2Envhej22DVXV9nCFaS5hIQbkyo1AdGb+gNME2TSh3hYJVV/w== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-simple-access" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/helper-validator-identifier" "^7.10.4" + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.1" + "@babel/types" "^7.12.1" + lodash "^4.17.19" + "@babel/helper-optimise-call-expression@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-optimise-call-expression/-/helper-optimise-call-expression-7.10.4.tgz#50dc96413d594f995a77905905b05893cd779673" @@ -222,6 +319,15 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-remap-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-remap-async-to-generator/-/helper-remap-async-to-generator-7.12.1.tgz#8c4dbbf916314f6047dc05e6a2217074238347fd" + integrity sha512-9d0KQCRM8clMPcDwo8SevNs+/9a8yWVVmaE80FGJcEP8N1qToREmWEGnBn8BUlJhYRFz6fqxeRL1sl5Ogsed7A== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-wrap-function" "^7.10.4" + "@babel/types" "^7.12.1" + "@babel/helper-replace-supers@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.10.4.tgz#d585cd9388ea06e6031e4cd44b6713cbead9e6cf" @@ -232,6 +338,16 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-replace-supers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helper-replace-supers/-/helper-replace-supers-7.12.5.tgz#f009a17543bbbbce16b06206ae73b63d3fca68d9" + integrity sha512-5YILoed0ZyIpF4gKcpZitEnXEJ9UoDRki1Ey6xz46rxOzfNMAhVIJMoune1hmPVxh40LRv1+oafz7UsWX+vyWA== + dependencies: + "@babel/helper-member-expression-to-functions" "^7.12.1" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + "@babel/helper-simple-access@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.10.4.tgz#0f5ccda2945277a2a7a2d3a821e15395edcf3461" @@ -240,6 +356,13 @@ "@babel/template" "^7.10.4" "@babel/types" "^7.10.4" +"@babel/helper-simple-access@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-simple-access/-/helper-simple-access-7.12.1.tgz#32427e5aa61547d38eb1e6eaf5fd1426fdad9136" + integrity sha512-OxBp7pMrjVewSSC8fXDFrHrBcJATOOFssZwv16F3/6Xtc138GHybBfPbm9kfiqQHKhYQrlamWILwlDCeyMFEaA== + dependencies: + "@babel/types" "^7.12.1" + "@babel/helper-skip-transparent-expression-wrappers@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.11.0.tgz#eec162f112c2f58d3af0af125e3bb57665146729" @@ -247,6 +370,13 @@ dependencies: "@babel/types" "^7.11.0" +"@babel/helper-skip-transparent-expression-wrappers@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-skip-transparent-expression-wrappers/-/helper-skip-transparent-expression-wrappers-7.12.1.tgz#462dc63a7e435ade8468385c63d2b84cce4b3cbf" + integrity sha512-Mf5AUuhG1/OCChOJ/HcADmvcHM42WJockombn8ATJG3OnyiSxBK/Mm5x78BQWvmtXZKHgbjdGL2kin/HOLlZGA== + dependencies: + "@babel/types" "^7.12.1" + "@babel/helper-split-export-declaration@^7.10.4", "@babel/helper-split-export-declaration@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/helper-split-export-declaration/-/helper-split-export-declaration-7.11.0.tgz#f8a491244acf6a676158ac42072911ba83ad099f" @@ -259,6 +389,11 @@ resolved "https://registry.yarnpkg.com/@babel/helper-validator-identifier/-/helper-validator-identifier-7.10.4.tgz#a78c7a7251e01f616512d31b10adcf52ada5e0d2" integrity sha512-3U9y+43hz7ZM+rzG24Qe2mufW5KhvFg/NhnNph+i9mgCtdTCtMJuI1TMkrIUiK7Ix4PYlRF9I5dhqaLYA/ADXw== +"@babel/helper-validator-option@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/helper-validator-option/-/helper-validator-option-7.12.1.tgz#175567380c3e77d60ff98a54bb015fe78f2178d9" + integrity sha512-YpJabsXlJVWP0USHjnC/AQDTLlZERbON577YUVO/wLpqyj6HAtVYnWaQaN0iUN+1/tWn3c+uKKXjRut5115Y2A== + "@babel/helper-wrap-function@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/helper-wrap-function/-/helper-wrap-function-7.10.4.tgz#8a6f701eab0ff39f765b5a1cfef409990e624b87" @@ -278,7 +413,16 @@ "@babel/traverse" "^7.10.4" "@babel/types" "^7.10.4" -"@babel/highlight@^7.0.0", "@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": +"@babel/helpers@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/helpers/-/helpers-7.12.5.tgz#1a1ba4a768d9b58310eda516c449913fe647116e" + integrity sha512-lgKGMQlKqA8meJqKsW6rUnc4MdUk35Ln0ATDqdM1a/UpARODdI4j5Y5lVfUScnSNkJcdCRAaWkspykNoFg9sJA== + dependencies: + "@babel/template" "^7.10.4" + "@babel/traverse" "^7.12.5" + "@babel/types" "^7.12.5" + +"@babel/highlight@^7.10.4", "@babel/highlight@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/highlight/-/highlight-7.10.4.tgz#7d1bdfd65753538fabe6c38596cdb76d9ac60143" integrity sha512-i6rgnR/YgPEQzZZnbTHHuZdlE8qyoBNalD6F+q4vAFlcMEcqmkoG+mPqJYJCo63qPf74+Y1UZsl3l6f7/RIkmA== @@ -292,6 +436,11 @@ resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.11.5.tgz#c7ff6303df71080ec7a4f5b8c003c58f1cf51037" integrity sha512-X9rD8qqm695vgmeaQ4fvz/o3+Wk4ZzQvSHkDBgpYKxpD4qTAUm88ZKtHkVqIOsYFFbIQ6wQYhC6q7pjqVK0E0Q== +"@babel/parser@^7.12.3", "@babel/parser@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.12.5.tgz#b4af32ddd473c0bfa643bd7ff0728b8e71b81ea0" + integrity sha512-FVM6RZQ0mn2KCf1VUED7KepYeUWoVShczewOCfm3nzoBybaih51h+sYVVGthW9M6lPByEPTQf+xm27PBdlpwmQ== + "@babel/plugin-proposal-async-generator-functions@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.10.5.tgz#3491cabf2f7c179ab820606cec27fed15e0e8558" @@ -301,7 +450,16 @@ "@babel/helper-remap-async-to-generator" "^7.10.4" "@babel/plugin-syntax-async-generators" "^7.8.0" -"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.5.5", "@babel/plugin-proposal-class-properties@^7.7.0", "@babel/plugin-proposal-class-properties@^7.8.3": +"@babel/plugin-proposal-async-generator-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-async-generator-functions/-/plugin-proposal-async-generator-functions-7.12.1.tgz#dc6c1170e27d8aca99ff65f4925bd06b1c90550e" + integrity sha512-d+/o30tJxFxrA1lhzJqiUcEJdI6jKlNregCv5bASeGf2Q4MXmnwH7viDo7nhx1/ohf09oaH8j1GVYG/e3Yqk6A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + +"@babel/plugin-proposal-class-properties@^7.10.4", "@babel/plugin-proposal-class-properties@^7.5.5", "@babel/plugin-proposal-class-properties@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.10.4.tgz#a33bf632da390a59c7a8c570045d1115cd778807" integrity sha512-vhwkEROxzcHGNu2mzUC0OFFNXdZ4M23ib8aRRcJSsW8BZK9pQMD7QB7csl97NBbgGZO7ZyHUyKDnxzOaP4IrCg== @@ -309,6 +467,14 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-class-properties/-/plugin-proposal-class-properties-7.12.1.tgz#a082ff541f2a29a4821065b8add9346c0c16e5de" + integrity sha512-cKp3dlQsFsEs5CWKnN7BnSHOd0EOW8EKpEjkoz1pO2E5KzIDNV9Ros1b0CnmbVgAGXJubOYVBOGCT1OmJwOI7w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-decorators@^7.8.3": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-decorators/-/plugin-proposal-decorators-7.10.5.tgz#42898bba478bc4b1ae242a703a953a7ad350ffb4" @@ -326,6 +492,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-dynamic-import" "^7.8.0" +"@babel/plugin-proposal-dynamic-import@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-dynamic-import/-/plugin-proposal-dynamic-import-7.12.1.tgz#43eb5c2a3487ecd98c5c8ea8b5fdb69a2749b2dc" + integrity sha512-a4rhUSZFuq5W8/OO8H7BL5zspjnc1FLd9hlOxIK/f7qG4a0qsqk8uvF/ywgBA8/OmjsapjpvaEOYItfGG1qIvQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-proposal-export-default-from@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-default-from/-/plugin-proposal-export-default-from-7.10.4.tgz#08f66eef0067cbf6a7bc036977dcdccecaf0c6c5" @@ -342,6 +516,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-export-namespace-from" "^7.8.3" +"@babel/plugin-proposal-export-namespace-from@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-export-namespace-from/-/plugin-proposal-export-namespace-from-7.12.1.tgz#8b9b8f376b2d88f5dd774e4d24a5cc2e3679b6d4" + integrity sha512-6CThGf0irEkzujYS5LQcjBx8j/4aQGiVv7J9+2f7pGfxqyKh3WnmVJYW3hdrQjyksErMGBPQrCnHfOtna+WLbw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-proposal-json-strings@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.10.4.tgz#593e59c63528160233bd321b1aebe0820c2341db" @@ -350,6 +532,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-json-strings" "^7.8.0" +"@babel/plugin-proposal-json-strings@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-json-strings/-/plugin-proposal-json-strings-7.12.1.tgz#d45423b517714eedd5621a9dfdc03fa9f4eb241c" + integrity sha512-GoLDUi6U9ZLzlSda2Df++VSqDJg3CG+dR0+iWsv6XRw1rEq+zwt4DirM9yrxW6XWaTpmai1cWJLMfM8qQJf+yw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-proposal-logical-assignment-operators@^7.11.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.11.0.tgz#9f80e482c03083c87125dee10026b58527ea20c8" @@ -358,6 +548,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" +"@babel/plugin-proposal-logical-assignment-operators@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-logical-assignment-operators/-/plugin-proposal-logical-assignment-operators-7.12.1.tgz#f2c490d36e1b3c9659241034a5d2cd50263a2751" + integrity sha512-k8ZmVv0JU+4gcUGeCDZOGd0lCIamU/sMtIiX3UWnUc5yzgq6YUGyEolNYD+MLYKfSzgECPcqetVcJP9Afe/aCA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.1", "@babel/plugin-proposal-nullish-coalescing-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.10.4.tgz#02a7e961fc32e6d5b2db0649e01bf80ddee7e04a" @@ -366,6 +564,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" +"@babel/plugin-proposal-nullish-coalescing-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-nullish-coalescing-operator/-/plugin-proposal-nullish-coalescing-operator-7.12.1.tgz#3ed4fff31c015e7f3f1467f190dbe545cd7b046c" + integrity sha512-nZY0ESiaQDI1y96+jk6VxMOaL4LPo/QDHBqL+SF3/vl6dHkTwHlOI8L4ZwuRBHgakRBw5zsVylel7QPbbGuYgg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-proposal-numeric-separator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.10.4.tgz#ce1590ff0a65ad12970a609d78855e9a4c1aef06" @@ -374,7 +580,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-numeric-separator" "^7.10.4" -"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.6.2", "@babel/plugin-proposal-object-rest-spread@^7.9.6": +"@babel/plugin-proposal-numeric-separator@^7.12.1": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-numeric-separator/-/plugin-proposal-numeric-separator-7.12.5.tgz#b1ce757156d40ed79d59d467cb2b154a5c4149ba" + integrity sha512-UiAnkKuOrCyjZ3sYNHlRlfuZJbBHknMQ9VMwVeX97Ofwx7RpD6gS2HfqTCh8KNUQgcOm8IKt103oR4KIjh7Q8g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + +"@babel/plugin-proposal-object-rest-spread@^7.11.0", "@babel/plugin-proposal-object-rest-spread@^7.9.6": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.11.0.tgz#bd81f95a1f746760ea43b6c2d3d62b11790ad0af" integrity sha512-wzch41N4yztwoRw0ak+37wxwJM2oiIiy6huGCoqkvSTA9acYWcPfn9Y4aJqmFFJ70KTJUu29f3DQ43uJ9HXzEA== @@ -383,6 +597,15 @@ "@babel/plugin-syntax-object-rest-spread" "^7.8.0" "@babel/plugin-transform-parameters" "^7.10.4" +"@babel/plugin-proposal-object-rest-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-object-rest-spread/-/plugin-proposal-object-rest-spread-7.12.1.tgz#def9bd03cea0f9b72283dac0ec22d289c7691069" + integrity sha512-s6SowJIjzlhx8o7lsFx5zmY4At6CTtDvgNQDdPzkBQucle58A6b/TTeEBYtyDgmcXjUTM+vE8YOGHZzzbc/ioA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.10.4.tgz#31c938309d24a78a49d68fdabffaa863758554dd" @@ -391,6 +614,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" +"@babel/plugin-proposal-optional-catch-binding@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-catch-binding/-/plugin-proposal-optional-catch-binding-7.12.1.tgz#ccc2421af64d3aae50b558a71cede929a5ab2942" + integrity sha512-hFvIjgprh9mMw5v42sJWLI1lzU5L2sznP805zeT6rySVRA0Y18StRhDqhSxlap0oVgItRsB6WSROp4YnJTJz0g== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-proposal-optional-chaining@^7.10.1", "@babel/plugin-proposal-optional-chaining@^7.11.0", "@babel/plugin-proposal-optional-chaining@^7.6.0": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.11.0.tgz#de5866d0646f6afdaab8a566382fe3a221755076" @@ -400,6 +631,15 @@ "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" "@babel/plugin-syntax-optional-chaining" "^7.8.0" +"@babel/plugin-proposal-optional-chaining@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-optional-chaining/-/plugin-proposal-optional-chaining-7.12.1.tgz#cce122203fc8a32794296fc377c6dedaf4363797" + integrity sha512-c2uRpY6WzaVDzynVY9liyykS+kVU+WRZPMPYpkelXH8KBt1oXoI89kPbZKKG/jDT5UK92FTW2fZkZaJhdiBabw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-proposal-private-methods@^7.10.4", "@babel/plugin-proposal-private-methods@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.10.4.tgz#b160d972b8fdba5c7d111a145fc8c421fc2a6909" @@ -408,6 +648,14 @@ "@babel/helper-create-class-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-private-methods@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-private-methods/-/plugin-proposal-private-methods-7.12.1.tgz#86814f6e7a21374c980c10d38b4493e703f4a389" + integrity sha512-mwZ1phvH7/NHK6Kf8LP7MYDogGV+DKB1mryFOEwx5EBNQrosvIczzZFTUmWaeujd5xT6G1ELYWUz3CutMhjE1w== + dependencies: + "@babel/helper-create-class-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-proposal-unicode-property-regex@^7.10.4", "@babel/plugin-proposal-unicode-property-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.10.4.tgz#4483cda53041ce3413b7fe2f00022665ddfaa75d" @@ -416,6 +664,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-proposal-unicode-property-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-proposal-unicode-property-regex/-/plugin-proposal-unicode-property-regex-7.12.1.tgz#2a183958d417765b9eae334f47758e5d6a82e072" + integrity sha512-MYq+l+PvHuw/rKUz1at/vb6nCnQ2gmJBNaM62z0OgH7B2W1D9pvkpYtlti9bGtizNIU1K3zm4bZF9F91efVY0w== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-async-generators@^7.8.0", "@babel/plugin-syntax-async-generators@^7.8.4": version "7.8.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-async-generators/-/plugin-syntax-async-generators-7.8.4.tgz#a983fb1aeb2ec3f6ed042a210f640e90e786fe0d" @@ -437,6 +693,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-class-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-class-properties/-/plugin-syntax-class-properties-7.12.1.tgz#bcb297c5366e79bebadef509549cd93b04f19978" + integrity sha512-U40A76x5gTwmESz+qiqssqmeEsKvcSyvtgktrm0uzcARAmM9I1jR221f6Oq+GmHrcD+LvZDag1UTOTe2fL3TeA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-decorators@^7.10.4", "@babel/plugin-syntax-decorators@^7.2.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-decorators/-/plugin-syntax-decorators-7.10.4.tgz#6853085b2c429f9d322d02f5a635018cdeb2360c" @@ -444,7 +707,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-dynamic-import@^7", "@babel/plugin-syntax-dynamic-import@^7.2.0", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": +"@babel/plugin-syntax-dynamic-import@^7", "@babel/plugin-syntax-dynamic-import@^7.8.0", "@babel/plugin-syntax-dynamic-import@^7.8.3": version "7.8.3" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-dynamic-import/-/plugin-syntax-dynamic-import-7.8.3.tgz#62bf98b2da3cd21d626154fc96ee5b3cb68eacb3" integrity sha512-5gdGbFon+PszYzqs83S3E5mpi7/y/8M9eC90MRTZfduQOYW76ig6SOSPNe41IG5LoP3FGBn2N0RjVDSQiS94kQ== @@ -493,6 +756,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-syntax-jsx@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.12.1.tgz#9d9d357cc818aa7ae7935917c1257f67677a0926" + integrity sha512-1yRi7yAtB0ETgxdY9ti/p2TivUxJkTdhu/ZbF9MshVGqOx1TdB3b7xCXs49Fupgg50N45KcAsRP/ZqWjs9SRjg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-logical-assignment-operators@^7.10.4", "@babel/plugin-syntax-logical-assignment-operators@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-logical-assignment-operators/-/plugin-syntax-logical-assignment-operators-7.10.4.tgz#ca91ef46303530448b906652bac2e9fe9941f699" @@ -542,7 +812,7 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-syntax-top-level-await@^7.8.3": +"@babel/plugin-syntax-top-level-await@^7.12.1", "@babel/plugin-syntax-top-level-await@^7.8.3": version "7.12.1" resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-top-level-await/-/plugin-syntax-top-level-await-7.12.1.tgz#dd6c0b357ac1bb142d98537450a319625d13d2a0" integrity sha512-i7ooMZFS+a/Om0crxZodrTzNEPJHZrlMVGMTEpFAj6rYY/bKCddB0Dk/YxfPuYXOopuhKk/e1jV6h+WUU9XN3A== @@ -563,6 +833,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-arrow-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-arrow-functions/-/plugin-transform-arrow-functions-7.12.1.tgz#8083ffc86ac8e777fbe24b5967c4b2521f3cb2b3" + integrity sha512-5QB50qyN44fzzz4/qxDPQMBCTHgxg3n0xRBLJUmBlLoU/sFvxVWGZF/ZUfMVDQuJUKXaBhbupxIzIfZ6Fwk/0A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-async-to-generator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.10.4.tgz#41a5017e49eb6f3cda9392a51eef29405b245a37" @@ -572,6 +849,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-remap-async-to-generator" "^7.10.4" +"@babel/plugin-transform-async-to-generator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-async-to-generator/-/plugin-transform-async-to-generator-7.12.1.tgz#3849a49cc2a22e9743cbd6b52926d30337229af1" + integrity sha512-SDtqoEcarK1DFlRJ1hHRY5HvJUj5kX4qmtpMAm2QnhOlyuMC4TMdCRgW6WXpv93rZeYNeLP22y8Aq2dbcDRM1A== + dependencies: + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-remap-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.10.4.tgz#1afa595744f75e43a91af73b0d998ecfe4ebc2e8" @@ -579,6 +865,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoped-functions@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoped-functions/-/plugin-transform-block-scoped-functions-7.12.1.tgz#f2a1a365bde2b7112e0a6ded9067fdd7c07905d9" + integrity sha512-5OpxfuYnSgPalRpo8EWGPzIYf0lHBWORCkj5M0oLBwHdlux9Ri36QqGW3/LR13RSVOAoUUMzoPI/jpE4ABcHoA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-block-scoping@^7.10.4", "@babel/plugin-transform-block-scoping@^7.8.3": version "7.11.1" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.11.1.tgz#5b7efe98852bef8d652c0b28144cd93a9e4b5215" @@ -586,6 +879,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-block-scoping@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-block-scoping/-/plugin-transform-block-scoping-7.12.1.tgz#f0ee727874b42a208a48a586b84c3d222c2bbef1" + integrity sha512-zJyAC9sZdE60r1nVQHblcfCj29Dh2Y0DOvlMkcqSo0ckqjiCwNiUezUKw+RjOCwGfpLRwnAeQ2XlLpsnGkvv9w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-classes@^7.10.4", "@babel/plugin-transform-classes@^7.9.5": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.10.4.tgz#405136af2b3e218bc4a1926228bc917ab1a0adc7" @@ -600,6 +900,20 @@ "@babel/helper-split-export-declaration" "^7.10.4" globals "^11.1.0" +"@babel/plugin-transform-classes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-classes/-/plugin-transform-classes-7.12.1.tgz#65e650fcaddd3d88ddce67c0f834a3d436a32db6" + integrity sha512-/74xkA7bVdzQTBeSUhLLJgYIcxw/dpEpCdRDiHgPJ3Mv6uC11UhjpOhl72CgqbBCmt1qtssCyB2xnJm1+PFjog== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-define-map" "^7.10.4" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-optimise-call-expression" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/helper-split-export-declaration" "^7.10.4" + globals "^11.1.0" + "@babel/plugin-transform-computed-properties@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.10.4.tgz#9ded83a816e82ded28d52d4b4ecbdd810cdfc0eb" @@ -607,6 +921,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-computed-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-computed-properties/-/plugin-transform-computed-properties-7.12.1.tgz#d68cf6c9b7f838a8a4144badbe97541ea0904852" + integrity sha512-vVUOYpPWB7BkgUWPo4C44mUQHpTZXakEqFjbv8rQMg7TC6S6ZhGZ3otQcRH6u7+adSlE5i0sp63eMC/XGffrzg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-destructuring@^7.10.4", "@babel/plugin-transform-destructuring@^7.9.5": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.10.4.tgz#70ddd2b3d1bea83d01509e9bb25ddb3a74fc85e5" @@ -614,6 +935,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-destructuring@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-destructuring/-/plugin-transform-destructuring-7.12.1.tgz#b9a570fe0d0a8d460116413cb4f97e8e08b2f847" + integrity sha512-fRMYFKuzi/rSiYb2uRLiUENJOKq4Gnl+6qOv5f8z0TZXg3llUwUhsNNwrwaT/6dUhJTzNpBr+CUvEWBtfNY1cw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-dotall-regex@^7.10.4", "@babel/plugin-transform-dotall-regex@^7.4.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.10.4.tgz#469c2062105c1eb6a040eaf4fac4b488078395ee" @@ -622,6 +950,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-dotall-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-dotall-regex/-/plugin-transform-dotall-regex-7.12.1.tgz#a1d16c14862817b6409c0a678d6f9373ca9cd975" + integrity sha512-B2pXeRKoLszfEW7J4Hg9LoFaWEbr/kzo3teWHmtFCszjRNa/b40f9mfeqZsIDLLt/FjwQ6pz/Gdlwy85xNckBA== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-duplicate-keys@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.10.4.tgz#697e50c9fee14380fe843d1f306b295617431e47" @@ -629,6 +965,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-duplicate-keys@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-duplicate-keys/-/plugin-transform-duplicate-keys-7.12.1.tgz#745661baba295ac06e686822797a69fbaa2ca228" + integrity sha512-iRght0T0HztAb/CazveUpUQrZY+aGKKaWXMJ4uf9YJtqxSUe09j3wteztCUDRHs+SRAL7yMuFqUsLoAKKzgXjw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-exponentiation-operator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.10.4.tgz#5ae338c57f8cf4001bdb35607ae66b92d665af2e" @@ -637,6 +980,14 @@ "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-exponentiation-operator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-exponentiation-operator/-/plugin-transform-exponentiation-operator-7.12.1.tgz#b0f2ed356ba1be1428ecaf128ff8a24f02830ae0" + integrity sha512-7tqwy2bv48q+c1EHbXK0Zx3KXd2RVQp6OC7PbwFNt/dPTAV3Lu5sWtWuAj8owr5wqtWnqHfl2/mJlUmqkChKug== + dependencies: + "@babel/helper-builder-binary-assignment-operator-visitor" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-flow-strip-types@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-flow-strip-types/-/plugin-transform-flow-strip-types-7.10.4.tgz#c497957f09e86e3df7296271e9eb642876bf7788" @@ -652,6 +1003,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-for-of@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-for-of/-/plugin-transform-for-of-7.12.1.tgz#07640f28867ed16f9511c99c888291f560921cfa" + integrity sha512-Zaeq10naAsuHo7heQvyV0ptj4dlZJwZgNAtBYBnu5nNKJoW62m0zKcIEyVECrUKErkUkg6ajMy4ZfnVZciSBhg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-function-name@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.10.4.tgz#6a467880e0fc9638514ba369111811ddbe2644b7" @@ -660,6 +1018,14 @@ "@babel/helper-function-name" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-function-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-function-name/-/plugin-transform-function-name-7.12.1.tgz#2ec76258c70fe08c6d7da154003a480620eba667" + integrity sha512-JF3UgJUILoFrFMEnOJLJkRHSk6LUSXLmEFsA23aR2O5CSLUxbeUX1IZ1YQ7Sn0aXb601Ncwjx73a+FVqgcljVw== + dependencies: + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.10.4.tgz#9f42ba0841100a135f22712d0e391c462f571f3c" @@ -667,6 +1033,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-literals/-/plugin-transform-literals-7.12.1.tgz#d73b803a26b37017ddf9d3bb8f4dc58bfb806f57" + integrity sha512-+PxVGA+2Ag6uGgL0A5f+9rklOnnMccwEBzwYFL3EUaKuiyVnUipyXncFcfjSkbimLrODoqki1U9XxZzTvfN7IQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-member-expression-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.10.4.tgz#b1ec44fcf195afcb8db2c62cd8e551c881baf8b7" @@ -674,6 +1047,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-member-expression-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-member-expression-literals/-/plugin-transform-member-expression-literals-7.12.1.tgz#496038602daf1514a64d43d8e17cbb2755e0c3ad" + integrity sha512-1sxePl6z9ad0gFMB9KqmYofk34flq62aqMt9NqliS/7hPEpURUCMbyHXrMPlo282iY7nAvUB1aQd5mg79UD9Jg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-modules-amd@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.10.5.tgz#1b9cddaf05d9e88b3aad339cb3e445c4f020a9b1" @@ -683,6 +1063,15 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-amd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-amd/-/plugin-transform-modules-amd-7.12.1.tgz#3154300b026185666eebb0c0ed7f8415fefcf6f9" + integrity sha512-tDW8hMkzad5oDtzsB70HIQQRBiTKrhfgwC/KkJeGsaNFTdWhKNt/BiE8c5yj19XiGyrxpbkOfH87qkNg1YGlOQ== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-commonjs@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.10.4.tgz#66667c3eeda1ebf7896d41f1f16b17105a2fbca0" @@ -693,6 +1082,16 @@ "@babel/helper-simple-access" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-commonjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-commonjs/-/plugin-transform-modules-commonjs-7.12.1.tgz#fa403124542636c786cf9b460a0ffbb48a86e648" + integrity sha512-dY789wq6l0uLY8py9c1B48V8mVL5gZh/+PQ5ZPrylPYsnAvnEMjqsUXkuoDVPeVK+0VyGar+D08107LzDQ6pag== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-simple-access" "^7.12.1" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-systemjs@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.10.5.tgz#6270099c854066681bae9e05f87e1b9cadbe8c85" @@ -703,6 +1102,17 @@ "@babel/helper-plugin-utils" "^7.10.4" babel-plugin-dynamic-import-node "^2.3.3" +"@babel/plugin-transform-modules-systemjs@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-systemjs/-/plugin-transform-modules-systemjs-7.12.1.tgz#663fea620d593c93f214a464cd399bf6dc683086" + integrity sha512-Hn7cVvOavVh8yvW6fLwveFqSnd7rbQN3zJvoPNyNaQSvgfKmDBO9U1YL9+PCXGRlZD9tNdWTy5ACKqMuzyn32Q== + dependencies: + "@babel/helper-hoist-variables" "^7.10.4" + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-identifier" "^7.10.4" + babel-plugin-dynamic-import-node "^2.3.3" + "@babel/plugin-transform-modules-umd@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.10.4.tgz#9a8481fe81b824654b3a0b65da3df89f3d21839e" @@ -711,6 +1121,14 @@ "@babel/helper-module-transforms" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-modules-umd@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-modules-umd/-/plugin-transform-modules-umd-7.12.1.tgz#eb5a218d6b1c68f3d6217b8fa2cc82fec6547902" + integrity sha512-aEIubCS0KHKM0zUos5fIoQm+AZUMt1ZvMpqz0/H5qAQ7vWylr9+PLYurT+Ic7ID/bKLd4q8hDovaG3Zch2uz5Q== + dependencies: + "@babel/helper-module-transforms" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-named-capturing-groups-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.10.4.tgz#78b4d978810b6f3bcf03f9e318f2fc0ed41aecb6" @@ -718,6 +1136,13 @@ dependencies: "@babel/helper-create-regexp-features-plugin" "^7.10.4" +"@babel/plugin-transform-named-capturing-groups-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-named-capturing-groups-regex/-/plugin-transform-named-capturing-groups-regex-7.12.1.tgz#b407f5c96be0d9f5f88467497fa82b30ac3e8753" + integrity sha512-tB43uQ62RHcoDp9v2Nsf+dSM8sbNodbEicbQNA53zHz8pWUhsgHSJCGpt7daXxRydjb0KnfmB+ChXOv3oADp1Q== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/plugin-transform-new-target@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.10.4.tgz#9097d753cb7b024cb7381a3b2e52e9513a9c6888" @@ -725,6 +1150,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-new-target@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-new-target/-/plugin-transform-new-target-7.12.1.tgz#80073f02ee1bb2d365c3416490e085c95759dec0" + integrity sha512-+eW/VLcUL5L9IvJH7rT1sT0CzkdUTvPrXC2PXTn/7z7tXLBuKvezYbGdxD5WMRoyvyaujOq2fWoKl869heKjhw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-object-super@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.10.4.tgz#d7146c4d139433e7a6526f888c667e314a093894" @@ -733,6 +1165,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-replace-supers" "^7.10.4" +"@babel/plugin-transform-object-super@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-object-super/-/plugin-transform-object-super-7.12.1.tgz#4ea08696b8d2e65841d0c7706482b048bed1066e" + integrity sha512-AvypiGJH9hsquNUn+RXVcBdeE3KHPZexWRdimhuV59cSoOt5kFBmqlByorAeUlGG2CJWd0U+4ZtNKga/TB0cAw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-replace-supers" "^7.12.1" + "@babel/plugin-transform-parameters@^7.10.4", "@babel/plugin-transform-parameters@^7.9.5": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.10.5.tgz#59d339d58d0b1950435f4043e74e2510005e2c4a" @@ -741,6 +1181,13 @@ "@babel/helper-get-function-arity" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-parameters@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-parameters/-/plugin-transform-parameters-7.12.1.tgz#d2e963b038771650c922eff593799c96d853255d" + integrity sha512-xq9C5EQhdPK23ZeCdMxl8bbRnAgHFrw5EOC3KJUsSylZqdkCaFEXxGSBuTSObOpiiHHNyb82es8M1QYgfQGfNg== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-property-literals@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.10.4.tgz#f6fe54b6590352298785b83edd815d214c42e3c0" @@ -748,10 +1195,17 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" -"@babel/plugin-transform-react-constant-elements@^7.0.0", "@babel/plugin-transform-react-constant-elements@^7.2.0", "@babel/plugin-transform-react-constant-elements@^7.6.3": - version "7.10.4" - resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.10.4.tgz#0f485260bf1c29012bb973e7e404749eaac12c9e" - integrity sha512-cYmQBW1pXrqBte1raMkAulXmi7rjg3VI6ZLg9QIic8Hq7BtYXaWuZSxsr2siOMI6SWwpxjWfnwhTUrd7JlAV7g== +"@babel/plugin-transform-property-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-property-literals/-/plugin-transform-property-literals-7.12.1.tgz#41bc81200d730abb4456ab8b3fbd5537b59adecd" + integrity sha512-6MTCR/mZ1MQS+AwZLplX4cEySjCpnIF26ToWo942nqn8hXSm7McaHQNeGx/pt7suI1TWOWMfa/NgBhiqSnX0cQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + +"@babel/plugin-transform-react-constant-elements@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-constant-elements/-/plugin-transform-react-constant-elements-7.12.1.tgz#4471f0851feec3231cc9aaa0dccde39947c1ac1e" + integrity sha512-KOHd0tIRLoER+J+8f9DblZDa1fLGPwaaN1DI1TVHuQFOpjHV22C3CUB3obeC4fexHY9nx+fH0hQNvLFFfA1mxA== dependencies: "@babel/helper-plugin-utils" "^7.10.4" @@ -762,6 +1216,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-display-name@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-display-name/-/plugin-transform-react-display-name-7.12.1.tgz#1cbcd0c3b1d6648c55374a22fc9b6b7e5341c00d" + integrity sha512-cAzB+UzBIrekfYxyLlFqf/OagTvHLcVBb5vpouzkYkBclRPraiygVnafvAoipErZLI8ANv8Ecn6E/m5qPXD26w== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-jsx-development@^7.10.4": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.11.5.tgz#e1439e6a57ee3d43e9f54ace363fb29cefe5d7b6" @@ -771,6 +1232,15 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" +"@babel/plugin-transform-react-jsx-development@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-development/-/plugin-transform-react-jsx-development-7.12.5.tgz#677de5b96da310430d6cfb7fee16a1603afa3d56" + integrity sha512-1JJusg3iPgsZDthyWiCr3KQiGs31ikU/mSf2N2dSYEAO0GEImmVUbWf0VoSDGDFTAn5Dj4DUiR6SdIXHY7tELA== + dependencies: + "@babel/helper-builder-react-jsx-experimental" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + "@babel/plugin-transform-react-jsx-self@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.10.4.tgz#cd301a5fed8988c182ed0b9d55e9bd6db0bd9369" @@ -779,6 +1249,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" +"@babel/plugin-transform-react-jsx-self@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-self/-/plugin-transform-react-jsx-self-7.12.1.tgz#ef43cbca2a14f1bd17807dbe4376ff89d714cf28" + integrity sha512-FbpL0ieNWiiBB5tCldX17EtXgmzeEZjFrix72rQYeq9X6nUK38HCaxexzVQrZWXanxKJPKVVIU37gFjEQYkPkA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-jsx-source@^7.10.4": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.10.5.tgz#34f1779117520a779c054f2cdd9680435b9222b4" @@ -787,6 +1264,13 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" +"@babel/plugin-transform-react-jsx-source@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx-source/-/plugin-transform-react-jsx-source-7.12.1.tgz#d07de6863f468da0809edcf79a1aa8ce2a82a26b" + integrity sha512-keQ5kBfjJNRc6zZN1/nVHCd6LLIHq4aUKcVnvE/2l+ZZROSbqoiGFRtT5t3Is89XJxBQaP7NLZX2jgGHdZvvFQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-jsx@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.10.4.tgz#673c9f913948764a4421683b2bef2936968fddf2" @@ -797,6 +1281,16 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/plugin-syntax-jsx" "^7.10.4" +"@babel/plugin-transform-react-jsx@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-jsx/-/plugin-transform-react-jsx-7.12.5.tgz#39ede0e30159770561b6963be143e40af3bde00c" + integrity sha512-2xkcPqqrYiOQgSlM/iwto1paPijjsDbUynN13tI6bosDz/jOW3CRzYguIE8wKX32h+msbBM22Dv5fwrFkUOZjQ== + dependencies: + "@babel/helper-builder-react-jsx" "^7.10.4" + "@babel/helper-builder-react-jsx-experimental" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-syntax-jsx" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.10.4.tgz#3eefbb73db94afbc075f097523e445354a1c6501" @@ -805,6 +1299,14 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-react-pure-annotations@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-react-pure-annotations/-/plugin-transform-react-pure-annotations-7.12.1.tgz#05d46f0ab4d1339ac59adf20a1462c91b37a1a42" + integrity sha512-RqeaHiwZtphSIUZ5I85PEH19LOSzxfuEazoY7/pWASCAIBuATQzpSVD+eT6MebeeZT2F4eSL0u4vw6n4Nm0Mjg== + dependencies: + "@babel/helper-annotate-as-pure" "^7.10.4" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-regenerator@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.10.4.tgz#2015e59d839074e76838de2159db421966fd8b63" @@ -812,6 +1314,13 @@ dependencies: regenerator-transform "^0.14.2" +"@babel/plugin-transform-regenerator@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-regenerator/-/plugin-transform-regenerator-7.12.1.tgz#5f0a28d842f6462281f06a964e88ba8d7ab49753" + integrity sha512-gYrHqs5itw6i4PflFX3OdBPMQdPbF4bj2REIUxlMRUFk0/ZOAIpDFuViuxPjUL7YC8UPnf+XG7/utJvqXdPKng== + dependencies: + regenerator-transform "^0.14.2" + "@babel/plugin-transform-reserved-words@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.10.4.tgz#8f2682bcdcef9ed327e1b0861585d7013f8a54dd" @@ -819,6 +1328,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-reserved-words@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-reserved-words/-/plugin-transform-reserved-words-7.12.1.tgz#6fdfc8cc7edcc42b36a7c12188c6787c873adcd8" + integrity sha512-pOnUfhyPKvZpVyBHhSBoX8vfA09b7r00Pmm1sH+29ae2hMTKVmSp4Ztsr8KBKjLjx17H0eJqaRC3bR2iThM54A== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-shorthand-properties@^7.10.4", "@babel/plugin-transform-shorthand-properties@^7.8.3": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.10.4.tgz#9fd25ec5cdd555bb7f473e5e6ee1c971eede4dd6" @@ -826,6 +1342,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-shorthand-properties@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-shorthand-properties/-/plugin-transform-shorthand-properties-7.12.1.tgz#0bf9cac5550fce0cfdf043420f661d645fdc75e3" + integrity sha512-GFZS3c/MhX1OusqB1MZ1ct2xRzX5ppQh2JU1h2Pnfk88HtFTM+TWQqJNfwkmxtPQtb/s1tk87oENfXJlx7rSDw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-spread@^7.11.0", "@babel/plugin-transform-spread@^7.8.3": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.11.0.tgz#fa84d300f5e4f57752fe41a6d1b3c554f13f17cc" @@ -834,6 +1357,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-skip-transparent-expression-wrappers" "^7.11.0" +"@babel/plugin-transform-spread@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-spread/-/plugin-transform-spread-7.12.1.tgz#527f9f311be4ec7fdc2b79bb89f7bf884b3e1e1e" + integrity sha512-vuLp8CP0BE18zVYjsEBZ5xoCecMK6LBMMxYzJnh01rxQRvhNhH1csMMmBfNo5tGpGO+NhdSNW2mzIvBu3K1fng== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-skip-transparent-expression-wrappers" "^7.12.1" + "@babel/plugin-transform-sticky-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.10.4.tgz#8f3889ee8657581130a29d9cc91d7c73b7c4a28d" @@ -842,6 +1373,14 @@ "@babel/helper-plugin-utils" "^7.10.4" "@babel/helper-regex" "^7.10.4" +"@babel/plugin-transform-sticky-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-sticky-regex/-/plugin-transform-sticky-regex-7.12.1.tgz#5c24cf50de396d30e99afc8d1c700e8bce0f5caf" + integrity sha512-CiUgKQ3AGVk7kveIaPEET1jNDhZZEl1RPMWdTBE1799bdz++SwqDHStmxfCtDfBhQgCl38YRiSnrMuUMZIWSUQ== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-regex" "^7.10.4" + "@babel/plugin-transform-template-literals@^7.10.4", "@babel/plugin-transform-template-literals@^7.8.3": version "7.10.5" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.10.5.tgz#78bc5d626a6642db3312d9d0f001f5e7639fde8c" @@ -850,6 +1389,13 @@ "@babel/helper-annotate-as-pure" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-template-literals@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-template-literals/-/plugin-transform-template-literals-7.12.1.tgz#b43ece6ed9a79c0c71119f576d299ef09d942843" + integrity sha512-b4Zx3KHi+taXB1dVRBhVJtEPi9h1THCeKmae2qP0YdUHIFhVjtpqqNfxeVAa1xeHVhAy4SbHxEwx5cltAu5apw== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typeof-symbol@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.10.4.tgz#9509f1a7eec31c4edbffe137c16cc33ff0bc5bfc" @@ -857,6 +1403,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-typeof-symbol@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typeof-symbol/-/plugin-transform-typeof-symbol-7.12.1.tgz#9ca6be343d42512fbc2e68236a82ae64bc7af78a" + integrity sha512-EPGgpGy+O5Kg5pJFNDKuxt9RdmTgj5sgrus2XVeMp/ZIbOESadgILUbm50SNpghOh3/6yrbsH+NB5+WJTmsA7Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-typescript@^7.10.4": version "7.11.0" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-typescript/-/plugin-transform-typescript-7.11.0.tgz#2b4879676af37342ebb278216dd090ac67f13abb" @@ -873,6 +1426,13 @@ dependencies: "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-escapes@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-escapes/-/plugin-transform-unicode-escapes-7.12.1.tgz#5232b9f81ccb07070b7c3c36c67a1b78f1845709" + integrity sha512-I8gNHJLIc7GdApm7wkVnStWssPNbSRMPtgHdmH3sRM1zopz09UWPS4x5V4n1yz/MIWTVnJ9sp6IkuXdWM4w+2Q== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-unicode-regex@^7.10.4": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.10.4.tgz#e56d71f9282fac6db09c82742055576d5e6d80a8" @@ -881,6 +1441,14 @@ "@babel/helper-create-regexp-features-plugin" "^7.10.4" "@babel/helper-plugin-utils" "^7.10.4" +"@babel/plugin-transform-unicode-regex@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/plugin-transform-unicode-regex/-/plugin-transform-unicode-regex-7.12.1.tgz#cc9661f61390db5c65e3febaccefd5c6ac3faecb" + integrity sha512-SqH4ClNngh/zGwHZOOQMTD+e8FGWexILV+ePMyiDJttAWRh5dhDL8rcl5lSgU3Huiq6Zn6pWTMvdPAb21Dwdyg== + dependencies: + "@babel/helper-create-regexp-features-plugin" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/polyfill@^7.6.0": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/polyfill/-/polyfill-7.11.5.tgz#df550b2ec53abbc2ed599367ec59e64c7a707bb5" @@ -889,7 +1457,79 @@ core-js "^2.6.5" regenerator-runtime "^0.13.4" -"@babel/preset-env@^7.4.5", "@babel/preset-env@^7.6.3", "@babel/preset-env@^7.9.6": +"@babel/preset-env@^7.12.1": + version "7.12.1" + resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.12.1.tgz#9c7e5ca82a19efc865384bb4989148d2ee5d7ac2" + integrity sha512-H8kxXmtPaAGT7TyBvSSkoSTUK6RHh61So05SyEbpmr0MCZrsNYn7mGMzzeYoOUCdHzww61k8XBft2TaES+xPLg== + dependencies: + "@babel/compat-data" "^7.12.1" + "@babel/helper-compilation-targets" "^7.12.1" + "@babel/helper-module-imports" "^7.12.1" + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/helper-validator-option" "^7.12.1" + "@babel/plugin-proposal-async-generator-functions" "^7.12.1" + "@babel/plugin-proposal-class-properties" "^7.12.1" + "@babel/plugin-proposal-dynamic-import" "^7.12.1" + "@babel/plugin-proposal-export-namespace-from" "^7.12.1" + "@babel/plugin-proposal-json-strings" "^7.12.1" + "@babel/plugin-proposal-logical-assignment-operators" "^7.12.1" + "@babel/plugin-proposal-nullish-coalescing-operator" "^7.12.1" + "@babel/plugin-proposal-numeric-separator" "^7.12.1" + "@babel/plugin-proposal-object-rest-spread" "^7.12.1" + "@babel/plugin-proposal-optional-catch-binding" "^7.12.1" + "@babel/plugin-proposal-optional-chaining" "^7.12.1" + "@babel/plugin-proposal-private-methods" "^7.12.1" + "@babel/plugin-proposal-unicode-property-regex" "^7.12.1" + "@babel/plugin-syntax-async-generators" "^7.8.0" + "@babel/plugin-syntax-class-properties" "^7.12.1" + "@babel/plugin-syntax-dynamic-import" "^7.8.0" + "@babel/plugin-syntax-export-namespace-from" "^7.8.3" + "@babel/plugin-syntax-json-strings" "^7.8.0" + "@babel/plugin-syntax-logical-assignment-operators" "^7.10.4" + "@babel/plugin-syntax-nullish-coalescing-operator" "^7.8.0" + "@babel/plugin-syntax-numeric-separator" "^7.10.4" + "@babel/plugin-syntax-object-rest-spread" "^7.8.0" + "@babel/plugin-syntax-optional-catch-binding" "^7.8.0" + "@babel/plugin-syntax-optional-chaining" "^7.8.0" + "@babel/plugin-syntax-top-level-await" "^7.12.1" + "@babel/plugin-transform-arrow-functions" "^7.12.1" + "@babel/plugin-transform-async-to-generator" "^7.12.1" + "@babel/plugin-transform-block-scoped-functions" "^7.12.1" + "@babel/plugin-transform-block-scoping" "^7.12.1" + "@babel/plugin-transform-classes" "^7.12.1" + "@babel/plugin-transform-computed-properties" "^7.12.1" + "@babel/plugin-transform-destructuring" "^7.12.1" + "@babel/plugin-transform-dotall-regex" "^7.12.1" + "@babel/plugin-transform-duplicate-keys" "^7.12.1" + "@babel/plugin-transform-exponentiation-operator" "^7.12.1" + "@babel/plugin-transform-for-of" "^7.12.1" + "@babel/plugin-transform-function-name" "^7.12.1" + "@babel/plugin-transform-literals" "^7.12.1" + "@babel/plugin-transform-member-expression-literals" "^7.12.1" + "@babel/plugin-transform-modules-amd" "^7.12.1" + "@babel/plugin-transform-modules-commonjs" "^7.12.1" + "@babel/plugin-transform-modules-systemjs" "^7.12.1" + "@babel/plugin-transform-modules-umd" "^7.12.1" + "@babel/plugin-transform-named-capturing-groups-regex" "^7.12.1" + "@babel/plugin-transform-new-target" "^7.12.1" + "@babel/plugin-transform-object-super" "^7.12.1" + "@babel/plugin-transform-parameters" "^7.12.1" + "@babel/plugin-transform-property-literals" "^7.12.1" + "@babel/plugin-transform-regenerator" "^7.12.1" + "@babel/plugin-transform-reserved-words" "^7.12.1" + "@babel/plugin-transform-shorthand-properties" "^7.12.1" + "@babel/plugin-transform-spread" "^7.12.1" + "@babel/plugin-transform-sticky-regex" "^7.12.1" + "@babel/plugin-transform-template-literals" "^7.12.1" + "@babel/plugin-transform-typeof-symbol" "^7.12.1" + "@babel/plugin-transform-unicode-escapes" "^7.12.1" + "@babel/plugin-transform-unicode-regex" "^7.12.1" + "@babel/preset-modules" "^0.1.3" + "@babel/types" "^7.12.1" + core-js-compat "^3.6.2" + semver "^5.5.0" + +"@babel/preset-env@^7.6.3", "@babel/preset-env@^7.9.6": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/preset-env/-/preset-env-7.11.5.tgz#18cb4b9379e3e92ffea92c07471a99a2914e4272" integrity sha512-kXqmW1jVcnB2cdueV+fyBM8estd5mlNfaQi6lwLgRwCby4edpavgbFhiBNjmWA3JpB/yZGSISa7Srf+TwxDQoA== @@ -995,6 +1635,19 @@ "@babel/plugin-transform-react-jsx-source" "^7.10.4" "@babel/plugin-transform-react-pure-annotations" "^7.10.4" +"@babel/preset-react@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/preset-react/-/preset-react-7.12.5.tgz#d45625f65d53612078a43867c5c6750e78772c56" + integrity sha512-jcs++VPrgyFehkMezHtezS2BpnUlR7tQFAyesJn1vGTO9aTFZrgIQrA5YydlTwxbcjMwkFY6i04flCigRRr3GA== + dependencies: + "@babel/helper-plugin-utils" "^7.10.4" + "@babel/plugin-transform-react-display-name" "^7.12.1" + "@babel/plugin-transform-react-jsx" "^7.12.5" + "@babel/plugin-transform-react-jsx-development" "^7.12.5" + "@babel/plugin-transform-react-jsx-self" "^7.12.1" + "@babel/plugin-transform-react-jsx-source" "^7.12.1" + "@babel/plugin-transform-react-pure-annotations" "^7.12.1" + "@babel/preset-typescript@^7.6.0", "@babel/preset-typescript@^7.9.0": version "7.10.4" resolved "https://registry.yarnpkg.com/@babel/preset-typescript/-/preset-typescript-7.10.4.tgz#7d5d052e52a682480d6e2cc5aa31be61c8c25e36" @@ -1022,7 +1675,7 @@ core-js-pure "^3.0.0" regenerator-runtime "^0.13.4" -"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.6.3", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": +"@babel/runtime@^7.0.0", "@babel/runtime@^7.1.2", "@babel/runtime@^7.10.1", "@babel/runtime@^7.10.2", "@babel/runtime@^7.11.2", "@babel/runtime@^7.3.1", "@babel/runtime@^7.5.0", "@babel/runtime@^7.5.5", "@babel/runtime@^7.7.2", "@babel/runtime@^7.7.6", "@babel/runtime@^7.8.4", "@babel/runtime@^7.9.2": version "7.11.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.11.2.tgz#f549c13c754cc40b87644b9fa9f09a6a95fe0736" integrity sha512-TeWkU52so0mPtDcaCTxNBI/IHiz0pZgr8VEFqXFtZWpYD08ZB6FaSwVAS8MKRQAP3bYKiVjwysOJgMFY28o6Tw== @@ -1053,6 +1706,21 @@ globals "^11.1.0" lodash "^4.17.19" +"@babel/traverse@^7.12.1", "@babel/traverse@^7.12.5": + version "7.12.5" + resolved "https://registry.yarnpkg.com/@babel/traverse/-/traverse-7.12.5.tgz#78a0c68c8e8a35e4cacfd31db8bb303d5606f095" + integrity sha512-xa15FbQnias7z9a62LwYAA5SZZPkHIXpd42C6uW68o8uTuua96FHZy1y61Va5P/i83FAAcMpW8+A/QayntzuqA== + dependencies: + "@babel/code-frame" "^7.10.4" + "@babel/generator" "^7.12.5" + "@babel/helper-function-name" "^7.10.4" + "@babel/helper-split-export-declaration" "^7.11.0" + "@babel/parser" "^7.12.5" + "@babel/types" "^7.12.5" + debug "^4.1.0" + globals "^11.1.0" + lodash "^4.17.19" + "@babel/types@^7.0.0", "@babel/types@^7.10.4", "@babel/types@^7.10.5", "@babel/types@^7.11.0", "@babel/types@^7.11.5", "@babel/types@^7.3.0", "@babel/types@^7.3.3", "@babel/types@^7.4.0", "@babel/types@^7.4.4", "@babel/types@^7.5.5", "@babel/types@^7.7.0": version "7.11.5" resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.11.5.tgz#d9de577d01252d77c6800cee039ee64faf75662d" @@ -1062,6 +1730,15 @@ lodash "^4.17.19" to-fast-properties "^2.0.0" +"@babel/types@^7.12.1", "@babel/types@^7.12.5", "@babel/types@^7.12.6": + version "7.12.6" + resolved "https://registry.yarnpkg.com/@babel/types/-/types-7.12.6.tgz#ae0e55ef1cce1fbc881cd26f8234eb3e657edc96" + integrity sha512-hwyjw6GvjBLiyy3W0YQf0Z5Zf4NpYejUnKFcfcUhZCSffoBBp30w6wP2Wn6pk31jMYZvcOrB/1b7cGXvEoKogA== + dependencies: + "@babel/helper-validator-identifier" "^7.10.4" + lodash "^4.17.19" + to-fast-properties "^2.0.0" + "@bcoe/v8-coverage@^0.2.3": version "0.2.3" resolved "https://registry.yarnpkg.com/@bcoe/v8-coverage/-/v8-coverage-0.2.3.tgz#75a2e8b51cb758a7553d6804a5932d7aace75c39" @@ -2789,35 +3466,39 @@ dependencies: "@sinonjs/commons" "^1.7.0" -"@storybook/addon-actions@^5.2.3": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-5.3.21.tgz#16eed3eb24996adfcbf70bd476a261324d6de593" - integrity sha512-6SAF/j8UBZaAbRz/rYUlcCXda+c4LQvvNlbVJc9GHjNNNMJQQVc3/EU+M7PyFz6uDUxudAW1+AFchGk04ACJ2g== +"@storybook/addon-actions@^6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/addon-actions/-/addon-actions-6.0.28.tgz#86c0353b597c2a41f6ac7efa7c0d5aeed6a456b2" + integrity sha512-DrApIt/rMCBrynJsFbmXPba2BCAj+yOybCsr0cqNNMkaZytAnoeDEqseCdWUtNXSgDnprAQ0HIrS2TIf4twh8w== dependencies: - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/theming" "5.3.21" + "@storybook/addons" "6.0.28" + "@storybook/api" "6.0.28" + "@storybook/client-api" "6.0.28" + "@storybook/components" "6.0.28" + "@storybook/core-events" "6.0.28" + "@storybook/theming" "6.0.28" core-js "^3.0.1" - fast-deep-equal "^2.0.1" + fast-deep-equal "^3.1.1" global "^4.3.2" - polished "^3.3.1" + lodash "^4.17.15" + polished "^3.4.4" prop-types "^15.7.2" react "^16.8.3" - react-inspector "^4.0.0" - uuid "^3.3.2" + react-inspector "^5.0.1" + regenerator-runtime "^0.13.3" + ts-dedent "^1.1.1" + util-deprecate "^1.0.2" + uuid "^8.0.0" -"@storybook/addon-storyshots@*": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.0.22.tgz#96e201be5f108c347a9b129cb6a43a26480f593f" - integrity sha512-l4h5OTwbORwdi2GxAOzCF3avmGwbxdJFmXgagzq74iHooCE/H7FF3VfY1vu3ZXWz5LTqe5INNJyfhwHxocntpg== +"@storybook/addon-storyshots@^6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-6.0.28.tgz#689dbe3e848dac7cdc878bcb5e29b213ab356deb" + integrity sha512-5tOKVlCJHVzDesYCwSBW6oOHmmOli2Lo2Rup6ygMq6ZYQUfwyrtA352WzZpW9MKH2VryxKrd0jNrcxVVMDDHFA== dependencies: "@jest/transform" "^26.0.0" - "@storybook/addons" "6.0.22" - "@storybook/client-api" "6.0.22" - "@storybook/core" "6.0.22" + "@storybook/addons" "6.0.28" + "@storybook/client-api" "6.0.28" + "@storybook/core" "6.0.28" "@types/glob" "^7.1.1" "@types/jest" "^25.1.1" "@types/jest-specific-snapshot" "^0.5.3" @@ -2831,28 +3512,22 @@ regenerator-runtime "^0.13.3" ts-dedent "^1.1.1" -"@storybook/addon-storyshots@^5.2.3": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/addon-storyshots/-/addon-storyshots-5.3.21.tgz#f9536145642cf590b73151a0187671991a7c0057" - integrity sha512-uYXlDNZ9l1w1eOh8G1RT+/FOH33qLw00CnhArsWpy+pnckiL7SKvHaZcQPjkFliatDUr1jUHpLBea78B1fKV1g== +"@storybook/addons@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.0.28.tgz#8c7ef3229706e2dc32d40ec9158431a3ffee3e5b" + integrity sha512-3Brf9w/u2sw0huarcO1iLFBmGt7KtApRxX4bFcsRiPPFxliDrmb1sAsd37UbKp8qBSw1U6FByjuTJQ7xn/TDhg== dependencies: - "@jest/transform" "^24.9.0" - "@storybook/addons" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/core" "5.3.21" - "@types/glob" "^7.1.1" - "@types/jest" "^24.0.16" - "@types/jest-specific-snapshot" "^0.5.3" - babel-plugin-require-context-hook "^1.0.0" + "@storybook/api" "6.0.28" + "@storybook/channels" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/core-events" "6.0.28" + "@storybook/router" "6.0.28" + "@storybook/theming" "6.0.28" core-js "^3.0.1" - glob "^7.1.3" global "^4.3.2" - jest-specific-snapshot "^2.0.0" - read-pkg-up "^7.0.0" regenerator-runtime "^0.13.3" - ts-dedent "^1.1.0" -"@storybook/addons@5.3.21", "@storybook/addons@^5.3.17": +"@storybook/addons@^5.3.17": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-5.3.21.tgz#ee312c738c33e8c34dc11777ef93522c3c36e56a" integrity sha512-Ji/21WADTLVbTbiKcZ64BcL0Es+h1Afxx3kNmGJqPSTUYroCwIFCT9mUzCqU6G+YyWaISAmTii5UJkTwMkChwA== @@ -2865,21 +3540,6 @@ global "^4.3.2" util-deprecate "^1.0.2" -"@storybook/addons@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/addons/-/addons-6.0.22.tgz#90958365dcd16cd1f71dcf1f7497c6554293b6a5" - integrity sha512-D7GfOZ16DAyIUoNXY/aisKlXxHlk61XDIAvN102n/GGrmiNQhCKO2cuwjrmpqQGIXW/+QAsc0YUUAptEKpw9vw== - dependencies: - "@storybook/api" "6.0.22" - "@storybook/channels" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/core-events" "6.0.22" - "@storybook/router" "6.0.22" - "@storybook/theming" "6.0.22" - core-js "^3.0.1" - global "^4.3.2" - regenerator-runtime "^0.13.3" - "@storybook/api@5.3.21": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/api/-/api-5.3.21.tgz#8f1772de53b65e1a65d2f0257463d621a8617c58" @@ -2906,19 +3566,19 @@ telejson "^3.2.0" util-deprecate "^1.0.2" -"@storybook/api@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.0.22.tgz#ef6bbb4f06036cf09bb355fc5fd41d16ead37e23" - integrity sha512-GfGRXAe0h5cFTwJUJ7XqhaaE4+aXk/f+QCWfuUQkipUsGhGL+KLY80OU5cqC7LDB2nbhZ2bKUaLCzXu1Qsw5pw== +"@storybook/api@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/api/-/api-6.0.28.tgz#ec87494e982240e2ccc2390f79d3100cc5a8f4da" + integrity sha512-6dWjz5HSM3v8c+J0Z/lGYGujs4ZKSt1lJUWaH/MPvuoeDiVm+1jKLwWTAMlMnOP9o8xgNTuQtEbQkNG2D66oQA== dependencies: "@reach/router" "^1.3.3" - "@storybook/channels" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/core-events" "6.0.22" + "@storybook/channels" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/core-events" "6.0.28" "@storybook/csf" "0.0.1" - "@storybook/router" "6.0.22" + "@storybook/router" "6.0.28" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.0.22" + "@storybook/theming" "6.0.28" "@types/reach__router" "^1.3.5" core-js "^3.0.1" fast-deep-equal "^3.1.1" @@ -2932,25 +3592,14 @@ ts-dedent "^1.1.1" util-deprecate "^1.0.2" -"@storybook/channel-postmessage@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-5.3.21.tgz#9c08bf1c108ff973dbca18e582680d25178db1d4" - integrity sha512-CfoP7aEbZtJ35R9zeujMRdIwprETUi+Ve+y84DhXYQ2uJ0rR3vO4zHLZnxMMyJ5VnYOfuO042uch07+EKBz40Q== +"@storybook/channel-postmessage@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.0.28.tgz#82028e368d440d49e3c4ad4e6d0166d044f0a35b" + integrity sha512-HnLKXPIwZo+JvuG1aYfGX+BoDVpmYbZBlFDSSKroBdCWZRxJJ7OQIOjBWfnf9RxOJqtwEZfVylgtmIUr9ult3Q== dependencies: - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - core-js "^3.0.1" - global "^4.3.2" - telejson "^3.2.0" - -"@storybook/channel-postmessage@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/channel-postmessage/-/channel-postmessage-6.0.22.tgz#0a928d25fe3b87340e5670e897dc8fa4ee6ca6df" - integrity sha512-Upa2rG9H65MPdVxT9pNeDL9VlX5VeP7bpvR/TTEf2cRCiq6SC93pAs45XPWBcD8Jhq3p5+uFDARKReb2iF49+w== - dependencies: - "@storybook/channels" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/core-events" "6.0.22" + "@storybook/channels" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/core-events" "6.0.28" core-js "^3.0.1" global "^4.3.2" qs "^6.6.0" @@ -2963,48 +3612,25 @@ dependencies: core-js "^3.0.1" -"@storybook/channels@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.0.22.tgz#4cdfee7c1581462ec872b310917003c9e4dc7224" - integrity sha512-d/RlPFDq9NXA/Y3CVDsSVsWgvYiiiifxQN9hz5+y3T6MnRJPEfAPWYkbv+wLixWbDF2ULzjQHp4zcfTm6T7A4w== +"@storybook/channels@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/channels/-/channels-6.0.28.tgz#9d086db8ae9ee0464fa743fefd155a2e810eb4b7" + integrity sha512-Ow1fR0GGdlfAQlagOrXHs7QQlCQ0xTKoznQgUFv1KxKw/bMwMtTJcpCYGSAuDzCzypCIR4EHtIHZxJsd/A2ieg== dependencies: core-js "^3.0.1" ts-dedent "^1.1.1" util-deprecate "^1.0.2" -"@storybook/client-api@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-5.3.21.tgz#5b218a28f24219c32ab4b92a6af2a3e452fb8089" - integrity sha512-vS4DfA2Avvl7JNQymO4e3RUNoTWIGVfZJ70Irnd6PTAZNojbCXTYuigDavrmyf83F3g5rQpwmSAPjuoi/X/FRA== +"@storybook/client-api@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.0.28.tgz#789e1dd85e5bfed8580035bbefe1871359bac8fc" + integrity sha512-KZ6cw6MU8exXyahHrpNAG5gmSioCXw6I5k0IOH/xzkJpN/9IMbYSbACvxbSKHeCIZorhcWNVWJjth8Kc6dD4Hg== dependencies: - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@types/webpack-env" "^1.15.0" - core-js "^3.0.1" - eventemitter3 "^4.0.0" - global "^4.3.2" - is-plain-object "^3.0.0" - lodash "^4.17.15" - memoizerific "^1.11.3" - qs "^6.6.0" - stable "^0.1.8" - ts-dedent "^1.1.0" - util-deprecate "^1.0.2" - -"@storybook/client-api@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/client-api/-/client-api-6.0.22.tgz#b6079d376b49eb23b69661474446ed402bdef235" - integrity sha512-GP9m1LW3C79EJxTGToCvBZDEApMRCl9tVXGfB9yEB0dIFC9jTwsPfpwjnhh2Imp9xJjszahSqxkhv4rAZ8C44Q== - dependencies: - "@storybook/addons" "6.0.22" - "@storybook/channel-postmessage" "6.0.22" - "@storybook/channels" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/core-events" "6.0.22" + "@storybook/addons" "6.0.28" + "@storybook/channel-postmessage" "6.0.28" + "@storybook/channels" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/core-events" "6.0.28" "@storybook/csf" "0.0.1" "@types/qs" "^6.9.0" "@types/webpack-env" "^1.15.2" @@ -3025,15 +3651,43 @@ dependencies: core-js "^3.0.1" -"@storybook/client-logger@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.0.22.tgz#4e4b2c40b708b500611d5e207099a4e46e825590" - integrity sha512-AQD2Zz7BIIwrP0/sNZMXgP/BEZo5qK1YPDl2mPppSJdFocVCYDlc6HgYPZZHtPvD5BVWAENg2NQoGBOivuMl3g== +"@storybook/client-logger@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/client-logger/-/client-logger-6.0.28.tgz#f71d0ad3314facfdce4a5d2bebd0f08dc0289109" + integrity sha512-FOgeRQknrlm5PTgfY0THPrcrDyxu4ImuFOn+VWQW60mf9ShJQl45BEgm4bm9hbblYYnVHtnskWUOJfxqhHvgjg== dependencies: core-js "^3.0.1" global "^4.3.2" -"@storybook/components@5.3.21", "@storybook/components@^5.3.17": +"@storybook/components@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.0.28.tgz#aca24419a3941e0f5a20dd349f2b13614542b3da" + integrity sha512-rp18w+xC5/ATQThnUR6Rv2cg/DAokbV88uZLPCGHX8HsPY2jFPLyCsWnNiIHBF/SfUCjIlljChlX3bzGk+SQUA== + dependencies: + "@storybook/client-logger" "6.0.28" + "@storybook/csf" "0.0.1" + "@storybook/theming" "6.0.28" + "@types/overlayscrollbars" "^1.9.0" + "@types/react-color" "^3.0.1" + "@types/react-syntax-highlighter" "11.0.4" + core-js "^3.0.1" + fast-deep-equal "^3.1.1" + global "^4.3.2" + lodash "^4.17.15" + markdown-to-jsx "^6.11.4" + memoizerific "^1.11.3" + overlayscrollbars "^1.10.2" + polished "^3.4.4" + popper.js "^1.14.7" + react "^16.8.3" + react-color "^2.17.0" + react-dom "^16.8.3" + react-popper-tooltip "^2.11.0" + react-syntax-highlighter "^12.2.1" + react-textarea-autosize "^8.1.1" + ts-dedent "^1.1.1" + +"@storybook/components@^5.3.17": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/components/-/components-5.3.21.tgz#17ee371a2455c6e807c3d3135a9266e63ad7651a" integrity sha512-42QQk6qZl6wrtajP8yNCfmNS2t8Iod5QY+4V/l6iNnnT9O+j6cWOlnO+ZyvjNv0Xm0zIOt+VyVjdkKh8FUjQmA== @@ -3060,34 +3714,6 @@ simplebar-react "^1.0.0-alpha.6" ts-dedent "^1.1.0" -"@storybook/components@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/components/-/components-6.0.22.tgz#07b0804fb9b39787967be88d435540adddce328d" - integrity sha512-sc7O4djNLajyJdVY4dUSO73L/+VM8IyzYKK9c5kSw4pN+l6M3EUBi4Zt/jdQc+WxSBmmriSe7aBOKrOSxBBSiA== - dependencies: - "@storybook/client-logger" "6.0.22" - "@storybook/csf" "0.0.1" - "@storybook/theming" "6.0.22" - "@types/overlayscrollbars" "^1.9.0" - "@types/react-color" "^3.0.1" - "@types/react-syntax-highlighter" "11.0.4" - core-js "^3.0.1" - fast-deep-equal "^3.1.1" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - overlayscrollbars "^1.10.2" - polished "^3.4.4" - popper.js "^1.14.7" - react "^16.8.3" - react-color "^2.17.0" - react-dom "^16.8.3" - react-popper-tooltip "^2.11.0" - react-syntax-highlighter "^12.2.1" - react-textarea-autosize "^8.1.1" - ts-dedent "^1.1.1" - "@storybook/core-events@5.3.21", "@storybook/core-events@^5.3.17": version "5.3.21" resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-5.3.21.tgz#41d81c3f107302a032545fc86ff344230c04b9e9" @@ -3095,96 +3721,17 @@ dependencies: core-js "^3.0.1" -"@storybook/core-events@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.0.22.tgz#1bbdef9d50cea628f6f761117b6ddb9927caebf8" - integrity sha512-XQplzZwC9o4OQbKPjBruIOSFGto6qtmIAuh94NaHB6Hpv8YpsDwy1fXxEr990fj/5bOXmL4YV3x1AD6fOK/1sA== +"@storybook/core-events@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/core-events/-/core-events-6.0.28.tgz#f9d0925cf11e696fdd3602ae581d29568f352822" + integrity sha512-YT691sQEyoTabXZGCeCXulIO31aXfiWpvE7vW7t3F/uo/Xv6aiNcY/Fzy1vRNcbgCAf3EWsBtzb1eh0FCJkyuA== dependencies: core-js "^3.0.1" -"@storybook/core@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-5.3.21.tgz#da963166ea24601f318266a3aa6bbc06fc8fb175" - integrity sha512-plD47WIsn/JoyRJDOpmH7N7mEMo/jiA8ZlOitLW55zYvzUn8UrVpRFpMYo91OJxiCT6JFoaEh3XtNdhbgUwnPA== - dependencies: - "@babel/plugin-proposal-class-properties" "^7.7.0" - "@babel/plugin-proposal-object-rest-spread" "^7.6.2" - "@babel/plugin-syntax-dynamic-import" "^7.2.0" - "@babel/plugin-transform-react-constant-elements" "^7.2.0" - "@babel/preset-env" "^7.4.5" - "@storybook/addons" "5.3.21" - "@storybook/channel-postmessage" "5.3.21" - "@storybook/client-api" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/csf" "0.0.1" - "@storybook/node-logger" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - "@storybook/ui" "5.3.21" - airbnb-js-shims "^2.2.1" - ansi-to-html "^0.6.11" - autoprefixer "^9.7.2" - babel-plugin-add-react-displayname "^0.0.5" - babel-plugin-emotion "^10.0.20" - babel-plugin-macros "^2.7.0" - babel-preset-minify "^0.5.0 || 0.6.0-alpha.5" - boxen "^4.1.0" - case-sensitive-paths-webpack-plugin "^2.2.0" - chalk "^3.0.0" - cli-table3 "0.5.1" - commander "^4.0.1" - core-js "^3.0.1" - corejs-upgrade-webpack-plugin "^2.2.0" - css-loader "^3.0.0" - detect-port "^1.3.0" - dotenv-webpack "^1.7.0" - ejs "^2.7.4" - express "^4.17.0" - file-loader "^4.2.0" - file-system-cache "^1.0.5" - find-cache-dir "^3.0.0" - find-up "^4.1.0" - fs-extra "^8.0.1" - glob-base "^0.3.0" - global "^4.3.2" - html-webpack-plugin "^4.0.0-beta.2" - inquirer "^7.0.0" - interpret "^2.0.0" - ip "^1.1.5" - json5 "^2.1.1" - lazy-universal-dotenv "^3.0.1" - micromatch "^4.0.2" - node-fetch "^2.6.0" - open "^7.0.0" - pnp-webpack-plugin "1.5.0" - postcss-flexbugs-fixes "^4.1.0" - postcss-loader "^3.0.0" - pretty-hrtime "^1.0.3" - qs "^6.6.0" - raw-loader "^3.1.0" - react-dev-utils "^9.0.0" - regenerator-runtime "^0.13.3" - resolve "^1.11.0" - resolve-from "^5.0.0" - semver "^6.0.0" - serve-favicon "^2.5.0" - shelljs "^0.8.3" - style-loader "^1.0.0" - terser-webpack-plugin "^2.1.2" - ts-dedent "^1.1.0" - unfetch "^4.1.0" - url-loader "^2.0.1" - util-deprecate "^1.0.2" - webpack "^4.33.0" - webpack-dev-middleware "^3.7.0" - webpack-hot-middleware "^2.25.0" - webpack-virtual-modules "^0.2.0" - -"@storybook/core@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.0.22.tgz#3ea911f486bbf5918976f0101627057af58d2f34" - integrity sha512-VgzybAKw5Jd5HzpVukvKLj2ScZ8bzJAvhoFAab3zegNyk1bK+qUK8vYDWP5dzaINvW63zA/D5kyjfZP8T9EofQ== +"@storybook/core@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/core/-/core-6.0.28.tgz#82ca8ef2700971c5abceea3750fc2d1081034c9d" + integrity sha512-NIEeU4NXl6vK6NVIisR90QYWomTexXEmF9cFcr02DcxKwFTNixSfBuquDFt6o7OTLNgmUQ5r2y+fXlQ4vDTG4w== dependencies: "@babel/plugin-proposal-class-properties" "^7.8.3" "@babel/plugin-proposal-decorators" "^7.8.3" @@ -3207,20 +3754,20 @@ "@babel/preset-react" "^7.8.3" "@babel/preset-typescript" "^7.9.0" "@babel/register" "^7.10.5" - "@storybook/addons" "6.0.22" - "@storybook/api" "6.0.22" - "@storybook/channel-postmessage" "6.0.22" - "@storybook/channels" "6.0.22" - "@storybook/client-api" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/components" "6.0.22" - "@storybook/core-events" "6.0.22" + "@storybook/addons" "6.0.28" + "@storybook/api" "6.0.28" + "@storybook/channel-postmessage" "6.0.28" + "@storybook/channels" "6.0.28" + "@storybook/client-api" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/components" "6.0.28" + "@storybook/core-events" "6.0.28" "@storybook/csf" "0.0.1" - "@storybook/node-logger" "6.0.22" - "@storybook/router" "6.0.22" + "@storybook/node-logger" "6.0.28" + "@storybook/router" "6.0.28" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.0.22" - "@storybook/ui" "6.0.22" + "@storybook/theming" "6.0.28" + "@storybook/ui" "6.0.28" "@types/glob-base" "^0.3.0" "@types/micromatch" "^4.0.1" "@types/node-fetch" "^2.5.4" @@ -3291,22 +3838,10 @@ dependencies: lodash "^4.17.15" -"@storybook/node-logger@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-5.3.21.tgz#f11d45042bd57dc69e9037d8f374d9fd0aad8071" - integrity sha512-8xibncy873JXePCK5MC0qem1MKtWI1Lc4hv6rwURSwYpZtkO7yElay3XAFGUSfz8qFJkoDBmMTxBR3fp4Dln7g== - dependencies: - "@types/npmlog" "^4.1.2" - chalk "^3.0.0" - core-js "^3.0.1" - npmlog "^4.1.2" - pretty-hrtime "^1.0.3" - regenerator-runtime "^0.13.3" - -"@storybook/node-logger@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.0.22.tgz#a95bb605309baf6bd768fa57dff77760f41c7f10" - integrity sha512-H5j0zjMmg6o+wQgiY1GWlgz6cciHJN5vw7/B/hUksMHOwc+30nrGa89dDouj2ze1vJfiY3AaOMrsgtuMYFXaHQ== +"@storybook/node-logger@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/node-logger/-/node-logger-6.0.28.tgz#b1e51d00c8acaa44b91e4cef33ab3275cad93b14" + integrity sha512-foGRKU9n6tRcN+Os2XJvsWMQQoUubUjuX6/pIyh+rGVOfOxbK56logE/UDOAsdibGMiof9MOldNeGmYS51vPCg== dependencies: "@types/npmlog" "^4.1.2" chalk "^4.0.0" @@ -3314,32 +3849,31 @@ npmlog "^4.1.2" pretty-hrtime "^1.0.3" -"@storybook/react@^5.2.3": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/react/-/react-5.3.21.tgz#f7f364d3d3adc70746a12cf8b6614952f41d4bd0" - integrity sha512-A50F8dDZxyLGa/dE3q0Zxt7T5r9UbomoSclqw7oJTO9GI76QOu7GfsoWrEL2gTEDAmqXreLVQqGuTLQhBz0rlA== +"@storybook/react@^6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/react/-/react-6.0.28.tgz#b7b482342b995645770906833799a0b1e155f9b4" + integrity sha512-a0X5htjhqlBYQbuQlllTHD8VBeiEUs0UMU3lnJv79B2B2BiIaXK0w5ptyQyiOznP5OzSLnjZEQwmiefepFpr3g== dependencies: - "@babel/plugin-transform-react-constant-elements" "^7.6.3" "@babel/preset-flow" "^7.0.0" "@babel/preset-react" "^7.0.0" - "@storybook/addons" "5.3.21" - "@storybook/core" "5.3.21" - "@storybook/node-logger" "5.3.21" - "@svgr/webpack" "^4.0.3" - "@types/webpack-env" "^1.15.0" + "@storybook/addons" "6.0.28" + "@storybook/core" "6.0.28" + "@storybook/node-logger" "6.0.28" + "@storybook/semver" "^7.3.2" + "@svgr/webpack" "^5.4.0" + "@types/webpack-env" "^1.15.2" babel-plugin-add-react-displayname "^0.0.5" babel-plugin-named-asset-import "^0.3.1" - babel-plugin-react-docgen "^4.0.0" + babel-plugin-react-docgen "^4.2.1" core-js "^3.0.1" global "^4.3.2" lodash "^4.17.15" - mini-css-extract-plugin "^0.7.0" prop-types "^15.7.2" - react-dev-utils "^9.0.0" + react-dev-utils "^10.0.0" + react-docgen-typescript-plugin "^0.5.2" regenerator-runtime "^0.13.3" - semver "^6.0.0" - ts-dedent "^1.1.0" - webpack "^4.33.0" + ts-dedent "^1.1.1" + webpack "^4.43.0" "@storybook/router@5.3.21": version "5.3.21" @@ -3356,10 +3890,10 @@ qs "^6.6.0" util-deprecate "^1.0.2" -"@storybook/router@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.0.22.tgz#90dc8eb5c766b85b555cc103ac6197d7c11700be" - integrity sha512-Gu3PmWXaDDhDqTY/S8/ag2OCdTb0S+aD/QkXvQzSht5gt5d8M2tQxBlhXDVFNhYGRz7zQtjRmTxqT/3YX9tjrg== +"@storybook/router@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/router/-/router-6.0.28.tgz#e95d8c3bcc18688c17a5f582b2612014400fed58" + integrity sha512-omp2LRq3LYc7A89PM0WpJnioedzCme3jJbJXRR7tFva4N+aP6JGaFTJZZdk2NHXHxerGfWG0Cs9G6HNAw9nN1A== dependencies: "@reach/router" "^1.3.3" "@types/reach__router" "^1.3.5" @@ -3394,15 +3928,15 @@ resolve-from "^5.0.0" ts-dedent "^1.1.0" -"@storybook/theming@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.0.22.tgz#c50877d19c9807cc35655d78f8b5c866b861b853" - integrity sha512-aR11z70vq0G+F61PIJHW1Kt1lmA2vYxGWF1TL6rsECXNt4fN+X9ig082G0Uhag0mV/FJZdKhhpv360paJFYF2g== +"@storybook/theming@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/theming/-/theming-6.0.28.tgz#8403333c68c44729eb677ef7c934aaa06e269f33" + integrity sha512-dcZXDkO1LYcnWUejAzvjl3OPBnAB1m2+fzmRx0dBrgm2O+fcNXTadQ6SXZYKaSz37lS+aGtYG7I9nurwhXMMXA== dependencies: "@emotion/core" "^10.0.20" "@emotion/is-prop-valid" "^0.8.6" "@emotion/styled" "^10.0.17" - "@storybook/client-logger" "6.0.22" + "@storybook/client-logger" "6.0.28" core-js "^3.0.1" deep-object-diff "^1.1.0" emotion-theming "^10.0.19" @@ -3412,61 +3946,21 @@ resolve-from "^5.0.0" ts-dedent "^1.1.1" -"@storybook/ui@5.3.21": - version "5.3.21" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-5.3.21.tgz#b42568e03353b47aaab1b6449311f38858585f81" - integrity sha512-OUf8JYY9LN+XfzLSZE6KtboITGDL6C8Z0W9QOXM5LJwFLv4PkANK/f9qsB5vVHFm7vhoO96butFzs6SjTKhxkw== +"@storybook/ui@6.0.28": + version "6.0.28" + resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.0.28.tgz#9b07d11c648b26d9fe20db0436bfbb65634a1930" + integrity sha512-LGYW+hGiRu+5QRrZXamEt7aoHWQMfYWAaSO8hJldD5lfIXUXcoWUm0Mx7CRpUhw22LzmidrwZijyxlTnuTRZyw== dependencies: "@emotion/core" "^10.0.20" - "@storybook/addons" "5.3.21" - "@storybook/api" "5.3.21" - "@storybook/channels" "5.3.21" - "@storybook/client-logger" "5.3.21" - "@storybook/components" "5.3.21" - "@storybook/core-events" "5.3.21" - "@storybook/router" "5.3.21" - "@storybook/theming" "5.3.21" - copy-to-clipboard "^3.0.8" - core-js "^3.0.1" - core-js-pure "^3.0.1" - emotion-theming "^10.0.19" - fast-deep-equal "^2.0.1" - fuse.js "^3.4.6" - global "^4.3.2" - lodash "^4.17.15" - markdown-to-jsx "^6.11.4" - memoizerific "^1.11.3" - polished "^3.3.1" - prop-types "^15.7.2" - qs "^6.6.0" - react "^16.8.3" - react-dom "^16.8.3" - react-draggable "^4.0.3" - react-helmet-async "^1.0.2" - react-hotkeys "2.0.0" - react-sizeme "^2.6.7" - regenerator-runtime "^0.13.2" - resolve-from "^5.0.0" - semver "^6.0.0" - store2 "^2.7.1" - telejson "^3.2.0" - util-deprecate "^1.0.2" - -"@storybook/ui@6.0.22": - version "6.0.22" - resolved "https://registry.yarnpkg.com/@storybook/ui/-/ui-6.0.22.tgz#f8aa93c66e66e99010d98a7344adf1c7a9839224" - integrity sha512-iueyQ3EnLHhbV6xWQWMoN1aenEh3jLAXFmabxrf1s/l0JKn0u6qr7BHZcu3VZJ4EJCEsh6wDFNWjaUbTpfDU5g== - dependencies: - "@emotion/core" "^10.0.20" - "@storybook/addons" "6.0.22" - "@storybook/api" "6.0.22" - "@storybook/channels" "6.0.22" - "@storybook/client-logger" "6.0.22" - "@storybook/components" "6.0.22" - "@storybook/core-events" "6.0.22" - "@storybook/router" "6.0.22" + "@storybook/addons" "6.0.28" + "@storybook/api" "6.0.28" + "@storybook/channels" "6.0.28" + "@storybook/client-logger" "6.0.28" + "@storybook/components" "6.0.28" + "@storybook/core-events" "6.0.28" + "@storybook/router" "6.0.28" "@storybook/semver" "^7.3.2" - "@storybook/theming" "6.0.22" + "@storybook/theming" "6.0.28" "@types/markdown-to-jsx" "^6.11.0" copy-to-clipboard "^3.0.8" core-js "^3.0.1" @@ -3489,108 +3983,108 @@ resolve-from "^5.0.0" store2 "^2.7.1" -"@svgr/babel-plugin-add-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-4.2.0.tgz#dadcb6218503532d6884b210e7f3c502caaa44b1" - integrity sha512-j7KnilGyZzYr/jhcrSYS3FGWMZVaqyCG0vzMCwzvei0coIkczuYMcniK07nI0aHJINciujjH11T72ICW5eL5Ig== +"@svgr/babel-plugin-add-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-add-jsx-attribute/-/babel-plugin-add-jsx-attribute-5.4.0.tgz#81ef61947bb268eb9d50523446f9c638fb355906" + integrity sha512-ZFf2gs/8/6B8PnSofI0inYXr2SDNTDScPXhN7k5EqD4aZ3gi6u+rbmZHVB8IM3wDyx8ntKACZbtXSm7oZGRqVg== -"@svgr/babel-plugin-remove-jsx-attribute@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-4.2.0.tgz#297550b9a8c0c7337bea12bdfc8a80bb66f85abc" - integrity sha512-3XHLtJ+HbRCH4n28S7y/yZoEQnRpl0tvTZQsHqvaeNXPra+6vE5tbRliH3ox1yZYPCxrlqaJT/Mg+75GpDKlvQ== +"@svgr/babel-plugin-remove-jsx-attribute@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-attribute/-/babel-plugin-remove-jsx-attribute-5.4.0.tgz#6b2c770c95c874654fd5e1d5ef475b78a0a962ef" + integrity sha512-yaS4o2PgUtwLFGTKbsiAy6D0o3ugcUhWK0Z45umJ66EPWunAz9fuFw2gJuje6wqQvQWOTJvIahUwndOXb7QCPg== -"@svgr/babel-plugin-remove-jsx-empty-expression@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-4.2.0.tgz#c196302f3e68eab6a05e98af9ca8570bc13131c7" - integrity sha512-yTr2iLdf6oEuUE9MsRdvt0NmdpMBAkgK8Bjhl6epb+eQWk6abBaX3d65UZ3E3FWaOwePyUgNyNCMVG61gGCQ7w== +"@svgr/babel-plugin-remove-jsx-empty-expression@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-remove-jsx-empty-expression/-/babel-plugin-remove-jsx-empty-expression-5.0.1.tgz#25621a8915ed7ad70da6cea3d0a6dbc2ea933efd" + integrity sha512-LA72+88A11ND/yFIMzyuLRSMJ+tRKeYKeQ+mR3DcAZ5I4h5CPWN9AHyUzJbWSYp/u2u0xhmgOe0+E41+GjEueA== -"@svgr/babel-plugin-replace-jsx-attribute-value@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-4.2.0.tgz#310ec0775de808a6a2e4fd4268c245fd734c1165" - integrity sha512-U9m870Kqm0ko8beHawRXLGLvSi/ZMrl89gJ5BNcT452fAjtF2p4uRzXkdzvGJJJYBgx7BmqlDjBN/eCp5AAX2w== +"@svgr/babel-plugin-replace-jsx-attribute-value@^5.0.1": + version "5.0.1" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-replace-jsx-attribute-value/-/babel-plugin-replace-jsx-attribute-value-5.0.1.tgz#0b221fc57f9fcd10e91fe219e2cd0dd03145a897" + integrity sha512-PoiE6ZD2Eiy5mK+fjHqwGOS+IXX0wq/YDtNyIgOrc6ejFnxN4b13pRpiIPbtPwHEc+NT2KCjteAcq33/F1Y9KQ== -"@svgr/babel-plugin-svg-dynamic-title@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-4.3.3.tgz#2cdedd747e5b1b29ed4c241e46256aac8110dd93" - integrity sha512-w3Be6xUNdwgParsvxkkeZb545VhXEwjGMwExMVBIdPQJeyMQHqm9Msnb2a1teHBqUYL66qtwfhNkbj1iarCG7w== +"@svgr/babel-plugin-svg-dynamic-title@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-dynamic-title/-/babel-plugin-svg-dynamic-title-5.4.0.tgz#139b546dd0c3186b6e5db4fefc26cb0baea729d7" + integrity sha512-zSOZH8PdZOpuG1ZVx/cLVePB2ibo3WPpqo7gFIjLV9a0QsuQAzJiwwqmuEdTaW2pegyBE17Uu15mOgOcgabQZg== -"@svgr/babel-plugin-svg-em-dimensions@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-4.2.0.tgz#9a94791c9a288108d20a9d2cc64cac820f141391" - integrity sha512-C0Uy+BHolCHGOZ8Dnr1zXy/KgpBOkEUYY9kI/HseHVPeMbluaX3CijJr7D4C5uR8zrc1T64nnq/k63ydQuGt4w== +"@svgr/babel-plugin-svg-em-dimensions@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-svg-em-dimensions/-/babel-plugin-svg-em-dimensions-5.4.0.tgz#6543f69526632a133ce5cabab965deeaea2234a0" + integrity sha512-cPzDbDA5oT/sPXDCUYoVXEmm3VIoAWAPT6mSPTJNbQaBNUuEKVKyGH93oDY4e42PYHRW67N5alJx/eEol20abw== -"@svgr/babel-plugin-transform-react-native-svg@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-4.2.0.tgz#151487322843359a1ca86b21a3815fd21a88b717" - integrity sha512-7YvynOpZDpCOUoIVlaaOUU87J4Z6RdD6spYN4eUb5tfPoKGSF9OG2NuhgYnq4jSkAxcpMaXWPf1cePkzmqTPNw== +"@svgr/babel-plugin-transform-react-native-svg@^5.4.0": + version "5.4.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-react-native-svg/-/babel-plugin-transform-react-native-svg-5.4.0.tgz#00bf9a7a73f1cad3948cdab1f8dfb774750f8c80" + integrity sha512-3eYP/SaopZ41GHwXma7Rmxcv9uRslRDTY1estspeB1w1ueZWd/tPlMfEOoccYpEMZU3jD4OU7YitnXcF5hLW2Q== -"@svgr/babel-plugin-transform-svg-component@^4.2.0": - version "4.2.0" - resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-4.2.0.tgz#5f1e2f886b2c85c67e76da42f0f6be1b1767b697" - integrity sha512-hYfYuZhQPCBVotABsXKSCfel2slf/yvJY8heTVX1PCTaq/IgASq1IyxPPKJ0chWREEKewIU/JMSsIGBtK1KKxw== +"@svgr/babel-plugin-transform-svg-component@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-plugin-transform-svg-component/-/babel-plugin-transform-svg-component-5.5.0.tgz#583a5e2a193e214da2f3afeb0b9e8d3250126b4a" + integrity sha512-q4jSH1UUvbrsOtlo/tKcgSeiCHRSBdXoIoqX1pgcKK/aU3JD27wmMKwGtpB8qRYUYoyXvfGxUVKchLuR5pB3rQ== -"@svgr/babel-preset@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-4.3.3.tgz#a75d8c2f202ac0e5774e6bfc165d028b39a1316c" - integrity sha512-6PG80tdz4eAlYUN3g5GZiUjg2FMcp+Wn6rtnz5WJG9ITGEF1pmFdzq02597Hn0OmnQuCVaBYQE1OVFAnwOl+0A== +"@svgr/babel-preset@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/babel-preset/-/babel-preset-5.5.0.tgz#8af54f3e0a8add7b1e2b0fcd5a882c55393df327" + integrity sha512-4FiXBjvQ+z2j7yASeGPEi8VD/5rrGQk4Xrq3EdJmoZgz/tpqChpo5hgXDvmEauwtvOc52q8ghhZK4Oy7qph4ig== dependencies: - "@svgr/babel-plugin-add-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-attribute" "^4.2.0" - "@svgr/babel-plugin-remove-jsx-empty-expression" "^4.2.0" - "@svgr/babel-plugin-replace-jsx-attribute-value" "^4.2.0" - "@svgr/babel-plugin-svg-dynamic-title" "^4.3.3" - "@svgr/babel-plugin-svg-em-dimensions" "^4.2.0" - "@svgr/babel-plugin-transform-react-native-svg" "^4.2.0" - "@svgr/babel-plugin-transform-svg-component" "^4.2.0" + "@svgr/babel-plugin-add-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-attribute" "^5.4.0" + "@svgr/babel-plugin-remove-jsx-empty-expression" "^5.0.1" + "@svgr/babel-plugin-replace-jsx-attribute-value" "^5.0.1" + "@svgr/babel-plugin-svg-dynamic-title" "^5.4.0" + "@svgr/babel-plugin-svg-em-dimensions" "^5.4.0" + "@svgr/babel-plugin-transform-react-native-svg" "^5.4.0" + "@svgr/babel-plugin-transform-svg-component" "^5.5.0" -"@svgr/core@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/core/-/core-4.3.3.tgz#b37b89d5b757dc66e8c74156d00c368338d24293" - integrity sha512-qNuGF1QON1626UCaZamWt5yedpgOytvLj5BQZe2j1k1B8DUG4OyugZyfEwBeXozCUwhLEpsrgPrE+eCu4fY17w== +"@svgr/core@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/core/-/core-5.5.0.tgz#82e826b8715d71083120fe8f2492ec7d7874a579" + integrity sha512-q52VOcsJPvV3jO1wkPtzTuKlvX7Y3xIcWRpCMtBF3MrteZJtBfQw/+u0B1BHy5ColpQc1/YVTrPEtSYIMNZlrQ== dependencies: - "@svgr/plugin-jsx" "^4.3.3" - camelcase "^5.3.1" - cosmiconfig "^5.2.1" + "@svgr/plugin-jsx" "^5.5.0" + camelcase "^6.2.0" + cosmiconfig "^7.0.0" -"@svgr/hast-util-to-babel-ast@^4.3.2": - version "4.3.2" - resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-4.3.2.tgz#1d5a082f7b929ef8f1f578950238f630e14532b8" - integrity sha512-JioXclZGhFIDL3ddn4Kiq8qEqYM2PyDKV0aYno8+IXTLuYt6TOgHUbUAAFvqtb0Xn37NwP0BTHglejFoYr8RZg== +"@svgr/hast-util-to-babel-ast@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/hast-util-to-babel-ast/-/hast-util-to-babel-ast-5.5.0.tgz#5ee52a9c2533f73e63f8f22b779f93cd432a5461" + integrity sha512-cAaR/CAiZRB8GP32N+1jocovUtvlj0+e65TB50/6Lcime+EA49m/8l+P2ko+XPJ4dw3xaPS3jOL4F2X4KWxoeQ== dependencies: - "@babel/types" "^7.4.4" + "@babel/types" "^7.12.6" -"@svgr/plugin-jsx@^4.3.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-4.3.3.tgz#e2ba913dbdfbe85252a34db101abc7ebd50992fa" - integrity sha512-cLOCSpNWQnDB1/v+SUENHH7a0XY09bfuMKdq9+gYvtuwzC2rU4I0wKGFEp1i24holdQdwodCtDQdFtJiTCWc+w== +"@svgr/plugin-jsx@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-jsx/-/plugin-jsx-5.5.0.tgz#1aa8cd798a1db7173ac043466d7b52236b369000" + integrity sha512-V/wVh33j12hGh05IDg8GpIUXbjAPnTdPTKuP4VNLggnwaHMPNQNae2pRnyTAILWCQdz5GyMqtO488g7CKM8CBA== dependencies: - "@babel/core" "^7.4.5" - "@svgr/babel-preset" "^4.3.3" - "@svgr/hast-util-to-babel-ast" "^4.3.2" - svg-parser "^2.0.0" + "@babel/core" "^7.12.3" + "@svgr/babel-preset" "^5.5.0" + "@svgr/hast-util-to-babel-ast" "^5.5.0" + svg-parser "^2.0.2" -"@svgr/plugin-svgo@^4.3.1": - version "4.3.1" - resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-4.3.1.tgz#daac0a3d872e3f55935c6588dd370336865e9e32" - integrity sha512-PrMtEDUWjX3Ea65JsVCwTIXuSqa3CG9px+DluF1/eo9mlDrgrtFE7NE/DjdhjJgSM9wenlVBzkzneSIUgfUI/w== +"@svgr/plugin-svgo@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/plugin-svgo/-/plugin-svgo-5.5.0.tgz#02da55d85320549324e201c7b2e53bf431fcc246" + integrity sha512-r5swKk46GuQl4RrVejVwpeeJaydoxkdwkM1mBKOgJLBUJPGaLci6ylg/IjhrRsREKDkr4kbMWdgOtbXEh0fyLQ== dependencies: - cosmiconfig "^5.2.1" - merge-deep "^3.0.2" + cosmiconfig "^7.0.0" + deepmerge "^4.2.2" svgo "^1.2.2" -"@svgr/webpack@^4.0.3": - version "4.3.3" - resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-4.3.3.tgz#13cc2423bf3dff2d494f16b17eb7eacb86895017" - integrity sha512-bjnWolZ6KVsHhgyCoYRFmbd26p8XVbulCzSG53BDQqAr+JOAderYK7CuYrB3bDjHJuF6LJ7Wrr42+goLRV9qIg== +"@svgr/webpack@^5.4.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@svgr/webpack/-/webpack-5.5.0.tgz#aae858ee579f5fa8ce6c3166ef56c6a1b381b640" + integrity sha512-DOBOK255wfQxguUta2INKkzPj6AIS6iafZYiYmHn6W3pHlycSRRlvWKCfLDG10fXfLWqE3DJHgRUOyJYmARa7g== dependencies: - "@babel/core" "^7.4.5" - "@babel/plugin-transform-react-constant-elements" "^7.0.0" - "@babel/preset-env" "^7.4.5" - "@babel/preset-react" "^7.0.0" - "@svgr/core" "^4.3.3" - "@svgr/plugin-jsx" "^4.3.3" - "@svgr/plugin-svgo" "^4.3.1" - loader-utils "^1.2.3" + "@babel/core" "^7.12.3" + "@babel/plugin-transform-react-constant-elements" "^7.12.1" + "@babel/preset-env" "^7.12.1" + "@babel/preset-react" "^7.12.5" + "@svgr/core" "^5.5.0" + "@svgr/plugin-jsx" "^5.5.0" + "@svgr/plugin-svgo" "^5.5.0" + loader-utils "^2.0.0" "@types/anymatch@*": version "1.3.1" @@ -3791,7 +4285,7 @@ jest-diff "^25.2.1" pretty-format "^25.2.1" -"@types/jest@^24.0.16", "@types/jest@^24.0.19": +"@types/jest@^24.0.19": version "24.9.1" resolved "https://registry.yarnpkg.com/@types/jest/-/jest-24.9.1.tgz#02baf9573c78f1b9974a5f36778b366aa77bd534" integrity sha512-Fb38HkXSVA4L8fGKEZ6le5bB8r6MRWlOCZbVuWZcmOMSCd2wCYOwN1ibj8daIoV9naq7aaOZjrLCoCMptKU/4Q== @@ -4071,13 +4565,6 @@ resolved "https://registry.yarnpkg.com/@types/stack-utils/-/stack-utils-2.0.0.tgz#7036640b4e21cc2f259ae826ce843d277dad8cff" integrity sha512-RJJrrySY7A8havqpGObOB4W92QXKJo63/jFLLgpvOtsGUqbQZ9Sbgl35KMm1DjC6j7AvmmU2bIno+3IyEaemaw== -"@types/storybook__addon-storyshots@^5.1.1": - version "5.3.1" - resolved "https://registry.yarnpkg.com/@types/storybook__addon-storyshots/-/storybook__addon-storyshots-5.3.1.tgz#3bf921bcf34265d239c7417e4bbd3d66aa3d41d3" - integrity sha512-gTH1kziacyF86FieOMV86OhTu6zhV9a3gzF1Pqxm1k3/SKIScML7YgBQS0xwSV0riAlcRkXZNqjSVdci5TiUdA== - dependencies: - "@storybook/addon-storyshots" "*" - "@types/styled-components@^5.1.0": version "5.1.3" resolved "https://registry.yarnpkg.com/@types/styled-components/-/styled-components-5.1.3.tgz#6fab3d9c8f7d9a15cbb89d379d850c985002f363" @@ -4115,7 +4602,7 @@ resolved "https://registry.yarnpkg.com/@types/unist/-/unist-2.0.3.tgz#9c088679876f374eb5983f150d4787aa6fb32d7e" integrity sha512-FvUupuM3rlRsRtCN+fDudtmytGO6iHJuuRKS1Ss0pG5z8oX0diNEw94UEL7hgDbpN94rgaK5R7sWm6RrSkZuAQ== -"@types/webpack-env@^1.15.0", "@types/webpack-env@^1.15.2": +"@types/webpack-env@^1.15.2": version "1.15.3" resolved "https://registry.yarnpkg.com/@types/webpack-env/-/webpack-env-1.15.3.tgz#fb602cd4c2f0b7c0fb857e922075fdf677d25d84" integrity sha512-5oiXqR7kwDGZ6+gmzIO2lTC+QsriNuQXZDWNYRV3l2XRN/zmPgnC21DLSx2D05zvD8vnXW6qUg7JnXZ4I6qLVQ== @@ -4348,6 +4835,18 @@ "@webassemblyjs/wast-parser" "1.9.0" "@xtuc/long" "4.2.2" +"@webpack-contrib/schema-utils@^1.0.0-beta.0": + version "1.0.0-beta.0" + resolved "https://registry.yarnpkg.com/@webpack-contrib/schema-utils/-/schema-utils-1.0.0-beta.0.tgz#bf9638c9464d177b48209e84209e23bee2eb4f65" + integrity sha512-LonryJP+FxQQHsjGBi6W786TQB1Oym+agTpY0c+Kj8alnIw+DLUJb6SI8Y1GHGhLCH1yPRrucjObUmxNICQ1pg== + dependencies: + ajv "^6.1.0" + ajv-keywords "^3.1.0" + chalk "^2.3.2" + strip-ansi "^4.0.0" + text-table "^0.2.0" + webpack-log "^1.1.2" + "@xtuc/ieee754@^1.2.0": version "1.2.0" resolved "https://registry.yarnpkg.com/@xtuc/ieee754/-/ieee754-1.2.0.tgz#eef014a3145ae477a1cbc00cd1e552336dceb790" @@ -4847,11 +5346,6 @@ ast-types-flow@^0.0.7: resolved "https://registry.yarnpkg.com/ast-types-flow/-/ast-types-flow-0.0.7.tgz#f70b735c6bca1a5c9c22d982c3e39e7feba3bdad" integrity sha1-9wtzXGvKGlycItmCw+Oef+ujva0= -ast-types@0.11.3: - version "0.11.3" - resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.11.3.tgz#c20757fe72ee71278ea0ff3d87e5c2ca30d9edf8" - integrity sha512-XA5o5dsNw8MhyW0Q7MWXJWc4oOzZKbdsEJq45h7c8q/d9DwWZ5F2ugUc1PuMLPGsUnphCt/cNDHu8JeBbxf1qA== - ast-types@^0.13.2: version "0.13.4" resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.13.4.tgz#ee0d77b343263965ecc3fb62da16e7222b2b6782" @@ -4859,6 +5353,13 @@ ast-types@^0.13.2: dependencies: tslib "^2.0.1" +ast-types@^0.14.2: + version "0.14.2" + resolved "https://registry.yarnpkg.com/ast-types/-/ast-types-0.14.2.tgz#600b882df8583e3cd4f2df5fa20fa83759d4bdfd" + integrity sha512-O0yuUDnZeQDL+ncNGlJ78BiO4jnYI3bvMsD5prT0/nsgijG/LpNBIr63gTjVTNsiGkgQhiyCShTgxt8oXOrklA== + dependencies: + tslib "^2.0.1" + astral-regex@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-1.0.0.tgz#6c8c3fb827dd43ee3918f27b82782ab7658a6fd9" @@ -5156,7 +5657,7 @@ babel-plugin-jest-hoist@^26.6.2: "@types/babel__core" "^7.0.0" "@types/babel__traverse" "^7.0.6" -babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.7.0, babel-plugin-macros@^2.8.0: +babel-plugin-macros@^2.0.0, babel-plugin-macros@^2.8.0: version "2.8.0" resolved "https://registry.yarnpkg.com/babel-plugin-macros/-/babel-plugin-macros-2.8.0.tgz#0f958a7cc6556b1e65344465d99111a1e5e10138" integrity sha512-SEP5kJpfGYqYKpBrj5XU3ahw5p5GOHJ0U5ssOSQ/WBVdwkD2Dzlce95exQTs3jOVWPPKLBN2rlEWkCK7dSmLvg== @@ -5246,14 +5747,14 @@ babel-plugin-named-asset-import@^0.3.1: resolved "https://registry.yarnpkg.com/babel-plugin-named-asset-import/-/babel-plugin-named-asset-import-0.3.6.tgz#c9750a1b38d85112c9e166bf3ef7c5dbc605f4be" integrity sha512-1aGDUfL1qOOIoqk9QKGIo2lANk+C7ko/fqH0uIyC71x3PEGz0uVP8ISgfEsFuG+FKmjHTvFK/nNM8dowpmUxLA== -babel-plugin-react-docgen@^4.0.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.0.tgz#4f425692f0ca06c73a1462274d370a3ac0637b46" - integrity sha512-B3tjZwKskcia9TsqkND+9OTjl/F5A5OBvRJ6Ktg34CONoxm+kB3CJ52wk5TjbszX9gqCPcAuc0GgkhT0CLuT/Q== +babel-plugin-react-docgen@^4.2.1: + version "4.2.1" + resolved "https://registry.yarnpkg.com/babel-plugin-react-docgen/-/babel-plugin-react-docgen-4.2.1.tgz#7cc8e2f94e8dc057a06e953162f0810e4e72257b" + integrity sha512-UQ0NmGHj/HAqi5Bew8WvNfCk8wSsmdgNd8ZdMjBCICtyCJCq9LiqgqvjCYe570/Wg7AQArSq1VQ60Dd/CHN7mQ== dependencies: + ast-types "^0.14.2" lodash "^4.17.15" react-docgen "^5.0.0" - recast "^0.14.7" babel-plugin-reflow@^0.2.7: version "0.2.7" @@ -5723,15 +6224,6 @@ browserslist@4.10.0: node-releases "^1.1.52" pkg-up "^3.1.0" -browserslist@4.7.0: - version "4.7.0" - resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.7.0.tgz#9ee89225ffc07db03409f2fee524dc8227458a17" - integrity sha512-9rGNDtnj+HaahxiVV38Gn8n8Lr8REKsel68v1sPFfIGEK6uSXTY3h9acgiT1dZVtOOUtifo/Dn8daDQ5dUgVsA== - dependencies: - caniuse-lite "^1.0.30000989" - electron-to-chromium "^1.3.247" - node-releases "^1.1.29" - browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: version "4.14.5" resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.5.tgz#1c751461a102ddc60e40993639b709be7f2c4015" @@ -5742,6 +6234,17 @@ browserslist@^4.0.0, browserslist@^4.12.0, browserslist@^4.8.5: escalade "^3.1.0" node-releases "^1.1.61" +browserslist@^4.14.5: + version "4.14.7" + resolved "https://registry.yarnpkg.com/browserslist/-/browserslist-4.14.7.tgz#c071c1b3622c1c2e790799a37bb09473a4351cb6" + integrity sha512-BSVRLCeG3Xt/j/1cCGj1019Wbty0H+Yvu2AOuZSuoaUWn3RatbL33Cxk+Q4jRMRAbOm0p7SLravLjpnT6s0vzQ== + dependencies: + caniuse-lite "^1.0.30001157" + colorette "^1.2.1" + electron-to-chromium "^1.3.591" + escalade "^3.1.1" + node-releases "^1.1.66" + bser@2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/bser/-/bser-2.1.1.tgz#e6787da20ece9d07998533cfd9de6f5c38f4bc05" @@ -5849,30 +6352,6 @@ cacache@^12.0.0, cacache@^12.0.2, cacache@^12.0.3: unique-filename "^1.1.1" y18n "^4.0.0" -cacache@^13.0.1: - version "13.0.1" - resolved "https://registry.yarnpkg.com/cacache/-/cacache-13.0.1.tgz#a8000c21697089082f85287a1aec6e382024a71c" - integrity sha512-5ZvAxd05HDDU+y9BVvcqYu2LLXmPnQ0hW62h32g4xBTgL/MppR4/04NHfj/ycM2y6lmTnbw6HVi+1eN0Psba6w== - dependencies: - chownr "^1.1.2" - figgy-pudding "^3.5.1" - fs-minipass "^2.0.0" - glob "^7.1.4" - graceful-fs "^4.2.2" - infer-owner "^1.0.4" - lru-cache "^5.1.1" - minipass "^3.0.0" - minipass-collect "^1.0.2" - minipass-flush "^1.0.5" - minipass-pipeline "^1.2.2" - mkdirp "^0.5.1" - move-concurrently "^1.0.1" - p-map "^3.0.0" - promise-inflight "^1.0.1" - rimraf "^2.7.1" - ssri "^7.0.0" - unique-filename "^1.1.1" - cacache@^15.0.5: version "15.0.5" resolved "https://registry.yarnpkg.com/cacache/-/cacache-15.0.5.tgz#69162833da29170d6732334643c60e005f5f17d0" @@ -5999,6 +6478,11 @@ camelcase@^6.0.0: resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.0.0.tgz#5259f7c30e35e278f1bdc2a4d91230b37cad981e" integrity sha512-8KMDF1Vz2gzOq54ONPJS65IvTUaB1cHJ2DMM7MbPmLZljDH1qpzzLsWdiN9pHh6qvkRVDTi/07+eNGch/oLU4w== +camelcase@^6.2.0: + version "6.2.0" + resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-6.2.0.tgz#924af881c9d525ac9d87f40d964e5cea982a1809" + integrity sha512-c7wVvbw3f37nuobQNtgsgG9POC9qMbNuMQmTCqZv23b6MIz0fcYpBiOlv9gEN/hdLdnZTDQhg6e9Dq5M1vKvfg== + camelize@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/camelize/-/camelize-1.0.0.tgz#164a5483e630fa4321e5af07020e531831b2609b" @@ -6019,11 +6503,16 @@ caniuse-api@^3.0.0: lodash.memoize "^4.1.2" lodash.uniq "^4.5.0" -caniuse-lite@^1.0.0, caniuse-lite@^1.0.30000989, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: +caniuse-lite@^1.0.0, caniuse-lite@^1.0.30001035, caniuse-lite@^1.0.30001109, caniuse-lite@^1.0.30001135: version "1.0.30001141" resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001141.tgz#214a196d81aa938b268fb0cb6d8fab23fdf14378" integrity sha512-EHfInJHoQTmlMdVZrEc5gmwPc0zyN/hVufmGHPbVNQwlk7tJfCmQ2ysRZMY2MeleBivALUTyyxXnQjK18XrVpA== +caniuse-lite@^1.0.30001157: + version "1.0.30001159" + resolved "https://registry.yarnpkg.com/caniuse-lite/-/caniuse-lite-1.0.30001159.tgz#bebde28f893fa9594dadcaa7d6b8e2aa0299df20" + integrity sha512-w9Ph56jOsS8RL20K9cLND3u/+5WASWdhC/PPrf+V3/HsM3uHOavWOR1Xzakbv4Puo/srmPHudkmCRWM7Aq+/UA== + capture-exit@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/capture-exit/-/capture-exit-2.0.0.tgz#fb953bfaebeb781f62898239dabb426d08a509a4" @@ -6041,7 +6530,7 @@ caseless@~0.12.0: resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= -chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.3.1, chalk@^2.4.1, chalk@^2.4.2: +chalk@2.4.2, chalk@^2.0.0, chalk@^2.0.1, chalk@^2.1.0, chalk@^2.3.1, chalk@^2.3.2, chalk@^2.4.1, chalk@^2.4.2: version "2.4.2" resolved "https://registry.yarnpkg.com/chalk/-/chalk-2.4.2.tgz#cd42541677a54333cf541a49108c1432b44c9424" integrity sha512-Mti+f9lpJNcwF4tWV8/OrTTtF1gZi+f8FqlyAdouralcFWFQWF2+NgCHShjkCb+IFBLq9buZwE1xckQU4peSuQ== @@ -6134,7 +6623,7 @@ cheerio@^1.0.0-rc.3: optionalDependencies: fsevents "~2.1.2" -chokidar@^2.0.4, chokidar@^2.1.8: +chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" integrity sha512-ZmZUazfOzf0Nve7duiCKD23PFSCs4JPoYyccjUFF3aQkQadqBhfzhjkwBH2mNOG9cTBwhamM37EIsIkZw3nRgg== @@ -6241,16 +6730,6 @@ cli-cursor@^3.1.0: dependencies: restore-cursor "^3.1.0" -cli-table3@0.5.1, cli-table3@~0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" - integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== - dependencies: - object-assign "^4.1.0" - string-width "^2.1.1" - optionalDependencies: - colors "^1.1.2" - cli-table3@0.6.0: version "0.6.0" resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.0.tgz#b7b1bc65ca8e7b5cef9124e13dc2b21e2ce4faee" @@ -6261,6 +6740,16 @@ cli-table3@0.6.0: optionalDependencies: colors "^1.1.2" +cli-table3@~0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.5.1.tgz#0252372d94dfc40dbd8df06005f48f31f656f202" + integrity sha512-7Qg2Jrep1S/+Q3EceiZtQcDPWxhAvBw+ERf1162v4sikJrvojMHFqXt8QIVha8UlH9rgU0BeWPytZ9/TzYqlUw== + dependencies: + object-assign "^4.1.0" + string-width "^2.1.1" + optionalDependencies: + colors "^1.1.2" + cli-truncate@^0.2.1: version "0.2.1" resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-0.2.1.tgz#9f15cfbb0705005369216c626ac7d05ab90dd574" @@ -6314,17 +6803,6 @@ cliui@^6.0.0: strip-ansi "^6.0.0" wrap-ansi "^6.2.0" -clone-deep@^0.2.4: - version "0.2.4" - resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-0.2.4.tgz#4e73dd09e9fb971cc38670c5dced9c1896481cc6" - integrity sha1-TnPdCen7lxzDhnDF3O2cGJZIHMY= - dependencies: - for-own "^0.1.3" - is-plain-object "^2.0.1" - kind-of "^3.0.2" - lazy-cache "^1.0.3" - shallow-clone "^0.1.2" - clone-deep@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/clone-deep/-/clone-deep-4.0.1.tgz#c19fd9bdbbf85942b4fd979c84dcf7d5f07c2387" @@ -6456,7 +6934,7 @@ commander@^3.0.0: resolved "https://registry.yarnpkg.com/commander/-/commander-3.0.2.tgz#6837c3fb677ad9933d1cfba42dd14d5117d6b39e" integrity sha512-Gar0ASD4BDyKC4hl4DwHqDrmvjoxWKZigVnAbn5H1owvm4CxCPdb0HQDehwNYMJpla5+M2tPmPARzhtYuwpHow== -commander@^4.0.1, commander@^4.1.1: +commander@^4.1.1: version "4.1.1" resolved "https://registry.yarnpkg.com/commander/-/commander-4.1.1.tgz#9fd602bd936294e9e9ef46a3f4d6964044b18068" integrity sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA== @@ -6746,15 +7224,7 @@ core-util-is@1.0.2, core-util-is@~1.0.0: resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= -corejs-upgrade-webpack-plugin@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/corejs-upgrade-webpack-plugin/-/corejs-upgrade-webpack-plugin-2.2.0.tgz#503293bf1fdcb104918eb40d0294e4776ad6923a" - integrity sha512-J0QMp9GNoiw91Kj/dkIQFZeiCXgXoja/Wlht1SPybxerBWh4NCmb0pOgCv61lrlQZETwvVVfAFAA3IqoEO9aqQ== - dependencies: - resolve-from "^5.0.0" - webpack "^4.38.0" - -cosmiconfig@^5.0.0, cosmiconfig@^5.1.0, cosmiconfig@^5.2.1: +cosmiconfig@^5.0.0, cosmiconfig@^5.1.0: version "5.2.1" resolved "https://registry.yarnpkg.com/cosmiconfig/-/cosmiconfig-5.2.1.tgz#040f726809c591e77a17c0a3626ca45b4f168b1a" integrity sha512-H65gsXo1SKjf8zmrJ67eJk8aIRKV5ff2D4uKZIBZShbhGSpEmsQOPW/SKMKYhSTrqR7ufy6RP69rPogdaPh/kA== @@ -6838,7 +7308,16 @@ create-react-context@0.3.0, create-react-context@^0.3.0: gud "^1.0.0" warning "^4.0.3" -cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: +cross-spawn@7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" + integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== + dependencies: + path-key "^3.1.0" + shebang-command "^2.0.0" + which "^2.0.1" + +cross-spawn@^6.0.0, cross-spawn@^6.0.5: version "6.0.5" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-6.0.5.tgz#4a5ec7c64dfae22c3a14124dbacdee846d80cbc4" integrity sha512-eTVLrBSt7fjbDygz805pMnstIs2VTBNkRm0qxZd+M7A5XDdxVRWO5MxGBXZhjY4cqLYLdtrGqRf8mBPmzwSpWQ== @@ -6849,15 +7328,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.1.tgz#0ab56286e0f7c24e153d04cc2aa027e43a9a5d14" - integrity sha512-u7v4o84SwFpD32Z8IIcPZ6z1/ie24O6RU3RbtL5Y316l3KuHVPx9ItBgWQ6VlfAFnRnTtMUrsQ9MUUTuEZjogg== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - cross-spawn@^7.0.0, cross-spawn@^7.0.2: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" @@ -6902,7 +7372,7 @@ css-declaration-sorter@^4.0.1: postcss "^7.0.1" timsort "^0.3.0" -css-loader@^3.0.0, css-loader@^3.2.0, css-loader@^3.5.3: +css-loader@^3.2.0, css-loader@^3.5.3: version "3.6.0" resolved "https://registry.yarnpkg.com/css-loader/-/css-loader-3.6.0.tgz#2e4b2c7e6e2d27f8c8f28f61bffcd2e6c91ef645" integrity sha512-M5lSukoWi1If8dhQAUCvj4H8vUt3vOnwbQBH9DdTm/s4Ym2B/3dPMtYZeJmq7Q3S3Pa+I94DcZ7pc9bP14cWIQ== @@ -7159,6 +7629,14 @@ cypress@^4.12.0: url "^0.11.0" yauzl "^2.10.0" +d@1, d@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/d/-/d-1.0.1.tgz#8698095372d58dbee346ffd0c7093f99f8f9eb5a" + integrity sha512-m62ShEObQ39CfralilEQRjH6oAMtNCV1xJyEx5LpRYUVN+EviphDgUc/F3hnYbADmkiNs67Y+3ylmlG7Lnu+FA== + dependencies: + es5-ext "^0.10.50" + type "^1.0.1" + damerau-levenshtein@^1.0.6: version "1.0.6" resolved "https://registry.yarnpkg.com/damerau-levenshtein/-/damerau-levenshtein-1.0.6.tgz#143c1641cb3d85c60c32329e26899adea8701791" @@ -7740,11 +8218,6 @@ ee-first@1.1.1: resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d" integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0= -ejs@^2.7.4: - version "2.7.4" - resolved "https://registry.yarnpkg.com/ejs/-/ejs-2.7.4.tgz#48661287573dcc53e366c7a1ae52c3a120eec9ba" - integrity sha512-7vmuyh5+kuUyJKePhQfRQBhXV5Ce+RnaeeQArKu1EAMpL3WbgMt5WG6uQZpEVvYSSsxMXRKOewtDk9RaTKXRlA== - ejs@^3.1.2: version "3.1.5" resolved "https://registry.yarnpkg.com/ejs/-/ejs-3.1.5.tgz#aed723844dc20acb4b170cd9ab1017e476a0d93b" @@ -7752,11 +8225,16 @@ ejs@^3.1.2: dependencies: jake "^10.6.1" -electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.571: +electron-to-chromium@^1.3.378, electron-to-chromium@^1.3.571: version "1.3.576" resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.576.tgz#2e70234484e03d7c7e90310d7d79fd3775379c34" integrity sha512-uSEI0XZ//5ic+0NdOqlxp0liCD44ck20OAGyLMSymIWTEAtHKVJi6JM18acOnRgUgX7Q65QqnI+sNncNvIy8ew== +electron-to-chromium@^1.3.591: + version "1.3.598" + resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.598.tgz#8f757018902ab6190323a8c5f6124d854893a35b" + integrity sha512-G5Ztk23/ubLYVPxPXnB1uu105uzIPd4xB/D8ld8x1GaSC9+vU9NZL16nYZya8H77/7CCKKN7dArzJL3pBs8N7A== + elegant-spinner@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/elegant-spinner/-/elegant-spinner-1.0.1.tgz#db043521c95d7e303fd8f345bedc3349cfb0729e" @@ -7848,6 +8326,15 @@ end-of-stream@^1.0.0, end-of-stream@^1.1.0: dependencies: once "^1.4.0" +endent@^2.0.1: + version "2.0.1" + resolved "https://registry.yarnpkg.com/endent/-/endent-2.0.1.tgz#fb18383a3f37ae3213a5d9f6c4a880d1061eb4c5" + integrity sha512-mADztvcC+vCk4XEZaCz6xIPO2NHQuprv5CAEjuVAu6aZwqAj7nVNlMyl1goPFYqCCpS2OJV9jwpumJLkotZrNw== + dependencies: + dedent "^0.7.0" + fast-json-parse "^1.0.3" + objectorarray "^1.0.4" + enhanced-resolve@^4.1.1, enhanced-resolve@^4.3.0: version "4.3.0" resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-4.3.0.tgz#3b806f3bfafc1ec7de69551ef93cca46c1704126" @@ -8059,11 +8546,29 @@ es-to-primitive@^1.2.1: is-date-object "^1.0.1" is-symbol "^1.0.2" +es5-ext@^0.10.35, es5-ext@^0.10.50: + version "0.10.53" + resolved "https://registry.yarnpkg.com/es5-ext/-/es5-ext-0.10.53.tgz#93c5a3acfdbef275220ad72644ad02ee18368de1" + integrity sha512-Xs2Stw6NiNHWypzRTY1MtaG/uJlwCk8kH81920ma8mvN8Xq1gsfhZvpkImLQArw8AHnv8MT2I45J3c0R8slE+Q== + dependencies: + es6-iterator "~2.0.3" + es6-symbol "~3.1.3" + next-tick "~1.0.0" + es5-shim@^4.5.13: version "4.5.14" resolved "https://registry.yarnpkg.com/es5-shim/-/es5-shim-4.5.14.tgz#90009e1019d0ea327447cb523deaff8fe45697ef" integrity sha512-7SwlpL+2JpymWTt8sNLuC2zdhhc+wrfe5cMPI2j0o6WsPdfAiPwmFy2f0AocPB4RQVBOZ9kNTgi5YF7TdhkvEg== +es6-iterator@~2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/es6-iterator/-/es6-iterator-2.0.3.tgz#a7de889141a05a94b0854403b2d0a0fbfa98f3b7" + integrity sha1-p96IkUGgWpSwhUQDstCg+/qY87c= + dependencies: + d "1" + es5-ext "^0.10.35" + es6-symbol "^3.1.1" + es6-promise@^4.0.3: version "4.2.8" resolved "https://registry.yarnpkg.com/es6-promise/-/es6-promise-4.2.8.tgz#4eb21594c972bc40553d276e510539143db53e0a" @@ -8081,26 +8586,39 @@ es6-shim@^0.35.5: resolved "https://registry.yarnpkg.com/es6-shim/-/es6-shim-0.35.5.tgz#46f59dc0a84a1c5029e8ff1166ca0a902077a9ab" integrity sha512-E9kK/bjtCQRpN1K28Xh4BlmP8egvZBGJJ+9GtnzOwt7mdqtrjHFuVGr7QJfdjBIKqrlU5duPf3pCBoDrkjVYFg== +es6-symbol@^3.1.1, es6-symbol@~3.1.3: + version "3.1.3" + resolved "https://registry.yarnpkg.com/es6-symbol/-/es6-symbol-3.1.3.tgz#bad5d3c1bcdac28269f4cb331e431c78ac705d18" + integrity sha512-NJ6Yn3FuDinBaBRWl/q5X/s4koRHBrgKAu+yGI6JCBeiu3qrcbJhwT2GeR/EXVfylRk8dpQVJoLEFhK+Mu31NA== + dependencies: + d "^1.0.1" + ext "^1.1.2" + escalade@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.0.tgz#e8e2d7c7a8b76f6ee64c2181d6b8151441602d4e" integrity sha512-mAk+hPSO8fLDkhV7V0dXazH5pDc6MrjBTPyD3VeKzxnVFjH1MIxbCdqGZB9O8+EwWakZs3ZCbDS4IpRt79V1ig== +escalade@^3.1.1: + version "3.1.1" + resolved "https://registry.yarnpkg.com/escalade/-/escalade-3.1.1.tgz#d8cfdc7000965c5a0174b4a82eaa5c0552742e40" + integrity sha512-k0er2gUkLf8O0zKJiAhmkTnJlTvINGv7ygDNPbeIsX/TJjGJZHuh9B2UxbsaEkmlEo9MfhrSzmhIlhRlI2GXnw== + escape-html@~1.0.3: version "1.0.3" resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988" integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg= -escape-string-regexp@1.0.5, escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= - escape-string-regexp@2.0.0, escape-string-regexp@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-2.0.0.tgz#a30304e99daa32e23b2fd20f51babd07cffca344" integrity sha512-UpzcLCXolUWcNu5HtVMHYdXJjArjsF9C0aNnquZYY4uW/Vu0miy5YoWvbV345HauVvcAUnpRuhMMcqTcGOY2+w== +escape-string-regexp@^1.0.2, escape-string-regexp@^1.0.5: + version "1.0.5" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" + integrity sha1-G2HAViGQqN/2rjuyzwIAyhMLhtQ= + escodegen@^1.14.1, escodegen@^1.9.1: version "1.14.3" resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-1.14.3.tgz#4e7b81fba61581dc97582ed78cab7f0e8d63f503" @@ -8311,7 +8829,7 @@ espree@^7.3.0: acorn-jsx "^5.2.0" eslint-visitor-keys "^1.3.0" -esprima@^4.0.0, esprima@^4.0.1, esprima@~4.0.0: +esprima@^4.0.0, esprima@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== @@ -8527,6 +9045,13 @@ express@^4.17.0, express@^4.17.1: utils-merge "1.0.1" vary "~1.1.2" +ext@^1.1.2: + version "1.4.0" + resolved "https://registry.yarnpkg.com/ext/-/ext-1.4.0.tgz#89ae7a07158f79d35517882904324077e4379244" + integrity sha512-Key5NIsUxdqKg3vIsdw9dSuXpPCQ297y6wBjL30edxwPgt2E44WcWBZey/ZvUc6sERLTxKdyCu4gZFmUbk1Q7A== + dependencies: + type "^2.0.0" + extend-shallow@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/extend-shallow/-/extend-shallow-2.0.1.tgz#51af7d614ad9a9f610ea1bafbb989d6b1c56890f" @@ -8617,6 +9142,11 @@ fast-glob@^2.0.2, fast-glob@^2.2.6: merge2 "^1.2.3" micromatch "^3.1.10" +fast-json-parse@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/fast-json-parse/-/fast-json-parse-1.0.3.tgz#43e5c61ee4efa9265633046b770fb682a7577c4d" + integrity sha512-FRWsaZRWEJ1ESVNbDWmsAlqDk96gPQezzLghafp5J4GUKjbCz3OkAHuZs5TuPEtkbVQERysLp9xv6c24fBm8Aw== + fast-json-stable-stringify@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" @@ -8745,11 +9275,6 @@ filelist@^1.0.1: dependencies: minimatch "^3.0.4" -filesize@3.6.1: - version "3.6.1" - resolved "https://registry.yarnpkg.com/filesize/-/filesize-3.6.1.tgz#090bb3ee01b6f801a8a8be99d31710b3422bb317" - integrity sha512-7KjR1vv6qnicaPMi1iiTcI85CyYwRO/PSFCu6SvqL8jN2Wjt/NIYQTFtFs7fSDCYOstUkEWIQGFUg5YZQfjlcg== - filesize@6.0.1: version "6.0.1" resolved "https://registry.yarnpkg.com/filesize/-/filesize-6.0.1.tgz#f850b509909c7c86f7e450ea19006c31c2ed3d2f" @@ -8794,7 +9319,7 @@ find-cache-dir@^2.0.0, find-cache-dir@^2.1.0: make-dir "^2.0.0" pkg-dir "^3.0.0" -find-cache-dir@^3.0.0, find-cache-dir@^3.3.1: +find-cache-dir@^3.3.1: version "3.3.1" resolved "https://registry.yarnpkg.com/find-cache-dir/-/find-cache-dir-3.3.1.tgz#89b33fad4a4670daa94f855f7fbe31d6d84fe880" integrity sha512-t2GDMt3oGC/v+BMwzmllWDuJF/xcDtE5j/fCGbqDD7OLuJkj0cfh1YSA5VKPvwMeLFLNDBkwOKZ2X85jGLVftQ== @@ -8808,13 +9333,6 @@ find-root@^1.1.0: resolved "https://registry.yarnpkg.com/find-root/-/find-root-1.1.0.tgz#abcfc8ba76f708c42a97b3d685b7e9450bfb9ce4" integrity sha512-NKfW6bec6GfKc0SGx1e07QZY9PE99u0Bft/0rzSD5k3sO/vwkVUpDUKVm5Gpp5Ue3YfShPFTX2070tDs5kB9Ng== -find-up@3.0.0, find-up@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" - integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== - dependencies: - locate-path "^3.0.0" - find-up@4.1.0, find-up@^4.0.0, find-up@^4.1.0: version "4.1.0" resolved "https://registry.yarnpkg.com/find-up/-/find-up-4.1.0.tgz#97afe7d6cdc0bc5928584b7c8d7b16e8a9aa5d19" @@ -8838,6 +9356,13 @@ find-up@^2.0.0, find-up@^2.1.0: dependencies: locate-path "^2.0.0" +find-up@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/find-up/-/find-up-3.0.0.tgz#49169f1d7993430646da61ecc5ae355c21c97b73" + integrity sha512-1yD6RmLI1XBfxugvORwlck6f75tYL+iR0jqwsOrOxMZyGYqUuDhJ0l4AXdO1iX/FTs9cBAMEk1gWSEx1kSbylg== + dependencies: + locate-path "^3.0.0" + find-versions@^3.2.0: version "3.2.0" resolved "https://registry.yarnpkg.com/find-versions/-/find-versions-3.2.0.tgz#10297f98030a786829681690545ef659ed1d254e" @@ -8895,42 +9420,16 @@ follow-redirects@^1.0.0: resolved "https://registry.yarnpkg.com/follow-redirects/-/follow-redirects-1.13.0.tgz#b42e8d93a2a7eea5ed88633676d6597bc8e384db" integrity sha512-aq6gF1BEKje4a9i9+5jimNFIpq4Q1WiwBToeRK5NvZBd/TRsmW8BsJfOEGkr76TbOyPVD3OVDN910EcUNtRYEA== -for-in@^0.1.3: - version "0.1.8" - resolved "https://registry.yarnpkg.com/for-in/-/for-in-0.1.8.tgz#d8773908e31256109952b1fdb9b3fa867d2775e1" - integrity sha1-2Hc5COMSVhCZUrH9ubP6hn0ndeE= - -for-in@^1.0.1, for-in@^1.0.2: +for-in@^1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/for-in/-/for-in-1.0.2.tgz#81068d295a8142ec0ac726c6e2200c30fb6d5e80" integrity sha1-gQaNKVqBQuwKxybG4iAMMPttXoA= -for-own@^0.1.3: - version "0.1.5" - resolved "https://registry.yarnpkg.com/for-own/-/for-own-0.1.5.tgz#5265c681a4f294dabbf17c9509b6763aa84510ce" - integrity sha1-UmXGgaTylNq78XyVCbZ2OqhFEM4= - dependencies: - for-in "^1.0.1" - forever-agent@~0.6.1: version "0.6.1" resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= -fork-ts-checker-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-1.5.0.tgz#ce1d77190b44d81a761b10b6284a373795e41f0c" - integrity sha512-zEhg7Hz+KhZlBhILYpXy+Beu96gwvkROWJiTXOCyOOMMrdBIRPvsBpBqgTI4jfJGrJXcqGwJR8zsBGDmzY0jsA== - dependencies: - babel-code-frame "^6.22.0" - chalk "^2.4.1" - chokidar "^2.0.4" - micromatch "^3.1.10" - minimatch "^3.0.4" - semver "^5.6.0" - tapable "^1.0.0" - worker-rpc "^0.1.0" - fork-ts-checker-webpack-plugin@3.1.1: version "3.1.1" resolved "https://registry.yarnpkg.com/fork-ts-checker-webpack-plugin/-/fork-ts-checker-webpack-plugin-3.1.1.tgz#a1642c0d3e65f50c2cc1742e9c0a80f441f86b19" @@ -9017,7 +9516,7 @@ fs-extra@^0.30.0: path-is-absolute "^1.0.0" rimraf "^2.2.8" -fs-extra@^8.0.1, fs-extra@^8.1.0: +fs-extra@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== @@ -9102,7 +9601,7 @@ functions-have-names@^1.2.0: resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.1.tgz#a981ac397fa0c9964551402cdc5533d7a4d52f91" integrity sha512-j48B/ZI7VKs3sgeI2cZp7WXWmZXu7Iq5pl5/vptV5N2mq+DGFuS/ulaDjtaoLpYzuD6u8UgrUKHfgo7fDTSiBA== -fuse.js@^3.4.6, fuse.js@^3.6.1: +fuse.js@^3.6.1: version "3.6.1" resolved "https://registry.yarnpkg.com/fuse.js/-/fuse.js-3.6.1.tgz#7de85fdd6e1b3377c23ce010892656385fd9b10c" integrity sha512-hT9yh/tiinkmirKrlv4KWOjztdoZo1mx9Qh4KvWqC7isoXwdUY3PNWUxceF4/qO9R6riA2C29jdTOeQOIROjgw== @@ -9744,7 +10243,7 @@ html-to-react@^1.3.4: lodash.camelcase "^4.3.0" ramda "^0.27" -html-webpack-plugin@^4.0.0-beta.2, html-webpack-plugin@^4.2.1: +html-webpack-plugin@^4.2.1: version "4.5.0" resolved "https://registry.yarnpkg.com/html-webpack-plugin/-/html-webpack-plugin-4.5.0.tgz#625097650886b97ea5dae331c320e3238f6c121c" integrity sha512-MouoXEYSjTzCrjIxWwg8gxL5fE2X2WZJLmBYXlaJhQUH5K/b5OrqmV7T4dB7iu0xkmJ6JlUuV6fFVtnqbPopZw== @@ -10097,25 +10596,6 @@ init-package-json@^1.10.3: validate-npm-package-license "^3.0.1" validate-npm-package-name "^3.0.0" -inquirer@6.5.0: - version "6.5.0" - resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-6.5.0.tgz#2303317efc9a4ea7ec2e2df6f86569b734accf42" - integrity sha512-scfHejeG/lVZSpvCXpsB4j/wQNPM5JC8kiElOI0OUTwmc1RTpXr4H32/HOlQHcZiYl2z2VElwuCVDRG8vFmbnA== - dependencies: - ansi-escapes "^3.2.0" - chalk "^2.4.2" - cli-cursor "^2.1.0" - cli-width "^2.0.0" - external-editor "^3.0.3" - figures "^2.0.0" - lodash "^4.17.12" - mute-stream "0.0.7" - run-async "^2.2.0" - rxjs "^6.4.0" - string-width "^2.1.0" - strip-ansi "^5.1.0" - through "^2.3.6" - inquirer@7.0.4: version "7.0.4" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-7.0.4.tgz#99af5bde47153abca23f5c7fc30db247f39da703" @@ -10293,7 +10773,7 @@ is-boolean-object@^1.0.1: resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.0.1.tgz#10edc0900dd127697a92f6f9807c7617d68ac48e" integrity sha512-TqZuVwa/sppcrhUCAYkGBk7w0yxfQQnxq28fjkO53tnK9FQXmdwz2JS5+GjsWQ6RByES1K40nI+yDic5c9/aAQ== -is-buffer@^1.0.2, is-buffer@^1.1.4, is-buffer@^1.1.5: +is-buffer@^1.1.4, is-buffer@^1.1.5: version "1.1.6" resolved "https://registry.yarnpkg.com/is-buffer/-/is-buffer-1.1.6.tgz#efaa2ea9daa0d7ab2ea13a97b2b8ad51fefbe8be" integrity sha512-NcdALwpXkTm5Zvvbk7owOUSvVvBKDgKP5/ewfXEznmQFfs4ZRmanOeKBTjRVjka3QFoN6XJ+9F3USqfHqTaU5w== @@ -10381,7 +10861,7 @@ is-docker@^2.0.0: resolved "https://registry.yarnpkg.com/is-docker/-/is-docker-2.1.1.tgz#4125a88e44e450d384e09047ede71adc2d144156" integrity sha512-ZOoqiXfEwtGknTiuDEy8pN2CfE3TxMHprvNer1mXiqwkOT77Rw3YVrUQ52EqAOU3QAWDQ+bQdx7HJzrv7LS2Hw== -is-dom@^1.0.9: +is-dom@^1.0.0: version "1.1.0" resolved "https://registry.yarnpkg.com/is-dom/-/is-dom-1.1.0.tgz#af1fced292742443bb59ca3f76ab5e80907b4e8a" integrity sha512-u82f6mvhYxRPKpw8V1N0W8ce1xXwOrQtgGcxl6UCL5zBmZu3is/18K0rR7uFCnMDuAsS/3W54mGL4vsaFUQlEQ== @@ -10555,18 +11035,13 @@ is-plain-obj@^1.0.0, is-plain-obj@^1.1.0: resolved "https://registry.yarnpkg.com/is-plain-obj/-/is-plain-obj-1.1.0.tgz#71a50c8429dfca773c92a390a4a03b39fcd51d3e" integrity sha1-caUMhCnfync8kqOQpKA7OfzVHT4= -is-plain-object@^2.0.1, is-plain-object@^2.0.3, is-plain-object@^2.0.4: +is-plain-object@^2.0.3, is-plain-object@^2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-2.0.4.tgz#2c163b3fafb1b606d9d17928f05c2a1c38e07677" integrity sha512-h5PpgXkWitc38BBMYawTYMWJHFZJVnBquFE57xFpjB8pJFiF6gZ+bU+WyI/yqXiFR5mdLsgYNaPe8uao6Uv9Og== dependencies: isobject "^3.0.1" -is-plain-object@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-3.0.1.tgz#662d92d24c0aa4302407b0d45d21f2251c85f85b" - integrity sha512-Xnpx182SBMrr/aBik8y+GuR4U1L9FqMSojwDQwPMmxyC6bvEqly9UBCxhauBF5vNh2gwWJNX6oDV7O+OM4z34g== - is-plain-object@^5.0.0: version "5.0.0" resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" @@ -11714,7 +12189,7 @@ jest-serializer@^26.6.2: "@types/node" "*" graceful-fs "^4.2.4" -jest-snapshot@^24.1.0, jest-snapshot@^24.9.0: +jest-snapshot@^24.9.0: version "24.9.0" resolved "https://registry.yarnpkg.com/jest-snapshot/-/jest-snapshot-24.9.0.tgz#ec8e9ca4f2ec0c5c87ae8f925cf97497b0e951ba" integrity sha512-uI/rszGSs73xCM0l+up7O7a40o90cnrk429LOiK3aeTvfC0HHmldbd81/B7Ix81KSFe1lwkbl7GnBGG4UfuDew== @@ -11776,13 +12251,6 @@ jest-snapshot@^26.6.2: pretty-format "^26.6.2" semver "^7.3.2" -jest-specific-snapshot@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/jest-specific-snapshot/-/jest-specific-snapshot-2.0.0.tgz#425fe524b25df154aa39f97fa6fe9726faaac273" - integrity sha512-aXaNqBg/svwEpY5iQEzEHc5I85cUBKgfeVka9KmpznxLnatpjiqjr7QLb/BYNYlsrZjZzgRHTjQJ+Svx+dbdvg== - dependencies: - jest-snapshot "^24.1.0" - jest-specific-snapshot@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/jest-specific-snapshot/-/jest-specific-snapshot-4.0.0.tgz#a52a2e223e7576e610dbeaf341207c557ac20554" @@ -11915,14 +12383,6 @@ jest-worker@^24.6.0, jest-worker@^24.9.0: merge-stream "^2.0.0" supports-color "^6.1.0" -jest-worker@^25.4.0: - version "25.5.0" - resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-25.5.0.tgz#2611d071b79cea0f43ee57a3d118593ac1547db1" - integrity sha512-/dsSmUkIy5EBGfv/IjjqmFxrNAUpBERfGs1oHROyD7yxjG/w+t0GOJDX8O1k32ySmd7+a5IhnJU2qQFcJ4n1vw== - dependencies: - merge-stream "^2.0.0" - supports-color "^7.0.0" - jest-worker@^26.2.1, jest-worker@^26.3.0: version "26.3.0" resolved "https://registry.yarnpkg.com/jest-worker/-/jest-worker-26.3.0.tgz#7c8a97e4f4364b4f05ed8bca8ca0c24de091871f" @@ -12164,13 +12624,6 @@ killable@^1.0.1: resolved "https://registry.yarnpkg.com/killable/-/killable-1.0.1.tgz#4c8ce441187a061c7474fb87ca08e2a638194892" integrity sha512-LzqtLKlUwirEUyl/nicirVmNiPvYs7l5n8wOPP7fyJVpUPkvCnW/vuiXGpylGUlnPDnB7311rARzAt3Mhswpjg== -kind-of@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-2.0.1.tgz#018ec7a4ce7e3a86cb9141be519d24c8faa981b5" - integrity sha1-AY7HpM5+OobLkUG+UZ0kyPqpgbU= - dependencies: - is-buffer "^1.0.2" - kind-of@^3.0.2, kind-of@^3.0.3, kind-of@^3.2.0: version "3.2.2" resolved "https://registry.yarnpkg.com/kind-of/-/kind-of-3.2.2.tgz#31ea21a734bab9bbb0f32466d893aea51e4a3c64" @@ -12232,16 +12685,6 @@ lazy-ass@^1.6.0: resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" integrity sha1-eZllXoZGwX8In90YfRUNMyTVRRM= -lazy-cache@^0.2.3: - version "0.2.7" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-0.2.7.tgz#7feddf2dcb6edb77d11ef1d117ab5ffdf0ab1b65" - integrity sha1-f+3fLctu23fRHvHRF6tf/fCrG2U= - -lazy-cache@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/lazy-cache/-/lazy-cache-1.0.4.tgz#a1d78fc3a50474cb80845d3b3b6e1da49a446e8e" - integrity sha1-odePw6UEdMuAhF07O24dpJpEbo4= - lazy-universal-dotenv@^3.0.1: version "3.0.1" resolved "https://registry.yarnpkg.com/lazy-universal-dotenv/-/lazy-universal-dotenv-3.0.1.tgz#a6c8938414bca426ab8c9463940da451a911db38" @@ -12608,6 +13051,13 @@ log-symbols@^1.0.2: dependencies: chalk "^1.0.0" +log-symbols@^2.1.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-2.2.0.tgz#5740e1c5d6f0dfda4ad9323b5332107ef6b4c40a" + integrity sha512-VeIAFslyIerEJLXHziedo2basKbMKtTw3vfn5IzG0XTjhAVEJyNHnL2p7vc+wBDSdQuUpNw3M2u6xb9QsAY5Eg== + dependencies: + chalk "^2.0.1" + log-symbols@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-3.0.0.tgz#f3a08516a5dea893336a7dee14d18a1cfdab77c4" @@ -12646,6 +13096,14 @@ loglevel@^1.6.8: resolved "https://registry.yarnpkg.com/loglevel/-/loglevel-1.7.0.tgz#728166855a740d59d38db01cf46f042caa041bb0" integrity sha512-i2sY04nal5jDcagM3FMfG++T69GEEM8CYuOfeOIvmXzOIcwE9a/CJPR0MFM97pYMj/u10lzz7/zd7+qwhrBTqQ== +loglevelnext@^1.0.1: + version "1.0.5" + resolved "https://registry.yarnpkg.com/loglevelnext/-/loglevelnext-1.0.5.tgz#36fc4f5996d6640f539ff203ba819641680d75a2" + integrity sha512-V/73qkPuJmx4BcBF19xPBr+0ZRVBhc4POxvZTZdMeXpJ4NItXSJ/MSwuFT0kQJlCbXvdlZoQQ/418bS1y9Jh6A== + dependencies: + es6-symbol "^3.1.1" + object.assign "^4.1.0" + loose-envify@^1.0.0, loose-envify@^1.1.0, loose-envify@^1.2.0, loose-envify@^1.3.1, loose-envify@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/loose-envify/-/loose-envify-1.4.0.tgz#71ee51fa7be4caec1a63839f7e682d8132d30caf" @@ -12922,15 +13380,6 @@ meow@^7.0.0: type-fest "^0.13.1" yargs-parser "^18.1.3" -merge-deep@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/merge-deep/-/merge-deep-3.0.2.tgz#f39fa100a4f1bd34ff29f7d2bf4508fbb8d83ad2" - integrity sha512-T7qC8kg4Zoti1cFd8Cr0M+qaZfOwjlPDEdZIIPPB2JZctjaPM4fX+i7HOId69tAti2fvO6X5ldfYUONDODsrkA== - dependencies: - arr-union "^3.1.0" - clone-deep "^0.2.4" - kind-of "^3.0.2" - merge-descriptors@1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/merge-descriptors/-/merge-descriptors-1.0.1.tgz#b00aaa556dd8b44568150ec9d1b953f3f90cbb61" @@ -13058,16 +13507,6 @@ mini-css-extract-plugin@^0.12.0: schema-utils "^1.0.0" webpack-sources "^1.1.0" -mini-css-extract-plugin@^0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/mini-css-extract-plugin/-/mini-css-extract-plugin-0.7.0.tgz#5ba8290fbb4179a43dd27cca444ba150bee743a0" - integrity sha512-RQIw6+7utTYn8DBGsf/LpRgZCJMpZt+kuawJ/fju0KiOL6nAaTBNmCJwS7HtwSCXfS47gCkmtBFS7HdsquhdxQ== - dependencies: - loader-utils "^1.1.0" - normalize-url "1.9.1" - schema-utils "^1.0.0" - webpack-sources "^1.1.0" - minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -13182,14 +13621,6 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mixin-object@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/mixin-object/-/mixin-object-2.0.1.tgz#4fb949441dab182540f1fe035ba60e1947a5e57e" - integrity sha1-T7lJRB2rGCVA8f4DW6YOGUel5X4= - dependencies: - for-in "^0.1.3" - is-extendable "^0.1.1" - mkdirp-promise@^5.0.1: version "5.0.1" resolved "https://registry.yarnpkg.com/mkdirp-promise/-/mkdirp-promise-5.0.1.tgz#e9b8f68e552c68a9c1713b84883f7a1dd039b8a1" @@ -13353,6 +13784,11 @@ neo-async@^2.5.0, neo-async@^2.6.0, neo-async@^2.6.1: resolved "https://registry.yarnpkg.com/neo-async/-/neo-async-2.6.2.tgz#b4aafb93e3aeb2d8174ca53cf163ab7d7308305f" integrity sha512-Yd3UES5mWCSqR+qNT93S3UoYUkqAZ9lLg8a7g9rimsWmYGK8cVToA4/sF3RrshdyV3sAGMXVUmpMYOw+dLpOuw== +next-tick@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/next-tick/-/next-tick-1.0.0.tgz#ca86d1fe8828169b0120208e3dc8424b9db8342c" + integrity sha1-yobR/ogoFpsBICCOPchCS524NCw= + nice-try@^1.0.4: version "1.0.5" resolved "https://registry.yarnpkg.com/nice-try/-/nice-try-1.0.5.tgz#a3378a7696ce7d223e88fc9b764bd7ef1089e366" @@ -13471,11 +13907,16 @@ node-notifier@^8.0.0: uuid "^8.3.0" which "^2.0.2" -node-releases@^1.1.29, node-releases@^1.1.52, node-releases@^1.1.61: +node-releases@^1.1.52, node-releases@^1.1.61: version "1.1.61" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.61.tgz#707b0fca9ce4e11783612ba4a2fcba09047af16e" integrity sha512-DD5vebQLg8jLCOzwupn954fbIiZht05DAZs0k2u8NStSe6h9XdsuIQL8hSRKYiU8WUQRznmSDrKGbv3ObOmC7g== +node-releases@^1.1.66: + version "1.1.67" + resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.67.tgz#28ebfcccd0baa6aad8e8d4d8fe4cbc49ae239c12" + integrity sha512-V5QF9noGFl3EymEwUYzO+3NTDpGfQB4ve6Qfnzf3UNydMhjQRVPR1DZTuvWiLzaFJYw2fmDwAfnRNEVb64hSIg== + nopt@^4.0.1: version "4.0.3" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.3.tgz#a375cad9d02fd921278d954c2254d5aa57e15e48" @@ -13731,6 +14172,11 @@ object.values@^1.1.0, object.values@^1.1.1: function-bind "^1.1.1" has "^1.0.3" +objectorarray@^1.0.4: + version "1.0.4" + resolved "https://registry.yarnpkg.com/objectorarray/-/objectorarray-1.0.4.tgz#d69b2f0ff7dc2701903d308bb85882f4ddb49483" + integrity sha512-91k8bjcldstRz1bG6zJo8lWD7c6QXcB4nTDUqiEvIL1xAsLoZlOOZZG+nd6YPz+V7zY1580J4Xxh1vZtyv4i/w== + obuf@^1.0.0, obuf@^1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/obuf/-/obuf-1.1.2.tgz#09bea3343d41859ebd446292d11c9d4db619084e" @@ -13779,14 +14225,7 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" -open@^6.3.0: - version "6.4.0" - resolved "https://registry.yarnpkg.com/open/-/open-6.4.0.tgz#5c13e96d0dc894686164f18965ecfe889ecfc8a9" - integrity sha512-IFenVPgF70fSm1keSd2iDBIDIBZkroLeuffXq+wKTzTJlBpesFWojV9lb8mzOfaAzM1sr7HQHuO0vtV0zYekGg== - dependencies: - is-wsl "^1.1.0" - -open@^7.0.0, open@^7.0.2, open@^7.0.3: +open@^7.0.2, open@^7.0.3: version "7.3.0" resolved "https://registry.yarnpkg.com/open/-/open-7.3.0.tgz#45461fdee46444f3645b6e14eb3ca94b82e1be69" integrity sha512-mgLwQIx2F/ye9SmbrUkurZCnkoXyXyu9EbHtJZrICjVAJfyMArdHp3KkixGdZx1ZHFPNIwl0DDM1dFFqXbTLZw== @@ -13910,7 +14349,7 @@ p-limit@^1.1.0: dependencies: p-try "^1.0.0" -p-limit@^2.0.0, p-limit@^2.2.0, p-limit@^2.3.0: +p-limit@^2.0.0, p-limit@^2.2.0: version "2.3.0" resolved "https://registry.yarnpkg.com/p-limit/-/p-limit-2.3.0.tgz#3dd33c647a214fdfffd835933eb086da0dc21db1" integrity sha512-//88mFWSJx8lxCzwdAABTJL2MyWB12+eIY7MDL2SqLmAkeKU9qxRvWuSyTjm3FUmpBEMuFfckAIqEaVGUDxb6w== @@ -13957,13 +14396,6 @@ p-map@^2.0.0, p-map@^2.1.0: resolved "https://registry.yarnpkg.com/p-map/-/p-map-2.1.0.tgz#310928feef9c9ecc65b68b17693018a665cea175" integrity sha512-y3b8Kpd8OAN444hxfBbFfj1FY/RjtTd8tzYwhUqNYXx0fXx2iX4maP4Qr6qhIKbQXI02wTLAda4fYUbDagTUFw== -p-map@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-3.0.0.tgz#d704d9af8a2ba684e2600d9a215983d4141a979d" - integrity sha512-d3qXVTF/s+W+CdJ5A29wywV2n8CQQYahlgz2bFiA+4eVNJbHJodPZ+/gXwPGh0bOqA+j8S+6+ckmvLGPk1QpxQ== - dependencies: - aggregate-error "^3.0.0" - p-map@^4.0.0: version "4.0.0" resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" @@ -14342,13 +14774,6 @@ pkg-dir@^4.1.0, pkg-dir@^4.2.0: dependencies: find-up "^4.0.0" -pkg-up@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-2.0.0.tgz#c819ac728059a461cab1c3889a2be3c49a004d7f" - integrity sha1-yBmscoBZpGHKscOImivjxJoATX8= - dependencies: - find-up "^2.1.0" - pkg-up@3.1.0, pkg-up@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/pkg-up/-/pkg-up-3.1.0.tgz#100ec235cc150e4fd42519412596a28512a0def5" @@ -14368,13 +14793,6 @@ pn@^1.1.0: resolved "https://registry.yarnpkg.com/pn/-/pn-1.1.0.tgz#e2f4cef0e219f463c179ab37463e4e1ecdccbafb" integrity sha512-2qHaIQr2VLRFoxe2nASzsV6ef4yOOH+Fi9FBOVH6cqeSgUnoyySPZkxzLuzd+RYOQTRpROA0ztTMqxROKSb/nA== -pnp-webpack-plugin@1.5.0: - version "1.5.0" - resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.5.0.tgz#62a1cd3068f46d564bb33c56eb250e4d586676eb" - integrity sha512-jd9olUr9D7do+RN8Wspzhpxhgp1n6Vd0NtQ4SFkmIACZoEL1nkyAdW9Ygrinjec0vgDcWjscFQQ1gDW8rsfKTg== - dependencies: - ts-pnp "^1.1.2" - pnp-webpack-plugin@1.6.4: version "1.6.4" resolved "https://registry.yarnpkg.com/pnp-webpack-plugin/-/pnp-webpack-plugin-1.6.4.tgz#c9711ac4dc48a685dabafc86f8b6dd9f8df84149" @@ -14858,11 +15276,6 @@ prismjs@1.22.0, prismjs@^1.21.0, prismjs@^1.8.4, prismjs@~1.22.0: optionalDependencies: clipboard "^2.0.0" -private@~0.1.5: - version "0.1.8" - resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" - integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== - process-nextick-args@~2.0.0: version "2.0.1" resolved "https://registry.yarnpkg.com/process-nextick-args/-/process-nextick-args-2.0.1.tgz#7820d9b16120cc55ca9ae7792680ae7dba6d7fe2" @@ -14935,7 +15348,7 @@ prop-types-exact@^1.2.0: object.assign "^4.1.0" reflect.ownkeys "^0.2.0" -prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: +prop-types@^15.0.0, prop-types@^15.5.10, prop-types@^15.5.8, prop-types@^15.6.0, prop-types@^15.6.1, prop-types@^15.6.2, prop-types@^15.7.2: version "15.7.2" resolved "https://registry.yarnpkg.com/prop-types/-/prop-types-15.7.2.tgz#52c41e75b8c87e72b9d9360e0206b99dcbffa6c5" integrity sha512-8QQikdH7//R2vurIJSutZ1smHYTcLpRWEOlHnzcWHmBYrOGUysKwSsrC89BCiFj3CbrfJ/nXFdJepOVrY1GCHQ== @@ -15165,14 +15578,6 @@ raw-body@2.4.0: iconv-lite "0.4.24" unpipe "1.0.0" -raw-loader@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-3.1.0.tgz#5e9d399a5a222cc0de18f42c3bc5e49677532b3f" - integrity sha512-lzUVMuJ06HF4rYveaz9Tv0WRlUMxJ0Y1hgSkkgg+50iEdaI0TthyEDe08KIHb0XsF6rn8WYTqPCaGTZg3sX+qA== - dependencies: - loader-utils "^1.1.0" - schema-utils "^2.0.1" - raw-loader@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/raw-loader/-/raw-loader-4.0.1.tgz#14e1f726a359b68437e183d5a5b7d33a3eba6933" @@ -15235,42 +15640,37 @@ react-dev-utils@^10.0.0: strip-ansi "6.0.0" text-table "0.2.0" -react-dev-utils@^9.0.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/react-dev-utils/-/react-dev-utils-9.1.0.tgz#3ad2bb8848a32319d760d0a84c56c14bdaae5e81" - integrity sha512-X2KYF/lIGyGwP/F/oXgGDF24nxDA2KC4b7AFto+eqzc/t838gpSGiaU8trTqHXOohuLxxc5qi1eDzsl9ucPDpg== - dependencies: - "@babel/code-frame" "7.5.5" - address "1.1.2" - browserslist "4.7.0" - chalk "2.4.2" - cross-spawn "6.0.5" - detect-port-alt "1.1.6" - escape-string-regexp "1.0.5" - filesize "3.6.1" - find-up "3.0.0" - fork-ts-checker-webpack-plugin "1.5.0" - global-modules "2.0.0" - globby "8.0.2" - gzip-size "5.1.1" - immer "1.10.0" - inquirer "6.5.0" - is-root "2.1.0" - loader-utils "1.2.3" - open "^6.3.0" - pkg-up "2.0.0" - react-error-overlay "^6.0.3" - recursive-readdir "2.2.2" - shell-quote "1.7.2" - sockjs-client "1.4.0" - strip-ansi "5.2.0" - text-table "0.2.0" - react-diff-view@^2.4.1: version "2.4.6" resolved "https://registry.yarnpkg.com/react-diff-view/-/react-diff-view-2.4.6.tgz#5091ea1c326673fb5fced8b471ecbf1ab84c98fb" integrity sha512-kiF9RyRSefPa86xSqJDFesekYFqN6rhrMQbUwH8WZuBKHVDZmT5dobaiba7WPQOywOUTyJAm54kE0G4UDP3fxA== +react-docgen-typescript-loader@^3.7.2: + version "3.7.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript-loader/-/react-docgen-typescript-loader-3.7.2.tgz#45cb2305652c0602767242a8700ad1ebd66bbbbd" + integrity sha512-fNzUayyUGzSyoOl7E89VaPKJk9dpvdSgyXg81cUkwy0u+NBvkzQG3FC5WBIlXda0k/iaxS+PWi+OC+tUiGxzPA== + dependencies: + "@webpack-contrib/schema-utils" "^1.0.0-beta.0" + loader-utils "^1.2.3" + react-docgen-typescript "^1.15.0" + +react-docgen-typescript-plugin@^0.5.2: + version "0.5.2" + resolved "https://registry.yarnpkg.com/react-docgen-typescript-plugin/-/react-docgen-typescript-plugin-0.5.2.tgz#2b294d75ef3145c36303da82be5d447cb67dc0dc" + integrity sha512-NQfWyWLmzUnedkiN2nPDb6Nkm68ik6fqbC3UvgjqYSeZsbKijXUA4bmV6aU7qICOXdop9PevPdjEgJuAN0nNVQ== + dependencies: + debug "^4.1.1" + endent "^2.0.1" + micromatch "^4.0.2" + react-docgen-typescript "^1.20.1" + react-docgen-typescript-loader "^3.7.2" + tslib "^2.0.0" + +react-docgen-typescript@^1.15.0, react-docgen-typescript@^1.20.1: + version "1.20.5" + resolved "https://registry.yarnpkg.com/react-docgen-typescript/-/react-docgen-typescript-1.20.5.tgz#fb8d78a707243498436c2952bd3f6f488a68d4f3" + integrity sha512-AbLGMtn76bn7SYBJSSaKJrZ0lgNRRR3qL60PucM5M4v/AXyC8221cKBXW5Pyt9TfDRfe+LDnPNlg7TibxX0ovA== + react-docgen@^5.0.0: version "5.3.0" resolved "https://registry.yarnpkg.com/react-docgen/-/react-docgen-5.3.0.tgz#9aabde5e69f1993c8ba839fd9a86696504654589" @@ -15303,7 +15703,7 @@ react-draggable@^4.0.3: classnames "^2.2.5" prop-types "^15.6.0" -react-error-overlay@^6.0.3, react-error-overlay@^6.0.7: +react-error-overlay@^6.0.7: version "6.0.7" resolved "https://registry.yarnpkg.com/react-error-overlay/-/react-error-overlay-6.0.7.tgz#1dcfb459ab671d53f660a991513cb2f0a0553108" integrity sha512-TAv1KJFh3RhqxNvhzxj6LeT5NWklP6rDr2a0jaTfsZ5wSZWHOGeqQyejUp3xxLfPt2UpyJEcVQB/zyPcmonNFA== @@ -15366,14 +15766,14 @@ react-input-autosize@^2.2.1: dependencies: prop-types "^15.5.8" -react-inspector@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-4.0.1.tgz#0f888f78ff7daccbc7be5d452b20c96dc6d5fbb8" - integrity sha512-xSiM6CE79JBqSj8Fzd9dWBHv57tLTH7OM57GP3VrE5crzVF3D5Khce9w1Xcw75OAbvrA0Mi2vBneR1OajKmXFg== +react-inspector@^5.0.1: + version "5.1.0" + resolved "https://registry.yarnpkg.com/react-inspector/-/react-inspector-5.1.0.tgz#45a325e15f33e595be5356ca2d3ceffb7d6b8c3a" + integrity sha512-JAwswiengIcxi4X/Ssb8nf6suOuQsyit8Fxo04+iPKTnPNY3XIOuagjMZSzpJDDKkYcc/ARlySOYZZv626WUvA== dependencies: - "@babel/runtime" "^7.6.3" - is-dom "^1.0.9" - prop-types "^15.6.1" + "@babel/runtime" "^7.0.0" + is-dom "^1.0.0" + prop-types "^15.0.0" react-is@^16.12.0, react-is@^16.13.1, react-is@^16.6.0, react-is@^16.7.0, react-is@^16.8.1, react-is@^16.8.4, react-is@^16.8.6: version "16.13.1" @@ -15747,16 +16147,6 @@ realpath-native@^1.1.0: dependencies: util.promisify "^1.0.0" -recast@^0.14.7: - version "0.14.7" - resolved "https://registry.yarnpkg.com/recast/-/recast-0.14.7.tgz#4f1497c2b5826d42a66e8e3c9d80c512983ff61d" - integrity sha512-/nwm9pkrcWagN40JeJhkPaRxiHXBRkXyRh/hgU088Z/v+qCy+zIHHY6bC6o7NaKAxPqtE6nD8zBH1LfU0/Wx6A== - dependencies: - ast-types "0.11.3" - esprima "~4.0.0" - private "~0.1.5" - source-map "~0.6.1" - rechoir@^0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" @@ -15873,7 +16263,7 @@ regenerator-runtime@^0.11.0: resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.11.1.tgz#be05ad7f9bf7d22e056f9726cee5017fbf19e2e9" integrity sha512-MguG95oij0fC3QV3URf4V2SDYGJhJnJGqvIIgdECeODCT98wSWDAJ94SSuVpYQUoTcGUIL6L4yNB7j1DFFHSBg== -regenerator-runtime@^0.13.2, regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: +regenerator-runtime@^0.13.3, regenerator-runtime@^0.13.4: version "0.13.7" resolved "https://registry.yarnpkg.com/regenerator-runtime/-/regenerator-runtime-0.13.7.tgz#cac2dacc8a1ea675feaabaeb8ae833898ae46f55" integrity sha512-a54FxoJDIr27pgf7IgeQGxmqUNYrcV338lf/6gH456HZ/PhX+5BcwHXG9ajESmwe6WRO0tAzRUrRmNONWgkrew== @@ -15906,7 +16296,7 @@ regexpp@^3.0.0, regexpp@^3.1.0: resolved "https://registry.yarnpkg.com/regexpp/-/regexpp-3.1.0.tgz#206d0ad0a5648cffbdb8ae46438f3dc51c9f78e2" integrity sha512-ZOIzd8yVsQQA7j8GCSlPGXwg5PfmA1mrq0JP4nGhh54LaKN3xdai/vHUDu74pKwV8OxseMS65u2NImosQcSD0Q== -regexpu-core@^4.7.0: +regexpu-core@^4.7.0, regexpu-core@^4.7.1: version "4.7.1" resolved "https://registry.yarnpkg.com/regexpu-core/-/regexpu-core-4.7.1.tgz#2dea5a9a07233298fbf0db91fa9abc4c6e0f8ad6" integrity sha512-ywH2VUraA44DZQuRKzARmw6S66mr48pQVva4LBeRhcOltJ6hExvWly5ZjFLYo67xbIxb6W1q4bAGtgfEl20zfQ== @@ -16115,7 +16505,7 @@ resolve@1.1.7: resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.1.7.tgz#203114d82ad2c5ed9e8e0411b3932875e889e97b" integrity sha1-IDEU2CrSxe2ejgQRs5ModeiJ6Xs= -resolve@^1.1.6, resolve@^1.10.0, resolve@^1.11.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: +resolve@^1.1.6, resolve@^1.10.0, resolve@^1.12.0, resolve@^1.13.1, resolve@^1.17.0, resolve@^1.3.2: version "1.17.0" resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== @@ -16186,7 +16576,7 @@ rimraf@2.6.3: dependencies: glob "^7.1.3" -rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3, rimraf@^2.7.1: +rimraf@^2.2.8, rimraf@^2.5.4, rimraf@^2.6.2, rimraf@^2.6.3: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -16329,7 +16719,7 @@ schema-utils@^1.0.0: ajv-errors "^1.0.0" ajv-keywords "^3.1.0" -schema-utils@^2.0.1, schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: +schema-utils@^2.5.0, schema-utils@^2.6.1, schema-utils@^2.6.5, schema-utils@^2.6.6, schema-utils@^2.7.0, schema-utils@^2.7.1: version "2.7.1" resolved "https://registry.yarnpkg.com/schema-utils/-/schema-utils-2.7.1.tgz#1ca4f32d1b24c590c203b8e7a50bf0ea4cd394d7" integrity sha512-SHiNtMOUGWBQJwzISiVYKu82GiV4QYGePp3odlY1tuKO7gPtphAT5R/py0fA6xtbgLL/RvtJZnU9b8s0F1q0Xg== @@ -16490,16 +16880,6 @@ sha.js@^2.4.0, sha.js@^2.4.8: inherits "^2.0.1" safe-buffer "^5.0.1" -shallow-clone@^0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-0.1.2.tgz#5909e874ba77106d73ac414cfec1ffca87d97060" - integrity sha1-WQnodLp3EG1zrEFM/sH/yofZcGA= - dependencies: - is-extendable "^0.1.1" - kind-of "^2.0.1" - lazy-cache "^0.2.3" - mixin-object "^2.0.1" - shallow-clone@^3.0.0: version "3.0.1" resolved "https://registry.yarnpkg.com/shallow-clone/-/shallow-clone-3.0.1.tgz#8f2981ad92531f55035b01fb230769a40e02efa3" @@ -16897,14 +17277,6 @@ ssri@^6.0.0, ssri@^6.0.1: dependencies: figgy-pudding "^3.5.1" -ssri@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/ssri/-/ssri-7.1.0.tgz#92c241bf6de82365b5c7fb4bd76e975522e1294d" - integrity sha512-77/WrDZUWocK0mvA5NTRQyveUf+wsrIc6vyrxpS8tVvYBcX215QbafrJR3KtkpskIzoFLqqNuuYQvxaMjXJ/0g== - dependencies: - figgy-pudding "^3.5.1" - minipass "^3.1.1" - ssri@^8.0.0: version "8.0.0" resolved "https://registry.yarnpkg.com/ssri/-/ssri-8.0.0.tgz#79ca74e21f8ceaeddfcb4b90143c458b8d988808" @@ -16962,7 +17334,7 @@ store2@^2.7.1: resolved "https://registry.yarnpkg.com/store2/-/store2-2.12.0.tgz#e1f1b7e1a59b6083b2596a8d067f6ee88fd4d3cf" integrity sha512-7t+/wpKLanLzSnQPX8WAcuLCCeuSHoWdQuh9SB3xD0kNOM38DNf+0Oa+wmvxmYueRzkmh6IcdKFtvTa+ecgPDw== -storybook-addon-i18next@^1.2.1: +storybook-addon-i18next@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/storybook-addon-i18next/-/storybook-addon-i18next-1.3.0.tgz#0577c12e9f4ac64aeafa093542031518ed6f59e6" integrity sha512-CyZOr+6cqE73/r2kjlFm+hpDOoVDivZSJtt6czWL2wxUJCwWPdMfHQvDDrAI7YyE0ppyefUu9pesghzY2f3clg== @@ -17143,13 +17515,6 @@ stringify-object@^3.3.0: is-obj "^1.0.1" is-regexp "^1.0.0" -strip-ansi@5.2.0, strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" - integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== - dependencies: - ansi-regex "^4.1.0" - strip-ansi@6.0.0, strip-ansi@^6.0.0: version "6.0.0" resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.0.tgz#0b1571dd7669ccd4f3e06e14ef1eed26225ae532" @@ -17171,6 +17536,13 @@ strip-ansi@^4.0.0: dependencies: ansi-regex "^3.0.0" +strip-ansi@^5.0.0, strip-ansi@^5.1.0, strip-ansi@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-5.2.0.tgz#8c9a536feb6afc962bdfa5b104a5091c1ad9c0ae" + integrity sha512-DuRs1gKbBqsMKIZlrffwlug8MHkcnpjs5VPmL1PAh+mA30U0DTotfDZ0d2UUsXpPmPmMMJ6W773MaA3J+lbiWA== + dependencies: + ansi-regex "^4.1.0" + strip-bom@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" @@ -17308,7 +17680,7 @@ supports-hyperlinks@^2.0.0: has-flag "^4.0.0" supports-color "^7.0.0" -svg-parser@^2.0.0: +svg-parser@^2.0.2: version "2.0.4" resolved "https://registry.yarnpkg.com/svg-parser/-/svg-parser-2.0.4.tgz#fdc2e29e13951736140b76cb122c8ee6630eb6b5" integrity sha512-e4hG1hRwoOdRb37cIMSgzNsxyzKfayW6VOflrwvR+/bzrkyxY/31WkbgnQpgtrNp1SdpJvpUAGTa/ZoiPNDuRQ== @@ -17468,21 +17840,6 @@ terser-webpack-plugin@^1.4.3: webpack-sources "^1.4.0" worker-farm "^1.7.0" -terser-webpack-plugin@^2.1.2: - version "2.3.8" - resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-2.3.8.tgz#894764a19b0743f2f704e7c2a848c5283a696724" - integrity sha512-/fKw3R+hWyHfYx7Bv6oPqmk4HGQcrWLtV3X6ggvPuwPNHSnzvVV51z6OaaCOus4YLjutYGOz3pEpbhe6Up2s1w== - dependencies: - cacache "^13.0.1" - find-cache-dir "^3.3.1" - jest-worker "^25.4.0" - p-limit "^2.3.0" - schema-utils "^2.6.6" - serialize-javascript "^4.0.0" - source-map "^0.6.1" - terser "^4.6.12" - webpack-sources "^1.4.3" - terser-webpack-plugin@^3.0.0: version "3.1.0" resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-3.1.0.tgz#91e6d39571460ed240c0cf69d295bcf30ebf98cb" @@ -17498,7 +17855,7 @@ terser-webpack-plugin@^3.0.0: terser "^4.8.0" webpack-sources "^1.4.3" -terser@^4.1.2, terser@^4.6.12, terser@^4.6.3, terser@^4.8.0: +terser@^4.1.2, terser@^4.6.3, terser@^4.8.0: version "4.8.0" resolved "https://registry.yarnpkg.com/terser/-/terser-4.8.0.tgz#63056343d7c70bb29f3af665865a46fe03a0df17" integrity sha512-EAPipTNeWsb/3wLPeup1tVPaXfIaU68xMnVdPafIL1TV05OhASArYyIfFvnvJCNrR2NIOvDVNNTFRa+Re2MWyw== @@ -17801,7 +18158,7 @@ ts-essentials@^2.0.3: resolved "https://registry.yarnpkg.com/ts-essentials/-/ts-essentials-2.0.12.tgz#c9303f3d74f75fa7528c3d49b80e089ab09d8745" integrity sha512-3IVX4nI6B5cc31/GFFE+i8ey/N2eA0CZDbo6n0yrz0zDX8ZJ8djmU1p+XRz7G3is0F3bB3pu2pAroFdAWQKU3w== -ts-pnp@^1.1.2, ts-pnp@^1.1.6: +ts-pnp@^1.1.6: version "1.2.0" resolved "https://registry.yarnpkg.com/ts-pnp/-/ts-pnp-1.2.0.tgz#a500ad084b0798f1c3071af391e65912c86bca92" integrity sha512-csd+vJOb/gkzvcCHgTGSChYpy5f1/XKNsmvBGO4JXS+z1v2HobugDz4s1IeFXM3wZB44uczs+eazB5Q/ccdhQw== @@ -17821,6 +18178,11 @@ tslib@^1.10.0, tslib@^1.8.1, tslib@^1.9.0, tslib@^1.9.3: resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.13.0.tgz#c881e13cc7015894ed914862d276436fa9a47043" integrity sha512-i/6DQjL8Xf3be4K/E6Wgpekn5Qasl1usyw++dAA35Ue5orEn65VIxOA+YvNNl9HV3qv70T7CNwjODHZrLwvd1Q== +tslib@^2.0.0: + version "2.0.3" + resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.3.tgz#8e0741ac45fc0c226e58a17bfc3e64b9bc6ca61c" + integrity sha512-uZtkfKblCEQtZKBF6EBXVZeQNl82yqtDQdv+eck8u7tdPxjLu2/lp5/uPW+um2tpuxINHWy3GhiccY7QgEaVHQ== + tslib@^2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.0.1.tgz#410eb0d113e5b6356490eec749603725b021b43e" @@ -17902,6 +18264,16 @@ type-is@~1.6.17, type-is@~1.6.18: media-typer "0.3.0" mime-types "~2.1.24" +type@^1.0.1: + version "1.2.0" + resolved "https://registry.yarnpkg.com/type/-/type-1.2.0.tgz#848dd7698dafa3e54a6c479e759c4bc3f18847a0" + integrity sha512-+5nt5AAniqsCnu2cEQQdpzCAh33kVx8n0VoFidKpB1dVVLAN/F+bgVOqOJqOnEnrhp222clB5p3vUlD+1QAnfg== + +type@^2.0.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/type/-/type-2.1.0.tgz#9bdc22c648cf8cf86dd23d32336a41cfb6475e3f" + integrity sha512-G9absDWvhAWCV2gmF1zKud3OyC61nZDwWvBL2DApaVFogI07CprggiQAOOjvp2NRjYWFzPyu7vwtDrQFq8jeSA== + typed-styles@^0.0.7: version "0.0.7" resolved "https://registry.yarnpkg.com/typed-styles/-/typed-styles-0.0.7.tgz#93392a008794c4595119ff62dde6809dbc40a3d9" @@ -18119,15 +18491,6 @@ urix@^0.1.0: resolved "https://registry.yarnpkg.com/urix/-/urix-0.1.0.tgz#da937f7a62e21fec1fd18d49b35c2935067a6c72" integrity sha1-2pN/emLiH+wf0Y1Js1wpNQZ6bHI= -url-loader@^2.0.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-2.3.0.tgz#e0e2ef658f003efb8ca41b0f3ffbf76bab88658b" - integrity sha512-goSdg8VY+7nPZKUEChZSEtW5gjbS66USIGCeSJ1OVOJ7Yfuh/36YxCwMi5HVEJh6mqUYOoy3NJ0vlOMrWsSHog== - dependencies: - loader-utils "^1.2.3" - mime "^2.4.4" - schema-utils "^2.5.0" - url-loader@^4.0.0: version "4.1.0" resolved "https://registry.yarnpkg.com/url-loader/-/url-loader-4.1.0.tgz#c7d6b0d6b0fccd51ab3ffc58a78d32b8d89a7be2" @@ -18244,11 +18607,16 @@ utils-merge@1.0.1: resolved "https://registry.yarnpkg.com/utils-merge/-/utils-merge-1.0.1.tgz#9f95710f50a267947b2ccc124741c1028427e713" integrity sha1-n5VxD1CiZ5R7LMwSR0HBAoQn5xM= -uuid@^3.0.1, uuid@^3.3.2, uuid@^3.4.0: +uuid@^3.0.1, uuid@^3.1.0, uuid@^3.3.2, uuid@^3.4.0: version "3.4.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== +uuid@^8.0.0: + version "8.3.1" + resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.1.tgz#2ba2e6ca000da60fce5a196954ab241131e05a31" + integrity sha512-FOmRr+FmWEIG8uhZv6C2bTgEVXsHk08kE7mPlrBbEe+c3r9pjceVPgupIfNIhc4yx55H69OXANrUaSuu9eInKg== + uuid@^8.3.0: version "8.3.0" resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.0.tgz#ab738085ca22dc9a8c92725e459b1d507df5d6ea" @@ -18500,6 +18868,16 @@ webpack-hot-middleware@^2.25.0: querystring "^0.2.0" strip-ansi "^3.0.0" +webpack-log@^1.1.2: + version "1.2.0" + resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-1.2.0.tgz#a4b34cda6b22b518dbb0ab32e567962d5c72a43d" + integrity sha512-U9AnICnu50HXtiqiDxuli5gLB5PGBo7VvcHx36jRZHwK4vzOYLbImqT4lwWwoMHdQWwEKw736fCHEekokTEKHA== + dependencies: + chalk "^2.1.0" + log-symbols "^2.1.0" + loglevelnext "^1.0.1" + uuid "^3.1.0" + webpack-log@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/webpack-log/-/webpack-log-2.0.0.tgz#5b7928e0637593f119d32f6227c1e0ac31e1b47f" @@ -18516,14 +18894,14 @@ webpack-sources@^1.1.0, webpack-sources@^1.4.0, webpack-sources@^1.4.1, webpack- source-list-map "^2.0.0" source-map "~0.6.1" -webpack-virtual-modules@^0.2.0, webpack-virtual-modules@^0.2.2: +webpack-virtual-modules@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/webpack-virtual-modules/-/webpack-virtual-modules-0.2.2.tgz#20863dc3cb6bb2104729fff951fbe14b18bd0299" integrity sha512-kDUmfm3BZrei0y+1NTHJInejzxfhtU8eDj2M7OKb2IWrPFAeO1SOH2KuQ68MSZu9IGEHcxbkKKR1v18FrUSOmA== dependencies: debug "^3.0.0" -webpack@^4.33.0, webpack@^4.38.0, webpack@^4.41.5, webpack@^4.43.0: +webpack@^4.41.5, webpack@^4.43.0: version "4.44.2" resolved "https://registry.yarnpkg.com/webpack/-/webpack-4.44.2.tgz#6bfe2b0af055c8b2d1e90ed2cd9363f841266b72" integrity sha512-6KJVGlCxYdISyurpQ0IPTklv+DULv05rs2hseIXer6D7KrUicRDLFb4IUM1S6LUAKypPM/nSiVSuv8jHu1m3/Q== From 5311cd527bb343cc0cd51340e4e0697e174bbc8e Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Wed, 18 Nov 2020 11:10:09 +0100 Subject: [PATCH 15/83] Fix test for jest 26 --- .../components/buttons/DeletePermissionButton.test.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-ui/ui-webapp/src/repos/permissions/components/buttons/DeletePermissionButton.test.tsx b/scm-ui/ui-webapp/src/repos/permissions/components/buttons/DeletePermissionButton.test.tsx index 2e34e07160..f8f6d9ddea 100644 --- a/scm-ui/ui-webapp/src/repos/permissions/components/buttons/DeletePermissionButton.test.tsx +++ b/scm-ui/ui-webapp/src/repos/permissions/components/buttons/DeletePermissionButton.test.tsx @@ -34,7 +34,7 @@ import DeletePermissionButton from "./DeletePermissionButton"; jest.mock("@scm-manager/ui-components", () => ({ ConfirmAlert: (({ children }) =>
{children}
) as FC, - DeleteButton: require.requireActual("@scm-manager/ui-components").DeleteButton + DeleteButton: jest.requireActual("@scm-manager/ui-components").DeleteButton })); describe("DeletePermissionButton", () => { From 9f0a93978c4438c53f4c54b3695e1192d2ab1566 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Wed, 18 Nov 2020 02:30:26 +0100 Subject: [PATCH 16/83] Add examples to core resources and create DTO adapted to schemata --- .../scm/api/v2/resources/ApiKeyResource.java | 19 +++++- .../api/v2/resources/BranchRootResource.java | 19 +++++- .../scm/api/v2/resources/ConfigResource.java | 20 +++++- .../scm/api/v2/resources/CreateApiKeyDto.java | 44 +++++++++++++ .../api/v2/resources/CreateRepositoryDto.java | 57 ++++++++++++++++ .../v2/resources/CreateRepositoryRoleDto.java | 47 ++++++++++++++ .../scm/api/v2/resources/CreateUserDto.java | 54 +++++++++++++++ .../scm/api/v2/resources/MeResource.java | 19 +++++- .../NamespacePermissionResource.java | 42 ++++++++++-- .../RepositoryCollectionResource.java | 19 +++++- .../RepositoryPermissionRootResource.java | 35 +++++++++- .../api/v2/resources/RepositoryResource.java | 19 +++++- .../RepositoryRoleCollectionResource.java | 19 +++++- .../v2/resources/RepositoryRoleResource.java | 19 +++++- .../scm/api/v2/resources/UpdateConfigDto.java | 65 +++++++++++++++++++ .../api/v2/resources/UpdateRepositoryDto.java | 57 ++++++++++++++++ .../v2/resources/UpdateRepositoryRoleDto.java | 49 ++++++++++++++ .../scm/api/v2/resources/UpdateUserDto.java | 57 ++++++++++++++++ .../v2/resources/UserCollectionResource.java | 19 +++++- .../v2/resources/UserPermissionResource.java | 19 +++++- .../scm/api/v2/resources/UserResource.java | 53 ++++++++++++++- 21 files changed, 731 insertions(+), 20 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java index e2faac3e37..2f971a435d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java @@ -28,7 +28,9 @@ import de.otto.edison.hal.HalRepresentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.ContextEntry; import sonia.scm.security.ApiKey; @@ -131,7 +133,22 @@ public class ApiKeyResource { @Path("") @Consumes(VndMediaType.API_KEY) @Produces(MediaType.TEXT_PLAIN) - @Operation(summary = "Create new api key for the current user", description = "Creates a new api key for the given user with the role specified in the given key.", tags = "User") + @Operation( + summary = "Create new api key for the current user", + description = "Creates a new api key for the given user with the role specified in the given key.", + tags = "User", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.API_KEY, + schema = @Schema(implementation = CreateApiKeyDto.class), + examples = @ExampleObject( + name = "Create a new api key named readKey with READ permission role", + value = "{\n \"displayName\":\"readKey\",\n \"permissionRole\":\"READ\"\n}", + summary = "Create new api key" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "create success", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index a5ce4d951e..2988ef3697 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -28,7 +28,9 @@ import com.google.common.base.Strings; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.PageResult; import sonia.scm.repository.Branch; @@ -209,7 +211,22 @@ public class BranchRootResource { @POST @Path("") @Consumes(VndMediaType.BRANCH_REQUEST) - @Operation(summary = "Create branch", description = "Creates a new branch.", tags = "Repository") + @Operation( + summary = "Create branch", + description = "Creates a new branch.", + tags = "Repository", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.BRANCH_REQUEST, + schema = @Schema(implementation = BranchRequestDto.class), + examples = @ExampleObject( + name = "Branch a new develop branch from main", + value = "{\n \"parent\":\"main\",\n \"name\":\"develop\"\n}", + summary = "Create a branch" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "create success", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java index 5575af06fb..35c363619b 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java @@ -29,7 +29,9 @@ import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import sonia.scm.config.ConfigurationPermissions; @@ -45,6 +47,7 @@ import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; +import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; import java.util.function.Consumer; @@ -122,7 +125,22 @@ public class ConfigResource { @PUT @Path("") @Consumes(VndMediaType.CONFIG) - @Operation(summary = "Update instance configuration", description = "Modifies the instance configuration.", tags = "Instance configuration") + @Operation( + summary = "Update instance configuration", + description = "Modifies the instance configuration.", + tags = "Instance configuration", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.CONFIG, + schema = @Schema(implementation = UpdateConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one", + value = "{\n \"realmDescription\":\"SONIA :: SCM-Manager\",\n \"dateFormat\":\"YYYY-MM-DD HH:mm:ss\",\n \"baseUrl\":\"http://localhost:8081/scm\",\n \"loginAttemptLimit\":-1,\n \"pluginUrl\":\"https://plugin-center-api.scm-manager.org/api/v1/plugins/{version}?os={os}&arch={arch}\",\n \"loginAttemptLimitTimeout\":500,\n \"namespaceStrategy\":\"CustomNamespaceStrategy\",\n \"loginInfoUrl\":\"https://login-info.scm-manager.org/api/v1/login-info\",\n \"releaseFeedUrl\":\"https://scm-manager.org/download/rss.xml\",\n \"mailDomainName\":\"scm-manager.local\"\n}", + summary = "Simple update configuration" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse(responseCode = "403", description = "not authorized, the current user does not have the \"configuration:write\" privilege") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java new file mode 100644 index 0000000000..a78719d081 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java @@ -0,0 +1,44 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class CreateApiKeyDto { + @NotEmpty + private String displayName; + @NotEmpty + private String permissionRole; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java new file mode 100644 index 0000000000..420785449c --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java @@ -0,0 +1,57 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; +import java.util.List; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class CreateRepositoryDto { + private String namespace; + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + private String name; + @NotEmpty + private String type; + @Email + private String contact; + private String description; + private List healthCheckFailures; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java new file mode 100644 index 0000000000..6b70fb3f22 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java @@ -0,0 +1,47 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; +import java.util.Collection; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class CreateRepositoryRoleDto { + @NotEmpty + private String name; + private boolean system; + @NoBlankStrings @NotEmpty + private Collection verbs; + private String type; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java new file mode 100644 index 0000000000..54af7edb99 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java @@ -0,0 +1,54 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor @Getter @Setter +public class CreateUserDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + private String name; + @NotEmpty + private String displayName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Email + private String mail; + private boolean external; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String password; + private boolean active; + private String type; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java index d93acf0159..966a9c719f 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import org.apache.shiro.authc.credential.PasswordService; @@ -105,7 +107,22 @@ public class MeResource { @PUT @Path("password") @Consumes(VndMediaType.PASSWORD_CHANGE) - @Operation(summary = "Change password", description = "Change password of the current user.", tags = "Current user") + @Operation( + summary = "Change password", + description = "Change password of the current user.", + tags = "Current user", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.PASSWORD_CHANGE, + schema = @Schema(implementation = PasswordChangeDto.class), + examples = @ExampleObject( + name = "Change password to a more difficult one", + value = "{ \"oldPassword\":\"scmadmin\",\n \"newPassword\":\"5cm4dm1n\"\n}", + summary = "Simple change password" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse( diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java index 3fbb2a6a13..0d43f72484 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java @@ -28,7 +28,9 @@ import de.otto.edison.hal.HalRepresentation; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import lombok.extern.slf4j.Slf4j; import sonia.scm.NotFoundException; @@ -89,7 +91,22 @@ public class NamespacePermissionResource { @POST @Path("") @Consumes(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "Create namespace-specific permission", description = "Adds a new permission to the namespace for the user or group.", tags = {"Namespace", "Permissions"}) + @Operation( + summary = "Create namespace-specific permission", + description = "Adds a new permission to the namespace for the user or group.", + tags = {"Namespace", "Permissions"}, + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_PERMISSION, + schema = @Schema(implementation = PermissionListDto.class), + examples = @ExampleObject( + name = "Add read permissions for repositories and pull requests to manager group", + value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", + summary = "Add a permission" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "creates", @@ -135,7 +152,7 @@ public class NamespacePermissionResource { @GET @Path("{permission-name}") @Produces(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "Get single repository-specific permission", description = "Get the searched permission with permission name related to a repository.", tags = {"Repository", "Permissions"}) + @Operation(summary = "Get single namespace-specific permission", description = "Get the searched permission with permission name related to a repository.", tags = {"Namespace", "Permissions"}) @ApiResponse( responseCode = "200", description = "success", @@ -180,7 +197,7 @@ public class NamespacePermissionResource { @GET @Path("") @Produces(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "List of namespace-specific permissions", description = "Get all permissions related to a namespace.", tags = {"Repository", "Permissions"}) + @Operation(summary = "List of namespace-specific permissions", description = "Get all permissions related to a namespace.", tags = {"Namespace", "Permissions"}) @ApiResponse( responseCode = "200", description = "success", @@ -220,7 +237,22 @@ public class NamespacePermissionResource { @PUT @Path("{permission-name}") @Consumes(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "Update repository-specific permission", description = "Update a permission to the user or group managed by the repository.", tags = {"Repository", "Permissions"}) + @Operation( + summary = "Update namespace-specific permission", + description = "Update a permission to the user or group managed by the repository.", + tags = {"Namespace", "Permissions"}, + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_PERMISSION, + schema = @Schema(implementation = PermissionListDto.class), + examples = @ExampleObject( + name = "Update permissions of manager group", + value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", + summary = "Update a permission" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse( @@ -266,7 +298,7 @@ public class NamespacePermissionResource { */ @DELETE @Path("{permission-name}") - @Operation(summary = "Delete repository-specific permission", description = "Delete a permission with the given name.", tags = {"Repository", "Permissions"}) + @Operation(summary = "Delete namespace-specific permission", description = "Delete a permission with the given name.", tags = {"Namespace", "Permissions"}) @ApiResponse(responseCode = "204", description = "delete success or nothing to delete") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse(responseCode = "403", description = "not authorized") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index 72330587ee..f60fa6d6ff 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.apache.shiro.SecurityUtils; import sonia.scm.repository.Repository; @@ -160,7 +162,22 @@ public class RepositoryCollectionResource { @POST @Path("") @Consumes(VndMediaType.REPOSITORY) - @Operation(summary = "Create repository", description = "Creates a new repository.", tags = "Repository") + @Operation( + summary = "Create repository", + description = "Creates a new repository.", + tags = "Repository", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY, + schema = @Schema(implementation = CreateRepositoryDto.class), + examples = @ExampleObject( + name = "Create a new git repository named scm-manager in scmadmin namespace", + value = "{\n \"namespace\":\"scmadmin\",\n \"name\":\"scm-manager\",\n \"type\":\"git\"\n}", + summary = "Create a simple git repository" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "create success", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java index 185ed8df07..48d17279e3 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import lombok.extern.slf4j.Slf4j; import sonia.scm.AlreadyExistsException; @@ -91,7 +93,22 @@ public class RepositoryPermissionRootResource { @POST @Path("") @Consumes(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "Create repository-specific permission", description = "Adds a new permission to the user or group managed by the repository.", tags = {"Repository", "Permissions"}) + @Operation( + summary = "Create repository-specific permission", + description = "Adds a new permission to the user or group managed by the repository.", + tags = {"Repository", "Permissions"}, + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_PERMISSION, + schema = @Schema(implementation = PermissionListDto.class), + examples = @ExampleObject( + name = "Add read permissions for repository and pull requests to manager group", + value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", + summary = "Add a permission" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "creates", @@ -228,7 +245,21 @@ public class RepositoryPermissionRootResource { @PUT @Path("{permission-name}") @Consumes(VndMediaType.REPOSITORY_PERMISSION) - @Operation(summary = "Update repository-specific permission", description = "Update a permission to the user or group managed by the repository.", tags = {"Repository", "Permissions"}) + @Operation( + summary = "Update repository-specific permission", + description = "Update a permission to the user or group managed by the repository.", + tags = {"Repository", "Permissions"}, + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_PERMISSION, + schema = @Schema(implementation = PermissionListDto.class), + examples = @ExampleObject( + name = "Update permissions of manager group", + value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", + summary = "Update a permission" + ) + ) + )) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse( diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 12cc362517..50bb7764ca 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -26,7 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; @@ -151,7 +153,22 @@ public class RepositoryResource { @PUT @Path("") @Consumes(VndMediaType.REPOSITORY) - @Operation(summary = "Update repository", description = "Modifies the repository for the given namespace and name.", tags = "Repository") + @Operation( + summary = "Update repository", + description = "Modifies the repository for the given namespace and name.", + tags = "Repository", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY, + schema = @Schema(implementation = UpdateRepositoryDto.class), + examples = @ExampleObject( + name = "Update repository description", + value = "{\n \"namespace\":\"scmadmin\",\n \"name\":\"scm-manager\",\n \"description\":\"The easiest way to share and manage your Git, Mercurial and Subversion repositories.\",\n \"type\":\"git\",\n \"lastModified\":\"2020-06-05T14:42:49.000Z\"\n}", + summary = "Update a repository" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body, e.g. illegal change of namespace or name") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java index 2d65720ca2..50c4c0ede7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; @@ -114,7 +116,22 @@ public class RepositoryRoleCollectionResource { @POST @Path("") @Consumes(VndMediaType.REPOSITORY_ROLE) - @Operation(summary = "Create repository role", description = "Creates a new repository role.", tags = "Repository role") + @Operation( + summary = "Create repository role", + description = "Creates a new repository role.", + tags = "Repository role", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_ROLE, + schema = @Schema(implementation = CreateRepositoryRoleDto.class), + examples = @ExampleObject( + name = "Create repository role named hero with read and delete repository permission", + value = "{\n \"name\":\"hero\",\n \"system\":false,\n \"verbs\":[\"read\",\"delete\"]\n}", + summary = "Add a repository role" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "create success", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java index c76e8b4aa6..31179f0c2d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java @@ -26,7 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; @@ -128,7 +130,22 @@ public class RepositoryRoleResource { @PUT @Path("") @Consumes(VndMediaType.REPOSITORY_ROLE) - @Operation(summary = "Update repository role", description = "Modifies the repository role for the given name.", tags = "Repository role") + @Operation( + summary = "Update repository role", + description = "Modifies the repository role for the given name.", + tags = "Repository role", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.REPOSITORY_ROLE, + schema = @Schema(implementation = UpdateRepositoryRoleDto.class), + examples = @ExampleObject( + name = "Update repository role named hero with this verbs", + value = "{\n \"name\":\"hero\",\n \"system\":false,\n \"verbs\":[\"read\",\"pull\",\"write\",\"push\",\"delete\"],\n \"lastModified\":\"2020-06-05T14:42:49.000Z\"\n}", + summary = "Update a repository role" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body, e.g. illegal change of repository role name") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java new file mode 100644 index 0000000000..7574210e3f --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java @@ -0,0 +1,65 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.security.AnonymousMode; + +import java.util.Set; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor +@Getter +@Setter +public class UpdateConfigDto { + + private String proxyPassword; + private int proxyPort; + private String proxyServer; + private String proxyUser; + private boolean enableProxy; + private String realmDescription; + private boolean disableGroupingGrid; + private String dateFormat; + private boolean anonymousAccessEnabled; + private AnonymousMode anonymousMode; + private String baseUrl; + private boolean forceBaseUrl; + private int loginAttemptLimit; + private Set proxyExcludes; + private boolean skipFailedAuthenticators; + private String pluginUrl; + private long loginAttemptLimitTimeout; + private boolean enabledXsrfProtection; + private boolean enabledUserConverter; + private String namespaceStrategy; + private String loginInfoUrl; + private String releaseFeedUrl; + private String mailDomainName; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java new file mode 100644 index 0000000000..2dc2d89a1c --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java @@ -0,0 +1,57 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; +import java.util.List; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class UpdateRepositoryDto { + private String namespace; + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + private String name; + @NotEmpty + private String type; + @Email + private String contact; + private String description; + private List healthCheckFailures; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java new file mode 100644 index 0000000000..81193195fe --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java @@ -0,0 +1,49 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotEmpty; +import java.time.Instant; +import java.util.Collection; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class UpdateRepositoryRoleDto { + @NotEmpty + private String name; + private boolean system; + @NoBlankStrings @NotEmpty + private Collection verbs; + private String type; + private Instant lastModified; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java new file mode 100644 index 0000000000..28e011f4cd --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java @@ -0,0 +1,57 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor @Getter @Setter +public class UpdateUserDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + private String name; + @NotEmpty + private String displayName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Email + private String mail; + private boolean external; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String password; + private boolean active; + private String type; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index 1b604a11f2..a81aa3fc7a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.search.SearchRequest; @@ -125,7 +127,22 @@ public class UserCollectionResource { @POST @Path("") @Consumes(VndMediaType.USER) - @Operation(summary = "Create user", description = "Creates a new user.", tags = "User") + @Operation( + summary = "Create user", + description = "Creates a new user.", + tags = "User", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.USER, + schema = @Schema(implementation = CreateUserDto.class), + examples = @ExampleObject( + name = "Create an internal user.", + value = "{\n \"name\":\"mustermann\",\n \"displayName\":\"Max Mustermann\",\n \"mail\":\"m.mustermann@scm-manager.org\",\n \"external\":false,\n \"password\":\"muster42*\",\n \"active\":true\n}", + summary = "Create a simple user" + ) + ) + ) + ) @ApiResponse( responseCode = "201", description = "create success", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java index fe2b5d3596..ee27b26e0d 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java @@ -26,7 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.security.PermissionAssigner; import sonia.scm.security.PermissionDescriptor; @@ -106,7 +108,22 @@ public class UserPermissionResource { @PUT @Path("") @Consumes(VndMediaType.PERMISSION_COLLECTION) - @Operation(summary = "Update user permissions", description = "Sets permissions for a user. Overwrites all existing permissions.", tags = {"User", "Permissions"}) + @Operation( + summary = "Update user permissions", + description = "Sets permissions for a user. Overwrites all existing permissions.", + tags = {"User", "Permissions"}, + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.PERMISSION_COLLECTION, + schema = @Schema(implementation = PermissionListDto.class), + examples = @ExampleObject( + name = "Add read permissions for all repositories and pull requests", + value = "{\n \"permissions\":[\"repository:read,pull:*\",\"repository:readPullRequest:*\"]\n}", + summary = "Simple update user permissions" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index 679224cde8..c4a6d08a28 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -26,7 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.user.User; @@ -137,7 +139,22 @@ public class UserResource { @PUT @Path("") @Consumes(VndMediaType.USER) - @Operation(summary = "Update user", description = "Modifies the user for the given id.", tags = "User") + @Operation( + summary = "Update user", + description = "Modifies the user for the given id.", + tags = "User", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.USER, + schema = @Schema(implementation = UpdateUserDto.class), + examples = @ExampleObject( + name = "Update the email address of user mustermann.", + value = "{\n \"name\":\"mustermann\",\n \"displayName\":\"Max Mustermann\",\n \"mail\":\"maxmustermann@scm-manager.org\",\n \"external\":false,\n \"active\":true,\n \"lastModified\":\"2020-06-05T14:42:49.000Z\"\n}", + summary = "Update a user" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body, e.g. illegal change of id/user name") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @@ -168,7 +185,22 @@ public class UserResource { @PUT @Path("password") @Consumes(VndMediaType.PASSWORD_OVERWRITE) - @Operation(summary = "Modifies a user password", description = "Lets admins modifies the user password for the given id.", tags = "User") + @Operation( + summary = "Modifies a user password", + description = "Lets admins modifies the user password for the given id.", + tags = "User", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.PASSWORD_OVERWRITE, + schema = @Schema(implementation = PasswordOverwriteDto.class), + examples = @ExampleObject( + name = "Overwrites current password with a more difficult one", + value = "{ \"newPassword\":\"5cm4dm1n\"\n}", + summary = "Set new password" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body, e.g. the user type is not xml or the given oldPassword do not match the stored one") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @@ -199,7 +231,22 @@ public class UserResource { @PUT @Path("convert-to-internal") @Consumes(VndMediaType.USER) - @Operation(summary = "Converts an external user to internal", description = "Converts an external user to an internal one and set the new password.", tags = "User") + @Operation( + summary = "Converts an external user to internal", + description = "Converts an external user to an internal one and set the new password.", + tags = "User", + requestBody = @RequestBody( + content = @Content( + mediaType = VndMediaType.USER, + schema = @Schema(implementation = PasswordOverwriteDto.class), + examples = @ExampleObject( + name = "Converts an external user to an internal one and set the new password.", + value = "{ \"newPassword\":\"5cm4dm1n\"\n}", + summary = "Simple converts an user" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "400", description = "invalid body, e.g. the new password is missing") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") From 3384707517e2d611ee8e54fb6a25b77f68c2bc88 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Wed, 18 Nov 2020 11:34:39 +0100 Subject: [PATCH 17/83] Add examples to scm-plugins resources and create DTO adapted to schemata --- .../api/v2/resources/GitConfigResource.java | 20 +++++++- .../GitRepositoryConfigResource.java | 19 ++++++- .../api/v2/resources/UpdateGitConfigDto.java | 51 +++++++++++++++++++ .../UpdateGitRepositoryConfigDto.java | 39 ++++++++++++++ .../HgConfigAutoConfigurationResource.java | 19 ++++++- .../api/v2/resources/HgConfigResource.java | 20 +++++++- .../api/v2/resources/UpdateHgConfigDto.java | 47 +++++++++++++++++ .../api/v2/resources/SvnConfigResource.java | 20 +++++++- .../api/v2/resources/UpdateSvnConfigDto.java | 42 +++++++++++++++ 9 files changed, 272 insertions(+), 5 deletions(-) create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java create mode 100644 scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java create mode 100644 scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java index 71d97f27be..e366a35abb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import sonia.scm.config.ConfigurationPermissions; @@ -116,7 +118,23 @@ public class GitConfigResource { @PUT @Path("") @Consumes(GitVndMediaType.GIT_CONFIG) - @Operation(summary = "Modify git configuration", description = "Modifies the global git configuration.", tags = "Git", operationId = "git_put_config") + @Operation( + summary = "Modify git configuration", + description = "Modifies the global git configuration.", + tags = "Git", + operationId = "git_put_config", + requestBody = @RequestBody( + content = @Content( + mediaType = GitVndMediaType.GIT_CONFIG, + schema = @Schema(implementation = UpdateGitConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one.", + value = "{\n \"disabled\":false,\n \"gcExpression\":null,\n \"nonFastForwardDisallowed\":false,\n \"defaultBranch\":\"main\"\n}", + summary = "Simple update configuration" + ) + ) + ) + ) @ApiResponse(responseCode = "204", description = "update success") @ApiResponse(responseCode = "401", description = "not authenticated / invalid credentials") @ApiResponse(responseCode = "403", description = "not authorized, the current user does not have the \"configuration:write:git\" privilege") diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java index 3aa348d13a..81e8b79d60 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java @@ -26,7 +26,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import org.slf4j.Logger; import org.slf4j.LoggerFactory; @@ -106,7 +108,22 @@ public class GitRepositoryConfigResource { @PUT @Path("/") @Consumes(GitVndMediaType.GIT_REPOSITORY_CONFIG) - @Operation(summary = "Modifies git repository configuration", description = "Modifies the repository related git configuration.", tags = "Git") + @Operation( + summary = "Modifies git repository configuration", + description = "Modifies the repository related git configuration.", + tags = "Git", + requestBody = @RequestBody( + content = @Content( + mediaType = GitVndMediaType.GIT_REPOSITORY_CONFIG, + schema = @Schema(implementation = UpdateGitRepositoryConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one.", + value = "{\n \"defaultBranch\":\"main\"\n}", + summary = "Simple update configuration" + ) + ) + ) + ) @ApiResponse( responseCode = "204", description = "update success" diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java new file mode 100644 index 0000000000..5893e93a40 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java @@ -0,0 +1,51 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor +@Getter +@Setter +public class UpdateGitConfigDto { + private boolean disabled = false; + private String gcExpression; + private boolean nonFastForwardDisallowed; + @NotEmpty + @Length(min = 1, max = 100) + @Pattern(regexp = VALID_BRANCH_NAMES) + private String defaultBranch; +} diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java new file mode 100644 index 0000000000..491208fae9 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java @@ -0,0 +1,39 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class UpdateGitRepositoryConfigDto { + private String defaultBranch; +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigAutoConfigurationResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigAutoConfigurationResource.java index 2d8c385128..70eb367d3c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigAutoConfigurationResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigAutoConfigurationResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import com.google.inject.Inject; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.HgConfig; @@ -83,7 +85,22 @@ public class HgConfigAutoConfigurationResource { @PUT @Path("") @Consumes(HgVndMediaType.CONFIG) - @Operation(summary = "Modifies hg configuration and installs hg binary", description = "Modifies the mercurial config and installs the mercurial binary.", tags = "Mercurial") + @Operation( + summary = "Modifies hg configuration and installs hg binary", + description = "Modifies the mercurial config and installs the mercurial binary.", + tags = "Mercurial", + requestBody = @RequestBody( + content = @Content( + mediaType = HgVndMediaType.CONFIG, + schema = @Schema(implementation = UpdateHgConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one and installs the mercurial binary.", + value = "{\n \"disabled\":false,\n \"hgBinary\":\"hg\",\n \"pythonBinary\":\"python\",\n \"pythonPath\":\"\",\n \"encoding\":\"UTF-8\",\n \"useOptimizedBytecode\":false,\n \"showRevisionInId\":false,\n \"disableHookSSLValidation\":false,\n \"enableHttpPostArgs\":false\n}", + summary = "Simple update configuration and installs binary" + ) + ) + ) + ) @ApiResponse( responseCode = "204", description = "update success" diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java index cb2ac532ab..0c715ce8c3 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import sonia.scm.config.ConfigurationPermissions; @@ -121,7 +123,23 @@ public class HgConfigResource { @PUT @Path("") @Consumes(HgVndMediaType.CONFIG) - @Operation(summary = "Modify hg configuration", description = "Modifies the global mercurial configuration.", tags = "Mercurial", operationId = "hg_put_config") + @Operation( + summary = "Modify hg configuration", + description = "Modifies the global mercurial configuration.", + tags = "Mercurial", + operationId = "hg_put_config", + requestBody = @RequestBody( + content = @Content( + mediaType = HgVndMediaType.CONFIG, + schema = @Schema(implementation = UpdateHgConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one.", + value = "{\n \"disabled\":false,\n \"hgBinary\":\"hg\",\n \"pythonBinary\":\"python\",\n \"pythonPath\":\"\",\n \"encoding\":\"UTF-8\",\n \"useOptimizedBytecode\":false,\n \"showRevisionInId\":false,\n \"disableHookSSLValidation\":false,\n \"enableHttpPostArgs\":false\n}", + summary = "Simple update configuration" + ) + ) + ) + ) @ApiResponse( responseCode = "204", description = "update success" diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java new file mode 100644 index 0000000000..18ac833c76 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java @@ -0,0 +1,47 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor +@Getter +@Setter +public class UpdateHgConfigDto { + private boolean disabled; + private String hgBinary; + private String pythonBinary; + private String pythonPath; + private String encoding; + private boolean useOptimizedBytecode; + private boolean showRevisionInId; + private boolean disableHookSSLValidation; + private boolean enableHttpPostArgs; +} diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java index 3e45bb6c43..8197c87b7b 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java @@ -27,7 +27,9 @@ package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; +import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; +import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; import sonia.scm.config.ConfigurationPermissions; @@ -112,7 +114,23 @@ public class SvnConfigResource { @PUT @Path("") @Consumes(SvnVndMediaType.SVN_CONFIG) - @Operation(summary = "Modify svn configuration", description = "Modifies the global subversion configuration.", tags = "Subversion", operationId = "svn_put_config") + @Operation( + summary = "Modify svn configuration", + description = "Modifies the global subversion configuration.", + tags = "Subversion", + operationId = "svn_put_config", + requestBody = @RequestBody( + content = @Content( + mediaType = SvnVndMediaType.SVN_CONFIG, + schema = @Schema(implementation = UpdateSvnConfigDto.class), + examples = @ExampleObject( + name = "Overwrites current configuration with this one.", + value = "{\n \"disabled\":false,\n \"compatibility\":\"NONE\",\n \"enabledGZip\":false\n}", + summary = "Simple update configuration" + ) + ) + ) + ) @ApiResponse( responseCode = "204", description = "update success" diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java new file mode 100644 index 0000000000..af140648bd --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java @@ -0,0 +1,42 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import sonia.scm.repository.Compatibility; + +/** + * This class is currently only used in the openapi scheme + */ +@NoArgsConstructor +@Getter +@Setter +public class UpdateSvnConfigDto { + private boolean disabled; + private Compatibility compatibility; + private boolean enabledGZip; +} From ec87ccca9d71f42b7a153e2dbbb116b592b26b0e Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Wed, 18 Nov 2020 11:56:56 +0100 Subject: [PATCH 18/83] Minor corrections to resources and dtos --- .../scm/api/v2/resources/ApiKeyResource.java | 2 +- .../api/v2/resources/BranchRootResource.java | 2 +- .../scm/api/v2/resources/ConfigResource.java | 2 +- .../scm/api/v2/resources/MeResource.java | 2 +- .../NamespacePermissionResource.java | 8 ++-- .../RepositoryCollectionResource.java | 4 +- .../RepositoryPermissionRootResource.java | 10 ++--- .../api/v2/resources/RepositoryRenameDto.java | 2 +- .../api/v2/resources/RepositoryResource.java | 2 +- .../RepositoryRoleCollectionResource.java | 2 +- .../v2/resources/RepositoryRoleResource.java | 2 +- .../v2/resources/UpdatePermissionListDto.java | 43 +++++++++++++++++++ .../v2/resources/UserPermissionResource.java | 4 +- .../scm/api/v2/resources/UserResource.java | 2 +- 14 files changed, 65 insertions(+), 22 deletions(-) create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java index 2f971a435d..bd13b7e5f6 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java @@ -142,7 +142,7 @@ public class ApiKeyResource { mediaType = VndMediaType.API_KEY, schema = @Schema(implementation = CreateApiKeyDto.class), examples = @ExampleObject( - name = "Create a new api key named readKey with READ permission role", + name = "Create a new api key named readKey with READ permission role.", value = "{\n \"displayName\":\"readKey\",\n \"permissionRole\":\"READ\"\n}", summary = "Create new api key" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java index 2988ef3697..258dd1e3e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchRootResource.java @@ -220,7 +220,7 @@ public class BranchRootResource { mediaType = VndMediaType.BRANCH_REQUEST, schema = @Schema(implementation = BranchRequestDto.class), examples = @ExampleObject( - name = "Branch a new develop branch from main", + name = "Branch a new develop branch from main.", value = "{\n \"parent\":\"main\",\n \"name\":\"develop\"\n}", summary = "Create a branch" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java index 35c363619b..f9ed6fe132 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java @@ -134,7 +134,7 @@ public class ConfigResource { mediaType = VndMediaType.CONFIG, schema = @Schema(implementation = UpdateConfigDto.class), examples = @ExampleObject( - name = "Overwrites current configuration with this one", + name = "Overwrites current configuration with this one.", value = "{\n \"realmDescription\":\"SONIA :: SCM-Manager\",\n \"dateFormat\":\"YYYY-MM-DD HH:mm:ss\",\n \"baseUrl\":\"http://localhost:8081/scm\",\n \"loginAttemptLimit\":-1,\n \"pluginUrl\":\"https://plugin-center-api.scm-manager.org/api/v1/plugins/{version}?os={os}&arch={arch}\",\n \"loginAttemptLimitTimeout\":500,\n \"namespaceStrategy\":\"CustomNamespaceStrategy\",\n \"loginInfoUrl\":\"https://login-info.scm-manager.org/api/v1/login-info\",\n \"releaseFeedUrl\":\"https://scm-manager.org/download/rss.xml\",\n \"mailDomainName\":\"scm-manager.local\"\n}", summary = "Simple update configuration" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java index 966a9c719f..1aad2f3d34 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/MeResource.java @@ -116,7 +116,7 @@ public class MeResource { mediaType = VndMediaType.PASSWORD_CHANGE, schema = @Schema(implementation = PasswordChangeDto.class), examples = @ExampleObject( - name = "Change password to a more difficult one", + name = "Change password to a more difficult one.", value = "{ \"oldPassword\":\"scmadmin\",\n \"newPassword\":\"5cm4dm1n\"\n}", summary = "Simple change password" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java index 0d43f72484..0fe94136bb 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java @@ -98,9 +98,9 @@ public class NamespacePermissionResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = PermissionListDto.class), + schema = @Schema(implementation = UpdatePermissionListDto.class), examples = @ExampleObject( - name = "Add read permissions for repositories and pull requests to manager group", + name = "Add read permissions for repositories and pull requests to manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", summary = "Add a permission" ) @@ -244,9 +244,9 @@ public class NamespacePermissionResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = PermissionListDto.class), + schema = @Schema(implementation = UpdatePermissionListDto.class), examples = @ExampleObject( - name = "Update permissions of manager group", + name = "Update permissions of manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", summary = "Update a permission" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index f60fa6d6ff..9e161c6136 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -171,9 +171,9 @@ public class RepositoryCollectionResource { mediaType = VndMediaType.REPOSITORY, schema = @Schema(implementation = CreateRepositoryDto.class), examples = @ExampleObject( - name = "Create a new git repository named scm-manager in scmadmin namespace", + name = "Create a new git repository named scm-manager in scmadmin namespace.", value = "{\n \"namespace\":\"scmadmin\",\n \"name\":\"scm-manager\",\n \"type\":\"git\"\n}", - summary = "Create a simple git repository" + summary = "Create a git repository" ) ) ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java index 48d17279e3..5883a50d39 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java @@ -100,11 +100,11 @@ public class RepositoryPermissionRootResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = PermissionListDto.class), + schema = @Schema(implementation = UpdatePermissionListDto.class), examples = @ExampleObject( - name = "Add read permissions for repository and pull requests to manager group", + name = "Add read permissions for repository and pull requests to manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", - summary = "Add a permission" + summary = "Add permissions" ) ) ) @@ -252,9 +252,9 @@ public class RepositoryPermissionRootResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = PermissionListDto.class), + schema = @Schema(implementation = UpdatePermissionListDto.class), examples = @ExampleObject( - name = "Update permissions of manager group", + name = "Update permissions of manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", summary = "Update a permission" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java index 67848db3fe..6f082a0b88 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRenameDto.java @@ -33,7 +33,7 @@ import javax.validation.constraints.Pattern; @Getter @NoArgsConstructor public class RepositoryRenameDto { + private String namespace; @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) private String name; - private String namespace; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 50bb7764ca..8020131bae 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -162,7 +162,7 @@ public class RepositoryResource { mediaType = VndMediaType.REPOSITORY, schema = @Schema(implementation = UpdateRepositoryDto.class), examples = @ExampleObject( - name = "Update repository description", + name = "Update repository description.", value = "{\n \"namespace\":\"scmadmin\",\n \"name\":\"scm-manager\",\n \"description\":\"The easiest way to share and manage your Git, Mercurial and Subversion repositories.\",\n \"type\":\"git\",\n \"lastModified\":\"2020-06-05T14:42:49.000Z\"\n}", summary = "Update a repository" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java index 50c4c0ede7..58292cf488 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java @@ -125,7 +125,7 @@ public class RepositoryRoleCollectionResource { mediaType = VndMediaType.REPOSITORY_ROLE, schema = @Schema(implementation = CreateRepositoryRoleDto.class), examples = @ExampleObject( - name = "Create repository role named hero with read and delete repository permission", + name = "Create repository role named hero with read and delete repository permission.", value = "{\n \"name\":\"hero\",\n \"system\":false,\n \"verbs\":[\"read\",\"delete\"]\n}", summary = "Add a repository role" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java index 31179f0c2d..41a6f645e5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java @@ -139,7 +139,7 @@ public class RepositoryRoleResource { mediaType = VndMediaType.REPOSITORY_ROLE, schema = @Schema(implementation = UpdateRepositoryRoleDto.class), examples = @ExampleObject( - name = "Update repository role named hero with this verbs", + name = "Update repository role named hero with this verbs.", value = "{\n \"name\":\"hero\",\n \"system\":false,\n \"verbs\":[\"read\",\"pull\",\"write\",\"push\",\"delete\"],\n \"lastModified\":\"2020-06-05T14:42:49.000Z\"\n}", summary = "Update a repository role" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java new file mode 100644 index 0000000000..988169bd2b --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +import javax.validation.constraints.NotNull; + +/** + * This class is currently only used in the openapi scheme + */ +@Getter +@Setter +@NoArgsConstructor +public class UpdatePermissionListDto { + + @NotNull + private String[] permissions; +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java index ee27b26e0d..773d344937 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserPermissionResource.java @@ -115,9 +115,9 @@ public class UserPermissionResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.PERMISSION_COLLECTION, - schema = @Schema(implementation = PermissionListDto.class), + schema = @Schema(implementation = UpdatePermissionListDto.class), examples = @ExampleObject( - name = "Add read permissions for all repositories and pull requests", + name = "Add read permissions for all repositories and pull requests.", value = "{\n \"permissions\":[\"repository:read,pull:*\",\"repository:readPullRequest:*\"]\n}", summary = "Simple update user permissions" ) diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index c4a6d08a28..bed3e188c2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -194,7 +194,7 @@ public class UserResource { mediaType = VndMediaType.PASSWORD_OVERWRITE, schema = @Schema(implementation = PasswordOverwriteDto.class), examples = @ExampleObject( - name = "Overwrites current password with a more difficult one", + name = "Overwrites current password with a more difficult one.", value = "{ \"newPassword\":\"5cm4dm1n\"\n}", summary = "Set new password" ) From 6791aba84caff4ccfb9c4d183007253b71a34b73 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Wed, 18 Nov 2020 12:01:24 +0100 Subject: [PATCH 19/83] Update CHANGELOG.md --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 54a64a7ebc..84c6c9edb1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -11,6 +11,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 - Lookup command which provides further repository information ([#1415](https://github.com/scm-manager/scm-manager/pull/1415)) - Include messages from scm protocol in modification or merge errors ([#1420](https://github.com/scm-manager/scm-manager/pull/1420)) - Enhance trace api to accepted status codes ([#1430](https://github.com/scm-manager/scm-manager/pull/1430)) +- Add examples to core resources to simplify usage of rest api ([#1434](https://github.com/scm-manager/scm-manager/pull/1434)) ### Fixed - Missing close of hg diff command ([#1417](https://github.com/scm-manager/scm-manager/pull/1417)) From bab4a56e227f92fdbe99e26620a4951436a20d44 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 18 Nov 2020 18:50:59 +0100 Subject: [PATCH 20/83] Make dtos for schema docs unusable --- .../api/v2/resources/GitConfigResource.java | 23 +++++++ .../GitRepositoryConfigResource.java | 13 +++- .../api/v2/resources/UpdateGitConfigDto.java | 51 --------------- .../UpdateGitRepositoryConfigDto.java | 39 ----------- .../api/v2/resources/UpdateHgConfigDto.java | 9 ++- .../api/v2/resources/SvnConfigResource.java | 16 ++++- .../api/v2/resources/UpdateSvnConfigDto.java | 42 ------------ .../scm/api/v2/resources/ApiKeyResource.java | 16 +++++ .../scm/api/v2/resources/ConfigResource.java | 38 ++++++++++- .../scm/api/v2/resources/CreateApiKeyDto.java | 44 ------------- .../api/v2/resources/CreateRepositoryDto.java | 57 ---------------- .../v2/resources/CreateRepositoryRoleDto.java | 47 -------------- .../scm/api/v2/resources/CreateUserDto.java | 54 --------------- .../scm/api/v2/resources/GroupResource.java | 26 +++++++- .../NamespacePermissionResource.java | 3 +- .../RepositoryCollectionResource.java | 29 +++++++++ .../api/v2/resources/RepositoryResource.java | 29 +++++++++ .../RepositoryRoleCollectionResource.java | 21 +++++- .../v2/resources/RepositoryRoleResource.java | 23 ++++++- .../scm/api/v2/resources/UpdateConfigDto.java | 65 ------------------- .../scm/api/v2/resources/UpdateGroupDto.java | 53 --------------- .../v2/resources/UpdatePermissionListDto.java | 10 ++- .../api/v2/resources/UpdateRepositoryDto.java | 57 ---------------- .../v2/resources/UpdateRepositoryRoleDto.java | 49 -------------- .../scm/api/v2/resources/UpdateUserDto.java | 57 ---------------- .../v2/resources/UserCollectionResource.java | 28 ++++++++ .../scm/api/v2/resources/UserResource.java | 31 +++++++++ 27 files changed, 295 insertions(+), 635 deletions(-) delete mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java delete mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java delete mode 100644 scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java delete mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java index e366a35abb..5357b8d27f 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java @@ -32,6 +32,10 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.Length; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.GitConfig; import sonia.scm.repository.GitRepositoryHandler; @@ -41,6 +45,8 @@ import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.inject.Provider; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; @@ -48,6 +54,8 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; + /** * RESTful Web Service Resource to manage the configuration of the git plugin. */ @@ -161,4 +169,19 @@ public class GitConfigResource { public GitRepositoryConfigResource getRepositoryConfig() { return gitRepositoryConfigResource.get(); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateGitConfigDto { + private boolean disabled = false; + private String gcExpression; + private boolean nonFastForwardDisallowed; + @NotEmpty + @Length(min = 1, max = 100) + @Pattern(regexp = VALID_BRANCH_NAMES) + private String defaultBranch; + } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java index 81e8b79d60..55627aafee 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; @@ -30,6 +30,7 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.Getter; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.GitRepositoryConfig; @@ -166,4 +167,14 @@ public class GitRepositoryConfigResource { private ConfigurationStore getStore(Repository repository) { return gitRepositoryConfigStoreProvider.get(repository); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + private static final class UpdateGitRepositoryConfigDto { + private UpdateGitRepositoryConfigDto() { + } + private String defaultBranch; + } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java deleted file mode 100644 index 5893e93a40..0000000000 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java +++ /dev/null @@ -1,51 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import org.hibernate.validator.constraints.Length; - -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - -import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; - -/** - * This class is currently only used in the openapi scheme - */ -@NoArgsConstructor -@Getter -@Setter -public class UpdateGitConfigDto { - private boolean disabled = false; - private String gcExpression; - private boolean nonFastForwardDisallowed; - @NotEmpty - @Length(min = 1, max = 100) - @Pattern(regexp = VALID_BRANCH_NAMES) - private String defaultBranch; -} diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java deleted file mode 100644 index 491208fae9..0000000000 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java +++ /dev/null @@ -1,39 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class UpdateGitRepositoryConfigDto { - private String defaultBranch; -} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java index 18ac833c76..aa73b6cc6d 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java @@ -21,20 +21,19 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; +import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; /** * This class is currently only used in the openapi scheme */ -@NoArgsConstructor @Getter -@Setter -public class UpdateHgConfigDto { +@NoArgsConstructor(access = AccessLevel.PRIVATE) +final class UpdateHgConfigDto { private boolean disabled; private String hgBinary; private String pythonBinary; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java index 8197c87b7b..eb33cd1b3c 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.OpenAPIDefinition; @@ -32,7 +32,11 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.config.ConfigurationPermissions; +import sonia.scm.repository.Compatibility; import sonia.scm.repository.SvnConfig; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.web.SvnVndMediaType; @@ -156,4 +160,14 @@ public class SvnConfigResource { return Response.noContent().build(); } + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateSvnConfigDto { + private boolean disabled; + private Compatibility compatibility; + private boolean enabledGZip; + } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java deleted file mode 100644 index af140648bd..0000000000 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java +++ /dev/null @@ -1,42 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.repository.Compatibility; - -/** - * This class is currently only used in the openapi scheme - */ -@NoArgsConstructor -@Getter -@Setter -public class UpdateSvnConfigDto { - private boolean disabled; - private Compatibility compatibility; - private boolean enabledGZip; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java index bd13b7e5f6..4270b2b7ae 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java @@ -32,6 +32,9 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.ContextEntry; import sonia.scm.security.ApiKey; import sonia.scm.security.ApiKeyService; @@ -39,6 +42,7 @@ import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -187,4 +191,16 @@ public class ApiKeyResource { public void delete(@PathParam("id") String id) { apiKeyService.remove(id); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class CreateApiKeyDto { + @NotEmpty + private String displayName; + @NotEmpty + private String permissionRole; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java index f9ed6fe132..ab3fef46ec 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java @@ -27,16 +27,19 @@ package sonia.scm.api.v2.resources; import com.google.common.annotations.VisibleForTesting; import io.swagger.v3.oas.annotations.OpenAPIDefinition; import io.swagger.v3.oas.annotations.Operation; -import io.swagger.v3.oas.annotations.Parameter; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.NamespaceStrategyValidator; +import sonia.scm.security.AnonymousMode; import sonia.scm.util.ScmConfigurationUtil; import sonia.scm.web.VndMediaType; @@ -47,8 +50,8 @@ import javax.ws.rs.GET; import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; -import javax.ws.rs.core.MediaType; import javax.ws.rs.core.Response; +import java.util.Set; import java.util.function.Consumer; /** @@ -169,4 +172,35 @@ public class ConfigResource { return Response.noContent().build(); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateConfigDto { + private String proxyPassword; + private int proxyPort; + private String proxyServer; + private String proxyUser; + private boolean enableProxy; + private String realmDescription; + private boolean disableGroupingGrid; + private String dateFormat; + private boolean anonymousAccessEnabled; + private AnonymousMode anonymousMode; + private String baseUrl; + private boolean forceBaseUrl; + private int loginAttemptLimit; + private Set proxyExcludes; + private boolean skipFailedAuthenticators; + private String pluginUrl; + private long loginAttemptLimitTimeout; + private boolean enabledXsrfProtection; + private boolean enabledUserConverter; + private String namespaceStrategy; + private String loginInfoUrl; + private String releaseFeedUrl; + private String mailDomainName; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java deleted file mode 100644 index a78719d081..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java +++ /dev/null @@ -1,44 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.validation.constraints.NotEmpty; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class CreateApiKeyDto { - @NotEmpty - private String displayName; - @NotEmpty - private String permissionRole; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java deleted file mode 100644 index 420785449c..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.util.ValidationUtil; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import java.time.Instant; -import java.util.List; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class CreateRepositoryDto { - private String namespace; - @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) - private String name; - @NotEmpty - private String type; - @Email - private String contact; - private String description; - private List healthCheckFailures; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java deleted file mode 100644 index 6b70fb3f22..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java +++ /dev/null @@ -1,47 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.validation.constraints.NotEmpty; -import java.util.Collection; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class CreateRepositoryRoleDto { - @NotEmpty - private String name; - private boolean system; - @NoBlankStrings @NotEmpty - private Collection verbs; - private String type; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java deleted file mode 100644 index 54af7edb99..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java +++ /dev/null @@ -1,54 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.util.ValidationUtil; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; - -/** - * This class is currently only used in the openapi scheme - */ -@NoArgsConstructor @Getter @Setter -public class CreateUserDto { - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - @NotEmpty - private String displayName; - @JsonInclude(JsonInclude.Include.NON_NULL) - @Email - private String mail; - private boolean external; - @JsonInclude(JsonInclude.Include.NON_NULL) - private String password; - private boolean active; - private String type; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java index f3fea99bff..8245430c46 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java @@ -21,21 +21,27 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; +import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -44,6 +50,8 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.time.Instant; +import java.util.List; public class GroupResource { @@ -181,4 +189,20 @@ public class GroupResource { public GroupPermissionResource permissions() { return groupPermissionResource; } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateGroupDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + private String name; + private String description; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; + private String type; + private List members; + private boolean external; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java index 0fe94136bb..ed507c7ba5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java @@ -357,6 +357,5 @@ public class NamespacePermissionResource { .stream() .anyMatch(p -> p.getName().equals(permission.getName()) && p.isGroupPermission() == permission.isGroupPermission()); } + } - - diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index 9e161c6136..41e5a8a7e4 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -24,6 +24,7 @@ package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; @@ -31,6 +32,9 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import org.apache.shiro.SecurityUtils; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryInitializer; @@ -39,10 +43,14 @@ import sonia.scm.repository.RepositoryPermission; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; import sonia.scm.user.User; +import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -52,6 +60,8 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; +import java.time.Instant; +import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; @@ -237,4 +247,23 @@ public class RepositoryCollectionResource { SearchRequest searchRequest = new SearchRequest(search, true); return repository -> SearchUtil.matchesOne(searchRequest, repository.getName(), repository.getNamespace(), repository.getDescription()); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class CreateRepositoryDto { + private String namespace; + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + private String name; + @NotEmpty + private String type; + @Email + private String contact; + private String description; + private List healthCheckFailures; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index 8020131bae..ecc044f096 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -24,19 +24,27 @@ package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; +import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -46,6 +54,8 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.time.Instant; +import java.util.List; import java.util.Optional; import java.util.function.Predicate; import java.util.function.Supplier; @@ -290,4 +300,23 @@ public class RepositoryResource { private Predicate nameAndNamespaceStaysTheSame(String namespace, String name) { return changed -> name.equals(changed.getName()) && namespace.equals(changed.getNamespace()); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateRepositoryDto { + private String namespace; + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + private String name; + @NotEmpty + private String type; + @Email + private String contact; + private String description; + private List healthCheckFailures; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java index 58292cf488..946be8e6ee 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; @@ -31,12 +31,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -45,6 +49,7 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; +import java.util.Collection; public class RepositoryRoleCollectionResource { @@ -154,4 +159,18 @@ public class RepositoryRoleCollectionResource { public Response create(@Valid RepositoryRoleDto repositoryRole) { return adapter.create(repositoryRole, () -> dtoToRepositoryRoleMapper.map(repositoryRole), u -> resourceLinks.repositoryRole().self(u.getName())); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class CreateRepositoryRoleDto { + @NotEmpty + private String name; + private boolean system; + @NoBlankStrings @NotEmpty + private Collection verbs; + private String type; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java index 41a6f645e5..72c8fbe4c8 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; @@ -30,12 +30,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -44,6 +48,8 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.time.Instant; +import java.util.Collection; public class RepositoryRoleResource { @@ -161,4 +167,19 @@ public class RepositoryRoleResource { public Response update(@PathParam("name") String name, @Valid RepositoryRoleDto repositoryRole) { return adapter.update(name, existing -> dtoToRepositoryRoleMapper.map(repositoryRole)); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateRepositoryRoleDto { + @NotEmpty + private String name; + private boolean system; + @NoBlankStrings @NotEmpty + private Collection verbs; + private String type; + private Instant lastModified; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java deleted file mode 100644 index 7574210e3f..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java +++ /dev/null @@ -1,65 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.security.AnonymousMode; - -import java.util.Set; - -/** - * This class is currently only used in the openapi scheme - */ -@NoArgsConstructor -@Getter -@Setter -public class UpdateConfigDto { - - private String proxyPassword; - private int proxyPort; - private String proxyServer; - private String proxyUser; - private boolean enableProxy; - private String realmDescription; - private boolean disableGroupingGrid; - private String dateFormat; - private boolean anonymousAccessEnabled; - private AnonymousMode anonymousMode; - private String baseUrl; - private boolean forceBaseUrl; - private int loginAttemptLimit; - private Set proxyExcludes; - private boolean skipFailedAuthenticators; - private String pluginUrl; - private long loginAttemptLimitTimeout; - private boolean enabledXsrfProtection; - private boolean enabledUserConverter; - private String namespaceStrategy; - private String loginInfoUrl; - private String releaseFeedUrl; - private String mailDomainName; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java deleted file mode 100644 index d9f06eb88b..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java +++ /dev/null @@ -1,53 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.util.ValidationUtil; - -import javax.validation.constraints.Pattern; -import java.time.Instant; -import java.util.List; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class UpdateGroupDto { - - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - private String description; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - private String type; - private List members; - private boolean external; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java index 988169bd2b..00c49e43d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java @@ -21,12 +21,12 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; +import lombok.AccessLevel; import lombok.Getter; import lombok.NoArgsConstructor; -import lombok.Setter; import javax.validation.constraints.NotNull; @@ -34,10 +34,8 @@ import javax.validation.constraints.NotNull; * This class is currently only used in the openapi scheme */ @Getter -@Setter -@NoArgsConstructor -public class UpdatePermissionListDto { - +@NoArgsConstructor(access = AccessLevel.PRIVATE) +final class UpdatePermissionListDto { @NotNull private String[] permissions; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java deleted file mode 100644 index 2dc2d89a1c..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.util.ValidationUtil; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import java.time.Instant; -import java.util.List; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class UpdateRepositoryDto { - private String namespace; - @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) - private String name; - @NotEmpty - private String type; - @Email - private String contact; - private String description; - private List healthCheckFailures; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java deleted file mode 100644 index 81193195fe..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java +++ /dev/null @@ -1,49 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; - -import javax.validation.constraints.NotEmpty; -import java.time.Instant; -import java.util.Collection; - -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class UpdateRepositoryRoleDto { - @NotEmpty - private String name; - private boolean system; - @NoBlankStrings @NotEmpty - private Collection verbs; - private String type; - private Instant lastModified; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java deleted file mode 100644 index 28e011f4cd..0000000000 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java +++ /dev/null @@ -1,57 +0,0 @@ -/* - * MIT License - * - * Copyright (c) 2020-present Cloudogu GmbH and Contributors - * - * Permission is hereby granted, free of charge, to any person obtaining a copy - * of this software and associated documentation files (the "Software"), to deal - * in the Software without restriction, including without limitation the rights - * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell - * copies of the Software, and to permit persons to whom the Software is - * furnished to do so, subject to the following conditions: - * - * The above copyright notice and this permission notice shall be included in all - * copies or substantial portions of the Software. - * - * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR - * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, - * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE - * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER - * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, - * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE - * SOFTWARE. - */ - -package sonia.scm.api.v2.resources; - -import com.fasterxml.jackson.annotation.JsonInclude; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; -import sonia.scm.util.ValidationUtil; - -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; -import java.time.Instant; - -/** - * This class is currently only used in the openapi scheme - */ -@NoArgsConstructor @Getter @Setter -public class UpdateUserDto { - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - @NotEmpty - private String displayName; - @JsonInclude(JsonInclude.Include.NON_NULL) - @Email - private String mail; - private boolean external; - @JsonInclude(JsonInclude.Include.NON_NULL) - private String password; - private boolean active; - private String type; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; -} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index a81aa3fc7a..211a5823d5 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -24,6 +24,7 @@ package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; @@ -31,16 +32,23 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.user.UserPermissions; +import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -173,4 +181,24 @@ public class UserCollectionResource { SearchRequest searchRequest = new SearchRequest(search, true); return user -> SearchUtil.matchesOne(searchRequest, user.getName(), user.getDisplayName(), user.getMail()); } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class CreateUserDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + private String name; + @NotEmpty + private String displayName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Email + private String mail; + private boolean external; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String password; + private boolean active; + private String type; + } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index bed3e188c2..db94bf1195 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -24,19 +24,27 @@ package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; +import lombok.AccessLevel; +import lombok.Getter; +import lombok.NoArgsConstructor; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.user.User; import sonia.scm.user.UserManager; +import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -45,6 +53,7 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; +import java.time.Instant; public class UserResource { @@ -302,4 +311,26 @@ public class UserResource { public UserPermissionResource permissions() { return userPermissionResource; } + + /** + * This class is currently only used in the openapi scheme + */ + @Getter + @NoArgsConstructor(access = AccessLevel.PRIVATE) + private static final class UpdateUserDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + private String name; + @NotEmpty + private String displayName; + @JsonInclude(JsonInclude.Include.NON_NULL) + @Email + private String mail; + private boolean external; + @JsonInclude(JsonInclude.Include.NON_NULL) + private String password; + private boolean active; + private String type; + @JsonInclude(JsonInclude.Include.NON_NULL) + private Instant lastModified; + } } From b6c5a253cbbe851bccde16ceffd16910e0537d52 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Nov 2020 09:26:36 +0100 Subject: [PATCH 21/83] Fixed missing messages on exceptions during hook --- .../repository/hooks/DefaultHookHandler.java | 21 ++++++++-- .../resources/sonia/scm/python/scmhooks.py | 5 ++- .../hooks/DefaultHookHandlerTest.java | 40 ++++++++++++++++--- 3 files changed, 57 insertions(+), 9 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index b7ebefca3b..2b2e4132c2 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -40,11 +40,13 @@ import sonia.scm.repository.spi.HookEventFacade; import sonia.scm.security.BearerToken; import sonia.scm.security.CipherUtil; +import javax.annotation.Nonnull; import javax.inject.Inject; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; import java.net.Socket; +import java.util.ArrayList; import java.util.List; import static java.util.Collections.singletonList; @@ -87,6 +89,9 @@ class DefaultHookHandler implements HookHandler { private Response handleHookRequest(Request request) { LOG.trace("process {} hook for node {}", request.getType(), request.getNode()); + + HgHookContextProvider context = hookContextProviderFactory.create(request.getRepositoryId(), request.getNode()); + try { if (!environment.isAcceptAble(request.getChallenge())) { LOG.warn("received hook with invalid challenge: {}", request.getChallenge()); @@ -96,7 +101,6 @@ class DefaultHookHandler implements HookHandler { authenticate(request); environment.setPending(request.getType() == RepositoryHookType.PRE_RECEIVE); - HgHookContextProvider context = hookContextProviderFactory.create(request.getRepositoryId(), request.getNode()); hookEventFacade.handle(request.getRepositoryId()).fireHookEvent(request.getType(), context); return new Response(context.getHgMessageProvider().getMessages(), false); @@ -108,7 +112,7 @@ class DefaultHookHandler implements HookHandler { return error("repository not found"); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); - return error("unknown error"); + return error(context, ex); } finally { environment.clearPendingState(); } @@ -122,13 +126,24 @@ class DefaultHookHandler implements HookHandler { subject.login(bearer); } + private Response error(HgHookContextProvider context, Exception ex) { + List messages = new ArrayList<>(context.getHgMessageProvider().getMessages()); + messages.add(createErrorMessage(ex.getMessage())); + return new Response(messages, true); + } + private Response error(String message) { return new Response( - singletonList(new HgHookMessage(HgHookMessage.Severity.ERROR, message)), + singletonList(createErrorMessage(message)), true ); } + @Nonnull + private HgHookMessage createErrorMessage(String message) { + return new HgHookMessage(HgHookMessage.Severity.ERROR, message); + } + private void close() { try { socket.close(); diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py index 8e89bb1f06..72c5f7b528 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py @@ -39,7 +39,10 @@ repositoryId = os.environ['SCM_REPOSITORY_ID'] def print_messages(ui, messages): for message in messages: - msg = "%s: %s\n" % (message['severity'], message['message']) + msg = "[SCM]" + if message['severity'] == "ERROR": + msg += " Error" + msg += ": " + message['message'] + "\n" ui.warn(msg.encode('utf-8')) def fire_hook(ui, repo, hooktype, node): diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 45a9bc5aa5..0a430727d6 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -47,7 +47,9 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.Socket; +import java.util.List; import java.util.concurrent.atomic.AtomicReference; +import java.util.stream.Collectors; import static org.assertj.core.api.Assertions.assertThat; import static org.mockito.ArgumentMatchers.any; @@ -89,8 +91,12 @@ class DefaultHookHandlerTest { } private void mockMessageProvider() { + mockMessageProvider(new HgHookMessageProvider()); + } + + private void mockMessageProvider(HgHookMessageProvider messageProvider) { when(hookContextProviderFactory.create("42", "abc")).thenReturn(contextProvider); - when(contextProvider.getHgMessageProvider()).thenReturn(new HgHookMessageProvider()); + when(contextProvider.getHgMessageProvider()).thenReturn(messageProvider); } @AfterEach @@ -131,19 +137,43 @@ class DefaultHookHandlerTest { } @Test - void shouldHandleAuthenticationFailure() throws IOException { - doThrow(IllegalStateException.class) + void shouldHandleUnknownFailure() throws IOException { + mockMessageProvider(); + + doThrow(new IllegalStateException("Something went wrong")) .when(hookEventFacade) .handle("42"); DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); DefaultHookHandler.Response response = send(request); - assertError(response, "unknown"); + assertError(response, "Something went wrong"); } @Test - void shouldHandleUnknownFailure() throws IOException { + void shouldSendMessagesOnException() throws IOException { + HgHookMessageProvider messageProvider = new HgHookMessageProvider(); + messageProvider.sendMessage("Some note"); + messageProvider.sendMessage("Some error"); + mockMessageProvider(messageProvider); + + doThrow(new IllegalStateException("Abort it")) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + List received = response.getMessages() + .stream() + .map(HgHookMessage::getMessage) + .collect(Collectors.toList()); + + assertThat(received).containsExactly("Some note", "Some error", "Abort it"); + } + + @Test + void shouldHandleAuthenticationFailure() throws IOException { doThrow(AuthenticationException.class) .when(subject) .login(any(AuthenticationToken.class)); From 982743e82766ae17b19fb32cac995455277c26fb Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Nov 2020 10:21:17 +0100 Subject: [PATCH 22/83] Fix review findings --- .../repository/hooks/DefaultHookHandler.java | 4 ++ .../scm/repository/hooks/HookServer.java | 54 +++++++++++-------- .../hooks/DefaultHookHandlerTest.java | 28 ++++++++++ 3 files changed, 63 insertions(+), 23 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index 2b2e4132c2..2d035bf32f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -32,6 +32,7 @@ import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; @@ -110,6 +111,9 @@ class DefaultHookHandler implements HookHandler { } catch (NotFoundException ex) { LOG.warn("could not find repository with id {}", request.getRepositoryId(), ex); return error("repository not found"); + } catch (ExceptionWithContext ex) { + LOG.debug("scm exception on hook occurred", ex); + return error(context, ex); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); return error(context, ex); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java index ac27323018..5b025e981c 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -58,25 +58,6 @@ public class HookServer implements AutoCloseable { this.handlerFactory = handlerFactory; } - private ExecutorService createAcceptor() { - return Executors.newSingleThreadExecutor( - createThreadFactory("HgHookAcceptor") - ); - } - - private ExecutorService createWorkerPool() { - return Executors.newCachedThreadPool( - createThreadFactory("HgHookWorker-%d") - ); - } - - @Nonnull - private ThreadFactory createThreadFactory(String hgHookAcceptor) { - return new ThreadFactoryBuilder() - .setNameFormat(hgHookAcceptor) - .build(); - } - public int start() throws IOException { acceptor = createAcceptor(); workerPool = createWorkerPool(); @@ -126,15 +107,42 @@ public class HookServer implements AutoCloseable { return new ServerSocket(0, 0, InetAddress.getLoopbackAddress()); } + private ExecutorService createAcceptor() { + return Executors.newSingleThreadExecutor( + createThreadFactory("HgHookAcceptor") + ); + } + + private ExecutorService createWorkerPool() { + return Executors.newCachedThreadPool( + createThreadFactory("HgHookWorker-%d") + ); + } + + @Nonnull + private ThreadFactory createThreadFactory(String hgHookAcceptor) { + return new ThreadFactoryBuilder() + .setNameFormat(hgHookAcceptor) + .build(); + } + @Override - public void close() throws IOException { - if (serverSocket != null) { - serverSocket.close(); - } + public void close() { + closeSocket(); shutdown(acceptor); shutdown(workerPool); } + private void closeSocket() { + if (serverSocket != null) { + try { + serverSocket.close(); + } catch (IOException ex) { + LOG.warn("failed to close server socket", ex); + } + } + } + private void shutdown(ExecutorService acceptor) { if (acceptor != null) { acceptor.shutdown(); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 0a430727d6..fcdbc4792c 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; @@ -47,6 +48,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.Socket; +import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -150,6 +152,20 @@ class DefaultHookHandlerTest { assertError(response, "Something went wrong"); } + @Test + void shouldHandleExceptionWithContext() throws IOException { + mockMessageProvider(); + + doThrow(new TestingException("Exception with Context")) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + assertError(response, "Exception with Context"); + } + @Test void shouldSendMessagesOnException() throws IOException { HgHookMessageProvider messageProvider = new HgHookMessageProvider(); @@ -245,4 +261,16 @@ class DefaultHookHandlerTest { return Sockets.read(new ByteArrayInputStream(output.toByteArray()), DefaultHookHandler.Response.class); } + private static class TestingException extends ExceptionWithContext { + + private TestingException(String message) { + super(Collections.emptyList(), message); + } + + @Override + public String getCode() { + return "42"; + } + } + } From 29faa5ec6cfc41f72ca0aea58a3871f762ecb849 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Nov 2020 10:21:17 +0100 Subject: [PATCH 23/83] Fix review findings --- .../repository/hooks/DefaultHookHandler.java | 4 + .../scm/repository/hooks/HookServer.java | 116 +++++++++------- .../hooks/DefaultHookHandlerTest.java | 28 ++++ .../scm/security/JwtAccessTokenBuilder.java | 13 +- .../security/JwtAccessTokenBuilderTest.java | 131 +++++++++++++----- 5 files changed, 199 insertions(+), 93 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index 2b2e4132c2..2d035bf32f 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -32,6 +32,7 @@ import org.apache.shiro.authc.AuthenticationException; import org.apache.shiro.subject.Subject; import org.slf4j.Logger; import org.slf4j.LoggerFactory; +import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; @@ -110,6 +111,9 @@ class DefaultHookHandler implements HookHandler { } catch (NotFoundException ex) { LOG.warn("could not find repository with id {}", request.getRepositoryId(), ex); return error("repository not found"); + } catch (ExceptionWithContext ex) { + LOG.debug("scm exception on hook occurred", ex); + return error(context, ex); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); return error(context, ex); diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java index ac27323018..90a15c6fb4 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/HookServer.java @@ -52,12 +52,63 @@ public class HookServer implements AutoCloseable { private ExecutorService acceptor; private ExecutorService workerPool; private ServerSocket serverSocket; + private SecurityManager securityManager; @Inject public HookServer(HookHandlerFactory handlerFactory) { this.handlerFactory = handlerFactory; } + public int start() throws IOException { + securityManager = SecurityUtils.getSecurityManager(); + + acceptor = createAcceptor(); + workerPool = createWorkerPool(); + serverSocket = createServerSocket(); + // set timeout to 2 min, to avoid blocking clients + serverSocket.setSoTimeout(2 * 60 * 1000); + + accept(); + + int port = serverSocket.getLocalPort(); + LOG.info("open hg hook server on port {}", port); + return port; + } + + private void accept() { + acceptor.submit(() -> { + while (!serverSocket.isClosed()) { + try { + LOG.trace("wait for next hook connection"); + Socket clientSocket = serverSocket.accept(); + LOG.trace("accept incoming hook client from {}", clientSocket.getInetAddress()); + HookHandler hookHandler = handlerFactory.create(clientSocket); + workerPool.submit(associateSecurityManager(hookHandler)); + } catch (IOException ex) { + LOG.debug("failed to accept socket, possible closed", ex); + } + } + LOG.warn("ServerSocket is closed"); + }); + } + + private Runnable associateSecurityManager(HookHandler hookHandler) { + return () -> { + ThreadContext.bind(securityManager); + try { + hookHandler.run(); + } finally { + ThreadContext.unbindSubject(); + ThreadContext.unbindSecurityManager(); + } + }; + } + + @Nonnull + private ServerSocket createServerSocket() throws IOException { + return new ServerSocket(0, 0, InetAddress.getLoopbackAddress()); + } + private ExecutorService createAcceptor() { return Executors.newSingleThreadExecutor( createThreadFactory("HgHookAcceptor") @@ -77,64 +128,23 @@ public class HookServer implements AutoCloseable { .build(); } - public int start() throws IOException { - acceptor = createAcceptor(); - workerPool = createWorkerPool(); - serverSocket = createServerSocket(); - // set timeout to 2 min, to avoid blocking clients - serverSocket.setSoTimeout(2 * 60 * 1000); - - accept(); - - int port = serverSocket.getLocalPort(); - LOG.info("open hg hook server on port {}", port); - return port; - } - - private void accept() { - SecurityManager securityManager = SecurityUtils.getSecurityManager(); - acceptor.submit(() -> { - while (!serverSocket.isClosed()) { - try { - LOG.trace("wait for next hook connection"); - Socket clientSocket = serverSocket.accept(); - LOG.trace("accept incoming hook client from {}", clientSocket.getInetAddress()); - HookHandler hookHandler = handlerFactory.create(clientSocket); - workerPool.submit(associateSecurityManager(securityManager, hookHandler)); - } catch (IOException ex) { - LOG.debug("failed to accept socket, possible closed", ex); - } - } - LOG.warn("ServerSocket is closed"); - }); - } - - private Runnable associateSecurityManager(SecurityManager securityManager, HookHandler hookHandler) { - return () -> { - ThreadContext.bind(securityManager); - try { - hookHandler.run(); - } finally { - ThreadContext.unbindSubject(); - ThreadContext.unbindSecurityManager(); - } - }; - } - - @Nonnull - private ServerSocket createServerSocket() throws IOException { - return new ServerSocket(0, 0, InetAddress.getLoopbackAddress()); - } - @Override - public void close() throws IOException { - if (serverSocket != null) { - serverSocket.close(); - } + public void close() { + closeSocket(); shutdown(acceptor); shutdown(workerPool); } + private void closeSocket() { + if (serverSocket != null) { + try { + serverSocket.close(); + } catch (IOException ex) { + LOG.warn("failed to close server socket", ex); + } + } + } + private void shutdown(ExecutorService acceptor) { if (acceptor != null) { acceptor.shutdown(); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 0a430727d6..fcdbc4792c 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -34,6 +34,7 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; @@ -47,6 +48,7 @@ import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; import java.io.IOException; import java.net.Socket; +import java.util.Collections; import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.stream.Collectors; @@ -150,6 +152,20 @@ class DefaultHookHandlerTest { assertError(response, "Something went wrong"); } + @Test + void shouldHandleExceptionWithContext() throws IOException { + mockMessageProvider(); + + doThrow(new TestingException("Exception with Context")) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + assertError(response, "Exception with Context"); + } + @Test void shouldSendMessagesOnException() throws IOException { HgHookMessageProvider messageProvider = new HgHookMessageProvider(); @@ -245,4 +261,16 @@ class DefaultHookHandlerTest { return Sockets.read(new ByteArrayInputStream(output.toByteArray()), DefaultHookHandler.Response.class); } + private static class TestingException extends ExceptionWithContext { + + private TestingException(String message) { + super(Collections.emptyList(), message); + } + + @Override + public String getCode() { + return "42"; + } + } + } diff --git a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java index c0d8521220..4e43f45e68 100644 --- a/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java +++ b/scm-webapp/src/main/java/sonia/scm/security/JwtAccessTokenBuilder.java @@ -24,6 +24,7 @@ package sonia.scm.security; +import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Preconditions; import com.google.common.base.Strings; import com.google.common.collect.Maps; @@ -57,6 +58,12 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { */ private static final Logger LOG = LoggerFactory.getLogger(JwtAccessTokenBuilder.class); + @VisibleForTesting + static final long DEFAULT_REFRESHABLE = 12L; + + @VisibleForTesting + static final TimeUnit DEFAULT_REFRESHABLE_UNIT = TimeUnit.HOURS; + private final KeyGenerator keyGenerator; private final SecureKeyResolver keyResolver; private final Clock clock; @@ -65,8 +72,8 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { private String issuer; private long expiresIn = 1; private TimeUnit expiresInUnit = TimeUnit.HOURS; - private long refreshableFor = 12; - private TimeUnit refreshableForUnit = TimeUnit.HOURS; + private long refreshableFor = DEFAULT_REFRESHABLE; + private TimeUnit refreshableForUnit = DEFAULT_REFRESHABLE_UNIT; private Instant refreshExpiration; private String parentKeyId; private Scope scope = Scope.empty(); @@ -183,7 +190,7 @@ public final class JwtAccessTokenBuilder implements AccessTokenBuilder { if (refreshableFor > 0) { long re = refreshableForUnit.toMillis(refreshableFor); - claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, new Date(now.toEpochMilli() + re).getTime()); + claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, Date.from(now.plusMillis(re))); } else if (refreshExpiration != null) { claims.put(JwtAccessToken.REFRESHABLE_UNTIL_CLAIM_KEY, Date.from(refreshExpiration)); } diff --git a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java index 3f36a4e341..66ec8a0a6e 100644 --- a/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java +++ b/scm-webapp/src/test/java/sonia/scm/security/JwtAccessTokenBuilderTest.java @@ -39,15 +39,17 @@ import org.junit.jupiter.api.extension.ExtendWith; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; +import java.time.Clock; +import java.time.Instant; import java.util.Collection; +import java.util.Date; import java.util.Set; import java.util.concurrent.TimeUnit; import static java.util.Collections.singleton; import static org.assertj.core.api.Assertions.assertThat; import static org.junit.Assert.assertThrows; -import static org.mockito.Mockito.anyString; -import static org.mockito.Mockito.lenient; +import static org.mockito.Mockito.*; import static sonia.scm.security.SecureKeyTestUtil.createSecureKey; /** @@ -85,52 +87,107 @@ class JwtAccessTokenBuilderTest { ThreadContext.unbindSubject(); } - /** - * Prepare mocks and set up object under test. - */ @BeforeEach - void setUpObjectUnderTest() { + void setUpDependencies() { lenient().when(keyGenerator.createKey()).thenReturn("42"); lenient().when(secureKeyResolver.getSecureKey(anyString())).thenReturn(createSecureKey()); enrichers = Sets.newHashSet(); factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers); } - /** - * Tests {@link JwtAccessTokenBuilder#build()}. - */ - @Test - void testBuild() { - JwtAccessToken token = factory.create().subject("dent") - .issuer("https://www.scm-manager.org") - .expiresIn(1, TimeUnit.MINUTES) - .custom("a", "b") - .scope(Scope.valueOf("repo:*")) - .build(); + @Nested + class SimpleTests { - // assert claims - assertClaims(token); + /** + * Prepare mocks and set up object under test. + */ + @BeforeEach + void setUpObjectUnderTest() { + factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers); + } + + /** + * Tests {@link JwtAccessTokenBuilder#build()}. + */ + @Test + void testBuild() { + JwtAccessToken token = factory.create().subject("dent") + .issuer("https://www.scm-manager.org") + .expiresIn(1, TimeUnit.MINUTES) + .custom("a", "b") + .scope(Scope.valueOf("repo:*")) + .build(); + + // assert claims + assertClaims(token); + + // reparse and assert again + String compact = token.compact(); + assertThat(compact).isNotEmpty(); + Claims claims = Jwts.parser() + .setSigningKey(secureKeyResolver.getSecureKey("dent").getBytes()) + .parseClaimsJws(compact) + .getBody(); + assertClaims(new JwtAccessToken(claims, compact)); + } + + private void assertClaims(JwtAccessToken token) { + assertThat(token.getId()).isNotEmpty(); + assertThat(token.getIssuedAt()).isNotNull(); + assertThat(token.getExpiration()).isNotNull(); + assertThat(token.getExpiration().getTime() > token.getIssuedAt().getTime()).isTrue(); + assertThat(token.getSubject()).isEqualTo("dent"); + assertThat(token.getIssuer()).isNotEmpty(); + assertThat(token.getIssuer()).get().isEqualTo("https://www.scm-manager.org"); + assertThat(token.getCustom("a")).get().isEqualTo("b"); + assertThat(token.getScope()).hasToString("[\"repo:*\"]"); + } - // reparse and assert again - String compact = token.compact(); - assertThat(compact).isNotEmpty(); - Claims claims = Jwts.parser() - .setSigningKey(secureKeyResolver.getSecureKey("dent").getBytes()) - .parseClaimsJws(compact) - .getBody(); - assertClaims(new JwtAccessToken(claims, compact)); } - private void assertClaims(JwtAccessToken token) { - assertThat(token.getId()).isNotEmpty(); - assertThat(token.getIssuedAt()).isNotNull(); - assertThat(token.getExpiration()).isNotNull(); - assertThat(token.getExpiration().getTime() > token.getIssuedAt().getTime()).isTrue(); - assertThat(token.getSubject()).isEqualTo("dent"); - assertThat(token.getIssuer()).isNotEmpty(); - assertThat(token.getIssuer()).get().isEqualTo("https://www.scm-manager.org"); - assertThat(token.getCustom("a")).get().isEqualTo("b"); - assertThat(token.getScope()).hasToString("[\"repo:*\"]"); + @Nested + class ClockTests { + + @Mock + private Clock clock; + + @BeforeEach + void setUpObjectUnderTest() { + factory = new JwtAccessTokenBuilderFactory(keyGenerator, secureKeyResolver, enrichers, clock); + } + + @Test + void shouldSetRefreshExpiration() { + Instant now = Instant.now(); + when(clock.instant()).thenReturn(now); + + JwtAccessToken token = factory.create() + .subject("dent") + .refreshableFor(2, TimeUnit.SECONDS) + .build(); + + assertThat(token.getRefreshExpiration()).isPresent(); + Date date = token.getRefreshExpiration().get(); + + assertThat(date).hasSameTimeAs(Date.from(now.plusSeconds(2L))); + } + + @Test + void shouldSetDefaultRefreshExpiration() { + Instant now = Instant.now(); + when(clock.instant()).thenReturn(now); + + JwtAccessToken token = factory.create() + .subject("dent") + .build(); + + assertThat(token.getRefreshExpiration()).isPresent(); + Date date = token.getRefreshExpiration().get(); + + long defaultRefresh = JwtAccessTokenBuilder.DEFAULT_REFRESHABLE_UNIT.toMillis(JwtAccessTokenBuilder.DEFAULT_REFRESHABLE); + assertThat(date).hasSameTimeAs(Date.from(now.plusMillis(defaultRefresh))); + } + } @Nested From 69a3a8a2daee4ce4c69f0904decbb6a43946cd0c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 19 Nov 2020 07:59:48 +0100 Subject: [PATCH 24/83] Convert update dto classes to interfaces --- .../scm/api/v2/resources/GitConfigDto.java | 2 +- .../api/v2/resources/GitConfigResource.java | 23 ------ .../v2/resources/GitRepositoryConfigDto.java | 4 +- .../GitRepositoryConfigResource.java | 10 --- .../api/v2/resources/UpdateGitConfigDto.java | 46 +++++++++++ .../UpdateGitRepositoryConfigDto.java | 29 +++++++ .../scm/api/v2/resources/HgConfigDto.java | 4 +- .../api/v2/resources/UpdateHgConfigDto.java | 35 ++++----- .../scm/api/v2/resources/SvnConfigDto.java | 4 +- .../api/v2/resources/SvnConfigResource.java | 14 ---- .../api/v2/resources/UpdateSvnConfigDto.java | 36 +++++++++ .../sonia/scm/api/v2/resources/ApiKeyDto.java | 2 +- .../scm/api/v2/resources/ApiKeyResource.java | 15 ---- .../sonia/scm/api/v2/resources/ConfigDto.java | 2 +- .../scm/api/v2/resources/ConfigResource.java | 35 --------- .../scm/api/v2/resources/CreateApiKeyDto.java | 35 +++++++++ .../scm/api/v2/resources/CreateGroupDto.java | 23 ++---- .../api/v2/resources/CreateRepositoryDto.java | 53 +++++++++++++ .../v2/resources/CreateRepositoryRoleDto.java | 40 ++++++++++ .../scm/api/v2/resources/CreateUserDto.java | 50 ++++++++++++ .../sonia/scm/api/v2/resources/GroupDto.java | 4 +- .../scm/api/v2/resources/GroupResource.java | 23 ------ .../NamespacePermissionResource.java | 4 +- .../api/v2/resources/PermissionListDto.java | 4 +- .../RepositoryCollectionResource.java | 28 ------- .../scm/api/v2/resources/RepositoryDto.java | 4 +- .../v2/resources/RepositoryPermissionDto.java | 4 +- .../RepositoryPermissionRootResource.java | 6 +- .../api/v2/resources/RepositoryResource.java | 28 ------- .../RepositoryRoleCollectionResource.java | 18 ----- .../api/v2/resources/RepositoryRoleDto.java | 4 +- .../v2/resources/RepositoryRoleResource.java | 20 ----- .../scm/api/v2/resources/UpdateConfigDto.java | 77 +++++++++++++++++++ .../scm/api/v2/resources/UpdateGroupDto.java | 50 ++++++++++++ .../v2/resources/UpdatePermissionListDto.java | 14 +--- .../api/v2/resources/UpdateRepositoryDto.java | 55 +++++++++++++ .../UpdateRepositoryPermissionDto.java | 43 +++++++++++ .../v2/resources/UpdateRepositoryRoleDto.java | 43 +++++++++++ .../scm/api/v2/resources/UpdateUserDto.java | 54 +++++++++++++ .../v2/resources/UserCollectionResource.java | 27 ------- .../sonia/scm/api/v2/resources/UserDto.java | 2 +- .../scm/api/v2/resources/UserResource.java | 30 -------- 42 files changed, 664 insertions(+), 340 deletions(-) create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java create mode 100644 scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java create mode 100644 scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java create mode 100644 scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java index 893de773da..99ac469166 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigDto.java @@ -39,7 +39,7 @@ import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; @NoArgsConstructor @Getter @Setter -public class GitConfigDto extends HalRepresentation { +public class GitConfigDto extends HalRepresentation implements UpdateGitConfigDto { private boolean disabled = false; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java index 5357b8d27f..e366a35abb 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitConfigResource.java @@ -32,10 +32,6 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; -import org.hibernate.validator.constraints.Length; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.repository.GitConfig; import sonia.scm.repository.GitRepositoryHandler; @@ -45,8 +41,6 @@ import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.inject.Provider; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.GET; import javax.ws.rs.PUT; @@ -54,8 +48,6 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; - /** * RESTful Web Service Resource to manage the configuration of the git plugin. */ @@ -169,19 +161,4 @@ public class GitConfigResource { public GitRepositoryConfigResource getRepositoryConfig() { return gitRepositoryConfigResource.get(); } - - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateGitConfigDto { - private boolean disabled = false; - private String gcExpression; - private boolean nonFastForwardDisallowed; - @NotEmpty - @Length(min = 1, max = 100) - @Pattern(regexp = VALID_BRANCH_NAMES) - private String defaultBranch; - } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigDto.java index 92a495669b..46eb671d5c 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigDto.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -36,7 +36,7 @@ import lombok.Setter; @AllArgsConstructor @NoArgsConstructor @SuppressWarnings("squid:S2160") // there is no proper semantic for equals on this dto -public class GitRepositoryConfigDto extends HalRepresentation { +public class GitRepositoryConfigDto extends HalRepresentation implements UpdateGitRepositoryConfigDto { private String defaultBranch; diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java index 55627aafee..559dfddae8 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/GitRepositoryConfigResource.java @@ -167,14 +167,4 @@ public class GitRepositoryConfigResource { private ConfigurationStore getStore(Repository repository) { return gitRepositoryConfigStoreProvider.get(repository); } - - /** - * This class is currently only used in the openapi scheme - */ - @Getter - private static final class UpdateGitRepositoryConfigDto { - private UpdateGitRepositoryConfigDto() { - } - private String defaultBranch; - } } diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java new file mode 100644 index 0000000000..66bdcd7278 --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitConfigDto.java @@ -0,0 +1,46 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import org.hibernate.validator.constraints.Length; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; + +interface UpdateGitConfigDto { + + boolean isDisabled(); + + String getGcExpression(); + + boolean isNonFastForwardDisallowed(); + + @NotEmpty + @Length(min = 1, max = 100) + @Pattern(regexp = VALID_BRANCH_NAMES) + String getDefaultBranch(); +} diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java new file mode 100644 index 0000000000..0da843e1af --- /dev/null +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateGitRepositoryConfigDto.java @@ -0,0 +1,29 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +interface UpdateGitRepositoryConfigDto { + String getDefaultBranch(); +} diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java index b5039cbb44..ec303a4551 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/HgConfigDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -33,7 +33,7 @@ import lombok.Setter; @NoArgsConstructor @Getter @Setter -public class HgConfigDto extends HalRepresentation { +public class HgConfigDto extends HalRepresentation implements UpdateHgConfigDto { private boolean disabled; diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java index aa73b6cc6d..743cd2cfaf 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java @@ -24,23 +24,22 @@ package sonia.scm.api.v2.resources; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; +interface UpdateHgConfigDto { + boolean isDisabled(); -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -final class UpdateHgConfigDto { - private boolean disabled; - private String hgBinary; - private String pythonBinary; - private String pythonPath; - private String encoding; - private boolean useOptimizedBytecode; - private boolean showRevisionInId; - private boolean disableHookSSLValidation; - private boolean enableHttpPostArgs; + String getHgBinary(); + + String getPythonBinary(); + + String getPythonPath(); + + String getEncoding(); + + boolean isUseOptimizedBytecode(); + + boolean isShowRevisionInId(); + + boolean isDisableHookSSLValidation(); + + boolean isEnableHttpPostArgs(); } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigDto.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigDto.java index 72f7513bb8..9be64e6a3b 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigDto.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -34,7 +34,7 @@ import sonia.scm.repository.Compatibility; @NoArgsConstructor @Getter @Setter -public class SvnConfigDto extends HalRepresentation { +public class SvnConfigDto extends HalRepresentation implements UpdateSvnConfigDto { private boolean disabled; diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java index eb33cd1b3c..394000c48a 100644 --- a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/SvnConfigResource.java @@ -32,11 +32,7 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.config.ConfigurationPermissions; -import sonia.scm.repository.Compatibility; import sonia.scm.repository.SvnConfig; import sonia.scm.repository.SvnRepositoryHandler; import sonia.scm.web.SvnVndMediaType; @@ -160,14 +156,4 @@ public class SvnConfigResource { return Response.noContent().build(); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateSvnConfigDto { - private boolean disabled; - private Compatibility compatibility; - private boolean enabledGZip; - } } diff --git a/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java new file mode 100644 index 0000000000..87de7d5ec8 --- /dev/null +++ b/scm-plugins/scm-svn-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateSvnConfigDto.java @@ -0,0 +1,36 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.repository.Compatibility; + +interface UpdateSvnConfigDto { + + boolean isDisabled(); + + Compatibility getCompatibility(); + + boolean isEnabledGZip(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java index b07e329a8a..40cc0feaa0 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyDto.java @@ -36,7 +36,7 @@ import java.time.Instant; @Getter @Setter @NoArgsConstructor -public class ApiKeyDto extends HalRepresentation { +public class ApiKeyDto extends HalRepresentation implements CreateApiKeyDto { @NotEmpty private String displayName; @NotEmpty diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java index 4270b2b7ae..04dd186b2a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ApiKeyResource.java @@ -32,9 +32,6 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.ContextEntry; import sonia.scm.security.ApiKey; import sonia.scm.security.ApiKeyService; @@ -42,7 +39,6 @@ import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -192,15 +188,4 @@ public class ApiKeyResource { apiKeyService.remove(id); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class CreateApiKeyDto { - @NotEmpty - private String displayName; - @NotEmpty - private String permissionRole; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java index 2b7249c7e7..48b90c9175 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigDto.java @@ -36,7 +36,7 @@ import java.util.Set; @NoArgsConstructor @Getter @Setter -public class ConfigDto extends HalRepresentation { +public class ConfigDto extends HalRepresentation implements UpdateConfigDto { private String proxyPassword; private int proxyPort; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java index ab3fef46ec..13dec7d44e 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/ConfigResource.java @@ -33,13 +33,9 @@ import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; import io.swagger.v3.oas.annotations.tags.Tag; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.config.ConfigurationPermissions; import sonia.scm.config.ScmConfiguration; import sonia.scm.repository.NamespaceStrategyValidator; -import sonia.scm.security.AnonymousMode; import sonia.scm.util.ScmConfigurationUtil; import sonia.scm.web.VndMediaType; @@ -51,7 +47,6 @@ import javax.ws.rs.PUT; import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.util.Set; import java.util.function.Consumer; /** @@ -173,34 +168,4 @@ public class ConfigResource { return Response.noContent().build(); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateConfigDto { - private String proxyPassword; - private int proxyPort; - private String proxyServer; - private String proxyUser; - private boolean enableProxy; - private String realmDescription; - private boolean disableGroupingGrid; - private String dateFormat; - private boolean anonymousAccessEnabled; - private AnonymousMode anonymousMode; - private String baseUrl; - private boolean forceBaseUrl; - private int loginAttemptLimit; - private Set proxyExcludes; - private boolean skipFailedAuthenticators; - private String pluginUrl; - private long loginAttemptLimitTimeout; - private boolean enabledXsrfProtection; - private boolean enabledUserConverter; - private String namespaceStrategy; - private String loginInfoUrl; - private String releaseFeedUrl; - private String mailDomainName; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java new file mode 100644 index 0000000000..cd7588ffb1 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateApiKeyDto.java @@ -0,0 +1,35 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import javax.validation.constraints.NotEmpty; + +interface CreateApiKeyDto { + @NotEmpty + String getDisplayName(); + + @NotEmpty + String getPermissionRole(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java index bc1324e0f1..82ed359010 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateGroupDto.java @@ -24,26 +24,19 @@ package sonia.scm.api.v2.resources; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; import sonia.scm.util.ValidationUtil; import javax.validation.constraints.Pattern; import java.util.List; -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@Setter -@NoArgsConstructor -public class CreateGroupDto { +interface CreateGroupDto { @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - private String description; - private String type; - private List members; - private boolean external; + String getName(); + + String getDescription(); + + List getMembers(); + + boolean isExternal(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java new file mode 100644 index 0000000000..29d41bc075 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryDto.java @@ -0,0 +1,53 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; +import java.util.List; + +interface CreateRepositoryDto { + + String getNamespace(); + + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + String getName(); + + @NotEmpty + String getType(); + + @Email + String getContact(); + + String getDescription(); + + List getHealthCheckFailures(); + + Instant getLastModified(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java new file mode 100644 index 0000000000..0f524d39f2 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateRepositoryRoleDto.java @@ -0,0 +1,40 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import javax.validation.constraints.NotEmpty; +import java.util.Collection; + +interface CreateRepositoryRoleDto { + + @NotEmpty + String getName(); + + @NoBlankStrings + @NotEmpty + Collection getVerbs(); + + String getType(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java new file mode 100644 index 0000000000..ff0b36b404 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/CreateUserDto.java @@ -0,0 +1,50 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; + +interface CreateUserDto { + @Pattern(regexp = ValidationUtil.REGEX_NAME) + String getName(); + + @NotEmpty + String getDisplayName(); + + @Email + String getMail(); + + boolean isExternal(); + + String getPassword(); + + boolean isActive(); + + String getType(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java index 24939609b3..8881470216 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; @@ -40,7 +40,7 @@ import java.util.List; @Getter @Setter @NoArgsConstructor -public class GroupDto extends HalRepresentation { +public class GroupDto extends HalRepresentation implements UpdateGroupDto, CreateGroupDto { private Instant creationDate; private String description; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java index 8245430c46..00a41d7526 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/GroupResource.java @@ -24,24 +24,18 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.group.Group; import sonia.scm.group.GroupManager; -import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -50,8 +44,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.time.Instant; -import java.util.List; public class GroupResource { @@ -190,19 +182,4 @@ public class GroupResource { return groupPermissionResource; } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateGroupDto { - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - private String description; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - private String type; - private List members; - private boolean external; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java index ed507c7ba5..68ead6ec60 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/NamespacePermissionResource.java @@ -98,7 +98,7 @@ public class NamespacePermissionResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = UpdatePermissionListDto.class), + schema = @Schema(implementation = UpdateRepositoryPermissionDto.class), examples = @ExampleObject( name = "Add read permissions for repositories and pull requests to manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", @@ -244,7 +244,7 @@ public class NamespacePermissionResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = UpdatePermissionListDto.class), + schema = @Schema(implementation = UpdateRepositoryPermissionDto.class), examples = @ExampleObject( name = "Update permissions of manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java index 0a4ae5a1a5..1cfd13d3ad 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/PermissionListDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -37,7 +37,7 @@ import javax.validation.constraints.NotNull; @Setter @AllArgsConstructor @NoArgsConstructor -public class PermissionListDto extends HalRepresentation { +public class PermissionListDto extends HalRepresentation implements UpdatePermissionListDto { @NotNull private String[] permissions; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java index 41e5a8a7e4..19d2daf8bd 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryCollectionResource.java @@ -24,7 +24,6 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; @@ -32,9 +31,6 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import org.apache.shiro.SecurityUtils; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryInitializer; @@ -43,14 +39,10 @@ import sonia.scm.repository.RepositoryPermission; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; import sonia.scm.user.User; -import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -60,8 +52,6 @@ import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.time.Instant; -import java.util.List; import java.util.concurrent.atomic.AtomicReference; import java.util.function.Predicate; @@ -248,22 +238,4 @@ public class RepositoryCollectionResource { return repository -> SearchUtil.matchesOne(searchRequest, repository.getName(), repository.getNamespace(), repository.getDescription()); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class CreateRepositoryDto { - private String namespace; - @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) - private String name; - @NotEmpty - private String type; - @Email - private String contact; - private String description; - private List healthCheckFailures; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java index 2bb457e029..951470a98c 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import com.fasterxml.jackson.annotation.JsonInclude; @@ -42,7 +42,7 @@ import java.util.List; @Getter @Setter @NoArgsConstructor -public class RepositoryDto extends HalRepresentation { +public class RepositoryDto extends HalRepresentation implements CreateRepositoryDto, UpdateRepositoryDto { @Email private String contact; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java index 4c533722b9..05c23f0d73 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.HalRepresentation; @@ -39,7 +39,7 @@ import java.util.Collection; @Getter @Setter @ToString @NoArgsConstructor @EitherRoleOrVerbs -public class RepositoryPermissionDto extends HalRepresentation { +public class RepositoryPermissionDto extends HalRepresentation implements UpdateRepositoryPermissionDto { public static final String GROUP_PREFIX = "@"; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java index 5883a50d39..e0bfda0824 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryPermissionRootResource.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import io.swagger.v3.oas.annotations.Operation; @@ -100,7 +100,7 @@ public class RepositoryPermissionRootResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = UpdatePermissionListDto.class), + schema = @Schema(implementation = UpdateRepositoryPermissionDto.class), examples = @ExampleObject( name = "Add read permissions for repository and pull requests to manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"readPullRequest\"],\n \"groupPermission\":true\n}", @@ -252,7 +252,7 @@ public class RepositoryPermissionRootResource { requestBody = @RequestBody( content = @Content( mediaType = VndMediaType.REPOSITORY_PERMISSION, - schema = @Schema(implementation = UpdatePermissionListDto.class), + schema = @Schema(implementation = UpdateRepositoryPermissionDto.class), examples = @ExampleObject( name = "Update permissions of manager group.", value = "{\n \"name\":\"manager\",\n \"verbs\":[\"read\",\"permissionRead\",\"readPullRequest\"],\n \"groupPermission\":true\n}", diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java index ecc044f096..17f82d06b7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryResource.java @@ -24,27 +24,19 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.repository.NamespaceAndName; import sonia.scm.repository.Repository; import sonia.scm.repository.RepositoryManager; -import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -54,8 +46,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.time.Instant; -import java.util.List; import java.util.Optional; import java.util.function.Predicate; import java.util.function.Supplier; @@ -301,22 +291,4 @@ public class RepositoryResource { return changed -> name.equals(changed.getName()) && namespace.equals(changed.getNamespace()); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateRepositoryDto { - private String namespace; - @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) - private String name; - @NotEmpty - private String type; - @Email - private String contact; - private String description; - private List healthCheckFailures; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java index 946be8e6ee..bd82ac4210 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleCollectionResource.java @@ -31,16 +31,12 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -49,7 +45,6 @@ import javax.ws.rs.Path; import javax.ws.rs.Produces; import javax.ws.rs.QueryParam; import javax.ws.rs.core.Response; -import java.util.Collection; public class RepositoryRoleCollectionResource { @@ -160,17 +155,4 @@ public class RepositoryRoleCollectionResource { return adapter.create(repositoryRole, () -> dtoToRepositoryRoleMapper.map(repositoryRole), u -> resourceLinks.repositoryRole().self(u.getName())); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class CreateRepositoryRoleDto { - @NotEmpty - private String name; - private boolean system; - @NoBlankStrings @NotEmpty - private Collection verbs; - private String type; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java index 7efef72826..1174ea48af 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleDto.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.api.v2.resources; import de.otto.edison.hal.Embedded; @@ -38,7 +38,7 @@ import java.util.Collection; @Getter @Setter @NoArgsConstructor -public class RepositoryRoleDto extends HalRepresentation { +public class RepositoryRoleDto extends HalRepresentation implements CreateRepositoryRoleDto, UpdateRepositoryRoleDto { @NotEmpty private String name; @NoBlankStrings @NotEmpty diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java index 72c8fbe4c8..c9367cf655 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/RepositoryRoleResource.java @@ -30,16 +30,12 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import sonia.scm.repository.RepositoryRole; import sonia.scm.repository.RepositoryRoleManager; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.NotEmpty; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -48,8 +44,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.time.Instant; -import java.util.Collection; public class RepositoryRoleResource { @@ -168,18 +162,4 @@ public class RepositoryRoleResource { return adapter.update(name, existing -> dtoToRepositoryRoleMapper.map(repositoryRole)); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateRepositoryRoleDto { - @NotEmpty - private String name; - private boolean system; - @NoBlankStrings @NotEmpty - private Collection verbs; - private String type; - private Instant lastModified; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java new file mode 100644 index 0000000000..dbe07a2620 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateConfigDto.java @@ -0,0 +1,77 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.security.AnonymousMode; + +import java.util.Set; + +interface UpdateConfigDto { + String getProxyPassword(); + + int getProxyPort(); + + String getProxyServer(); + + String getProxyUser(); + + boolean isEnableProxy(); + + String getRealmDescription(); + + boolean isDisableGroupingGrid(); + + String getDateFormat(); + + boolean isAnonymousAccessEnabled(); + + AnonymousMode getAnonymousMode(); + + String getBaseUrl(); + + boolean isForceBaseUrl(); + + int getLoginAttemptLimit(); + + Set getProxyExcludes(); + + boolean isSkipFailedAuthenticators(); + + String getPluginUrl(); + + long getLoginAttemptLimitTimeout(); + + boolean isEnabledXsrfProtection(); + + boolean isEnabledUserConverter(); + + String getNamespaceStrategy(); + + String getLoginInfoUrl(); + + String getReleaseFeedUrl(); + + String getMailDomainName(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java new file mode 100644 index 0000000000..ba91365c3c --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateGroupDto.java @@ -0,0 +1,50 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; +import java.util.List; + +interface UpdateGroupDto { + + @Pattern(regexp = ValidationUtil.REGEX_NAME) + String getName(); + + String getDescription(); + + @JsonInclude(JsonInclude.Include.NON_NULL) + Instant getLastModified(); + + String getType(); + + List getMembers(); + + boolean isExternal(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java index 00c49e43d7..90fb81a34a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdatePermissionListDto.java @@ -24,18 +24,10 @@ package sonia.scm.api.v2.resources; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; - import javax.validation.constraints.NotNull; -/** - * This class is currently only used in the openapi scheme - */ -@Getter -@NoArgsConstructor(access = AccessLevel.PRIVATE) -final class UpdatePermissionListDto { +interface UpdatePermissionListDto { + @NotNull - private String[] permissions; + String[] getPermissions(); } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java new file mode 100644 index 0000000000..9b50ba04df --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryDto.java @@ -0,0 +1,55 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import com.fasterxml.jackson.annotation.JsonInclude; +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; +import java.util.List; + +interface UpdateRepositoryDto { + + String getNamespace(); + + @Pattern(regexp = ValidationUtil.REGEX_REPOSITORYNAME) + String getName(); + + @NotEmpty + String getType(); + + @Email + String getContact(); + + String getDescription(); + + List getHealthCheckFailures(); + + @JsonInclude(JsonInclude.Include.NON_NULL) + Instant getLastModified(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java new file mode 100644 index 0000000000..c726ad5ca5 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryPermissionDto.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Pattern; +import java.util.Collection; + +interface UpdateRepositoryPermissionDto { + + @Pattern(regexp = ValidationUtil.REGEX_NAME) + String getName(); + + @NoBlankStrings + Collection getVerbs(); + + String getRole(); + + boolean isGroupPermission(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java new file mode 100644 index 0000000000..499c0da7dd --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateRepositoryRoleDto.java @@ -0,0 +1,43 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import javax.validation.constraints.NotEmpty; +import java.time.Instant; +import java.util.Collection; + +interface UpdateRepositoryRoleDto { + + @NotEmpty + String getName(); + + @NoBlankStrings + @NotEmpty + Collection getVerbs(); + + String getType(); + + Instant getLastModified(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java new file mode 100644 index 0000000000..a4b359c005 --- /dev/null +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UpdateUserDto.java @@ -0,0 +1,54 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.api.v2.resources; + +import sonia.scm.util.ValidationUtil; + +import javax.validation.constraints.Email; +import javax.validation.constraints.NotEmpty; +import javax.validation.constraints.Pattern; +import java.time.Instant; + +interface UpdateUserDto { + + @Pattern(regexp = ValidationUtil.REGEX_NAME) + String getName(); + + @NotEmpty + String getDisplayName(); + + @Email + String getMail(); + + boolean isExternal(); + + String getPassword(); + + boolean isActive(); + + String getType(); + + Instant getLastModified(); +} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java index 211a5823d5..12d5294769 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserCollectionResource.java @@ -24,7 +24,6 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.headers.Header; import io.swagger.v3.oas.annotations.media.Content; @@ -32,23 +31,16 @@ import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.search.SearchRequest; import sonia.scm.search.SearchUtil; import sonia.scm.user.User; import sonia.scm.user.UserManager; import sonia.scm.user.UserPermissions; -import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DefaultValue; import javax.ws.rs.GET; @@ -182,23 +174,4 @@ public class UserCollectionResource { return user -> SearchUtil.matchesOne(searchRequest, user.getName(), user.getDisplayName(), user.getMail()); } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class CreateUserDto { - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - @NotEmpty - private String displayName; - @JsonInclude(JsonInclude.Include.NON_NULL) - @Email - private String mail; - private boolean external; - @JsonInclude(JsonInclude.Include.NON_NULL) - private String password; - private boolean active; - private String type; - } } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java index b1eaa1d7a6..26f120b870 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserDto.java @@ -39,7 +39,7 @@ import javax.validation.constraints.Pattern; import java.time.Instant; @NoArgsConstructor @Getter @Setter -public class UserDto extends HalRepresentation { +public class UserDto extends HalRepresentation implements CreateUserDto, UpdateUserDto { private boolean active; private boolean external; private Instant creationDate; diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java index db94bf1195..76902505d7 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/UserResource.java @@ -24,27 +24,19 @@ package sonia.scm.api.v2.resources; -import com.fasterxml.jackson.annotation.JsonInclude; import io.swagger.v3.oas.annotations.Operation; import io.swagger.v3.oas.annotations.media.Content; import io.swagger.v3.oas.annotations.media.ExampleObject; import io.swagger.v3.oas.annotations.media.Schema; import io.swagger.v3.oas.annotations.parameters.RequestBody; import io.swagger.v3.oas.annotations.responses.ApiResponse; -import lombok.AccessLevel; -import lombok.Getter; -import lombok.NoArgsConstructor; import org.apache.shiro.authc.credential.PasswordService; import sonia.scm.user.User; import sonia.scm.user.UserManager; -import sonia.scm.util.ValidationUtil; import sonia.scm.web.VndMediaType; import javax.inject.Inject; import javax.validation.Valid; -import javax.validation.constraints.Email; -import javax.validation.constraints.NotEmpty; -import javax.validation.constraints.Pattern; import javax.ws.rs.Consumes; import javax.ws.rs.DELETE; import javax.ws.rs.GET; @@ -53,7 +45,6 @@ import javax.ws.rs.Path; import javax.ws.rs.PathParam; import javax.ws.rs.Produces; import javax.ws.rs.core.Response; -import java.time.Instant; public class UserResource { @@ -312,25 +303,4 @@ public class UserResource { return userPermissionResource; } - /** - * This class is currently only used in the openapi scheme - */ - @Getter - @NoArgsConstructor(access = AccessLevel.PRIVATE) - private static final class UpdateUserDto { - @Pattern(regexp = ValidationUtil.REGEX_NAME) - private String name; - @NotEmpty - private String displayName; - @JsonInclude(JsonInclude.Include.NON_NULL) - @Email - private String mail; - private boolean external; - @JsonInclude(JsonInclude.Include.NON_NULL) - private String password; - private boolean active; - private String type; - @JsonInclude(JsonInclude.Include.NON_NULL) - private Instant lastModified; - } } From 1311061c82666f2a2213b52f637580c77b82c017 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Nov 2020 14:30:39 +0100 Subject: [PATCH 25/83] Pass transaction id from request to mercurial hooks --- pom.xml | 2 +- scm-core/pom.xml | 6 ++ .../main/java/sonia/scm/TransactionId.java | 71 +++++++++++++++++++ .../java/sonia/scm/TransactionIdTest.java | 42 +++++++++++ scm-plugins/scm-hg-plugin/pom.xml | 14 ++++ .../DefaultHgEnvironmentBuilder.java | 4 ++ .../repository/hooks/DefaultHookHandler.java | 4 ++ .../resources/sonia/scm/python/scmhooks.py | 3 +- .../DefaultHgEnvironmentBuilderTest.java | 9 +++ .../hooks/DefaultHookHandlerTest.java | 20 +++++- .../main/java/sonia/scm/filter/MDCFilter.java | 10 ++- .../java/sonia/scm/filter/MDCFilterTest.java | 37 +++++----- 12 files changed, 195 insertions(+), 27 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/TransactionId.java create mode 100644 scm-core/src/test/java/sonia/scm/TransactionIdTest.java diff --git a/pom.xml b/pom.xml index b8192de3a8..46c0b2db13 100644 --- a/pom.xml +++ b/pom.xml @@ -506,7 +506,7 @@ - jakarta.xml.bind + jakarta.xml.bind jakarta.xml.bind-api ${jaxb.version} diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 85a539c471..6ff4d7a7b0 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -250,6 +250,12 @@ test + + ch.qos.logback + logback-classic + test + + diff --git a/scm-core/src/main/java/sonia/scm/TransactionId.java b/scm-core/src/main/java/sonia/scm/TransactionId.java new file mode 100644 index 0000000000..68169ba7d4 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/TransactionId.java @@ -0,0 +1,71 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm; + +import com.google.common.annotations.VisibleForTesting; +import org.slf4j.MDC; + +import java.util.Optional; + +/** + * Id of the current transaction. + * The transaction id is mainly used for logging and debugging. + * + * @since 2.10.0 + */ +public final class TransactionId { + + @VisibleForTesting + public static final String KEY = "transaction_id"; + + private TransactionId() { + } + + /** + * Binds the given transaction id to the current thread. + * + * @param transactionId transaction id + */ + public static void set(String transactionId) { + MDC.put(KEY, transactionId); + } + + /** + * Returns an optional transaction id. + * If there is no transaction id bound to the thread, the method will return an empty optional. + * + * @return optional transaction id + */ + public static Optional get() { + return Optional.ofNullable(MDC.get(KEY)); + } + + /** + * Removes a bound transaction id from the current thread. + */ + public static void clear() { + MDC.remove(KEY); + } +} diff --git a/scm-core/src/test/java/sonia/scm/TransactionIdTest.java b/scm-core/src/test/java/sonia/scm/TransactionIdTest.java new file mode 100644 index 0000000000..053f2ce86c --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/TransactionIdTest.java @@ -0,0 +1,42 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm; + +import org.junit.jupiter.api.Test; + +import static org.assertj.core.api.Assertions.assertThat; + +class TransactionIdTest { + + @Test + void shouldSetGetAndClear() { + TransactionId.set("42"); + + assertThat(TransactionId.get()).contains("42"); + TransactionId.clear(); + assertThat(TransactionId.get()).isEmpty(); + } + +} diff --git a/scm-plugins/scm-hg-plugin/pom.xml b/scm-plugins/scm-hg-plugin/pom.xml index a6f125a6f9..3b280b4519 100644 --- a/scm-plugins/scm-hg-plugin/pom.xml +++ b/scm-plugins/scm-hg-plugin/pom.xml @@ -50,9 +50,23 @@ com.google.guava guava + + org.slf4j + slf4j-simple + + + org.slf4j + slf4j-nop + + + ch.qos.logback + logback-classic + test + + diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java index 597a56af15..1888f0aeae 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/DefaultHgEnvironmentBuilder.java @@ -27,6 +27,7 @@ package sonia.scm.repository; import com.google.common.annotations.VisibleForTesting; import com.google.common.collect.ImmutableMap; +import sonia.scm.TransactionId; import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.repository.hooks.HookServer; import sonia.scm.security.AccessToken; @@ -60,6 +61,8 @@ public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder { static final String ENV_REPOSITORY_ID = "SCM_REPOSITORY_ID"; @VisibleForTesting static final String ENV_HTTP_POST_ARGS = "SCM_HTTP_POST_ARGS"; + @VisibleForTesting + static final String ENV_TRANSACTION_ID = "SCM_TRANSACTION_ID"; private final AccessTokenBuilderFactory accessTokenBuilderFactory; private final HgRepositoryHandler repositoryHandler; @@ -114,6 +117,7 @@ public class DefaultHgEnvironmentBuilder implements HgEnvironmentBuilder { env.put(ENV_HOOK_PORT, String.valueOf(getHookPort())); env.put(ENV_BEARER_TOKEN, accessToken()); env.put(ENV_CHALLENGE, hookEnvironment.getChallenge()); + TransactionId.get().ifPresent(transactionId -> env.put(ENV_TRANSACTION_ID, transactionId)); } private String accessToken() { diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index 2d035bf32f..9ec95a5dcc 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -34,6 +34,7 @@ import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; +import sonia.scm.TransactionId; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; import sonia.scm.repository.spi.HgHookContextProvider; @@ -90,6 +91,7 @@ class DefaultHookHandler implements HookHandler { private Response handleHookRequest(Request request) { LOG.trace("process {} hook for node {}", request.getType(), request.getNode()); + TransactionId.set(request.getTransactionId()); HgHookContextProvider context = hookContextProviderFactory.create(request.getRepositoryId(), request.getNode()); @@ -119,6 +121,7 @@ class DefaultHookHandler implements HookHandler { return error(context, ex); } finally { environment.clearPendingState(); + TransactionId.clear(); } } @@ -161,6 +164,7 @@ class DefaultHookHandler implements HookHandler { public static class Request { private String token; private RepositoryHookType type; + private String transactionId; private String repositoryId; private String challenge; private String node; diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py index 72c5f7b528..1fdbc07b15 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py @@ -36,6 +36,7 @@ port = os.environ['SCM_HOOK_PORT'] challenge = os.environ['SCM_CHALLENGE'] token = os.environ['SCM_BEARER_TOKEN'] repositoryId = os.environ['SCM_REPOSITORY_ID'] +transactionId = os.environ['SCM_TRANSACTION_ID'] def print_messages(ui, messages): for message in messages: @@ -50,7 +51,7 @@ def fire_hook(ui, repo, hooktype, node): ui.debug( b"send scm-hook for " + node + b"\n" ) connection = socket.socket(socket.AF_INET, socket.SOCK_STREAM) try: - values = {'token': token, 'type': hooktype, 'repositoryId': repositoryId, 'challenge': challenge, 'node': node.decode('utf8') } + values = {'token': token, 'type': hooktype, 'repositoryId': repositoryId, 'transactionId': transactionId, 'challenge': challenge, 'node': node.decode('utf8') } connection.connect(("127.0.0.1", int(port))) connection.send(json.dumps(values).encode('utf-8')) diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java index c28bb21e78..7bf3a3c5bf 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/DefaultHgEnvironmentBuilderTest.java @@ -33,6 +33,7 @@ import org.mockito.InjectMocks; import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.SCMContext; +import sonia.scm.TransactionId; import sonia.scm.repository.hooks.HookEnvironment; import sonia.scm.repository.hooks.HookServer; import sonia.scm.security.AccessToken; @@ -102,6 +103,14 @@ class DefaultHgEnvironmentBuilderTest { .containsEntry(ENV_HOOK_PORT, "2042"); } + @Test + void shouldSetTransactionId() throws IOException { + TransactionId.set("ti42"); + Repository heartOfGold = prepareForWrite("/opt/python", "21"); + Map env = builder.write(heartOfGold); + assertThat(env).containsEntry(ENV_TRANSACTION_ID, "ti42"); + } + @Test void shouldThrowIllegalStateIfServerCouldNotBeStarted() throws IOException { when(server.start()).thenThrow(new IOException("failed to start")); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index fcdbc4792c..541e0620ef 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -36,6 +36,7 @@ import org.mockito.Mock; import org.mockito.junit.jupiter.MockitoExtension; import sonia.scm.ExceptionWithContext; import sonia.scm.NotFoundException; +import sonia.scm.TransactionId; import sonia.scm.repository.RepositoryHookType; import sonia.scm.repository.api.HgHookMessage; import sonia.scm.repository.api.HgHookMessageProvider; @@ -188,6 +189,23 @@ class DefaultHookHandlerTest { assertThat(received).containsExactly("Some note", "Some error", "Abort it"); } + @Test + void shouldSetAndClearTransactionId() throws IOException { + mockMessageProvider(); + + AtomicReference ref = new AtomicReference<>(); + doAnswer(ic -> { + TransactionId.get().ifPresent(ref::set); + return null; + }).when(hookEventFacade).handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + send(request); + + assertThat(ref).hasValue("ti21"); + assertThat(TransactionId.get()).isEmpty(); + } + @Test void shouldHandleAuthenticationFailure() throws IOException { doThrow(AuthenticationException.class) @@ -244,7 +262,7 @@ class DefaultHookHandlerTest { private DefaultHookHandler.Request createRequest(RepositoryHookType type, String challenge) { String secret = CipherUtil.getInstance().encode("secret"); return new DefaultHookHandler.Request( - secret, type, "42", challenge, "abc" + secret, type, "ti21", "42", challenge, "abc" ); } diff --git a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java index 6272e04fd8..d254546ff0 100644 --- a/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java +++ b/scm-webapp/src/main/java/sonia/scm/filter/MDCFilter.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.filter; //~--- non-JDK imports -------------------------------------------------------- @@ -34,6 +34,7 @@ import org.apache.shiro.subject.Subject; import org.slf4j.MDC; import sonia.scm.SCMContext; +import sonia.scm.TransactionId; import sonia.scm.security.DefaultKeyGenerator; import sonia.scm.web.filter.HttpFilter; @@ -72,9 +73,6 @@ public class MDCFilter extends HttpFilter @VisibleForTesting static final String MDC_USERNAME = "username"; - @VisibleForTesting - static final String MDC_TRANSACTION_ID = "transaction_id"; - //~--- methods -------------------------------------------------------------- /** @@ -98,7 +96,7 @@ public class MDCFilter extends HttpFilter MDC.put(MDC_CLIENT_HOST, request.getRemoteHost()); MDC.put(MDC_REQUEST_METHOD, request.getMethod()); MDC.put(MDC_REQUEST_URI, request.getRequestURI()); - MDC.put(MDC_TRANSACTION_ID, TRANSACTION_KEY_GENERATOR.createKey()); + TransactionId.set(TRANSACTION_KEY_GENERATOR.createKey()); try { @@ -111,7 +109,7 @@ public class MDCFilter extends HttpFilter MDC.remove(MDC_CLIENT_HOST); MDC.remove(MDC_REQUEST_METHOD); MDC.remove(MDC_REQUEST_URI); - MDC.remove(MDC_TRANSACTION_ID); + TransactionId.clear(); } } diff --git a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java index db12e17c1d..935285dbcf 100644 --- a/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java +++ b/scm-webapp/src/test/java/sonia/scm/filter/MDCFilterTest.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.filter; import com.github.sdorra.shiro.ShiroRule; @@ -34,6 +34,7 @@ import org.mockito.junit.MockitoJUnitRunner; import org.slf4j.MDC; import sonia.scm.AbstractTestBase; import sonia.scm.SCMContext; +import sonia.scm.TransactionId; import javax.servlet.FilterChain; import javax.servlet.ServletException; @@ -50,28 +51,28 @@ import static org.mockito.Mockito.when; /** * Unit tests for {@link MDCFilter}. - * + * * @author Sebastian Sdorra */ @RunWith(MockitoJUnitRunner.Silent.class) public class MDCFilterTest extends AbstractTestBase { - + @Rule public ShiroRule shiro = new ShiroRule(); - + @Mock private HttpServletRequest request; - + @Mock private HttpServletResponse response; - + private final MDCFilter filter = new MDCFilter(); /** * Tests {@link MDCFilter#doFilter(HttpServletRequest, HttpServletResponse, FilterChain)}. - * + * * @throws IOException - * @throws ServletException + * @throws ServletException */ @Test @SubjectAware( @@ -85,44 +86,44 @@ public class MDCFilterTest extends AbstractTestBase { when(request.getRemoteAddr()).thenReturn("127.0.0.1"); when(request.getRemoteHost()).thenReturn("localhost"); when(request.getMethod()).thenReturn("GET"); - + MDCCapturingFilterChain chain = new MDCCapturingFilterChain(); filter.doFilter(request, response, chain); - + assertNotNull(chain.ctx); assertEquals("trillian", chain.ctx.get(MDCFilter.MDC_USERNAME)); assertEquals("api/v1/repositories", chain.ctx.get(MDCFilter.MDC_REQUEST_URI)); assertEquals("127.0.0.1", chain.ctx.get(MDCFilter.MDC_CLIENT_IP)); assertEquals("localhost", chain.ctx.get(MDCFilter.MDC_CLIENT_HOST)); assertEquals("GET", chain.ctx.get(MDCFilter.MDC_REQUEST_METHOD)); - assertNotNull(chain.ctx.get(MDCFilter.MDC_TRANSACTION_ID)); + assertNotNull(chain.ctx.get(TransactionId.KEY)); } - + /** * Tests {@link MDCFilter#doFilter(HttpServletRequest, HttpServletResponse, FilterChain)} as anonymous user. - * + * * @throws IOException - * @throws ServletException + * @throws ServletException */ @Test @SubjectAware public void testDoFilterAsAnonymous() throws IOException, ServletException { MDCCapturingFilterChain chain = new MDCCapturingFilterChain(); filter.doFilter(request, response, chain); - + assertNotNull(chain.ctx); assertEquals(SCMContext.USER_ANONYMOUS, chain.ctx.get(MDCFilter.MDC_USERNAME)); } - + private static class MDCCapturingFilterChain implements FilterChain { private Map ctx; - + @Override public void doFilter(ServletRequest request, ServletResponse response) throws IOException, ServletException { this.ctx = MDC.getCopyOfContextMap(); } - + } } From 959dfb8f451eecfc6e2c5311102f72a5a3ce3933 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Thu, 19 Nov 2020 14:49:29 +0100 Subject: [PATCH 26/83] Fix compiler error --- .../main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java index 743cd2cfaf..7106c7c85a 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/api/v2/resources/UpdateHgConfigDto.java @@ -39,7 +39,5 @@ interface UpdateHgConfigDto { boolean isShowRevisionInId(); - boolean isDisableHookSSLValidation(); - boolean isEnableHttpPostArgs(); } From 90a4908fa19bc68a2096ad38acd7715fb3df9ee8 Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Fri, 23 Oct 2020 22:15:39 +0000 Subject: [PATCH 27/83] fix: pom.xml to reduce vulnerabilities The following vulnerabilities are fixed with an upgrade: - https://snyk.io/vuln/SNYK-JAVA-COMGOOGLEGUAVA-1015415 --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index b8192de3a8..f25d350ab5 100644 --- a/pom.xml +++ b/pom.xml @@ -937,7 +937,7 @@ 1.10.1-scm2 - 26.0-jre + 30.0-android 12.16.1 From cafedeecbbb0d661d18708aba4f7cd27232f01e2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 26 Oct 2020 08:22:26 +0100 Subject: [PATCH 28/83] Use JRE version instead of android --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index f25d350ab5..7898bc0720 100644 --- a/pom.xml +++ b/pom.xml @@ -937,7 +937,7 @@ 1.10.1-scm2 - 30.0-android + 30.0-jre 12.16.1 From ec4544fffee487c3e599e6df4fc48db24c3b4aee Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Fri, 20 Nov 2020 10:22:36 +0100 Subject: [PATCH 29/83] Adjust changelog for release 2.10.0 --- CHANGELOG.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 84c6c9edb1..598066c4d3 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## [2.10.0] - 2020-11-20 ### Added - Delete branches directly in the UI ([#1422](https://github.com/scm-manager/scm-manager/pull/1422)) - Lookup command which provides further repository information ([#1415](https://github.com/scm-manager/scm-manager/pull/1415)) From a4d0771f6f43e12ccc9495e36d258cceb03e2c28 Mon Sep 17 00:00:00 2001 From: CES Marvin Date: Fri, 20 Nov 2020 09:36:03 +0000 Subject: [PATCH 30/83] release version 2.10.0 --- lerna.json | 2 +- pom.xml | 2 +- scm-annotation-processor/pom.xml | 6 ++--- scm-annotations/pom.xml | 4 +-- scm-core/pom.xml | 8 +++--- scm-dao-xml/pom.xml | 8 +++--- scm-it/pom.xml | 20 +++++++------- scm-packaging/deb/pom.xml | 6 ++--- scm-packaging/docker/pom.xml | 4 +-- scm-packaging/helm/pom.xml | 4 +-- scm-packaging/pom.xml | 4 +-- scm-packaging/release-yaml/pom.xml | 4 +-- scm-packaging/rpm/pom.xml | 6 ++--- scm-packaging/unix/pom.xml | 4 +-- scm-packaging/windows/pom.xml | 4 +-- scm-plugins/pom.xml | 10 +++---- scm-plugins/scm-git-plugin/package.json | 4 +-- scm-plugins/scm-git-plugin/pom.xml | 2 +- scm-plugins/scm-hg-plugin/package.json | 4 +-- scm-plugins/scm-hg-plugin/pom.xml | 2 +- .../scm-integration-test-plugin/pom.xml | 4 +-- scm-plugins/scm-legacy-plugin/package.json | 4 +-- scm-plugins/scm-legacy-plugin/pom.xml | 4 +-- scm-plugins/scm-svn-plugin/package.json | 4 +-- scm-plugins/scm-svn-plugin/pom.xml | 2 +- scm-server/pom.xml | 4 +-- scm-test/pom.xml | 6 ++--- scm-ui/babel-preset/package.json | 2 +- scm-ui/e2e-tests/package.json | 2 +- scm-ui/eslint-config/package.json | 2 +- scm-ui/jest-preset/package.json | 2 +- scm-ui/pom.xml | 4 +-- scm-ui/prettier-config/package.json | 2 +- scm-ui/tsconfig/package.json | 2 +- scm-ui/ui-components/package.json | 8 +++--- scm-ui/ui-extensions/package.json | 2 +- scm-ui/ui-plugins/package.json | 22 ++++++++-------- scm-ui/ui-polyfill/package.json | 2 +- scm-ui/ui-scripts/package.json | 2 +- scm-ui/ui-styles/package.json | 2 +- scm-ui/ui-tests/package.json | 2 +- scm-ui/ui-types/package.json | 2 +- scm-ui/ui-webapp/package.json | 8 +++--- scm-webapp/pom.xml | 26 +++++++++---------- 44 files changed, 114 insertions(+), 114 deletions(-) diff --git a/lerna.json b/lerna.json index 210af935bc..e03bc6c0b9 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "2.10.0-SNAPSHOT" + "version": "2.10.0" } diff --git a/pom.xml b/pom.xml index b8192de3a8..3c9fd1d6b7 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ sonia.scm scm pom - 2.10.0-SNAPSHOT + 2.10.0 The easiest way to share your Git, Mercurial and Subversion repositories. diff --git a/scm-annotation-processor/pom.xml b/scm-annotation-processor/pom.xml index 62087852cd..c99326ef6a 100644 --- a/scm-annotation-processor/pom.xml +++ b/scm-annotation-processor/pom.xml @@ -31,12 +31,12 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-annotation-processor - 2.10.0-SNAPSHOT + 2.10.0 scm-annotation-processor @@ -46,7 +46,7 @@ sonia.scm scm-annotations - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-annotations/pom.xml b/scm-annotations/pom.xml index 6e70ada1ab..4cc09bb8a6 100644 --- a/scm-annotations/pom.xml +++ b/scm-annotations/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 scm-annotations - 2.10.0-SNAPSHOT + 2.10.0 scm-annotations diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 85a539c471..2d155e17a9 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -31,11 +31,11 @@ scm sonia.scm - 2.10.0-SNAPSHOT + 2.10.0 scm-core - 2.10.0-SNAPSHOT + 2.10.0 scm-core @@ -54,7 +54,7 @@ sonia.scm scm-annotations - 2.10.0-SNAPSHOT + 2.10.0 @@ -227,7 +227,7 @@ sonia.scm scm-annotation-processor - 2.10.0-SNAPSHOT + 2.10.0 provided diff --git a/scm-dao-xml/pom.xml b/scm-dao-xml/pom.xml index 0f43eafa51..b6df145875 100644 --- a/scm-dao-xml/pom.xml +++ b/scm-dao-xml/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 scm-dao-xml - 2.10.0-SNAPSHOT + 2.10.0 scm-dao-xml @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.0-SNAPSHOT + 2.10.0 @@ -58,7 +58,7 @@ sonia.scm scm-test - 2.10.0-SNAPSHOT + 2.10.0 test diff --git a/scm-it/pom.xml b/scm-it/pom.xml index 1817845989..00aedcfd6a 100644 --- a/scm-it/pom.xml +++ b/scm-it/pom.xml @@ -31,40 +31,40 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-it war - 2.10.0-SNAPSHOT + 2.10.0 scm-it sonia.scm scm-core - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-test - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm.plugins scm-git-plugin - 2.10.0-SNAPSHOT + 2.10.0 test sonia.scm.plugins scm-git-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test @@ -72,14 +72,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.0-SNAPSHOT + 2.10.0 test sonia.scm.plugins scm-hg-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test @@ -87,14 +87,14 @@ sonia.scm.plugins scm-svn-plugin - 2.10.0-SNAPSHOT + 2.10.0 test sonia.scm.plugins scm-svn-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test diff --git a/scm-packaging/deb/pom.xml b/scm-packaging/deb/pom.xml index 569e1d9e73..9560ebea1b 100644 --- a/scm-packaging/deb/pom.xml +++ b/scm-packaging/deb/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 deb deb - 2.10.0-SNAPSHOT + 2.10.0 Packaging for Debian/Ubuntu deb @@ -46,7 +46,7 @@ sonia.scm scm-server - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-packaging/docker/pom.xml b/scm-packaging/docker/pom.xml index b12f198695..a68196476d 100644 --- a/scm-packaging/docker/pom.xml +++ b/scm-packaging/docker/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 docker pom - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-packaging/helm/pom.xml b/scm-packaging/helm/pom.xml index 2a642dee27..199861ae6b 100644 --- a/scm-packaging/helm/pom.xml +++ b/scm-packaging/helm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 helm helm - 2.10.0-SNAPSHOT + 2.10.0 3.2.1 diff --git a/scm-packaging/pom.xml b/scm-packaging/pom.xml index faf3e5d404..eef390dbe1 100644 --- a/scm-packaging/pom.xml +++ b/scm-packaging/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm.packaging scm-packaging pom - 2.10.0-SNAPSHOT + 2.10.0 packages.scm-manager.org diff --git a/scm-packaging/release-yaml/pom.xml b/scm-packaging/release-yaml/pom.xml index f2bb1e07d2..7b086d454f 100644 --- a/scm-packaging/release-yaml/pom.xml +++ b/scm-packaging/release-yaml/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 release-yaml pom - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-packaging/rpm/pom.xml b/scm-packaging/rpm/pom.xml index 98b4dacad7..f127d245a6 100644 --- a/scm-packaging/rpm/pom.xml +++ b/scm-packaging/rpm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 rpm rpm - 2.10.0-SNAPSHOT + 2.10.0 Packaging for RedHat/Centos/Fedora rpm @@ -52,7 +52,7 @@ sonia.scm scm-server - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-packaging/unix/pom.xml b/scm-packaging/unix/pom.xml index 41063ca51d..1fe1212352 100644 --- a/scm-packaging/unix/pom.xml +++ b/scm-packaging/unix/pom.xml @@ -31,12 +31,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 unix pom - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-packaging/windows/pom.xml b/scm-packaging/windows/pom.xml index 617f6a8b34..565de8d582 100644 --- a/scm-packaging/windows/pom.xml +++ b/scm-packaging/windows/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0-SNAPSHOT + 2.10.0 windows pom - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index 33b1061c3f..7d166c7747 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm.plugins scm-plugins pom - 2.10.0-SNAPSHOT + 2.10.0 scm-plugins @@ -60,7 +60,7 @@ sonia.scm scm-core - 2.10.0-SNAPSHOT + 2.10.0 provided @@ -69,7 +69,7 @@ sonia.scm scm-annotation-processor - 2.10.0-SNAPSHOT + 2.10.0 provided @@ -99,7 +99,7 @@ sonia.scm scm-test - 2.10.0-SNAPSHOT + 2.10.0 test diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index a0ca9cf3ac..079d51176c 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-git-plugin", "private": true, - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -20,6 +20,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.0" } } diff --git a/scm-plugins/scm-git-plugin/pom.xml b/scm-plugins/scm-git-plugin/pom.xml index 23c7e50527..f91aa27aff 100644 --- a/scm-plugins/scm-git-plugin/pom.xml +++ b/scm-plugins/scm-git-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.0-SNAPSHOT + 2.10.0 scm-git-plugin diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 107dde3e2e..84d124f80f 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-hg-plugin", "private": true, - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.0" } } diff --git a/scm-plugins/scm-hg-plugin/pom.xml b/scm-plugins/scm-hg-plugin/pom.xml index a6f125a6f9..40a529f6af 100644 --- a/scm-plugins/scm-hg-plugin/pom.xml +++ b/scm-plugins/scm-hg-plugin/pom.xml @@ -31,7 +31,7 @@ sonia.scm.plugins scm-plugins - 2.10.0-SNAPSHOT + 2.10.0 scm-hg-plugin diff --git a/scm-plugins/scm-integration-test-plugin/pom.xml b/scm-plugins/scm-integration-test-plugin/pom.xml index e4575edcf6..cd627de870 100644 --- a/scm-plugins/scm-integration-test-plugin/pom.xml +++ b/scm-plugins/scm-integration-test-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.0-SNAPSHOT + 2.10.0 scm-integration-test-plugin Add functions for integration tests. This is not intended for production systems. - 2.10.0-SNAPSHOT + 2.10.0 smp diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index 2772a2c2b2..edd65a4924 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-legacy-plugin", "private": true, - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "main": "./src/main/js/index.tsx", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.0" } } diff --git a/scm-plugins/scm-legacy-plugin/pom.xml b/scm-plugins/scm-legacy-plugin/pom.xml index 30fe94e9a8..fbf209874d 100644 --- a/scm-plugins/scm-legacy-plugin/pom.xml +++ b/scm-plugins/scm-legacy-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.0-SNAPSHOT + 2.10.0 scm-legacy-plugin Support migrated repository urls and v1 passwords - 2.10.0-SNAPSHOT + 2.10.0 smp diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index b8dbeed962..1debc13844 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-svn-plugin", "private": true, - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.0" } } diff --git a/scm-plugins/scm-svn-plugin/pom.xml b/scm-plugins/scm-svn-plugin/pom.xml index f127b00c6d..d3ce5a44b9 100644 --- a/scm-plugins/scm-svn-plugin/pom.xml +++ b/scm-plugins/scm-svn-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.0-SNAPSHOT + 2.10.0 scm-svn-plugin diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 6016d0d537..baa91079dc 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-server - 2.10.0-SNAPSHOT + 2.10.0 scm-server jar diff --git a/scm-test/pom.xml b/scm-test/pom.xml index 3d155f8630..0366ed57f6 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-test - 2.10.0-SNAPSHOT + 2.10.0 scm-test @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.0-SNAPSHOT + 2.10.0 diff --git a/scm-ui/babel-preset/package.json b/scm-ui/babel-preset/package.json index a37d1989f0..e51f634867 100644 --- a/scm-ui/babel-preset/package.json +++ b/scm-ui/babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/babel-preset", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "description": "Babel configuration for scm-manager and its plugins", "main": "index.js", diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index 0fbc576449..d6485b6499 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/e2e-tests", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "End to end Tests for SCM-Manager", "main": "index.js", "author": "Eduard Heimbuch ", diff --git a/scm-ui/eslint-config/package.json b/scm-ui/eslint-config/package.json index 44b318c1b0..6f37d7974b 100644 --- a/scm-ui/eslint-config/package.json +++ b/scm-ui/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/eslint-config", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "ESLint configuration for scm-manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/jest-preset/package.json b/scm-ui/jest-preset/package.json index de6e233d3c..536647a166 100644 --- a/scm-ui/jest-preset/package.json +++ b/scm-ui/jest-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/jest-preset", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "Jest presets for SCM-Manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index 0e9633053d..1cbf3bc1e6 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-ui war - 2.10.0-SNAPSHOT + 2.10.0 scm-ui diff --git a/scm-ui/prettier-config/package.json b/scm-ui/prettier-config/package.json index 9594fb3819..5212684f98 100644 --- a/scm-ui/prettier-config/package.json +++ b/scm-ui/prettier-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/prettier-config", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "description": "Prettier configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/tsconfig/package.json b/scm-ui/tsconfig/package.json index 1f9230a619..946179d32a 100644 --- a/scm-ui/tsconfig/package.json +++ b/scm-ui/tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/tsconfig", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "description": "TypeScript configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 8990acba03..0731319fdc 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-components", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "UI Components for SCM-Manager and its plugins", "main": "src/index.ts", "files": [ @@ -18,7 +18,7 @@ "update-storyshots": "jest --testPathPattern=\"storyshots.test.ts\" --collectCoverage=false -u" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.10.0", "@storybook/addon-actions": "^6.0.28", "@storybook/addon-storyshots": "^6.0.28", "@storybook/react": "^6.0.28", @@ -50,8 +50,8 @@ "worker-plugin": "^3.2.0" }, "dependencies": { - "@scm-manager/ui-extensions": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-types": "^2.10.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.10.0", + "@scm-manager/ui-types": "^2.10.0", "classnames": "^2.2.6", "date-fns": "^2.4.1", "gitdiff-parser": "^0.1.2", diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index 64ee6367cc..5acc6fd83c 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-extensions", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "main": "src/index.ts", "license": "MIT", "private": false, diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index 97a840f7c8..605cff2032 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,13 +1,13 @@ { "name": "@scm-manager/ui-plugins", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "license": "MIT", "bin": { "ui-plugins": "./bin/ui-plugins.js" }, "dependencies": { - "@scm-manager/ui-components": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-extensions": "^2.10.0-SNAPSHOT", + "@scm-manager/ui-components": "^2.10.0", + "@scm-manager/ui-extensions": "^2.10.0", "classnames": "^2.2.6", "query-string": "^5.0.1", "react": "^16.10.2", @@ -18,14 +18,14 @@ "styled-components": "^5.1.0" }, "devDependencies": { - "@scm-manager/babel-preset": "^2.10.0-SNAPSHOT", - "@scm-manager/eslint-config": "^2.10.0-SNAPSHOT", - "@scm-manager/jest-preset": "^2.10.0-SNAPSHOT", - "@scm-manager/prettier-config": "^2.10.0-SNAPSHOT", - "@scm-manager/tsconfig": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-scripts": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-tests": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-types": "^2.10.0-SNAPSHOT", + "@scm-manager/babel-preset": "^2.10.0", + "@scm-manager/eslint-config": "^2.10.0", + "@scm-manager/jest-preset": "^2.10.0", + "@scm-manager/prettier-config": "^2.10.0", + "@scm-manager/tsconfig": "^2.10.0", + "@scm-manager/ui-scripts": "^2.10.0", + "@scm-manager/ui-tests": "^2.10.0", + "@scm-manager/ui-types": "^2.10.0", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-ui/ui-polyfill/package.json b/scm-ui/ui-polyfill/package.json index fd8b63aa29..ffeb5523dc 100644 --- a/scm-ui/ui-polyfill/package.json +++ b/scm-ui/ui-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-polyfill", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "Polyfills for SCM-Manager UI", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index 57ecfd1ac4..e00a14d817 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-scripts", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "Build scripts for SCM-Manager", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index 0c0df6b16b..adbfa868c1 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-styles", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "Styles for SCM-Manager", "main": "src/scm.scss", "license": "MIT", diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index fcbf2c137b..0dd17d155c 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-tests", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "UI-Tests helpers", "author": "Sebastian Sdorra ", "license": "MIT", diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index e420646d82..22a7010e7a 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-types", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "description": "Flow types for SCM-Manager related Objects", "main": "src/index.ts", "files": [ diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index fd43d89102..19183744d4 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -1,10 +1,10 @@ { "name": "@scm-manager/ui-webapp", - "version": "2.10.0-SNAPSHOT", + "version": "2.10.0", "private": true, "dependencies": { - "@scm-manager/ui-components": "^2.10.0-SNAPSHOT", - "@scm-manager/ui-extensions": "^2.10.0-SNAPSHOT", + "@scm-manager/ui-components": "^2.10.0", + "@scm-manager/ui-extensions": "^2.10.0", "classnames": "^2.2.5", "history": "^4.10.1", "i18next": "^19.6.0", @@ -29,7 +29,7 @@ "test": "jest" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.10.0", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index adb0f51980..13158a1a59 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-webapp war - 2.10.0-SNAPSHOT + 2.10.0 scm-webapp @@ -48,7 +48,7 @@ sonia.scm scm-annotation-processor - 2.10.0-SNAPSHOT + 2.10.0 provided @@ -73,13 +73,13 @@ sonia.scm scm-core - 2.10.0-SNAPSHOT + 2.10.0 sonia.scm scm-dao-xml - 2.10.0-SNAPSHOT + 2.10.0 @@ -343,7 +343,7 @@ sonia.scm scm-test - 2.10.0-SNAPSHOT + 2.10.0 test @@ -405,7 +405,7 @@ sonia.scm.plugins scm-git-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test @@ -413,14 +413,14 @@ sonia.scm.plugins scm-git-plugin - 2.10.0-SNAPSHOT + 2.10.0 test sonia.scm.plugins scm-hg-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test @@ -428,14 +428,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.0-SNAPSHOT + 2.10.0 test sonia.scm.plugins scm-svn-plugin - 2.10.0-SNAPSHOT + 2.10.0 tests test @@ -443,7 +443,7 @@ sonia.scm.plugins scm-svn-plugin - 2.10.0-SNAPSHOT + 2.10.0 test @@ -729,7 +729,7 @@ sonia.scm scm-ui - 2.10.0-SNAPSHOT + 2.10.0 war From 9baa1f930b2963691558da14125b72f5365756a4 Mon Sep 17 00:00:00 2001 From: CES Marvin Date: Fri, 20 Nov 2020 10:22:37 +0000 Subject: [PATCH 31/83] prepare for next development iteration --- lerna.json | 2 +- pom.xml | 2 +- scm-annotation-processor/pom.xml | 6 ++--- scm-annotations/pom.xml | 4 +-- scm-core/pom.xml | 8 +++--- scm-dao-xml/pom.xml | 8 +++--- scm-it/pom.xml | 20 +++++++------- scm-packaging/deb/pom.xml | 6 ++--- scm-packaging/docker/pom.xml | 4 +-- scm-packaging/helm/pom.xml | 4 +-- scm-packaging/pom.xml | 4 +-- scm-packaging/release-yaml/pom.xml | 4 +-- scm-packaging/rpm/pom.xml | 6 ++--- scm-packaging/unix/pom.xml | 4 +-- scm-packaging/windows/pom.xml | 4 +-- scm-plugins/pom.xml | 10 +++---- scm-plugins/scm-git-plugin/package.json | 4 +-- scm-plugins/scm-git-plugin/pom.xml | 2 +- scm-plugins/scm-hg-plugin/package.json | 4 +-- scm-plugins/scm-hg-plugin/pom.xml | 2 +- .../scm-integration-test-plugin/pom.xml | 4 +-- scm-plugins/scm-legacy-plugin/package.json | 4 +-- scm-plugins/scm-legacy-plugin/pom.xml | 4 +-- scm-plugins/scm-svn-plugin/package.json | 4 +-- scm-plugins/scm-svn-plugin/pom.xml | 2 +- scm-server/pom.xml | 4 +-- scm-test/pom.xml | 6 ++--- scm-ui/babel-preset/package.json | 2 +- scm-ui/e2e-tests/package.json | 2 +- scm-ui/eslint-config/package.json | 2 +- scm-ui/jest-preset/package.json | 2 +- scm-ui/pom.xml | 4 +-- scm-ui/prettier-config/package.json | 2 +- scm-ui/tsconfig/package.json | 2 +- scm-ui/ui-components/package.json | 8 +++--- scm-ui/ui-extensions/package.json | 2 +- scm-ui/ui-plugins/package.json | 22 ++++++++-------- scm-ui/ui-polyfill/package.json | 2 +- scm-ui/ui-scripts/package.json | 2 +- scm-ui/ui-styles/package.json | 2 +- scm-ui/ui-tests/package.json | 2 +- scm-ui/ui-types/package.json | 2 +- scm-ui/ui-webapp/package.json | 8 +++--- scm-webapp/pom.xml | 26 +++++++++---------- 44 files changed, 114 insertions(+), 114 deletions(-) diff --git a/lerna.json b/lerna.json index e03bc6c0b9..a4385558c7 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "2.10.0" + "version": "2.11.0-SNAPSHOT" } diff --git a/pom.xml b/pom.xml index 3c9fd1d6b7..603bba5657 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ sonia.scm scm pom - 2.10.0 + 2.11.0-SNAPSHOT The easiest way to share your Git, Mercurial and Subversion repositories. diff --git a/scm-annotation-processor/pom.xml b/scm-annotation-processor/pom.xml index c99326ef6a..87b63417d9 100644 --- a/scm-annotation-processor/pom.xml +++ b/scm-annotation-processor/pom.xml @@ -31,12 +31,12 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-annotation-processor - 2.10.0 + 2.11.0-SNAPSHOT scm-annotation-processor @@ -46,7 +46,7 @@ sonia.scm scm-annotations - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-annotations/pom.xml b/scm-annotations/pom.xml index 4cc09bb8a6..f83dac689c 100644 --- a/scm-annotations/pom.xml +++ b/scm-annotations/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT scm-annotations - 2.10.0 + 2.11.0-SNAPSHOT scm-annotations diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 2d155e17a9..8346a25fbe 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -31,11 +31,11 @@ scm sonia.scm - 2.10.0 + 2.11.0-SNAPSHOT scm-core - 2.10.0 + 2.11.0-SNAPSHOT scm-core @@ -54,7 +54,7 @@ sonia.scm scm-annotations - 2.10.0 + 2.11.0-SNAPSHOT @@ -227,7 +227,7 @@ sonia.scm scm-annotation-processor - 2.10.0 + 2.11.0-SNAPSHOT provided diff --git a/scm-dao-xml/pom.xml b/scm-dao-xml/pom.xml index b6df145875..e9001f190e 100644 --- a/scm-dao-xml/pom.xml +++ b/scm-dao-xml/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT scm-dao-xml - 2.10.0 + 2.11.0-SNAPSHOT scm-dao-xml @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.0 + 2.11.0-SNAPSHOT @@ -58,7 +58,7 @@ sonia.scm scm-test - 2.10.0 + 2.11.0-SNAPSHOT test diff --git a/scm-it/pom.xml b/scm-it/pom.xml index 00aedcfd6a..acc6971500 100644 --- a/scm-it/pom.xml +++ b/scm-it/pom.xml @@ -31,40 +31,40 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-it war - 2.10.0 + 2.11.0-SNAPSHOT scm-it sonia.scm scm-core - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-test - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm.plugins scm-git-plugin - 2.10.0 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-git-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test @@ -72,14 +72,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.0 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-hg-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test @@ -87,14 +87,14 @@ sonia.scm.plugins scm-svn-plugin - 2.10.0 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-svn-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test diff --git a/scm-packaging/deb/pom.xml b/scm-packaging/deb/pom.xml index 9560ebea1b..232841d07d 100644 --- a/scm-packaging/deb/pom.xml +++ b/scm-packaging/deb/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT deb deb - 2.10.0 + 2.11.0-SNAPSHOT Packaging for Debian/Ubuntu deb @@ -46,7 +46,7 @@ sonia.scm scm-server - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/docker/pom.xml b/scm-packaging/docker/pom.xml index a68196476d..adba6c8271 100644 --- a/scm-packaging/docker/pom.xml +++ b/scm-packaging/docker/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT docker pom - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/helm/pom.xml b/scm-packaging/helm/pom.xml index 199861ae6b..6d53125f2d 100644 --- a/scm-packaging/helm/pom.xml +++ b/scm-packaging/helm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT helm helm - 2.10.0 + 2.11.0-SNAPSHOT 3.2.1 diff --git a/scm-packaging/pom.xml b/scm-packaging/pom.xml index eef390dbe1..592139e03f 100644 --- a/scm-packaging/pom.xml +++ b/scm-packaging/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm.packaging scm-packaging pom - 2.10.0 + 2.11.0-SNAPSHOT packages.scm-manager.org diff --git a/scm-packaging/release-yaml/pom.xml b/scm-packaging/release-yaml/pom.xml index 7b086d454f..a8b6dc0a94 100644 --- a/scm-packaging/release-yaml/pom.xml +++ b/scm-packaging/release-yaml/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT release-yaml pom - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/rpm/pom.xml b/scm-packaging/rpm/pom.xml index f127d245a6..072a6effed 100644 --- a/scm-packaging/rpm/pom.xml +++ b/scm-packaging/rpm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT rpm rpm - 2.10.0 + 2.11.0-SNAPSHOT Packaging for RedHat/Centos/Fedora rpm @@ -52,7 +52,7 @@ sonia.scm scm-server - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/unix/pom.xml b/scm-packaging/unix/pom.xml index 1fe1212352..a7d09c302c 100644 --- a/scm-packaging/unix/pom.xml +++ b/scm-packaging/unix/pom.xml @@ -31,12 +31,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT unix pom - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/windows/pom.xml b/scm-packaging/windows/pom.xml index 565de8d582..2fb9a1f595 100644 --- a/scm-packaging/windows/pom.xml +++ b/scm-packaging/windows/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.0 + 2.11.0-SNAPSHOT windows pom - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index 7d166c7747..2c61f07a89 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm.plugins scm-plugins pom - 2.10.0 + 2.11.0-SNAPSHOT scm-plugins @@ -60,7 +60,7 @@ sonia.scm scm-core - 2.10.0 + 2.11.0-SNAPSHOT provided @@ -69,7 +69,7 @@ sonia.scm scm-annotation-processor - 2.10.0 + 2.11.0-SNAPSHOT provided @@ -99,7 +99,7 @@ sonia.scm scm-test - 2.10.0 + 2.11.0-SNAPSHOT test diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 079d51176c..4f4087a3f6 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-git-plugin", "private": true, - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -20,6 +20,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-git-plugin/pom.xml b/scm-plugins/scm-git-plugin/pom.xml index f91aa27aff..b5c374758d 100644 --- a/scm-plugins/scm-git-plugin/pom.xml +++ b/scm-plugins/scm-git-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.0 + 2.11.0-SNAPSHOT scm-git-plugin diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 84d124f80f..8aaa4d0b34 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-hg-plugin", "private": true, - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-hg-plugin/pom.xml b/scm-plugins/scm-hg-plugin/pom.xml index 40a529f6af..435bc052b3 100644 --- a/scm-plugins/scm-hg-plugin/pom.xml +++ b/scm-plugins/scm-hg-plugin/pom.xml @@ -31,7 +31,7 @@ sonia.scm.plugins scm-plugins - 2.10.0 + 2.11.0-SNAPSHOT scm-hg-plugin diff --git a/scm-plugins/scm-integration-test-plugin/pom.xml b/scm-plugins/scm-integration-test-plugin/pom.xml index cd627de870..3c54fdefbb 100644 --- a/scm-plugins/scm-integration-test-plugin/pom.xml +++ b/scm-plugins/scm-integration-test-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.0 + 2.11.0-SNAPSHOT scm-integration-test-plugin Add functions for integration tests. This is not intended for production systems. - 2.10.0 + 2.11.0-SNAPSHOT smp diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index edd65a4924..6d7aed0b46 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-legacy-plugin", "private": true, - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.tsx", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-legacy-plugin/pom.xml b/scm-plugins/scm-legacy-plugin/pom.xml index fbf209874d..9b8115c172 100644 --- a/scm-plugins/scm-legacy-plugin/pom.xml +++ b/scm-plugins/scm-legacy-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.0 + 2.11.0-SNAPSHOT scm-legacy-plugin Support migrated repository urls and v1 passwords - 2.10.0 + 2.11.0-SNAPSHOT smp diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 1debc13844..6533d2242b 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-svn-plugin", "private": true, - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.0" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-svn-plugin/pom.xml b/scm-plugins/scm-svn-plugin/pom.xml index d3ce5a44b9..722755991a 100644 --- a/scm-plugins/scm-svn-plugin/pom.xml +++ b/scm-plugins/scm-svn-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.0 + 2.11.0-SNAPSHOT scm-svn-plugin diff --git a/scm-server/pom.xml b/scm-server/pom.xml index baa91079dc..854d17d347 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-server - 2.10.0 + 2.11.0-SNAPSHOT scm-server jar diff --git a/scm-test/pom.xml b/scm-test/pom.xml index 0366ed57f6..fbfc202396 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-test - 2.10.0 + 2.11.0-SNAPSHOT scm-test @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.0 + 2.11.0-SNAPSHOT diff --git a/scm-ui/babel-preset/package.json b/scm-ui/babel-preset/package.json index e51f634867..9cfea3931b 100644 --- a/scm-ui/babel-preset/package.json +++ b/scm-ui/babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/babel-preset", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "Babel configuration for scm-manager and its plugins", "main": "index.js", diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index d6485b6499..252d3dfbe7 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/e2e-tests", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "End to end Tests for SCM-Manager", "main": "index.js", "author": "Eduard Heimbuch ", diff --git a/scm-ui/eslint-config/package.json b/scm-ui/eslint-config/package.json index 6f37d7974b..ea2bf6c5e9 100644 --- a/scm-ui/eslint-config/package.json +++ b/scm-ui/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/eslint-config", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "ESLint configuration for scm-manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/jest-preset/package.json b/scm-ui/jest-preset/package.json index 536647a166..86528da5f4 100644 --- a/scm-ui/jest-preset/package.json +++ b/scm-ui/jest-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/jest-preset", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "Jest presets for SCM-Manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index 1cbf3bc1e6..7ef7daae70 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-ui war - 2.10.0 + 2.11.0-SNAPSHOT scm-ui diff --git a/scm-ui/prettier-config/package.json b/scm-ui/prettier-config/package.json index 5212684f98..6d27467ac8 100644 --- a/scm-ui/prettier-config/package.json +++ b/scm-ui/prettier-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/prettier-config", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "Prettier configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/tsconfig/package.json b/scm-ui/tsconfig/package.json index 946179d32a..bd292addca 100644 --- a/scm-ui/tsconfig/package.json +++ b/scm-ui/tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/tsconfig", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "TypeScript configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 0731319fdc..0a8499a875 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-components", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "UI Components for SCM-Manager and its plugins", "main": "src/index.ts", "files": [ @@ -18,7 +18,7 @@ "update-storyshots": "jest --testPathPattern=\"storyshots.test.ts\" --collectCoverage=false -u" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.0", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", "@storybook/addon-actions": "^6.0.28", "@storybook/addon-storyshots": "^6.0.28", "@storybook/react": "^6.0.28", @@ -50,8 +50,8 @@ "worker-plugin": "^3.2.0" }, "dependencies": { - "@scm-manager/ui-extensions": "^2.10.0", - "@scm-manager/ui-types": "^2.10.0", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", "classnames": "^2.2.6", "date-fns": "^2.4.1", "gitdiff-parser": "^0.1.2", diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index 5acc6fd83c..4d9647eefe 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-extensions", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "main": "src/index.ts", "license": "MIT", "private": false, diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index 605cff2032..2dfc6f60da 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,13 +1,13 @@ { "name": "@scm-manager/ui-plugins", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "bin": { "ui-plugins": "./bin/ui-plugins.js" }, "dependencies": { - "@scm-manager/ui-components": "^2.10.0", - "@scm-manager/ui-extensions": "^2.10.0", + "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", "classnames": "^2.2.6", "query-string": "^5.0.1", "react": "^16.10.2", @@ -18,14 +18,14 @@ "styled-components": "^5.1.0" }, "devDependencies": { - "@scm-manager/babel-preset": "^2.10.0", - "@scm-manager/eslint-config": "^2.10.0", - "@scm-manager/jest-preset": "^2.10.0", - "@scm-manager/prettier-config": "^2.10.0", - "@scm-manager/tsconfig": "^2.10.0", - "@scm-manager/ui-scripts": "^2.10.0", - "@scm-manager/ui-tests": "^2.10.0", - "@scm-manager/ui-types": "^2.10.0", + "@scm-manager/babel-preset": "^2.11.0-SNAPSHOT", + "@scm-manager/eslint-config": "^2.11.0-SNAPSHOT", + "@scm-manager/jest-preset": "^2.11.0-SNAPSHOT", + "@scm-manager/prettier-config": "^2.11.0-SNAPSHOT", + "@scm-manager/tsconfig": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-scripts": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-ui/ui-polyfill/package.json b/scm-ui/ui-polyfill/package.json index ffeb5523dc..70b9955dd7 100644 --- a/scm-ui/ui-polyfill/package.json +++ b/scm-ui/ui-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-polyfill", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "Polyfills for SCM-Manager UI", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index e00a14d817..07096ea1d3 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-scripts", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "Build scripts for SCM-Manager", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index adbfa868c1..376aff3c95 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-styles", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "Styles for SCM-Manager", "main": "src/scm.scss", "license": "MIT", diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index 0dd17d155c..639d5872e7 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-tests", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "UI-Tests helpers", "author": "Sebastian Sdorra ", "license": "MIT", diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index 22a7010e7a..729d5b8c55 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-types", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "description": "Flow types for SCM-Manager related Objects", "main": "src/index.ts", "files": [ diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index 19183744d4..67b92ecfd2 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -1,10 +1,10 @@ { "name": "@scm-manager/ui-webapp", - "version": "2.10.0", + "version": "2.11.0-SNAPSHOT", "private": true, "dependencies": { - "@scm-manager/ui-components": "^2.10.0", - "@scm-manager/ui-extensions": "^2.10.0", + "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", "classnames": "^2.2.5", "history": "^4.10.1", "i18next": "^19.6.0", @@ -29,7 +29,7 @@ "test": "jest" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.0", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 13158a1a59..df5199f6ac 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-webapp war - 2.10.0 + 2.11.0-SNAPSHOT scm-webapp @@ -48,7 +48,7 @@ sonia.scm scm-annotation-processor - 2.10.0 + 2.11.0-SNAPSHOT provided @@ -73,13 +73,13 @@ sonia.scm scm-core - 2.10.0 + 2.11.0-SNAPSHOT sonia.scm scm-dao-xml - 2.10.0 + 2.11.0-SNAPSHOT @@ -343,7 +343,7 @@ sonia.scm scm-test - 2.10.0 + 2.11.0-SNAPSHOT test @@ -405,7 +405,7 @@ sonia.scm.plugins scm-git-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test @@ -413,14 +413,14 @@ sonia.scm.plugins scm-git-plugin - 2.10.0 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-hg-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test @@ -428,14 +428,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.0 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-svn-plugin - 2.10.0 + 2.11.0-SNAPSHOT tests test @@ -443,7 +443,7 @@ sonia.scm.plugins scm-svn-plugin - 2.10.0 + 2.11.0-SNAPSHOT test @@ -729,7 +729,7 @@ sonia.scm scm-ui - 2.10.0 + 2.11.0-SNAPSHOT war From 5d424448351f5a06f2c156b40ec43f74e2b4b89d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Fri, 20 Nov 2020 14:34:21 +0100 Subject: [PATCH 32/83] Add verssion links --- CHANGELOG.md | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 598066c4d3..d901774353 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -415,3 +415,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [2.6.3]: https://www.scm-manager.org/download/2.6.3 [2.7.0]: https://www.scm-manager.org/download/2.7.0 [2.7.1]: https://www.scm-manager.org/download/2.7.1 +[2.8.0]: https://www.scm-manager.org/download/2.8.0 +[2.9.0]: https://www.scm-manager.org/download/2.9.0 +[2.9.1]: https://www.scm-manager.org/download/2.9.1 +[2.10.0]: https://www.scm-manager.org/download/2.10.0 From 73b2c4adc2cbd11351dbde13e876ea450897915c Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sat, 21 Nov 2020 09:22:46 +0100 Subject: [PATCH 33/83] Do not expose internal exception messages --- .../repository/hooks/DefaultHookHandler.java | 8 ++--- .../hooks/DefaultHookHandlerTest.java | 36 +++++++++++++++---- 2 files changed, 33 insertions(+), 11 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index 9ec95a5dcc..fce7d5dfae 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -115,10 +115,10 @@ class DefaultHookHandler implements HookHandler { return error("repository not found"); } catch (ExceptionWithContext ex) { LOG.debug("scm exception on hook occurred", ex); - return error(context, ex); + return error(context, ex.getMessage()); } catch (Exception ex) { LOG.warn("unknown error on hook occurred", ex); - return error(context, ex); + return error(context, "unknown error"); } finally { environment.clearPendingState(); TransactionId.clear(); @@ -133,9 +133,9 @@ class DefaultHookHandler implements HookHandler { subject.login(bearer); } - private Response error(HgHookContextProvider context, Exception ex) { + private Response error(HgHookContextProvider context, String message) { List messages = new ArrayList<>(context.getHgMessageProvider().getMessages()); - messages.add(createErrorMessage(ex.getMessage())); + messages.add(createErrorMessage(message)); return new Response(messages, true); } diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 541e0620ef..1be67c4c44 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -150,7 +150,7 @@ class DefaultHookHandlerTest { DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); DefaultHookHandler.Response response = send(request); - assertError(response, "Something went wrong"); + assertError(response, "unknown error"); } @Test @@ -168,11 +168,8 @@ class DefaultHookHandlerTest { } @Test - void shouldSendMessagesOnException() throws IOException { - HgHookMessageProvider messageProvider = new HgHookMessageProvider(); - messageProvider.sendMessage("Some note"); - messageProvider.sendMessage("Some error"); - mockMessageProvider(messageProvider); + void shouldSendMessagesOnUnknownException() throws IOException { + mockMessageProviderWithMessages(); doThrow(new IllegalStateException("Abort it")) .when(hookEventFacade) @@ -181,12 +178,37 @@ class DefaultHookHandlerTest { DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); DefaultHookHandler.Response response = send(request); + assertMessages(response, "unknown error"); + } + + @Test + void shouldSendMessagesOnExceptionWithContext() throws IOException { + mockMessageProviderWithMessages(); + + doThrow(new TestingException("Exception with Context")) + .when(hookEventFacade) + .handle("42"); + + DefaultHookHandler.Request request = createRequest(RepositoryHookType.POST_RECEIVE); + DefaultHookHandler.Response response = send(request); + + assertMessages(response, "Exception with Context"); + } + + private void assertMessages(DefaultHookHandler.Response response, String errorMessage) { List received = response.getMessages() .stream() .map(HgHookMessage::getMessage) .collect(Collectors.toList()); - assertThat(received).containsExactly("Some note", "Some error", "Abort it"); + assertThat(received).containsExactly("Some note", "Some error", errorMessage); + } + + private void mockMessageProviderWithMessages() { + HgHookMessageProvider messageProvider = new HgHookMessageProvider(); + messageProvider.sendMessage("Some note"); + messageProvider.sendMessage("Some error"); + mockMessageProvider(messageProvider); } @Test From c0ae910d237f9e3c50a75abc01b82b0505c3c588 Mon Sep 17 00:00:00 2001 From: Sebastian Sdorra Date: Sun, 22 Nov 2020 13:35:45 +0100 Subject: [PATCH 34/83] Implement more robust socket hook protocol --- .../repository/hooks/DefaultHookHandler.java | 33 ++++--- .../sonia/scm/repository/hooks/Sockets.java | 60 ++++++++++-- .../resources/sonia/scm/python/scmhooks.py | 26 ++--- .../hooks/DefaultHookHandlerTest.java | 4 +- .../scm/repository/hooks/HookServerTest.java | 4 +- .../scm/repository/hooks/SocketsTest.java | 94 +++++++++++++++++++ 6 files changed, 185 insertions(+), 36 deletions(-) create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/SocketsTest.java diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java index fce7d5dfae..c189299d72 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/DefaultHookHandler.java @@ -79,37 +79,47 @@ class DefaultHookHandler implements HookHandler { LOG.warn("failed to read hook request", e); } finally { LOG.trace("close client socket"); + TransactionId.clear(); close(); } } private void handleHookRequest(InputStream input, OutputStream output) throws IOException { - Request request = Sockets.read(input, Request.class); + Request request = Sockets.receive(input, Request.class); + TransactionId.set(request.getTransactionId()); Response response = handleHookRequest(request); Sockets.send(output, response); } private Response handleHookRequest(Request request) { LOG.trace("process {} hook for node {}", request.getType(), request.getNode()); - TransactionId.set(request.getTransactionId()); + if (!environment.isAcceptAble(request.getChallenge())) { + LOG.warn("received hook with invalid challenge: {}", request.getChallenge()); + return error("invalid hook challenge"); + } + + try { + authenticate(request); + + return fireHook(request); + } catch (AuthenticationException ex) { + LOG.warn("hook authentication failed", ex); + return error("hook authentication failed"); + } + } + + @Nonnull + private Response fireHook(Request request) { HgHookContextProvider context = hookContextProviderFactory.create(request.getRepositoryId(), request.getNode()); try { - if (!environment.isAcceptAble(request.getChallenge())) { - LOG.warn("received hook with invalid challenge: {}", request.getChallenge()); - return error("invalid hook challenge"); - } - - authenticate(request); environment.setPending(request.getType() == RepositoryHookType.PRE_RECEIVE); hookEventFacade.handle(request.getRepositoryId()).fireHookEvent(request.getType(), context); return new Response(context.getHgMessageProvider().getMessages(), false); - } catch (AuthenticationException ex) { - LOG.warn("hook authentication failed", ex); - return error("hook authentication failed"); + } catch (NotFoundException ex) { LOG.warn("could not find repository with id {}", request.getRepositoryId(), ex); return error("repository not found"); @@ -121,7 +131,6 @@ class DefaultHookHandler implements HookHandler { return error(context, "unknown error"); } finally { environment.clearPendingState(); - TransactionId.clear(); } } diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java index 9791e99c31..76fe3f9f88 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/hooks/Sockets.java @@ -25,14 +25,20 @@ package sonia.scm.repository.hooks; import com.fasterxml.jackson.databind.ObjectMapper; +import org.slf4j.Logger; +import org.slf4j.LoggerFactory; -import java.io.ByteArrayOutputStream; +import java.io.EOFException; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; class Sockets { + private static final Logger LOG = LoggerFactory.getLogger(Sockets.class); + + private static final int READ_LIMIT = 8192; + private static final ObjectMapper objectMapper = new ObjectMapper(); private Sockets() { @@ -40,18 +46,54 @@ class Sockets { static void send(OutputStream out, Object object) throws IOException { byte[] bytes = objectMapper.writeValueAsBytes(object); + LOG.trace("send message length of {} to socket", bytes.length); + writeInt(out, bytes.length); + LOG.trace("send message to socket"); out.write(bytes); - out.write('\0'); + LOG.trace("flush socket"); out.flush(); } - static T read(InputStream in, Class type) throws IOException { - ByteArrayOutputStream buffer = new ByteArrayOutputStream(); - int c = in.read(); - while (c != '\0') { - buffer.write(c); - c = in.read(); + static T receive(InputStream in, Class type) throws IOException { + LOG.trace("read {} from socket", type); + int length = readInt(in); + LOG.trace("read message length of {} from socket", length); + if (length > READ_LIMIT) { + String message = String.format("received length of %d, which exceeds the limit of %d", length, READ_LIMIT); + throw new IOException(message); } - return objectMapper.readValue(buffer.toByteArray(), type); + byte[] data = read(in, length); + LOG.trace("convert message to {}", type); + return objectMapper.readValue(data, type); } + + private static void writeInt(OutputStream out, int value) throws IOException { + out.write((value >>> 24) & 0xFF); + out.write((value >>> 16) & 0xFF); + out.write((value >>> 8) & 0xFF); + out.write(value & 0xFF); + } + + private static int readInt(InputStream in) throws IOException { + int b1 = in.read(); + int b2 = in.read(); + int b3 = in.read(); + int b4 = in.read(); + + if ((b1 | b2 | b3 | b4) < 0) { + throw new EOFException("failed to read int from socket"); + } + + return ((b1 << 24) + (b2 << 16) + (b3 << 8) + b4); + } + + private static byte[] read(InputStream in, int length) throws IOException { + byte[] buffer = new byte[length]; + int read = in.read(buffer); + if (read < length) { + throw new EOFException("failed to read bytes from socket"); + } + return buffer; + } + } diff --git a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py index 1fdbc07b15..1e337317e7 100644 --- a/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py +++ b/scm-plugins/scm-hg-plugin/src/main/resources/sonia/scm/python/scmhooks.py @@ -29,7 +29,7 @@ # changegroup.scm = python:scmhooks.callback # -import os, sys, json, socket +import os, sys, json, socket, struct # read environment port = os.environ['SCM_HOOK_PORT'] @@ -54,17 +54,19 @@ def fire_hook(ui, repo, hooktype, node): values = {'token': token, 'type': hooktype, 'repositoryId': repositoryId, 'transactionId': transactionId, 'challenge': challenge, 'node': node.decode('utf8') } connection.connect(("127.0.0.1", int(port))) - connection.send(json.dumps(values).encode('utf-8')) - connection.sendall(b'\0') - received = [] - byte = connection.recv(1) - while byte != b'\0': - received.append(byte) - byte = connection.recv(1) + data = json.dumps(values).encode('utf-8') + connection.send(struct.pack('>i', len(data))) + connection.sendall(data) - message = b''.join(received).decode('utf-8') - response = json.loads(message) + d = connection.recv(4, socket.MSG_WAITALL) + length = struct.unpack('>i', bytearray(d))[0] + if length > 8192: + ui.warn( b"scm-hook received message with exceeds the limit of 8192\n" ) + return True + + d = connection.recv(length, socket.MSG_WAITALL) + response = json.loads(d.decode("utf-8")) abort = response['abort'] print_messages(ui, response['messages']) @@ -94,7 +96,7 @@ def pre_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs) # newer mercurial version # we have to make in-memory changes visible to external process - # this does not happen automatically, because mercurial treat our hooks as internal hooks + # this does not happen automatically, because mercurial treat our hooks as internal hook # see hook.py at mercurial sources _exthook try: if repo is not None: @@ -103,7 +105,7 @@ def pre_hook(ui, repo, hooktype, node=None, source=None, pending=None, **kwargs) if tr and not tr.writepending(): ui.warn(b"no pending write transaction found") except AttributeError: - ui.debug(b"mercurial does not support currenttransation") + ui.debug(b"mercurial does not support currenttransaction") # do nothing return callback(ui, repo, "PRE_RECEIVE", node) diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java index 1be67c4c44..eed006b6ce 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/DefaultHookHandlerTest.java @@ -291,14 +291,16 @@ class DefaultHookHandlerTest { private DefaultHookHandler.Response send(DefaultHookHandler.Request request) throws IOException { ByteArrayOutputStream buffer = new ByteArrayOutputStream(); Sockets.send(buffer, request); + ByteArrayInputStream input = new ByteArrayInputStream(buffer.toByteArray()); when(socket.getInputStream()).thenReturn(input); + ByteArrayOutputStream output = new ByteArrayOutputStream(); when(socket.getOutputStream()).thenReturn(output); handler.run(); - return Sockets.read(new ByteArrayInputStream(output.toByteArray()), DefaultHookHandler.Response.class); + return Sockets.receive(new ByteArrayInputStream(output.toByteArray()), DefaultHookHandler.Response.class); } private static class TestingException extends ExceptionWithContext { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java index 95467edc25..ccffd36b04 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/HookServerTest.java @@ -82,7 +82,7 @@ class HookServerTest { OutputStream output = socket.getOutputStream() ) { Sockets.send(output, request); - return Sockets.read(input, Response.class); + return Sockets.receive(input, Response.class); } catch (IOException ex) { throw new RuntimeException("failed", ex); } @@ -100,7 +100,7 @@ class HookServerTest { @Override public void run() { try (InputStream input = socket.getInputStream(); OutputStream output = socket.getOutputStream()) { - Request request = Sockets.read(input, Request.class); + Request request = Sockets.receive(input, Request.class); Subject subject = SecurityUtils.getSubject(); Sockets.send(output, new Response("Hello " + request.getName(), subject.getPrincipal().toString())); } catch (IOException ex) { diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/SocketsTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/SocketsTest.java new file mode 100644 index 0000000000..f20c2e93db --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/hooks/SocketsTest.java @@ -0,0 +1,94 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.hooks; + +import lombok.AllArgsConstructor; +import lombok.Data; +import org.junit.jupiter.api.Test; + +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.IOException; + +import static org.assertj.core.api.Assertions.assertThat; +import static org.junit.jupiter.api.Assertions.assertThrows; + +class SocketsTest { + + @Test + void shouldSendAndReceive() throws IOException { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + Sockets.send(output, new TestValue("awesome")); + ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); + TestValue value = Sockets.receive(input, TestValue.class); + assertThat(value.value).isEqualTo("awesome"); + } + + @Test + void shouldFailWithTooFewBytesForLength() { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + output.write((512 >>> 24) & 0xFF); + output.write((512 >>> 16) & 0xFF); + + ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); + IOException ex = assertThrows(IOException.class, () -> Sockets.receive(input, TestValue.class)); + assertThat(ex.getMessage()).contains("int"); + } + + @Test + void shouldFailWithTooFewBytesForData() { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + output.write((16 >>> 24) & 0xFF); + output.write((16 >>> 16) & 0xFF); + output.write((16 >>> 8) & 0xFF); + output.write(16 & 0xFF); + + ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); + IOException ex = assertThrows(IOException.class, () -> Sockets.receive(input, TestValue.class)); + assertThat(ex.getMessage()).contains("bytes"); + } + + @Test + void shouldFailIfLimitIsExceeded() { + ByteArrayOutputStream output = new ByteArrayOutputStream(); + output.write((9216 >>> 24) & 0xFF); + output.write((9216 >>> 16) & 0xFF); + output.write((9216 >>> 8) & 0xFF); + output.write(9216 & 0xFF); + + ByteArrayInputStream input = new ByteArrayInputStream(output.toByteArray()); + IOException ex = assertThrows(IOException.class, () -> Sockets.receive(input, TestValue.class)); + assertThat(ex.getMessage()).contains("9216"); + } + + @Data + @AllArgsConstructor + public static class TestValue { + + private String value; + + } + +} From 9c0a7f6f1607216042942887828a21b9a8860ebd Mon Sep 17 00:00:00 2001 From: snyk-bot Date: Mon, 23 Nov 2020 21:57:21 +0000 Subject: [PATCH 35/83] fix: upgrade org.mockito:mockito-core from 3.5.15 to 3.6.0 Snyk has created this PR to upgrade org.mockito:mockito-core from 3.5.15 to 3.6.0. See this package in Maven Repository: https://mvnrepository.com/artifact/org.mockito/mockito-core/ See this project in Snyk: https://app.snyk.io/org/scm-manager/project/c575ed09-e310-44e7-afc8-22b77c5873cf?utm_source=github&utm_medium=upgrade-pr --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 36dcb36aa7..4568fb06a3 100644 --- a/pom.xml +++ b/pom.xml @@ -903,7 +903,7 @@ - 3.5.15 + 3.6.0 2.1 5.7.0 From b6d18c1ee01e2a3d2eb295f14d580aa94e5d9d72 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 09:58:07 +0100 Subject: [PATCH 36/83] List main branch on top of branches list --- .../src/repos/branches/util/orderBranches.test.ts | 13 +++++++++---- .../src/repos/branches/util/orderBranches.ts | 8 ++++++-- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.test.ts b/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.test.ts index afdd325a90..13024ace8a 100644 --- a/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.test.ts +++ b/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.test.ts @@ -47,9 +47,14 @@ const developBranch = { revision: "revision5", defaultBranch: false }; +const mainBranch = { + name: "main", + revision: "revision6", + defaultBranch: false +}; const masterBranch = { name: "master", - revision: "revision6", + revision: "revision7", defaultBranch: false }; @@ -66,10 +71,10 @@ describe("order branches", () => { expect(branches).toEqual([branch3, branch1, branch2]); }); - it("should order special branches as follows: master > default > develop", () => { - const branches = [defaultBranch, developBranch, masterBranch]; + it("should order special branches as follows: main > master > default > develop", () => { + const branches = [defaultBranch, mainBranch, developBranch, masterBranch]; orderBranches(branches); - expect(branches).toEqual([masterBranch, defaultBranch, developBranch]); + expect(branches).toEqual([mainBranch, masterBranch, defaultBranch, developBranch]); }); it("should order special branches but starting with defaultBranch", () => { diff --git a/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.ts b/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.ts index 69102d5d88..827d791fbe 100644 --- a/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.ts +++ b/scm-ui/ui-webapp/src/repos/branches/util/orderBranches.ts @@ -32,10 +32,14 @@ export function orderBranches(branches: Branch[]) { return -20; } else if (!a.defaultBranch && b.defaultBranch) { return 20; - } else if (a.name === "master" && b.name !== "master") { + } else if (a.name === "main" && b.name !== "main") { return -10; - } else if (a.name !== "master" && b.name === "master") { + } else if (a.name !== "main" && b.name === "main") { return 10; + } else if (a.name === "master" && b.name !== "master") { + return -9; + } else if (a.name !== "master" && b.name === "master") { + return 9; } else if (a.name === "default" && b.name !== "default") { return -10; } else if (a.name !== "default" && b.name === "default") { From 237c48356a36ab9e8fa148a7c32b67c43587b00a Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Thu, 19 Nov 2020 10:57:33 +0100 Subject: [PATCH 37/83] Improve ux on overview --- .../ui-components/src/OverviewPageActions.tsx | 88 +++++++++++-------- scm-ui/ui-components/src/forms/DropDown.tsx | 10 ++- .../ui-components/src/forms/FilterInput.tsx | 2 +- scm-ui/ui-webapp/public/locales/de/repos.json | 4 +- scm-ui/ui-webapp/public/locales/en/repos.json | 4 +- .../components/list/RepositoryGroupEntry.tsx | 16 ++-- .../src/repos/containers/Overview.tsx | 2 + 7 files changed, 77 insertions(+), 49 deletions(-) diff --git a/scm-ui/ui-components/src/OverviewPageActions.tsx b/scm-ui/ui-components/src/OverviewPageActions.tsx index 4cbffb32ef..57672d4138 100644 --- a/scm-ui/ui-components/src/OverviewPageActions.tsx +++ b/scm-ui/ui-components/src/OverviewPageActions.tsx @@ -21,13 +21,13 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ -import React from "react"; -import { withRouter, RouteComponentProps } from "react-router-dom"; +import React, { FC } from "react"; +import { useHistory, useLocation } from "react-router-dom"; import classNames from "classnames"; import { Button, DropDown, urls } from "./index"; import { FilterInput } from "./forms"; -type Props = RouteComponentProps & { +type Props = { showCreateButton: boolean; currentGroup: string; groups: string[]; @@ -35,41 +35,36 @@ type Props = RouteComponentProps & { groupSelected: (namespace: string) => void; label?: string; testId?: string; + searchPlaceholder?: string; + filterPlaceholder?: string; }; -class OverviewPageActions extends React.Component { - render() { - const { history, currentGroup, groups, location, link, testId, groupSelected } = this.props; - const groupSelector = groups && ( -
- -
- ); +const OverviewPageActions: FC = ({ + groups, + currentGroup, + showCreateButton, + link, + groupSelected, + label, + testId, + searchPlaceholder, + filterPlaceholder +}) => { + const history = useHistory(); + const location = useLocation(); + const groupSelector = groups && ( +
+ +
+ ); - return ( -
- {groupSelector} -
- { - history.push(`/${link}/?q=${filter}`); - }} - testId={testId + "-filter"} - /> -
- {this.renderCreateButton()} -
- ); - } - - renderCreateButton() { - const { showCreateButton, link, label } = this.props; + const renderCreateButton = () => { if (showCreateButton) { return (
@@ -78,7 +73,24 @@ class OverviewPageActions extends React.Component { ); } return null; - } -} + }; -export default withRouter(OverviewPageActions); + return ( +
+ {groupSelector} +
+ { + history.push(`/${link}/?q=${filter}`); + }} + testId={testId + "-filter"} + /> +
+ {renderCreateButton()} +
+ ); +}; + +export default OverviewPageActions; diff --git a/scm-ui/ui-components/src/forms/DropDown.tsx b/scm-ui/ui-components/src/forms/DropDown.tsx index e801a0c2a8..504f37de87 100644 --- a/scm-ui/ui-components/src/forms/DropDown.tsx +++ b/scm-ui/ui-components/src/forms/DropDown.tsx @@ -32,6 +32,7 @@ type Props = { preselectedOption?: string; className?: string; disabled?: boolean; + placeholder?: string; }; const FullWidthSelect = styled.select` @@ -40,7 +41,7 @@ const FullWidthSelect = styled.select` class DropDown extends React.Component { render() { - const { options, optionValues, preselectedOption, className, disabled } = this.props; + const { options, optionValues, preselectedOption, className, disabled, placeholder } = this.props; if (preselectedOption && options.filter(o => o === preselectedOption).length === 0) { options.push(preselectedOption); @@ -48,7 +49,12 @@ class DropDown extends React.Component { return (
- + {options.map((option, index) => { const value = optionValues && optionValues[index] ? optionValues[index] : option; return ( diff --git a/scm-ui/ui-components/src/forms/FilterInput.tsx b/scm-ui/ui-components/src/forms/FilterInput.tsx index 15dcabb9e1..b90ce3d61d 100644 --- a/scm-ui/ui-components/src/forms/FilterInput.tsx +++ b/scm-ui/ui-components/src/forms/FilterInput.tsx @@ -65,7 +65,7 @@ const FilterInput: FC = ({ filter, value, testId, placeholder }) => { setStateValue(event.target.value)} /> diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index d95ef44970..d9a2f94b37 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -42,7 +42,9 @@ "title": "Repositories", "subtitle": "Übersicht aller verfügbaren Repositories", "noRepositories": "Keine Repositories gefunden.", - "createButton": "Repository erstellen" + "createButton": "Repository erstellen", + "searchRepository": "Repository suchen", + "filterNamespace": "Namespace filtern" }, "create": { "title": "Repository erstellen", diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index 59981282df..87c6301ffb 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -42,7 +42,9 @@ "title": "Repositories", "subtitle": "Overview of available repositories", "noRepositories": "No repositories found.", - "createButton": "Create Repository" + "createButton": "Create Repository", + "searchRepository": "Search repository", + "filterNamespace": "Filter by namespace" }, "create": { "title": "Create Repository", diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx index 936c5c2ebb..2351a8ec08 100644 --- a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx +++ b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx @@ -22,22 +22,26 @@ * SOFTWARE. */ import React from "react"; -import { Link } from "react-router-dom"; -import { CardColumnGroup, RepositoryEntry } from "@scm-manager/ui-components"; -import { RepositoryGroup } from "@scm-manager/ui-types"; -import { Icon } from "@scm-manager/ui-components"; -import { WithTranslation, withTranslation } from "react-i18next"; +import {Link} from "react-router-dom"; +import {CardColumnGroup, Icon, RepositoryEntry} from "@scm-manager/ui-components"; +import {RepositoryGroup} from "@scm-manager/ui-types"; +import {WithTranslation, withTranslation} from "react-i18next"; +import styled from "styled-components"; type Props = WithTranslation & { group: RepositoryGroup; }; +const SizedIcon = styled(Icon)` + font-size: 1.33rem; +`; + class RepositoryGroupEntry extends React.Component { render() { const { group, t } = this.props; const settingsLink = group.namespace?._links?.permissions && ( - + ); const namespaceHeader = ( diff --git a/scm-ui/ui-webapp/src/repos/containers/Overview.tsx b/scm-ui/ui-webapp/src/repos/containers/Overview.tsx index 0dae2f03d9..eaee435640 100644 --- a/scm-ui/ui-webapp/src/repos/containers/Overview.tsx +++ b/scm-ui/ui-webapp/src/repos/containers/Overview.tsx @@ -126,6 +126,8 @@ class Overview extends React.Component { link="repos" label={t("overview.createButton")} testId="repository-overview" + searchPlaceholder={t("overview.searchRepository")} + filterPlaceholder={t("overview.filterNamespace")} /> From fd791074683f799fdc83bc81698f72c36b37eac1 Mon Sep 17 00:00:00 2001 From: Eduard Heimbuch Date: Mon, 23 Nov 2020 15:48:20 +0100 Subject: [PATCH 38/83] Use preselected value with translation key for namespace filter / improve translations --- scm-ui/ui-components/src/OverviewPageActions.tsx | 5 +---- scm-ui/ui-components/src/forms/DropDown.tsx | 10 ++-------- scm-ui/ui-components/src/forms/FilterInput.tsx | 2 +- scm-ui/ui-webapp/public/locales/de/groups.json | 3 +++ scm-ui/ui-webapp/public/locales/de/repos.json | 2 +- scm-ui/ui-webapp/public/locales/de/users.json | 3 +++ scm-ui/ui-webapp/public/locales/en/groups.json | 3 +++ scm-ui/ui-webapp/public/locales/en/repos.json | 2 +- scm-ui/ui-webapp/public/locales/en/users.json | 3 +++ scm-ui/ui-webapp/src/groups/containers/Groups.tsx | 7 ++++++- scm-ui/ui-webapp/src/repos/containers/Overview.tsx | 13 +++++++++---- scm-ui/ui-webapp/src/users/containers/Users.tsx | 7 ++++++- 12 files changed, 39 insertions(+), 21 deletions(-) diff --git a/scm-ui/ui-components/src/OverviewPageActions.tsx b/scm-ui/ui-components/src/OverviewPageActions.tsx index 57672d4138..633bc07d52 100644 --- a/scm-ui/ui-components/src/OverviewPageActions.tsx +++ b/scm-ui/ui-components/src/OverviewPageActions.tsx @@ -36,7 +36,6 @@ type Props = { label?: string; testId?: string; searchPlaceholder?: string; - filterPlaceholder?: string; }; const OverviewPageActions: FC = ({ @@ -47,8 +46,7 @@ const OverviewPageActions: FC = ({ groupSelected, label, testId, - searchPlaceholder, - filterPlaceholder + searchPlaceholder }) => { const history = useHistory(); const location = useLocation(); @@ -59,7 +57,6 @@ const OverviewPageActions: FC = ({ options={groups} preselectedOption={currentGroup} optionSelected={groupSelected} - placeholder={filterPlaceholder} />
); diff --git a/scm-ui/ui-components/src/forms/DropDown.tsx b/scm-ui/ui-components/src/forms/DropDown.tsx index 504f37de87..e801a0c2a8 100644 --- a/scm-ui/ui-components/src/forms/DropDown.tsx +++ b/scm-ui/ui-components/src/forms/DropDown.tsx @@ -32,7 +32,6 @@ type Props = { preselectedOption?: string; className?: string; disabled?: boolean; - placeholder?: string; }; const FullWidthSelect = styled.select` @@ -41,7 +40,7 @@ const FullWidthSelect = styled.select` class DropDown extends React.Component { render() { - const { options, optionValues, preselectedOption, className, disabled, placeholder } = this.props; + const { options, optionValues, preselectedOption, className, disabled } = this.props; if (preselectedOption && options.filter(o => o === preselectedOption).length === 0) { options.push(preselectedOption); @@ -49,12 +48,7 @@ class DropDown extends React.Component { return (
- + {options.map((option, index) => { const value = optionValues && optionValues[index] ? optionValues[index] : option; return ( diff --git a/scm-ui/ui-components/src/forms/FilterInput.tsx b/scm-ui/ui-components/src/forms/FilterInput.tsx index b90ce3d61d..15dcabb9e1 100644 --- a/scm-ui/ui-components/src/forms/FilterInput.tsx +++ b/scm-ui/ui-components/src/forms/FilterInput.tsx @@ -65,7 +65,7 @@ const FilterInput: FC = ({ filter, value, testId, placeholder }) => { setStateValue(event.target.value)} /> diff --git a/scm-ui/ui-webapp/public/locales/de/groups.json b/scm-ui/ui-webapp/public/locales/de/groups.json index 65035781b6..a351a3eda1 100644 --- a/scm-ui/ui-webapp/public/locales/de/groups.json +++ b/scm-ui/ui-webapp/public/locales/de/groups.json @@ -25,6 +25,9 @@ "setPermissionsNavLink": "Berechtigungen" } }, + "overview": { + "searchGroup": "Gruppe suchen" + }, "add-group": { "title": "Gruppe erstellen", "subtitle": "Erstellen einer neuen Gruppe" diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index d9a2f94b37..151c6844b5 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -44,7 +44,7 @@ "noRepositories": "Keine Repositories gefunden.", "createButton": "Repository erstellen", "searchRepository": "Repository suchen", - "filterNamespace": "Namespace filtern" + "allNamespaces": "Alle Namespaces" }, "create": { "title": "Repository erstellen", diff --git a/scm-ui/ui-webapp/public/locales/de/users.json b/scm-ui/ui-webapp/public/locales/de/users.json index 80d251e6b3..271caff650 100644 --- a/scm-ui/ui-webapp/public/locales/de/users.json +++ b/scm-ui/ui-webapp/public/locales/de/users.json @@ -30,6 +30,9 @@ "noUsers": "Keine Benutzer gefunden.", "createButton": "Benutzer erstellen" }, + "overview": { + "searchUser": "Benutzer suchen" + }, "singleUser": { "errorTitle": "Fehler", "errorSubtitle": "Unbekannter Benutzer Fehler", diff --git a/scm-ui/ui-webapp/public/locales/en/groups.json b/scm-ui/ui-webapp/public/locales/en/groups.json index 069013e5d0..944d271071 100644 --- a/scm-ui/ui-webapp/public/locales/en/groups.json +++ b/scm-ui/ui-webapp/public/locales/en/groups.json @@ -25,6 +25,9 @@ "setPermissionsNavLink": "Permissions" } }, + "overview": { + "searchGroup": "Search group" + }, "add-group": { "title": "Create Group", "subtitle": "Create a new group" diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index 87c6301ffb..6bb4043c91 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -44,7 +44,7 @@ "noRepositories": "No repositories found.", "createButton": "Create Repository", "searchRepository": "Search repository", - "filterNamespace": "Filter by namespace" + "allNamespaces": "All namespaces" }, "create": { "title": "Create Repository", diff --git a/scm-ui/ui-webapp/public/locales/en/users.json b/scm-ui/ui-webapp/public/locales/en/users.json index 627e2b80aa..877675bc85 100644 --- a/scm-ui/ui-webapp/public/locales/en/users.json +++ b/scm-ui/ui-webapp/public/locales/en/users.json @@ -44,6 +44,9 @@ "setApiKeyNavLink": "API Keys" } }, + "overview": { + "searchUser": "Search user" + }, "createUser": { "title": "Create User", "subtitle": "Create a new user" diff --git a/scm-ui/ui-webapp/src/groups/containers/Groups.tsx b/scm-ui/ui-webapp/src/groups/containers/Groups.tsx index 7fe45d0163..2584239ce0 100644 --- a/scm-ui/ui-webapp/src/groups/containers/Groups.tsx +++ b/scm-ui/ui-webapp/src/groups/containers/Groups.tsx @@ -92,7 +92,12 @@ class Groups extends React.Component { {this.renderGroupTable()} {this.renderCreateButton()} - + ); diff --git a/scm-ui/ui-webapp/src/repos/containers/Overview.tsx b/scm-ui/ui-webapp/src/repos/containers/Overview.tsx index eaee435640..de5be31591 100644 --- a/scm-ui/ui-webapp/src/repos/containers/Overview.tsx +++ b/scm-ui/ui-webapp/src/repos/containers/Overview.tsx @@ -101,8 +101,12 @@ class Overview extends React.Component { } }; + getNamespaceFilterPlaceholder = () => { + return this.props.t("overview.allNamespaces"); + }; + namespaceSelected = (newNamespace: string) => { - if (newNamespace === "") { + if (newNamespace === this.getNamespaceFilterPlaceholder()) { this.props.history.push("/repos/"); } else { this.props.history.push(`/repos/${newNamespace}/`); @@ -111,8 +115,10 @@ class Overview extends React.Component { render() { const { error, loading, showCreateButton, namespace, namespaces, t } = this.props; - - const namespacesToRender = namespaces ? ["", ...namespaces._embedded.namespaces.map(n => n.namespace).sort()] : []; + const namespaceFilterPlaceholder = this.getNamespaceFilterPlaceholder(); + const namespacesToRender = namespaces + ? [namespaceFilterPlaceholder, ...namespaces._embedded.namespaces.map(n => n.namespace).sort()] + : []; return ( @@ -127,7 +133,6 @@ class Overview extends React.Component { label={t("overview.createButton")} testId="repository-overview" searchPlaceholder={t("overview.searchRepository")} - filterPlaceholder={t("overview.filterNamespace")} /> diff --git a/scm-ui/ui-webapp/src/users/containers/Users.tsx b/scm-ui/ui-webapp/src/users/containers/Users.tsx index d0d4adc9dc..fbae53f084 100644 --- a/scm-ui/ui-webapp/src/users/containers/Users.tsx +++ b/scm-ui/ui-webapp/src/users/containers/Users.tsx @@ -93,7 +93,12 @@ class Users extends React.Component { {this.renderUserTable()} {this.renderCreateButton()} - + ); From 63c86cf9e58c182be56927993a7548cfdb33b23e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 13:40:23 +0100 Subject: [PATCH 39/83] Fix formatting --- .../src/repos/components/list/RepositoryGroupEntry.tsx | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx index 2351a8ec08..a2c342f51f 100644 --- a/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx +++ b/scm-ui/ui-webapp/src/repos/components/list/RepositoryGroupEntry.tsx @@ -22,10 +22,10 @@ * SOFTWARE. */ import React from "react"; -import {Link} from "react-router-dom"; -import {CardColumnGroup, Icon, RepositoryEntry} from "@scm-manager/ui-components"; -import {RepositoryGroup} from "@scm-manager/ui-types"; -import {WithTranslation, withTranslation} from "react-i18next"; +import { Link } from "react-router-dom"; +import { CardColumnGroup, Icon, RepositoryEntry } from "@scm-manager/ui-components"; +import { RepositoryGroup } from "@scm-manager/ui-types"; +import { WithTranslation, withTranslation } from "react-i18next"; import styled from "styled-components"; type Props = WithTranslation & { From 2645b0b0661728068212971ec0375d0c25192a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 13:59:58 +0100 Subject: [PATCH 40/83] Name not matching condition in exception --- scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java index 50a456eee1..9ea241919a 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PluginTree.java @@ -108,8 +108,8 @@ public final class PluginTree throw new PluginConditionFailedException( condition, String.format( - "could not load plugin %s, the plugin condition does not match", - plugin.getInformation().getId() + "could not load plugin %s, the plugin condition does not match: %s", + plugin.getInformation().getId(), condition ) ); //J+ From 669cc39fa9e4841f7e8734db417b5f0af9a8dff5 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 24 Nov 2020 17:34:21 +0100 Subject: [PATCH 41/83] Add tooltip to shortlinks on repository overview --- .../src/repos/RepositoryEntry.tsx | 52 ++++++++++++++++--- .../src/repos/RepositoryEntryLink.tsx | 16 +++++- scm-ui/ui-webapp/public/locales/de/repos.json | 7 +++ scm-ui/ui-webapp/public/locales/en/repos.json | 7 +++ 4 files changed, 74 insertions(+), 8 deletions(-) diff --git a/scm-ui/ui-components/src/repos/RepositoryEntry.tsx b/scm-ui/ui-components/src/repos/RepositoryEntry.tsx index 5ad24bd763..d4ab43444e 100644 --- a/scm-ui/ui-components/src/repos/RepositoryEntry.tsx +++ b/scm-ui/ui-components/src/repos/RepositoryEntry.tsx @@ -27,10 +27,11 @@ import { CardColumn, DateFromNow } from "@scm-manager/ui-components"; import RepositoryEntryLink from "./RepositoryEntryLink"; import RepositoryAvatar from "./RepositoryAvatar"; import { ExtensionPoint } from "@scm-manager/ui-extensions"; +import { withTranslation, WithTranslation } from "react-i18next"; type DateProp = Date | string; -type Props = { +type Props = WithTranslation & { repository: Repository; // @VisibleForTesting // the baseDate is only to avoid failing snapshot tests @@ -43,29 +44,67 @@ class RepositoryEntry extends React.Component { }; renderBranchesLink = (repository: Repository, repositoryLink: string) => { + const { t } = this.props; if (repository._links["branches"]) { - return ; + return ( + + ); + } + return null; + }; + + renderTagsLink = (repository: Repository, repositoryLink: string) => { + const { t } = this.props; + if (repository._links["tags"]) { + return ( + + ); } return null; }; renderChangesetsLink = (repository: Repository, repositoryLink: string) => { + const { t } = this.props; if (repository._links["changesets"]) { - return ; + return ( + + ); } return null; }; renderSourcesLink = (repository: Repository, repositoryLink: string) => { + const { t } = this.props; if (repository._links["sources"]) { - return ; + return ( + + ); } return null; }; renderModifyLink = (repository: Repository, repositoryLink: string) => { + const { t } = this.props; if (repository._links["update"]) { - return ; + return ( + + ); } return null; }; @@ -74,6 +113,7 @@ class RepositoryEntry extends React.Component { return ( <> {this.renderBranchesLink(repository, repositoryLink)} + {this.renderTagsLink(repository, repositoryLink)} {this.renderChangesetsLink(repository, repositoryLink)} {this.renderSourcesLink(repository, repositoryLink)} @@ -118,4 +158,4 @@ class RepositoryEntry extends React.Component { } } -export default RepositoryEntry; +export default withTranslation("repos")(RepositoryEntry); diff --git a/scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx b/scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx index f52859c15e..a0adaba7a1 100644 --- a/scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx +++ b/scm-ui/ui-components/src/repos/RepositoryEntryLink.tsx @@ -25,10 +25,12 @@ import React from "react"; import { Link } from "react-router-dom"; import styled from "styled-components"; import { Icon } from "@scm-manager/ui-components"; +import Tooltip from "../Tooltip"; type Props = { to: string; icon: string; + tooltip?: string; }; const PointerEventsLink = styled(Link)` @@ -37,10 +39,20 @@ const PointerEventsLink = styled(Link)` class RepositoryEntryLink extends React.Component { render() { - const { to, icon } = this.props; + const { to, icon, tooltip } = this.props; + + let content = ; + if (tooltip) { + content = ( + + {content} + + ); + } + return ( - + {content} ); } diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index 151c6844b5..6f658daeda 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -36,6 +36,13 @@ "settingsNavLink": "Einstellungen", "generalNavLink": "Generell", "permissionsNavLink": "Berechtigungen" + }, + "tooltip": { + "branches": "Branches", + "tags": "Tags", + "commits": "Commits", + "sources": "Sources", + "settings": "Einstellungen" } }, "overview": { diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index 6bb4043c91..c126c3c7a1 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -36,6 +36,13 @@ "settingsNavLink": "Settings", "generalNavLink": "General", "permissionsNavLink": "Permissions" + }, + "tooltip": { + "branches": "Branches", + "tags": "Tags", + "commits": "Commits", + "sources": "Sources", + "settings": "Settings" } }, "overview": { From b67a0cb89d0a1f341b6a0d5f99f767d7415d0275 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 18:18:16 +0100 Subject: [PATCH 42/83] Improve logging for failures during plugin installation --- .../sonia/scm/plugin/DefaultPluginManager.java | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java index b53d715ef6..816bd5639e 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/DefaultPluginManager.java @@ -192,10 +192,16 @@ public class DefaultPluginManager implements PluginManager { dependencyTracker.addInstalled(plugin.getDescriptor()); pendingInstallations.add(pending); eventBus.post(new PluginEvent(PluginEvent.PluginEventType.INSTALLED, plugin)); - } catch (PluginInstallException ex) { - cancelPending(pendingInstallations); - eventBus.post(new PluginEvent(PluginEvent.PluginEventType.INSTALLATION_FAILED, plugin)); - throw ex; + } catch (PluginInstallException installException) { + try { + cancelPending(pendingInstallations); + } catch (PluginFailedToCancelInstallationException cancelInstallationException) { + LOG.error("could not install plugin {}; uninstallation failed (see next exception)", plugin.getDescriptor().getInformation().getName(), installException); + throw cancelInstallationException; + } finally { + eventBus.post(new PluginEvent(PluginEvent.PluginEventType.INSTALLATION_FAILED, plugin)); + } + throw installException; } } From fc9176ec5a12e4b169b6d4f1718ed0154ec70465 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 18:18:50 +0100 Subject: [PATCH 43/83] No exception for missing file on cancelled installation --- .../scm/plugin/PendingPluginInstallation.java | 14 +++++++++----- .../scm/plugin/PendingPluginInstallationTest.java | 7 ++++++- 2 files changed, 15 insertions(+), 6 deletions(-) diff --git a/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java b/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java index 1da4823b7d..13f18c74c3 100644 --- a/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java +++ b/scm-webapp/src/main/java/sonia/scm/plugin/PendingPluginInstallation.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.plugin; import org.slf4j.Logger; @@ -50,10 +50,14 @@ class PendingPluginInstallation { void cancel() { String name = plugin.getDescriptor().getInformation().getName(); LOG.info("cancel installation of plugin {}", name); - try { - Files.delete(file); - } catch (IOException ex) { - throw new PluginFailedToCancelInstallationException("failed to cancel plugin installation ", name, ex); + if (Files.exists(file)) { + try { + Files.delete(file); + } catch (IOException ex) { + throw new PluginFailedToCancelInstallationException("failed to cancel plugin installation ", name, ex); + } + } else { + LOG.info("plugin file {} did not exists for plugin {}; nothing deleted", file, name); } } } diff --git a/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java b/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java index b668870488..f8fe44e8f0 100644 --- a/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java +++ b/scm-webapp/src/test/java/sonia/scm/plugin/PendingPluginInstallationTest.java @@ -59,8 +59,13 @@ class PendingPluginInstallationTest { } @Test - void shouldThrowExceptionIfCancelFailed(@TempDir Path directory) { + void shouldThrowExceptionIfCancelFailed(@TempDir Path directory) throws IOException { Path file = directory.resolve("file"); + Files.createDirectory(file); + + Path makeFileNotDeletable = file.resolve("not_deletable"); + Files.write(makeFileNotDeletable, "42".getBytes()); + when(plugin.getDescriptor().getInformation().getName()).thenReturn("scm-awesome-plugin"); PendingPluginInstallation installation = new PendingPluginInstallation(plugin, file); From c6139c647e3ef9199604c1b0b243833d845047d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 18:18:59 +0100 Subject: [PATCH 44/83] Log change --- CHANGELOG.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index d901774353..5607b47e33 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,11 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased +### Fixed +- Improved logging of failures during plugin installation ([#1442](https://github.com/scm-manager/scm-manager/pull/1442)) +- Do not throw exception when plugin file does not exist on cancelled installation ([#1442](https://github.com/scm-manager/scm-manager/pull/1442)) + ## [2.10.0] - 2020-11-20 ### Added - Delete branches directly in the UI ([#1422](https://github.com/scm-manager/scm-manager/pull/1422)) From f4b8a40f59b2cc956a796870b96911446848a63d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 18:32:44 +0100 Subject: [PATCH 45/83] Adjust changelog for release 2.10.1 --- CHANGELOG.md | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5607b47e33..593cf53ac4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,7 +5,7 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). -## Unreleased +## [2.10.1] - 2020-11-24 ### Fixed - Improved logging of failures during plugin installation ([#1442](https://github.com/scm-manager/scm-manager/pull/1442)) - Do not throw exception when plugin file does not exist on cancelled installation ([#1442](https://github.com/scm-manager/scm-manager/pull/1442)) @@ -424,3 +424,4 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 [2.9.0]: https://www.scm-manager.org/download/2.9.0 [2.9.1]: https://www.scm-manager.org/download/2.9.1 [2.10.0]: https://www.scm-manager.org/download/2.10.0 +[2.10.1]: https://www.scm-manager.org/download/2.10.1 From f65f3222eef11e4f916e1ec47a183924f4dab945 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 24 Nov 2020 17:46:51 +0100 Subject: [PATCH 46/83] Update documentation, storyshots --- CHANGELOG.md | 4 + .../user/repo/assets/repository-overview.png | Bin 191803 -> 276783 bytes .../user/repo/assets/repository-overview.png | Bin 191803 -> 275719 bytes .../src/__snapshots__/storyshots.test.ts.snap | 232 ++++++++++++++---- 4 files changed, 188 insertions(+), 48 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d901774353..5744a7f0a1 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html). +## Unreleased +### Added +- Add tooltips to short links on repository overview ([#1441](https://github.com/scm-manager/scm-manager/pull/1441)) + ## [2.10.0] - 2020-11-20 ### Added - Delete branches directly in the UI ([#1422](https://github.com/scm-manager/scm-manager/pull/1422)) diff --git a/docs/de/user/repo/assets/repository-overview.png b/docs/de/user/repo/assets/repository-overview.png index 59cf55e4d2f95350df493802ff065e7535869788..2454f625a36f81ff6292db9e8bf5707ad8b722ea 100644 GIT binary patch literal 276783 zcmXtf2Q-`i`?e9WVkGvCm__YbD(84_gY%+8!7k0X_f7V550k#{ zAJgBo=Hw@PU#xPNd+6zPsQ6*`TVYw?e<-p`7~M*qmg(BxBuq^slkjzM{L5<=Zd)tv zn-eSLvnswVNoO^S%=_QcJ7-n?#C|!c-FlOE>O6btBHEnyTabvw;W8&zrSM2^{pXfQw^_mds z_W9z^%T6axY`rFi=+i%!B)qvRhN*i0*i65k7-S)!>2JuM?)83RfN4Sh zLRpx;(OcT5kM;Zc$=K^U_NyzO`|dRKnT)Rczh{cNPmB)dvR`dINi;M(EYXU)r;@w2 z){gsB+EOF1xTgPVnD#B3jb{cu!-Jx;ud>@RhQmxZ}vR(?7wpF+5Du&z1!al zw`lh*Qk$2IJpXX`SU4VR9k4Hy0;YvNP`XyxP^d2jg`Rq8a| z;#V%QGj}*}2P3gtX0&b*6EV8##0;j4rT#%(*(N%@;AGR{O7wYFo$~MeNv*gr!_N!x zQAQHN3I-Cw451MtU(+ro=2~`rZFjSAIYZ;_fr;weS4LhbhfU zJX}>EUp7a@bkwI&akQ^5+`lw&n=y1pf!tr7cz9emATYe9Fd&@?8+3kyxePU=3IFyLN51@Kl~@V-okfyC`-N<2il$7AlgpQhx&*P zz2+wWgOh*I551-%YtUnGiNrBevIZ*pRq?uQDl#;A^CSyyv_V{=J#pc8qy?S5T(Q0> zvAz|{k+>365}JZ4mI+NkhFTy)f7I#Q;OhSn@*7H6$ibif;RB~dz@b_HmJq}~3uJM6 z;z|~EjHj(y$8*SZsYH;xt%ebx?)M$Ym-L%$Wo@WXP%bw4;VQB{+uN)Lw@JI|Ybr8G z7hC=hM!PSNy8~mTt)&B{3|iTAp?X=qaj@ZLX>tN@$&t5lw(K3tbC@Kd#y_u?qQ!f% zmo@IcSTcP?EryghwK+w_$>267ulY!G`GlnXyGs19XcujKpKFiN4s*g|g2FJ;V;E7G zB*_UbaORHTd($9}L}4~QpZwtpyUJ}$*A!PO%7u{sSPNFYVbMnXfX6(O#9VLt{K1T3 z1X=L`4S7L^v@C|_Je$OswXFVR>XLo!s#?U`uB~`7$n4cT^!$00922g{x?;{Y^q!Yo z`j8kaeUhs%)bE{Z^a^?M5VY&dHdHQj;Z@+7_1M&z`O)+hVyyL8e{663;a%9!#;1?| zKZ>32rSGkKY(>kZ9~$~j%{J&eVQPYj>x%)8sW^9&@L*yG?d@Y)ukChj@v z1h@EmN5cE8d8P?MKC?->Uqrtf0UNdmi8aBUC}rNy)!s0$O1hs9+EwLPLBV!aQ|e3U zcHy)uC{!ik?NC$lK#1s22*Xea?@$P6$R08j0vWO&^11+4km!i}b=3}Y75bocM=8tK z$nV#0I5|oZ6M49o_rkFJ>}hU#e0R$7-lN#gV7G~F7j3`T2Xdwn%>qoj(yS{FatGp$ zbu7=Eyn`2~<8HC%s`r;lqfRVf{SW3hK3H5{4nO2NG(1f@vpIBX-;ur;cm5paGK?rL zgEG80(0?h)VepakxjVlsKE>sNcHx|{9d7w~Z&J`4I++vd;`AE(A#mi^% zfAnqNp1N>83v#O(PU9UtyJ>cfjyq)~Pc*q>Nl03It^kgB8~Yo@2+b2u9$O$Ez94tJ z=*6_WV-kK+gPQBUObq<_>ieg|;E45<@);H1=9HyhFIy_rY zdj8fKqtdPZ{y5qm66@SPoFfY`VRDyt{*&h4-m;i3w0U z%d2_UPls;caWVi?X#T~SSzd}?xm2s&7>Gv)e0O;Kah~0loylt&D{ZE?|@o6wstJ>wH zOqhB-cMd(tz&fI9PhuxWnFsxR*EA7;DRt9+T`VZI@xGR2h2597MHJ@!r+dFGBD%N- zmJj({OFXK0L(6Km-vls2$$q#^w4v3Y=~TO$4BrCc9j4YRSog zU~^l=mh(_Tx*8)iQbm%QB1ldT9D0%L6oU;Q&mxl0bui6UDfv;0rBl#3?-E}i9}#bP z^z~Ch=3j$+Z7iTGkDSMJ;DMw^U?onyD12I*Q;Q&+6L%NTEu^8XYM}IG*FfRDwns#; z6!EZ=6#)(qgS(DMs7957SrMFI2wGJ7ARbHa3dw8EBj%Kq-HVff_(*5aZCL?Cs!dwF za3;w)KjJ)|xT)}d*c}8lj1rJN{6e~1Ghg6JVuG?t^E0Ly4<1?%erYRZ)jTz+u$%HF z=c9pr#ou|nI1oyAx*48-#zibuk%GwiJB|(#p}Q$k9SA5gIuJJGY4)l*tHAdpMVZ= zg)>xMBd&QA)4_>%Bl`l>Yhl$H@`}q?_W`3*X83xKZhn{#4E3csXeA`a{IiDHS zlQL6#dHh~o1sy~(IRn!7QL^!Dngv?rb}ZIAI6duQS=9C~Mmyu|odoRp{UY_VzS8Gs zN4pkmaRM@3I~QB~qLYkp4}U)dj(t2)>gWPwql9zHM4`}noYfo*6m zd4D}yTz2bJ@~fc$LOmmIa9WEM>P}{6Kp17PdgW_Qw;f%iht3hjS%8RAIO#a{5Kc8* zI*KxOi^~%do=TU@4*Ob$Pu+>*o^fYiKIpP3YiD zE%TO1Y=5cM>AE#mK3i8k?VSxM)^iKV8`YdL$CS^`9`ejvQL4h^_`B#+ReBi^R@X^f z{D&n6@l^cPiU>v&nt=e}r-A3+L`ui-IQt}FtTF;DeCwVZPSS)@f9WzkG`-OsML`4% zFhhN7W@5yA(>b7TSvVc;{z=B4cfnM@XY39OLAG;((zM3wiG@?IC&!q6jyDh|Qhn`;MZ}yzt!mL_GZ;O&^`uI`-2uw)3`O;DgUjhLlB%`^5 zG9P~2#cfwF_(Ce@8XKZ{8YfDSxCP#Yel-CTl+nkv64QF$nO9tmO(-Nx;CEgAr>rd6 zJW75-nlst6WyydN9#}O{0`qF2Mb)`0@78j|X)hy`i-wU5E1Lj)iiJ4~_Y*o`EHi>{ z2#N=uu|OZN0n4puBi{gd`e*R~zfGfCe3?PR;R={s{vqk`P`DM12X0SNX!tf&Wxe%3 zggjy$;%XsTZza>Ez3O^FmPF_am@a!5i1D+PJ=zM%{z3{+_$bJ41uVZ&guEH2Cmi

$aevEb63?Zr8dMi55^eeS!ciF*%`6*PUv9uXBE-O#i5DvHl~Lm=mr}T(>Q}wqpBo zGdAPb)^hlnJ%$RY5B)B5ITJ@?D0~xuJ#J%LpNU{C2 zWd+BRSh!3%(HSq0mzI#1aDh#7aOw{4)E##g4xu--oae(tRg}udE)#oI0)Y zKkBQD21&+;c^IaonNTuLwx7>gCqWa>aa~loi6gV}K9`c%xw)3V?4r$_G0lg~7H>sL-2+T)Z@KK#8ww@W$QIQ;WsdUw=>V$AZdvTD;U2n<-p zWj^4kjkBD7ZLxC_nXehYY3Jh!>}Q|afD<54A+S*{x0)NAdLmuN_^2agA8rfd-ZDZ_ zyzvQy0!c&*?mdX>m6)rp%xU;N^~CARVgA0%;h#496ce$>albatpxgHzI|Kq=blA2l zG!~VoZQ3^INxm7zEet}V$$;;gItZ`zEz%5dtjQ=Q(4b8;&UP)$lYA?X`%Rui{2M-I zqQ9A<=6PdCrs4zSkCkWNKP?JszCS8-CQRr2*<=<`|6t4+7YY43OWm!C2UNsT+f|Bb zhJ|}i-EY1${Ubzg6+NLU0XUotyF5RNG~?jL1<3|IKL`b7Ug&=Jb*A7UcV&W9?_Uj= zG+X2(ApUc!WNzT8ewlw2LA#2l^8QV^At+jDdW!z>xc)$lC3mIgxD$DNjOl++mN+BX z06TCt=R|{nJNo^I3~3AO!3TfG3X$QzE|V46aBAzM;aEy7(gZ!dLWdqMSPqu!8&CD8 z)Ez~+t;bGDITkgXHR98hEsORRnWD}X_44-?BlEXEcNWO^!)W+|RkI)&_+lc2B?}ayoo-k+1*f;eNg*2^RcJ9;3Z=?I z5$c#CRzy~|psc#CXzyr%ohikDtSAIZikTxPs9_j+Sa_K`1C6EF>1M4Vdn$7TuqZ{x&Wf~ne! zZ+`!ImmYeLJw8H*W5t$jxIw5Y>rRitUU+eofFS=>)F&qfvj-g?!RlE9E^zDY>|w+p zaiGp!Ed!DxVwXs1fR0%N#_2HlWDu#26fRB|Cal?d8WIgAz>GdBbqNZPg5}NamITQd zO4zxeRXtv&$2Jd-RJnW}R;CfwP38e8NH z>=fs6S0Z8j9mmRT=eCL;Pbd9Xu{L;$W2`<)SGd5u6`7$ttlXy2z$wy2=tAa5VkZZa zKwvJD$%l*~Ml9F9aUr!(=(StUzaXJBuhh+nedvQ1zL1Z(?0!4VHcePsSy*;>cZ-l+ z8D_>l^xi9J>}P7(@09*B?=>~A8+$Sad(?2jxLa|eryoy~#e8q!=$`#?9J0fu8R|3z z(JWABtSmN1FRg!Id&xOqx##MquOvopozHF5>j5Po~ z{@B`P(MQSebBH=qI@G7&0I5SYc|Q>r=N@)N>$x@*4(N`aA+)8=Va*>ysHd` zG2_4l2#*V}oM^@hH5THp;wc}2R|?waa_30(X(Xa?{Z%{_%{?PtTXOAM{Z#vHHDNJtDe%8<=J52RyShx0^~HEhF1X;C)wDIY+k^ z#leK3eqAf`A(;^no(%UD7vx_oj5O9eBCB$K_q zNdcs}fOJ|zK(42=ziamgZ+CoKWg@8iC_Wsx>>5j-RzR2BD-ez){oS|S^;FMVgR^LM1b zHwa-6o<;wkJH6Ap5!tVgEI_=Ytk>vtMp*fzEOVsgp{8513Z6v(1p3OI z;o(3W1c!(nzJi}YE90x=^#=V2Zsl|>8mCd`w>HKbRQ^rHNuhH$Re7}6+m5zOhz@KW z|2ZYby%bM>yk{o)Qh(_?BOC5n=Q#|Q#=O5x{%A67&)|AhJb>j>o2gfnLe1>SAb3Y_ zcxoqufz3E_AO+aFip7`F#q(QA%gwgw_Da~yEUj1lP`wzgHmB2aUs_RAC$%Zre{VxWT!J|m=_4CYCrYbRu7Zb{vkw zx0}SmiL_msko4C}=zM%0)9{x&vHhn-SzvL1(ucDtaH>jSe%0km|SN0^wr1T$%RwpzqZ-&+&w*3AiHDBB}pN&R~ipS zuJL$#W_Ja1pLePLS~d|E*{jRlQjfZ$G~Am(DK~^~-K6IglD)y5vvYDDV|<)^VORf2 z)h7)D>FfyEWneur7R$`{F$9DRy>gJI?B+)7!r0N7ubDqzf^bb3GqP99%;$OtW;M`ju@p+#RrYzGV?+nQM!d9*Bx zzC<~7s3Z3n>FGJo!3+gexpO8n7#R@t-vhqqG_#AOlCq3=EJfMoL@92AUfH}K-DWMn zgH!$%H246^A3*%&8m<|M_2OFL%IHR@lo_jZhvn8F_durBHz&d^Apc)(MJ?`7@50zB zecCEAcWL?|?>$>1CQF-f4VVyOC6XW%M>*hRr2J zcsPWekvEu=C1UvkOpnb_jmbxebH$crXf2x_2uE}jM_3@y%D2vep)LZX{>RI$rh83T zf7Mf<0`cpIqBz+|@+ zO#yR50wTcul zSr)gH98#RZq}tE){O?9mTtAawZp+4l<)bf{6SX+G$OW8TX*o z^lWu!A(HUx-9YU*+nf)k%?%P#5&5d|-wRQN-2GTi1L**Ht@GD@NDWFoy<@dh#0iCqtRlNcMxK6L(GO5x-4EIj|c9;tZ8`uc+F+*WY)$M7$xoJyfb2(5T~_-<_qbMX! zN^Ds|Ym7!yCykHtSl97P769#@(kmbN!p?Ed+EB3mXlp6)8pQ7|T5=3U=l&V6!&q2A zbUm{7N3YGH4b1&1DuUvJV*Qsr@~CQAMz?h~H|5*&TAugw)3y6Xl)Lv17k%WT=Ls!3 zxG#yEcOpQzT3WmvSfMQ~DI3w@Jf$&b8ss?;uMpxRBTa_s7;T^KD8UgM2Ts>n>~$F1 zvk6)n$ejc;m(MWSVYiW5_Nd>@I*>PV9)(49fZ0kknyy{`9QL082`n4*NW;_|j5mYXd{c%&USg`LcVdcnng;ID zyGZ#Y=zLB_0-ou7FZEVup^&KUz&mv0%K`$U8VH{!=NB(OOQoyhtDXy(*f7~qp!3Ox zV_V{rO(E=U45D}>2Mf`wz0h>#fljKQ9EnR@-G1k*Y0bcBny!US#=#AcNXaBnrNxuu zhP6jOoeN8^x>oT}-Y?{{r?l)=jDYlwD%hjXQd@bN3}{1rwS+*=lJw<1i;!Jw7(Mmg zMNEr6e5>ZUSa@^sKZ~M`hyJeu#J-Jed5Yb&9amc#)#Xmt))pXW`2zAKOv#KndkF@5 zP}*&lu`cx>Y4SeJVmcF!7FA(@j=tzJQ*xhu6)s`5tScgbFl}|JgSndohQMF`Ain&_ zfLQFguVPWTsPy5gCeKz$gidMe8C{>M2lnFfbqJeTQByL2EzM*RK>S9v<{DTEjQF{i zURDolTa)0_&2^o-*u5J0a{Sq+08=%ki-O#(fu32)#u@1aKp-Qunx{KZPYpd3Jc#vl z5NoGiguEuLNbnPR0hPAPuGlp(o^rwyC+55WwjOKc`cTg}f z!0g#Kh6!WK`-_5q3!3AEMF&q&HoU}&w(P!-GLa5QLu{PNj&3ShNo_LiM(urJ}8-b^yWHA zs?y4o;t(YFnIsh$Ni%tRFL1h4ePrT)kF7RYd((!YW#L}V+j^Q!`+Sb#}PG0_Fu)sDsj#fLiuo~aoNC4i|_kx9Q1j8olfO(`J_XkS-c_l`u z-k4tzp(Dq!uF1OmF)!}J$iPK2rQ!;&PA8Yotu#DAPb94MiUxil3Z>m?*o@RenU9Vc z#OaijPP!xd?jY8cmSlVYM~@cQdnyJEHO!0ae_qgxx&BpSX7+z&9*?S2s0MqN=KhBX z!qUw#^h5fh-bP$2_m+A_69EB;^AKImMpwfAx|xq(Gk~q#|7w<-3`npv#r@Y~aXj;p zo+dGk8#A`Kv@AXHM{pBq5SB<=Y_KtXN9=e`1o43=;RGxn^t>+8b#ajIx7ALf=~C9l zI3B9tbDhf9nWKwsGjXX8YQI&NzwiUv=nizjb3#Mx-#w$vV7eWqls#KM0a5N;+seI_ z?n^XkK^+OfNnz47vGIcD2#bHbYF7`vGgKf33=+unh&tZLvlEWN2g?|PQxWpja8$8) z4GPPA(X=BT(8|jOXGqRr3>4>0(2*+b+?6z@0ZxNJquN>{mmkFgO9tFqCK)AWX3+&3 zLgH*LX$bqqe58{l=mtw5G`%Rt>%U-~ zM|0ozvToK=pQd{ii*=IzAUy!VpuXlPm(LHMJ$$T7ZjdaBlE+E@y=6)P=z$L+fi%8E z4NnS;3U#BAcxB9vS)u8wrANH3HyyTQ3I6bCGxiqJ^tWx#=!f=bHj$@VNXX0^N$mG{ z87ImWD~GRE6rOrbp`m3~tzn4n6U~J5*FXYZ6!**a6`2vr3Nt#7p8w@1fCy4lGp#9*p6mD3yup)wn9P0xYdQ8r-^1A3e2Pa-kCJZK!=}9BTGsZgWffBNyiU)k=d6CuY zqCl6jc^KRX5X$$WZ;iLd#BSh zc#wt0r|w#FV$#(U+rWi{k=mivJ9TWWXlCv!1hxhkRPYc*;^2dFt0$v%5R>OEmar#5 z_PbX0y=nYprvzkWbf|_sjaGGEJCCV;Bjn>C8UM~{ltJt57%_HN?)!eLotJYIr0`c< zCifO!kW6!k39U?!Hda6uOEX6PP^2a0gNF(qGRsTiJ2>Qs{&Rs|(Yqjny}uW|?*EMM zz-P)4-R4+BB%9N=x$ZR9c_#(RYx^58WtJBwzRX;!{kXlU75wWc^A)#lnqzS9%c~d* zc;)@zhANee3rC`a-KT3_!E2s4Thcvq>i>#=6HX)ZHd~9r4ER;#d>w&r`~op?0>3a0 z6{fD5X6UJmjMB4*g|#LY7YielM@C=I_5SLi6ti$ehEYw7wqu8#@>`z%GQ^enh3oW8 z{&?Y%c8Al87MDfY8CVCNPTk6{D!1@mH~O)^s&ZS8Ynw&(jZW0-h<0SV-o26}+*Cb= zj_>FA#A5WVPdcT{yIIM=Qs$IoSJ&pI;f?7gx)sC0hNZxmGX!~01uhz$M?@r1xc+;* zKP#hPU+1x2_qqT@wTK}#6@;=5b>`iT-?x*fgB`6>`S1Yqkr*J~2N8^3^a!*WqeNOc1fh zes`PwlhD4}BT0ZapnuCwpZ z*J1Dyj`Wv{06l>p!~2(kHkPSN2o^RKieJ8bJI$xMZ%(316JSO7Tt}cx!<2l;@+B@- z{3ic1^u@FDKiw==k+ar?UNl`bw|TZx%m|&tK1P87A^pCd_r2F?B*PQMvE*0lrN#yQngr2EPY>Y<&j zSY<3Fo}v$hdUJ}f=<;hJ1C>^p)95R~r1oOq79d!49iL*<)kUW!Y8Ky>GjCw=MDE0& z5~Wv^M1z3Z((bv2QC;$XbZ}J&JY*1qp%hJOFOJIds8!$;6o}K)j1GdEmOws?2*hgZ zOc;3r6o2{IkJLy%2&+(97vk}eGMbn3^-*Bdzrvf1Up5n6Y=v)7|*-&Bz7oFc=4G=QY$w65N8Q2N1ja|F1_{qFSS0i?(~2W(=acUrlE6_ zyYhE=@6dNY2fee3Sf{Eits|U_xYC-rQh=1-dB4sg)I?q>>jkDNqMKAZ;Y$FuCd#f`zMWEODzlAmBX~G%l{wqYT6M~iv1nM zE_wqCbiq_B0~zaiCJjqPv}eX@bEv)LaF2I!Ytou`bua!o=QRRs47G$^NiuOb`SWjV zzmPr)EdAMZQsh-vCXi(gO0LC`9h*j{hFeg7Jd27QYYsGr9!v=@=cb(f-L?3SYdB&W9d&=kryW z9-?Kis;R+4vz1LMRerz+Rux%fl}A#7d6(AK6YHW_71l4X_pkr{bpyFhQ4bO`Y8a-F zmNwQBaQ~zX?2j5yYZh|U=pdOlCx-kU_D4~uwT+a&O-r){CoIs?$+(h58R6@s`)>t? zZZ3tq6Eb5uf3LVEp)5w~ zi)_677t*!bL5mlPF<{YdLwz2u3qImss$WRBNtX9wr!N39O6{cHW+8$R5E0Quc`Aeu z7lvuT$^~D|zPi3zmueU1}x)85F{_?I!QNC&(N`zwt54%6>o5b`nJ# z`AT!jV56^fXH#jdkkyC5P%*FNbZrgv&&UYY=w zg)P#bI`uq@Q7O=8n{xnzcUf) zy;5doXFy~(Jb+3BP=#fJ>RXF$v@nu!?y#Cl_n*=tS9~Tzl z(OJ5elY}p0pBE&Q`TKF&9k8J&1R#*t3g`+5kOh_*O#c`@2p$NPIK=jU6*QrQbk}md zl0EmPh)JvW13E}zN=gT-2IxM1)&J04O@Qe!C(MIQ_*FjG%q_o~XCPF@vvpr$6tb&( z<+v*_+G(rrV!si`%7F9-2=w6e;zJ~Yk&;{Io?%*1OoOPy>^HMD@All6y*WXV zJs&TqMYq+=47at&Xj7G-*D^bE_Goyk?8tg`NC!)bY_0=72FUPeRn*WS@LQ9R6a7kF zHDCN$4^X=lZo-*-te^0l3EDOjs`}(1DD_>mU`W;H5b|k`I_EW~ifsv*9gA+lw=*%< zE$lyS-AfxJ|#g~khd8fkS%)-%gl$mQT>r}n})({M%tq*#@#psz$wPF2Fg!>9#a zt~X`OiTHDKt|2&hkb%<^;=ZSE9~fSL$EfN=@61;k_4}-%Wx9UJIPt!Z*N3=M zck<1@Y8?fouN=3p6s3&p81$l@?_4f9Fc?tFj<#efzuKsb)8AMeZ6tyH>ZWIpoLZ8t9u^^2o9I z1fs2VZzDcM|3Zax3KE-Ar7r(2`)zGr|7d1cUt0?H_UAuJxofM52Msnmk@R{zOKT`V zH*U`__^$5(Ss?tq+wpq$N>l5OdW*5ZeqZFkubvb|26*#%=d=yy3aLH_ zbh^Qd)Vpdqzs)S*XF+=Ljb=;r6u1y1T*Ahl{_gQdPfkqWJZZXE7s*{&&W*6j!?Kry zxNja-dc3Hf4wK@4`q+_;hJGf1y!G{wV%mj`+MN|biKKk7_?EMbGz&XtB|u__(n@V} zJ)JCw*ubBZ0^?U+RbXJ)W`0z_Hw;CpZdvDjuZyho`V`6UPucJoI(QjRz?P>w#ezbq z0!p6V5>@WKAEXBU*g}NJT?3vv)YYdCytH&udkxS=*1PDQrlLn=7vPGWi1Z;5G5tFt zI2YTq)!NEeQWl}+IpqdKsQF|22kVy2OI?7jerZhZ`94P0IR}pl^5f5Lr0UC1`yRnB zU5ffJ=Js1{l#BFy8Z(&}f;|qbIOlpHut-lT8PMU9d5uX)cc3Lg3yM68VjO&RAu_Iv zX0h7xaFV}2=NLzy!=vEuxfQ&@()_iswvxp~CnV)cpy%6=_7niB;8eDI-zL5--`nd+ zluIp)FGbNTL@|rg?NN>0vbc?7iaqp;<(GgChoz9M z0|FCg`=5W4#Wio4zDWI`c0&IU`MbCuC2N($H>wG1q?JMqdz5dLaw zN*C_8Nu!Dj02BAT-}3RyBOz|K1$rvmq0%_did(;-Pwzl2ia-b)KI zNi5K9wK8)oZ!Z0wwl0i!rI+^56)Zum>O!9GddtvzE^ZtP zU0IFa(c?Y{|GH%PiOzMfK8Tk{^dQj5KAl%)6jf%X^hWPl@ zp}}41@c2sZDwNNZxjbqBv12ZFihkL?Z`mO75A!S zypbi1GdSOMT}}WHhtA)KfqD$+EcGfM2TbsG(AB{!H6%W%J`ktxe>slT_1BV2vkZsd zp(`Al-thT2)Sz~0Fm`M5O&OM>-@$qN+)&HDp62^AVd2}S{Drp;=y8bVAQMwcyGp5Q z<>K|;W;$86?2%8i&+)(|k;|w#^Dr6gYTaoy&*6taDLopP@%mH3m=%QGw%9H}pyFd1 zFp()_jijkb-7kOt)RjwXn6r*^13zzWI`#4&NB8m%ArgU~PshuGzIl@;?t}U7 z>Tzh@>_Z-W{()&&pq*@Mts{7vW0~!*BnzQP@d-x2auNZCc(|P{)&JM|gH#__T6tpN zbpi=Y06_&-pG4U;BL3C;rO;6sz!_0dZZx>cuc={H__wnXQB_h$Nh_LtY+9Nb zjRC<};X%O~`dpy{-A`L{_CEt!+wUmheR`YO@ze$Zn?|Pwn97(xWsl|*yZ1(SZru^{ z{-+BwZUpFZzFm(nqNe6?poapNjG`Qtu!^tXojT5^W5e4^_BQw1n55Xs#0<| z_wq8H!yvcPQ^F>f*0hCb8Hh54?xe+dUdN)IM}n?TjznLo<+k9US-N&b?9y}JIngwc z#x_h+zFEh)^2hgOyVC`pN$^tny~2}l4f^&`bn(4}!&zA^LmrHQp{FTDBf$h1fzpCR z_db~X4OKNIQlHy+<_M26D7`+SJtY%5uq;~QGBlc!s_dwwEoEm_FK}nxNk?Cwo7Pn@ z!qN7yfqtbiy^kuV58PHphIRY}c`^;eCSxy3#O1LHbG~ekVnB2+dKz(E9V!?u%kaMY zuh+T};YPw~Q@zARN{-t8MWe%{|5eeL5kQYQdB^I^%%JTmI`hvnNSHJGC>uq}(Bq;- zSE|x%P9E zH}Yt2ZrUbOY0&F!4DA3f5mf8>BRSAWrhR2AUkW2PQwZem(taeQ9|g|*^m33Gv})8d z){R@kdn(%pN>XF)8(rew60hTa^^!&UC3NR`S7tsZUk9cMyGa|)N0P@}cf$z30X6#e z&Wmad+5a9eg$($A~eJv)f)a@>jRqNDhA%_&3r``q3<>w#8T!GEVb z%8K5=d1C6jN@j6JCK?A1mm44TwmJOy7srIQc^VdQD_u{d>0z7;=ve$EhhTK>XPo}w zjJ%H0QQz^T!iv02KLi>Yt#_9Wp&vRKiGLAt``zHBi2lfzaSp9vLfxaO$Hj9mw_oQM zoV)R+_hy?>{~o$Uj^3#zYtsbOq8lDp>;8`87uE=(0BCWdg}Syzh^#Ots_+5yg>B%BSfCS z+fvw=c^$eOgQ5A3X8l6QpoVSITJgwCj|N`~Po*=u*d>pe=rXczK%-d^VO;e*OEAm% zQG&ANygDBvbRZB2s1#VV8|a>hX{rd|vRd0nsJn+iQ}hT;p5i1gf9((GIa^vIHZlTV z^0ub0ZK6g6W4cW{3Z>n^!-S6RWQMjMmgJ{*&3xxeqU^ECHml4h0it(3|3{G~EVoln zh(^L+MpFj~5f$aNJhVyeWqes#*B&UW!?_pNhuCR2jn`H;r zD8aW4wJ08ZZ08sBOBp?DnM>=`CmYDw^`k;O<@@*%Ptq><5+f#cc_*oStb8qe>y&$f z@=xf}`O(J%6ES`{Ru7VN&UZ8ey z5D%qz;G9puVnpy*k2URY(^+&@m9ks4Sn#8qn|Lr^!BlU|vhvr3$NiVulG+6g^n8bB zn(EDU^yML^KHJ=N(?151bW((}x$L)e=A_glS>YHNU`dhw>ZdDgvQKNS);0tv?0 zQl1-+^;B%t@bXpCdRp~7=_ty$(AcA+&Cei0ffJpXkZ+%$qi!GEjt*U_AE-_1a2Wj2 zudiWqS~e(ofp|>hfNuQN^BXJJzy}!LGU0J+VZa)To2ZgY&5)PAlZXQ z{j2}mWQL9KZaJrG}zGWlrAm@RBq^Q%yalIEC4`tsdEmhQU=S(-0 ze$i)zzDkh_ETo%llIMTp6>s^)^aAu1C_9@buyszP0*!o2${ZJLOoedD*>qXIaDw8g zxczA8$un-XOJ_y~? zi;Bzq|L+3iXNl{7!6ce~3tTp#@SbGoMp)bJxC~AOOKCg+=R*;L#Y#$8-SV3~&xk>R z-xo{{8;UpfH zC&WrY%qKR7A_o59GRJQ>zS=E1&}u5_ITHY_TEVLD+2rJ}!xVQVduj{-%=lNYWjcm>3 z%5RS>#oTz|FW%s8S<-P2K*fe!n!-cbCBKgT`c-A$gdpI?cKZ$+E!yNleOnWg4*@eK zK)nK3emveK;-P;cLIwQ!(!su|!SPyFRe3A0R^mix98OcCeK}K4m~@Hn^P!~@1?~W1 z-uZ413HkQky;j;H@)!{IIpA^%uMTOSRt02gxP5a&jGA9Pj!~6yWUm@L#i~Q=+wZZ~ zFl9Hpq^^uo_9t7q=03MJWCG760<9~B;9c~D%9!wMWKdI`SHc3W@LsSTUfM#EoXHJP z%?%pIG6!Ydc1&NH!U^r>MBAwp4)@|Q{od0~uS_Ke8;f&MP+QzG`;?VpENG;xE6 zZ8@3NOyWa1xan;ohJmq;L;q&mpug*v`tp|(;AMxD=pRpKfyJsD1$GmmB&dE>v1mM# z1}iJCIgx<#$v8Eie=6fyG*~B-XtvRVRE3_Imjop&JIz)BWImOn@f^rsOF#Se>o7g` zx>qKIaQ8_hh?ZW^;bSZpe;YC#x-JnQToR8%Y^Y}o)2{GRCD_%OgS^>5Y5e!KXAHp~ z!x}q(7S?SFvrwndP#lE=j)}~o7@XB$CeoNJ&1uD*ZpwX}OqbI$E27mp;SQ5R9s zm#pg>vlZqHu1ij4hKWewtpU&Kbr)BGzeUSlT=@gn{l)`CTz48fj$?GM8N7O=1)yIp zIR^ZwPHu`|WwIZp-Q>8Yw-4|BCqsYjWG|A}?I$BgF|+g)=}-s?LyH=o7X@%q;o2n& z8lO{0${CNq-m;bj9vyZD76{YjY+48MSxDdX--ss1<`jKR@;6E9FCaY#kdZU)WS2*; zIssHL6LX>9gyMG!ZF-tV$Mdg7G?T_|nY-4KGsNj6CI>|c?w;ny_R`RUw%UXEe>~y| znmY)hD!xHVNHY7SgQ8brfR|L(xxpgn73H++49(Vfw0#z%xUl7OZ*6`PzI+`2q)nVb z!orVUQiJYCksVoY7lNoF(#3bo2~RFTm6k(|S!AgIQ^)%F;(>sDQ#wRu;^HU9u|RIu z;kW~%C@jxmJPTT2hr)MfQ+j= zKgWs@5io%lwcFR$VMpBE-!wnaM#Vk}rULKtQbIiek-%^cSFXMCL&>`7EwhJZb5F_V z>bma=R6TLUbuv# zHDwNs1UJW}@nHWm3#I4g54YY=Y4>tl9w7!S>s0w2F+nAOUwY^*_K|Oo*w}V=6HocD zZD`U>LB}>nVEH&V$9#BvGZW4dK24tkZbx3G6?a;L={fGnR9k2w$yGJ!y0qWWlF2Whcj9J)R&Cfhu?P zC{3dN@y02Z_AlW8hSzC*2uHA2yN9kw@?+-eXb~*;m+>^Xz7j8&Fq&*6X2>$k0l1Y5 z>9OB4DWS=V$QK>~uI|=9e5TP8tEN*d{hl8(zw767BBFLOYDZp=+Kid}hSkqg{Gsg6 zfBznL_FOZ@;~(!-jz2m-ruP)rpPO%g17nqaM2@y6M=xm42hKH8CCL4qUyatKhejY? z@7u69q^>dbV?g!pd5yGy8wzl6+l(NLtni~Zw*eCpvKu68^R^w3TVhysZbEfLCllD&PR1wPpQ~Vs;(QR5OTl)p^R$(fbQ`Ec z@wiaA4{7CJGIG+8!UW)-kbQ=M!UY{zYkl~9Yp5L#0yiv2LQza>+u4m&IH(Oe^d%Jl zAeG;tKs-%g;t0|%(YWD7Tauy~D3}Yll)!P|ms%Va>g04RBHAwUG{UZ1(tFXw$d+Fu z_D9ous$_BlMY4?IP|8dvEQb=AEU%7r21|@#0=*y&fcMI}zxo#)l?{?c(Nl2}K%fbh z-uNAZjLL{>+Wcx0oxkG0!5Rt%o-mrJfmSW1QswrCB5*o><@x481AwW=W2u-CJac_r z2lWNE9*opG_gqZipgId{DOG+w0z$X3+J8K9@ohJyW9VM{goL=oWBH=9lkvzJGGA&# zPPcm#GcmWs5~CcFUPj#0k&CJp7}2}ri`=yz4!5RgXcUxm!(NtSPk8CCTqWwM=e)m0 zKT#yv?NrYZ7z25IGsg%QbgqdRV{j>RGTU@w#RFyVw_!V_h(OT+|6#-n=Da{LY&J8w z(ig@HZp5W$IT^yxPjoD@wW%FWn(vkxHDb}aFsDh1ivGS^ZG*M+YA=;J+V0lAhRT4O zy&E`|xLX{vcpqyGOkp0pSnIB#oU}IlhG4o{{Xv3dx%H?2YEJQw1SRXX7H0A3rG?&R zpfB1;4H3_(*8OVTwIO3sdrDPt@0_XPo(4^DZ6xKB+NfLW;)uobA0K1Gam?KPjZe1C zS?kh(o33)O0d{XBXH!tAvuDE9mJT#GI)W0nTz>7wj+pk<_p|OeW!infhG4I<@ak`N z3Z$L#x=#7WR<*dmRp8)V2;+x*paN;Fx5%U0?W@+*CFh)Oe5=Q^p8i^peR=K@Ht~*M+a!NN8{m!tVPh^t{!n`pP0Sp_0~W- zmW<9m5?yw>T99`(8bJ*Za(GLk4OxE{kXb>+V4I}HyHYN{M+?aHP7g!EI2bJ@nO8ee z*Oe!zlLd}`#NMdv3a2Ro6tf%G>)i@})^VWLj$NwSIjki=e?M=wF6Bhw`$ivr@zKEsWI$8AEWiOp5bSk?XKICW2}5?Xi&jY)DNH8hS6G)ANK2ZY*o#c~LS zaZr4Q0*;2Z@&6p;KkTUH3KkG-Uox$i3?#wcN7{P-)4SB5t7sYS{Q$`7a2!B4CXWIp z5p=7(Jc?Bsb*eFtP5bD-n2vZH6GR>W9<=OpP&cv2l^E>HZO4(9$@Q98_`X~RcyAUy zk^k(gCJS{bV5@la3m6ElxjPSjAF;@o*l-FEYTyQh{u;YBB#%zFyEYMCKJjb22qPAX z(VkMllXU4>*0)ho0V0d6EP9oGLi|TJCpHMb#|)fBfuiF4krU^`^!E$O->pQ_(O+Qn z{cA6)m7S>((1f@DyL>>=w|^&RgVddf#Re#0Uef^_`~8->neZ04KjMb0dn^`e^XWi6 zOBl=Xy8~3+k(yKNPOe8Q_!eECVU(tgfyXi=^m`HM%ENf3oN1=kUitHF$SJ8i*Bkj8 zYN58Y2(OWV3$N^B8UQ>dCaX~3?dnQij_|Ld{u2wYe4?;hcs6Ht+x~ZI(=czrxC2Sn z*$N{YiulK~rL#6Bw4n*7nGh=o$RjlIoe^*-;teYaQw3X$tJ#k z+z-cO!4Z$I2%^qI38(jNG{$1}cyXiSbs1Lk0%!$KAkcw|{R)=|@Ej?jMLcv9V8ba# zXag^&YupoPVw0LBW{W~xxTmVTN}ElHgt;PDm*fxu!*W3JW@hV(u0UX|fzfQ}OH+4m zvv-}Jw}eI2b*ej_EZXb2x^>tu%}K=pqfU{b-V%~w^~^)lR}(A#6gr)sX72qy2h<^v z;s>i@?z4Unw)X*sV{v?MZ3!k7i#a)c!Ss`)yRvqOAsY?(_ULz%%lst$?O4DcX0&J=Uiwd>Zc0`b|YuP96oo2N;%q%wAT2;9Ia8yYSmUh<#>|z@jJx zYrC`Fh+$A3;e99^p$2>QTz6kVjg^y!X1p4>wWDKj+Zx*pxsO6qi=03f%02xBWQ%{| z`?&ypY)3x@uYv=2VEe7!n#(|C@rTfGP1{rexD$exP(yjKgCyO8Ctt6&=H&s@uA<@# z^u5XM{$f@N6mJrVE(t&%n#hxMpDXB2#9$xZdWxEvQcssZ1l79klpmrQrb_AM8TTO_ zkb%)3&x1q_tuW+vzekLCes_Pk^oM%$EtLlXo$U-Tif(~m)v1ZPN~pELMm6R7sdHjZ zw394*36N40Qk66I?f|Buyze@~T6fOTY!5hDh08O9o>ms%H~<_OxRElvf?ShIf&_kK zu6@Xr%Fg~hcC#~|=1;_AG!ZiiGTR1R3(1PMU^kInJ66O)4K;4;_q^xGG(BYu{Mn`& zIDkJf<*cqdZLkJK4jYJVk(j`%CheRYpuUc1PMy(}?~7*E#E+a4$;7xQGe3T1A#Mwn zclz-gW&_<`2Bn#V$TZ=)u9+(9p$d8?gB<&uJl>3pHE}TE`(gq}eB&jRs5za9LY3nZ z|5B2JP&_z7W%Y^XSvR#j{qj4=FBH3ipr6Lv1uN_gaa4X74A`hgq;F32i>;{>5Fj~T zMHcZceYzBo)`%P`g@a6P{q)%)PhYpp+hPUBWG=7U z-7Nuj#NUF$LNWM;SBC%5yktH-XLQ&#CwKuPU^^GpD(SdSr*vuTD}w8cP6_ZxT2)>+c5Imd^&5v)u9AY^)KTW(lRMuzR|00 za`4F!l4IAknlx6mP{)g9UQ`wu@t(pSg@48v@)V&toJao}`DgzHkJ5o(@F)aAq?Ai; zjOD4|Iz6IAS4VuDXC7ceVv1AbBl7ay0tAQ7GQFvRNzSLnAwf_4bLFoZpf1s16(wwq zml>)RD@WCd;>+rGO&g#LU><8|Uek(P23gcxXZq}^8KdXP(pRFGRD{{#kH`L;bzD{j z^p~HrMIH-a(Z^f2%cHg!gTyDdf%;SyM9-)O`Qt!_;tgEXk{YXR7I2OnjqVjTe~G^M zSymN}*wlWE0D0c=b;Z3KJYlZ!|gbvuQB57@=O;Jns$76H2L<*LQ>$-%ll@4 z#;tPpHu&}-;UcW;=onN}v68mi9*~ zRq{oc&kht`|BbBwmO&D&S<+uHf=~ECHq!mK7x7;3J^P(9y{fF8 z?|4D=W9?cIX`be@B1?s5FB#F4BEe0B$$0zqBV`px2PF-kA@(ab#b<5>P`&aR5~BNC zGQMz&`F2O(tFUE5->+JIfmAGGH}LG$ZSs)yQ@}A7yk)3UMIr9+H10>TfDBLS8HZl( zDFI{{%VnG`2a|Za9fNzQf%))M`N}KVh7q`#ZvV{=cfAgXh{?eM^$0Eh-ls}Gv4`=#V4gl;fTSKE9y}fy|gyNIiv6d8xn)pm0 z(WWNqV4;7%Acnt#O~~L}D(2TXUQtB*BC90^@L~(+bK)NSbLfEPi#Dpsn`Kqbn|#W# z!>&H4f9)Q;gsFEw{6t2?N$TicXO}hd-(&?wskFgE$ihly2Y=-2O|e9yF;gCaqVFFH z+pELX5qQh*;i3%U`AUv5!!rJpZIHulV*+Xb!1Yz=sjj2V)L1?~L5`A$RVR`cgmcz% zuXH#DWFhXX#-gas#El)?QwJ^SQs^odoD%~#^ zdp$314+&g3TLj(QiG#OC4scOfbl+cWxkZsZ(bM9a7rQK{0e zboPm2M-3|Xh4pD{G>$^lvg$!X0Nbb`stm(zQKLfjUyX|N=Kin4TKC-VbRTuHZmVG) za!{vQ|H-0znta1?;_plJzk@I1zYhR+&JX_}5mhu0KGCO73FhYHlQRw?210+{J03I7 z@FoEY6JQ{u=V>@g-4OH$8`P7^D+hM_mD1u|e zOnY1(3v%tkfaURr^`e+WE>VE66#LIrE^W76C?jt9Zly+bmxq-B$c5-b@rD=F8Cl!8 z0Z}{v#EFz-^F7igmOTi1$MqV(r{;0>5L47sCACdkDmLGKFyij`cnpxzw`Opd;+Uo} zAl-j&MTZ{!{)5^3erkXtB64Uv2btX<(93!FWlP3m-vhfT+4~IEYhJ_-PIRcS_JTt7pjg$IfHltB~yxtgJ8&z-7q*#jVrX0}Y2ZDr9Q$9q= z@=mB5$pskc2K+^N@uyYQZ+P_cMD7c}9$BGl3_`rtMMC|>DO_K3#i0gNgcxNy(|sf; zge;Q-VhcJzLQaSmOvbxq{Ua@`DzDT*X1Y3CNJ+pCN*OqE1-!0Kv;%Xj#9^O<$*%~| z*)xz~rjW0N1*rIRsUn30nKbjc$ElNVF|+?8=h(VzzpH)jHnOWe-1UN0p7Hc}i1OT( zA~s776Rb#?ElJImtSDex{qbhwU&F^7-%q=XVR}#5HNJQbou-WS50YtY5VN5zhrjrB ziLcxpO;c~bh&nE9IJd_ZH_C9+?g%>%6i*w2>f;58huSDc4ty6og26>V?}!C?uB>(b z1$_abNB{~Kc8tW{JmCmlv!I8 z(ibYc(&=7QLqB{6jNcD&kNjxrq8~ZZUtoiRW{wqmVZ$%W8plGt3%X2MG2DvGU*V8U!1_#52wRZblyK=S!b(mi{K0l;l-Kz*fs_UMukm0 zmF>V-e-9KI;>0xsB?N2D4AV^jRUrkFX4q0E2|i77tQOhNI(d2Jruv6|`j?C|iznDm!^fSgUfe*xF}F(FKZ5=g?DTA-@Ae-jd?n+O=x0dJ`^Du@@)=4c$3 z3ySu~Kr9?5iMfBq4B!f#ygJx0H7!uut`9A09NnUOyZRvU#o|nU zL|h;J-2nt0_&F6wME*NqB1DSKV;^cD)F6#dCDPy+>A0slDkAk3BRTg+-@eJ=!JYC% zDe?9g1PW`xWut3!rSIGXYY~_bsIY9-!wE=9dnUO7*HoNB%=Hkb(tZuSGgkfL>cSTa zrZ>KAD?gRcG{y$d((8x8Kxsz2L0&mpba6T%a1VEm`eOdE;OC&UV=e;fJP;I~Xe;ep zGCV`qYdd2~V7VPH=fVEWS>R;Gm~Ocy)Rc}9Vm=SB(|pXn!D!p{BdpRY)0mI}O17V@qJPKwQe>qeb<$8i}#J z4tU6tQyI^#I|oU(VIuzKnHARa%6{y}%yxp!Z$C>>5KYavh0GZ1Axnw8f^E^S1k=BM zdq+WK)hvHs&1ImTx5GpI&6`*1A#%{Mux*>SZc(SJ=TV#Ir1s5sv=y!UZDl{KHs=HP zBBB*KD^|+h58o{|khHILEb+bn+{;~hv3xrAhyKhDV?*NPlTipF%gZAs_J^xzIUC#e zbQ1<~Hm?UUy`$B=mv##jLZ5X?tvgpAmCyRKR5+aRBwNmA(XiT>BCG@q$J^%eE8BQr zcq-_NJxdo!DsbsSPOHjl#@=4E)e(9hZ(VuRtlR&N#iqAJn;1t0?pMrz!Lyxy7TcG9 zcZT5&B-x+gN~OMA>{C}Gd0$Uy)v3~%oWrL_?v|UexqO3~;!FHMhAItv;H&EPfl{4U zjgs_?FjU5Uz#;*cl|sE5LD7KU4-^$MBRu*g9vP;&$6*6@ZYM}Mcn|^8ho^D2yABZ4 zDvVw;Au;Qg8}K;7!N*T@nFLw3zHp&F@*QuU{<-cHx|>Z_7Qyuy8#pxSm4I#J1Iaq3e0x-@ zJQ%>L`>^q_zb-A4WAYBRv-#BHtB-%yF$i&#FrOfCpz1-6H!C&fK}923oz}%=85I<0 z_pT5ZKxr1Z2Cx1S!wk#KaKQ5zgQ5r1^KpUp-;#rCrRr$hnl!E?g7{2b60vqU?v%Ls zMRkRaAZ&S$Hq8|k6i=?drn2g$^u4s5(J&l!6tL(THTp1oncnczN~_vs0vq#X9dgoEIVKn6X5 z?{iy7M)koFuttNQfxU}s=Q1p$zH)8_!{k5)xed{S05%o+CZq@_Iz zH8vt#-|3>QO|<#MaQzC&%aE)$iJU4akd9@O7!_cufV{V7lUqu}Hx)9x>9XvF znCr^OvQdg;vf5w|U#TmwVih);d1zQa(p-d*SDBEuTxF>z7dw&9@WfYS7C04h#&wU8 zRT)pWCtELLx~WVFJJ8+0hTwoO(f3#QlPxbncgBVb*@OQ{-=#ssriy^mz8uAqVJy~p zHJmDRhx}G|>hC`H!mht9?)?FdA{m+K`C&A+nZXZ`D8dy9YB+6@ouWslr34sRi@A zkQTM}?aUK!t^tcGY(r3;wNEyTBrEu7zfxHKC{{D5v{o8)LS{IgyppMR>gC4 zeFFJHl9CBLhhv)D1SSij2Jek>!YY|VWv#|CF)!9TS5ML}nst3Exm9k}Za zC4Z&P<+udOJ6P3tCZ_+<@wRR%CTE!F-JUB_RytEs_~=C}F_Cij^hsN)YrDIhjDBK` zD7!OX>61|MgH3c{ibC(RRBCG}Cqqk1tnW|GH|ACIe-dc5Sfxm?j`#5u3!B9r$KmXf ztSzq3W~!HpEhKigQf2A`YGvIY*UWz*&pb=`+#c|LP_OFi7xLj_ysO()Z4?dEXwrBq z##Hp%H7` z#XjpfRu{BCTuZz>xA&VB(@g6@(X(A#t3@eDk-B)q6Eoz@I#|T&3~X>OV)ge84SM>9 znYaP~*s%Vq9JG03BfAE@Jth&6!P{gaOV!bAep6zxy;Zdy*@s z0l}pm$Heh;sX0E$_yN)@lGLPgc=1Pt20C#N`G}41Q{FJm;8&^ybilQzT^r=j!jGs? zro?n94lg-%*J&nA>guU(E{)I6IU)-8u|uY7r?^)-Yo!uf8$PI+>^;4OC!-r6zcr~b z2;xJg>I4J$x&BM}jsZ>iw5iWHVf8i61oeR(iYtRjc(y8{Gg+P)4R@J z43swZiSG7_4H?44BS205UbRggz2ACZ6gRC6m2+IG(r3(F^hbCJ{mH8*DkRBM9xi}J z_Ru+J8KQiYWpKzMG;<+%d%NM-eD?SypPp!2y8WpQtCQM0k>9405cMXl-hNQq&RLj# zIF{9qP9G4D6{v# zuK9pf@}57#kk#j*4;w?7!C%+xYAYd}##O(gapwioON7^3GmVb@(bzk{DHzFiDDo?L zMM2jU<+$N#wz-NC@*9FaUWu4kEH^h5YJMu#1~)o+VAuJEGeC*aHgM|$o9Ln-EB4(F z%U}Fjzdt^p{w7R*g&y%2gxv6DGwd(%AdFU{JJ%Ihy&qpO42fc@?L0~lwVx5nCA`>E zy_N(pyO$CjvqhL^P7gLJP$5UkA;H}e9SPn!L)KwFB{0#+Z5W$dTH06gca%&Bxgvw{ zIzrVbZATG-HTi7fz!*=A%SWgDs^f6NfL%pr;TYg~u)Y*X9agwK;;Mvb)!gKTGLtAo z9iq=)zWponOq;m9+Lao(f?(zApqnwy$$k{u0FEd{OoXqd$6`Az62^YAf6@gypKl$# z4Uk%K?8ze|4Mct*)*w2q55!``^YP#Cssjg`9vLBB<;f`}F zTp-_U^e3m+>?=OJ_Ce~`_C$V|FeO$V z1g_}6tc%9Rfz6uaK;Q^*hhjUFxDzLyq1=E0=$oE1aHT{1MOjGb$?JVL$vKm5uRH`D z_lZ$+xd>y1m?0+F-^~T&uwjq1*VK+~#eCAlwYb{RzTP%OF$)G@vp@V$CuZPX;||M< zRe1{T%m3udduS$MU#y)S=4}b9GPnao3gyYa9X(Af)J9QZrLkDF3>4ML+cKB;saYwo zC`@gQ2FIo4j3;(5F)b#y?~F7pK50w7vo=H;9W!ztJo-lLIaMt_YH$|vX;u8@=9s2S zOrm2D0V7Ob|E@yCVh_9uTttNLEDu?jj|NRfV;LD(JjhbDi83&dXAsOy1wLKI=HYH;tBMh0 zlmF-;tD+u4t?XuEJcBImSL*Z$PX&mxs*Zw~UGq8}uUn(uBud)_MfWF=P>Nw zq>>soqY|eipLI`WQIe}$E2Gn*T*`g*!E0(4oiR+lx_FYYf71vDX(4>DClT}#NJDyXU^ZPelq zuSUgd6O)~h&1kq~l{Vwy-K?bSH}2GBgmvL8ANRx(W@dDg8Iu*lT)4#drMnAhW}Z$j zFSmPuzrVEk$#?TKcRIkLyB?n$F|SX#J7$X+J||HKiz{MazJZG(8TiaI)gpWh5r2`7Zn65B zGkhGXwe>DURIgILT8Iw%C>K(1bXz>DqGFfKRP}24%Q)^w1h7aKvVbz{K5q-;F=fWHs(cCKu z-P&)%O_kUXv@R?T1yjAd1y7s8w@!J)>eZkk|Ir|?mZog!(5M` zBs}wt4m=V@y7}TxPuPGRme;eNA|L*gwSFetKb&bh`zwFfpY$Z|@Dz!>H*fjtSF*pF zF))GbO*m9Q_GG)m*ayum7G>M7EmKnVxROG=MTn|l&Pi_l(KO?hceF zWmNRNqDH*74nY*y=H;(4$dHP9{qR$XY^B9COq&Zb6Qx=NtDNN9U_W6x1c@Fycn1eP z&m~7e#UVg7qCp9kBY8p9BRDE?&~qT9<~beRCo#w-Ox-T~M)u&YC&<6YJEEX0kPbWG+R6za?V*dPO~{Vlk+@qvCu}` zPhqcXTM&#rs4{Y>I6UNG5&RT$lLGsC$V|uNwOmH3480FyWBorRQq{0=aQQ`nfAdgi z^kQZ_i#R>ebNVsMq=4ZA1LmO&ZbMzi{hJv!nKy$01*1hf+q8Pkb-H*&{r8Fd)n9vxOJdC@bqOPO}XzOjDfBnd(j)9T$6TilE>AB)A7VROIJ~K`KL9A53qoe;qeI ztLQ43X;06r%GkM$C*mLRqD}iH&eZ-~MAc_uLNKQ>roWup4OO&JSx>BcyPagSYES4y z`7lSW;+T3ZB8C!?4oQRai-EUNEO6B2hJp#0Ww2RY`s1b>vpJ){Hf!}2x|1$p;F``Q zJ;qp?hT9kfy3oakN8|XQ1Q63TCr?{V}pF4 z^RVfRJ(K^^-?>?Ayax2^v|)P}wqcKqtc0S%jI{f%40MM-Hm9#z${6Y<|b-r6lmP4^lAPXzd;I49kn>WU1}O>;A!5fc&i~;j-G_l zValvB7DhP@vo7Z0i!)W8LZKBzPAaUNh-|Usm=e~Y#TAMOP!w24kVY6CZ>nISfrbeN z5wUoSw{q+3GdKuqLzjgpX{$oF#+bm2@7YAWYV`R0?sPc*$Gnj2(ph&31!|&;o22BigW8D9@?Yw@<_v~Q zKC!wFrzsW-Cp)5lrPkhhS>-)X!O+~88jC+q`FHvvB+8uc;27~L1MB(;`PgbwjBzvW z$0J0n`JZW&HKr zXnt62>Yr0seDWQMTiQam1uPFzh(V4M7NY6Zocx&n9}h+Ey^O}Fz{;!4B5t*{B{qP$ zi#<%BkwL)_GP29}nt!kSI=*cEmROVL^fjR2%jbDxt@F6qS2(^3^~YE{Sbj|aC75m9X7e?dv9(2ql;tWqKTpwa zYYTU?WnA-yIo7)eO04;MCd7KXb+@hxh%N-PIL!Phl@OU=fQ7d99V}F}hqw9!TYe%R zzFFF4D+b%DiY4z~k5F?u<*TjXv|0v0y}_tP36F5iks%Yq7`bk%J|U zL$$Yhq(zY_MH3@B>hn@ShOhblAoVYs46J#+^(TR9Qn;cj`uFmpl|Ta|@Yx?NC2>&W z(_~{51wMR0&$iJ*tl)dX`Ra?N64+*NXpdpmYvWG$1T2X=N0RiSC;X=z5^%qeY}xz& z#u+W0FUjRecwAh<-B*H_;*rL-_`rMCF`8=5L^ldMlj$HI|`&8mw66f7h)3t7-*l z4IZR^y(016`v{W}PP_G)V0Dq~FlNH>DIR3jf&?yhcR4dHo{mcs6?W2-jpl`@uLWjV zV3}B7$6G=(X!?5(Xg0SjgUc)qpZ(&iCOrw11SCr-B>ZeDRwo3r*MJOoa>(7{3kvU0 zOX_Zn)E}y3Ho6ZR2$rst7tRp;$H+^la6F=10`gEZT$q4+60T)AWU~n*`$}tdr!E!` z{OUOf9sIIXtT$r}&T0`OStCo!U%-m@Cb%dzD`iYkk2ikSiQYX`eZ@rp#&Pf+;(-jJ z<|?W?93;Qw#9BQ@$90tmMtq)Jbwi!4 zsj;v(G6i`R74Yva%w8s(UmUdJH1=ZsG~KY-yXyIG_dA^BUT+ZJ8#xgABRTKM&0ue=7-&Dj#4np6P8`O73)Oq)xvloel*j@O z-&l_9KI=MbM(k_m@5f@dUZ?B!!zjcptIA!5`c!FnJnQ{R*&-|ZH-{`gZ#9}nws_si z7j>}V4}gAp1Ff`F)cRaO!;HwS=&!i*2i<&E-KzPm*|xv<^!M@9BE)rDT=fXd6QzMU zoz-uHMv|ZZyZk*CMX}I|kj|5jA+7+EWCPz^p0Yx{IgAQRgBq#ziH$XRl6r3;9$in* zP@(68sBRhq-rSaYf(9h7A!Wxnc?uLcIFH{q87;Np<(=pLdo_s7kJI2ZIh(abV z?OfLcEq8vRBATM{cYui#bFU07v-{sFkUrtRw$A#U6>DV%&vxw4BMQl^ojtN|J*J}9 zzfud)zAf5zWY6G(+zzO-T@&To&iGaL8?DTG)v_Hcq_2e8Ph(7dOqGfEVt8s7y&}L~ zlsc6hX5T%Vdsx?_@~<2%vhn4&)?&TGpvE*M^}s{^GgR&H4?46xlZH- zV%WG-w1|JqC~~#LzBpS+WM2;HYY$-n^b^gtc)(^7hqnqUKRJR87j!SX@Csl4!UHs8 zXY48NB5Ybja$NH*1L6;~h)J{$5dCSAi6lynw)ygsZz|~MQQ)Z9=|L?|V-I(+=5X^Y3}Xdk{qn7~ z32dd~ORygBhgChY5Wd1}bjlEiom?4#m)L;?qlgw*H{TzIC>7=4a-jd?6^{yFj45%t zuLQ$B;9qHbxbbOjDbiGCLO1hd#y<1KiArWos!m#dVELfb`232bJakViJM8i)*%R;3 zo(CP2rgLAGf;513u!)?Bxh`yig43RvM1y?gCQZxfjPe6k1YK-?qIvmoOLojo4j3XC z7VN+0Vf_Y7YY;vNFR|cG1hYX1))ge0ER7^Bec;;gh~3)GT9uA_Qu zG82OaJOqFCx^YEXT+=PUP6smR)DW>Sa9?Ene-;4$1uW>$*n_%;MV2Y6-8Nk@c@N}3 zR1kyiH!COoK7c(4XX)V1FU?npA00)8&UAH{O%L)+?2MS343aHhkHtFCKy;Vp87tl1 z(bJ2bDE4a8g9I1^HL!9;*h4rXdL^zr8aFj{F2g{gigKmc6U)TKt33?J|~s$l8K&yh%lm=ejmvXUevtUJpas7YQUGeW~K#{Is&BXH(Pc*o(( z@FuO7TymUX(7u_qwk~w(0baD_F&k71rNi78yG2dcm8eD6qfHTi>l6j!h}8MQBd-6X zWkv@1tVH}@szzlGboibfd+(5svECIP?05lXZ+J)+gOdh##D~A(?_;q%ix-lXE5?P5 zU_sIRWsrl7R@sLq4GUrs$`n*#18#N+bE^T|vFel8MttmCV-a}8yqKXx5 z)}-`BXQtw==s>e`Gg@-;o%0>3j2d;Zr4W@XMJ2wJ6%Z8^QLLQJjrub%xE8%NBh!<#7c2LP zo%f(f8BOgf1s^D_{&_7tI48N}bm>}bFfxZ&a^!Q^^zqgYD|ek~aUEQoW&#?>B6lMR zR&VXWHWTXt#ui|$cVsy@BW8iWQ~QX;CE}gMFFz}_lcOm5^$1o+yLWTwYY4R6(=VA3 zA1~+0?@Vos%;k*=yR}GvlYrl+F6e4#g^C|BQe*m~ByEckY)$g)JU`+~bb->!!zv`H zN2^x!-A_au($N#z#*Kd(qm?ec{t>PK zy?;!vUE(5$>a4Q7g*EuXhAk)8qe%Kcn$9|^>BoEHbjLQj$LMYtAvr<>9GxN!(y1Ud zawA0e5E3I51O#d69*U%(BBg}DL_tdF_`Us|^Zkn>=Qv@<-S@rEeLc^O2KJ5;ou0gBchaHY$LDzmRpHgLL^KHld8n?-a2XeD5mgb!s=2}J$zsGgn5zYpjW^9c zl;8y{_uzW2se6cjDl1~bt!p6DE3U^|k%qbR$rp;^ zuG>{RI9oD^Un*{aCKUl3KxaRv9c5+I@dj>~7?+J|u78#$M)S7qxw>xg2HUqx=Aw=RE}7e-rr#HLU;1*mm+Qt3^A z{KZkW%DEDbL*sPRI12Ry)>{|p@4i~bm5by)8?`SY_r!$^`*IEST1c|^^8z*=wFCT zLd3Wcd!!iRMZrhH^&B4T0u+9b*en&Pg$Ob8ogLIE$sWzcaKgL;gB&$)KX6wZi5KRqJK*fz8^BP68Hrh&~GDsBZl zXU3d{5MZQeS(N{zZSPC%&VNE*mJl+ZeFHMjxKYQK*VIq(8{O!=viCRg&{nF~6 zAoof}gC1kkMC80qm0M$T_Ve}^d|m@o;CbPpB?XuDXRR}!fZdaDa((~PPT2k)dfje_v&dliufxwT%RqQ=JdI**!dmm9KI3=_?T!NbeSWY zw-|HkZjtK#x~sLl_*mHX3x&Wh_A*;-eY%`%jalIOs?G~D zl7SgvTGunwnbCiU7vxklDSAkr2{|W z%%dIHMo9<7LId>(Z-9T^zz2`8H=9B*#6-*$6+8eY95qhN-o=>m?C;sNfV+Fu1w_=* zOfzea=bjZ?YR(gbf|NZdVk6UZv50)R0P|pXQb+sA=~Njim4wl6&b_E|Ara%K*)&58 z^Og>>u@+RMU-FyW!g4!%IO|FrJLFd?5i-=go7pj)fEKp}J{5#58@{20`87g)m5 zwZT`ce&VKSKd<8-{ZaIE911R3D4t$1_gtO@bdp_eIM;U3Y2!Zf%vz?%NAr@gQF6-e|J$iT zo*T9qOit#c00P;sd6bKpFxC4lanF)^8fYODK-Zo>WklpCrvf{Ut%2?DhPd0NU9%b@ z#|a&U7v&<3U>H*b` z));u^K;+LQ7E)p?M}tH3r0#XHk>K-!{D8+c5=dBMN2JfES@R>(yX>*<2ZlMDTyHHH zj&3>hrwT6}Svv>zQOVv3F{nFFcoDC>I3@vaGtoeD@-%|<2h<_SU4dy$U@}p zr*r9yFCD?uM+naP$sqUW5<}ri7@_WiM|$}NY^fh_yXuC+-4oCqrJE1&FI0+*Yr{Mo z2~4C=r-3GJFp~+9CAk`gm;1|93}AVai@%&WgmyX;dsQA8OZM$RGaAN4VA*fq;t}Ez z*{oW0mhx`|J^+7<{12zrR!t{fjnndItYo8PIP>f%l<_z-A)||6qq>p|)uS4I2PWoZ zA3)~mCw^knB9PlN)`r+oazoP%l6D)1$msl9oK%GjSS=!p&Yu#v%t{e7C?EOW8_O?^ zT-bXNVl2Xj9Md_!#}Gs4>|S7KF{m&`xzQQ7_>Jf~Mlj!NXt={nzYin#S-b_(?fW)p z`Q0Z~O~sh{8Z}~y4daciXzMxQUMbVRa_(B0tt zkfqZBA%nUOE<#E)PLO-5ChDV6nA!2GH2 zbx{V{VXX|o-d)fOFBUhh-Q*otmVrkI0t7x>Y2#C<&YVosqYTRVADnw+_)}7~euAkK z>YwL0(ovNe;;93mtX8m4W!z8PVd%}gV~B`Pc6j1tE?5WxE;rxF2UORC3Ocay-|}a$ zndSay-FEfpmR_nB?;!(C3FLTi^D19M)GkDSf4o% zZs7p(n;r&#omvKNBu=8p4LGICDkh8&`36bi5b5=paJ%B8i_p77I#OkDu}_%R#nmLp?RYCjeop9n2%VE!^eB)|)!UNM5wk&EMrYSKABsWR=C-8sUhO+0XC@3n zX+^;T2pSm-s|QG?4qB0y%j!%uf-w{M_B1sL@f!IeMBVOrh=aR;H(P4>m2|nG9T3r@ zP)|ZDv|wnPA}=c^^L~y*%*#1)%m_P(rw|;|^B`k=IWwzv>nW)e38m-flDbJ*u^_8y z6Kp;)o=}9*G-*_hK?ska1MVt?Yws!>Yw8Q4F|Av-4>8XwiB4;&mcUx*_ z>%JjNx=%CAr;%?6I3GZ5_BRpwy%Gw0LJDkQN`cGf7MG;U7ti8QBAk6nz~g3a`r<3d z^rATEh6aGEa~G&#*Kk^4qelVnQxQ6G1_DA5)v)+YpA$e(5!xp7?1fD(V23taXB#4bl2}um=3Te0>|U`nO4MJ0~l+1Sp_w7$?O1c>8xcN zvI}VI8q@{qW_?HyFFwC3bKbTqSK-h9Q3%v9`$tq!|Eg5fD#%0N+@a>x2Hwdjtfhk8Z9th6b)8P6LjkX*Pf5)^|E(6M_~P11$EDw%8HT91L)^ z?m46>JiAc_@8|#DPk;mSe?Vqh7k^Q&U0|>;?dc=O7~mg=^~)(1hQe%%MefK10P7AY zV#4(eei`WSdcVtW^c|}+_8-fL$L>;BFNbg&o(N}lL_HIAYI@dyvBJxGhvc!P`1ZGR z)#i^xDF3Du&I8oHWV&rTHPDLkJ0@}{!2s7VK*C{cn#&PfmQ z3CAOi=_3Y>-g+HeKZ0x2gIwR{Z>Lo<9xseC8r|an%9_VT!`nNikI8bCtat3KbQMP zg;*+}=06`<9=M{_7zgS|7#)_Qg@Rs(3_-I{KiNL?^P5DPEWos>f&XL%_q z-wA^OSoP?oC5ce#s+skrJUh2Or z=l?T|JK6xlSJX-IBNb-1z=){STCEzI^xDJ!-hlz(_xb@1_MHq#taBxIR4OXdF1u83 zzq4BXvSsUBo?#7s+~x&MRt!f+2ESmeRR>w1p)vD2r3GaPT@4QQD`khv$WKENlxPSuz4hN zA0q-0E z?<+A`pqJpu$!~}1`GQy0w5N#k@SLNv6@L|>rQV%==)-72_ijsnm+g`xWEWm7XYWBm>Ob2; zyRa)bNxWjDlj`IjXg7g`8Dcsb5(ss(a)l2;BRRiW&d?*|NwY{IK%AkMv0NW~II1DO z>T;Y#SE*9B9q-UA%d;I1*cJ|Z_6?N8RYjpLCdMxbk`%t0HU=MzE1R_GP$74w7&_P_cQ6UnqUq@`Gidzk`Y1#kz(c}N1Pf;qSwC{G{ zIkzZgUWvCEXf%&y05jPLFBv_$>d&nj2J(nJ7&+R_wM08oPRx5PNxUQ#k=JdIne~dH zVUnVHG!EGNg#0xVF$7xM3eGBnoG~0qKvgDjSPMp+{+d_U1yjSIL&cwg9_VCXl;a-4 z;xfnX^l*SLx}BXvw({`ZU_z?BWSr=UmSwZ{7{Yc4Vil3nJfkf7x#!i6!mi}|W8U!uVV{Q?wJm7VK*5iih-pPnGVsg)!YAJ$1*htvn*&nYA{ zx9?%_)RckD|E*341(upsN-SUdn#0v&X{Mg?BpmHB1ojz=B&~*+QNIn{f5((?_xY+? z%J$s%m!@Ro!xg|eT~S=iJDG#Cccy{dGH{V{7n``zcg}=>b-p!ySE}ska94#VcX_f$ zJ53GmXI>^n1LPpI!gxfUhonBp$^^AL{1B7hs)=Zp6=MDI9XP6~rFT?N86(uL;UgeM zc#Bvj4iA~rl|v1({)mX@6c%JWmAhjiYqES5ZD#CMOBZyNS3L8r(3bT}LyZ&WQ!>fS zJ==21V+WPb&IrPjcQizj$%D2C_z#6cb@gtLdqF(KgmPx{pomI~$iA@9pKfi$f-mGL!3XP_}x&TH_P4xj{1_FRJX7h8ZMZ za9RGpGU=0M!IN5%%iQS^U_Q4cUW4?_8$b>WTd^P}7QRtUWq1TWRMeTu_?UUM*qzz` zi%)pvuX4_wGX3}oR^Mqpd7u$!?Sk_$wkeTI<=z44Dx*5Ut;KYa+g6}65-e^jqL2Ea z3bn&VldF`SYN~F8V7!J9V|Ud)5uTw{p?gTx4X)p)ofb>Omqa2=-Y3%<8QqFFI2!)~Z9qf;|9ak825E~KBy+bH4U!N^S zNK*Uvfn(se4ivPBCHQGJq{+G(vf@Uis~#|Wi%U@QyWeC$47!48Y5w<}$RnnwKm(|P zuORnOi%69onlhIx_oRbM{>H9 zeIRBn;cl`i(%<>1E0yn+kSf2ohV6U}q!f+LPFSRx)nL4F^tAb>-||&%GDR3Qy2>q5 zfuhPLK2@bMVu{5Y}4s;i;P zU@>&cF8uWlPC4-LmPN+;2wR{eP>#$+3j=2!YH(TPjEHHq!?LE%hr5awS{2Q$Tr`Mu z&BTHuTYP;L2VilywQ2&)6(t$?du_Tqe+KO|<%C{3pEzK@6t+%GNuYsdyjT`Rc>8cW z3yAR@t*3uPqSo?|ae#Gr@f)xuwcfA%#jE(tj|Y(V7lg&Tv*&8$G=VQ9y#+M*qsca;U{av3X~l(yt`Umro)t9 z)t416!M|$-{wDcUYn)lHMMxwdO|ymw+k}1XX0Vt}N9W`gST$tj;j2gW0o|o;>U9bf zLDRB~!w{sNJfGi6mm7R7RFVIb)pAV7_ATUN3xm*;2v$ogPurm(^rz$?Qkq*Qw?7!# zg+G^b7d0Un=nSX^^GvL>4GodEJj4Lo?H3j_x?xNel+?y)vaxSlC8fe3)quX5Rl|(G zU7SyXH`T7AZaqO^s+i6X;!$V~M@DZPk5v4TTFp{cDVUQ+EdP|m5~EgxtR;J1CPv}M zK!0DTka#B|8C%a3H@MmmO@!@79iYCspiqcIjB;%`yEo#dWt%sX?YqITy%bVj&7CqXB@Fs$>BUw>kZ?9oEuuo4xC0*~%wkLdwiXsg0UM(Z?j-7&<( z2$^TIOc6*XlEYk5_HQ|si%3v%X{MrH-d1(Lpx6@{@C9f&FXXBhB`i_|BA3d5wMEVj z)9z$WX-CxEZY1n?n=oLX#@zza1Ap)3?0*olCWNHXhgLT;={&IsuO^NHwyvj6LW~fE z+XrbDUKe#oJkK`KN)|OT^o4zqyFzhhlCIc-emBs)Q8(^XoAF7i&PnV{z!$0wLo*%$ zbZYHtp_qN4l=iojwA!|_aH$Od=Bse+HB0%?lR-7|C2}yLMW0|qDH1Hc9z~DVgo%KR z!`AJe4V?7}2+dR>`JKGP+#{Aq(r94U17r}X$ZE)wvvN}Yxpl1k%lmN%yN^#SI14qK zR)8~JMMs&h4O`v$A>#aH^Rgr+YYdWy9k?#!^_V>lALp}u5^lmyQg$Cv^ zc6Wk=&A4rSvrN>kiFQ-)F(JYaSwGM7Sz_AFGfz{dc4sm{=3X(J)0zrF2S&SkS!Tq^ zCwg_LFV8a@Mw-}xHGvVoDxEZ#<*Ty0~M?YGX z3?@jx3T6NHn*397Aw`-ME5R%DQxg5*9@qq2na#VP-dp5TTpID(8t_M8_HVT7B~}`> zkOWbU0}~2oXMQ>0)(|9c-w}k3-ozPkP*4+f+;Q-YbqloLK}QviNrFXm~y z8qPQ4QcrJkroy33CluWVo}zdO_2?Ko+ibNF$I6R$h5m-nalT}z#pwRdUNzF4ne~mw z704F=*RXDv!>KbgdIC_oiY@F5&1;(c9Wm_P4MRMF-ilHA&zc;SMm);~);RC&GfFeeKtZpGED^=){{{wH`IqJb$O0)5g4jpE{*rr(Y{Qd4+*IFC#@K~lT7DDj7M$pUn`pcMwF}v!=meus` z2V;i0Nuwuo2aR&iWXrrvC`B1+d)U;QX<3ke&d{njZq^$JjL1fT{NTy!`#;4J{Lk z3xXkj=B=Hi!R_+STjj#{X4tW8(iTwD1#Al?|6#A9VR?T4ZYxQOt*YI?!UE0Il+|d& zF3m>oF(Kp58OhjjlnAxeSfxr6@z`-nI$*lcGpQhj{ezGFk3Z7iQ z@=^h}>C}NgDZ^9BOaoht^1DbVNBy`wuo`$hw^avh1)_Ucunf1fb59@ByOnCD9TnZ8 zg7&@NiuC>VWAI9slzF8m@e2#UC^$AacKtWC)x(&(ej@eD$}>L2p#XsLd>;rph3gXN zFu?4XQkcU5KdK}Ku#kmC8|H@B-q+Oee)xKi_+`^H9f0ZpT@)p^B3=B)WvMdfBUFB# zRu8wuMV?kx_9&tAxHSBwgl5+7qBG1JKt^f(D)eDgV%nj+T7;Rl5@1ODbAiZY%OUMN zkFH0@fOAY{lh<1Ku@>UvqOVWr!$Dk-d!&iygEtCFu>j#lgl0$Z>jH1&8@93Gs1ZG^$W(-=qs&raL-N3O%fLt_3h^4TL(k!jAcoQ5 z{`^|YCrBg?vXEH+i=-iRaR2}%++UEjC_7NO-V^YNGU+p{I^3!K%O3yM2mbuF^CND+ zT*g#C5etMK)*9|My z^GJmxr+(DAl0ORaak@lr_XCoH>`rUSizeYnVcK5ti8st1AMJjSf<<^FwjbSWmfVn* zzA7`L;SMI?)gt-!rNndP8J1XRiV@?%7b5tpsYcs@3b8T0pzf-!&xXl~&Ud;1?5H=n zIyk)P#H`x~&O%YGF@;tI@$Q^N#c(gW1dLe_ zD_M7~;^-&LDgIlPVpJk@Chv*xZa*(q--B9v2fWUN8K*@gCGGZECKr$|Sib3L0~Fl! zJ?Q5R?SaOdi@%T3-jREm5^)azeq4F2^{7J2w=5)pulrg9F?z%O!8?+>Kh5stt()R2 z7+yfD!E&KDXU~4UrC%Cz`coCK>^ZxPjM*K~nDd)G4>>bzR(*aLSXmB76al#rUJ1Z6 zg3U<${*xz@J|lf@v_+MRMQk>gZh>~hNjE=lu47jNcCSGHRu5gTS*|yxuN}Hi?*CRJ z1_sU#VX8EDZ@$D5#^OhnzXE(J5T!w_q;T6lM5}GoLVWoXMN&~wd6}IE-N<6y+eXD- z^^?Y#{gt|QMQN{eL*y2UB0Kc7+@5H6Bi$1&mh9&+lcT^S0LcTuMhY0pk<} zO|B^T%kz7UJ2vg8bN9`pftsut8v`+?dh~XM zl#)Q+ja5TDI^baYGhs!I;hza@hxo5Rji!V>w#6!Rx9H~PGxHyJ@~+=bOnP}9S_T9W zb?&)>n&`1)%Stquwg;LH1o* zR0#BBJ}40|@#BOR4M1gUXqAaQH!`+Q#=v z%^r2JX2yo;csWJVsrk^tI>ggX%npKysVplLzxZ@kU>L< z7(wxLTdTC({8vP!dh^p6Hc&?gcW7|6L8Xvm*%8}Cbd3eZu5j~F2b!PPDWba0087^4E4_f%FBJBV+K6TB{GV|IRHR%_oZV8Ft)&c>2_6Tp18 z*_|TRH7GcqVw|#lJyOHD@OPEh_GK z!1V()Bo6{2HKNIryqors&<-0R7! z^|~4!>|4Sn#lK=U^J*wi5VCGE!R78iV+6*XkFK^3mk0j5u`J8K^+!5>*xC8P!%e=7 zMc(yCrh)+LHFxrW%e)qM;x9aqKX)9Z<1PY0Y>Xk)Lu2MpX&y6UW+>ou#8x+13PSYk zCSyvUCLFQ33l&0x9ISzGjnk2PWDI*how7aweW1ZZ5APuVZm|IvV1&(3{TYM571+g1 z@hW6bdJ=)f&X@NGpPwN1upr%=r5Lev10YVt&mlsArvYeR!-AhI!=k3%hB+>4qNLvOJ z$w^aDSr9jTO(-sh?w`5DB<@_%=2s5ZFCuZuwXOhs3N@~bsE3gvN!es%2 zC>WLj1jBErM>~|4SsZTJ|Q?_{z3+iB(W;?8EpQ= z1hudvDgPKOFPv=C#i2f@{M5+`1)#q@UL&u1&(`X^Tr=L1$mf8vb|c=W-YI4!7XlLt zvFTrgi1!-KOql%XdLzQ_mn6}XDe!*PnF{E#n3KZJMqB|x!}KD6W#sRXuJ|n(XjxCj zPtP=GD;j50&O=Wg-JJ-uBB}#qw!aUy2SVB6(V1pu1<(->+pPsRGr|p}*Tht;kF{|G zE!XE?6<2dskbGd80wybu8tuyr&_OqWeo>dq*8-B_WOkX&FNEKyiTfgIXR*NrT#u#Y)63Or|RkT3=S{(`X09`=K-O7k#79ubuMR2uOtNi#5BBpnp-vWYkuoYuWZGG2Yl5GBFa9q5YwLw-_6MTY!~5;(4AW<(T8G?>tYu{3iM@BKzrMeOB~W?N%4|aj zf>>T6V}iS1ES809)Uuqk>%6~K6khm3CjbnSq4zm*_E_?^#-d#&Et+9gVOy%BhStbp zoA7+QBHj0?BxwpnP%6wk?HLe4g6?+rk+a1Xe`k@;&mU=^1=do)P-**43KgQQi4%`c zYiI%9BVg~D!aZ75hbWpnGp<5Lr7h&IXh$9u0lv4KY_Ar0ND{D@D-_L&L)4EfG%DQ* zAJv4}=0AI3v@@Og6kY~|cL~m&h;+<$^?>Q`5wR9qkryZ=1-9??V>i=aR-6=S| z&euOnrDO~M&InY&OuPF81hZ9Usx&W2>L+FSW{@z5!>56DAWH-qehJwfyFVL)T`1VA zzQBVSA(|U}Es*zH6FZYH%zXQaO@tCKpMES~=K^!2Tz+^^Mx1WfaY6`XIj?PrUjfD= zyM>ycj7C*1epqbBPWx@68SKyse=Q9s)(RxkRsp>ER3k72_#LNFy;>GmD*i)WjIcAz zT+ka&89lnF2JxhwexYuZqUSk=YR{tGVQ6#zV1JF%m_Q#72xmM%Am{sDQmDPH!1 z)JK_=lrO`OKZpQlA-^sRoobc~ueUF}#p@zibW~^G>BZb=&<0zqXp_w&5VIfblzC}r z>p$ITiD||NKxLUaDjYF;Y8+_R&SfuVpA&NQyW049C zSt0VyopVcUIo+O_;M5o0$vc8b8<3AmdfRwS>d0Y3T5fh=)WZFUPw&jC1ce2ec|Y-`1zYQD>lN6r{ZS@LHFfRDcSkN%QG75(jR{uWOyLQ(>l%Pj>T`JGmh`9?RDM9ZKd$uedD*ytp+cY(@ z8tQzYV%eolD!y%zQVEQPzR|Z3C0BgLL8l`M{a)UVD+Dw68=I1wv%4`=-S+1Iok8fW z&K_5K{YQ#`VD;(saOuE7%X4H`A7QEz1svD_fTK7N?+wA$uysR_Out<<(1{h5m37(D zxr;LUTM;w`wh*N%+b6mJBgz@zo^pCMkN5SQ8$rvTqMY2#J%O_;s%L-yUB&mRYg=ly2+iCDRQSdMVZj;;Pm3l2J@d!#v7ZjzW% z=ddZgtIFH0C&EA}y!Ay`0f04F{>fs??4RecVXf4`8I)eY2kx~kji^evzqycM5)jZB zj}c;2<8NDU{u0Ui>o51{W3F)^Z(UCD|o%y9FzBc%U2Zg zaiOUG&6Ya$70mpg_!SXjArkmP1+xo*Tv%GUT%m|kX{|{O)ILicKZ&NGCkL?~%K@TT z4u%9=MAp~_U>WGfrijcM2DD|i96D7(=do1jV#cqCqMbqy|%~mE|%xT^7GG} z@o81{3m!pLpE+Ynm&&)(Z#cye`~WujoKnq|+3Uwax3{N^rFIT8kt88R(w#dAM4}h! z)9gX3Fz5_&yK|&g%SGt+e8H{6cUSu5|9q)QWpf6}9m;Md|E|Qb1aD_#>PmUI`p{pq0&xjeV8+!o<%z;aIG3(C{E@Z!} zqcH+^+T@GI5XVuJwRDui|Jbpv$HHw)^>we%KeKP`@7;Va_4dZyJif90NAN4~(D)dR zG{9Ek1EPs9CwKRTG;WGxC8l|<<}?!iqy3j|T@E&!Q__A<)+7a}SENPkgJ{qU`k@El z?C=TE3S(e|!o?9CHW<%{qN1|uE=sC5@;ZYa&i5qe#d9!ju6f?NZ>IS=fN?SPO>2d$ zDFJS|emev_;-~<}dqK18itc{D0(_n`R8v#Tfe)!L9lkFK(v?+LlIn`4ukIeYEf8}}O+$Yv2 z>ZfdlNZ=01&vQ~)Xw!~#m28ZZ0vtmZzlh=e^Qut$BTF&{h3e5@ zhR(mXM8lLiS@6x|lov)h^^lf5Tk>uc6G%a;tY;G z<>U_DVjX)bY>PY*dazAF?@mliwEu(%COk5u4Nfi&nvn&ptWr5-utQ3|eEF%{gFx)j zvq@zdNe+1hzh}U`Z5|Sst0_2I!e2-E4ot)a!qzs&E zr1Dg!n<9$Gxp88XSbsCDit{Jso}Izq(<}pL4+*jOr?{xJUoGzpYfg8-cF$-vPf2po zY0j$fPll#LWlTCqaAK=x@&GL*@wxYq4kgdNRBhGRheWVrtjJsmbuFN@Z(v`KrcKL) z!^vx3;2M12D-L+ooR7Cry=p$5W(D6EIc}<( z#d$gSOs|&uEhHLUG@i@-K6i}Y0)MC*cLbS=u~R;OoOQgzW%x=SVZd*Fbno!h38t*- zc!37>!B_O5$ZGt#`fm8(uu`8%b@wl~%|GFs26AIFC>y(2;Oy1m<*+a*k-;AgEy|#-5 z5ppf{^%3`OMKN4NN-DU#?|N+0*U1JTUzcyxZhCJ{=-2vhU5cE}DGgLc21Q&4+^jxb zjfI~VOqlnpyvRFopG#9Vq=!Mm}mN?r*JghU}=O5mFAo+fo`qrx*@g!nrVm1<($SFnRd zVXrl5Q=3BD?XfkwQBUO*#mxNsA4wM!)(bA56R~@^GOx>uI{;ZK@@hOXziiqqxIEbY z3DvF72*6CKw$(Gh`0dJ9IML`yTF}63nFcowh!6S1|pO1e#!vwQh zMBzo@LX`Z+mF-Gj{{8|I4AXiXHa}VBrOh`S(-M1618J*5NiKY73VUCcHj(C@A(e*q4#M3<}9&c=kj9_1qkSy-WxZ~vfT^8gwvIm zx5CZO#w2<}H;iEX9^0(f}sZhWY6N6Bs(*q_sJqv>+@oi2o$=unWQ`KalY4rngg{ilF~o@oFLB zEiL%nWpaJNaf=I3u-swRoPd|xnh$W!e+dkSb30MtG9yca;wOG{%4)h8)G$8#w804h z*1YKZ`ZgXeiSELOpDXO5K%}0q)MA-Mh-CoMT zD%Vvt8r0Ebs~O+7(wV`v1UAbmND37zYo#+m*4tJk1_S_gxrK8~O&O31S|u*G zsy$J~c}T#)OFtS1O<00Pkd?FK7&P@V$)1M^@S@QN%FzuAF~&BY%1`b4bT0ayC8icQ zeIJi`d)}$sCWt3N2xjWr#!X9H;H&3aaw}dWgiqf(J`5rGyWZ71-%_0vH_=*KT-jQwRb0%ea6vZOV4yDcK5%Q^L7|)ig3cF(4e15 zIfka!;`Er&`YRIJ_p&{p50+kYdF!Ej6#%P{IYW@yFOT_w-m61g>Y{YN^fsQnm|e!7 zI7}yLnpgMHbc7nuy9QhzHI^0~o_kVVL4Xin^b2h_X3vt8Q4O6gH2#M3m*1u#;W|n7qsjlM?=i>ogfJ)dE)9Wjqw+h{h5__R#iajTz{fv#_`1y2^%?0LEjj=d;Y;!R7n^6(Gw;4OrL zr@6z|2`-QB##EK9K8o2_UvBaha+{h$&lXbC4cJ(Hp)Lraa=IPEb%~dXt(+>2`I|@# z^O%xI-04iB67*2BAYr3t(mr+|hS~{!wV{-(lE@5{c6ZJqL3=$i(E&7%GG zwTOsD5}CT8n^`Q-qnT*05a9aiJ2$=cPx@lcK){c!S3p${qEgSnl5+d0<$O782-m9c zSvts=$*rL_ImM@zmvYUS-Q@phI`3$zAODXV*SO}r*B){2b#1b;N5-WalD!kx-n)oo zdtX#k_LjZ(D2iO0Yh;roQPMzGQNQ=+ch2{(dpYMi_mAs!U*q|FJjZMY)+dAnv&i+l zd>!t>p1?2_bt#mH99fxkN?l5fiX-~H^D+DKR48f>}t zR$4P3G1#GoNZr{R9{fDAZ~zN#oawE)#Ad|#(-(YcVVx-JwRK{J$qrI1ZHeO1EL)2j zsFBdUfe>PE^C-uY8 zKwUgR_0bnY;-yR9*RZX`U(0Y`s#g9YBLj8A&`IBsc`9PeM*apmpa zH|;I}7WgADo-i@HH>T_2&SWQd8w485CV;bO(yY3QYd?MbOH&= zRQR}fMS7PysV6%@-%3QW`L3}zLR2+9PTLe#b5Tq(Zd=a3bZ1*@XT8R_r)J#Z@~y!| ztfqYzdLB@>a+%R*{>I4D8k=MyVdw&=$$O7GRhUxb%rG@z(g5%* zT`9GGq7jAd8QOkfiTsNKId}htkV?53zCWkw;BmB;oM2w268miNKDR?HI!?OEr!`Dp zwA|%D4mT1#L|dpjW-9T=q$B7E*)PX*%KGc$hGgH~Yue4kQ95-p6`DZJI310B_jYW)8*VbRn~0(7778(pW)*+pZ~hgKNm4?>(i&R`qg(if$ncYc5cdsI;HFLJ)7Fe zY;p}(SH>1LavnB(DnxRMGcBNJ>`kCJbFa`wGye}5_FQ_~GN$xfuc64flM(O6$!avP zuoFA<`!*x|22X2xdQ~4%8_R@ft@KY2W!{y|@PQ=SycNXd6Oo&k3Vkr(#l^WIw4y`G zy|tH;6Afxnz{C=S>gC&a``)}6*g*#0(TLps@a`w+&sEEv#n-{f9@NUe0MmFo_~kkiLZz*UJov*2o!!xg{`mh>D3LQ-rEC77UUBNv6=u z#%Cg`!3ZhqZZ2@tFEyz{+jkSHjIn@7KROl*Nroze1u0AWO-m5YW?#)PY)d!0E9iBL zg8TD!WqLV8tEHvpwmy`$HSj1NNJPsx-;gi+kOKi|oWT8+xk$y&7B)!IwuaL?Egbmo zca(&5dWR}EZ0pBb-6^d$O{IY|Cg9%;38cM<$*8aD!Nw9GOx~%fMB9Q45AoXsSKmij zPfrjwSH8%<=cR_9 zvC10&)_`<+MHQD_o?VC^db!BJ_UKjHL-GNINWPL1N=%2WAgCx&8tg)7N_0l+y!~#! zjw%wrx=qr*l44EE@O^J?a`NRP)k8!*EZt|a$|dp@CGop60`vWQh;80Uh_nT|KrXb@ zRA`pFvOQ;`MA##BW@}={6_Nm9zx`!s$W1}Wd~F!D>Dh@kS85Kwcy`&o z8r+5FG3S$;1X}74Dcy5|_89;%b0NN07$^M0o7))EykN;{#C;qCI{&f1!K-aRv5EziUX%20n{2Qk zUOXw88oPxIRHKrpSq`Vgw%(?ALtTO0dK)qtf!Zg@5 zQ^AiP^DSoE7MAB5p0_H#JdEyQo%ep9)*)Yez-EeK^1_YyPG$Y%>&LF#eiYj!O}42P zJFp%_&1#YpCP;>6rGhJf8cYyKhRKz4Syt7zY1loA>(jNmvzazw#mj|P*g?77<#V!h zi;ru3j1s{*o__j@xbj~KT67&vresQ#{{>`x(35Q5ma2!aogJ=mSDMSvUhOg+Gv}%4 zC1;vcukS#!wlaJYvrFQ{28*5;0wYC7F`V5Lco#CFG))o+n=n(kHi_9Tr%W3} z{m31U>GFn9YB0flYp}yyTEnP6X|vOAo_`P0Ixxct84P^00nwjLc@q0go@~Yf+b6H7 zAVJ0>{YBO0snsKlTtD2^J{t2Qrd{~`^iQb02)C<3D`N=b=t3^8E#e_zFYBc!Rlci26IVsnnyqX)XfsWCE zBtHf1t!mCZE|Y6aX8YZBHi;DJIy#U9uGVikz?HX!YGhY0I{z6P|MY%vC=?mu1a+At zB^?_$@1EcOcd_%6<|c3Sgfi9inrbQO-?^QC|22**t?hh@u(K-WZ69TZoM3trlp=lwzh4 z!E~S_X*)mHtb&z5adLfpOiMzFs=0^tN!GXM|C*;SVDsesDQd*t2Kv;}vcD`NLpt1* z%BA5Mnap9cKF;AjnNVF#e5ys}f?F(*O~8c{xV+1LOA~6D7tOT}R=jYe`b3u&h1M3f z^^JUO7+kB=`oXlTw?ZpR!3mSj?8j@YSi{J3V9el3UjB`)k!utK0!Rfu1)s_G=5Lc; z^>06k-&~YVv!>k4vHhcFN3+?@4Vx;RJX1Co(J+%*ydjS)taT-u5xG?|Z_xyD2{P&e zA`TaXpmb;Y(dlzQO-MNu8$}8DGOo@_^nJZ zu>8e5P==H6)X58G0Gs+r2QXcIm?3+~X(?~{6~kgdK}*S5cs#+y-xAjRmI;0-Zb}ru z)eIO>!@txS=;*zO`VbFx4aoE#w-2I$kQ=c5Pfv|>OW81J&B$^)yWErJi`sWc2W6+x zn`+e-fDrbVS73u$^&tW(WXT;tk!(@fR-eO~VsYv-Zv&g((c*nUyEzg~O=zc_J+@cf zNF*FlW9v=~qL)5rxr#GtbSrGym}xpFp2?WW#Aj|7TcUH5i4{O=cei|e#0!r3PvX9) zdRw1|Bb#huj)8{eol2d$5>0`CmM#n0!S#$VV3bxR%O)^8yEa{`g?c~C-DtTpWYBWa z4K=Va1i-CYEJ5vNbIvF6po~%q!o@vbMUpL4D)}9t89QK9#DabigrEsI2Gap^6?Xh0DuD zVqS-8k~P#|q#hemh0p6Epg>gr{@<@_W0AKghZd>f+VKTx z@!~CA>Om64PQxCWv8gj@haA}0)I|#Ju%G80>1mNgUm={dOhEwWbVQ??eAe&j%8bNE zJp-J5z9TgF0HnqUPlqOPzlwR79{!Q>{-c4IyrhI?iD?~;v%4Qe%n4x}wb{omES$L; z)2_i48FpFD(Ym4UBMVCWu4JU~BJZ_J44bay9$)YbO(i_v8>WCOukjqkKGN#^v_!?h zXk6tp1)*7PHBT%xCk#!EhoLsZSVQUJZ5&JF#rN+rBCcWqr9wPsZF}C-15ns~iz(`c z`7EBj&G5dX_%tpIpzHJGXTs)tE#*`?QiCVPb6RoJvk}U0Y1drpSTnwfw|&z-u9kh% z)zWS3wMcCK8;J=scN|j5l{$7HXBFvfsR359M9Iljl(*$8dpJ1J-RY1!94#~>vuQp2 zV810!NB4Kv>UCnqr^z&VRsL;14an=$soOOX5q5u2!A9f~;(q3X;#dEi6b=0AGsLlMqw*U%QpMiY(`SRHoG>pn_$J1czoO0M>9;tq*Q!r_+XmCYg(ZRsb{{E z)-Pnq=Lxbr%|vo0QGOXlHUbMr#z?07nwbJoy!q&Qg+vE@8UWY8?Ry-AJ!3xN45#z zU7wEAZ@OHZ>18W9{6;p2mJ#P+j$5*h%OS{5tlQV3&{~6)-IHAPGdJgvST*!cj)2ci z&1Py41^wVVkO)knv5_xgw20i)%-}h)3gIgTlHk6}fu_UV|=hzI^CVfXHIDF0|>tWHG2xD33)U zng`U@b^G%`X7-#nem>#B+;bHgq9B0Lc2mEUR}1Ve8!WkJ)(3=^LgAj}$8HuQZ~E|d zuOlDr2oFtM@2S(;Y>t95sB&Vr7U|H(ss@%S_l<}S^)y#ihKyd9u*M;PC8{rH9%fv~Ct(Mwz>GP9PH_-d_2`*AXh-Bj z7>4XMHaqDLE)GvOa4m@Gw1zK`>nf>1yL?BO5>VQ4AJSACQ|iX{K}!>v+-e#}S?X_- zz|T*Al(Qz0Q^TQUGrLbC>@rJkT4CoVfisdemT}nwpF97p4duOu8lOvRtS6BpA5IOoovpWM z|BN&2dHo}dfA!$rwQBt|t*_Dct(Csy^2~lQbu^0qES~|7&}gH&p zC}Z2Kx9&bB$F4NktzDhQ#O<6reYlQKKIVdM0@$+91H)?ViNb`36KX6omQC8APnOQ{ z?}EV3!`mL#ONs~XY3h|^6(sT4#>k78Oa{TnItf1s`ImkcbiTLRS*@AU2Ai+!vo$R; zGLIiGh3Y3O4T7 z{A|)@8Fa;~1)4xH5|wfp8Uzu42z7kea_X!n%KE{ zi?kOn5dSr2bMhH!EfsXLmR4E^xnRp?2EFe6Nkg<#pR^)|8>x@qTJs7mXlqz$uh_EG zId~C=T(BDNAs*3`tLz6V6TW)fuAc{Zm}0`ti(mGKQ&Oga&zHg=Pxv~m^ZBnb5O}=G zCc~fm1skm!Q(otR@-D2TSea|!8G%X|cQ65`l2svhDNKEh2Bl_b6I~E(+wy^ELXLDBwf%eNg>qKm^KByg1^tDrB4~q@>)DS z41~gOe;*3U^t*E(aUzVtY8GS}%-Us8~WT`f5-_5R^*FX_BU!+)`?p-U!m5b4E z;?(+V3&d}JIiz!Q7pe^&w1E)ZwakmC0)JisblkOgU(s&jURw$-pfMOheEs|ABp+Hn zg;V$y>TGVAV#%o+8)X#OqU^t9J z8+k9btEJ@7L51EsU}W6t-t+7n&iOL}Q%W#admse`164CpiJZ99jc`_{5-Pr9ls#tf z<0sTvn%R0^m}M6ldLppt;P{66%4YAbJp?2+s%d zO!mCoE;|rf8pbpw%(rnXxSqqHd(v~{kTmoD_;UpHD-9vZvBt+}bC-zK9t|<4&4+MC zO+Scww1KgXPEy7crC$IWDZn_6X3XxRrK@T6^fJJ|m%zlpEB3O5e0-!~qLuk-!1rQi zt*vNYo;4n3<8vgti&S)2>+@H9MfSt7OI^JC)Jckza9_=tOq(i+A(ONH+mBl=kUTFc zrXGt6GPa|78@;$s$l@Vm*G5--B7~?l+p6g%-9c6`{qh5a)2U~slH6nk+=cVQP_J?+ z(eUnqob`{~5sgmgVFIVk{_T#~<@}4&Lp3JH&msY5x3r1O&OXR#de)U!8d2M?sQ^y; z?}L;vicoU@?T^{zk`0;e$Li9XS??b&GwX-pp2~x-czoUgUKkRo)y_wL`AUeJ#J;I! z#(fQ<)+YKeAtsx_z`_@9P(B!b z=T(P-T@YND6j;NO^y+|-it54n+Xrz{4G-8_+;;}n7otM{zJ2hA`SgPE4>H&&=J|5> z_zAZQNinGHLUZ?)$Y zR8dDH(5Ild*pgU4L*4v}A>E*^U|L5LWR@dCdv+6#bC4Lf;srCYkGBT}(+q2Lso|p? zdsJ|iK-0{zbXc=_R)chtNM@GSn}Z;j_!!DbH^)>&NbOt=qkcePXn#iMqGm}BZv8c9 zcPYJ0EiE+1YUpscZ&9&WT4`_B=;Q2eLGhF1ID0d4ye}1|zCJ#_oh_}WLc8#jrS@hn z9auFX%?${wpCD!fQ(yaJ@oO#8sowr+P%YB)QvLiv&T#GWhJ1m4l^gqK9i#%U`7!|Y zL9l760ZlWro1pTM+2mn%S2Oi(E6PzG?>0m_m{qT_X%>3#Uz??%kcP>)Ie~#&^T-ff>+u1dhPylZbalqP&k2d!3 z)xg1;gaskthEbker)=KOG-jIQ3T{x{DXL@gZMAK%JC&J2_r>MG)*vFMPy*I=fIV4jNWndQvy)_KEz=YF9-%@O9 zUza+07-iWN`<7L+2^_n|u%L^mQ$aDIO=TwiDJR7YYvu`5dbWGa*ag-sh(@6b+M9Y` zC_DoyxSJE^0IPPf=8Kvhq2eV{g(n$S=W#r6q#lSYrE&3*EiPGT4_jGr!Hf9j$#C{h{|8#*7ufJY@U!yVuNv+gIk|3J-`!Pyivw~L|Pp-H}B1vbT z@|ia@$ToY5*jgZgXe5ay5XK88cNl9E*J0j1OrW69V@nW>tnEwJ!I}yL0b!zh=0Xn1 zrF1f5w)xM0ub0yT;~weX8J#X~y5>j0UKPhDlmPJn9877Ol}6C8tGEI6I_y;=bA-#$ zobnr}h|CR;QGP9kK4w5`CkjKi`J1+e`I@}+uUMdwX8^V7?Tl>D)nY5j?gs3`tIP$R zZvEV#z(B-(SVA10&ig8reLzjgV&>O?n@rU^Vc${J&|cQCI7*q~yrTLJ6ix}r1`I$D zG`}L4TP`NGiTk7^C_HJu9qbjS9UiYZ<=@CS)k=KL?|*&URhU=e75hx|Oq=lP-q^2K zmn}-D&?+lL=V+aq(VP_SnNGC4gCYvvtpl070Ti0C(P|uXkela6mj%(i3L}naQUGwV zHoJ!DGQBg0wEjq=CP1C~HEb7~$ELCn{5rS_crX;A;I(#`|BnQd@mL;?0R)B$AH1$I zv_0mR>cqQm>koG6+!%LQ2H2OtXt|*$8P%uV=j&~1)rP-flN`jb^w@kg9d`k@sb|Z; zvRpyqsP@;xt(>zoWdrtFW4=;)Arc8ZxWxlJw?9X}Ki^iQV|X z#BKA@JuuGPDparFVn%U2TJ$i*X|@L)b}{vuk&Nv9y+ie`iw`?sxyv;p-9a~Gg#L=igLg2pppV{D&BODao51s#V>eh%LQZPN=FZbnHs zR3oziv-|AC5;+HI6wu|7`)iPgG;>=Bp#lVzQjE*C{Z6qLX}EhO=krne~=|7PIlj?#YV8w zTgFyl_d>O?;u2+t2G%2Z*7_?B&yHQANUM2ymt#Cix`A3MUfT=;g#HVc*~1Y_FfiVC zvZ2>A@H?WeU4Au#Z!={AJ&7u< z)SnU7+Pu!cl7F96M|`RQW&J1$>y>4_NmHJ17D7h!EQ(KZ2W6%vw`ee$Y8==!&bBSV z#HKK+9edgmJa)BcKEA-xodt=&?h(c)veu==Sf8u#n8XZfsnK_9IrFQ_5$6bS3Ag?e zwCiTVIP%_a&HUF4n=Q;(5e76YJqIWeaT7pmZh;(P+}wzvON5{2qntb-I#8MpFY<=W z3DQ;&4&z{&doj`3COW1HFj~&TVvcJ;sB6}kvjE(eVAU>3VDV_$?qWx3# zn`GU{k!1ik;}_Fs&Bbev%cl+ry@&S{-Ctvq}Ol^<>qi~}* z1aW#MJqf!3gZobMgQiPzT}Fhf_~A2}!;KD_19Od1Ha-wTh`&Y36=h4Zkvn+yTiRQ% z&{RN$>|3UwzR8`MbO7FD`vr`TktPu)qqk98B-H z_4su)>Hgv?YEUP#VQ|y3Z|d*G4jI|c=luUzzel=s>Xe+0-@f2x-@0V74A=yRUdB_4 z+g&fRqW!|m)`j{&p$ztnp9(k74LOI&NN)$3Z6S6oy5+1L4jnP}2E)EJEEDs*@^|6O z&yX_V;JAHR)Di|hk-L^G$Ii(X2+B3X9}sNBo=QODo@d zdUz3E){`$G`QA}pf80w^UCY!*v;gO!zWuX>nKpIHzzy7rb>FS$deyO3>bR+Gt08hGQW@R?+lNirCL2){apL7sh zaUptXWS&r^zg8@VV9Dt19`X#n^Q@6~#?sC9Qa5m9dh0agVLb5can&Bl#lPV$<=~E2 zxqcwaje3&)nmIFGu0z4U=IP{w9rxDq0=2pw_fH4)xI|j`;jSPnrnXf;pn23YVtpN5 z;>4#-Jl6x|Z9tX8B(IP{^BcCF%Wu@JgdTBV?p3p7h&8kMPWaxF)XD?xR#a?^x|@&g z+_yA>!Anpv1A$;LZ2IRWxw}oK?B-J6hkBuGA1C=(c)4LFHuVKY{(}J=sSNNFj#~8)ufaMOP82XlS=PY;a8%>|Ko!FnHs%6 z?+IlVzv-P8_LIR(w2&$gbUx*3*tBRX?7R?HqMY5V%gyJyQs(({+z&knogm3h?!m$0tDW(JhUV;U`5n@k4I3-$p^xc>m|{J8#Za3w zT4#o4uk8|+roBfsK>*XZZ9zl8MZKI5h`4TG*nZ#6Y7;y?ZQ4ImNwFXHTLmX$O=0kW@3OERjLj zLD!8ck6ErHwQKKdXS)jNZON&_!}WA@C9=@S%SfDxe-`t|BFwkwzynYs7Z#Ip=*UWRjPKVD zme5Q$2SWad)hp?kz@FvfbBZ({rALWvT?y;`PAU`As`w6l+YM3h7{n6yd`r~K`nIM=o79`}wP zmCZuGiAv>$em2=*A7LAh^){PZMrPgc9AQh^mJ{+h_thl6hZ?5tyDK{YVRAOfyFcPz z39BKCDHbFDp}-G4Y`^!$(O%W?YgMNC&Z(CLU^I7RW4|L`tadeP{u?b!p6J_rePT7U zPrI8yjaZBYz=7#u)J*dt^O^pRaEe{I~+;J{&(~01E|5lS8!M+f3|p3b9guE)cF)kV(RiW5k3F({(_8* zEb4E{?KhhgXFjf0wBSz{U*Gq=P`@O>(M&tL!>-A`lKXc1%MSI=}@>?BM=3MhN6t_!?FL zXFz08t{F9f7FMp`Y(GGB{gl=enFOZErD?-kS>z4Z$O+;nnk!@X(>h*I%vxE!iMK#t zgc{Q6baUdYp-^x5m4EWZ%QcL3WDPa(X_6og z1Du*OQW6q-&vG~q?Iqc3=XRG}7^V!@?CJ3a1^JWh$c}~UxGpNIMij{32GqpUcZ5|) zdF7$XjV5;4z8~ke>h!I0WrUldU=xJTs$cRUIe1}{>bos;w3Ft$--SE4aW&{m_$%&B zUXz5ur^ZyLXCuwUVRu8j#x0+fcZ1rM=PMN7sNlVGgkNDCS#dcK}z8DEopGP zZCpij3w2!6YP;qVqwmeSsO3IzXrkuNlE5l&@du8nrJca-T{ATtyCeN=b=uMYWS$ce(^wnYjVH?ZdaxG1qFv zW}<;L#EqQf#YQiYFlQnZsw|O81#XMsl9P&hWrK2=2m0i!=jHp{6byFP#{mBNF>+y- z08JY3l?v0Nd-Z1*cjn#y z-CaH|Qq<9a?aMNDgGTce_I9KDnhjiU6?GQk@=(q%3Man&R{PpNDebx9maXQSV)kuh zF6pVy9k=6s;j3M2EtTVohWCu!Fh=*JnT1*-iKB1Z5i;Wxa5;C=fmU;rQDGs?vRtRu zF@wFkU!0E}7rkxPb%IiOg_Cm!IhLCH!Gm|=Kd1g3$WbxmU1rb$gSSrO9{$NFKg)Xk zTV6uSGk#+E?2$cjc7<;w-;8YP`wvU^JTW8XAh_H%3@Z`M03p~Xj0D47S>*gZFUL+K zxiH~(DSCzEM6!FDI8E8vwRTJKI9qet(Ui};^p?+hyRAi8t33p%G5}HQuF^yJ=*nIq z;gKP>=gue8keI!UW9f)!++4Zs!|Z2fmz_}6ELr0j8&0zamk`_<_CoHuTtL$JJf?1m zeDv{N%(G#Km}eG$P|g;DhSp|OELK+9ySw07MY6Pp4NT6nKeR zUk~+s!q&s$+vWM4c9H}!k(<&$B~x73Zkl}t_kI&3sjUViU#8<~i0&60hJRx>+^=|MKTOKW+;e4X+!~Kw= zJFz+x$qr-KJh2%!Z-rn){bHHE&)os6pZ8_|r@9j7b#?Ec@X<|sFcPQWoAs+%Lb*gi z*N?e~2CVtplEtu0aLzs9yZe5}Rb1@a3^klFtf~b}0yss8B4$YEvh@<;;Gca&gSY{v z%ai_e%kDqBgw7oURjoCXXKi-fxN`BD=CfzigpA7agQkPjiR*RR<#>6D!Q?|)mI#;- zlT!UeyG(Sc@Z@O$2F4z&UEB7HR6(VdNiJyN!9xm66IvZy!vrvHcni7s3PT{uH35O z1~2k> zVxj0)>*R>*B}>CdFn1*ibngapv=C!~cjS~p)N7jiE`6X`Wq$eX!Nh`@R>5PO7x8VB zXMxa2m{4Cde%hK6AyP;`dL;2?;E;U67=*WBl>*a^UfSsp-z4vzDy{Be&K2 zE61+v05+cl;g)l^4Pu=<$jG6EyN~8$ndn6YWSkYgOM2PFh98bUy|kB3AG4rES4@gW z&xKP-JH_}o89Ai=@Nq7@4Ph}UP$HKct+uYv9uyS?uO^|_l`&G1Npqi6k)daP*=fzD4T`v$%EXPx^&D&() z+R)foCfv6?HW}KTk=E5QOU}Z=0QP=H9g4yYwXxu(88@mVYHbA%C}=dNl}N&1l(+ z)avFzElLY2`t$tS9(R0Fo)_4Z@9btHnwe1OJV~DkZ;mT2cihLWfjM*#*reM|{fz^4 zb7wh9LWOpE9jT|cJ9>cVRWE>mba9rH)xM03DxZmOMyhgGpC4ot z4AqQT!ele=D)AKD4H-FXVe)*i9{%i;(48(eLh~F!K@e|ffzIPlc_%$%(H9HyWAkpi zi5G#V;-d;M9ZAw)rb%Vk4D;x2*Eev!WNTHkDo6*RbNG2r*nC)2nkWl%0af5B1t37n z@>LR+Zd(B5RXBBZL%Rx?I?KJ@mQEkgSyALZv8R$?5P8yTL$0gSzJze%N_MKyY||tv z!~@$7TG)Iye)hUwu~m=DaeEmx149l_XdcPiV=2{r(#Mw5+^1v*CNX@9n z3r*mrEYKj1RJk}PzKHcQJ@#+`RKB&Fr~`1eHTaGWbA7aRxRPrTMcFRNEPw@ zRQ?!LgFA(U&P?TM{uK46zuM6m&5&k5(9uPVIs`sWmCu(?PyT!|=lh3He;oM1^ZKF{ z9VS!eJ5duksK6kCh{wn~BPr1FFc}w3EEU36CqQN|9!RH+CDOL4C$(QFBkt6ISm@Nm z_IhP*P|5s&@r|CTf*AdkxFnMf{?zCeS#eH}y6rWj<4D8&1w7xRLNC<=D2cuX!*4(D zjv75diMYVh%@cV!Uqp@mB6Ac1g6)~5t;48@^HH!kt1IR`D^t&s6=fX8bi~b5_wyGQ zVOD~k=gX1S`b1PwD?luv?a6_TAN@vd^XO@*2Z7EK%j%F!fIhM?AE_jT6>4JI8}7?-*|U z5w)(8J?pRkneG{$cCldz6{_@)nc%WRI&ZU&WH(d2zh=b#>IbX2kQ>T+BKH;BkB^6P zo!Z-}l43kE5qgDU)}t+&#J&H7f!lXR+a66e;flK1X1BLSd$40zm*V}= zEEP7$`I%G{^sw_%Ox^OC@!dPd1vLKWRR3AVTy+_Le!V>|n(|ouZwO>>d z|EXcv!B|XJ!zP#>74fL;N+qZSBplK?ZuU^DacGa7M`lakUKhw#a*Bc*+S@ZdwR}bQ z)UpRMN?(qa@pM9!U6zQcUNw5-?)8^f!|HJ7=b6CmxCrJ8sx`aA(5^py{Qdt{W*J$6 z?}$-t#wQG>HUB0%U(aO9e$hm%(fF_m!Mas7rIv&}&?PdapM%B!x( zaO{iZIg`F#8ZN^(^P)<}Ox46bd|rK{>@a7Z*dpfqVz+al|U!K zO*hE#vTS~tn&qRsVzBY4ECummSZi-MUzdsXgsb(ns)FI#;x}_qaLr7|bJKgZRX{O) zId2|Z^=391=gDO>{hRS$#^*ELJ~PfW4ETK6*vaCr5za1*woKQPi|BLAojH6V}=$i zy%tGew;Fd0a5GK}vLk#BS;0Q+>#?GrRO@dwP93)?1XmZUd=Ux+@m$XSPi zk7*e>2MqqHBi$NxCu_Tr_gRUd6Y4#Wf}L5351pW}FTc5K;ElIJS0t}dt}uE20l{a+ zFLoEb*myp3*8NWl;6GWFwY`C&VT#t_YW(~_5-sifeOszhJ!l(7;Z=6Og3_V{uq)2OaEc&g?wE3DQ zicx!ValK|xX~BClM)$9~6J_4{-=v&j&MC`_5*^}xtnRA%N9EO%3=ZB)G7Zkl8NOq? z*1>Xj+}=L&A4PaM{gPepOIg8Qq_sj-a{B*A?Y0}Hfl4}JY_0CNjVyxrEdz@Z znNyXc2?j_Cg!xOaTMJt-ywz>%dgx}Vnz@)h)pNC}xCxtZQ-V@3PuWL};LJ8<_X$$m zFB?0j&Ht)xFQaVWth;~QujTMGkRBJQ;!YF!;~l@KW7tL*nXH?C(l!0OjsHe$GP0hd z^{f5E?9blZdfZF)kZBb}Vc4efiGHD3KwS$lh?uok>0*>&i#A{%?BE;d#_|NecVnd&TR7KdS2qfAU^Yp3L88`QGqbEYk0XbYy82htO3Mn(GE* z$iU{eL-{>boKLcz#afGzms;CmT3H`XVBf9T?@HJ;Pa<@xfo^~Riom<-co8DPAn&uf zJV$dgIcQky8%Y%zsM}3V5LdF6$dcZlxs>+vGaszhA%-aL;+;7te!cElLLzH&8IBcf zYMVMt*%~oU5v?l%SVIuaV_*eZ{mRtTK8v}+A6pr~x;_+Bp=Gl@#6T_MP&{z0O?HM3 z4wuzP$N_Hh4;=xw(nqEW>jQ1GZy}pWU`7!701R%E3~d1t#;g?-m8`^Em+_u{ByZwZ zz23Vwo+l>TC*ZtMT0}P(RY>D?ho`@%+Z4osrM))A2%B8cAN6*7Z|vq)K)NG7FBsph z^m2|s%W{`fGjP$QQaf;1MiFZ+&R(AeGJ59-yyzhdLHsCP|3I$f z%t6Ire5?6zA%#=Txg!DWFVD2k+0prlWHoG*2#f;c3f70#c8`Se@m3J7(kitbAbFQ# zF~CUlbFtf6RL%xq_Nb{~2U^;PQ7(Wp(C8zZn&SA3}*(&pvK{}!IF}W@zk(c#FG@9~}g0T{KJkZ#J5F)#N zr-4A9eOpnsxI4O_xctV~;4la_gmc_H)+lV`5EgEP&pw7%(#f!9ESAtx=;p)Xz?1bh zMz2jJFhC79(+}1t%fzC;=!Dk$5!&nND==Ni&(=z4s+xU6G=z|UVX%VibTSaL;dNQ@peECca4h9l$l$a1Km+%6d^pe_7A=_>JGHM7HC-+VDilw(9G{=b4^cEU|6Tig4SYkqJXd~skySQM z9lp=cJAIsL4emr)T6?3Z45_kD%hF4lyy!s+pN1^!Y>;L_u((OR*d;X@kJddU);X)Us0TO+tC`@ z^G#C_W}bB$zh2aCQ8<;Zuwxb@B@Ub>Jvh3AD=MHVx)(;%bMf~oC0XCif8VY;{+7!~ zQ@^Vk`OVJ1`b~zYLGp*EkH5z%uAiaE$aqya5>zdJBtG~%I_0Ppc&SXSjS(!IS#pZ} zrh!EoRnGT@0_ssOsNy+I(Y*E3hI1CE<=<4vK5b z$9Dr339pl0uD*|c`M4K)($NbANeL=0SEFdbYKYgsqg)!UG89F+a(?%`xV*M{#>OhACDx{p>nSkw zHmlZu(n)Jm2B^WOnmK}j0m|t*6jO?p8Kh>~=PI{#LCPp!v(2?|D+N=e$l`h1G=Ut`t5E4%G?P2E~w#q2LSDLar$7 zSdK~ z%7Su-<(RT@i;PRVYtc0W)aFP9obKiVwNAD5uqHk(*uT)%d#=_LDVuFQ4fZy0tdl@2 zk(!Z}K9`XVFJRRAcH1Wo(50nFv0V#j%Dw?rm8+jBua^}7IVzr^&l=nAaWuj}g9npE zsV_tMW`i>+f*1W=VFM+vxjF}$YEs>U*H^!guC+}X+)@!p7l+-jz)Pel@s*cyU_;te z13{s&?L4im)1`S zNtg9t{T}#1W2;`%mi~>st5K?aB*D`hlbbiXz2iBjq`Q zTPEDNPs_o@>hnnxe&Wjk7eeDOBcOPYQa4Gvnc2W{WOHIQk1_9XCgnIEw5GB6KG#IM zilDK3FMLMLemOx?Zc<(|Mc)Yw;GDK0xDbR=*~%uXjO>w3{obGN=q%OUR))oY_L zK4AuIxaLiFL9Z_N>kP_4o(^pnvQcV8!cWFm(B{k8iy7nuMdZxiWEn*n(*>}NWHQ|h z#G(W!Ej;Y53VtFP)vN0t-jn>=3|uaK-ANWtL{T|VL-EF~?NdK_XI$2w&QIsQ9E2z% zDdsN6chI(Y?AZcyx6%}IXr=MZFYP>N`rW?*AO)dJ=jfRFh{}v$vE`eD zuC!%1~BYx@ReoC3b7e)(scKg$ie+>6!pwMLI0Ya z?Rw9Cy;vi)KJ2#Ee?i)H;m4$xX$AsjLipVp-KxXQmsMZx<=F9nzo5>EW7?(fXM&-d zgR^$ueD_m6m6>3%FEv-8wXb@uHCG}+UU!k&y1c+U@Vui~TDcBut^MiQTDxX>lod9+ z#%?JK`w6HV9ep4iKRE;hqxy10Gh175OFi~uw8xuOhp?X=;}Dw&9d%Tp3AbR0!m@3} zbONz1=lwM264)~xxX1@;stkat9%0H6;TDnju!IAF%IN)4PPNGHe?|;}n(jqBdDIzo zQHG9HLpC3P>Yq_^)C4np6J|GpA@zo;fi^%AW*zXLN|7;7O=V2++4MbVC0ypCPA9Op zmeb6d@wH~Q8(^`;{`ZJy&3hqX>va^3F?H1r= za}4pCHB6-xvH=1tTDb|4p^@|17oxhSNnadki^w@TpZu3+ZuN4T06JQQ3?5s8D*y2a za0*H&gg7H2UF7Sp9YKh^~B~!9q@(Xg#e8 zqMWK@6|SODV<29LkdS%Xk;MniRt?NQztr>1RMDiMVt<@4$NcRmr4j-ZJ$Rbbpy-im zN@&>_G(J^_C{Xk9=5amF{wO)!#K8!O`McoEI|dAzoX)?}_hD^ga{uJ^NCPzcih-BP zG6Y3kZ}*jCKG%}W5s?enwM+QJszNu4@Z)S+oMe-TAwr+wi2c_-{Y8aZ9Cc-kxnYFJ z_98fHmIgo8%uf;Zk&-46?;ah|5m}^t00@J|dv*^I%nQBqICJG(=TUl`8)jSxVo-aBw837h8ZI-vjr? zUnYk3N@V@+gF6b=>)Hdz&7u-#<4YKQJWOh433GQ;DX2ZJVr_=7@chsje#v9w@hrnJ zoNe&6^;w&}CBJ`x{@IsDXcF3U-81<9SBmP@f(>6LA*6U$XCT<8-S$i1qr_-DsyLbM zT!QoYg1n%Wch-Q$!Et2v9ovmYW{)x<(U;a<;U_`{Yv~R^AJi$CEAB#z{7%3^HVX+d zh966Y&kI(&n6FUQ2boYuRG!TMVTptBKy|pX7=<~z`dZlvF@HSXxid|bc=)F4oicb* z66f+M5#$RV{XcFMq>zhr;!6IXjtv4zhvu0T667Ca+BerJ{6jVXFq%(A7;SMFyyK!t zd|S$3_w~`#%Q)viu*j1X;kj(lNj=_mLkFut<9vz6jSUhdRq! z5yhfbp#XtQ{Nq=3$4x+>?g_RqJg%`H6bzIbd}sjhY^xb6FR&~dikY`_mBKzg z3`?eWvZ3cAH%C{{7nJ$#m$FZ4o1)|0Ux_?E|_m{mS&G7mmXc1 z9VO(N!9uJtxbfvliSQsFNU^{V91CD${xU3xb*}8hy^soH>YO{L4Xxj}@xCam?b$C0 zOKH1~FaeadR>s8<2uvMELlI5tLo&pNdq|3d47$icp13s5Pad2-5ol&EE^i6M2K%!> z7d&90bez}88dDE#CEFhZjEHagE%as3n9s^p!H_pITKcr+nWv600?IU8~x*wog67^Fw7D4axQ*uoUr&(;w>5RvdI2U)5YIs-yesH3V| zBo-s!xjuufZ3cApN8d2j((TjpjWPX2%1z{vefwvymTBD^pvCBv3CLI3<#CyCw|{^7 zsX!&Yj#`{u&%J-lTH<4nKOw_ZbDi^pp`H_Z`{ACTqp0swJJf0Csq^4Gue{egsKcDcA8JS-&fY zi5kU`A-TVxjLMwP68O#x7$qLHQ%xV$ksnH3afny#PA4J>p!$_!s;ZBf#-m-@VIRsh z51B&zoKOz01s#k^_|iqwY4H;U?lEAhuZlVkBjPp6N%AFaCR9V*q7E=aUs{GmmFla_ zYWC?i3>SUnn#FCKq@=&g0BMsP!Ob!Of7+&#+tW&taF8{s@&{^`zFlL69MkIw;kik3 z3K6DTI3~PB`&S$`-~UqQN0@SbIwzCQbE++TL!-E~KJrC33+T8yHc4!0>n4K3=kr5U zKP9Wv)b?fR!aWnt$+ek$pO{xb*s-ENg~2JS!t^P16OuT?3T6zthLzN6_D#B);)W(! z3HGlOwr`42$pwibRQ`&()nlO#ghi+bv*HK4SI_LjJQr<0S6pxz{@QY@iE5R^MUh=N zu*2f8Cv<}lrA8?xJ2xPPb~5HM9-}11wF((Q=CcWqn`Fc$a4TIWC#NqEqCoy(jtad; z5r3Tv1$6&u`o$~cWcuELVl7)fd|Uz!yeyuEn12dC?r9GO{3ufVRq#3*7(lmW8yu{w74vYiNR;% z6kZ~+p!7=TSQn1ay zo>D7@oyU7`{k~ZJ?*D?~tuG(UKOCo+pFcud-FXda{j@jt!%FnHUl)14+!bqR#R*?Z z^8rjR(-y=-N^0Lbl(E)Ar+Sq2^J(vv0RW5sp=<}T=Uhv^x7Mwne-a)2W`9BQ(Nl?_ zoG&lKt-rq^hcn0(@r z>hsY}^;0a}?mt4sWelzW%>X^RfxY2phgx!kb(RqBd&G{zzbV?H|d>#5T z0&Rnxju-J9y+;Q0TYVie&HGO(JkCmZyaypB&#(5$s0H6IZtojyzDNH$VlEVEBL_mg zG(nuKWAvphrI8-q3mGzo;sT@f1?w$@{AO@~>S);@l+xmmYvi?tm(3MSC&a$IULd5p zN)!Lx+-lLHNGCPS<7uD1N$VN3nS}-dd3&(W!>oZEU1F*LX8%p@HwYh1Ilc$=-D->v zvs!n{Qd8#&X%c)$&0e*^5!E4bhGBDSO_GO>w9XV{o_A(WlL7|9dTt)T#ew_aIn56$*f$fSXy1=e1dymhjehij0f~$-_cv7?P}@>w zRwOFg#Enh}Z<0E_qp@y6MJK#$BCL<#jQEcrL6~tHKQDT$#)!|mI#|;IDl+Da%P9bS z7KF5m+w;QcI9=FIFg>z8V)h=Ht0&Ab&?c&fivmJkFc)K3ms-ut{N`?ca$%%rU42Ud zH=-gU7OPH*{3V=PQ(mC1f^1N{&`t^bQ$(1APvhzVK6c4Bp#j#tCyp(1?|uTDkn{8P z&LQdAvLB6Y8bySs*gzn%U$ULR?h)*i981fm?wj%|GfTO}2ircb1V zxIR_w1EkM94}pfJLNsB5PJ#rzaX;;XDMEw+b| zD!5T(RK`AuqrG|shrwEW6#5aW&c$Gp>c(*HOop?cj3~E$uyk6iiQszRk3i)~>HJ2X z8|gYm^1A%4Zhd8BOe}@gpk1LcglK6Ci*vppEynDv_%s{xQ$Z7ttZo?*b5r+)5RaJt z#Mwg!3BA4(grnLoSdT+)v-fc*J%x{>m62{5rsQ8KwIT)=(_BaMN^8r*WU?194E!U# zn;T@Il2~l1eBRfhyJUfi0`(0zqxU3!v<2_!1TN$XxJPL+kUDY#0qm?T5?ejU5zP@` zjAUqRQ3Z;|w7#6)Vx4J_w>vAH#0-?4@j?pzpuZco|5!kvzw3v~QORwKYsVR~Q@-vO z%>Uu)>RH#NBnaf86iVB|{)FFsJ9a8)5$?bITuY4;HSp$HtLH!Z(7#Ks*WLniprRBT z*Wo#qd;H%$MgQ}#){gVal(WI46xlA&w`b40f6-x&zMd+@Jje~EJCMI)4Xrs1@wW7# zEEW*N@B$`j;kH$>rRBc@mwQHarO-mU(N)XrXnJG!>v$7g0_ zo^R_4``>6^{^?PQ6Jow&{crhR3Imv#5Bs0JpAHACE~h`mh6z0Frn6j$5o);u{Rfmw z0hdB+r?s7g0rG4yJmcaHErlcMdXKG&lFTmo1=8O>1QKg<)mpZSOB_=GH93zi5Jx7; z3xQ5Q9$JOdRLuRi0uoeELQP@!{mLlG(SzfxKO%*XgS0~T9JAg6CPbhvLZzQNCIRu0 zis~63Ea;`leOVH7dF3M9WS2!p}H?GN8mZw zXJIpZe3PKWsr6fCAVNnMNB5=ae;~LuIAfLc+(|8g{^`?UtzR>np5(BTT@I}gO+MdF zN1%IjQGADAoq#-h>1Le^KVIL((W}Ms9VQoWT(3(KQj-J6J?H7YCBmX&>q@FN1aMeu zR&r~SwtNQm1WzvUrOZXjB(NBu0T_&nEq=V@OWnshV&aFX3#6$jAOTcCK?Z=Q;mLjD zO0f;D1yO3x8D|Ope-i{i+XmYC=9BWCoS^+$c>D4T)hIPa+ytVD<@PSiUNy}%65M{0 zcRA!Pov9(O_Ippsi<-?tH56C5QvAdY9hDD_Dt+I#gAvc-%`-r=A*2t)*vx!0V`^d zejnDh76s)6nuxGLKbDsKRPeNHdW$?p;ut5Ndq!z|$*Tk&J`I>dVnmD8n-pV5-t{nJ zM2oE`3{{Im3G_Eo(7v|$<}G4_lO+4)_xATIw7gjAkol*H6TLbh#KuJn_z8%9cNzZ} z{yl-!3CUuQUll;XVW}+e`goG4hdZU$^_g%Z#5q2n#uk{e0bZgMAal)DG7=zGLZV?c zWZHrBtm(oc^8BQxszy)G3Q76n=#gYHo@0^V))VOO$2i?S%6%?mT0nzUgQ9N)z54K< z!4wu)FfW;rzO>{{Oaev9VAZIUHwz1nNFw;z9xr+`0)u@NWrr73*SD zRGJ8`k_si7KIK9q>N&`vf{^5k z3v8lx#UV4yOC%CtRqAW^yGW5ue=V*DYTeo&sjrWMzE~PFH;j)bV+?(utP>OIk(WL2 zb*F+<5>@9{YsId?xuW{E4@C0V&x(jy8>OkA?5Hk(^T1WZgbiZi=UVrI*?>BNHkt;P z5`MMk8sksKhaP&TLKW|y=zuS#k5Xf#cPf{ztk-YQ7 zzZ_}R{F$60Hv!nO*VltH(MQ7jh5ISD6Ox%GGk5`3*TkU>>k?YIwjhfVg`;`^0vCmD z*+UxucuWBKtYd|Gr#>k~{`bA5@ax01F<+&q2UC9;p48Tw(r#6eOB_vpQi_!u{|ib0Y*z-0<+(P6S#GrG}&cvk82$2d9pi9^fC(v1*y0k)W4I!0sD>WOdD@m5YmLqR`poXqQH*Y_N}RZik1X zyF!bU)X?s2u&ev?2&`=GOBaGf^1v>@J8=*4QL2zP)eeCdr#>3^qbkW_1dx5{0m&E4 zf-SCrgZ4$ECmz6mcN98re^mZr0++a2olg&Qc`Nck)QJ3}R6xYs_g7$u^Mw&Ogu#62 zdjhN;ZyL=4q}t%1q-uoxT0eEIl6O|kJ*INzT(j#>7_?Z@d5@nGaV|GgObA?B7>wUq`F;kg63om_qiN?m+8(8=?_4{_4C$RloA@Xi z8O)2rTF4R4Fo4V;+%porw5-RFh!6QNCKOTo;=;2;)T*tK0TAs(_tb{s0fXfgw^H=K zjy0Og=nv=E2jN`P3E8|4RA<^lFE=liV{QLkOVz>t-Lqo;3%y)>{emPv+(Sw)&_%9z z9OKrvhY?cKn7vqi_48@>FHPH+D(81=Eu@E7&yIiiY_im-82^??a-6edYx->k7ce>H9G}A!^09oj`5LxvYwmw4o4l+ytf6b$03rTm(fh&d zXK%BcfVI>3zhsK_4xom7ub3%K+lan?LRhf`(HC55=(9vPTyr5)-5?dpC@6$epOfGC zRV2^C6ah!Q@^a_uzHgeg{y0vjPZU4i(Lh)10QzVWxK!$x+&pt~5Ofw!#X9WqhNqSUjlaYbZp zmDAUTilpFK!JP&VJUB5iM-2EG@ZpzXa=nOxvR3cE@XXV!T?^mQ<_lUlchJf({dgwu z#rZ-*^#i59u{~-HvTvK`U3?ThfbdGbxaOKca%!3Tzbfm!W9M_EsId#)^fLokG7i?~ zYJHkX_MW_P&A;ocI8A^a5O*;gjRqNC^x%PKnvOaF*+w`Y9yW0)tp`Mp(?TDiDMqFRmYANogSy#?^DW$T_a^p{mPPp+iX0|(XA*3ZUx zi5{XA=5a;%2_Y5x?MP#;gOXkv+=ON-F3FxDR}4vCgdvCQ3Dq5H^unEh?<9HCF2W)Q zPcN4~OZvD3JM)K{HCVST-l9Z&#eYUX=$|5WD=O~(@Mw! zew@)Pynd?Z`-3_j4VXA)=3te+2HKls%N&5u5l&T8kEb#+P_K0I_ws!W=$f>ri)_xtx!Vzqy*qW+4l@#ZRcb{a$pr08G$*{!mA`|X$P`MDh z6^Odv^$0mgNvLSB;2)33XE>TOLA}?<&qeO__b~B*fY)zU)^3kdw2ZFFEDBA*Bt{f@ z8*XTc=Y`(J)w-3z8s@#P@%r^5?}fPVZ3S#SBl3$4*r#A;;P3OB!|!~DhUG(elE_<8 z;iF-LD8g+GZ7o0ppxhf6&c$uhtLEsCmxqoSre(KZpvnpx6d2rG>J215av4AT4KsS` zW6JPyL9XqcA&x2qku$&15H=9^WrmRN9*eReQA*(|BA+ik$>_!rozHoIX_haAt-mr> zDylV)iy8}Po6RWZ5WLs(VS6B|-3Ilal+)bl9+z7(YK1&_X=l@OqP5I#`olsXC zcU~B=QDcVv+@oQU^&uL1nGl8nuY>NsO-f;}en@hwKi~SR&P3wTLkHEKQ*@g@sfJAl z75l;b>&(OzJ7cU|rbz(B!=dn`7{?O&@KIi}E+?8Iwh?ShukCu#b%1d533+JsiGJw& zYtK-HLz!e9e)Xw#33}N8nz%9R*tL)Hi7{!xdNP;to&I}df6wL^ZgsCJ5kmF15`{?q za01)$V8*vI&4}~7F#6|e6`=T8E}7M}Rd)%yzz%XU8k4C*>-=Q+Y;Di#?yMHNRRb^1 zeQvOk>1}Mokp>PlzOe`c|F$V_{?zrA9pOsrn4ra){^+x~rA$;bQi2Sz-1{hD7g@Sq zU0%2OG^W{(v`X%|-TioUz`^qh@J0tbNmS&|7@70$A=QwlKQIaQq+%YrjTwkkED{%O z(*EpFk%?pZ0DX~Gd9g3|h|0Ua&2gc&{6Ey-t8(t@PCP2M+?u?Em zEW|{igG~|pES{qaGR=~;L(KwXTRS#6l-+C)#KwK6(JchR`KH9TOL zNQrVp?=%@BZ~&bC6?)I~#NOGm(J0H@tt$oC$w)q9Rw4tqvu5%4Vz#UfJE z;unVq^p-5(v+OOZJ{cxl??9+l?TmA$2FXK3lx0=`8_nDBsWBbB4A1f3gaulwDU~!B zp#HqCW4i7fVprAtC?TYHRHjm;yN|gGKhaZ^dy>26birdHlZkp&c>D{f$jbEukBqUQ zLmM+V3*@m-LhkQTZ^f!G(b6{XtU9w8lm$)*d5%cbHMrYt%p`s-hq~LaR4uugw@Hw3 z%*+$;5$$@Q2Q?)mzjw|MCKC9cR}9#>ZW`9r^$^ocGejr*(NZAZnI!!QGUjLXLV4HE z$0d*mOA2SsJz303%I=qlM}O+Dh(|NS(#7iuon0ME*JGMJ>()$O8(E*<0cxff#k=dMqKjnWgTXoIOE^Cwgw4 z`{Lx&Zj2%Rbu=#hn{S5y$r4!!W%r0Ng@cy47&kzS@YyM7M%k{l9rubbAxuFM zDbM3M@LHrSFfp?Gd$IT)h9RCimm%T$6ad7t3la1jW#vEoDkyi~Rk@=1okAT`DjqKL zIsUI^9IM#I-#Z0*I4!0)kk6sGJN{R8{+FJagR_FfKV>cFg7B3mC8`ZFwv@CH27E)zuFUK-5EMv1nmkX=Y_vZt_9i3R{sBRidk-p6EpZ&^;l<70$b)>%IE zMlk(Yu83yMvz%k{ixT&e*j!CXi}b60M)F&3E+BWJ<|@n@XRymwMZT2d{R#%E5;6_X zr(o-%My9zdSq7D&%H-9d!gq%;XuPoVr?Ic_q1do4Vy}=$04%w@FF7B@*!CyC%e%*j zLj=4`x9`r03G2#W>wk~}Una%`{CZRXY1DoHg4t8CrMgr_IyV#moQE^jqdruK0TE$( z=P2~hPR@3rs#Tmc1w@E03tdlzs9CTqfuV-KI)i<$M61T18ajXcK(o4@{T;~vACZsK zUeWDwcNSV5^*ywoS=S4_{PLi_qnMoCNeFvXneMPX%?EyQW7=oh@v8nNA9;JWD=dD< z(08NMdzqM#>b>Qa-0DWKelV=ESHEKK@m(%+;)r5^EtF!CR7`k%2SfkdninP2Vy}9} zlxg@+lIu}dWYW&q&-HIB_Il3*ifSG}WfEtrdM7L;QGPlKf{K3-ou;Rfo#D6op^fX5 zmousVdZk|H_H?lX;jN5>utKFSQ@o$j#)XZK=`siJyCr9SWQ^uSG9zKYqn&)lkx0J% zRn^GXlgHFmb0DJ{V^4bEHva=g6E9T-nNN_a!hn3L`7H{yWBt`CjA0arh(IWy4iZIY z^7>Le+>63w6XHV1eJvTQuCna}<|y3Pyvzeg_{4Z1)pFm}P1lRa>|<>>YJ!qZVHQoI zPwWY+)U)UtgmKYz%P_r){Lq{h6r+r$um^USRgeXCUNw1kRK&hZu*?k)HE z1fWf6lu^c=)UJfNDYD3clK>SNHfoR3LT}qYwF#g%U9b-b0YuhI2Oh@UrP?&>*C=8L zr5qd)ss8xuOcnp=J6<2(@(#tvyf8#{)7A!G_RtSbew{3HCq8OogcpDjct}5s96pb- z){b6NF4?IB`ziD*y*~CrxWj-56Eknb;LHzZgq!IW898r7RUhvM#!1Xua|b@^i<#~P zTcTZMXw{M_G5O*X2+$lpwV6W)W=Is2C?YZ;BY@JFkS*}4pCq4iMQpoyrpNLQodCh2S3zdSi5WVRPyD@vb3{PD zON@VAPy<|AlzO~QY7a2rQ|dDLYDd>8WQZ@!mb^siFy?IVI=+y=`NI+fL6#lD50ZXesd8qBA5pX zgxuV3ghn?ctK+J_5UM)2DOXK9N>M{bC8?Cka-f0Q(N7;-&`ZKRO$VZDSAAAaTRMf)4~c7?ZbOTb56v7KF%GvziRFB&Lk5){q3 zgY9$oXjWbnsqx|ydtIqv1*eOb7$0YC5kRgwlMWc{Y~+X%8FRj0$hPky2#Wq%CEevv zK-eECYoMH8Js~8a@;6*$vvX5{BKI1$>IIp|6ic09&wC3|zd{@_TpMtra22N2V_#!f z-W%c9@6sMK61MRSY2Aj4t$7?b=edu58p>23P|E&1Ol;skQu`4{hAx|66iPqxUrs*GE_P zk*?V2gu7WKgJOV0oE4wlYD&;odda5}Rl9FgRr^%-g14K$o@707dSPIizS(2a^vt2b zkVm$G>aAx=V027^RE^`TI|tH=y%9Xy&`53X+^K!=RHwcX`dcOnEmbPY=ga$$y>uwF z&&1W*fL!TgaqlNjma4_so=;&NL;B2qTV71(Qvx=mAqbUdaSY&g=qKWeioY+`wOVr4!&*Rdf}XZq_NOskSxZ^V}u46r4gAoS33 zPOT%SXyzcmUb~Ylk&n4kByPGK5e#aA{LkTBG644v#;8byp}xmvzoddXKU}j&9tXV$O7e<{e{M? zI?AnCGsZqG)xF^wnCi6QR8waP%7DT7F(=KoIt4y=-!^hW8Rezlsj2iNh#inoIhdHs z_)4dwNlw?L)iOGPm#$uC#Ad;45tM3Igk846bAM57$azp1jrqX=M`brj-W1DDI%Bc& zU6wC14+Azig7xobmf?Nrr644|@-CqFtDq+4+HC%6g_N0>7~9QZWV*jOoe3|ZAh*WC z5yRRXW#)#v_X#Kqhr;~Jg=3u&J;w9_$6x0%*PuB>`Lek$dxPXQrm4EC@Xv?RgVG1+$ z9dPQqTr40vLMHcZR^h2H?^v%XLEkc4 z+D(CFF8!+VBoMaY7UaaM?ig@zG-d*%Ce`Uiqy6$NNTfuJcPoT3+-Kw8Y<%Y=tV7LRM5YhCK_Fe#s?Hf9qH$&&74lVoor&3blFA=M zm5t=40ZHVL&rRcgABp=>+|kj+vOt}H#EEq-p`lA~fHd0W`c$*XiHv|+4G^@d%G3C5 z(#JJ%xz9KS+dS0_ufhsy8+{jCOk-!pyl{C;EKU_eCR>=F_jGRMfKZ|WT*C5dPukIU z21HHsDif6J9(53+Lp~Val@ytcQ{K%1lZ8Y~&kA-ej;Fm?@a1wWpg1NZ!6Cwhs3}xh zma^Ery$h4sTfWV?)4M&K*Tr0n%i7c#5yf#wd0T9p1^gkf>V_*0O7X(ET}gT*OTK%OuJ!bi!^Jx|0u2ZL4a) zj*#+<0T|oJa=Go+g%`#xU&3b@VZhZr?yg{00xE?1xcQ`5{11cvX{4+e=pR4qJR#om72E^jL?_h{>i0i*@MRUqM4ByJ|SF1^z~d&E{kgACT$iSU&}V^n~~(zL9E;H1VOt&zB9aZPt;3Ls?T zwC|2)9+#O)z8FIpsrEgO5A5GsW(!4f(7g9@-AqJ&v8f?J(9Z2H;HKx_hp#V0pL_z% zET~R?8?nrp6$Y|kI9Q`FyaFTTtac*R^rnv?RcG-_u*qTrJ-(>s&cQhJ6W?V+k6K=K zBh`VICcTKlA~!F=x1M8q^+0z^RAP2gu1vzvjuo!EE>AT2+j@H&^Ngv*NJ9zr%#3JT zx()`#Q03{-lAh$RnPmcFgcX_D6h+0dR`lg=q*~-Ez}H1YKELi=;1q+3@%}j9Ox8&S z_PLxkTpuAvPE%KPzG6KNw7G+n44X?TX!7Y|Hc&P-4+g4}w`EkKW$S<7AzBtIu|pox z55Y!bJrRS7Bk91=`>}{jX)0Lc<5*U_^h99}(q>@Y#ixdb)_Hn~zsCW-!8-$ll0W7- ztrKZ?n{@G+d6&_(%)58R!z3w01ABsQwfwgU1XMYf)9<|}K9bN<5{o2_lwF;b|i(_l_uh;ibZ zO4e-9eecbvAm)>LXSv6m)E=?ZlU%@ijmWLt>y+I3{Ld6U z*RRaC5>n291tMvK*pGe+Pk`vyBhkSQqCA8c@_BrUXex2S{f-RlE5FZ%oQkw*Iz1F+ zxU`OHl98DOP})z7+0D+xCo-a>(FWc>Whqs8fZtoBOriU_lpK$r8Tb&3=)(S`5+4xA8sUcZle;ZYhlT99#L@R%k!e@%lrVZ0nHcG)uW$>@z8l4%w1u3 zp0^u9FZw0;8oYll$b-7$qPYGjp6Tu>EGMLz)hPd=83rqa$P83f_hi0XaTtlRrhjzn zn|yf5&gDUg*csZOufGrdSz*)P+7ggD5lB(bw1~_;mC&X?Eu(Z`S{~RQ@Xeg?rhvMS zp{8CLAb+$P;q=YLQ=s;GoJH#Y%9l>%^#9_uXfZyO6ch}^c|S7)+e{ZgcXAP9H@WO5 z+BuM;ldEe>j|5YspV&|lT4%@D&(;hSxW6s#2h3)eQJJszsE8oaQ#e1*Dm^*Z$t!<= zQo9Q~GswqgUVi%)`jgRIigS@y9eSTkLI=}2ll5B5bTj*5$#hV4p|?64B|30XmKgfo z?nfs>^x<3rJiy6Lcs`4+)M2~V?@^1Wi#=hSK$9<3yx@qR6MLMSXJ^Q3PuKG(^u?b2 z=qNsU$yt`E;)SmF<*JQQL6PZI8_`8iu-$9?#An-z`SBaqDLL`->7VHSUkh-74R+}= zcV#VXoiSaD)f*I(^^YvJv#YNfv6gWL)IPtz+J*uG%ZG_n0UFA41H*TVT#Rvrj|D7`*pUTYcSN zbh$lyKIbfM)4MHU4Tidg04(y$L9U;zfn2AVF$vQn3;aE6%Rh}@4#J8^@6Wg?*Hg^= z)kw|Inn+p5ISpGrN&(j4dnfKgddy`T^J$gaxQQ$+9c{3Ce6`xVKsaO-F%GnZS47j@ zWvnt5V>YVnfc`2rm)j;Q(iMqmnrb_xX0I2@o=O-fqCIaz5EGIzBthLS`6XfCtJ`T zjV$nV-UNwEc;RUhuq^(#O3;uKBZ^<}6-=2EEU*vxSjQjWC$m3MtolnPse=l!!>bB4 z+&hF!9CCa%wM#ivh$wWu4&gxVMNiL?SIP~-)ML0r)&6$ba22v1f9WqS;y;=VH+kHd?^i$rr3NP*FVJ*D;C{eQOX4mT`bbI)I2n2=L6{o?p` z@q5QCFKm7*;4j7RF1FM$B}V2G27zHieBre22M0en$(Tp0M_Iv>S#MjBHbOoTeKD@O zV5zWr{5QJb2RePfd%um48m~LYjY%Zu!uP(FHl%w$cUq>Z#sbC!sJtkp^*oxed%Fag z+!4yayO?jnfS#=$>`mL9S^q)#?;c32_8w}l{Ym@tb6f!Oe660X7!+?xtk%A`!=*f^ z>ehV`Ncx>sNAnMc?>|sO0TAOiPn!A1g-@fpdZ6#%f$;I_cU9Lw;Oxd0!r%}MP!m5F z>APxJfur1)!Chl8CWsNbu&k+ywLpHf>TYewh`l}nZf)UbI>?n4y!YQ9*c+c&=y}M$ zCZ2w3r!#7ySMh@BErnuyE9Q&v$pAU}lM{`G)~a-RNr^ zUv!#YGNAd#TxdrG`iUcJZ+5nta-T{etSEyqbwA!(2);T>hS+&u33k0tm%8#6~Z$|(f~JR|2q;g%(95D+%Bd@UC+O;Kd4R3XNJ(p3^XIG z`YiUVxn((*csEavm`dzd-s_m;i+#xK#eSr}Emzge#^1ks<`=_{XlnKv?Tg&clg{8k ze;n(=)>1qp1u5HkrsjR9Q8YTK(N19UT=!RF0#ToYN?*zRx(81=w2>1z;_JjMI2_xo zr>fo{AvAvH1}myTidz)W=!ut6{T?aP8_D3s;(qpX^ei-gJHPB0;dZU{NM4BUUZbXV?4XXR zq&wK>VLg5vr$J_G^N8X@HzW%}hk#wB&(l%z{;%24KaDI@!UshNT5`r6K#WIurmY6e;w|-kv<`G%@#U_j90vU!>U5K7UQfpMS(WPnLUHZX!CD&WDHuwt z1O@A5?mq_`8s%-=&?Bqf!bHfBQ~P6W{-V06dlUX^Dk#PHIDZ4X!NuI5=Lm~DHAfD{ z>4Y;zEAg~u!=Jt!j{NbA_B4_*o}>N6Ivno4(M@8ry4hlUc7->b##vf?I9k917wAF= z5Zq!&sD9Vq)=y5+@hZJA$29L!P(l1n{N$i z?@2&x1W@QYRe-8vNmqi|!Bo_u(8Y>mbrRqv6@ZZ~7)d-w;LYK0| zw{n)nMRn6Q#LPRwb>F?0=bf;9uO!J4C(haXhwSEa%N{FRp!&+uBf(B?AeNHxoZPP+ zcoQ#t_n+bY`_h1bU|UYTEp}g&v_5)2ND+m^P+2yrBIZPNcPprXvEFM767K7P}9W` z872}N(DDNsI64{^N0@;vP;`XEgxO)d1xOB zz}Amj3XT06MUAC)2KE}81jy+d$j474^iKgREG7 zNK0g|(e6ERH?`lE;1lsMpo$wy9m2M~duj0yzO&N@KYb(o=hHL^7e(jHnEtP!J{22B zK749o(PtrzIfb+JjZ7QMB^r9^CA{u-KQfb5c!hw?DSO6F7*jv!{y?H=c}5R>OdA9g z1v@=2jX?1}R|Y!VI#CoUX&KS@2TVL-k3$6BvgM>K;+g;*BC#9kbv z4k6RCv}iYPE|RtmR(4Hzb_`Ry*VS%Dy;Ie&@#n-hCs+&B9$?+XPas6MUPh?o4w@wB zHd}Ccjt&3fAB9YKmrD*mD=v|lT^y4Kr<7T~>(~SIcssCE+g(n+>nvVl9`9akbF8HJ zFW&w%+>cSI1@>h|cJ*3g@Q|)o3pt#I#r}8pi{Glc3r$44gjMS-He#L2bq6Y z=*%^g+((9o9N|C*l9_UCaG3TkSn`;lvqYJE9yBu{4k}ao`KGq{d)C9FlKhK8IX_Gj zLwqIB^h4{+V>?wVLLMJywWbqD5G_f`134PzL>wT$GD!1rOoG2x34*5Kh)f-mKRA_0 zw7bgdw&pp;E0=1Lq?fuqsP`+eFW7Tswev$h6gjn6=>OT*=&cne$FGMRa76x_VAD>7 zFO)~KzSRh~Ph%0+TF=gi&qhQ=eR;D=O78R<#(Q;Qc$0bPWX~~DvYdv+4Jm_RRZf+X zJss(*h#;p@z$pr+{bR~0*^DJQm;TT(YjcGkLT|DcvvJWwg6|=b71VI-Wx!Gazh`ldUBMAP4_QfY z{p(WAD(-uXqUgCFdu>I3L&?ihi_M9 zBaNwMBYhM)^wUDlp=3F;{?AJ>omehM)d~#GBce;Oo-g;Nb8X1St*ddFbG)2&`V3qt z(?h<4J*M`7RGuJHxRA)&b9*9XvW4BR1%}W!QAZ|nc!~SoWl$NUiFc~P`>mDVLn_(n5yi?)AbbLCUyK#Si7dF$MU+ z@BClk#i1!`lfPr6spvDl!0bEx(~TPmMt)L42$N0M+ghNK@aw-gV2^9ob_g&2%qa5R z-lLq`W?16+Vdg&9`F+F3!>?U3XVJOeI!_0i9TcP0Xn+k^vMzgHNj9R@#z z2aJJg!I%R!T?;8+aYoNT*mUP5xU2IuU6nxy2+Padu|GC#!w+xUV66v!&kIv@>OK=> z19@I6z}ITA=-h+i&c{i)8aJJkDuiP(;z_xxwwmPi=7UQppwgEx!T&HJWh+n&5c;@c z@06g;0}rR(`Iuti0}rp;P(yjVy)+eI45qy5urh2ZVIhc+as!$#$50q6HMf2UwDt9e zZ3De`wP^d9b4&f~`4R=Vgv0_$p1G@87GF#8q3!XK(3}+c+dW>Htw$}tAV2bo<#*i% zHDq(y!bM2xp>UbDV}4tquBemm%M!^nTdRyPyWnVVUf4&~NG;lvTJx z>$-MmfanogOxdsW9;gOK#%wf&eD;u}h59RPNG^fjDJt$?*N-J((lhu}A+-Gd(Ju-cQUNjr$_TYS6n!SY&4>>Zx(cO^P}uEyiR>o#V3*QejJoo)G9@cMdWsu^t!hB1}<*?pIJOF?XgW>hY2Wdz#g_3LkpHY3=z12I5P zKqTEv$5Nhg)z+VjNZ6NXc}!^Q{4|?mpO|<>uxe^43M!y43kv}|nrSoV^w()RW1d3k}wB1r{ws5KjU$4=;)%l|ltt=_76O^z>%Dk*sb&S?ds`lb34hy)} zGG2P=VeDNs*`>IP-Z_rmWxZD`0y9&Sa+s1iE#JR5k{{9Bxl297Ioo<6cH&Pl8u?X` zu3Y-6;u$}zoZhz1Nq&14MMm{8ott=Ul7LoSeRz7Xdyz$^k|X>Oj40cQ*Q#CrZ(96Q zhl^*dHnsnliz>v7ZR_?d*C&k&l8M~3fU6SHaH}k(Z`-gZm%%x!p_CqElm8KQ^EkH# z!_H??X*PL)R5*JBh(+nJzRQQ4-CF8k0&W#yEL0GcL~=?6eArC_`nhP4j*0u`!n*l! z6Z_Xd`>ma@tZ4&5m)|xef|;Qk#T!3ns(**dgO}mzGZ$~i-pu_qX>&{Q!-v2)b&pT~ z#=rtwPPrpsV`ch?%~-|SU$QsPy}O}`@7J#pr%>6mlYqyS|0GH;vJ_JSj8J1GDIA69^SGA{t4aPJ`AdS9`zeQJ^66i*SzBYWT1o0BE~bMSS-*vp z5&DJsdkvbid*C0KpzWh5phad^FdAeHSR!dk^!o7@Hl(vp5P&Zn;SV=UlT#kRCcX^* z)HuF~NQe^yjpCU`04YmP0s-7L+yE$C+N7XLVF%w$P?L$k%!u`Nw4oqHeh`Jo=P%}@ z%!g7C8MN@mW^IKMmtDgIf+$<0VCB~_t&bj?i~w&yMS@fb)0;ykRc74@XLg<%`jOsT zWWlfN(jvm3NKvf}LL6}&i&)I8u3$tZY*Z2-u>uTM4GgTP7~F0>`(PNcO-Tt4Ax;_e zTgTs$AszZOJA3Cfr)D_`Kz*7Kr_fkkcS-Pm)zG>ePuZI7Fr(YzZAAsSo<2^EyMdKM zJ*oUv`XwQqIs})Vnwv;(%q7e-k7N!J5NXVIk5o2>(3-x-1)oq{5(>)GtLY)Lbs1Fn zyuHYf4U0C4Pa7lxx}g4t584)zIMD6-tX?6(*44!i&cV^N-+Ocz2%zj+__c_0n?m1t z&biQ|aBe(Hf!iM#%AT?a+y#!3zn0Kg#L9)$w~O@xyqHW1a#@33_c4d-mR!yBXbuAU z#@aDBzg~)yMdgKH4+PNWvQ8s2>O34b44{_}a299WNV+9z!9q^X6rgo{<(ID!aRUPL zS+7tdI?`t&72LodLS^K{EYyI8VsD>F2|JS6Z2Fe!WJN|ybd?`rXR0P~Hd0A&VR`!p zBsb}SP!yu8jvo3XdcqrZQL`Kw*|7=?oZ_nQD&BNC;S|eSicThtsJ_BIbWJofj6!=A zk6+tQ@hUPR=rMr6pv=1|O*`7kEdk6$U=_C`_?P{uMY&8$wHw@{##WDvgzKu(q*w!% zVkp@#OVa1t71YJMX}=!e|k2dg5r1DJ0)X@JVqY=edhA znJXtgR)tv2MIehZa+OSA<4-$u#$B9Kqk^u*>oFkYOha?8qTESZMDJa+A%|XeCU8sE zwQ~)!!^%I5hP?WVo{A6R%W!4W&@?i|FRKF1tu+*bs)SzKA9cbD%<{&B3wcObt;qV> zr_RZtg{NSSlqk0gvYf91z8MIi({;7!8YpmUDeb(2Fwe&hq( z9$k+TdMNGeliKY%bv@h&QP-u(02phnW4ctY4{Zx2`1G?pt+zOC0*B&R)*{##VILJS zN0pQa&s+mza6m4q)_xd-rz`&iTFb5er0b(Ca#1i7%Q}9=VELM4X*jSJX*ZRE``xC| zZaqB|x+ep(cZ?oHjXo0K)*K1i+ZO|^3>23DgD1nxqF_u;X>866BH2f2<2lz2>46rh z%-#U^^5ryL_oTEx*|8;GqW>1e`!qj_Ol7`U5&_!fbr+7r~qmtOp;eg1RR_)L-Pwp zI~#?9r+q_f=)u4@R@rcCmAJ>n-L)i&-k_a552M{J&|uU^wdeo{xcCkov|IVUjV|Gy zB_wnC4D4?M{VK09 zlJx%AI;d5MrAL5qAs4*3AY`h7=yWscb-+q`26pzueP`vw-yqyZV-a<^qP6vN6p^}~ z^E0vjB>N6R(sGJ2@Vp*~b{KDY*dOGqcza8{eeJCXJJ3MnDJqaY|K7)cyi`aqYo6uT7bSgHOFacRsJWJc5eNMx;=J&D5TmcvZDvHpRI0jfw z3)qb}mByyHMt^Y3D0D$T`bJ2x0#eU4?dX=;&q4{gz?R`m8^Y4HQ%=I?P6&qRXJU{{ zD1ESoWB?Bd+-0>D@#T6>7$JC@N)-~q0y4N3qm~J`DCT@DE(tPjmTKF;O^oA9fVF$ni4G5X4EivIqmE-pflF@h8v<1V5 zj#&--T(jEIvcMSeCp_CHFs4RuT}4g3jBvj?tbvAjF4Pkc&L=Ujw`uVgP%s`g?kQ1l zMQSn}ev{aGZR51IEw;^d9uiQIu3v@ARv*QxuFLdkYYL0~P=W3P3^N$j&JR z&Q5btIke64XKIy#z)j1#%HtI5)yPVrqtO@~&4#1K9X;odMg;8HUF!#2l>rgyTL{p& zNB}-}_ywqiN1b2zyKA%FPB_eWIOg}#=-i`SZB(Ux7_6)^T_RsHMEYuTZxR;U#G%C^x4(1DVh5zmd3&bSj%WR>S6%0ED;ApAnK7V4r#K->^9(A-(m z|74Ek)z8CV9AR<#v7G&jk36_QXG&wv9$7Xg`+yk;I_r}MmitN{;_&7`$44;gxmulk zd67B$KKOPeztIkUZ5@t|wgXIdKX^>>YT2PdwJOjsTJJdO7x>3!J}&6*lqeNr<83dd z7Y0MYBojixBWPp=owU{A%cX%^b5@`IPK!FH?kI6WihI|C#zL+jzc0|EP1Ej$&|(D2`} zpmzb>7B;ZPJun8y5)A?5`G-fB@j?lTi>>{ppwU}DC!KY=2-@yXX2D5{2|pO^7wFC} zR-uOpT;CJ5pDoWLBBV$HLj{W#W-MoCx95M02Y;t8?S!8+jp`wai10KvU7EcZ zYj9Hwh>*9{&25I7>#!IH+*E|4sTvqL{Hv=c&F~%F%^U~V^qPm!yFD@bnA&Wma}Xrz z0w~iBLTDWlEiJY)(>8)g2@NOAjYfrG>$fNc&dZS{<+`ky^&lDr3Gj6XUtF^#lf~&; z>;Y;Um;bX4cAIm2-yZX0=+i%B9ambb;7 zXgWAhl`(R)7CFpC1uOHjo$-D+Z0`1>gGb%Wz>&Qpe|Du?8F7oJ{(3pu{+B5kHUs{x zJPOVB<1tFgL;UG;Bi4FeURU|Xy}y6V##KM>Q!+Y(TK+X;B_F*baR^UoQ!I-A^(EMd zL{yD7$Vxy$UdPR$v}WJ`YXKCJl4fBj`0oSE5@#kV!lYLZkL>N|@(b9_HjCI$aB=4L z+#E2^#T%*m$3z?MOobCRP2Z)^*~?T_$`@kG*nhY|irJ)rOsalBgi|(7lF+zmCxpXV z3Aon-sLEOdH2^(lK?af^H7=tp5^;-^x-P@v_yl7x;DaZH0%PiRzZasSKwe27wEAZX zN0C$tSjBA!OOGKwt75C02L@e)MTyc&CL43T#c}+G!zCQCF1c z(ZA(nWPx06zXV>G9t&;3n9_>od+Gi-1w_!ToqqJnVa4P#n%<&vjl1F7SYG6))?@u9 z31PE>T;<@(NS3_Gzu5?NT(AD*sT!o0_l3c;$PF9hrH{uHqM3UvoEwS_0E1)o(z9b= zLwIZhHpG2F{?^{AMS){fr6T3_@YwG#>u5qLxg;a!k7KZ&d|qure9zXAezV48@kAqU z6yT^!vdi$L;30XpAbqPSsOCsCRZ}QKRQHjEs70f;VsS!M%O@JRtnv@q8Gxa)w3g+X zA@UD&7mH;ih7BbM7MVCCY-DN`_6?(Yl-rkTO!wLR`{XT+o|xc+Q?FjAak{*%LJIR~ z(``4V*E0SzHNIbvL}+g?A@d=jisw*0flo2S#gow$5Q^!J*5`*uT;M2xj zE&?IkD5PXI+<1u$Iill8kW}EvO&WgUJpEcZM*164%`cplcC7$L*buF$A65mBh7(x^BkwV= zeLnMWa&G1Um1l%W?D&Ob_2?(t#& z1WGU8XOBpvsK-D+9a<+E#cJ|bZt~1!a&Ss<&+@FO$&wj4Mt$allvVP*u1ZpjL` zGO9z@&K8F+lZtf%xYRR1kSS>p7^Xp;(5|8M`1ZfFnhxU6WkC_c%lL|GsoW^X-j_*85_Ey!dFFMIiJHfJ#;L`5>((1>pg{ymtg9Tc-s!9(vI#7 zK-tRQpbde8fIW~r4*h`Wm&95>Rm-hpQ%j3qr(8uhcxgsYtc(CkH`=-jp4Ral)YeYa z=WN7Do@vdvRnyX5x@cS_g)<>d;wU|~WFI&F04mmcB>&82+VcgFT`7#8a$hg7rRkls z#SM!@Z;s+w4voL}LW8*2rP^{|zN0bsLmw!7@ILOnRl_Hs^)X?UMt6+ z{O$MLo|pm~R6_LCFNcvZG{ejOSnqE?_M=LKuCZBFMdL>_Rlglx@iPB@rezeV5k-N1 zL2&CFlh=xY^F3C7aikQ#<|}*cNAgQmB(egl)i~usy!j>%w#UR3I+>1arRKMK0 zEb-qWE%CYVp{G9e41@ato!Gq;Lx)Pfg8xgVmSRKa%F3e7c;dyjG!_nS{Qnmex+@$M_ zcI{<{*Z=uz*VZ@HmvAiVpqQ`gt-%A|P2r-u$MW)G2RNXjaX}$LYINUR*tKG&#QNAS2VA;P4jmix+HvW6Kh+4 z^EtEMSRSUj*Go++hNKzgRk~ASLNeGV8Pnu#TgUaIVik&*X(7bbuCTPde5jJ}&JTW% zyaPKo+~m&yD`;tE>TMH0#Vz2x1OOuHAtjPf!16PpQ!28;NW0~Q0rIv7?B}3SCv9LN zSVe<@G1LIXKsq^8t8s6epHIsp3y3pd)%aGAM$lol6=HDO4qZENWVM*a(jy|e>SH~_ z0_$y{5lgVqQA zYzJ)H*46aI9IE+-8(!4N&0Y2g&zcJg6h{%QKB5?$HHl^95HmF$%OOzC(5Vn&e#Ye!1+zAUl1<@jVD3q_#ToO4={n9uJK)O6{E^75S3 zPk7jH{$B9}FRU_*KfNC*bF>TyV-M1-R1OHFK;nGl)ll|V7a+p+2A6A7V=xmt>xi9N@2gOlzN55 z&u}6tw*7Fi&%I@rO6DrAHkJY-nNY$}9AWaQR=5sCYM+wgms5Z7k{eB%Ycspr+ymx* zv<;0{83-l=Fnt~HlfTr@7E`JC z9H63kg25;HPrS*2r|W)^L4z2eC?g?i=`Ii9NE1lNR?r#)aZF;#7O}a9NyV2aw;9I; z@H?kkEXIL}q?TA-M_38zcX*~dj&eV1{gJu?;9~gi7g(5Az0#LVk(P&TbNSYBa5Cr#9p!Zp z2?bW>)a^Fu8D~?K+?XRG=vy@r?_R1Lcc9C=H&uQZmd@*;7(S|7f0)Gk3gfTAKG&E^ zV}S&keqy~cRHv3l6K}A)>``Tnx^T}I*9X5O;BgOl;{w_&bFJxmnBfWPhJ{<~~xE53-D1{0;HX$G7&8rx(_ zP9kibU4ZI>STqWxh-*<3#p-sny3Dn^0F?P-Q6*>5#No<)?xI~PrR#v;^WUOirH!-5 zUn(&9@o~q<^;(SWSkrE;^@l^_&xVthp)Yigh9~deL9JN(f1XhHUacFR1_sAcuQAYU zjhFIEv@^)?@%+I*Z`3+^fAX&L&o)rJf($zcb=WQ_q3Bvl^@iCDX6(P8lDCa>1Df6~=N<=dG%5`5}-HX;i z)AZO!b!T&O%w^cMCN$<84f94b&9(WK9b^bA+y&)cz2P5Cwv|isO*TwTGhL6TaN@MolHRfo1p3CBy}{CrF5 zFEZ@Keu(crT%jM|`lQr{v$?9@BK_Q>4F5Hao8llJBmLR8=DXpFcaNm9@xlyFdD~!Q z0@rFT!Ek%WI##z>=)wCs)JQh?^TF*{AU{d^wF{q7B) zG{YPqyAu3SZ0semJ*XlTt{!t2~!ZF zgaohztV7Iw{_W9zcbM6H)k*d7PxftX`B-B2_T*O8I0LNHg6yBwC~cAL3xV4T)iQU{ zmcGA}F2XhemaF;;Q}f-FDt-`fT39FV?(d*BSD24Vt7)QE*RATV$)xT-D6r)!y+l^J z=?MF$#HcUFqN`SR>+S>TR!UsGEuR%T%+UUyh}Gn4DEC7y{7a)Zcgv=-QfZJeVqdJm zn^#=({;xGDCbtTN+=3Kl4ATz%s4eSrx|4kV1B=P+KycH)hUb$*DQjIxWl5j0H4Qm8 z3L=}}`+rOaWpG?J3yM9qR>$|<)Mo?{*>|5>3PKATZDv+%ko$v78}Rnm zUWTqazcB?N{Yj9M`F3gCCiA9%j#E7>rq18mWdps+J3HXT(%<_Mga|rK!B;1);fg58 zDj*d1^nYIKL!{sXu<=cT4!k@00cTHF4D*v0%k`%gy@yCPetY=pY{r{jw&_uKE}0|e zJEPSRC@%TWqrd$O_84szBUlL_2`Vgbm-WC~#jc0#NwL9~1y3yrXofbrS>;I2eB+nR z>_qXuKTiX16LYun4^4{YMVNUB@iNTw0WyxPiz~1oNd6%pheV)Ea=?cHn(4J-DEr6T z@bKdegC#Fyz31nR*cu?v%T&n52XcP^4~(-5V@b2}1c`ETv#~+8_tePk&k3c*z3if& z7e=&m+17O}Ek?a?O#M2I*CzQx`32Jd1pR9(W3*eZ>jdT(=Ju3|b;jtE^iUm4QwZsW zmNJ3EaDZ1m0!$F#$}KxG6wtk!wmrS{Cx>F&-Pm-gF_4@+ASMQ=wKKJm=;)+qM%!u7 z@7a6VIJ@nY$)v;&Ay`(8DU4ORO96PQ%X0Hwoz|2ne{DZxyV;(6@+!58hDppJOy$X6 zyhRoPu+6iYwMdwZXH5*f(GJ2i7UZG=%2@(9`}I2^yNs#tz4q&5^{jFD>De8A+?r_i zY*<9J>tOcla4@M$!Rbs8YJUZI6)pm2U8S9L7$texL#3-e;M0VU@aIcic}7puLUifx z+m1SNvKQWjSk_Rac43zv;6ghOqmXciPgpg~tC+~L!)*DwKbkZ0Jz+`!UACjGoRrugZ&B>>pl++_e zxPf&@!-WEMoX_R;&*=*L68k}1;`IGny;4BkhCJiS?t(lj!kx?rn4Db3Epw#{^VvwfVSc~Wvz=V)xh>=N)1%1Py9Pzv(jt0B^C4d^|z)D6@9f|(%Kphm|clx9F!irWb z_tXz$2peja;x=MgA)K9eNFAzA1n<7@Y(FK6_1uRtQaS_?)c%udERKRacX=9Qja#t4 zolL;HW}h($Uylsz&`oY{-PD6Umv!RwHNss!82ztGx5cT0fu9m-46gh7@;#vAR&BhwN;FW?2weRD> zU)_)hV}nA5aa=6yFMaYgD*Om7b%-p}#xyB~3{BlvEd1N_1G6CE4y%U3B4 zqWYXUX*uTA#q9L=H8RZCW-H!-Yv%?>p82`uE*(H^>{8m_M#8$p{SZmT>y{^=?Qi=r zKra8O$H0}fsd7#MUCmo;@Tcs*{1~JziV<(cafA>3;!lNdpXKi6Mnror{0C)$s|?2k zCB3f%6ya{zWxe~(+6Rf8K%iX?J%(%zf7&X5-yI?V6c%)*N z@p*91z5VQ7a9fzu|B)rf=NkKQvJ?BIo^!iYcMa}9D&{J3*-zSCH)685k+tjSVv@5R z3N!Ub^uO8f+W0K~v?!QcuRZZS_l0al8^k)nS%o89c=IIebQWY6#kUq<%T@P8t&T>x%P2H7qB z>7}4|+`)E0qyS5b3`c)WW9lol<_2hR9|r-AGiPK&2Xw5F0P)qYFWpP(kWKSw9Nb@I zqMEEUTPmeugz$xvL^GeVw+IdUu^=$NHC#1 zwx=vjP2LdiN(&ygz2hnvDDlXJ=+%IQUo&PQf4LNy?`>wzv?uDYdYRl=znN z7_8Vot0mJ|ybr^{8?_R|62Adu zyb$3Ff$!lWVg(pmIQ=1_;hwV01*tiH{ub76*2Juxf7wV=p@Z>g@T4Jm5Vh+Nw(D{^ z1f9JJ?DBw&YXUbR&ITZFtuwFk!UGYC_o}2EM_Hog`*I^q8%_RTItIkcd)a|Bq#qaK zmq5)7aVYj(X`Hl=_>@)68{QhQ9Zw0S;R@F@3Xbyp)um5B6jB!Xt9bbR7;#K- zGfe&)c~$@tHUa$=QnV4yf!#YBKNA!;jb&lSL2SxT#I2kgW4wh9xcXO(OKW+HpBzU% zX(ol=AU11-3oW>JGb3mHw!DRe*acy2kiVj#d0sqBe+=nK^sAu zP~hrbUlrw;S2MHeS)UUyTjM^j^P!-j8?#Dm)trt2YgE!#*R=8BaaZiC6wm+a?eA>Z zy{h^Mf#|V01~CTZ5^H}mS!2Io>T*Vr@07W9Dn7Sl**$>`;2N?B@JR*eSOqk$T?C}=PUX`Q45Q;TWtFrjK#J+BmM5}i<55)C z%kE!eq6HXm)XvLluMmdH4to=LsB@lw{W~>Nd|hcnR@Vj4Ye&`q;4R%iZo(wetyGTt z?J3bf#hd;nm7vITibJmZx$(4xJ9PhVFPchko&>kLzDBAyIS)2(b6VK%qc@jq2PjqC zbI6K+VcVcZj=DcHf*<%eaJ@NY>NPQX5qjh7Phoj07Lxp~V(_e7M}Rz2&gg5*LevG9 z*dO$?pC527n^38oCi+Tyd{hX~CJiI+AnH4Q(vI6G8}^}ka0EY~Az=xT#zYPG9O0S*W~ zz~wE0Mgriz*DvZV)Ru&21!8XjGY;%795gZ&WLVy2w)&-)2c&7f+L{^yZ%Dg1^J;hB zYu^_(`j_(1R9PRjk#968-b~dM_~bO{?OgsRHGblv-dhCo&xDh6+E5)q2Mq*aR^+cp z<<9SmI6vxthZ28dJK%mb zXK5VO`w)D95Y14-PfddFW{6SYHLOwr zu;C;M9FJ3yXJ|$L9&}PmQ)e)g%;Duki*pdP=oiL&Pn{XtahayWq8_Tij|@=O7VKk#L-ddJnB7gu9oOl zo`01Fzg8ipr!zB(s+V5G)_!|)k~1Jpo>B$SQ_r7S1E>pAJDtDa!80j zJ5{c4_yE*Wd{!cjQvsse+gv8j1dnef8oRgFAb0J^Sp>udrV zJ~`{V^YTzw{)A8M2u4?Sh~0=J{cb+So*OFdBJVXu5$g`eFk^E;#V}d~pm0QuSlIU= ztjBs2fj|u0wf{jtN}F)?!{gItU}rTsB;&-dGHCSC8<5@Q zn!X5o9zQv|+J#1KK8wD*h)HuA2j_o%(_N!TVs^*i{sNRmpcT~!X-4Sl?@Zj=-YQJ zn1HV@ARcPs9OU+M9~)zUWzy1ET#fZ3y;gvMIc}%x2|#p)c^!-=?uZ~u+c%QE6-DxC zDa^;?(ZCC=SznRcR~8~WQ75@2k3sl8a?&KGWKj|1*{|{8Nn#;g_qeh*Bg+85y=Ti! zJ@xHRue|W3+Po&@-(yR)*g3K;(2}W|uK#K|lEClpWQoI=A|C6a-38;G{|-5s(rmt) zwN2Bwr1+-`+;Ryd+D_<#{U=Iorg4i7)_qotGpa$BuJ)3a&e+t&vbOlbu0{4wL}*Y$ zd`{feBZI?(e13O|A28_UZCO7zLV4+mSm3;3)-G=43>dxiqYtREAunp7EyMA)psso> zX=jCcip=VU%E>;vpjCVL_#Q}BQA<38jZVK64HA=QqosPDp z%x!BLIz@{TQu8d9@|kS3d%2F~JnJXDd3e5<=XBL{uCJ8vrzf1F^IJGd zIdjcLh`~D^>{PLxqeHk0y5T7@*) z7{CBc2HeT{I~by}nF}H~yid^6eI49jXx-gpy0uGPaJ<8I4!Cz)Ba{$#uMx_KeL=!{ln-91tu$?BqWHxsKU;sJ1 zo+Z6k4%@VP6tUPhdl0=$+~^b=%VZp)cf7#3Oay@F4eX`i@d zCSu-L-mqw4g@^_p3gjqE`c#ErJ;tN)wlr3^rZHvuv}VOUCXED(dv!z-Plx(W@9zF> z=W-85O&S}W{~`(i*9~QVz%Qxn=4yjrnL2?}Tb=zUPad{fT%A;QQ^BbNErvb$w-#dh zIlw<2(>kEVKp_(}8oTWq!E2tZ`(t)o9iHNeJqHZlb%}jKu0|D$DHiT_rZ|6swchN> z52a~xgjf{aVIO<2M#u<$4UzsQwo)tf1Ei#pIq^`Rl8SMoVLhDknt{KfS4NWY%v$RB z0LiXOUW>Kg7ZG6I52Zxs^AKDIFk3^K1ZV0$6dPtKHh1WUMgP#@bKt7gN0NW;Qqoi@)r zHayZPP_NPn8`9Wg?~vk$acAd`$mCd(y7u zb!2hNhj4&OA_&%sU@@*~6*jy6G5T;3V4QvO`^Xh}cmh|iM+a>y0}OS%2o8Kr!>JKr zJ`{bX|M`M@Hb8s!r-fmj^6^YITJw<8v?;1Qz;|Xs_Uak_ohST|l(&L`vj=(Jn_jxmjdj-Q=CXE4h%dI9k3x0WrEIpI7+p?1d+*67)}JS$m1k0Biu>VCq2?FD>*Z z>cF+Ug@-OcIsFeNz={p!YvA}p$g3#y6pW!Y^jjVvXqY(g6b9S`;pQ^l>o;*=$`V{nYAajx-+_B zY5(fb=Ae)zQSwmJK237C8JM?+ztsF1<#4x4NrhmK^)6%zQ{sqc=GJ} zB+=FF7Cr65oqk;VZ*{oQa31Yq`rl{!rVgL6-fXbP5wTMK#g}iKko#g!XBhJ>-5$N5 zj#yt6$ZL<*Lzi~13OlacU&fk7#ZfTo?#e`OzEx3IJ_4W;O&G`LzpIpclwJgXs8plD z?R=w;2$!5^5~kTI9N+~9?dXF2Hr$j_7bAg1tA$a2HTUC0WlfbSfOKM7j)5+Yi7>Wc zZ%HPM;iSc_VzulpByh7oaMLK!Z>rPEbRU%>bqM z+-iPk+z5J^H%!10o{YS=nvAlzI2UfyI>gJXv|zngYz-0>e{hE#0L;C4<>y}gT_L%<_1P5*Z|jFm3AI3uNc zmb*lcsT&yJ5u)`QG*T9@*}ngZj4YJBLV*R2pHL>@*D8lfBSktn*L`mH;ADNB9=-+YM{QXrm}5HHaSo}cY&6K&7ar)(dZU}hT425mo=b-(pn zRzz#y)+NJ14~vPxCi_o{X6&;(0Z&pomo&jE+P>lcR2W?w8+DcqmJO9WP~I}T8p5PZD!>0DoLVtOK24bESFYn;M-6G471 z!CNn?=~+;qaD_~GUFKk|vuA?~>M$lC%0MVc43jETas&a&NtHm#*%CK{!3chV`#A=EcvQdp?4L$B%e`u7mYrk3R#@rHt6m>dR; zh^&;BU7o_%G{T{UU#R8Zv{54iX$wY0@X!8~VotB?6G|MNw0=vM)a?3i#>BJoHvUKj z=|@**^wn4Z2hXeBWUq$Pe0iC<8QYZ3h@E?Bs~^YXzHZFS8#_-Z5TP$|j~TdR%Az>e z&*8TZS^Ja{|4Be|gJ26B8~Yw&FKwZ);tSFQH!%SAnd6Iz{)8wzb9p5iRQ>zZBq;Z5 z*W}qL2B@@1|K<5H;Oh&kzGPo|iXd}pJkl#nHSm+E+p8|t*PFTni}vuT&3ZxTj?O+? z%WAs#Xrr*{TZ&EHemXucT!`FS!W!NFXSfX-?n9hW_}aJdRi9)k_n!_|7FU}R>hywt zHrae#q}{41phs_gx$jLr2OmuH>@fJoVOs+J`)|3B(ltxM;jG21bf=8PjBkVVH161c zQowKDs3XR7Fcob?+nS;w7-bp+n?7z%-kky)zNHJs$D6;p+=1$EEC$@{nC;t*ZgU#3 zk>}oSeWFs``YEcKZ~7<-J`5oIDt3o~W~GxqU&wG^`iv5I*ZsYDr!(<9EQV=%zm@pl zEiEedwkE!)Bx+Q$RaH3=9aGU(@138k`L9v%&yPrb3GMMcIHw!ESFARsIbUL?hAA2C z=l0Hq74ZcHoU-x#e&hP2~tZ47({|M-&#d;V=7t~`yf^@V|7pwRMe7CT%? zQEuVOhj8UxR;a=Jdj)u;H<#7R(hQz5hOmJTVr^OJrn5`+V!x$ zbv=-jbgczsopF61O==>2Rq3Fe#B63ksmnN_kHHp*T(NxOxsZ-0a*zIa@{4d}ZInr@ z+d4gkfM#uAGfxeI77FurHT#IJ&gkC!(OiMW#Q!1SuTRh=P8Fwp_uYzt|MRZy&GRB> zC;T8Q?B|F`5L-nXhJ1VGat7(%c8-pA{Oue%^>$Rb7id8bkesT~lOsS-2DH`F5bI1JB@L7o7`(=80B{qvgs2HwM8&;6d zsmo1(t=J0zT@#f}5_d;9avuR2Ca+z}NPz-0U#&2J;A`r+-v|SgXu~x;}{PUD_+ihozuF=x5eH+e^rn|d<3)Zi}Je$#9Jp z2k?yRH}Px6UXoBT+k4pxFSd+e6Qyhri{q5XNR`E7prOh3OhJh*GP1JEwfZ0bz&`Jpr*OWMKA+5bcji(#lmz>>@*D zut{K1ptq3Kf?2zRuTD3oAXCt+)7xV~V^@-kfdYCeB{HUkV3?Jbr0Cc_`P0DcR<;{$ zxaZ9aG9k6!x!hDO&0ye?8+%N+#1jFr3?u|5q;`}FnJ$--RcFlf$g{VzJ)4@rDF4fh z9&HqD7bYWK1}!tVny!sS|8bW_P}`D%DDA?A9LB-HO7D2i-Jf40uPPcZRQw%eRS@K4yUB1!0~?-3f3@&h9qk1>`^eyx!f%pz9`dY(1mg|WPp!60%4 z7_$gzs*<&Zs}lyC%g~XT(TL3!<@eBF?|p4(O6;&dfc#MK4}pyiv)05zNbKry%EvBM zDR>mD>}=C3HR(}8xB^`W`&+QfaZMj&C75p2FE2i87yn!`_kJa6C>>q!1Bfo04SyJw z=5Ltkme@Pkos$B()S$u2WJ`!d&?J9|*DdjWYGYrHT#2rjyz*>B1@6UW(a36g^u{=1Yzl9Y@ zI$rk?X33bvzEZC3*(h63>H(@ z=^xLp3GWU*Pja!a;C&Ypi9ftC&3m%#k~?|!x+2ewTl@BT%7HyB@@B}PyTTLPycR~? z)E*K`nvx&18Posil#@4a&WWX@Uu%hF-j?$ry zl{INB4y-T;rJ1nOno&TXi+H&2TiK1YZhkzC<;Q>La<%4=DlVqA8zDe(3kLIz1OHV# z+~MVfecx?p9PQCUiwV;NIFyg0|Bt5cj%K@Y-?r6Gh`nQPs#a}c)TmK=(;Br^?Y$$a zsMoo<oiXK|G^eM_rGX#q~XBvYOLla?t67q#0mcZk9DdQn0ZTNUw~-*i)eesif3TiOGV@+ym+1pk_PC z#W>co8HcYsjKa~3gO;I<1=lBbuN!m?+)~kC{Rlsb$ zrxn*^aoFeX$VosVHyA|D;3Ll;m?q{=oSd)_zr|2*Dsw?zmCSH;MPy69^^eOKXx)3v z{>VOZcEZYfn$tZS%E`XDX*7$qDH#j$(Mtf}dBwiJSon4=n^-aYuatUod=j^do#k0F~YOg$r5z z90ICKlYHzdgX%IGlV_uIFAV*eZgar=K4qk+9F`2kA1(dc=4IDOV%2cL|%x7FKg|zH}mUE8+%lEfS zZwtCUD{I}|dsK$r6kvf5UG74cGw$h6@IgQlS5oZThkZ(NX?kQY?CVgP7rfnX1=r9YiOMziPbve#eDswuoD# zm`c=B62Sw0sak&z7op>R$7$cEjD(dO2|GaIB4fMaM6yrDNuY?wJdm4r_TpP|#XcN% zk%Zu@+b^b-p1Xa&{;mJ;fV%r|jON}k1We`m@Bg9pywWi)o{^;bN-io+AhP}eEDF#! znG>$H*0-F*zwadl=g(a%8c;X@5Cw-$p3z;8nnc`Z;d}iFVP3^23y#!mdY}vWERgEE zbNpQ^MpBNp^V=tu50zxaT*BcrQX;slsi|Nw5nS8U58%f<@lohk7Rf#|QQ7jSAOg~A z`3P2^{78L~o<{eW{>*&-U1qx`SjwBEms2yxd-he<5JO;fgP1j>8;o6%sS@aPM?ft5 zkN0|X5zA$l9OsxYFFTece}&<(7zyjIpC6atMJ17+Ke4^#jY9PNl2p%4-_nJWN*|G5 z4+GrC{1*|_wU~LLzt=hsvBj_O!o8oiBkF2{XT;HqA7h9#3mO!+`$rCuVZT!!<+MUX zo>4xBb7Pr0IB39ucuZ38_SOuGlLIGR*nJT0bJ?4@`Ie(;9|m@Z-Zn2FKacL1B*Kn4 z%$L;IF%24gK`3*D6#@UO{bxA#`ZblRL)z18o_qFc44@Jt8eJW}oiWCJSb07(24xTZ z^y{Zg5bmGU!L5L$xU?W|voOrP3xPpN{{pN_jKZ?LXC{6qD@0RcfYp28pSZV86n~oW zch$jgijQ#<2^AX^WaT*HJ>R7RQ)qHI@!?S4ZRcMN544}$HBLtD98Xb^E<2&iX`}_Q zg;}fwAm-}Y2JSrr|2q1}p@NevP;Gy!K}t9lx1it?^Zb}RDa#l*b8sNluOBiku6J@4 zP3}U1=H1j8)$`v5&V#&uKaS*vSy+uu#@%1DBYvjlxeh#Eme6L?PuxmI(|=#B$L8rL zsvE|;6ZR)|IEBGFwLp4xlHNq84(>0z{JJajhnGHcN^R3rjc8<_Vw$unC8`H<>>^-c zDu(d^ahbd#wMM*ic=;4U?~G z;NCCQR7T)uK2#vRGuUJh8?Q~>03$Tr=hx4wD3xY|?UO#|TJ)*5M@^Zxl15188`#YpIuEl zzmA#Of4Rw_p+W(JxD@CpsrR4kd-uYM?9Ps7oKHnG>y)KtKh-4p9^c1snt#dpGLDPG zi;)ru^XkN&uJbkd_H-k6Y5q5EWqqolF;~@lUo31XnCtmh=T#Ic4_l?qSAdlA^-8>D zBKcP1lc$HGvOkXZIWKPWF*FGUEh*#aU~h?Rz3OFNWR~$kUZ2#5lxAHjv+pW12JZ}2 zD184?>iv|(V5QKAj5c3qISE6-PR9h+UHOysqxoZZKew`bNUS@HFvx$uX7hYr0ev7h ze|CvDRNrs!QTesxM?#4mBDgHJAFLZBbiGZ!(|r2>hba^SuOq&|CE_~;;3)m5ja`W@ zt5yG2l@Rm=3ts%qYs>z8YONaF*L%sczaJ$gDx0`6U}v&zK^->o;H?grNHu{C;gq-{ zi$31KNu?%EUDT!1ROG@o9VPUFDa~g7bH6AL_d74l7zl6nz!IJMKF4Gd7WBPg4{P2- zK>+>nh{W>O)1wzARz^uLnDbQ)=Y>!^OW1IxZwj^>{^?r_IZ?__4<*9r1?A7Uh%J3F zu>EA>nPmg+xbD@M8a>01mm-kGa9wy}&XaI$R#3B@X%8tLovy)vbNrL`! zzX#g!_HuHt1uK#Fa(ewZZP2nnojcO}JYmHnpcf{irJX(##71a;7B0KCxA^$L4W&wB z3)YAwAyNKZ0)0C~4%4!e1q*eE(PKMXeaiCox#epPLog@F?tbM53i} zg{6u<-ELv%O&pzb|s}Kz^ucj9p{WJ(Z$_fZA~GR0Jy$CHCuF`v>Y~mSRYh zOzs2{2@5=};vb&P@#3P#n|nd#ssP|Xy5tZJPpdBRKw`jKOMv8Z`g zSYJ$ezyEX1;-!UaZ#qP8E{bZi zM`J~NyC3&W7q|8MgcDnV(YQ3-@KD-KLfGwfj>pkzR=xk_x~TtQ>X^meosL{zR9K+) z#WSrnmBKZSJzu`CZyr|C5g<%j9+-tbTG)qv!q z@PW5{`4C;RpDYXEfxX30L8?QV9BjR;nl(#BYv*~kUHmHceA;PbEOc1b+VWf%8WJuw z7B+DZmozLd{aBC~aRXPO?zT&{yp(R4E!Gu~`u;&fxH+k(`XH;_D5m(bS-*lEDJH^q z1wo`+ak8N28@7os~T^*Dax!H#?)dLSNks_u7S(WtC|9u9mv5OUN>!jfDgUi z%a~<6M`96bJFAdDeZOs4eE&P*ix7=NNVmT6ilc{}73-F4<4Bf7@RfGOw>Ng~8~dfel?i#-&qS?US6ecyZw8wW`D?6|u-=8B3nha=Wgv)U~GmCGsrG z(B+!z1SNf8f-B|iY@#OS`@a@_JNRzdHbeK$Ykriwc20(wLZRsjV;afspnq% z8#j4*s5x_+D>@oiik0_D%FNa`Z)ZQJp%nQ*wejV|xWg0(<(mMeD>_y9PKpa#;XW(u zY(~0H`q^lnm8kmuNgFo0#=)@P-@1|xwx*+EpItx=lhKi6SNMVLmK;BfH(nUU9#oSg zc-h8-8)SBGlS7)J6~tNQ*ERmV;N)-cgIuc0+;LX>@Pidd1f(ldFynh`&C<M41V_cRrJR`%(~cIh(qHZM z53suW%k;*MISj!>k!nIVg&vT4*-N^{{&ztU7>aZ9IPK|@n7xt*&B|ntbMvU>Qj^J8+RjPb5Ny_Cf60ca#<~VNoU$C0J$Y62Rpi=_;@i`x2 zlX>>db|849)#aKkjZ!46FHBc72A}xBXB`hzO@93Xdj*N(O?Nm~f^UMJ+pc6kr9wSs z!=|RXwa{a=vN*x%bvGk*QN;`VyzglY-3`CHMPbBUUbG$AyNAX?9kEtkm9`_p z=*3SyLybCe(s3?dG;9}l@W9@mVoX0ab-kUSx=rKWle@VkdS~5iX;$c1tuR^b@^PFB zqip9oCK_IP4-bB;02_-U7GC;7O3eXTn-S{%WFdbw@tLO1R$kM;D}<?vMnBDn#r{QPXVjuW<~;I^wfp=!>R>3sXT}JR{BWp$7tfIA>O`8kFpS)u z4*Gvu05gIpcmvf|Pj)xujB9xhmm|l{-7o89(Hm}_UlL)lY~FF9$YjjYXn@-KTFk)a%Pr%J4TUxmp@?JZ}pKGNco`p;-TEVcaOIN zij+zk-%-ie=VJ74Qfk$;bXXiD$l~ix8p2B)fln>R6cHC`GGL$0^+|4-!vOQB10`fu zgt`knlnHxhb46IHgkT9oXC66I%`yjN9E2NafoYU|0S8o6d@vwcR^VnBG!Yw*U-DE> zkCQN29g@&GRpLA>OM$HjGrMXWB~Nz*T3gFDskYf<;G2)Cdhw__?E3l~OzatG(#7f< zF%X+pzSRcYU~>aXq)A4AE#*`XFAIjAG2749@VJYPHhNwd3IE(31=;sjl1F!ETKsIu zDN4Nuu{Cc$WARY(5eM}y@$-*8HE6JfVj_@^0Qn>R2-Xn9MfY{>`G=E^c^zhzW*kS^ zw=tzshi=i0pL+-(+VP_eVaWUw0I@7qjXc$L_3c#&6Rs;YHOnGveuIm|BhPtS@>tI# zw=<6zkFed_J7dA)&qow0?c=P+A3K}z^_b0ba`;Z#OK-mA?U|T26MJbKN~ZgsRHP8| z4*iIobE&_>z;BY&r{-1LoVGagdv*Cu)xOWyU1zc?Ntx+Qoaj6T5Mk!*)OSo9d}Au# zWbcmXHB@D4XAMSd9wP&^>Br5}Ih#hYuP0ttSvKgV1uz6ZHl+el+?^WDj~+< zJSSI3#_B(fNhlqss?eAe_{9i|FH;^MO%h!-)nh#o&11saBu1&kiL5c;2HqFG!*aYW zBWoveKe+5^>z=xj!-_!Wr-Px+H}1~L&9V{-8+Z&p7*nZ^c-QS(hjr2``rQYm$R~Hc z3!%&d%R|cq&`|5{0)>LbZkx5M3|)MLi0eOord)Cl{9@R>u}rf>y~u92KQnr@9<0Gq zL_++MN9L^(%(kFOby#Wq==URLrZ{-zBN&4meNUew>#Ge0SpU*{E4FQKpEandu@LM` zj0h~{j2RVa@tUS@D&c*!y|cae?`&;QNPis~g_~zYn*hVG}EK&QTuY-0< zX09IyBRMw=B-C*sE<+|CQ+c=)X|+xs;I9EK;DWx9q3`=vABtFArx5X177fi@jAfM$ zOZ*|dtl0gVexiE?)8gWEOl0x~&u+_Ab>km9?76xfTP*-*T|F$27CKr=X!NVIRglQ5 z$MrIC+FQO`&luRBrz?m!U&!t>Bf(L;58<|r-?9knu0n`6b7tKt# zgc3voi1y!{fyoORUE*#5>ZslK^$qK>ssEu_c-w1^s&Y*mZQJdt*T5GYmGMcAN8REi zioagfqF2f_L612|dVc-1(KfdO4zHyp-aDD@#74BfD;#I7K5RN~o+}rOsELgKn1oXY zJ-1t_aRhsLQz5C+Y{pk5L>hpIDWRGhzH3hRI3H!aC^#p_+Pk;F8Mpd(68S`SRy;u^ zAA>Xcio@qorxz{LjKWe%f$WGOLJ%Yp4;0$46Ds(hzHzOPE|sajlNe)Vf8V2=vfz66 zgy{4~68HAf{R*2!`WM5!__989njpw4hOzgg;Kz@ni#TRJ$9&mP@~DiD!f?q$t9}1* z4DjJ_x{q2@-yB1`S2xzpe`fyM+Nt)|%`84DV3ubW$g2mb#1W~wY9w# z<}n*b1}FK~==Ts?^rPwYD9wU^gh!?X^`r~!BC>r;~cZh9F1?_6SeWq8|~Mzc9DA&jj1A09Fz;}qryz%hJw z-ycgB4!Zp5bwm6wXK-N_W_T_ES%i>`4C!rgE&jMPjzT+JJ=!-vyr)TjQ|Kw6({NaR z4)JbNIfM>O3h9+R;rl*C{{iS?L9GwgF?daL4HKK;*O3{E?@81aK%obmn5CzErk0nwCf;qQWPs)gOYeV*()T2$#6l#VeFq%sC1ngVN|Ar%4YmeSnDwQM05RQZ|!k0&z|>3465c z!!sDb(T7KUVW7_hVvjU}F#T+N{JDp3EjTdDTPi3B)EBC&u}!lVA&8*z$P|ozOS`47{9}YL zSHRt67J9?>22hQ%8;Kpe1Vex;Yp_+HqFoyPbdQ5cB2W)M>iR>Qu|pndB+$|EYU!uS zRvxN@5r^)i&hVWjs>5w~XklYB1pM8p!ol6xHwum=-UJGIo1pW)?XljOZONZ;EE!&n zuL`?LHB69chwQR_$zPazPVG2RjEv;$KPLo{G9}(czz3F{BUc3cHowWCRQ10T00#(Y zmLrw^@*`iq{f$mf(Vu+r$JcaH>LuPuw35DRMLSIgPO(#~SYXB>SYJL$nn+;_FMHqF zJIiGg4}5-R_ABHb0$;Yz!g~HLsJiMvB3PBv#;HO9ek zm=LPeJnnE{eZltzz*m!YXPmNRe-@Y@y^VpF-t71+Vb_gi!eCy~-jlO9Fxrps_Ku{L z$+*vTUyxvr{9BB2+_?RXtwFE&9kKVnv!*&>(wX)qtJpLhbp#p9mzc3NuNAtZHEwrS zbv&;o$b^Lhr0e;CO1aK&taiX)jMfHbVf3prrm>H4s}!lGW~XQXZ)zyD0JRmpT=n_! zDKCD4q#Q-BIS%_(at{0YgYx?dOZ|jP{(Rie+X*1UzL1H6XYtXf=Vl|udCFT>rnOsk zSd1~n^S_2i)v}y41<^|8W)r$N^WsOBKiYIg+mKSyS^y1gW^`4rUq8z3iq6Z+k3Hh~ zGmJNq2B#jiJgk5<)M%=0{FU0VzT07!RvvCql#!fKvb)ROYb+AbtB<%LL)Vm?x#?+i3AhgW#?KeD* zlFbC6?%rX68}?W1Ad$6n!+(o>&V_@qZ7*Z<;T6yc0xtFW?a6eQ<* z<$If^Fs3sW5-~esC>VfSLhmd$Dv zpmK7NL~JEOuuqP6bDuGBnjWtqB5N}g5^wKNsLqO1_W=CQD!4j6HOaiN`KAuWX~bhL z1qjHC!}Ny8av}{eIo*+6MscSI>zt-QwT$9&|CH?%-~UiJp&jp}<;lsS7l+8X?49d~ z%OGHP9#YXWzo6)c*1A4DcrgVqUb`IE>}`s$=5b0wu$#Zh-U0R8euc?pP!oDJ-O+AOBY$@oQXe3%THb&a*Pw38wM z%cKCiROSXVp-msiLdDbPB+PV*Ynt?ebAOC)BR>|dWJDiWn5ylMFbE%1tpoirj4ItQ z^DORgD6nlf!&1+Ge_X5LgZRMJ(-1*)>WKRMorMiz`-#8flUp6jC9o2e|1Jtxf=o_! zci_r@Z8b3w$~yS`I?~wj+KebVX<7@{-HraSCogno%dud_@YzoX0cJL0Vtpr`=fLj0 z%~|L)N3qRga^_6fPh}Tzan1e~@^vB>E}&J%&EH#7{yh&JTSbi<7c4ViTc9gIxH2=r zs))3-q=P_qm0mQ`=1-OKlF!f4$h_SP;a0HKEasPhmzk%A%;nd{moeqAHFZbc(I(uk(K{v zG(bYEN^T}h4f(!F9nKx9bG>~b#9=pvP;8fs9v~DRRCTa@&sN0i)kL0xTY+ZV*KmmO zje+-#fJ8FSY(G-%NJghx#TV6i{f7lnv;NWOFEd1mdDS>yU{>DLQE@UKKT+55T+%ku z=oM45Wt(UB=i*hs+A&}+JbQj@g(^c%_>mWZ|Iy6Y zYTajRg})Ql$h~7nVW$Co*n4dSNL)0)41uIrC#=*GHDMc)cn{al$IyixFKOCNy)3q_ zh^|Ll@iV47qxqPm6B1^`c*4hH;|&rAFQEfmtN@vhisyIY2vmC98(`-BuLKgUt+Be2 zT(FKIk~^$2hK7IVfoC=`bdvk7AcvOM@Do3~s;m{p`i%!2`{G#VM6U3ZKg#-oGa*rp zR*`;~Hxja1@F$Nlo)HO`bR(#G&2OQ?4F*j5$~y*ll)wfpsjd|z7D7<}zk+XJfbA72_cDUCG^t$>je|yj}?pRQ!FMwR($O! zKAX*`fxe|vDVKD&my%cY{TnmTU?1U=>R{jXnzkxO)ON9h z`1FTC&>1kp&|~=_xZgrAxfp`3agDlPPMx2fO5WF0AcBsoU+l;~F!{kH=P|%J%xfBG zN(5A7{#mh{<~+i7Hxsl zFQ_?>$bIdf?gl-Z-^j)8*PK3(6N3M{S?BUn^P%qjrC~CLK669qC)f(Cjth_2xRrh% zx!2DH234C-AiKlIlRB*f0lt?Z6y;bznYoHUF#=}AH$-DHT*V&2A3V&vtvjKT0t`S> zQtkMWp==BoA-S<}g|1g4CX_ea>vMx7AEAm|&8DswHs-sge$y9h`tY(!koJuD;cEFP z7SjPI$}{QLl9pk@<-s{Nm<%NnR~7R~%J>XcV#rZFDg}_^ZL~FO&MtCQzjGS*aG%0t zh+XEvRPXeAZEefrOtamB>UG(g-lRe6q~|ZTjT}-0t6~gIK4B?KB%3G%a!@f$LgLx0 zTctr0k_Z%)oKSVFp?+WWXva|WU%*K4IPh+$6ZDC)`SOfg1Xao%4)->=SxfI2o$ z87QkFh0NPtW!nbO-&T_Fz|O?WFvhjTxLJ@%${N;eRZW34!ISx~0r};nGDWeQO9Mta z&XYM=I?G8o1k`3}ygv+q1`@!YBr-W9xU+@DRd>1g;8TlxzUEN)BqsdPD@s5-`~=vK z^QgmsoD0q8t(#Io}fw?e>d-yTbQp8<&QcnPk@z)9L6 zi2WZ73^HTtKeP_U7R^Z0_$n!>(gL*zq6AUzZybaBlOzS-0gi_^BB;6YrZahzdpg27K0rgm&s)LkZTZ;b zy^JrXGoSmiQ{FEn+3|6) zPZ25op9m2ce~*9Pe$IlwvyLf{y?K+w`r+O~Q3X39_J?i1J=n)CT{N%tN|6$J!oFQL zKaIRA-~L!%04NYry-AD8PM_I_S=kd2S&Ni|4hIKz1JA|AwhIpbWPm!tO*5<8OY(ka z7eo!kO%`TwS%(to5yV&|?vSxxN5C}^c_6)d(e9gL+S^xsfb|a-2E<~>3IXSmu4&e_ zW3uNj(=HuNrq3Rw2QjHQ{9q_P=bQ#&7pic&oRFI`%E zTE&Q|F;~r2p)d=KU3^;%2U;`50{xp;Rw6-^+>+YYoA>6x!K0KAtt~uMV7ydh zjDuU`Wm5s+h+qhm0q^ z&aRH*+HX|5BG1u_usMbyyS*N6G+e{)t#jJQJ{OV!UMG zYk1@e4x#E4*uPrqq7sUN|8+w{7kF+UzKuVGQ%6a$z|uC2FF08Bz`kBVb&K05ZLF`P zB#(Gy0mJ(I=ADw;?8Ni0tnxF02dsr(sws^$u_FS`8E(aTo!vYmtBm6%=$26*+mp7!eZ8i7^2vVYa5*eXJg(8nj{tx60%oCzfCKpT4*l+WmBGDPT zx^p%syXK(4k-v|a#h67FdKZEw?Ht0GI%!f~Qn6-NLKuA=ABd}O5nELbq zar&3KW$vsw8Rz>>$*Z2%lZ%(^71E(aXPWP5GHm*K%Z{G|svSY_-IiNFYKZG-olOY2 zeCzg4Zziav>WbtnyYV@eGE((z6ntRKmTxr`Xpdo~4H@`68$#a4#mV;eLN%^Y%2od{ zl(U`*v6`w6@^vFr;^HVC8^W6>l^ORY#GVc`fJ<^vc2fKhN&d`CRvtzaCG**{N0yO4 zC4kTv`rJIS@b%BOVMuIAXd9lQM74o}-BH66934mD31V<-UI1Rb48CIjnY}KxTj_0L}&{;RVhZYPZs7M=u@$ zf}N@?O%7OxeHtxvDfiiAT=4xb`^>rkvM!eI{o6N($MT(s!B&7U8I7a__VxurlVelV z8qmve%7Pu&JIc`gflI2k7gfR_6L!nEd3)-S58FPp(!bdH>$KX#hsEGtSF{%MZ2o8= z$9e7K>h|Vrff~NpvV4#?_z^xlEyGhwwcVvF-<~LtRQ`HYTx){>cvrLmN8W%7e6Ykp zY9|1%Mz@bp$x;1EKKUE`jL`e*sb)ZAt><=ZX`k-oZHN_wQv^Lw&meQDx+<%9V%BRpo`&F_>w{^{I;!alWny+hd%IRVLhVjq1LeMO zI@0I|M?sHK2CRgd-u8LXaA|D?y*PLvQWO&*P5+8a#aLR@`f&1RuAfVB-pRtOtUXen zfyPKo!w_o7rvGUzg0s3ANIIHse9S#NTN(k=W1tJ1YaCA_wTs|%Aq3;9Hzbr%=7jJn zxUONOV5yMl@$Py{IPGvF-AlfvM5-Ojn6s)IM*MXaQZC{Jl#a^b%7kR|D=22ahVR~p z^UMREH#9rzN6BBmj*62KhY(XW5hU-Vjwc(n>%6aKG7&hpus0dg2=6k|7U90=WO#ht z;L^}+r%560s0<@yp&zbL3u|)5WdPnq04|jyldA3M@YQn%z<1q_&iAtU0-v(q6Iv`$ zm|tlU6yzDFGgq{m^JyQ&(iFl8K8$ zxlsmeoEEJ99LA3Z21KO2S>QC9`@`rO{%a^<`xgv2Yn@U6_pny}z2?I$uvF1JCqbhIr{4Qq=3jjpKFruCC+`IkEbfPV1; z6nZ;rYLVIYi;>tFV?qeVP!Mee(7kdZ1Sx>%h7B+jvY$O$h`0x2-Mu~nj|!S52`IR{ zD^E8dFzx3`wLyn3Sl5PB|Jy>7T>xulZXJZ$?S_NMVby5OmV^sjKaeo~nzpG?3eHRR zS;)2%4D6TazpX7!mtpIXUzSK=gobWt zm1@RpzKVcgxhX(MK^gty{fTl|mBWmqgRrpw3p^$FQP|x}9chfwKcbEzcBbGLluIoi zr?j&i;F%v^nrCdb5VO{&7hh$B>E_?8ayfdgMg1DRPNps>xSjv@@7jg7;TVu`zf`@j zDpxA8*M|l&*@cUQ;#NsvvD7r!u0c_g# zz%u!>`l@DE)HMjRbQ+Tw3)z#%AH>mz)I7cKy{#1O~k}`72S^a!H-(cbyA_YIG}2( zcN_ULVG@sq#ZCean;k6)*4ex#z;7Shjrx`g&_p~m!`dE!( z7VQ+MV41=wgiT-ZxKE}nsR?g*e-yep&>s@9GGngHI4#ZISW z3@8jKOd!BHJifsi>E^1TinB0_>H|-%l^ZFd?|_*o#qu^SnyTf9%!2`4V6-+9WH$tnul2VEZMG zAtzFD%=mHV3=Gqn+}zhRyc&vFU~~G(d<3BuyR)h__6ul}c<+g`&3N@C65C4rsbV(X zkpKT_0g&8)`dlA4tH!%u4lc#Z;=AC z0r|`L_Cv^nT$fvnbK!GdQk6qxhnJ)jglGVES&8Ko#0?(lISgMJu zcNE`_^5b95E=)~VDZ;>jzLfm&OIIrrQ7yRg3TlL9tpEIk%NN+b|xLIq>Ua8gFY3BK=$ zMVNkM+upSOS~MeE^~ciTu=Cb~BWU<;-gE(7`w)>NJ3pM?}R_I==1K&cbH^*7)L zL}qW81bOc%dmUHwPkI_COWVG#M>3J?=x{#eqPJ4 zEyl)orfO-xNT5~)qzO?f#&C6)E&X?+N- z*U~IV9!a&q>TKI(X6K<7(V1c3V}P0b`FR*ZGsE!lBW~A`j?gcG&BcdM42J8?`j$7p zLh;A|)u4^t4l>vxU@UY$Y@asxxj|u=CqV8hqF;O-TZyam<5}g4z=Q(w4tVAcu~ES8 zIR#ux2-rgbOLcN$hv0Gp^`KrYpb!IA`CdauahiLzzaFm27EoQsjGr~pJ~=Jwyfc^?}EHES(00H3^@?v zX|CWleU++F!>S}Z_q1q0;-nuz!`%u<=_9H}OY`G>5#HF%lHTDaN&>?pHKPyA+Lf7)8cobC%{M`nVw(DRl z@Lm>{-mo9D?UAPkc2y?>H(?I2Zz3I`hFk~UQ3wX;flG8_!DqQcuEyGkJ~U?&m8Tv~ z<-SLx;XHJewVE@dF+35;jN~)ee|sR-cpB~art>>dVWS}ak1K{apAx1s4c3-o7Ch6OLKtsog^?6tS?#Yq=hz_uxVU9fQYsXP>PZo zAz6P%bzv2Hnb9ol5D;Gp_KLp!`YDRo_FQ%= z$|nrt>-4Y7JIi!;%PH$VoWYOXNegP2Y2A(&B|DC{m*KF8{KeGE!h%17N4o^DlI^?B znU`2+KTkf~$1R;cbaf>i0=Mk5%j<`IVZ8`=Q(MyLr^MezY@`{W2}mJ15?el0F8CjV z_`s;5|2_jQO)Oc#OFk0im+Q2*^gW}o@8I=rV}Rdrb8!2A3oJO!W{EAO%iWVdDyfI9 z#m);5sJwf1M{)DcELzT3)a4DtnENODwo{Ql!^`m4r@E7Y?7TDIIM*U4_^Shs-f78P zW;CP5E@|+z#ypi^fXCDsy>lE-W8ldw$QMeJkuDb-CLc(C=ip(}NfLwswp0WPSilq} z=YV@p?nOG%`Z$&5XQ-K3NX~Oxr}byVvv>U0i$TQH{MCwDYtPR{WZ?G!@_j39>-rNj zZwaXn1M&1E_|*nqO^b@a{v>8b7H;IxyxDN0XGd5?E5E;`yla+EB>HlwyqpMF{&ctm zd9S7LjJk&dc}`|%_NC&B;vNv8@%D@1a3LPhM0UOdA93F{a47swm3*=g4HTx zQ~??TSC#h8HsHsLhKuQ!`-il-xsbMsP@K!BIs@}fI-xRyQqsBY9w>dh`F#(?R~P>ZcRA@~Y@kdwW{WxD&dSLT1jQ{^6v zV?M{MHnJXuPOa^T8IybX>2?2SMu&yBT-OjPIOMH>_O=d3gY`~!$azrLu<@X9Bk!F3l_p$}02 zNX%UpfTVC6bi#<|g-d3o~HT`64lss4Sez8f4Xwc*t3p66$rJaC$=7=eNa;+mm z0iD>+0b4-5sF!kK<VxOI`YX5x1=yl`~pji0JkA z%E+|lf^*ejX^hGh49o;WVs@%sfK_ZmH~8@r(@rmu zkj$sW2`iBU!aGfaWk&j1LGP;)Dd@+Y0*sy$Xu~iMP{)8)51A2={t1>|l;@8Cs>S>m z(hGI>CjvfUAkO(S?Wqfh;4S8H@N@P*rre3-u{AI=ks%OuP)^sPq^HME4xgRf!hyf7!Kw2!w0n^d z9Y>-~4$Uq^qC|6saKQA9K{)S9bbmHI3$nQ~;}C`@)E56D#+8=ZpqO@~Cv^r*7~x&p zeCC-SJ5&7QGCR#l8QbMci8rT!N~4a0ySce8Zn1@@7{n!6y0}D5O=DG>nq<@41YB9n z=AM(wQp7k<7;(IrVvT_dK%j4SoGw+_lXcH5-eN~vWdz*<1)A{1+2?)-rH!T#*}ds8 zz5Pb96!dI21#Dl$0DSq+W^tLsypkR=QIsqH^%n&Pk}(&I0rkDiQdOUd8XNw5NLldB zZ_)ekQ1ANYEq2Lr)2$-xroA*-cV5~W{_hgYCxXSU@bcf7!D0j)I0b32uwuv8+xB0_ z!Fw(OUPm;ou0E0?ggYts&q_6Y5JtyFd5P0NR(XrCK%@mDfxPeGYQShj*s@95Kpa)! z!s-6e?{gF2m4^yvWw=_hgMG%Z9YSpnaV40%BH!D6S#fZPswl@=?o^upy^x3PS)}U& z2GC7h{Ee$%a%I>Aw& zOOVDV&xs}fQ4>1{EO%L#k;gsh_L#9b3=%J7SU3{@PyMWD7^b*9Y3a)h!vtBft}P^z zGkp;852U-U@#tTfTc>Gw;D8CtavH)75}hL9^Ej{#mI))a(w?@ZNs2mPxf0Fz(#DEi zoKC&|ubk`{SYJ_lJL`|AR*nXU4FM4*`j-RzUzAEt+Q-fMg0Khzmu6{9WHCEz-)E0b zM$w80gSRbIG14%d0{$=gjo{}ifVh3Xesq*hSpoGLCA9F|#*;ZlUem2Dcbu>d6Eb#Z z_n`$IWjEs{cI!u(p3E_CqdXH_9wm@cNQlXo%B){CFR65IKu!F>EB?kcBviFP0ED&t z?d(6f_S3_EH_W!G&x+}Kp)APs(O|g;BQg110}f8e%7>|TfQaA*`@l2XNQ|6WFJ$lE ztzW$+Arn#0RANC^Yw%BhjA!61rF!&}YY7jZ_ z=@aU)W-g%$CRy52{N^amb~pn4CW_9hoe3PEV0z+O3)Q2CzjgSZew>%w}*occC2Wnp%55%2&8L3e55N>qM?QpHoq z-kO662a|)B;OjL{Px&e=AXt~wvvBb5NSl62EDGKge`UxEkU`_%E`4n!lM4F>7$G>p z`PG`Yo>-mar9vwZv0&#jotm#nS}_EZ_-gW8U=-(ZI`dB!q{$4Js9`5dT0~%;vCcT6Th!4lw=u=X%a$Y?Q7#8GG7p^|@6y~byV$JsKt@~R&sCYR79g?Wu z=!C6GN<}6n8a_LYSD7EB2sFiG6j$p*5U>i}CuQX2o2JoqPZGS{P;^)dFqOR7eP&+$ z1n*|opB>pbrWo;ye!5>3QY(_v@xap34M72o%{?bx>a(M6gMZ!LxVo&fpwhr8!KR4v?zDVQi zb7o)jT@Q9b!#`C&!$W2EngruO2^F3dm10TK+sgw{UQVbU90{$NTgBM?aH7D`{2O-l zNs5FZ!l{pF3+#OnMP`cNlJfQjoTK8Gg)`F;Md~NA(-o!HyTWzSo~IA^aHng=P-@Tj zOSQo>RwinH{1%3~b=(A5icc(^F0XD#yGMfL3my_mmw!C4!)a7m>}cZPK=zF^CMz(r zp28+0UuXptvC)hZ(f8OCg~uD@Id$W=OF-+D@sr?DVv(4AHpr*MbfW_(aLMu-T(XIY zcFcxNh+gphJ4c@pi|BV<*sCw8W&si(s+z1zUKx6B3jfP#{9E15B~s zK_P?l%kQl^I0yhc_P~%#)ITyMVP;i}1*A*xkPMH-_~mm->0? zo#MA3cNBrRoAG2NG%YdofCU7`aHr6K+1XQ_7ScZ!-WerndDY_p`{pR(BK7&&xX3u!wj_HGJ0$xOp*a4p6LX8h9+*H3JV;jf`P8XH_9vsr3cx z4^_YWl#QDPG14(W$8kR<$0;ycf;^<7V*O6)PrYpx^G3d|S+@R55(^r?XwNu0mpGtu zy<5((4j~zPA+)kQec%A39(_2q!vkA~TzV{qmj1Ce`o&fQI#xajkiEl;gMU{FFh+eES;Xce)j-v$lQ+}F0FJxL z^$JXBy$prM0L#lgZQJg!uFYauSZM@aSPkc$K%HnA?~ajT{-y~iG8wzt8aB#NHUqK^ zVgLV$MJfLHcs0+T?S3>6sqhz~*F9B9kcIFHDboQN1q6uu80UP&vW1*`h>|{G2H?5> zZO2jrDf7hu26voZXQuR90h|%d$8{87jo}MYF$Hjh*#M468pse& zomfb&yv5Pd{{YKx9%n^{I4SqR2mJ~2))yUWcKLNzQ#dWpjJCqXrKBF;-cuE<~PDN5>WMl7Rp9W>W;n`tfQ*p7?r+w;07zs2#FG9AS z@J|C-!34Z5LA**b7PY56&COubclRYkwrSw(AWL_+mi8QT;Dd)O{%y#q8YAq_yFbRN}{eV z=Rj)i(|+2_S&4sIP&9o^+A>}|J?uyH<{&x1|454-BzNPGix;L7_y|RR)v?Zc2_kG! zj^{S1wH;i)&#dI86t4<|#k^MkCK-6{(`FkcT;y1-^$!3o40KetH=af78>rT5mt(T9 z_`sOMO~7yPB+`a*Xwu`4I`ijq4Jwt;B~xXZ7lCa3E~)m15loY>7VWn)>fT2v=gjDF z<4$BwIvtcr4uUzOfE-%SJuj-|<5f(%Lstd71kcD!(1;I5MNV%I8J4Kq5ofl(5+a%E zN*+E=nb*Otv9LgR|JKi4NvNp!FmmN9B>r?7gNZry2qWG$zpbQ|=0$u4;zn$IOmRTr z`|>USegFSHY@Yy6F7o-Mzj@?;HuX-r{bXNWd@|dU{xqI9@EK>Rb(r9K12|^lAK%CQ zXSULmfBJpi2f6ykuMB+u{)$Kb#lJ?MIrCR~{PN$x7-vF6^Cmslm(EWQ4L^A4dWlA1 ze25U%@uH)&xHpZsku7Jy29qf9L;NkEz>@RH_5NP}bp2Oje&gk?kMGU;IN8%I%0FT> zG{gvcxvh(KvJPRUS%#Tkhje$zvnw}jz$hF;z|iw=$2ISEm)%C`NagH$_dF{rfO)2< z8Uh8p^=5I^ZP01}pE@oH72h&^uEqJRPe|swLLpwi=^mEt;MKGIkloT>7(L<03~M}L zh5Y1}_ZDLU8SH(E08{zke{gZ&cFgRgQ&4t=jkOxQsK}tC0wMKC99Af@w2)Urh=mCt z^u*J<=zi)_C14@VPmB78tO4eiCQEK2*75P&&|fL_oMV5d-UJ#(4v<&pZZ?oBlVE9r z?yJ%Ov$!Cj zDJ!XO=wh1NEs2vfLdQ*cOnnB>835(`S-`&bLyb?`Pc;rL#S@ zK#Z22XOeSh{llNNO~TldSmZhB>;$~fsJH&7NBb977%Z;!w3x{8#UUT) zQTpVk{i~1<-CSi$Z;f9-AH@aJA7+UR-9n4JX=5SXmk^eH` z(&=iPERLX0{O9)B;(uaGa((Kg|6EOa>`6Cd;Rs3p|Hdy#)e$$+k`@PmAIOBmZfVR#7P%V4qvo-7|3W}v zvvLSNW2lSjJ=o?8)xi-F5^~@m!~kJMR9#|(gb+E>5+EKXUidg(0L%EsPIsLd9#$eSyzsVo5LIq&}fD>k`G) zCS!j2)iTq=(QM|HHBRgFHexg0-)jxgZqcKbV%#|WY_j*w?C zw%6^CY1CpvueV~AvpTA2e1y9GJ&z%^Z{_@wYPt`9hE}N}Zf{_GAv;@CO=gpqsB3o6 z%itQYp5WI>-5i(v=e*AHo9m5Dr`VvNbaeFwk4!n}q2=(wavjq{^F}&VZDJ};{@>CX zXm9Q+-Xi424%QB^_DTpjYglMvx@!sIg1yUhW^|_J6++dcEOYnjkrj*p|7;;wI>9=a zKQnDD!$=Tc#GgzzTRL!Hib=9KNp-*>w5!ROFy0|nD4<^c>fS4VN2>_)^(Oh+mHjG{ zjAvqFX)5tDz7C?beu~U#)>hv){{#%(_!T`W;_PjRI?vH-uT^v?S`MA-*c631YuO-lN)xIj~5vrCH zco0AedteJN_l9LL=6!_)WKRkUJUj7OJId(-I49xUCIUO*M|IIrDQgUcno6+RgBl=K z!m4x*Zk$lEE0L*r2L}w$+=m-K8Z4~}ijES<&jge6y1hwD%S7?yoDrKhiH>u;yu8<< zY9hFkHaQGM2f&NI@9ZArki&LnS#xZg15MIq7Yud>R2X*dDU*^L8$)e#gEf1`%@TJlpXmbWY()ZSpROjMMSq7C>H1T$h-9&eNooX1WI}ba z0m_LWRyigy;*$ST27{bV<8LlpbZwD6rGi~P4!Vejf`U2!ul(y&`FUY9@3UWxRaxLf@5c+K30*38R`$P`5$xZm5?i{0q6Pgu{tYgIUXH%Ua5jU&YSRx<%?}ha z;wP~`uHVd8P6mX&Zc<2f%-j;J(V=JD8my16XwIH{PwKea$Dl86zn$Q6)q#R(w$Eo% zLnrYWzX|ZTSi_3G3M>L3)i*#5N0kq(3I9hy&Wgmu>sc_X#7C&5{}?e&)Ru!!y~*w8 z{{;1hb&4mQX~~>u%a{z(lW=qrgY_Am=tN{j-3PZD9@!PDdR3rIB40#Pz+1n8wV$oQ&UfQUR4jh@@X2$rW-igI`fM zBVPed)VfeUfT610)o$5KJPuQ`&#S*QLGk~&0AUb~p+>8<1QgdwdNl!7@#6XgKIpka zzhzp#s$B{NHOD|}jdnzKmVnk{(S?eSiazFpL*(G>=5{<&vE*^H1lUBR0d+GRcJ&t`?W=a4vfbIeXSIgN3*S9rHgz^DCD+=B}-c zr6T>T^Sl>;>_SuOwD*+=|oW}&%AN`e*!RKqK#q{YYw!CvkBed*dW$P zT$2UFRpDXGjebFTe-IX!+x%(L_)~$fq!%)36Qoaw5EPrAi4cQ+@AxRi@-k;aN0Cv`xLU*r?TP=6~F{w;=6wJM?8Lt92t4P zrs?)Ay!2|+8a?sTC$YDot9~~;+~@+Q?eU+l^6A(9Q>IM@)w7kV+g!3qt0E}!{VK1{ zOAW5&?pp6wRvq9Nc_kVj+azslC$s%;glk&C;#1fk4PTGudiX9l5O~t(L zU-<^KT}fF{pcj5EH6KRLYTBvSi}%$|wly$Cy`Cqq6F}+Jr6n--VD8En2+F)*+H9^mm7 zJ~rZm=LxOb)&cdtR2?B|%{S;fN-dSs%iYeX#G}4YpwS?$?dFfCjt~AXc+==3;xl(t za+5fW+Hz9OED!3H&E0&V1V`tQ(A{J(w!yg3na11;%8*9m5TCsH9k=sGfLOg|JEJY3 z)~v51jH7Dtz+ugEg;8$h-VDG{0vVdWJHSZ*^z=@o2liqf!vCWPG`T{zqfQMIn;SAt zl0z9Y#5X)Gs#Dx5_XKVu!e>xWvd+_j7Lm}s`3pdF0R+IN`Y~nOKz5X>iysXcIPtm? zau2B|FoZpUF^-_s2hf5M!W{$IBsFA%ZEtr)MKhHld$;j?O7-nTGg93)rbC;RucRd5=!9v#i=IV4Y^$$X}}+z`#o`%SIja-M9Ed21dDvSSlmF)2^w3rl3TFQU3hCt)AbxfnmH{@WU4Ce9SwEM^= zhtSUpKg!h6E6?X=ZWqe10>Wn;x=ot&wD@n@8nzDExzh7F9->hlT^nkM4{N*T zd1lN?CBcrv|7i?P$GcMT1{0X`8%D^tr-XZP*x@?%-pOaowrrLYl!YulD7+YZOifBH zXx%sQmVpxVeL+b(q2D27RGG@Yy{D)Tcf%m}bb9ODLiw;4K~BMufot40Pkyf;vxNdy z0ok%B=|6@JI2)1izm_y??Lw1gKZdML5`3BmuK09f(1HU&iVt4pIe;XI=zR>s|M60~ zJpcAnF}-h~InuykWntRBtiq6gQwcT6_61T0-#W@x3_`Vkj){i|?QdAO391%9ieZk# z7|(xJ4(a}*hTZCE0}{z%HIG_d?YQ!PUbdSbXh*cU=5qu2ru>&PznR043D~X9f&^k} z@UbEpT>zY+p+IMmjI6a7G#QQ+Wr8tUfRg}HBim8~&k*4uF5I4v*@8i@>LkTthVAtx z8KZV7VEV1Oh8-sz+?`dwaQ|S0DB)(P*Sg|*Q zBQCC$Goz!u3MKRUbZN~c=a^#mek`y5%^YKpySjC^^k5|z;FE6V>gH0R}$lW}_fr2*Wr#u^`u6p%4u#> z$Iqfj5-Q3mjqL?^Sv#TgbA+;_k5n($wCe5-ok)Ph32t}4m4FS(LG}xRGmc5nQ8Q1N zxzlD$SHhbn}V6_8Csv3V{Zi$v9*#8f-WPt=atx{r#z5uW7g>4;!-ipFrQ+IB&_Qg?n@6{wURwQxLa|GgjP{WDUH z3$+1C??>3=6TeOPf^)kR^ezbWSBv_drju@qzANESXNZU=BPA7Z_dcFbeu$td2iXHY z#|iyJjM-fZZ`XF=2%?yV0D$7s)V;>ShhWcD&A=s5f}e*yH?5>|c!kyV$(kA2gvjS8 z6C@D8z6#N8xveGqyq|s#Tq_y)Z(2Rz_B3+uji74Le{cSgnIx1MUy~#nC$6eA2z@;u z(!1VFH{sG@C@R)0In2OAyuG2TeHE;+yVEX#)500lMF1t{Oog2sp#lqV$^v9E6GaG5Pke3 z_k4sA=Stx%MyWZ7cnQu3tPjJ!;*!#iZWEfNuIS@4T*S{dDTX#L}UsbG|4C@TG2X9IpD39KUzhf)+F@+E5- z0v6O9LF0&G&5<4Ytx<13kk=LyYJTg*BW#+Q;hBC?u1{_wx#vBXG~{90rWfca)v`e0 z8Ly{SMfX#GS-1>7f1m*<#W;ff((9iS6j#F~5uCr??ij!{weM3YA@Z*32TF)0V3-xQ zPcru5A?Ydm_^<=@&0nhm3M(@F)+ZSAg_)KuAaV|8^PKIxK@3sisu2AKm7-bfvUEiF ztqYEruayw1(;)d|{Fwha>+BTmQ9cpQfA2FZ2062)td79{d#iB(RgpFZrwK-IktRxl zCMi$-?Z-e;+Me6Fy3-3ELRi1TvF2@UY;6XiFH5^q|Ax>+wBB(*iw@pjsNAU_n^`W# z<~%N(;E2ofyYc0~@P8HDxXSSOyHZg77;$X*1L`f89RpV9EL*(vH9G=3n~yc$dbJ{> zWKRXMpR_L~X+QGR?HJpio(Y26b1c07)7&vpFERUHI3qQ6r=GJ;ht0W0RrOCiL#s?# zgt7k2m#UnT2lI245q9?CQ)^}1=+=mM->wKu*=s!+f7Ocr2m|-lKGhu@GBI})^_%%F zG#dD<1R(kcW>dE77+B9a_M+}ynydGRXl<7zgKIdR- zIomu_Mfy>xT1HnPL`DQOp+RVD9$%^z#@TJuBgw@Cod-#;`Q{4YMsDwt8Yh0O894)H zLP8pVtQW!#i`{vD%*dD%oh_!VQ)OY zP6Y#ewFjlw{({2Ze?(Bx!ih9-&`hJN?bXVIdl{;R z&6~RAqe6WAdFuqLM~T2uaIY0&fQz8Bcx*;#m@Cbt@8v2Ti7*m;*-5seNJ7`nv4A%~ z0Xpi;FNW7IaK_UhuC=53xjq11YsuflkQ)?;6|Qt9i|n9CY5cE84pdLpLFttc78!OX zTQ35W1iC+DV6c=yO+-hlW8wP710jN0L>svfUAxZFKFOKR$bYBrKUt>BU(iosAr+8| z(0PvJuKAx@=~IaT^Oq{MCiRXx18H6Dti5ea80N@?$0E@Vj?2nh&~!r0iV8bitbX7J zD<^+PqIe&-(JMaF+)ef-g<)mKppU1ItU|&u7CoaEl2*DQK4k&8pLs7=TsWuB#L7fT zzyTjRXEyh?3R=KaKiX*}9@I@18@#PEv@AI8G0(~peU55-(^`xl!|A+jb%kdqo4Ey3 z!!9>af=d_D@bbnjcdZ_N3*og+TKW}{_<5)Y!3{GZf*NHMZOQy-9{5axxp1%66j?W) zV;q2@@z>E_R+Y@;yo_^8;REu}Zw2h72;Fe=@`pvy7!_yc;FNkR(v?RwrOH>c1W}r5 z>Dy6E)?J%$k%}jZx5c}WAaXLE^1%<|Tj$zk&o4(ao(R{|Lc47bjKH{hpM23dGgS;T z;dN-m*M|g5VJ(~T7<2cdmkC~WqOSl?%doG*;mGGt&TbspVWtlEY8%u*M*}bDVM8h( zuI~o#j+avIfW+aBPY}e$!L`upLmC+W(}&O92bMlsf3o{f&(LTSXZ)EK-O;CpH6~p6 z$buM|I#Mn-+Lh}Q{{A3$FweQS;vky!&EKkw=&PL&L+v^0tDRuz@E zEw)Vl#~Rr`o6`1twD#sy>iX%{%ajxC4Zi{hJQ^8S;bVLf>ho5rwppJ7j8E=Yc52&t zs3B?1Gs|XR&t{n`owZcuKB^8D1^`QzkBE^bTD8lp4+4rL+(A@*c7RBg112v60vDnw z+(&n?WF-ckNM?JxGdQ;3#{^r0+Tlbo!nYS!_FqgEXkCbr6{4ra6dU)<;cTxbWMwaP zyHT=7nvpmT0@JJ-<@~*V^{xnX)RkDU@(Yw6fhgB|3nUY%VFBe>t6Ttut8_V#-?jm* z-%4nf)(YlBzrTe{#jWz_eO|8sJ>+*r;vKb+#BljApbOOS((!oWFzMYG`Ir8S6|~d{ z_EgKfiwASkUO!?m#y4-~=#E}|mP)UrBj+~)!`btuGPlx7v!k$uozsLGHAwa#D746! zm%?*fcn7FXtW(4--4expwutoYa@|H;UY}}YEIaf;h|lf=61H~MqrdEbGUWf9>2LI= zRf20rv>4*KG24~3f*9gH?&MY54q&V$rw#*7zLuEMTj-G@K10vVy_}8R6Md>v-Rtko z4{||_G+<%#91oT0i8Rf}Q}-w7+SIs(RZU(0bKgLXv>tDHsttPw%9VZ{egp z<~rHP5}o{&;EDdwu_ioQ@RC3Fl251dxL?0o=w$R)uz(8vP=DOieXqqx&B(Y!253>O z8JbMU^v(9QJf%x9nTwN|I(F{~C4q1`gy)n}MLlxhDYJ1XjZkN028TOinGQ3Zm__$^%WSzJmKrt~!>Si4@!b{wy}AqMlqV5IsB1ZHZll@i_$d1=F9 z9K`ex=;7m^*@?YVWf*4U)tPJSbnSzwVvP*d`>tuqaG9pej18n>|_ zDR<~|uhSwz>VV>WhpN8L$$-}f>t#D_ud6oBgf}J(zwpoysY}#ZVwjDn{%&1udO>Sh zC0H7yzn$*>Dy}svzR2D1`1YXhzuc+3@`DKDuvSwQ^g%y8Lrk~KT!>5)7P0xjU4JHw#;=qu82aRZ zK&=|NOEf)4{r#g2DtS40Wv+Nj|A}SB+ytR4^@GXmek{Vi)l>-A=)&5`?X@k#OZ$qd zIqqQ$VO)>I_fb-s{7E5fzh!dZTG@X3zlUXJu(OBP`Ei#?MqaCvD*qm?Ua{UTF3!sQ zvo9ZAS_lm<6*;gU!V;FCN?gPGgiGLV&1-2)W&*DxkD6yxfzblbWs!t?T7`(zQc{AC z1jd>+2soTPa6={5%TPK1-FAXSuJkvprqT;>|0Gdz$n)Dxg@FCXyxj_r7!2@QrDSs@ z6M`sh9QPz^WMEW;8;!+S`EXe%-VXtyqcjL5E)+}(gUocw7n%(32TBD~!O;dE>OE6& z7^Jj${*#(arZbRV{7%&m{SYBkj^wr7rnL52TW4^0^4}dbQ+?k}u@hCR8g{}XL<1Jg z>5kV+|3`k0DH~=8I1lJLz{)Ar(Rq*_9M$DQQuDuL_)1w1gR(p7hN zeAM~Gjx{l2W6NYd*CN?FEszTzN9egb0)c(Vr|HKgJ{IW;VvREW_{0y^r&f+UiO^uR zcOB#4L-AsqZGi_m$Sgz91koa&$Y3NS)|r5{A_Bdu?z)hB z%=34G;VDbVaU+}?#akvHZ#xO^_rqs2v$(_ZEixU^Jcj*+O*p^BJnBD88`FC<@M#9O z3&)zc2X*(L`^^GDy6h6y#i(>B_mlggYlT(!=EV(Di0H_9Ya{~)0ewB|eS&r2T*E9u zh6GxRn5hJ%y&x~?Dx(cg!+niQzTiuNuf%nS&`beExzcQ_9IgXrS)3!wlqv9|ox0d0 z=9=bApAcx^TBEZxuOZ8mV%*g8cxLvu=Z8h&jMeD^iPl8uk%DDu09bxMa$$@ILC=%# zlV;tL^$7_#dEX%euyc{ zH}v;N4MG}SM)`f5Pl5u_L!?&&cwRQ^WEtqbtgkQpSBi-Y>)Lh{Ms3e*EOJ3Z(I@*- z;wxO~sjV*GAL%`x(h{N^10g@L%ajzHB}T$kYEEm1JmF~ z7h@)bqN|)&d(XuP?RnR{_b;N-{*;QeNP-MAFUE!@SNqQwb(uTg9Rxh`Oz-Y_a&{MY zqq*6t1~-s6StX_lyYn~)vRP)0L)^(Iek$$ZVa1SlpPHqQRWK!D8x>fDI@FlhBoYGS zXA#tEXpRj#6M5_u!sEEp;pZ)dKm0%^zU3ef`)n&GnBr0W*^cjf;&dWD=~L#cAJIYs zQSUo)Krp%IrRauw(yb>8n|h%7ddk;XxIE`wInUSox-$Oi`u4QEIl)k`Iwm91htUh_ zto-|me~EV=qNg!;$){Q+6B)B9Cw;FTR?QMoJay%Y2&?X|J8 z82+w{&nSV*sW{HGf46*HFQ3lkKC+pzm8j7w!jET{fU)nQ4^cpnm^>Ab=?Q8dy_fmtIG-hXHbv?EYy{H=H#sp@ZYg=O~zOyL$>HSsyMQPVG>)f)z+PAmtgEl^)JIZ3pzp;|KRY_n_YFtSc=*@|J0G@M5Hy=0 z(##2(^^c!ek-+vXGl~qwfwO#1($;)NBJHc2MgBqEvGqK`z-|pE^)p04+h~DZ8M1IN zBY{S+%BXNqwS;!lYq6n;;HnBc9j^ZL`_?<%mQRK4AKm)w+N(0&l*seiA^{6TazREG zPmzW&pI7)-up*82x>9^Qa0D#5L`}pkLdXq=u}!Z8J7o7}xVL(sgGi0Zzdd0mhwW1Y zZbe}ry!)HK0CDl4rVx0j&mOPA0V~D}X+G=g;=18aZ{JAh-{yLT z|K$Rv67!Qd)j2U{*{X|MrB$X=HQ*7;H#!;*$83iAulLZyVhef>TEnIRJ<2O4nRou1 zBd^eyp+5po!UZ?^x1*nG9g{3}N*FCMF2n0UCedZQ8?(HB6bnB_;C+1AN<=W?8}^Py z>-oeEa(eE+xetEuq}VWRV?lm4b6Xv{h0I(xzTDuwy!VD4Sk@}uloFKh7;7-}`GbT5C-8xoZO>d?c5-#WiAMu+)HPEx1eX6 zey+Lu8FtBQb5;oo>w<*TvP5UB27Sk)m$z27(!`lXS!v@?En)3KYxpor2hiZ@v0$# zc~?rC39L9M(~ZuvmL2h-S~ua#)_8tf^(H(iJcvB=AEsNK!_Glx;aFgwiuy6)lQBb^nr*C51Ezg;|WL_#XNc$PaVlf~gSJT9`JPopn~i zL^7JK`A}7&YAim2Ac?lsop!**7RJyjpWB$BZ=RmknVMm$F}qAAB4cWSI2F8t+nHTUt`9w z!*+3(k##4nawzsHii}<~&Q*Nk95~w6M}pI-?692)dRM0uxLT8}z>Yc0o8w_BU^3NS zmfz<#;%83X@(C7GJ|&YD(=p5|^J%BK%Ob7{ig5dJ&g=QXd0VabQ}x&HB<_zs%H9Lh z=_`MHt>3lM-aT`sJGFy-QEWU#fl%_8IL}ebfW0#P_#YvX>z4V9jpbH(jO7 zU4=5c*s0)bo2B)RyHWHi(!^IBp|}I0XUl`&#{q3SOA;QUL3UUr-gn$pRPM=R8Q1^M z1u*BEFT8?%T$DkTL~rWlhR3XIGB2^}kPD1=+TZ~b9;7$%n!l&AZ%R^FpI*&GcBG^ic+-BNnJFBjbGiQUG)>QnjNzQnPh$a-) z*GJwXBssRP6s`;=J+MdvRz|o9WfTuUYYAWXWVnH7am_(9eMa`#>y@Q3f}&&Ich^n& zK`IaJAHNsJ<(+Hr%5sa-bx8gBf_N&9u=%?HsEyiU2+Wbm0DxzvtfS$<4gV}fyR%@e zgxEMeRi{E*Gzkr)RbS-BJ-Em|&~=rr^L6c79l9b`K=EXZIEX{>#SCKL1y9NZfNh^J%cKOP!ZFm}~>(%#U0B1Ys{lFD{b zxcJL*@;<;91-9RU0Jv#QDw_)O;@moB3qG;PqedV?PWq`)iGRdwL(N4IO9=o^L?!7l z|1B>dvVy(N2x@d&U-xIRL#JEh>DDY~yRe-n-DKP1e0Jm8T)(+}7h-4yY>fs&$fY*@ ztBulw`S$6HK_p6~j4@r*^@ z-GJ(ifA~8zaMQ_b92;qq_9HRoA{yMVgZJiw4SqC*3;bo*BxN{~3TpDtl1QY)q##{u zc0ziDn$eYl|91Ga1pz|fS&UVRGDvc4f!z@K;|fRwEWUydoeLd~ucdjBPKgss_&=p- zKBF*En-KNo7)>6kWW@~RGyJ2vn71i?szAb@asBF1^V&U{T@97|RNtO04;Zj6efKxy z6$^6MIvL zLVpVSu>WZ;<_7%VXEqmB!77a?EaFW}Jg^asxvh|yO{HB!J{mAG4>2MCJmS~k6QV@p0C!6tA|Vx!tV1Dg z@U6b@rmBby1I`x@7QFMNDHdZC50rrn`UI)KfvT#@&rz^FA+GVP1Jn=J>4NTK zx-T@sVSkbZ?a(0J*EiYoIqJ%E_8IY1BCo6G1?lPoa9E+T#Z(!@XW3el_*PCA6WqVY z)HLL<*Az!%k5K`cd-I44AuJSeGIAgum2(nZ`_DL@yI}DAQ<>>*XwK&NTpOtgZYl?m zidHg;j4AnuPCWjz|3D7IhazIyLTnH9Q@{F0F`vgIS8e3wHM&14?EvEvju_Ay*}Q)9 z$pdZO&=?U<1*@S4!7^p!WpogZt|`VANu`3;CDO$Rk>ZT@Bq4Q?)!?}NJr^rk{NCy+ zF>+#IRgIw3$Gb^W$roy$7bI$i9H=RD9jG@GI$1BZC6GL=bjKiinmeRPTW8{x0|}T# zP$a>xY{)#+262eIDlIbQ*}Sj%TTbp?I-w zMHy2*ArZbRX`9Q!-=69UAqY+WDHo3a-fAE?xcBhU%NJxSe+^%b_b?R;DRK!`l606x zW4!lSINBKIctDz6BGlVL7a7qZ^((iDT}~UVWY=uR7GHh`aCK}tR9H@IQ+t==RDwJ< z&IBa!rb@Ea;*!>1bQHiIX*97-ZJ>QwOYH|3yAetn;iUUJq81}YU_ zZ1hSrjc3GLzaOkke-11!cY(=|{nlLs5A?07`a(21&f^M-BQDefhU^-HBx)-=Wl+}+ zR<{Ob_yyPl*xMC-!|C0COC9F#pU2e5!;dN|jW_%*b$8zdE`PzMdbAe`bAk1q4Ix$p zj^0=q{_iCXXlwd}RZ3x`@qn$Xpj4J%lxd07q_zi*dG^)3EMb73d}6H`ZsG|_{f%5# z5XN?$mjF?fu8r!alkcf?r7y%ChE-a!r~5R?roP@ua~nGsRg(D?hT8h*%R-Fvl@I^@ zh3YYnfmQ@=fF*ZBM74;@I(|0@ik3Zdq_AjLBHh7#u0(x)5C!s5HP0?>4*F0kuNx>R zGCI2{irDZ>|0GYRw}EG9nMcn0G79e~mpO}>5@LVJGqi$fczHeF{NU&H=Ig!ez~gd` z($Q>V3=tDG;u&<3lz~TkY}|TST2(#&!DQ>^uMKHbD_2y9B<;=_dzn?^%!<-2U0M9M znXgLq(TAS%0DGaLUM6lT{tdn#ZkfR~B-0b%j|XvS%s)C(`SOKSxZq=^EHcjqU$(L8 z8>uUmlsB*_)wCX$FqdznaLL>QN-uw$RQKq;?z9=Fg1>+1rXmiiWK z+hfGE-FzfsC&c*@+MxVkRg61a#A2>BgSfe!&_%k^RX9;dgNFRr?R_gK{cW67-ar{! zBO{D4f$T&_&J7!#`L>_pi&Ui%d7t%nf&n${625nP3Qxulwkp&(6Ta+yA6shtRx6x| z4XK~Z{XjW-) zl8zFb*nSAjlgH$*zbS8-sAJ6v(Mco2``28Zm&?hKO(nuK8{JfhCD(AB(s8PLU ztd|@=(NuZ)lT8bRF$wv!OvNP)~+gs5x1XBbcCuQ;`xf{uVG|3M%z;!2^!|Sk3j? zJuFSCbXGg3b)n1H>S4*kW#PvzE|-N%?s*kkC|b0F;qe|}nj4pdgyg&=o-D^r+Agz1 z807J{Sld@uAYMh_!WN08`Kb1+0KBzOre0$_PwC!6WH-10~0)#w)aZ>op~ zTW6aQ+O9sF9fU5PU)0p3hjQxRUi7N4(V*ldV%cEYKVoG*=f24+#C|lh_VP3jCu}F9 z>-9ADM!muyVMEyZ=R~pcMhT6zW<`b!W6|zoO4ajDel)~2)*EtL7SsTyX*w%#M3F*5 zAN&^M`!$63L7_+@BkyY|fQ=!$F5Jz#g<3__X!3e8lhUgLpsm3(AYerPxGsaQD?s-| zZv#5{NfV%;(T%{WMl+!3(v|pUL7Yzs{NCUJaEL;sjttc6y9qyl^E@`oV5Tr5k3axf zThaB*A=0FP>r~OB>}~7LD%S-30a7YvmB5eFF^`E@-l>jOVJxS4BGe->jRaCUy@IN^ zB%&DC4)$ccR$~4K^H8`6)g8S@1XfAZB zzcI5_%6_IU;_NxdU4)-VtazSbEUJS+;)^cw5k>PU-VgB}J4<>kN$TQCTF9-2^&^UB zV;6L+L~&leO&|k5*SAeI4pM3R7E!o+Z(Hy#L99(Ub4evO=5>g2tGJmFJuArE-_Ev- z!i{P)@!wbsq>O;1YNG}25Fo?80jh`pitS1n`%dy??%Cms#h-NPRpUjgMaBdShGUdqWjg42&{3`~8@0s#JKM*@Bb=L_k zx*ka@UHF9XReKDY;@esFt1wv1praO8-uOk4QL%-pA5L2Mu|)mfY-eHSVz%M*p!+xx zBe~1Wj9>rlB_|=3D{F`3Ml^wOFf(Eo9dh}ZqifYHcFz$8 z)B0QdX$b0$jh5Z?Xu{Flez`7&tTc zmRjCzbE0mX<*}#}bomEqEeFt!h~A{V*o#9fvQ(S90oPp4H+#T*^C#}knKOK$5A?SJ{P=kLC}6lj zl2-XrxrA>w%1W1IN$4P+?1)FDDX9>Z|FTSWh8AhNX8t#NJGB{2%N`qP%C6{BaJUft zW=_c^f;*oLgZX8(1@DsGX_f7f{#YAA`K?vUol8TEyNFjjMok)~+G_25i)QjD#*Bx#|(ZU9;9!(x=)oU69(y z2R965v^|8UM}E|l4?CW3vBO>lKNe7?Q@SQPSK(<3q=R+Qsrx&MBR_M{LL3r~v&mm2 z_&ATv-n=OoGidk_Pgg+VsnUB!@*Csn=}9mJs*KQ9rg`L23Tu^P%fLl{$hXHkVy~c! z+jj*9<8&7&Kvy{EtV^pMFLp@}hNX~K9>+X?G;6@ zlApC1_T|d~SHz{MAedb2vX`6o=}}C578-gaCq(a|+}z?Q{VMWTLZzm!QLZvH-71$) z$#;{8#!OYes(mdj3LEd>?$9k+IgPnb28EfkKgE;1l_rdRlvNs}Eui>_%mjy}Yjr}) zs)|4)ybI*p33gU0!ZFSva(G_zkzcMJ`AuH;C2)Sqe3FKo)g$kf@1k&ODC-fyyPZOdw%a)|Ie(&n#FLQ^W68o_TDS6Y*s%yx()7s0uQC& z2_^N8yELacXTMe2RqIoZPQ=?{137emysXZZ`q-x*n?1Xmv)a`p^j&76LCRAJm7cLW z>y>&1rTeImeqRME9u=JAB03cLxW)Im51+sqyB@=HUpvD{6eU@vwC)*7&`#9JfkC3`j8CMX4g#>`EQWuVG7fmGW;h`Y*I*i+GFkxOrINT?^I|#OV(lJuCKGkqm4`>J~-2#_7XK% zrD#5t+rRY~_)?qyvY?iJQqVUOVbd6)4}AB~nOEl^EWLLo$eUK>YzNp+CYNDWKX_!F3j`Ea@=u~w& zkh#^Q9rTB6elD2KC3*LSBdJSj97ccW&cKI1Khw6~%B!{HNkBy>R){2OOw%)*=J@;Y zN1{@krwo7K3q_^g+rFuZ`eizVn6^P^x>r#esek+#impgvANW9_R2srN&yxyXmqyQ< zDHMxrade4cZ@vyJRv(N!2}8XC?r|qmMM=v$>BoJuRVJk5Myk(+Y40qPyz-Kz+RQ^#q5>5h8l#ek>x+jRkM za}bcRpbE#BReOR2X!(7Q@R8+6`D>Sv{{ouao#_t^AYW#g@`|LCG8iK2p#+LghICRBN z%pErL=n>M;)Wk2rK~!%gWOGa!QoF|3yAe0`KTR@YF>M1fey5wldNXBr#fL6 z+NFmRKeK_8OGi2p#&E#O+he3oE4Y=FAdb@9&TyN6nSLQ>_TF8j2&Vxu0@L@H0?Kw= zPxmT1-k6ZrMs9(yIffK-8fgZhdk`O*!2m%=yaop>$`CL!p=1W2X=^kfY&P&>FUmXu zLJBoX7VY@^YglSzOXOX3BxGz0`J>6oHk?n-mcyuWf6elk3xLdXSc=YxlF^lQSDUJ zr_)pQ)HUPJX5}ASHPn)c`A*Bg*lj`{aPFO&_V#$ZDahG${w6t#VCE$ARzn*{g^<6Y z_$zhyswXOT~vA-N1#Nah8qN~HQ8?)I>h48)L0B177 z>#VV!+u|GP7e99Huw+aI_v>&zH}k1%rg}Zi)UX@4|hI7j5?&~}lCXd`Q4O#K&$ zO4`^LV7$0zqG@!YuvK4Izo_;R9Q6ff_ZcIXg6xqFuf;DM6-F4cBaC(Wn@`}M3TO!3 zHaM2)Wy=UVL!D@Vh&9>@ZP}j<4_{hN%sT3_`dum+sJ&;vLqizrNB|%Xvm)RZa>WQ< zr3g=tsTjV%)jV!Dxl132hhHpEXy=>HAtuzl`j34+$T4*doO=|(VRK1hsb+a3+(~8x z*i3ISO0Y<_pitc{&kDy|7pG61t|xM%t0X!;irP;O@N>|6Q*d<$^=D?_`>#w}*DYV+ zHu;xhk;;v7*==KP+eu5&F_@Ph09N=1R$OF8K`X{{6um1)M0MCC37}!~myJwnfhEI{IRg zQA^?08yE!&bK|*ny8K7OJmE||Ee_)uhIe{{EN7!rxcNnli!H`c11VKe%j5{)0lvsF z;bOMu!x`VbiWcc?sgIJvX7g&KD)=xtU$Z}2FRplM5o&)FF$QFJzJ?L{hR{tX-qC&l zW48F(CRKLsF}gIKj^;9ZnE{`;^X@wiokv({nq#d(4x-OmEmf_V)a7|PAGMJX>dQyS z?kz}+Zdet{@~B{^<7%9l*|ddKcb1=8Xhs-?Gj1PMJKS1S~f z4Yv1)s-TvV-P}dJiav2QY-b>%Yp2`xox^JJ_xJg}ik6gDx<2W73r?H<12pju-JR=O zc@IX-3Je>GDNc02r#X(m)u;5+erhXyhH*tcI1s8hB;Q5wE<3Dwsn$JcG0DfURB10` zHB^>Yd#>*{LJw+ybRlC+VWJq>nO5^gXubJ#pR(o`Lu?VHTk7CLwjDCuuHbLaf{ys2 z>$VHDS5)~Qg&JZ8-J=FQ!UyZ32HnF4u^Fpfr*!2kgybUw{PA?y9zUE-g788e4u_4p zjdoHN{{bt9JcA@$t;LPO0c>franQjCF&hhDobVR^BWZ!fri9kt=1u-xe!M<0|A=?y zCyvKhFF?7YlD$B3a!p1INK3frm|G`g)CT%sH>hSmK!Pr%HaHl%){YQuu3!DN+*4;2; z3e=xU>f@kWBOKma6KjF=E4G+J@9JScRL&3o6ZDPl4i`q&S7=Cg2+6;vTNRIX5l%F??&`8^N^ zJfN`BSqb3nvTjS|gHq*1>K9*U9?JZQlvbN5{;J%r?emMKT)Djf90oTFsn~u0=nXK> z6bf8t>m)jXpNGmj7d)62=~$|Z($OssZC>-i^lC!93Ie+R$Slv57FxSADWS~S6jZ?1 zAeGhorGdfWekclqpxb?;)-CWe33S59m(V62L_Lbmkd1k}y+Ox2%gh#oA<16MLCJ_K zKFVH{bvqc5&0Qda#}>~aWUG();8lE-H2ulF{ACjs=}A;nG#WBGhSkh&;%#i`-iq(?7=+HWhEV@3{c zZatxdW&X(AA7;I-_Gtq- z%5HXROego^5{2EnToqtbCoIrr@+YVq1!S#W6T z)|`W{aGz^aL5E%6oaKn~fWJGgb+I-_s6^e~9s$_feJZ<{1CF+2i=$dDs7T;ZrZEBP zZ&Df%PYh#=Y`fJS3$ubA_an>q;tOgY+Mq|CRx_q5Y$WouJjGJ@9d@C1Q`LS!XVA=? zj9$R?$9IZ}!mdA7FZ6PzOuJB#F&hHJM~2X4l4vZ1=?J0599B6K1A*0zIhXr`{b&_W zu_FQ68_5hP&hiUP^ZloSqS@m7&?76!p-oU^%Wu1Z@_;mfo<1A)@7>iP(p}bWRlHaM zR-l!c3d~D0$@2*xn4>bb#PDSmD|rXb;PsjC>vNBa8WdHV>^Dd@-whO!pXwF@g$-Y+ zX|~ik<`o$>9JDtm9lO%qy^ECP1O}9ioo=Vv3i)L2=sBD?u=W^FDd5>R78ZYFufq42!;v*Mtojot3(?5(U`ljM zX;WT5=J3ib<8=C#>p*UjjCfvyb)NSTC62OJeb!a_;db}{{`|$?xgsKf)OhDwCRE6n zcB?L$_g4`6KT66fh+BzcwA)Bys1Ry3cBL=;@ojtD%RmEY!=#0p{rRLupBTz2OWg-l zg(J=W@kSL(zX%MBJNkZkZrrlbNrp7Ui<8gT31;g!F(QXaeF)JZ?7V_nKQmv8(}Vuj_^w7r##TYgXE*4reM@% zboyzWLn3b~`H3w(mb6#j|Ee)(NRFj+(!>Dn(`JFM&Vz~$WWE0zntu09OOD(A%!9G;CWTwShv7^zs&3dzvzS?A>7@uum$An&92zL&r%UV8D_-@{xk8-uZj_0n-Riz zDH#j=3slb4!B&z6mE?*u#eol$St99LOr}{&z6j06_SJm(n-hWABuq)9NY0E9B&xzCYA>7y@$3fTX!TjT7LSj&j3>vJ7o2d9te zu2u=iqK`Z*PNmHa2_>_}3due6A)CJQD$WtgpLN_4o#5yZAsw`ow z1=*yKY!D7?AGsR)dkiWm<5M|8jK9?F_256FKXNVi_grw_`t{>GfD{UyC- z5B=QLwT@Trx$VuS>Ny`59>@KH;F|aL7t|GY&3{`>3)&ae6M2I;W0Z``J>(lW_-G$r zkWyK!hfp{4zk}Q}PpUntp4XX`RKgt7TEDbtxPgBPJl;~)XCIBc@}^5ipGc01sURcz z2(({@+Wh)O5>sE09)Nc+N_{c#aG(AaK3K=Z)p`V&KkZBl_~)>`fP@J(=x}_ z#N6^H;eCnW$kZr|uY;?D&lD3VF{?5;Ij=Nc56RFWYQ0m8Ka6_`jfLCDlTvedrKXeE z^RW{P#uWayZ7+N-Xc7eOE0>2OO;;xiyznE~>wF2RK}(+w;~_Dy6OqJ33_Bs9z+oBZ zSu=%=#S=UuV2rQ5$rz%#J!_%DJQGIGY>FCARjP~_b`k^pbb_Y&Z5ZhQQRoWaF1sMmGeq6?4SDT_5eGuqX; zgJ(6P(4ZYnllWUaBxRUr-0o(y!;{201iI9%W@`egMAZp{*S@AcXW*c+k*y z2U4?dSceLxjSy($DfYaZ4otrjF_|N&nB%*-C~1}=iW8s+Ddd;U%$&@0wLFT+3S{xu z?VXO1Acj#>)HX}$)QwHnnHj6oIqM29-o6T)W*2C2w5Gu8e1(6@uZ+*46vYWhmhW8@L<2nLDdkC2pgEv`@KrS&T-FThX2%`}GfXpSrSe8t zm%p@;fF9T7eNy*eZRS|WtZ*z6E?ginl=@n0d;Q;{>aHTj$AJ63IB>BdrG1oa{Sb5F z_};~;yKI=;?1dYIJvZ@o2xkaD3oML;7^EU>`{&AXGVgz1nexcYi5 zZ+;%oRaiGL>4s;>T~sI_52%Gu$8tj%SM03?rv+ep%W}yxncbKaY45ZMWqg=Ui2rSb zMSka)+o--CF+~{!l{4w9IQxN(^EasyMygb{Bo8fa80}O&A`TiK2@L@8o?R`d_h==I zgwY~*s{R*$6fpOz&DDpFKU88Y4QTCnv=>{HA$H89%Qi~pdZHwY`aAn>d017SEA*+K zdRk+70xH`N8lp)|a?0sl9kyAkeLWaFLFPfO3a;$U?=8YlDMH0`~l z@J3Dr-BF5*H|=zdYB?%L82}8o_K0aHP&q0pSiwqom`%&pS31@eYp~D(3FcMEWMfVt zcnXyy)t@z$3I`Mlb$Fids5uftFLP+(&KKI?3Y^+IdSXv%Oh2Cpo~oMHxcTJS7mVw0 z*P0Ulta4dnuYfB1Ig(muhPAwm1|f{Jzh7F{W2y&CG2^tRZ_+c@)=gLVsRa}<&0nH{ z7Y}P5#4)0tkMH0oSX_g-Xyy}YIL|*<*MV%L(eUDzW)`_^Ihv6?DkPm8R~Ku9glfA{ z{qDm^v=r`-=LDY}yAX<9k?q`;_4O&M%1}`wob;ily&cA}pedi<0cTSCETq4E7Pess zAsPvVp<0fTB|8PsD4X;si&|m%MWMypD49~|ut((FV$NzKBDu25$|6EPiJ0qWu2Y_J z>p-tTaNGbheqxfCj*^P#Kdxj%0&bJqFCv3(s!noaLF2CNa0$Y%%-~h+p(2o@t|$CFAqsK$PgFw&I;io5E<-@av&cAZ8CU1;iE9sgT-m;p$6aJfm{n+o zw@lsB^c_8JL;M8`I^-ek#qfAN)f>##`og%=aX zed}dY_&xA7Me6DkVeCjqednjK`D}5a5VsF<@aE=ERIl9`NlPa{FVjOZ@XEB->`&_U(1BhDDrdl7skfJtpL*t4QJV)!na9w>=pAKH$w$PH z)aoPsa&5hwLMOmyx{{Jh|DKii^uZgoc6cH@b!|Q4d(aX-{ZDD#JG!PPK@jq<{G9ij zE@jHqf<3k7uIbIg{eMTYID4EmJh2#$>xH6Z)!X6UCWF5fKcXq*PvSq0i%w(*xfo!1 z#f=6aN1kbf`zJ|*p?bzXp{^1-bR%3W&avh#9k8VNFa^aK@ELffWGu#nZ!O5*Vo?k{LvRNirvXH z);cW?hMZZPWBwjgr9hKmw3-Gug?({Kw%T|nUfXx6*(f$Zj)&;UuFAdFs9RYmed@*0_^B3|U0C;Ar&kVn3r*aLU@)Rxb2i+n4Y{g2y z(Jhjz-B3DGt4up9ZzY<8$BkLWHZ6|047soQ`?$y`kJJHPgSeqJ3Tx43xHk7))gbQY z+2VX~5SB7@vNf^rwl2ys;nRaozDF<@o%SDOX3Kr^#I z^Np^QLt7V=?mZ9pB|Ar=Wl;ou#0vt#tvI}Ubmp`L_>eopL$nMuf~{ck^Y-@df<_fD z1@_MVfcqnT+s}=S3$_E-N>3J;{pq?*v((Y8)`eDnQ%O><;$_U}_zy+GLCsnl=l8Uo znY+NYidTu$PA+|Tq7bXa76ylJerYL6(5u(<7>pT^u5Y>e7V4+@F>b)!9e+so0iurd_`-5 zv8y9hXPdULb(@C3fz!s_FYWxt{3gXeR}gk*HwP*&6O1<(j7k0&;A@{3sr`{Fo7^Ty zj}OB^8tU?N6l`k(tyMu>S-#)6ov#raLus#~&2fK50gQw;g}G8Da}~-4cp|B~Z^33< zi|C5Ba(HTZF^QHUgYi_sL(Oxo51^rWrJC`nQe_93%iaq%%!{ZP;Ae~nJ~PNBB)FvL zCw+VLok#R;;=)hmojq^fKt2~^ptz16tEgovuXaNvB%&oMBOV)HSwSS0f#;6ED(bW9 zKEx=ur%0AuBW9VEK%fMP3;q|xGI+@@np8n7Vy=cx|L~2YI3LEah_WAyC}q2%k>G{6x}wbQr~6+`xL%tKrn;uG)F2QT+jHM ztz;g9sI`Ct`6-G9>~5_3B2_8$?Oqx5ZD&H9orA^pJVP`f@!^)~ZNvS1S8qhWPQ}`L+ze`G3 z7fi6bainl_qxuRUr(p#AmCqlifyrcWWs%e?p4T8Govn_(h}LG$vyW3DVc-%ZR|Kz4 zvnyJ-0_+kjz^g^N&GAy{0}IJ>a?ZjG6~N0$UC{c}uZ*0F&m9C%?dzUCD& zG~0i_JW+_QUWp^G#_`#BD|;8m$b;iMOHzd2AqX(J4L4GSkTAYBE*W8+mzOyOtxHi> z0LIV?vZ0T4a<&(?!66byT$lMrxy_=!bZhN+-s?wOa`39}xr zG!$011gpeoyEIa5sb_n8Fs*Y&YOWNgDr02jA414RnqJNa?XPVY{hsK;2%Vp3nvlWr zZ7;1XnX3z3!}wf)3*^^X$b=2Trg{8sQJcW08%8O+7i*jc^w>FXu0l%)d@?|Nzv1O+ z_mB&F=@^#95mr|jH?!bj+5cLT>tR%Hqeja!HibWYC;`y1+4JWdKJS$SHy%3IyuI-r z9BjSbz;mm_ZTYv{d+u1fEmBVkTs*~vjojFKU2$Crj@FSP`xml)H1p|`>^4Fh9`QpL z+Dbd9C++M#>N!powSbkF=N_X>yv?766qFlz%l4$%_2x)OYeugv<`nt)^hHZ|VSe}h zoEa9vZ^)Qr6eWJjeZQ_J(=T3)+vkOuWQj+pQcq9X(I%EcWJ@$yWTQoN@cU?@(0sUb zKTq^1%JBYsXMzXO3&yW{#55A94?eoWMH<&_zkU)k^_ElT_ts`?oQuBi)oSKf%7n(M#f&T7$~V=zGl4w!Lr!VJgc_-Z z+U<%nTyRQjZg}w02^`{8hCyO`cOGFUO?WUbTAn{wh+Eupcdwo{nj;;=DR(arGE*)n zQ?qES$eBV(C}0=G+G2G)0(18XeKW&Uy}~?k-Y$i=TgTz|XC|A25jvT*6~<(Le+#yc z1~!(8iQ&gN({X87EtR3qG`*XKI3G-XVxSuvw4FI}8EGJp z$J{gsvIeDECOZqTrS=~jMGxCrV!8!iR|0LOfc;M6 z56}tvmBv1H8!#KG`SCLdYz~aFY32%Fe=E64w+72^cym%k?qgGOqLlZH=TW18jDj!~ zKRq~IlVh7lC8V?$m_N(Mj;%vsUj^|~At;~y6RFnW$yN3U&e*&F?MuNZfT_UGiPIig z%VLjp03(~?6jUf-cQ6|`$?(E}uzp#7I7knWN`lAyzv|o(|8j;8vQ6h;vEfY*_>G;D zUlGf1DcaUPih+U5-eD4@lj79?CNtFETPcYbZEQy=TX+>lv2`amv0JY>?U$ z-%a%&j0R$#+B*B%G+v75E)G{+l9!l{Dz(+DmOMD}1PRNU#TN6a7-++YY2Kyz`2%p| z0ujskfAwr|7XKt$()h{DHwWZMzmysi9!Z`g3I&iff`9!Z@y!;0D@zOXiYHM;O3UMr ze7Ijl9aWG-F@JfiNJd_9!Fu%0--dWPTe)C`xqk)dr2`9*=RC20A4`9|T=n|r*~|F% z#(iFo!_DqTR}YM-^7s9v2MF(bq?D_yGbAHN10j$^nx5a3v9bELtiV9Q`n4?`lF_Uw z{1p$ries)@-3cDkx0PYC2rvwS9?H;oizY;3=Y2@@g$*C{^dAlt1Pbqo7i)a6IT(V# zpISfc(|aeuz*+93WK?S`a8glKAPr>QvH8XP$472sKht@m zj696(!LckK^pG1mMgo@lxG-fa(U!xt<`Ok#Rc%SuW*MeFq#nm>F>eK>KJ_K0)GOqp z{gIcMHJ2VAjEZpM&Z`Gg1jodh7b2p`B_9QH8|u)riWEq4fjbeMbjd^oZ$<$KtW3!N zi)<7>h)8pbwGQBJ{HPEStS02O$ZZh$&+#Fs>xmI=kVKVSzQY6Y;R}iiYQ74SN;rWm zm_VVV)F}P0-pL>ij=a4Xm_3bkdKp^8j!m8yKE9&9A6ES)TN!$MwLuC6EuF{=4lWzc zZ<%~FAy%Rg7|+`p-QzP33Ye!AnA%`#4GwFy8zFE{VV9s247JRYf{_4h0}(5D_i5!E zeaB#4B0`5t#*^QVgCYI#=dpPU=(rp57{gS^@lu0?WPd37QD!TnrJjKG02uO9D-9aw zWATh6QJm3OJkwkf*Vhf?s9`tr8HU{c8BKIPtTrK&o1u& z(GXnofq^(={hZB2dmaKSouqF@07;S|N51CQ>FPceBBMyO0g0Rm?3Yir);9O)37nri zRf-HIKl_GE&({HSpMLbF)B98k1{u!c!+fO1wrTGD-586z(F&Fidx=l^Q>yi26ZnLT zX2k$9dvyE`-eWp^zvbgt!x`}6AeSXI^Rk-ZL(7EaJ%KbxhmWsvv*aG)-8JdCcd92i z&U$nV95rPpV7*Md4KL=HY3a~#CD*cRV4HtyT*&^f%(0gRpNbT4tLNZ#;?aq&k*cYed34|RfT zxv7)iRJRB6z)n=rOz=y29FrQ2<78e2`+Ssb`rW1GPZmmQgiz%;)ljx}vW22gELmHV zvs$yxlvO|fshWFf7!>lea@l~xk#4z|R_9@@^Nai$67~Jqf&6z$*Nq{5A6s}I6fibK zxtc#}!m^%3w6JFa9VqvfIFMZ6+aAf3htALjK><4)LRU zUkMj35!1{};f(tHmDKn;fKwNHwokdgjan591o60W`>exmXxEXJol*%dO7{ngLLy_> zy)I^ndz9ppjQ!O(Vq=bSPQq0nz>yV9GMGxW`!{cDhmj2y&k+E<1avxc|ZjTCbGFNusq%vE@)D&$*9 zL8U72?^;|;A{#jS6dw_QZZhS_xc;kQ1Ty~wv!%U?8S@ma_ZN7SJD_BAu}B2lm_~!B zz$zF+TPEd`F_4bNuQn>u=cRlc&S+&V@SkCe<^-y>$=}yH4*HD$Y8@Kj#cvjHjV+ODpisGAS&pVaY;Z)1Ar9GyM$W*xw@$V5oatI)60ND*J>#c)e^o znHL*leyk0W;wk>N-wxh^fc$FDjhUt?+Mg_l^9q5CMT><;_o8^xqDPG+eti~oWyg+~ z$h_tkwRxEbOYwfPl=E%H?TSM_=`C(NXsy*$%H%EN(BpgFHDHhc3vYFs0pwfN&X*lU zCUk_Z!okit8SM#thJe(Ag=*0p`?rc;HRRxz(h!(qw3zqdok)x$G3DH{xGv%f^q(N; zES`Rp5Huf&0rA5VWO>Gv)x`dfqPRZLdjnPn`j8_V_Yz4(sa(YCR82j9=%i*e^J7{U zyL9;J5(!MpVRIkvX$>P$9QLe4KBZ&U=?D?seT!QundiApb6Y-v$!AS&?uUH!?UB!p zetyT+rVsX2$HXj=BeP7WD#1Wd_~sHxxRTU%pFuo#Fo8j`%pdbgin9PvFr07wnb|aW zETxEICevD1Lr*SHkio*bubQn?NvJ}+CKigXe;0&~kVx3#P9H^=>!#H50BU2{qqXZ{ zjU%;fdE&Nrq~E`?mr}|1%RTMTTlT?*BaP;y47V8o-t8bElJnr8Fq#ha^2_Xtq}HN) z_ai=YK3YBBSqSPL-MRjO{_%n?vMyc0Y5@CJEZnzFIvf1r%%XaIS zKl>3GEq?5lC$DJvEfHw#S}(zkWJWmb2Dt$mArDISUcBG^j5ujq;ZR^O`quxX_@36> zOXao(B9}d1VT_&fgX!5+dy{jy54#vvN$prfgJSZ}E4i3*5x{tAKB}^-7U2(GC*Ke~ z{do)6y?jJq+oqGRXZdJm+Lj&59%6|dcXqer_8QoFx`$d8iM%wf3i zxGSuz?Soe{Qlb@XOT4}g#6%DxlM3Ev){Hm_T*lM_coP*mM((_0|L(`7q$(;)4a%87 z$a8OW+Rtw@SfoVAM*>nbv=b%i!ei)daf-rYp1qR=xo|&AyqUx}6m@+M!sfwfP(8Wi zm&)xj2J?M;-(Avjs=FMrsFaHc2zqY$G}frTHsWeclY;u;U(zU}TC?j$9iBm)x7i+x zCuMflwT+g@ivJJ6?ZpT)pwiSwz5TW&4T|bKv0W_MA&tV=T&FP<36$t?J`{~l4Jz$= zT(7?e+$+%HOlh6V`!Bw-Su9>+AyZhZa3o-mu-4qaAfgz8ejehyD4st%)`~e3e!7r{ zepl+=iBY>4d_lu(k$DEG8TJQzW2~^%1{~5Ma5Xf z2%uUm_kyEI>dpI0B1o(`SlB*MN!=Ni5Fse*1s({=N)z;7p6~G~p>#PL!9y%wH+2U; zo_*-#LT`ya6$e~T%uEZt0v>>ai~0E37Wh>C4v>IO%smw)rZ)kGD)M7T;Q3toTC zmktkcM|P|s>-q*=`RQZrF)RYx5)HU!*NTBRqz5g})QkoqmIUg%1iJ%Xvg)vG-ONpx zEA_INA8qbSXE%WbR84Lp){|&IkJivR<)UPg!VK$ zFKCzRhNeq$A>X=8*1tv+efh}9Wz(i}j^gAhI;;b5z`(lcZVw3B$(DPl@l{l85lD^2 zqr1TJrV5*B1)V4q5ifW`pgI22iej~=z+{Z9&hUFt0J!2X&yPSYnUpIU*c8c;QfzEh zoQ0~rBv+_xXM+<{QxlU@vjcz&28z;RN0kIz%_Ddl?^B}^3=ov)KU<3XsgnC=YA@1a zIh1lGv9UlHOFv`8G*dC1LQM5=f1@mNZC&lfSd}z0#gUKG1s#6eQGy95HX9qK?ts^S zUD4S|F#19iM<=Ne3!MPbG+=mic?8F1j7z(n{`fDb@B9tKhu5_tz#_B?9xRdNuJq0O zXrN3T4M30o7-)Il_DA+2z!DGyHqomSg@?|+KEtQm7XK*n{_<`1X7JWqwdX5UeVH_I z#09gg||1k!*R zl~();cvout{N$b<_Y>7?zWz!ox!LVF1gv{q!g78v_=6)-5hWkWVT}#84{D-9FoNq| zaK%8vsPW(5jE$AUiCh7dxx%dRd<&5ZmK~CSUQtJHKbO8r*w=g)g7su^>B3AL?CFAn zCyGr01q@KSK z+ImlY<+{W@BDf{6FUV1x#yh<9;9yrhUP!Yo2{0JR&wwHK-hq7bw$_3M<#760#hX`# zTQh=@J=Lp=%tWv`D6%#Hfeq}Yg1uKtO#@1lmIqXEIlzj=-vuqtXK#nuv0wnrjF7f# ziDUw9+@nveEL6-CC{7$6Q2zh%Jd}X#;AGowA)n_)$I{)?M zDVM9n_ouTCw$9u#Cs~BSOH6dg=L7G)KT5Zh=<-@>T2TmB8~gs^VA`Z20R?=!=GtPo zx9JlJd=h$y;#4WBMn(ajjXSrBTejp3M1u{5mQPHKxKfs@+C=cSFH971s=6G9#=sEs z(A-x*x_)j@448a0=(-@6WbkqGFtwA-*E!h=6pIYAtPZ8W!xw03HAIj8Z{K9ub{O4sgoh>_^)qF+|6yvFZiUS}mH zE<~#N)|;KX$xc(CqvQfZz`lXDhIi~qrK^PojL-Y5vGoMW%ruYE(5#vtq=Ok>Cm~a# z>zEbov8hxFEH@1LLuDy0a>WL*HID2HezWsgdZ61$!CD#zoH(_bi<|F!&7$0m-C4|J zac#l@n0aSEoM-!jYs_g@rp6oCV~SRs2_ou5C2uI4C&t|p(@AdaHCVrdKhf|Y*|-^L zd13*0CMiTBux7;cAtJ}gVEFa>JKIM|>%O+e+inAcGTR?UF55-#8-l+ZgdCc_4l;wc zVojep)&k^5QPnL7H1ldaym#pE%XN_f^0nA8O>CT<r_M#|IyfsrV`y&bJBYnszRIPd%NC)exzVYUTf8xivk` zx={J)QXVVGyO>*VS7+|l`B=j(c}VPy{|!PjaI0l2LS}XrJagDJn{d(R`&l&cFbV8; z5mXwYVez$}1F3~5$*7)=0fV{f6s`ZTK|b!`xIcJii0YxOeIB$v&$ z@?`8b6wN-fp8HitM!XJ1(!C} z+dq=cufRg2Zj>&UA(+q>E!jL+Yt}qB47}b|uF$RqlM|+alX6pYe?pf~g6SUq@&Jo3 z?~wTDCpO}T57`AyD9h8`wTH^p%oUwldkVnxiDm5H1Z9l5K6-!_4d)D;%5Ng3b}nhp zdFJU*^L#=9<4!?gq+@?U?wV+YZ6QoxhRQF&$Gyc#89(|lEZZU`6ci!OGA4v1K7k|M z>_!xi3M_DLkGI{$Q+A>v)4SMb{APR9S3eJIziwWPD8f_9I^rO6an%Ds*Ps%(or~hv zJacfFPz%GNX6dH>~gcdsGF0a(7BSEQ& z`!?)sW&hJ5$I!`85U#Es%X(*5@{Kn5w&7IJD60IRX|Sk)QPR~^UnU7hv?{^X_phIL z;j7`b(!cB;eVo?D&Amw7Qr0W#*V)X*EgjhJ5xeAP@cHxCnW;ms<$2yAH*^VL< zHgUjct?P1P?%CU4dbu|fIyb|~Nqa29c_QL)sc)IqMcQ13#ah+YT-f-pLidKh1W%fC z(Ao$oU`!h{=8dlh`P!onjp}lr`@k*bGINr75jI=C_!Q#72VXxpb`9Vh`{Gi$V?iQq zP~V{n1kd-s|ZnZ>J9kH=$fMKCDu4e!B-1@TaU$x{j) zhM@vOA!XBC#`}(CF^`+cKR3Nyw`)#nrM+&^`MAg^IwSpB>-nS4;)FHxS!(LOwRoH{ z(`ZK?t$7VbRKlo6js`znyA*m#-HRa#(2Zcw<%^ljRu*ZX2G7g6;cC>KHY6?>z~$ym zxsX+d!ZVWfwNZFKAHw7|iiZe9=;SN}pncMIwYEcixL>{hS8E~{bP`EPSa0l$jijRe zA@A-{&rBL+PGig5e4yPE3Iph6!`X^%4@>VsfBk2Stx5jH# z^eTb5U+gZ<215nx>ydQ5WcRrhbV#nuBFApWKUqK4&3;SaEdgF4S%0Z)^V(8w84kk} zGB3&8lcUUtQ&SBbO(%z<2Ta~lpE_HrXUI?ItlPU!pgvpsk0@)K_(iuz9Z9$?c(PBh zmH2?BeGT0lxuhMqi7FzZG0APMGzg78n-*6aCIec*)N(4SCt%hwTr6fP`aBt1CYhIRBU_%+>-b}L#4)tlk-wp!QLt=;*v6cJo5P2T-*!RUnb zgV@rl@ej|Q%LHONqqWr-{{D0^NOd?VY<*oL?+gd#J-hDm&A^EptASn_N_jm4^pz}5 z-~$9TvlYLB+ts%5_@5KU=X}q|7#n~#Kg6nG&#k_lK;1K!67wdvc5x`6( z%SSNrU{zQB81QOj1bC|$xvV9uL@7{)WH347*37?&q5z=a@ENLO>SycKV9HdhAIqIq zc;4qp-zDPk;|ZixzkIrrBvhCH*)O=tUU0D&4y501tZkU_U-9 zLGM9GmE)G{*jm%8wup|FXnvSx4hj}n`hBE=32D*%NJDdf3Q&Dk{H_Zuz;<(YknySZ zo0a&POY@K?sc{q)hKYI`IIie#)OI(74bBNwe`V}KFEcBiw@ zE{#V@%6YL)>(=5Cy;0Jik5Z(<4hsygcdp3TcJ|30PDwnJc2hDAMV(NFz0jJw-N^{u z>Z88z^nOc)O^kaQJ?&FJNV)53DPPefod3ZqwPq~OH5I>Q{ zFm`N@7&>}}w)gQtCuS20#z!C1SWSE`8~G^SIkOdMXj5Mg*G`D&(|GGh7_&-pvx)-%Fl3_Z!3bYGpQQ+kCE^1 zPld!9r>gC#<~yHG*w=*4;?Hh@nPxvl>!J8Yc9Bi*mJLhf0B~~dzqjqeZbQTQL{bGw)PO)#L#U&^jZQr& z98ez-n~-vFf1<}>*eG%0hI-<&wU$0=QX^fL-Kail{(#wzoR9ib=X2#MfpJR^Wv#Kh z&~S1HY{_b_`lQOr=d45YI+q%$GH-3oGs;M|BX}O ze8go&{Jp^uc#2FFJmU19CtIucBy>PTGB*6nGQ=0hLyl&=Gz&VBr9Jlvg=%IoHY_$l zWXY%JBO_v{Uw#+tGwu;r#)#@7kf@w5s%H)@lEuxJcgtyyBEFk+spxZ+^3lP>#I#Uc zMIU5&tTtX7f<5eWKDF;0=T1swIWwH7^G!6lI^D7rj>H55pWW(atTy+8-3AbB}3f6}wwY4I&H@wFwGe*tHrPM=88DsCll! z9}d8|x8gf=MZMX0@4OqLYy(3c2!hDZXCVbq+sDr)#QpESU^^PBIwZe#!R6>xtVkl~ z=fdyuR_TaMdsii3nywz*sw+}oXYMuFP21XHTH;gvy1bE0(xmUDf@REk>e}G1ER| zC32#Fm{diZvmb$sQa04}NMqssFb<^wf)8K^|3}kxM^pX(|7)*{d#@1^*R@CXUKv** z$-Hrmxb`R{o3g!)3fU{9?3Ix{uadY{_R39^Y#~Iy_vd%c_YeMXF77?|zMik=^YMHP z?gwmpC*J+}Jl?;1Y$yOhbKtJXqSs1m%H_k$J1?f+OI@j-KQ|GfJOObJH`v7dBZWSs z%jk9L^RPDE@@eOzyP9X`-J@%N+n09?mCEZ0N$=r?wfj@cHdI z(fO^Kuk)2mPe2dcE|1J8Kv7~mH(xj5RwZ`L>x&WvkznI&9>TG0fHrg_?6^sb^sAk_ z$z?dT*LvyJ962i0c*%}=zaWeG5V@!!zjkxM9gk`E6)NS1U5C!YxH!M<7teq0UhG9@zxYFxV&rrd>YXFiVlX2CfCy1`(pc3M zN$nFyyPGJj|D-)GLH`bfEA4(ma4ZdAVQE%uTJ^Y&?G#6%sH$~EW#X#8s*}T4_`+T7 zaUS|(L-G}=%AkRIX#0|7o|JdYb;1g*+-n?_-q;Al_#ENcFuA~B43fdDWl|KnK7#o&C5F(5f!i`z8|FeE?%{d5W_@5(s)L|28RJUA^05T`1V!1tXAZQqLW3KYXmJ z8zBmoklV(56BpV6caZwK%>NM#!=P{%D0(f-)fN?nS8oCT(7zm#crpbV4#HJe#b}sR zGVyO?IwTf>nowg3Xv%4En3e?;4LAGiDM;f2I5qN$r?B~^Na7c@>bF<&Sb}rz>ADzd zpo{eL9L>R?(@fW?cssw0<_!;}>YD5Beh)M&=lCmh9ITqtqn?ag=CCur(;p}34!8fR z((Oo@+_cR$i>m}tlAG2PI>a2zZE|=fHDVoeO?OyR$_Ovl?Os@HP51bQmUhUEEq)`Y zISCTiMX^p)lWL?Pr6A{y1B3_Wr<_sRb8!W|F2>K;$a3z! z&RARNYI|#*O?n5DfCaMy4ys|Y*238r9Q_*6!G#8n;G6V4-6{A=w-;!uj8Q(2E7wO` z=+%wARlW@X;dS~zODiHA_+@Veh95n3DjVD!xRq<@G+6QBmK9dbc4qSvM|6{COTnwt zM@)r$kPp#IK~Z)Nkh3{2)0nj6KUceiWka!JS(H~Mk+>}}O2H^2`koxB^|gYP(d6|f zoUsGWkhkT`+P+W+SR)p~vB?ec=V|-hd%%8MpTC&AQp(Ahzvb*f1t>;9pXPhf!a*CR zO4W{CGITcdLhkSN{eN^czrsoa8E`Pv4(b0xj%Lga@F-Ao;j-RDd40t1eCf%|lgj@% zkX4{_G( z_8C3){$4M)uRE5kq%1k?n2yT-+FBOK=W)&A87Q3V57nwF%s;h52F4(X%gzq=Pj(7z zE=UVoYV|5Na+63?YQVx#(g20OD!uR}N9dK89UFJ<71dl684EbySAOg9WNn@AU=jUV z5juKn&6@>^Dd*wGv8Lu%6Jc6rTF2{R8oHHcjv*jOY=mpLaWy41_rAyYW)mhqXge)G z+oE3v5u{#B#botzPm&T21{fL{6K*DH>X->$me3>e7eqwiZw4#{6uPM-_m}*cTKeoH zDVdEU{@7B1NtYv2V76z}LcJWXh5?`a4WK)DVuBHyh8Tj!=jeP{+HyaxKc`byEPd)_|GjoP_KB{_QNr;!-=qYd!jNKaLnIgux z-3X*`5tK%EAd#pFCW$*9Q=e$@w6r>^FF}{m2E#XjKijD9r+k$pMM$+~y9n3{R33i6 zYWOTrXZTJMMQz=8_6-4)M%t<<4-0PPI%&M5O#Q0|1YhjY==ddrWe)G2BpeL&l@F13 zDTvce_W9au%;SGog#~p|(8(U$C~qZ4tcrT3c&pwkC!F}Kq%(;6OT6}>z*2U4e1G2% zr-65DT}IhiGMUAWyPSIM)NBV0j)q^!>Z;7>%?`RDZDS?~vmhIXICWslS8X&6tKgNT zzi1jdr@lizQKr=-rhJD@?RIf@xduB-EYNWK(}kEOevTg!54pBIj5ZOlC3{00iNqv2 z-McMX+(S$77oK0FGRe!>nkvo@O^4chG(JCAoOMoF(>rtTzKcfBa`&O<8_wk zV3RQ2n3I~dk#l`0yl5!sX*Wj{P_Gp@SR@jGl`xsr9~Tmz(P!?^y0|bWqu;Gn3J1${ zqet2FYJp#Mm$l#KK-^VIG3hUfVJ{*IU80$aKB>`Z`Pi0&n=@@(cRo^R(1o?SVqF$m}ypvdztB zHrd<5_M$SC@TG+KVOupiBY3!dtR2t2L4s%Pq}T_(h>(>3aRII!2{`HqNQKb$=?W#} z#Sb>n%ZydJF#a%*T%C(4x8v|VwggvKhSdc(%49~_y|b1AbZ55Cd&WDcuC9-G50 zo^XJwF}Sybw_%qopQqAy{f$H0@xV9dhp1uwVIv_>pS1N^@WG&d>@>DnQpODQSs2w# zn$2w}ajgnEEm(}^ z9@4->)_^$u3yJ6_yRsAv(~m?`K8Mm<#{VgTByop2N8WpKQv`pvt?8_BA)^0oNTYI6 z7zOaB9FlM=m>#KW5FvVttXK3FH42mSB9M9dn>GU%VTMVgu`cB+@}x9Y zD3Bs8-Zdg40ev@raA?3-_mO}T@hAL8+{opyP!D?fg&>(lq)u{OSf6DkKYA?$C&Q!^ z{oNWOi?UNyaN3C%L6p86LaT85q!toO%5R*pv04s;tL889S`y;6G$+n5JF`*Y1q7X!1@iKK7wDC9y$%AH0vb77T&eX3V5)g- z8%Uzr8WzemU!aX;wH|5+a~>zbf70O=Fr=#!(zd|Cd@`7mW>~K&qU(T-hQ#&kU$?PK zumqjh1bI&iB+)u0(u`c!Kx04}qHQD!Zkr^fe45v5^jd&TGk9Zv-%y%*MV;=LqH`Td;x&2K0vcYo6@ zBS!huT_@nj#WVz>Q#dH1XUUW9IF<3UG#rpB91Lkzyl0|}IkOeYi{{~s#quGE8HS)M z;k-rqz{Q_@Sl$u?a*4qxP2=~cufzjFQjcS))X)N~7Xk>xau2x`?bnGhP<9ks%#0)gsd*&r8I zF7=ImZ8|y{q_gmwY?eezMr0}?1>9wi5SF3(_@pLDZgO)XSV9(gXsx7-jJH+F8p;e7 z1B@!UpEzy^Om_qt%yc|9aIsacX^>E^^u2CAa$E56b;}HP)J~yYIy9~ZX~ZnjZ-CVDo)rpsRm(WjCDJMJR~X1T`<~5*?=%#-{Ic(;PH)8-Xw>g}(u_ z13OOv;@=*foa{kAVJH(Eg>?=5ly3x$(w8!hbBr&M@Y<4j&{_wz1jY=laKVd*CS4Nbn-X)7IKbxA> zrBW+;F8+Fns_LDM(z$h2eVx&KF1Z=Q7ky7uVRh2ZU*fH|ao@c&7|LY6Vf~WeMtRJ3 zJ`=OqLG%$iW@6ZMBD3Wy!6xM!nxaP=r}K@be70F%Hv6KjBn;jC;zJ_it_ac~DD?@q z9j9;`jaD~urH&}7UiDu#Seoz=-2F~DV(K91-!&s9V?$!S+L5vM7j^Y~x>%?ZJbgZ( zU7&V9X)W@#E6^$`K3rP&)`ttGfG`N1Qu08h3OV;KTb81v7lc;?1l&3{YUl|bQ!-bL zxD8b-X4SR}?Wskub<{G5Nt1l4hp8g)$=r=5j;`t{>ZsnJ`{|0&b}2=x9hlb;_^q96 zjtp1|bCN?N?%4_m98pyf0tUM{BjTsh%(yUB?H}eFsgbOww-dLAtcQCU74)bNqJD_Q?l<39V#JQ5UZA|+?W0XgDu z$A%xHqF*L-Y-{pZu4!u_Z+xf2HqwLtoy^ON)7~61pz0>*++_x?+`aB-C`AGJ=?TG5Jf2}YX{1zW2 zZkgmaOm}SsUwzl-%RnLyhU&Pu5D;dKnDr})t?Y$GG2mzO?YZrr{|ZPdwMBW*CyN3Z z33fSDKYsW&p=}sepHVf^1cAS?0r}E%4EZ!Y_?*nUSRGs)jut;-MQ_0e4DyJvDt6iT z*sUMY!p1A*N9U~%DNm}Wgb^UqoBWzXuZUDuR@Ms(3NX_c{-5E266gX1=9n!$ogOw> zTuF%rXci8YsyRf4@BB84*YcSKd=V1i`o>_im&kY&@W>VwS52*h%E-^BK4+A0JF+je zv`iP`Aqp;aaeyt1$d~xI^Ri%S)G?_BU)`V@HqSBzaN;3`hXdrGIA9R7@r?|d|04h< zMaj&sich6Q2N6ibs$tEMtS*#^(xKmf>pprybhG|ANcs%o!{WJ} zHmtb)vWv9-<@WF-0~ZRtcE&k9>XL`rPxQdrv}PFiI0J#-b1Exm2G2tK?+4iyD=0`w zi%Qu)FpL1yOoG@*;;T%+5x#-xT=&^*NSr6ZmlAO-BUZBcT1I`h`&W2TlS)*ikN3F7 zKvym$v;Up;IY3n~h3sB%(Qfv5g_RcC-f4%zbvCZqrRFM@e%aq`MBDdfyrT529vE0n zn*f;ce2#sS8=(w~Z;cQ5G;Ofw4RvRZD261ahx63D%QPA{6#}0%EQ7*Gj_W(=y)MU#4_Q>(dw9Ty;H`wg+9V z3KfQ3`K%7b2k6#iS@DFo5RpaE&uOw+1U$z|(8F-FwFsN*Aeaq#yF}TsWl)C6_wjSs zcwbu+AO0KhTpKA)Nhf*?;-amXi_{gye6{OlX`}iq4(`<{k&?CM<;l^2Q!J48b-0I7 zjPN}&B6=W_1Q^JR0-PcfphBNNKRiYe44@--8=KwXRquve;90F$=`q-bTunN?sva;KEgH?&I=? zFcdDN&TkRQK^$)h9A_tH zblOZYyMLRJ#4sv2(;n>Kw(!%;WYl=18fHoj^mZi~$Qr7{3T69$sDrs6FaJh_1ApJo z{{DwK-lZOsgaiHmE+4QiWHfj>)fBT)6LYB1_I?gub86*fH%7n6@lRxV{Ngw|@z0jC zS}E}mGH!j_^+^bJvNcoDmGT9kFO>exgA%2^Ze69|%j9!kdq~GB0==%EPBLZh{G$H4 z%c@v=spZTxe0K3RiAYFpV{lChX7kkpd0Nea7p@UsHLuhiSo4yJ8c@3Ai|Q z&S`Z$%h_N^J*d-jQ5p&2E|Ko`?wQY#vfw}b%hU1%Vu#Y|k9uoS^rug=+E%e-ijLd$ zsGqU%3=V28T%A593T|ONOmo~aP|?+2x*qq<=LdM}Faumhp+BRIuf?V%)aE^+#WTwl zS8Y{ZXRaf@nyFLXe}=)5pgw36Q#`9SjLCBLVbJVzkHk!b<6r`mg~fM#)NNv#TD9*v zc^t3vW88e6mm}Cw#raBUvz#UZ*hCp2_*DYkV4ygdfQL+pGG~B^IVJ~EV+?)PShawx0ND|qf1Vr{<+L}%r|J8e+^-On2yHcOLWl$q!S81Yhs{V3^+_y|z2E>DV1KGtNT=2g?qBI$)A7q4uXrAPkc2dN? zwDT?SmfY`v#9a}%rU7N?LyHAXD>-cu^2uo>-gO31I`j2);72K}9m{4vZK5kiYnUAK z@bzRxr8BA z*-SG5hEeu9#bJy~MT!dcnb8gX28LTjfj1uAs;pOPk-xR)z1*W^Rie+?`R&z(+ z(uczUY$Riy`StyZI|HOn7k`7NCDb_rbTDCmE%; z-gS}~I&wrNwZ^(WC9S@0CgtAVldZ~#nDO1JSdwBhf#7bkF7C+ejtq>*$`#VYsbSn& znsYOcLpto(zE?~e!~KZGw{A2$K(bKmN)j%`wD2=2D`mIom*u3JDy2SijiB-O5fhT=ymmtB_?H9Xj4MEeV@J>EPhy|! zPC|O!caFjxznC2;{Z6|g;=8GKp9w>q{;fSZC@2N3nFbW0h&L>j;Bzk@!Z?8r zgNu5w{p>b@d+oWucekW}Jzu&Ld@Da9PQ_mZ5Q;K~!QSQ1X{wf@&E)g5)8hS}G4M?b zJ{U5e%Q#WCa9y7C>^EbxaQ-FqH-?AUa0jc#9RZB$Ac=>+hY#=6+$~YnyPdWk_I&A7ye4?V2N~m`TX0EF2tCHO>bN4&MpAOeTrFQL^!L&~BfM4E}Tw z3EvvM@mJU7$?x)-p#3sJSD@AmDSFuZ5ACo)BQ5$zL!tgKZLZ9*%Khh%n>m?TPJx3w zqCADb3>&gbvw3|63=&GST=4{n3i4!#r;8a3h)&Cd5;TYeosq($#6+zbU~<;A|l^RCKnOp=q| zWo);MXY1?xYJ@olND{A+vyCE8Aen)k(?97PQtx0rj43Iw{}$A8(wByDDSZ}m z`j@YoiGgb<{c~i0JRiCvy2o3YhM65@i{nT2;0eO_^9MIL+xmnF)GRm1l3k|&aChTu zP86HVp%Joeb*{1Lvd7TDT$(o9G}S8MF^H5R+=-tF-!f%x10;d78POmwC`Pb*0P>h* z7BWJ-REz+Ovl;5$R8Y8ie85kRVdJ${z-AKbcb7eImcF9Dz>OOjZ09o%>0M@*`Io$b ze6*+kFUiZJIRP9l$r`Zqi%39`k#z$MF^8c{=*Q=NbleW*%2&{U^Ayt?^VkjA`FK7D zIc=^kT-_dNanx7fsOP1S0a+H}kOT#z7zS4DmJl|>imv?a-TxenzUV!l7T`UFnCZTdG`#pRb_>aHD6`k9Ejw3S6 z>Ap8R&_8*n^VR!v#C5tc2nuC!F0faJ1=vVqsBfHdoJ_@*m86H=?o6WN0PgBT-(FX z3XYUK(i0g}r@zR}D&(WI?X3=`1RM#Z&mcVfyOB|KG8Yn&<7{-S|x$YnnBVwzJ9Q}$Tp2?l7 zOAg_$Ft~v|$K&-|uQrDhZ#^U3f5W7Fe&8c>W8bM+LB)GekHAiX0GC$=wa zZis(5tq+;lxv%3IkmuEmQv7w37bBetkqf>CMPJ-g$TW zh1^%HAhBj-`LdDP!tE|)HFDp|SWCi(tLWZpIMKp_`CE`%?f@lz91A<+dJhOR&x`Zx!I!$cf!0zT{e=_Hq~ z*N5zQvs=M7qlZi{jy(LTUSKTAoYm9|r}n$*&Lm52re&WFj;JNt~m3E$Qe4u7oV(1D~X>qd@Xj zfTZzss}Cemszouo#-Pz1uSdnCQaUo{GFhYUQb-M}_noeKHQICZ%g#$c^zge!O?U7J z$v`E9wN@7Z{6>25(bD^|n56~?!ZKTNgR1s7piT+j&xwimW#AK77c4&Wehwk3DYyUX zSw&)tc5^~PT#;FJ)6qLsC1&X47V2Nc zrV=Q-JWX?=2?8}F>%#t_&u+W|p4r%TYi!KwGf9XqMY08r><4H5w_0ct3a2yQfq*JD zxz)}{k~lhw8LNS!+1Cj8E@=GwMw-(gCPZ{~W3R((_0;5RfW-jM?-qfx!IRGr+3xG2 zjTGsk>Ra0UMHC5;D~U?od)beEs6}`j2GR?O znSZS*eh5DeF)(Jg>b?#D|E8mh8F-2z(f7%sbp~EHVaUAC-DOU>7Q7xZqTZG>Jl%~r zuAVZlU}cxRRHf(YTM^jiIDv-3-(o6^>S+7=J#C^IWATOi2{PW`vVI1hHrKLg- zUf8$@{8xT{kW1LhQuLzb##fLWI&#LHjM@+I&z|b(7VxldZeCMyI8so5;}e@Mk#`pQOX9y=?gyBFD9R&G=73owJ~L9h%#e^@m@ zQjt+gk=MtoAxuCt3bSR62IqE!%yB^!?Cm39hsr}{hn`X7IBJt}lv7Jw}DrfGp)5+Wqd8YCD z&I9MHS;_`RFrJwyU&q~dogM-dDa9`|Nqqzlo3|85qj*DX-^O;%6hs5N`sT%TGI3`o z6h@5+c$tTWI1V(FqGr#}?AnKQetkLIWKby@KL>yd+Hy11Kw}{m3iNLcln|3r(_96U z%EdB4zrz6Jf=Nk8!MY-6w87n_9EwyYIu2Z_$f}Bn(4)9sXD5E73QZ2|Sa}uC78TEm z>igUOl8msNgiMLBHz?1-@ckT|2N zn_IcOa;T_2m_^AGJKIXl$oMb?YEDChK_0U^Uif|rFoX^XqeK!Ll^k>jH}UGxz$Es_ zXT()5aH&LrSHsa&D5P1M*N#(Qp&=%|#EdhWtciH-emyYlQf{>N#Gt3229kgfc^lEU zU3R7QR-!cajT3i+{9OrUC!%aQvs$h%-(&s~!;YJ*>mIkUBkNFfN4`SOo~;ywDG@yR zGee8r6CT&WLwM`QbHwz|4u8FIyEp5|D+S{%`XV|DQOZ&|>(<_wjcRkU zo#yGk-swgrhwsfb$Ji8aH(1<@eD?2E3_!G`jDH8)@zHt==G~B!MY(IY+|@$UMDQv0 zd#OSHE`u={>1JsM?;mlSh+^p8@bx5IgiLN$o-0em!8b$>3_b~la<4Q{915JSaGZU3 z8}-EGyU@n<52;z&y`rj_J}NTIlb7NLUKTW{*vreiWbpAJ>;B{y;l*@v`#i+wOV7;B zw|6Kz9Wu#Y$oY}8lEHigHPK2}>SL!}Hgk?Z@_3tnz{^Xjc23o*rS0HoU=D_^x&rgL z%L^vS%^PL7yYRfDl>$-F7r7&4$Eo?V^J(_ac|;K>r0B&30}=d9g-P#R*!U9F#j-OM z?3Ie^R9yCk9R=VTWzHt@A76`_%NdLvo}orLYZMJaq!05V66DUQ#kyeOfJE}OoV57O zTik9(MEm@ppJh$b;1=ZV)Mv+lC#Qj053*Lrm?M)Cc!-rB{npd@9M{5Gj)uT1o=2z1 zoR=~UsC^|JzISBGfa>y@fP9>}J8=XS1D~PjijId6-1^b0TTzDru?`+Lr=h^l@rJf%O30aS5?mghR@|pDbb@q z7aBJh{Q4-B_@4&2DG%|DwUo0$NltxHLh$mIUvMZnF4~ z=hx6xB?hXRV=!}|gOQ{^YbnS|1N;=zD~7;AUN2c%RcG zQ-cs_iLvA($ZaSJrD$NC>%A&=Mc_`0zK&CIqw-x9l?F4ud9`qDI+%SrY+w55K18>% zSCkwE5)kSX?q|o4yO6+Zm-+aKepq%st(7|&8wI)Q=rj=>gU37c!+J>(=tku@cW(wy z0y(=SxcW@g_{!Xa*K0U7$Z1#>t_~J-W0{INcl%fM6kDlIn&6KiCWQl&kDu67Mp!X$ z98{sboQa&nw~{o_v2mVpT&>^SnWx89ekKfL>8D&D_4K=Zn}Bz}J{Bt9nM|I5P$Y;c zd;icxn{dpx#!p4!b)MQ1w^A_yw3N_gkd#%M#{hrN)P<?}qk6FTCz*krVZax%0t0ras`l0>H|8W6|4IVec;Ndu-@gVwj zew41YaMmesGSk@By@^Eix4UcLayBK8II0*2E_-7a?wRS-m@3P#oSc|Gxy%2f<(gzR zCFA!)os~8a2m%WN!ZA=*MotW5<`(zgNT}aNck2S-MZ$kSJ_&WlZ?W zO?&0WXn+-J;-&d519M**sm(?+qdooA;-En_k)pOl6R$5k>h|?L_K%2p@t;M72tcm= z_}4W*`e3Ss>|Y#7T5z$CDw`10bWCB<%FMLf4{Rh*f11#AM9%z+-e}R-YaMlPW?=Jj zxxU?acX0_Mc27Ajw^!=TY=KQauMUynhsWkfQ_fN!p(FDvPo%mDuQb{$gyR~NS$=KB z?XUH}ouOAhc5j@;T*lqK{M&x^&ob=azQpg{noEz1&R6tTCI8TpXkC5xXd*7A8T&&$ zHt9N7=y1n$aYOC8LAVx>$i?Vw&N|mt4&2sGA zDEoRT`veMm!3aTbfolX3D99ERZhJ28a8@u!}b{s3ac# zT;)UKyBx%nRHVqkh3A1KDObW2og=$%uZXKvO@%;=vJa|CH_0+j#jUBL-%a5Pyok6l zNy;~Indp}DLeV1}71b{~`SxF)9r3%zLvd8?{YA-vW9Q179fq(JS_Sbf%G`g$9y>B!10XuyP&j@m{7%;w7rbM!zO8 zQshv|1XVFU6^G;_wvCc|!bLc_g#P4w_ElVkv`;Syy8ZrR)^#^XTv1SbOLvM);hy-t zPaqPP?#j5gR}dW^aSC$7fjUXY5Qg3XStp!(`cj+4qYEt_21F(svv@nmkYy*b3{kf5 zNQxy){bHX;e`b=*gCx}oRUfbI3vm1HlITRm$ZjHldLE_Ad=Q~R9;*WFA-t?&mi%pa zdV2gnb)FvKLOakbp80h;l5gc|&MS-0zH~}@;6;KlLG2(k>Iv1o;TfRZ#(2hcMl5WX z-Gp;`$4~+z==_U=1jWG*I`Iz|2+%PtLHi}qe{CmS&d%>&nmqmY>D8~Nf4+Nh1%}=0 zjxGLIv-0mClajBv^K{A-+ZjC3tJSR9y-a)~<6_IJ>-u1jN-K$!G%-uuUnj+JBS{gU+a1U ziWwc6*Bfzfic3w_O4fbh{5Xh!{M#}Fzr}BpoS@FM8eI@6doSBiecErR>$CG^^R;2M z`lUhTi&{nCPXojt&0e%jA6gC`CaxVB8CE7=IGGG6VqKHW_y%FA$BCdDRbE9)W|(?D zb#6aQR=FDm*nZVdhe^HF$7chJw}C(ovqa9})H;P1AlBe=^V6~_t)wvo4>N$0pv}ak z(N!M^oK1?i0Yzh;UdtY|il7g+3;~+b$qlMKI=UxijW9F|30I zX73axN8Jl9b6pXwEy6i8*! z3FJoBD^aqtqlQl7!8Iz`2dmEzxaBhdmJ*^G_sdOV-z_bHNA!29qP7Jac_L_yl`5-^ zuF68eBX~!(t;J}87NSP6>Pb(2nbr@erk#clTicC&D-=HuZoZStlbi*I%Ru#Ox6%TG zW3Uj0WZ@VjN<*s#^xW`8Fdctqt{WWEZts&ZDRNB*on;cmLt`|Fv?J)XC%yykrEgfo zG(khipZy|`+LZHIG^%MU#{!}dNeXmm&ZS$AJqOx=thn0{V51E!7b%MwWkZqL{XT;* zLwoZY=OQhjlG^{c%&bvHX-~U9=B_KKFB^1qbFf*^1V6kYLhQ749R_KDeNDAH9=Wa$ z(ql>A@hGkpYzSf7rTg?K-Ewz=r$A#Dny9Al%iN}MvHww%F=tmlh<#s(0je~>>~9$o zz=AHr$+8Rte^tGK29UeAQ|2YBhOvnvd{Ovut^Mlbk%zQ*%RL(3Y`!#aD7AFiyc6s@ zLGVNt=UcTzRHl0PAInR^dxhFXTZ8$ zh72!(Fbt^=6Dv2{Vk-@2B?StUeHQPDe5e}HZ1*KcVk+n$aCRih41~Cq94SWU=95-M zvo^s+5_tlv2zU>A)UctXRXb1>bUZ}48-W8__+KRk(Hg865&u!;tl2P|N-h)O`J=ZD zidJQTQR~d$MrnvPx+)OjqYi~v>!(x^I%k?Ta~`jX*i1g$=JB4D`#zByQpyt;6Yj8^ zW>szCGeI)2?Dq66ZUstSHJH9NqWzu|&DnLmia?S)*zC;S6A3eBUC8-}<|a#&o?}0k zQq+bh#ZPaDh>cNm)YnpSVj>gLX}1Y^)1mati4BR^k?Shnf$zUE$5TUhwSw%VAc$Rx zaN?vzQDt^%R#xxeNsXd+3;EE;m`F^(p&kg!CLC-nKVn1aJ0VHc=B|K~B{RKh|GCrk z%*6|8E;`6nx<3!1lbs%Tj#y7Y`l-=r8pf3GzXrKYjaXR2PbiDNCCCepd}i28KftnN zhK3K;Nm4RRYTeUUdhH3m7d~@f{v)X-K3sWxz92KKr6qFA+tMNn1WiY#6w#qZ$0sNE zp56I#nG*%@{E{L40P}1te2ygYLI76shdoc8nI%BDDx2=yvq=ev4lnAkykKiT;ki)GZsrwz(>uYilwF!0!k4F3 zLlhwp%Glw`$P;V(J9XFTX+lyqko&3D^cma@#`uzs_n6}hiQ%1*jyXs)f!?ix>1%Y zoOsgx_s!*H04;vy`Pqa;?z1=9%s`bEG^V=aNu)DR!DF>i!%!A*L}cP~1pYYFqJOV* zH>cuKNE{L|H{eICQ+Jz5;42>*CRZ!`ZxR|^M8oaKsPEV^F=mpbjKM(DTV-haDoW!xj7vTWl zBA%q$&@3x^5SC&dUmCkug|0L(hyZKw8;*J>-Aeh2X?P}4OcR^~-_r{g;Y7FKsCSz% z9^6MZ%lwb%)Q0dlaP$`?8E~&A6n$l(yCMkTJ5aW{hTh66XFxqse?8?C9-m2q!Uf9+ zDlY7?6dA0wp^&&Ml?WQnd3G?~ey4R6W2F!V%!c%Dg?Ock)RUs2b9oMu|akK-TO_t?}F##qa9^^F8SvJ7+yr*)J6X7plR# zTsJ#Vg@z#t^urzxdO15h?ObV6W#`Axi6(?_4^mErK*9FZC9*WK>UH{aI&1%Uq z<0FV=g{P}fM8*YG@2rvVv2tp3m?G10pM+V1Y>AzzxvyJ{CN>Sp#nrb}2l&S&(uJ>E z&KB>h)4}ik=t>29!-KS8DAG7`AS6c8)lsE^>J0V0oZ>SBEi3g7#qNE*u7#*%?=H?i zhDBB8MRuNjQ22f}BJ4FYX^cseP)*U%oCvc{ko$m~Y5XCJ$Yvr1)n8hz2q7|akqErW za>wiF1f59WO`c_|#P@6HMj3WE$0L@%mhnzG0Y66c99w{}Pa0j-a!&<{uT#c>RfWW8MJy)wKB|m(L1+hlT z_~VePpDZKpTD>4!32tGh$_IBGu9KSRf}gu7rn2C%$$Q{#-2bx}YNs%xF9T)$k z*BAy5X+D&RhB{cXemM?cj|43BZ3tg-lQTTkrnp}I@MOyVmD_2T4oY;c<{ez6vRavX zx@S_GKejo=^GSvPlQTa*Gk#(#Sn8#4gLvydExUQ;*hm_Ir_31v|!Xx zi}?8du2Rb%`F=cR(yAv=zcK*Z7+gA4<@Mg}2m_)__sqDP&;6aDRw*!$0GmNW@E0Jm zS1;eFp1SmRNLjZ9MS7i}L%}GAM$5lE4E;5%T;6y^y>{hWhK5Hgd}nVNs&fcAO{Y~q z=gx*j@RUaU#UtzyJpFjPM>4&AWZ+dkY=9mM{E@oy^ov_T!?80Yk=xJxs6ir+W1p!= zzfp#no$nwC&uos{Ql(`kb05$*0s+=W2s6t&+TgRzKbnfK(%S0U zNzHkHJM`m5`LB?JDL-uw+kGh$)MkXMgBa|HoP3HaUn+Lrnu>v!d*}NL_Jjh|KC334 zhKh-aL{ylC6nJ+gqJdYB1!TmV*f;nX!bN<5>4=3(c2b?}O>lVtN#q5mKMsabZR*?T ze8ne%3@mDuGIKc}sZjzG1r&a8#$=ppJjkTog+%H(i?BGZ0{@V&lY5Wb2K<^D`6jzC)@e+=s5+esOu(Q8k4J44wd z#hE#Wt;Cg*-$RXFXd+3~L+B%Lb5xPXHvA{gw8m?{7q=_C&`3EijsPf(l*RiG{ka^J zXc$E;i-VR?_uOZYs`yWwB=tu%c>Qo9f-GMshuz4T%E19d|0O zTfEjIkpGEnV4kTYOI~iDeny(gQ{2It)6JIu3GjY2LNXjzS<<%XJtLxtkGrZ41M!E} zySWV(dexvd$3UYUQU_i@>3(-9V5SJ?p}VzAqhC(dw9t$~!9T|s#KCB(?^)b*02z2l-7+MlND!lcko%o7pDsHmNl^vko28}n zLca@f?Z#lBD&*6}`L;k)_Dt+{Y|Z23%{uMMo1{t4j6#ENJEf;8ZF1^o!mh;>P6Wq$mX5PFjI~NQIdE5)b8gQ8JfL z!pBA8&6e{fOV@iRpxK!+2EkddB^ZNy_4Dpf*DEax%9oP$PDsn@sJB>3-6q|sn;Wcr z4B1T&fS%Pt%=RLq3JdOPgbqfc`31zNXBy99GAVR#Zx@PGH z6@UWa9d;@>C_#({I&mv%=};Vv7T%3p;CMvwbAvhZ;0fhA?*w!p!UKD>;@#uD*NlmJ zUq-GAjp#30u-7ThOIOsV9T*R)zPUj>L`hx&Pc0g(>$l18^X9xodrJH9p?cP;5_4i%5idjIWUW&z7!NA;n0k2;vEc=a+CT`sF zmC^g6$9WW>ZU*&3+xuU!J-kQ}s`Y@Fw zY;j{xoif@xjQy+Qlb9Xh?11&e9W29+%U+g5`^KAVZIBfall#!n+@~HsF_@xgbhw3B zj$PUWEk#LHn|IcPNPap5RU8c85uNNj?ZBM!lOZyF8BqG+7A(4GbB6-jFY&f)bfO6R zo2Y(G4=>6l)Q(fCOeNFYM90nl26dZzVcvsknWbz=n%XpUlQl7rZ_4Ft_vn9o%Z{IR z@7%eu8=+i>yHRp+!Se5Yolee**GdX0{CfayNXwEXJ>{x0E&Q~KgDsQtht_V0^=eoZ zr$Nt68amS+mnN{m4yt>&eBwGeSI0f6fP+b4uPUb;bl8ByMf{WozCyzS!loYEAOWr# zxB7*jIG&bUr@jx@$yssMkiY|3FNMW7KoPu5^L0ZPRVn|FtMKv45t0}+~( z2|VUF*MIUyUhmnahzsP*D-WkOZ7SG6n+-iEHt(*Wc{~jec(d|VGo6P_)PVo}PO!Pv zHecSA9P|F?R?RV=FI~S1)f|uo0RtNnQJICzH`UoE&o($UJO!L^Q4ru+p<$Xkn!TzI znQ~4>&K#tcMGDt;(j@BC$=rX8Oc_-_gCg?k+YGL~Ju)>DIW|hxe{cEV#aNw0xryq; zm4aMQvPjMJ;uz##Fs1=@H#ZB2g#Z6L-bYqG*4dTxf$FKTAp>J%gUm{b|6KpFEv&iD|4y>!C z;Y|5aEa4yo(IHthMG*;jh8!b{%V227WFaz(Iv5I@HRy|Q`Fk{!l$#Q$WarYQ{L6FH zhE(L;vsSue1as_J^7rh1i(oI)AE3obfz^l0#Q@XFE{#3f3Yf!rmr`|GZ3Mzct8&K& zD~O`S(_DFHQZ14)3Vs!VSfLwfe2cBj#aBNgzMIJ6E6pY`O-er7%_M+>uRRE;6G5*u zkQ%0sk6&OwJ@-L=ws~!lG?xKFmgPMO-aaZn32q@!hgJ6YLke!bW#O!x(l%3BmZ;b% zEqptLkw6B`nBJg;Kp@~Dg^SB@|M2ek!C2Kzv2$;b!{2fLB%|MGys`t+N?Jxj!8e=< z-LewTQolDLa1LFWknWiG z{{Gf_|H8$Z#fZ**&UKx=_vh?3S;lK8n(&e^oW+Io;>Q%|p6M6AkcZiep-+nbrl$kh zH*$p`S4Va;ALzhfVEc%yjL=~OET@zorqT7qxL4i)OUQttbO<%zHZhs zl>DJ~lES#xjJ5n`Ih^Y~ zO-lG8s9c3&dhR?a6Flim4Lm2b**<{H4KP{JIOZjNv(c}j5jiI#ht49_;~F{D07p1@ z@8!(2h=u5_dv23l_TJbRz>8I^x%}e(9q732b3*QQdqm{?4-vdLQi?UnO=TDXAdh+_ z>*5Ttv_%FiV=`D-xnz2MMk>iWf&)h$A%RzU0=E(_2(*kF49szkCUN5qJei@&FgW!{ zsw14a=Uue>52yc{C=UWrA`kqi%L!sJyUwuKTOw#tRHhT#$R9@{$Ynmh39ZKKuTrr! z>h5KTyr_8q;q@E87}(i?D3$h_N_*+ilS~fwD9|idM-Tvx>7?g#yH3XVg8SiLG`G8f z=G-j3TsxD(Y}N^cJJqUn)GLv*Te??qhHT6S2%fRLS~^AO;cbib!d}5f>?%8qlsaPQ zlR^u5yO^Ozgy;EmEFRb#AZ~rgpmySDh3LwP?3m}&p8L;7);G`}pE=uzqbstrk)bK| zZAsTnloN?j)NxG3wqnpSabOo$uBeli`^A7U=lyybt9p(vHvh5+%-&5Tx^6uIr8(rg z#b+M?L@t{kosKJV#(IfObcptx7m z&&(L84fyHU&sj!d$9~YKMlAKz*{#Sif9BaGJjgZ^;6aI_)VC%4J`Q-XTX-gBa8#<{ zUF9=WiYNxDV(FY8Zeltx=qkz3p-siNBQHg6YA`p@ z5sl&rDdkFS!Q*iSj{JHGK+Tbn`s`60Wq#IbQke0Jx3|Wq2g^p#5Z~a111|OTGH#;E zqemT|c1%ewvFM+re^mI{la9R}7f{!L)4EN~qEACy_9@$mhdO=(DZsBGlY;kQq?!Zl) zw&z3@3mRQeSgu);_Az(O{fP}QR~C0K9Xj`wFOm$2**$=VM|dc?_(}hV4m2Cph;#z3 z`9r2ZRPIxUU+q6F724+o0L7!KJ+586=C<&)wfI%!00@Dk1gKd?I{Q6xL!@uvTdnf~C_9 zD_mlVCgH|8Y}6A$>y+B@Myl;%064*6g!YEB;Bb?UsW;yO$%AfkXdZDT*mey^un|8L zx|C1HnYW8j5F&WY0dr?4p^G(%0OFnY{1XQe1zLDW=UctUT@ZsO??+&|?3_3zkvKxq z%HFcwx>s`j`W37$h~btuT42 zPP&-&`ewWP4M*ranIK?Gh+U^9H|eM~I_xr)vWNoK9ki3}aJ>8fUVw-g{X}OcPVKOJ ze_>LPGO#qs-X56|ng9_UcNKf9T&xC5tL-w*h*kPW-b20xyLYEO0ljC4)Fkc#ed_&K>AlPJ(4WAeDo0*nb&D|5l#WFg$R@Q=jN3azPEJ@y~moTFA;J*EAByCLg{ z{0J}IYj67|18Bxgm@MqWpYVFQfim{qaRFd1KoUBJe4_QBGTjC$>K)N|Km^MOvEd3IXjuX|8&9Y<6V zcI0i#;;V2Y!=U0v;HLA$)b-^Ie(hJmt%^=WP{+%xv^@#3=AP;`ESQ!7TTiesIW3rT z#3l`70nCzZ8b%nn@PSX*yeqH(;`7nIa-~v2C1ee9u1ykEONh*XALh`+!6K36w(z26 z(KaB~cbIoU9e0=~?z?SsrAY|Qqvpc_C?d*XeA|J^0OF9}%~-yCCXC!bmZg!d{xlH9 z%Lfm>S^Cy@^9TG1l-` z2aFU6G2gcWOO`Bd@e0s-UxHJ2z0&obnH3<98s=8s)u>g!>L%wkGm*3jWwU<1s&*^? zD}P@M>ln{cW?_3ac__2Ls72~hrdmV^p;C2fm^zSj6G zsdEJqB8G6a?B+~YAqJ*7c-_47PJqWj9aivdJ(&%?X-a4lCKa3R6co^8$gP>|XJnEs zRJ%|nvF61FaO!Ebe0nw>HJ?G8VMayi`+-038_!mLR$)Hrv5_Y~{o?jj0hQ-nTc>@c z3B!xC{9Sfvhm=f-j3Q+2NOy&G09Z}ogrVpL3&h11cB{l1K)ekz*C@3kq#*}_yXD${ zSU*YWa;+b-fz>IsczTYem<_GsrV=XOh0&XWd7f!#XtDjI;dj2lP8 zNMIN{N0XT7|EzxIAg5jxWd%fG4ZAu?MW}`z$mN{+ZJBHONf}ScdEbXUg>ZfbwAkOm zCEU0P_ASNf%$AXd5LnKHi&)#A(2YPW{?#!zpLZJ7*DBcH_%bJMr+$`$bi%96IC*uL zZo5fQGEnL7Sy|m8)uvYFkI@su~qUbpKE}OIZW4 zvk37W>RRSh>_4>-LJJAjBgIVk&b2%d%|R0$xElK-Ay{swgZ%KGCe)Tt8W;^_iQTyH z|8xNfy$mx+tP*xS_!K+JhNP8Qqp`sQ-8kpI_k;7&m!bt7owN;j-}_o)z19)GkNo@k z7i8@3H_}IP4(wRUT^}&M*RPu=JY3Hs+3c{Yf~iB(K2tobx*BGp`N{Htd5@3^z<_C` zz$-2RNOvHxGMqHSeOl(7#KQY%xU2-v`;%{og^lYnl%W7#C)~ibKt5)B1f2as(DP!IJ}3jhaC zZbhUBBZvD}i#5Ck5KFmmgBtC?ZP6UCePH=ha;i1C14Cqu79fz(KwEKP?(b%|@-_Xq z0c4PcJEAp=4=iSf8;ZJ=39Oj+%KMp3LMqb&LVro;;M`sKK}Z&8x)JdCt>r_2 zm(HYjHR2?O?nTpVI$)&zD zjaunpK$T*Q$&58fUL*y9YsWMGB*;Cg4-|UA>K%PUr|Fg_?%**-NbM9vjh@--f$Av@ z)e*u-u~p0^aGh}2FZ2ZCR{$=by4&;qp*%M;pF}#orWUbBRc^}_;Lh>{d}%U(ZUVSr z38>>l$XPG6+-3kU&LdAOSl8x+CL^@^lvM%MFXa@%OdblOc(z(spp}D&9WOpLOYE0b zsV~6+8zCE5ihb->`;{XTDNj8e{G2xcSc1(Jan4Htb~bc#WX!uUx`?5@7X;AN5e5}B zIH|ifMonR6n8K@ zKwwal(L087D@OZb;HXa zhsQDqvrPb!iKF#Lo)D~9%6%}tL=gMKTg*-hiy@wnUIVy#XXvIS3L9xupFNeIId?xUNrK8bQTfaE=a z$OK+;wsvktS?CJ`cFw*h*sWYe^=E+`I~NX%a#)A53@xGW358hHfix}aEYGo8;ZK?q_Zxo@*v8IL=VNZ=m1V=o>vxsL zAIgapi2?zxy8LF{a76rTk53M^c6=pbBC_t@g?x;y1M5eYrXB!+ z`M%Qw$Q3yDp=CU@Go7hp4hTfwi*Nf98cDr80ayE?(|j_a5-EigcUBoycDFYdIR~~7n|O;u&t}K@``7@E$?Y3{ zuc2@ta>1-#a+)7x>&OxOCM^`&55S%N(>?z6EIiVZoR#_C$p)M9&|rz`pA%NQ`UoT` z$wA!Ab^(yOeI@sHb^E_eFf?!fNj4&6d5hnP^YeK}%Nl+IY8vVHwUDnC7mKWLu~M4? zB1*-#lmf# z_UDUe-At(v&}^x;U;G9(?m6pV9i#F7Coz76hB|28(roiQ_u{|?mj^|mH(d;@v9!8` z9R`eRYOkf|^SnKwmLIY77ITz+o#aXSl?bBsYmt3`k+&@r2~Y9+#m;8!pf0Ic1q+R= zP;LISr2&KyTeo8+MYXcCGa4jyuwgmEpvHG!@2m)7X&6^0U3bbV6$xT0bi2};r2>YW z+M4M*94-P`aE8F-wjD1)$Kr}GGdkuGdi(-On!kFLlDZF??n)y=EpXc;q{-*e|uaU68NymkxTex|eQg@?-gP=lI_VE8@4X zsU6eO)A5JVzA4;@8hKKa68~WIN|8C37J$J1+nyZnBJE2GWz83XH5*O3rW699LJl(z zFl>}MAy=ZU#z_9K;E8!bIxXzyNDEa2vcR36KO%~5CKgY=HeA2!RfjuPu@U>HpdF`r zFbpN?;ub^$5)v9t;Z<{!f6Zza+#fc$sloz{2G~~Bh_}puRiURI764~hMCh`>4K^Kc z$s{xqzqNb^mLHm$sIPm)W237KIN{Z*2}(mowc_x*ym~g&QutxPipjXkpEb(QJOQm+ z9^7C(Y?qmsn!u8#$x|V|W~0Y-((PA(E>bME^JM)XdmdTMLqwQwW~y;GU&qm@{~tmO zq?aeRT+%BNCernl^{K5ldFW?X_c2Jbsf;(Vmhy~Eg-+AmNl-=)BW|+L(i^j(Ev1oO z4Vdk+z$v_a zc^}+eT$jRXTU=KwqKN{c_Wonjoiowpy6SOcx(mNbnta^-qZfYx@TP1=!)3SqQLzB- zsq6n6aqrIj{<4(@LyN7s0>YtdUvZ@!PeHr(B*U5Qw@cFl)%Z1Y&xKVs{JGo#yzUZpV-TKrXfSau zAEq9SJZxh~p6_#NZrgTR_96H{=G5%EKUsC00Ds9;_L`W=`n9~1 zrEsaT1u|xo21qoF&|&dkiGxCC07rrS5bz8;Ya#$%0T`S2P0+GN6-t0qAr*A&g~iUy zne5k0vc(R}mX~VPI&*eG9;11srt{gQ#3{B=D;aIw{|1ddQ0l_WPl*62KcCQ=&TD&> zR0YmXuwM8G{0ML~z#ZY-$5_l$OvZTw+4+F=L%!9EeJQ`aobed^x9S#g;gifOhm29rS{7PZ4&6xL*V{QlB zpK4geEfS~1vs(}5_C7szGcy`2P)$C>w^hdM03deha!N^wl|Nf`2ykR`(90pY zHXCG3^wyr3ht}fJP-UhPDqZH)~c?VTGD6$ z4h@`!2?bU;$mx=u#;zuy{{ryYtas~PS#0Po_}o8NpKLbte-wnT1xh27@sN4?-V43s z@GbxF|47NUPl2e#EuKA9oC*c>&3Cz(@cG|zvfEz4det)a#(CD711h(#v5@V}TDDK| zupbi>kZ+yh;c}?Me4w@QSk#X--|FQ3`!0k3s^Swd7WnTHA*1P#bA%ZVXe!S*6lo3#%QIH#~@i~cWB55Piu&DAmg%)v?;4H$S zf6RWxqIQz;-@jNsO-@U|0<+ZJp0ff3T3Unqp(@BUN%x^kAv%N*2s=3`d17ez;`wDSGr1$EHDl+IM}ZL*(%A6)2{E*pY@Ojxy zWcqzp?7yfEz3Q9$)V}5Q+4mM>fiPTfkdbX`-IM~X^%<_Z;W?RfQ``5h82wz4fGkp* zlAD*fwQGj=#hBgK=OLI&j8#1*-um#}1?ETZ9OmNiLEHMOy!Se!DFQkCcB~o?Y+Z>3 zanMBY+i;}L-Ysf8{tN}s8?m&c=4{SaziDb$*$b{HvEp90gdTKo459f$q19w-j(+p1 zn##KD!n%P;Y_`>Z*E|qT7J(Pf_UV8mPxFx=90&T)yizJI!o5rZN|{rwiuMIEIymg4 zMopne8fI01%6r%6Z#I$n&?jX)w!PfKi4*ro;0g$IQYgk=^>aLbt3pseKS^ChA;Z>@ zX%tJ{z$`L5~Tiy`DmLf zk8kh#`R$AQTkG*_aYrI>H$4Qt&4v|c=;6irblfRAP?A=U^V1#xZ($z*1eAFy| zmwT_xfxp>P<*HL3+gCtY*qQM8C-7ia?>VYAV9c8;!Iu(1kccQd%$nWZZRgQ;am)Y& zR#_GR0r`sB;EAR)ARiTI?>~xfYLT4)h>^s=sK8SjE!aP_kzGg2P2PV!`P5+Wf9Hk2 zHfUsMj7f3ZinO%a-T}J_WA15v6R)>ns0s-LcSKpf4FRc+L{j3ge)vttM|Vhw^qb3F zG4bjy$&z+dX{vvaBRu&9{uKc=E~-=( zOJnzOyysWwr>LyvEnA1BW{HoD`=RW-v{GYI^gB4jLw9ijWxDJ$ulgUQky2eR{Q&lM z{NS|UP}4-o_9@qFa`ZYS)9SO+AXLXpOoUwrnz&oqE$UYD+=bb1p9 z-*Yfv;3MFzqZC{=ISzeDSjqclA19Mh!z>i-VwJAK?%@?B_&JyQz# zYXJTQ7MK-^BV8$N&rzCN4uGAR{YYvkB$ny*xjf7B02h#H8K0u6PEf~2FQ0wLLm6NZ zNepgR+#M&YWv=H+i%44MCz$6aT*9%T*=sXpqh=Y`{e#-n)Kn$nzFs@aP~d%7`T0;w z3TE-R8F^`L{x9h6Fc=mUf*YLysVNJaHQCV=(-ase`%19LWy1$nXn$`)RA|G$;|QbaJk@I0XaSCp17{JL zX&B0}rR{hL+W>P`e;#u24wKZ1xxK`+J;e83KR=(q%+#Mff!Qc zJLIZ2t7#3BW_88#0B^%Qw2^`_Gni7$${I!{==wP)^6KZXS@&Hmyq&dDT%2yZKI^174_t7Ks_CCd~VSc{QXprtc-(uu%Sjffj4F#tBe{a3^pouxoe|UGZ z7jl6JDmX>xgGcP5pjBiX+_H~Dqe%&$1Qh{T#iJYp4(31qU2IOeqe#q{q;*=iNOT{s zj7$Xk^@qXS-u2jwnB{1+Tpa`Ih(D*@x5ZHrhyhzsMRCy0<{I!%HdOzhMR8_K0)D;A z7jhzTqa%l$-*yLV@W=Et%BWb38D^?JxNy5Z>3>!kX;}_d^pIHY?PmQMOK?!qKRUrr zPIRAtN*5R{wXe3^S??}vMiE*hq#E%NXUxl&7~Mv$8r^NbZ*AX+7`kBVKD`Mk#_ZH% zEGE|Sw9Im3R1>~cw2>vz!Va~8d)uw@HJ zfw*f*G|&FwdI7Y_d=6Io{@&mKjp`1S+JF363rIwBZ<>ghj#Hb9CDgesW6sr^PE)D7 zc?A0mZ~_TEn)oGmO$h5!8yRK{OzPj%2T!L!pg7AYJEZfWa)7vbvuVdSEPX7L1&`Eg zaQ~ADYyQw(@Syc4&2h6a1hBfimgaGbnHgS2hQ3s@{EOsoUfx0~r5V3mrSfs85x^+7 zMiyx@>l!qpFd&8%vp4@57dql*R1JQ`s(0bw5n=O>QvIx_drQeeX;;;d%d+0X#Ws9dwF7i}2l($AkqoPxbXuOJ%fQW&Rz5@qlf^W6lYmg+2}2*BO+tO zosFXLC{iIbLoJao%#lbGTKLHf;iiOC?EkusYTXar)MIXdkRvmWTKm+U`(k4$E-;-Y zdkcFD)pP$m8Mpr!=C$#J8wua-W9g^s9k9qG!^M;_e|K;6d+1^{0Bg=;c&@tvgH56sdL7Z__ z{kViaB|_OUvweVwI^RVRGml5`LCnS*P7NV8OP;;OCQ##Ae~#g#dCD18L;!x-5wl_c z1Oj6>7g2=8>6$pWq%`c zN=eGPOXI}A`b7cuSzr&a>U-~b86OAGevyw&Nzu{!HIqm+A@t{ryx{Wm$5EOmqD^F} z3U#h{!N{HE7(@&5e$piWanoPKyrU&^I*wsM{Tz5d`Ar<~b!M$<$pTc<_|x~FX^$)H zRRpYU<6uEn_R4d6iyNKdWEhlabjVsbAro{F?kH~rfxZW_a6X~V;Yd;YcfQ;dmQ=CR zv-_b51jwBRDP!nnyi3Aee+*%FziGZvv|J2QT&qTPeg%*YIP7l^MnEF z#|_`u?8=(OoQ%I|p@>r?GOP&sx)p$DhYY%_Fy#@hsC?g(&9O*G9nT?ZKQ?CA{NGbs zbX`z`FT%*K6fc(lF|eW(j|TYPVRJ*&5pl!6D5C;1V|R3UJ_q#&+eU0%$J$#ytDx~1 z!zZPo(TzY57O3kAVL{)V+tr50$||Si@z|OoRm7B1OpNNIabe^XJ}P#C4c`z{)eG__ zZ1Htk)A@*qm_h}6T{qE#?5O)MU$Ehck7k3DaFDlq)RHyFeN~?@s$yisc(XA$QGst8 zb{s|qIK3?o#ke15mu`0Oc+sm*&DYpKO{>4JTCB0xOF6s0tpay1%Iv!jJD!tnaxH=y zRd|Rs8r2hjPGcR+w>4b0O0t!tvzFW?czAe58?CV_77Y`Tbl{}qBa$m{RT%i+Q=3e) z*&&LX?1%8kBXUnKwk{kCmG+$tCMTUjk%8_u^Iyy45{@+(n(wqi9To~`--c@B4FYAi z5>%;M+G$z4;xYbimoC8&W%pby-)Ze*?_ohwC1DV~AUkpgfur13M00Od?_1wS>Dw45 zCqLg2+m*w?*#4LlN?<_xW~Lz9?B~nOovQ!rdwH<-fF)&|_(kT$i2NVDv1D_! zek8PHH2>X<6TG6=l7T9kOZqyl5RV!CS2yuaW`Zc;q7n0$e8`p-bnIMylc?4y+EPT6 zcM=lsd7gbR@$K-nYw3ep8u9~C(R2^D zgNGrv7Qd*%;cH+aps#epDu7_JucJ%UgOehvzp$QhyEhQSptW%udWuOo?S(+)AMF{x z>E+hrrcA_|DggG>G`^eQj4Ac^oRy(v?j*3Dl`e0|T+C7qLxt+68HG8CPA|H@00h7P z?*+hB1ZWQ<>Ls^H950+R_M63)=#bUZKmsuf2ngm@gaHFFqaj8d6F?v)bf50%m8IT;2FA;vfa zHrB^+RZqrd+f7dT64dyU6#NoPh!$qSrdUJ{W?G2tG!%Mq@~qr$3L8SiO3#XxIY4?f z$xw3tS@)ujh&B9Lq>TE72S#9|KzeI3Sg(5c?Y>j)DvfCU0eJ^mv5GF6aF;76sCRZ` zhM{y7^afBe0po+ueVN4~Fcc4s6Di4KtmxSy1!Q|E%z@+Q>N7JQy(Z;H$T#|zL_T&^ z?w)009xOFy`q+>I0Q%GLlcHZHSXl`bG`gh)YP8_Si%^6yaYysoeXjw1+TyQMtufr> zb-~w6%&_8iA8YNFB2E5=&F1jr%O>|1Y&8joqE&QGsd>SRs22anJP1&|M0A#GJ>Hwe4)eSs2H5n|iH-Rp3NOCq_@|2xfgkTY znN4o@B6IzF)k2jS_#v=V*C7G{Tz}HLl<-MxoR_S6RWx!hA?#ncA4{EybbqX-lpE7r zaIU7KbDpl9@bpi_hHpETOQ%p&lKUHoh7GE^n0vY!@eUK<v1lL@o(^eMI_7|xstw~v(C&O^A&+5q3&$FySXaAfNf`#^ z-J#y!Cv9uEZ9Rig)mc$jfAFO1gX2lo0%NkVy!L3GS={sKueH-3y$iV>7yXd5HZc8k zeM@2uJ$+3iJ7Sc?RX2z@HxKlAVOGP{t0=BG5LWL^*EV@c9)rB=J@j@>UiG2Yp|~fD z2)QShIF>6b!+aP|`q~g0l#Y-4Yp3&~_R12gtfwP(f6cQ0K0kXP{UHE2Ho z15{Y!38LiooeqTzKWk{st+g)e@dLHpTjbT-CIG%)Z8Zc^gnd?g-bI&ky9&b`ajSl< zv)vhdm;BjQ1UH;ceFuZZ6(eBl_ZITd=tlc+rcCAN#2PO53Rh`%x~t(9a<{F+dXi#q zl7w`+`|U2jkFrei>_e|vBl41T2A<2uWgS2`|pjG(e+vbAr4fyk1nAD;~Mr@DfKsaV~TGhkUZMRtCF6&FzQZfq52O4A)5y5 zPp$VN;~U*n+(b4xzdG4^U(%iBch>~}*dT_nzn=;Sf^<_?lJah`Iygg~a9zBRY$r-- zaheRcD7xA|7b4BSB^4t}YyW7TWjtGObnx769nGy;rvv^eYwbg`BSDfQaM%Z|$78jp-G`Dn{Dr%RA`4Z$?HJzmsMg#+dz6c#VsS`;O?sp3#y zj_BMQF9`WVugY02^yaVd&26?&x*`n2o-JV2Z(04u#=}i<(cDSMOC#9xOxV@+g-vap z5}M^9p>T@mii=Ay@K~q9<-(@U!>LYbq~T(G!`Rz+gxLiDwXN3)@rWj!?s5Z5d{Rhs z*bmC1B+J3|@1yjTv(Yjy3#M9CxA{1rJXFA9 zx|QEHDHG8+W%{EO0KA8$@m8gwb^6J{09ityAKq!)8me!a?Cf&?-C`aGj8XnpD)4cg zoxLk$&^k|TtlxKZ$&7y{t`sSI#q)mRT1Zx&$1pK{ym)jjHe-;b5c88(b*H9-8JwD* zVMgqxMg|Rd{%JzXZfDs^eWBMHd+5xH2+RQEwEb#jLg$cS{y;n;&oXp$HAmaAt9JM( zWMKVl?#O4~m}XnfL)~wWk)U21_*{PoD|`nw7+|&gE<{Cc*%unZ_~e)MAn^VE=fMf6 z5qbiu&HWmxh4{Ziq|lKK2fi|Nnl4C)R`zW~^u~Nn;-zM86rU6|4*Ne_KI+=!+Dv5? zoR|(aRy*#fqVG2~e86#b%YZJvOn;g>etMR%ZnL9(7N2+4Rosaja!HbGVnI^frHut6 z2UpXhGFXegUob*Aqy0E@K7Z0Jt_BZA#ow(43)Hw$)MQClD%gV>vlQ&Q=jUcgh6-X7 z?4Hy}S8B35K#jR)C8VjN?ak}b^Djl?m1vVL63A}pslD6_S~P0TNm+mPSVesJ;I5h; zP#B$>_`a;jC9Am`mvwhY5RZ0qahmEXkDxvjDa|hG0FB0__V+CE@D?}CCY#&n8=B=b z@gRlzHdnSZk-?3dnk8Q-%rEe=7Lh@gs9^h^VCAEfRmD#`+7}&I_^&!!TR(SC5YcsR z23hSx-fF>J2*3gCFxmO4K32=iW}!ay$^UqsFkS4D53Uu+;U=(=m`hty#pOEM42R_t z{fjcNv3oyG=6=#U9P$wt0L+R4XFo-Bp>_o%la=)-9~-RP-BfQL)@G9#MqW`7A=$Rk zFogw<*yPE|ljFrOV?u&56ekDw+jg8{zO>lUd4yD`$sINb|8mVxUeOGr+wbhep7vt1 z6J*`PiaWWMx>N_!bjYS+w24dHXSR<6lgwniZ(7h=kCC(^5GLK95T+QyFKQqmY36sZ zp;y|?h72P<(c&VNjhWagVlNKvNAX_>eZ+cVAUfV`Qhra zulBX~-9Ed1OwZSK39Pc-ufOmX2ztIc1SSbQ(|Ho&OnmKxiRHb z{5wSX?#rEIN0}$&))i$`D%+(R+&aDI!~(D1^tdps=<{!yWY9W&(D6zz|9FLhmMXrTxC1MC%6`=?{P7pT z;kCw<02y>66KF;?iY14Ps$bQn)_%oB-icF@|F3yavIBX@nV0}Qgac$SqW($gbVTG& zadwB&k)PBAkdSUp-OLJQRDqygL|m`cAS;^waYj1<+?{7cm2)Gc9{==h8Z-vk=w>@) zgj_p$U{J3-f))w3oLwwO>99lSs{R4&!XOdvj*1*Z?n@=5>={pnv{MoV$mm}6 zQ(x5we<<*57mkeFDvMJ2r%>M-+0&^Y>6PNz1Wz|iR9lhaj4lfsD};S;73Zy1p~?ob&KpD z>$Z8nwitQ2rVLv@>nWjLM%gV>A+s009Fh{0e_cOM?O!yDNkvGk_j*Cz0jtrY8d`~w zJ1m`eYlk|}##6kX1Om49t~gxQE()j%I}`IC$wyOUSNBdSv;I^>mR!15Lq=ESo;D~9 zS8A>wS*&HbuCFKQL*)x~zO*>hfdf+Z{BeR-Vj(8+qxw-UY~%5(qojN_{n%!iat**= zr-*~`Rl$p4NVj$I~j1|df;&Va8E-d=QO#8 zp?`>X0(HEgX`1ee@Bgcjb2rGKF6)OAdw&@3beGTSC}F_msQCin$We0!;ZkT;v`Z0> zstJwK@n+S!W0Q&n_*E;KroIPJX$D`jvNr!1;?dN3IoP!~l|x0Hr)`U>HNAV?y~Sk> zSbvx*IdJ|AvMi*niR7>`S3v zv(A(jZ@D4ae_kK;Rn;1dD2K<2>()Hh9Kt<^Fp3k-8_%%=##+79W)P^xEx8~iOgYI| z1`+V-V!z1;!ua3&6q~|wy?(7EMsi}gES#U?uk3l%mc~c>p-s|DFDGAWj?K@b4WH4M zYdA=Yi@IR}^`0Tyq^@W=AiD&TvTjSefaGkbSjz4uWzNzxc?%>3fxJB|JeC|e|LkIg z6snIvJi?7&0$Nzhz^)5;PM!=3k^Ms#Pwr5Z#6xRN%|1+Y@gK_;tazs-6|HH8n7cJw_Had31v zlAOaX{r2*P4J2eSS%Iq-qa^UH$sX4?`^hst>~Ff0Q`GdkUSs&Yi)#kBF=yQ`d*joK z8E1RAUcWBu1@1po>1USjr+X$gYjk9Og~X6k4Dy&ZcUDAS{lBIezE*3;I z0iHYs7kXwAXFBy_=!*@H<4ShH1<5DkzV`q9xq53j63G(cOGfg+dPqPgFp8tRd{TnP z#k8sE+2$g(U{Ac&!QM>0?>iK_KI~X;oifxt=tjBfQuKoLysv#XAa+FA_|moVN62yDh-w1AnrQ+5n1J6# zw`^456Y8+UF`XC56~M}jpZvCkxhdTJg+V%X6CP3L7FCo`ea|AR9<(l(Ca&D9Fh9Gaxp%~iCqhd$vy7*ivl34&3Mt%lgAR7a#lnaR-Q;(eZF1BuU zQ0Lp&qXoV#v=~q|?B8^UBK>86U9~s^%0>0)8UR>u&$;}og8^_<|d!};BryS#`$jN{N7>e z4eJN+H>|g(b%RG%-C_N6=A~nqtajbCN)}h+MpwhV3QBo~oMq{QBXS=e{xTf-7!7LH z_bqR+k?JH3E?K>5lTu^6B2@nMyTYXcV$*PANva(Z^%<9#R&}~Nrtq(ZUv{;P!$Cw# z6Db^?ISQ*u4XFpgtAH^(F`g`YLB`khA`iqfQbTq}8ksa?b5=nig9Rx*WF;%7a!AT4 zA1g+R6#CD$SVC-#9QLP5MZy7!tr#BX$vb3IkiuGAJmlYt(9s0QG>p8f+S!PyV3X1o z?NAfb`U0pi2YjUR4L0%vze;^a&d^JL=dL;KI1^U}d&)P(Wc;RH=hWs z$lKDBhA-nT4z1SGaa|{PHLOaxgQQ)~rO;<*Y>9Hj(h6lNCOM z3DjuH`=nco=daNxCux%5t^H8s*s}>iq&lxEZ?upiDjN9QuqUf8#3qhGptD5D^XqyG zF&1ggpCwO4$Z4_}QinP+`6zuVcDezX7o7$NoF+u%H0YwO!`IUe_EiQb-H`)hJV-w%K3Jzl5rsBnC)XapXj5+8zo)Jl zj)Zs@a16^)PNgRKErEnMP*zGXeKv^J|7tZb^<&|4Fa@aeO(}10gb8k|!ToG@0d*sq z2~MC!;in*I-n>9P8A!+$x5gpy$TAZZDxj0&5dh@6MK4Bwo+J0KMedAORYsc_KqgcAGL z{yi2vD%Ikb{Ts9P9I3+hc_0)yBMxhBWmE*@!}o3{hT?X!JfvC{YGXb8CO_V3B6rdO zo_7s96ZBssunMI_r)(pnjREoTvrVmYs_zzWA#C}SlYpyS=v3MVwM#}y;rr@YCDp0b;P*-f+B?gS;Yf2CJece_ zn;jVHx;A(;O*>Nc!p4K|G3c0I5oKp0)1`iULZCX%NQLFCCR8)+n`+q|Rw!X+bHJ?{ zc`1^hWvR095QO|TAA=kPzDS0m1U&mN3*MtI_@dH$brn%(fHaYv?0Zab$HFpb@mZog zy?-PCzx$WO`d(FdnpJev>mYp0)wW4jCk}YQ2sv*Qi(DCAXTs3q-Y4Qf|2==gW|yhY zw8adx5x1QE`o~yPd2awMwY;EEBgNT}=Q9zv4G+18e~+b@9XAKmnEhlRjqzpTH%0V6 zR*+sycz+&|c-i*b_$Kcv8~31Au2jvGH{d}-D9yoReA^iZZNDn;mH~1FDd( zsWOgJ`E_5A8QcF)LK4t6qu=wr6>M-G(OW*Gt{T1v#$gnKNRw?m z*(9*D7G5K^eC>mUaX2EWX)|r6O}l`K9}8 zv&*ce_kX<|M^GQUp&LgK>^kY71YPCIrd34WI!yBdg0_HQ1mo6U z(FIoOPTY#Lltzx9a(hPaRdX**=b0-<(LaOg09K~_^nHg zA4@m(5ES8b%4sj&P4S=gBSLd~+g?I~){XKUim>+m^~?qqDHZf60G34Fdq3P()YV24 zVLzye?5BpBK{rw}t%8R5EuI{xE+ou~oUS`8-NKrd7ZmER)YNQC3zFr0XUl5s6+fAW z4rDR8bs!7l+-3ZS)w=3Xuo$sa0q`MaTP)+&1#&lSJ2K5!;N+iram}f*^1jd7)s4k{ z+!UYR*E1L5n;;M4ly6o;w6kEQv@>jq&=c!nu5jL+v4!#V&q}fAY-xMjAE29Ap3$@K zDoYh=uuc;$N+P$)wTRh-AUrUi+N6*7%BBgsQnRJg>e+*i*t8P*r@wMKdVj0MSQLLh{ITIh5H~8j2`nx` zejm5Wep;dX3VsCvcIeEq_DaTXfG@bD;)l2Y{0JQ9a58J?R*TWhMrYk9zXK+(eI!g%qZBWJk%Y@c5C&V;q$|pc ztnXm(pT7M5Om!iS@wc5)Oq{$m8`MQ0t1G6rhUoRaj)Ql73Sg4V`B-PM%^95HcSNAE zvag1|fK2XnmC?&)``GX5v7(r{a%RtY01PE(XNhkq(~MZaR29uZW|TXJP`xKh>RPNg z7^M%Ph8>`yGkYjRS#`fY3hR?md)`V!XW?(93gh>xiOlq+ll*Dtv}Vyfq&9-0qEF1t zY!Dl+7!tAjiVmH`6c}2q9CLp*}Q`>8;RnRtDI4nn5 z^a$(Rt7P5w4x|q;tb0=SGqD*qE+TNcdBk)iQw^!!xjtX)xzd^CKNjeC*NaX$h) zo~xndEC?mw)dHmZU0+X8s}v+`Vkz!8>3_(h;e>fD;@RUeY>s8o2?_&~b%qPrM2ytC z;x#nCf}T*KKDmlImjv>%IxX!~4*obJnN zN*jA9Av`#|H0+5g%#IOtK_j}ffKuzndZ#7Q@Pm{+08l%}+}eYA(z@ zF3`L+M-dtKh#q4XT9%ojSNMr|r*fQvUfH!o&?ZGb>SbUW9b01CIQ;TRy0f{5VrQh> z@nuYiiTl?>G;nrb$F5g%E=M|w=tylrFX->M6X2S1n{;fYwxz0E;^i+6_I;z(`RyAQ zQJo`LlX&1?)(P+da)JbS2IBR=Lp1CLO7rMCNN^jLwkI+ck7zE<`jU6=YymPHhXM3V ziL3rgL063dC{&IdJn5T5*^Sp+>I4RJVRA_}LBE3 zl3JYXFn#^m3ArP_7qJ7BI6RlR7v=-!M+kB`%G?w5_FN_tfu8|PZS9WzE&pU_53ix} zH#|UixnIB~NWsamy(@Y3Ss_lH0;LSYEYi_4s#s!JU>_FV4E~UXTX!?2dS0v@(Mqvz ztWyKbx3t7_P{ZE8v$jQ*mvXf*HsT$*|KYYPGqh5SYeTyN7RpJFDf4{s>fACZsYrcc zNb>FWHr(d;LCDz$YuJZjwao=ez zLX^ubMfX2{+Z(Z^$f;0VDkmFB5P)Z80qjbLYh%Mrnyqx#Cdv9pzz$~VNE3;eLrjhlQS2vj?#-HQMtp)# z4u0iy^3;62I46+)(GYPUG1tcP+usrA!j5TT>a}M&x$%Lnl&}N9m4wCu`=kAVgYwJo zEsYBImZt@00FoUWG~AqNWw?-gxV@d(>Ff5(@b$d}`Tee@MVA9DDl>#0HsY&_wk8Jy zJn6b;*>AhQ;vNffjlA{bsr`h8fdHiZL$<-}*cjw1*($9A&(Q=KVyQhvw6mLA78wI? zl~Y8ZIdrI__HQ&LbnkGimkQYx8dpn+`^7Pel5^_(Td0fM3R-z%yW2uRW}EzX<%f5u zN(+A4Fbz1J;a_lk)dzs}&EW$BZQ54lY#a8h&^GE}%r*^>NBoH7*8TQb>4&5BjM)|s1%!bEFU$%IkIGf8X3&K*$UqDnF2sa6nf7Lb~?YB)Oj`x z^ni}DL-mRy;kSCFT3pT6+t4P-GOe$Dsx?}iudC~7APjjXiO&A|Zoo{M=+j{EQDJ}9 z2Vb!FV0?aLqbq-{#QJe&d*@Pa@vf`Cl#1%dzrmjVyw%l@JUw2vv2TRC_>ax9JHl^Z zA*AD(Ghg}7;EtJM$yo7Q3^KqZMt!c|TIzHzw_fUvcFxBvTi^jCFX}@HT%=1pCkAZr)Rk5dkfXJGm-X%=JUDx)=GWj zI8AhVSd;r+K2nmf5PCeXnKMes35#PFkfFJp2dHWCH+lU<(nlh*uowccq9cPuqJMQ4 z3{Y8OH7YgqcK|PZ9w=b-%qQ}P$-~7$Mtqo;v@$I3B8$zyz?|~bZK3cQ`8Jw*`fTB^ zS0=}>KId;u`$^wN4`2rlwPBc2U>*!3=P{mi2=Ji>H9n2jN*7x2_EMf-$9t>D+z>3c z)iX^5>6Fijp2Wu@Xy){focn2f?BCTq?b34j>%xPux;%tC&LIKkjns>ov86Q&Uijw-O8uVWAxj&nz0^28v!;EyZEMlW>(i&aTp z0jm|?2VAxdZ3~Kh;PIq6PyQNlrzaS!Fz*xC#_p&qhSF?fJ2`xOwd&np=uuMqSq5fGmHMUgnZ^O}rEsq@#)6C)>dCTk)fQ<_R zUCF_;Rq(DpE|b#@0OPA_=%p${7%d_1CR{NRdK z*$%Rm+G)DGK2gC1e=L&gjPAH}O5kf7T&V5H*QIV?g541K6O5#Xp;ADNy@n{UiKpv0 z;AZrJ%oy8-z8m+(Fex;xP?nF;%%~_D{!o0_->x+>TA;~+i&ASu1NMua^vT=O7nk}L z0*NVC>k>D`O#Ov;pl7-u-*Y9-FgddO1jW*2OVz&eC$ca>jSbCz5H9Jf4_Q*~Mx1{C z@LvDg)$Ck&h(lc_pfD^GrxdM#tDqI5K)&8ZL&h^I(2o-S_F7v4OM6~MJPY#(IheEB zHJp(IFNd)+YMsKauXM;vaC7=KfL-|5Ur{K*+EvlFT30W0H~CxvwC)&?pHP#)uPUP9 zW_Lt?l2^ZcH}6)h1B4?20rf3P!%47bZY;0sfTP?9*7GYN;s$Cobb)Ao2?#OlT@Lz} z+Qvo14mH=K#Ht)co$4dw=tFV~EpgDOu!bh`$MD_ESusk{{EMvyF>O4$^2eEMqIx*! zB!$LG8e$PGP^uUuvxhnX84w>t-8aNf?Dc}208B(MB|D$h7X`0G!908dlQ4kv(U1^P z@}=}U4)YL(>74<}Xf0)p-R>Fjg?wfr9>w=<>vmQ%C1cL*{XIY+vei9hg-v$(7;dp0 z)tcOkJ`KjE3uw2Pv?oZs&~n$ha0?&xrxvIP7PZ(He?&q6K5W+LcohZrDGmrNQh|j5 zwI!L626oJ4*x#%IZEFi>G0oj~+gv$70F#?-6yPbGd+! zmgL@EDYLK8680^=J+iT0HYm0lIe58f9qYutDmJ{(6<%FS5@VVEcyjRG_F+g>;m0{5 z%?l`DLc(0^$m0V?j(UoK!5>u@3J*myrt~Ae{pom-f$(`JV%-2dtISSVNnP+bTydL# zxt-I(>*FmpQR|%dZn7*#X}=rPP@3`%%pCAJA=3mrI$79(+3}j0yX}hV=ShM$UN8Sj zee}&g_^zNMYJx!W(Vn~waRjsP@EE0P?V%q8-A>z~9rVkwkp58o2L<5U@&;C&NUirU z+jubn4tZKgiDaptCIO84lMBfXyX?G>*lKG^l{D^ME zShMjUOPh8L#3-(>zow-K z2{dJA|4hI)T3>p9V-Co|l;^iw8(6G~_U~FP=B{~?lCFJEEm+ft_fiZdqFc;ZX%ric zaQf5MKqvnI0$T)}tV%>e3Q;0nm14B1?r2CdG-gftzu&Zs>wG^Bh^>ga73;JFeblX9 zaU8w1Oz!6a1SN`zUlr!33Jjxil8j*7AEM582?P&l4o7$*Lhv5)*YC4Z}h`jTFwT9;NYHrOw>45Y+2B zZicZQLHAGF%tc>^K{$3+G#%6gAOaxD=`LgnPOWxr^eN2A;&VAz;7MzIlcHGNk9{xv= z5D}~aRY9+MMV&868Gcg5^0j0@?M#b)ym3m>wN}?t$ui)b>dL|1zgFc8Qy}|%ZzE_` zM6@3lrWJZGaK&@88*xYn@%)rB_lM@cTPCQK7Tkh-e@j;!W?h6YkSPFeHsyBgiA}PEiV6h_2H z_)&G&v#69_@=oakm{8_CAY+$hG&}VXR1hV;Zyo;4BAe8osf0FR(RibV$cgFvv?*^V zACInd(h4~gInw{08t7_?Noyj+ENF9vza+c!jEKLy66I{`LN+-7%e!$3p@7RPI#6n_ zT9~9&F1>|yHlb%X9&%>0i=6_a(XpEGT-bp>C9~-52owN8`R-^KpLG$Oqd5j>o z!_+(gPTW37Y@_|Uu=F;sk&#a6uW(vuLh6Js#Ko=t%OlD7mA7&y^vuw`K-a%0OJ(%x z$G!zK98XPInw}sc4r3>opkS=Wg_@}oK{(H<^c@T@Y*Q<87T^UsfN10oeVPaPgNF9M zB3*aD&*_HeQP#6J{*+0xy~k1e2NhRGW*QQEx``Y006f5+-P-N)zShB>rsL}VpllG{ zt4baGpW&lp1sxP-+w3z*t6#n}5)jY~&smWRbemv(WhUjUY?f5Cs{z}1kH)?KF53+6 zMdOqhY<`*0E36g(Khq@}b=cxQJ%G(G>9)B>C&*bW^=BY~Espm~jyYcyv6&AwN|A{{ ztUBij#+eB0UrYA>pS}>69h!;SJT~{}$MLosob|v5Cte7=2AW1y7qUbMuT$%Mx50qWkbOZLO>_NGQTL6OF;50U&f<@| zlv{#!W3LTB3##u2A!ZJ|_?_9+OY8B?@?+sk-wx9MUYJ$MiDKd8Ra)vN4vHLjx#l8- zh-m^_hLY5BOXj$AtU~izbDtI-Hqlh-wm6i9vRY=>tW_kcXlRN{n2Y^q(xLOJmQrkC zOQ4RJGtls@V?GWd<2&GK${uItj`s@0{6LTj5*Rb(p}r}eT7T49m!C&Q_OPW zlXx`WhrAYZBfts8cdA(GMVWNI$-Lt1a2fHv$3!GQy+WG3z28FW#xknhvnybP??J%C zAzr5bZC%&$Ez}Q;PYUc{Sp;CWkym4=-Pf9oXI_{o-M{zbKpk6|dE@tc<`?_iM&I9u zgp$_KKHvB%z50_oGJkdDEA1Vh!d@hN^=D$O^hv+;D()4Fo!)A!n?b}S_04JFGp6D$ zu9dUV2#2*BJeF36Wf|@IyX-+~yccJS_g~lgA6HmQ@Ulb%{pU$~cP{@otV-#V>;2oR zguD3U`~R4IHbQju?wJc&-!!&u16^|^cVwzz$E>)}l@F&AZK6EyZ_`5z&-(BC;D!FL zsrz;kChxUbA?Cn^@Ffw-aT3L8LE!`2>`C9f-AsEOK9k%lUe$0#U!xTo32=!^?4{?w zJ(e>6@&_kqii$}Q-S6_oD=CuLU4}0`mf9T%WN*9|jMwPD?d|QeXfFrF?TqFoboW0k z=l2zW4%=xSyJd@r=@*AFCuY~B%_A$`Tf_-~|LJqi`3WchhOi(B4WxE_BLWw5=CrfC zI^5G3{pC;h33`gJdFKblJucL+eC%W2NSpwF@*%F3lSFj+*umaeH}qo2g_JxjDG#aO z);QGhWL?o8+-J@$>URzO@9$G^F7J;-DHv1V_oz!>KWEareJ47(ze-bn&652Na!}7z z*fDLks9zZ5uGU=SsyE-F0N_8#ji5fUnQWPGJaBQE*>;ul3DU>A?b1ON?Z(I9n{NEZ zU0V7%_;3^<@BB-f0p-%!a7FR+_x&}qpmos)tg<>2-GQ#XaeQaNWj?xeELjlseU;Z<%FNoZ)(#XNh1)!6P!VQJi)pszUxIKsl#aT}Y<#y@S9?Arrux-~p zh=sp0E7rJ=s~1sS-9Mv9HM8Qx+8pw-sI5)C+72SMp}dZdDeih3w=W6L0agZD6xk20 z(Ay_;OofpVeheJ5fOBC9|4(3$v(JXGg(vVL4F37plZb@4d|B8?>K>ZOV&6mk+r}>5 zjnk~i)vv!={6gR%bZdxx-48ZLZNP?quTS>_Y)OF4(WA$NeVZgie2XIuDysKYb!AicZwr)1SNCC>HX6r*9$&Zv zp%UrX;OZtF;x98gChLL&o!ZP`1Uh^|(wiSwWjsxUAu&#O6L8II;b0OG*unXr3jD?aU zEu8i*0U{s2$nQ&5&#jpV>=CPXU#Xi*e6p-q794-MGEp8`TF39@7nLD={Qh#Nl)8RM zM}oRThOKnOtlS#*q%bnJNDdpUNEYP*OSbOzI@ivG@=-sluLX6pG%ifP`@%7rPN*4JQ6%&>!E2Isbl6b08~c)MyH z1y^tIYkX8fT0cX&pwPHLp%ZNbDweu=s7?AQ1y61Fh~7(Qj;XswXE*;d4&e~X9w=49 zcYXW~N(Pxw1=*W4>U1366NVFd+b@tNFZFGx-_{1i`}Nai4gudf|E$51Hdia=W<3`u z0Pz>~su99Sz1-Twse<@OK39z!Gdc)m{;irNX?6HY(5Tc3#!UOQs%&t#rio4BQ57$9 zJ_X9xDz{g?q~`KFT7wdeb9371%{I&`G|D$Jccx8GhDhiE@kG%R;~_My*vwr&sl~%I zM?>4soI6{(L{wa`^8M`ja~;bD+Y!jVA5KEKs>I0Y$d_AWp@$^da{7hqz>0*F@`%~! zsPpsfzdt&uVAkC_z^EiXFbI@Icn0=qmjpX&gn3$16jd#yfd z0x6+XdNe!dK}Y=R#ve8ah!~}}zAof2KA@KVUIG;5UK6wU4AE{0lYyBMs z+%!#|wx1lI<|X1LjD5_m&UDqRISbV!Ld`h(7Fmr5j#Z3>F|1~P(O#_e8lw-16BDh2 z*;HjC-KH)P;vvh!O<;Nj&cEW1bcCWavv@M$*QC5OL(N}7phiIbAVCBYC#KSE8BdID zm0f%y$!Z_D*#<9y1yXVLB%D>W(L1{2DDvmvsCW3XQDJg1d%=~F$sknW_;omU! z#_Hpk8u6Z2ad4I@{>Hp7jxqjRk?upboV$Z6&Y1)Z%$Q%nhA35xi;q*~{IPGe5;>vg z-j7?{_>h;ycGK-O;PcDhjnr@d>3m;ez1Rdb8e$nR^6v4g+89|7Bn7=7mOk=@(T3}y-%dc&}>uGqrXMZWbSkTZIQ~y#}h0UDJ$bq=KuWm{G zq4WB9K;z$;|8&P+PTCF|wIo`-T$|gr)*GE*f(DA4I`i(I9u}pa=cu706&XDuw%<&X zceXrvj~&(!yw%*TL$58CjwUFlM>-1y-%m%_q2_F3NpIC*I#<_XEuydLX@DNx9J7fR%uk*jxa-ADZ-a!MyMkngX1EO<_XZLiv=OHy-o?blZ$+&nPAnY{?S z&!=KEPWq*;-fb!yt|eNbKKZ;hK~X9IZoAzEAiH+Xpw!}Dpj71z9a0wIoe&}tK6Bp= zyci}x00NEbwFjl*s@)ctdAMP)9f9bSegSUyV97cIGYg;(!2=W^3-|(^h0TG<{-57w zAUpiV-?29UNEqWVdmgOLutVEJPKLt=GC=urT`hI_0}7$m?Y zp7leZ+r!rAP<(=EPSVYegtp9%!Dqf>yhb2VMZ1-UM#UVR;&mB?bVGZ(xk!03Byfj~ z2#d!2Yeg=`f(M(Gl7WW{)di(2B%HbThR}*rLk9%l^CYzOke;(;VvuRWsep;CV^mhI zJD|$NT`VN2UhlBV{4n?Twt?8gL~3IN7Y79V{Xm#BZMBKuY*BrN8xzCnw;ldUtIgk& zW*is+dqAcLOr+iux`jXu#rxJBt(x5ied%g(at0!nw9>{sEEIA<`LzY#xGZcF=K|YV6Ygd_7|Gap0CV(Y*DaHWkxDT^0qsmp zMQ#mfpPcufC^|Z}DA*LO%9ct6w@!8U@RG`^-(_pGHRiyOz~@#*D!&IEax`eYXp{s2 zH_Sx*TRnnID7GrW(SxJ;wUqgsFw&!Ix(R<}m~jsju&4{CsTwsaEqZ*DswC-jclaxExe;bK9>+?wN3daV_j=>(fh}=aQb2x(Cwmqht;*JZW<^7&tENe2; z4ECfegox1aC_mjg<{Ah9-6SvCcvd7&%DKVDjY=u;%$0 z(5W{VY}0vc@diHDHt|yCE+wbHbtrXzQRJV@@3?-kEjy|IAV||h;Rv482W*5R1+291 zG)N7&<>J-U`ArZB>LA}960HK(=YYbqHVX5Zed9A0bVWZ`yB+i|uLFGS1oEBqZ#c5! zzM$yB+AqllBD;w&Y7jxC7FFF5zn~s55G0Syk#vyiBf zW;I?g&8KG`S?TR^u?)U%hCj)HME2ALnV@^`07Clx%l>${XThG@!T>!MbXbcjP9P6* zB18)ZL~|JPf`89p@Y^*9!1hjC=amxZNpQ?pC2|Ca8fj})5W(`i9r+`hsHlqgC&u75v5B7#@MV{FDUeps< z0fWCNjFfWLS`rmpcF{dBf z6{wT@_06`IBJB-OF;HYCy;g^^{Df)Dokn7zB`4#88VIQ2WEbeYG0~W zm{W2no+~Fxi5aH5v|`RqZUDr{ih zr_xA*7xE0V30x`V+SZ>LG5;y*Yia#`BP>vS9%QBD_`&)NhldU}6Scuj#wLdvS0@#t z`6K`VR8EUJ=vO#4oDm%ITMr zqXKHw?crEuhWh2WFXjSqEs>V_*F|bD97LSH{orB&^NR*828+wqE)>E@>Ow=nGMLxKK@5owOurr6*+vW;Rn1!`+l-6tsA+-M3mpBtk(?>M_V3d z8>FI!r~{4y-S}S+4eFz2&1~j(eWR5Vc6UtkRRJ0;;$f?`bKR z*NgWc@2CEBAj5~wCqp3_QNUQSkBeP8`;(k1f6rxJyW4;hkf76>bi=f^`1JCOQh^%uNv}!kW%nIUDS-*M=u~VrQMl@4c%{0Yc@AiDzy#U#E{>t_ z&_6oedry{p_iI$JPd|Sz7LbVZ{nOHx|3c35+POFtMMlA<&p)w3m0S|GDTQI2K>iEU zodJB1efbba?&Co};23YX{PjEK!}A?^hR=3Yl#sn~gKs5d3|nsQ&p-0LBL1xjI!Ot) zVrSP}=G=6LAulLLthW)Q+XV1*V`x@y|QAd>=icYyDvc zPQle-k!3DJjl2mbt$~;md{rBIyxA~85HC>Z=3}-qU?w}xlJ0gf^bH$q4nWS>#GhO^ zr~G}k_}eNhtqP0T&e@IG(z@pfkbK*^=y&g7%Nx3p6ZURWe3WWYeFkiz4rPEB=fz-x z3B1cXPH^l(F~)JyJG^agIcgjv=7HIwDb?8h%YSs^hMsH&?kG-?*QuecgOcrbOh560YjH}T ztUmtS{SG3L)dF-n9-O=Y!n%r$O*Fh^_3gv(mj4zZ9;n=um60y*+s{)}Y_c3%*D?`4 zn3-*ovf2v>vx`p*XyEt6(-L&UYTSrykn@MrX{TO|)1~+4y7BLE32|4uORLSw_d>@X z0~v1KSeD1Jxi80fsNgfJ&xUMCv5>a-WWew&&`eGfLpGn+?M3GP0`m=saC1SgCN=PIbX zb28o*dJAJ2#lW#U5Z*&bz0v7qrDp-;PCm2}1aoObbdZ-BQl3_wHY>~1!l>ClUQbfo z^z5hI>yPXY#|jU6NMNL9Ef6pA@9QC9!DRasg=#jg`7dQaqB)ZCIa_jbuY8qZhhhJT zhZU*@07k9-h9@7G{pQ^CJo*g+e=YL8lN~X$oq&)+;{lhzVE~t-{SkW%0vNX!mRfYx zF1KO*4jO;b$NoZCR>0KHYZ>{ZeSu)17Euz(jVGmex&@Tf$(Cn7MR>H8`v41VY(-F1 zG+cZ;pUn{!4L`$W%=4D~87=cS7!zIb^|TA{)GjgJKbju9Ili7%gOQU5zz4lYFNK_T zh9%_vOZlxzpjm$@GwZHd2;M6p z15e}DjVp*xrsn7HnNh+d<_q~~Q;99IC=E!Z5-Knw zj?*rfQmsEaEM3)C638W)WZPI!6w?tUO%(qqHQl^V2W#;Momm(+10PR=9LAjFcD~hT z&jXY25I$0FLxwXy;7?BrXPI5#jKaw-JZ8*O{oIA(`pzbr~+)5M4nc z9IzybxH-R^2^<2MlI>M(67kRX|7Kglu$20+*P%$zyyUxadKRI8;*&O+VSsZjqITyJ z@Ec7*_LCAZhy&s%L5;{v*#eB~Y%_$%S%SL3nbM^EZ-|47_`h9_fcp9%Fjui$*Lk*s zT96eGzhGlcdIK&gGVX;pW0}MdIl<9PQkkLK9xH6}OBVYfHJpS1kI%_bu)keqUt8n? zlGonhiik-WgN5|G3h^^j()1leGXY-nCa4a84|^xB3QY_eWQQ zQ4pYO_lRM}MUG)*?tX1TW409<3NMra=~#tqZ0r03s{H~W(?*NbEsv2(0XVrBV-nl= z8z=3bXJK6A)eLdI1U6}kUun`OE*&jR@+VsCDw+&UeH9%21So#uK>>)pSuCCme++F{0@OkAW%aP$dK|%=5y-@W`Tnt)C4^jP5 z;;fsIlN29xy}PGo#J#|e9#pO#R9Oem^AF`@2y;-WJ9CLgbNu9` zE9b%`@G)L5iA7v0KD-nZPh}`z)s8;bO2a`W3ue!Lhp-4|d!|uBmH6wO%slEw1x%GT zoB#=iHQ&3k{IL1Mn?}>qJO12+b|YR;z`H^0_4@hueQHm`+T{%1>|!QR$B(1hoykyh zrVUvrjB8yiyf)KY7E`Y8{7&>;&AfWR;IPG#7^U7&--|P_tidKI)eBHnm6AjBf)H&C zhUVPyO)|}om!NKpsGSP_6ZMY;=$DgYBRUq*DzNCJhb~BQep8}K?Q$BoCfUygE(FM> z1twzX2MMf!2(8qdIzC7%PS&QEX@g@upgVZ$;m7@Y&=eVrO+uKspEDZ7EYG995iAuf z?AVY5``DOhwi&KgBoDZfVa!Z>ee4@jH5!{3*QXU0BV*q`S&twsv z`jo@On*eC;|sotim*eXAalsK@hNi{35M#0OJY{JG{zXFIl zBv4i_o@O~T;97}SHM|eSGMPzWb7Vvnnc?IAvi@l3&l{AYrhQ>89Ru%Xzu@MATIOAM zZR(2Jq{9({}MWe6|B zOu|jKW-yf?=e}4%0#ge^0=D`PP{Un!Fxg9NcBO6RN~u*q*}qmo4(9lA4j`V*rP=nb zEzxkWQ5f%k=*4R4Wdx+vWGNXraF0kDC~z-<0MVk!^d!!K8_};VF26Yv z@KKj#%P2ck=Qgsf1YNM+$HVWR4wR?@h@!o{3~@i!>nkSQID{&IW9Cw3TAkdvKqQ1o z@DP{Hf2DMt_s|Ju58zh~Cj0<^rGnN>n?Vn{u{@4G-z6p@<6_$coq+WaSG(FLUEeV` zIk8FBHCjTW&WYiI^q8Ll4vIahk>~+)_z2prK5h0pjhYwCz z-Ko&{yH>F%HoA%JVjIYC85O&wuzW|h)-c5(&af3W^aik8-Lj+>(+RVY641s(X-J=! z;;seR|G?l!tAAWlPgk89y&Ex2B4nUy*o^4I z?pUbV+xJN>K+mnKKNmHIM-jtE1%!;%QpNC5t~*+msV7q zEhH9m0Z+wISu{LeEp-#4#N2WRN(hYybg7EV4Vigi5Ehm_8ZPecWqtT-izka%01)W6v#KVFy za{>@VOC4}_mN!vbdBd*?fO3?5F~hd6?4@M1tx`KVoSDgVeN=D>3UQaxK1`P?ALZe# z9|5*`yE57ohefFk2jleEG0bG_rvRQr`Tl?zFZ}9C+v0PU$O&+>LqBBj_d64jnIpQx z3J*;9fIJ6!O#1f*ntBM9@8hQSOHXo;IZ&vGlL&M*$HE)sw5&&Gke)L`farf^LDv%t z=1dIxbay`=vbfeZB!9o?U2<@@`rFm*b+dTb_s$9~lM%(Tj*#R}ov%B+ZCJVvJ}fr* zsEG2nTD=!~z){^F14$vV@=AMvWEL58F?abGz8=gi{v&bGm3!Zk!X3L4VYmScgb1K{ zeNlstd+up>K8i(tYEr1Nw<2~pWw`yv2Vo0J%Veo)C4lmU-3$VYtxi= zbx$|d1q=>(s2U!o?{b4}#3_p`qCQtDG)ju2OzlJBjkrXUH=W=;kdA z;;Nk=oY~|ykb?U(IOza=mFNom7Zm(M5SE)uXYR6bro>qq9P-g<0rlV;Plbi0II2ZO zANyYbVeT$9Mo|4+cD$Azp)K3ILNTch)dss~!u2hY7%%mGsfPlP-&%^2sw(9tFT^V|b+!^`{?U^ZBJ_7sr|^fMIw7L^LcPV6KaZduE;!I_>7;#T%MNmh zFYS^zfAVtBAat~L(^BaokDE3kU45ES*vN3`+wJE`^xBt5cF^j9=JXwQ1=>Mhtv!Y;De?^jX@u z!zUGCBz8C3xe#C~_ddJL7LJs;0f4g>SDyDxPY@3+KCHg@yKMCYW>w~t)N_+;3wlUAC4{O=U=<$9w0(PS|FiZ5&4Q9GfY-F;EcO6bS%YkcEh zO{W%L)LEk-J4SmA}LFe_=SGCT;8BN(AP!9#8K{i3AWyA zNPfoUCfYh&Gw08+jyFZASN^Yps`b6hswD2q)EQRpt8JiG{Uv(9rlWfCIKvW=oKN`v zMno94MtPxx(5EcuhHZR)5Cz1gI(>%m^j?*l9o_uonfxRTe3SWCNBYa&XEa(U|?d0QVh{4xHMp2<6$`y)!g<5{yF%Lgd+ZLBGvATTdF;Q`%d z$nR&18I_{1gNA2Z6aKzLv@aHAR=e>ZVYn5CSrDH=^N7z&E)URlM^a)C)7-0JS{O}P z`|XvF)0*}TzBlji&mlG%Ne)ADbHrzRXCb9jDPdE@T&9Nc&Fs)Qt)z){-t5gZ>+FoVo0v)qB|O;S8M2 z^#{~AhOV4aY?OKq;KbTPO(o&2k`+QjZM33$a6oaRUA=>#Z8v2hw?ge=y_tvi@<7k5 zWJkwr@XhS9POf>U-MAT5cF0A^vtt%Lx}$kd>+IBJPiKCs;X-fKNpCXw>>aNxwy{`PSNG#=E)YySV(d(XF~zO8H63MvRBbZHU@ z(mP160U`9>i}c=mRY6GT!2r@FNGBk@NKt7@M<7(;2S{(yJ3QO-KIgvAhw}%#AD-(1 zlI(=Fch;I~%sIy#d#x}Pm!cTCP?5e@UhQ62u6it`3r|66?>j@dg3jRK zk`O_-#Y~8f_JG8!J0-GkE=C)|eplb;>uKRyO0kQ3Yq-+)7DlKIvMS7E*8Z1pk(7p= zDm&P7&6P=f#CWhgm3K33x7-}O%>o+l$*z84%aX?qQX|bW_#q{Dq=&wv4MNpl(01mx zT<>nUDsYM&k(y!!ryOHy8PeBSZe`;&2Bdgi47iQekfg-HoHbxZgXI=OO|jo@zNcT% zily+XI2O-Us&vmk*_(5J?0I(5p1JyOEkLfk9m;{OWj|-Xk^3fnj_xy%!GWzKcSIE2k3H;m2tFPe}-F?!%2HQQA1 zNXavdGNe9T0CdyNKqYS=H&1y*3|x!x;H4Vs_34E47&E5ja)o&0@Hz2^b@%C!!v<+# zeo|Z9%Yz8Tl7o4vk2ai-eoS0`P0Go^+Vf57b2$S>DQ;}({CInhLFccHg0?(2b`6L@8_*dJfsqKZmw`cnC{xI(;t|(v^`?tRz1rt<}EG3>shH@;E{M zqzxf*5HU(2TSndz+|b2?i~w}OV4`%Hng4)lh&uHr2yiTl7CjYX#-{Zxi=Us=b$@tS z%8Y79`(FN08`|gzi(l-F(?_A#r)6nd1^sT2DwOuBTfs-8M_nHavZjsNIx+_hA`mpa}_|Tm`Jr+l( zP}GKW8}cNJH}V8lHU{t6DnO2R1bR4v6#@^WVh?Ac3#Az8EXYqRECp5L82L7X_@p{@Bj+pVfbGTVay*yZHU+1;@ z9DOk#@L0|LT2VRQ@my{JD{8SBa`;K`p0_G}mSfHqjzFtRTXpMN1&cv?C!PT1u? zr;As&^*l%f{`Fa3-chv!1LJ+G9X0tUy_^aYtKYBM3nE*#Q?abv^I8p_?CxPIsvdyt z(IqC^NAso#K7R^2=q+HsQS};877=^+BkN3Cx_ibdS5!n@>=+!Oe&J6VhI3KmK^DhI z^B~urG41)w538hwpCmkBd^o;7SSsQIgBS~tV(*O9k%`$Wb=Y(Qm zWg?eD{@YVA`T(@J`Y#pE>~!Cpm3{VHa-Hvpw`j$G{vEtJbEV5 zJ6W6g^-2Cv1r7b_?~pj(xI}L)(nsXl*c>^EJ)AU1Kvb;Gz|{&*a20O?;;-ZHJ_) z1Ki;J^N)%}`%r+XdAqz)N9DXd7=cDi*o(knm0q?*Tk>Tv-C(9L9XL!YgY&J`+J)j& zwQpn0U#zLh<|Ybvuwm}KxH-3o<6r%3W49>3qC7B=3gikK%l*WTS0uK=7_qNLLUbujQLqcsiNU!9pB|@k5ten(&cCY6=dTmC#aoN z3$KcG1k4x2SSks!HL4*?-j^CBvyZN}yJ{vu0Fer-o*x?FCa=di^Zs|9im+A3z9w6s z@WamB{B=H|!dRlObImreRaR~pg{(T;1qJpB`{)UnmIMyl?@wooaz^l8pTd=11` z4l~838fV2t(v>iz+q+C`I-=U%D)`&`wJpJ>sWAb*JSBPOU6@K_EUeMFvX6b4NE~wta&U->e-E|O&5SX}<6>T98bY)ohu$k-GSb(eWWV5< z;Vk#^$dEy~ovV?$X#Tyx;HCp7{yhsWkPb7DRP8tS!^Uj$5IuT08(Nhe626~bkUHi9|Pxqng=OW;~k%6rf6`anJqpJqW0){N)OxOS~v z4r9c(m~vL?F+iU_KRP!Lrod$Qvi7AN@vpQ3UwdMlK0Yj}weg|!^N}@s2Djy(8;5o# zsY~wt@}@SsFf)4gA@A&sOBz?NTJFau>CnZt&?uO0&Eo>t7=HDGz($RxtLaUO^wW&v z5H^yUi`so#QMAIN?&}F5WaG_qAf2(H+MzUh3%H@t0_aBx!5>|>m%_>{L%iFYaxt9o z^t8P9K5|pprXRj4Xuu@@U~Ndl>}}r`NrUbB4_b{u=S`xNbc@6?`N8CTtWb=MW1?vBk^Pv;$N74+ zZhHY?SYRJF%{;kLtk-!>CahN7@0gJ7m)FXctj<)8!o7_Mqd7jj%Hq3*bD=Yr??;z} z7fup9FUPANw;rzx5q4u?Gs?Hb9?CWJzbJD#WH-AuBU0OK<&uNL@E@LiX0#QniMZvH z9AysC+A*=?+_)m~juH_(Qo6)4f(~L}x+(%}JNaNIj)wuX2x|AV1r#Y#C0ntW~Fe4Pg;yQ!nu6xUs zlsv^;-eZ%qZ*(iCi$tygG3+4s2epeT{V znsBxem-Y1uaephgKuOm&zh9kDIh_>xO6x-`STsrjJ8{Y9-y*Y371Jol{!`kUr9GQhtR$oJ#Ah)%8% z`gyDc7R}Mcn3z6oeTgA9xTd?VE})$cPWfm3Qw9Kc&tveyeKgx)#Gu zy6X@4|1}8cW=a;aAqi%vBQyss4-iY_0rT*!Y8;2W;iAKNT2I%K1{Jg)r?MHkts!=z z$72G?mvG4q7mj-zFmmEXX zfD=?qk3U^Iu)3wv3;5Plp)z@cu>}sdyc4BaTN@UsHk0+dVmmJ5g1qJWe$BXchac*- zipHQAId0%B(%0=F-BLDP>>!3<^~{ya(}U?xDLpxq)JUiFn(x|U7c7Od!7NfQ184Q8 zv#RZ((?QHT{1y$}I-l!$aR}+BSJX%Io*%RznJ(5Pn;$SU}%UI zWmNFMz9xCJK9FczS61iFl|yH=?4H8cS*uAd%t^s}LRIk^s5R*Qt4GR3+;q?cOTWIFA)?dbq{zHBw)u23d zHwK0Vd)&D9^J}KPih+gnDX{E>cNo!5GcRVwh=l0Ot|pC(u)^QjRx0R0N?XZ~a$@gt zL;K;Wd1%CLF=S8eINmyCl{Ct>{B}h z#bh>mlSbpNf>RyDmA=)%VLW{6te})~>ClV$ib?=tJnN5@(9}t87v_2p_!Mgm#g$U$ zj9_3fypyKwSaSBXZg)X(^W#coQ(p&<*de_3NVE1(PZz(|P+{?JD4_-f5ApsEY5ekg zQFQ*B)JPze;kmwa26(;iN|%dt#vzW;tVV6}HjueI1ng)ZSZeO_JhYKvmzjt6tIw3G6X4323DXY+7l7kYUW2 zIUdg4a6UYAD+M++}0wvgiN%>dF7apKr&+gO<3V@puO z(I(yTS9bl9fCjG%x4;rK|NH^zXVc3ZGNc^u+y%lfa9$%W2YC|HGd^=7`KA!}qIUcD zk^YEu)zPz++gt|8*{o2jvVs?j(wF_>q$7@#y;s`wQce##FP2?_C}i}Xlotb`U^RgC zz^q@~l%_nt`Qyp>h+(uEe6#GSwRqX+X+q3Ma|5lgW!p$AwbZTnOk`RG@8nkT!%VL9 zXgFMf!e+A?og?WK=LR|Xs@>ULSL3fPsb3AP&j3n*R#Ktan-noIso zvlj;Bdgm?rE9C^8t8x7HfoHL3ud~Yyc>|xXtdV)#WaL$+eP$4G&$Pz2KGs0LUiFY! zCVHLDydoGHI%xIz8O-R=dI+SY#`3 zUvxt8^OM=`c0Ti)f?8Rn`Ta_R%@!zinknXX7Wp|FAv6f`PHVqwhd8B4GV!e^Asy&C zt;pXdKnHk4=Xs!u0z5O%#H7oV6oi~d9N{(79D7r7EFg;zJyN7PSnF|m)nv^J6awyt zc_+A4g^+)iR~#cN88HGO7?+A`pR-Oy)Nh|q=h<_z?`v|UrKZOey1dYP!hT0*z$v7J zSdFLMiUL`=B|pj$962^qX6m1e*l%l%(%t&SWK|jKfHsN`9v-_Wt-9g>A~A{CBGaKK zY0V+J{7X8@4?>@|%3>s2H!h2Kfq-OU3 z1VImJEn~zy6u7*vPyB0>*TchSBfqtcW2aUs zAa4#{JP($~%rA&rfon)&aX;;wws$)Vwk&|Cv~DY)E{_AZ1$(D^7;qil#!(HP7s9Lf z&d7NK~=gB-|41otJq#0>g-(M*>0o^XL%+(pJ&#)8C0@A zQI~^kX4UP=Q-I8oI26EI20PMVhZ&t)P|)}_f(1EgM-g2C-itool4k?oOfz09!aEsQ zB}v0=4&^RqK83yk$a*b+-acM16Cd$0h;AhF`U^eO$d`#*^0BbXR6U544WT{?Ahm@v znK6ym+1cG+$jz9gT)1Ce`*l)P@0%$Ql}<%%`0CMTa06USn7EaaLV9Six^F62i!z1+ zS=_^vnnaonL|IHLo7nxT7h6-vQdOTP&HKa@$jNC(1Wc!?#`ach&g)_&SkL~-i^o-s z889?;j4OaG`0X+}CjD!frx8>cVSg&+sHE)DqHr_Y8%K?vQx%9VKQ_vx3|h3jLD=D6 zf;Ar?So5F35@C$@X2`WB>7Vc1jF4t1U3#X0q`?qAfW=_-Ghz{yX5%L!^=qP1r;^j^ z9=w-9Phkbb5|TOm+zjeeQ_;kIJ*MzXhHLT+h=ya@xoe_}LfuEBMEm|w@c06U`EtKL z(qRDD;}a=OZiJ8y#+l+Sy#vo$Se^jiaVS?Hi1~U;bcAL^R&e7Alxx6@Ns4Trd|UWl zfd%f!y6gQ8Q9oIL7HhX0k~>UB;x2yO!-xea@I-{ke*bE3xf|ioRH5?Co?PoRi{(*) zX@~?AuYwi4x3@ZS*jY1et+55x)-p9v$pErKbiCPT!gL2N>(n6=HAv}le_1!M92oIQ7D>V$1cZ3ebD z^~L9yzYNLy8fuFTd7TwLW>jX<$j#1T%E*}7PB!FL-K~@2WuyWn;P4&EDRyg z-q}oPbqIo%ZE-kn)fm{Q^j;%3eC*9mMUe`z#pnhD(wNf8!zbS$0%Rv`6)ECncTIf) zS*yvGmvG3z>RgQZT$T_shSNTEH2oJdre6Zhuhq`Y1DM_%!JbeJ3_THk@Fe3{1$o-c zNQ}?9Ja943+w;X8hPOmxH{#GMcK8?NtptIL+e@qUD(WoE$oNWMI%6(Op3PogfDG`) zshfpK%iY>wA}VdoV~r5|F99K%KWxxf)Igtenx!Udn73U~94ZfqDhRg;d?1ttY5$>X z!h%J$f-VzS1;T=dTN3@}yb#a1I?V7E#Q3J!iS>|c%tXtUsd-=Z?qQNk)>5$!DacYK z-KBZ6ottg(V@{d6!zuQgtj-T~D`PJh2hRAa1~Kw2pQE(kMC^<8cZkat|0I z|L-3JJ{s}w=YNlCu!0``&zlbzb2K5~|M;{-9*p@vJ{Bxe3WxniQ;28(@5KMFtN;IMT=jx=KY6w3xE|b(aB$m(?FIzaq}3*jX>uQasHvm= zYWaYRjx8?LDYKRJe@&VOjj-9&&Xn=@zV-Um6IUu$*W+(EMB(pHu_MvgzmTy8CyqYh13!z5hEU`+-I1?C$(x z{5-s$Kr-Eo$6NI{5|{chOFnZu3lBttWv3a}MBL|^@p;<*crehnQ3o~5Ki$wZ{XY=k z6)KBd%j7^IAaZoy)dV=IJlR=&8s5W9K4B>pMoVVfz@WN^hqd?B-qZ>SC2VXA{VzN; zmHs{XV=$_92PgA*8Ts-z9$pdy*S8(KhAP;-SH}0dMriTyyr^yx|NekiIfT3;SLtR64lZ0ydUaIIi8 z3E@2w!l>b&xYrePFICa4USm$hsv4Gp(ywxMxPAN#@!Ri#oZJ+G?VkrlKl`VNW2U0- zJr%u-zrDC|ru+lEyH>AM@tcG8sd&yf+py~SNh*xExfqJ33QLl_6^hzAe+-AvtA)Mf z3H7Z^?GH6%pv%RzujGo(} z5}P(TI^iREz$)(_#A^)Z`5+u)I9%O*+#+9Ju>REfG>dArPQ)opBmS!l-P+cUY{keB zU`>KwW@l*!vqWpA`kva%c%2_Q_74oWo_hWrKZY><`9Dh}UfBJ40?I$pOMNt9S@?F8 z!e+g^R5M)k@69Iv?5@;3fMVRABq2PgGZr9K?4+%04(1Ax_f3Y=ImA?yo>4DPS1 z_2}dCx+*UT?u`iZx~7H4!(og!)7i%bm1SkGeeaVvF}zyZdjIp*bZ7t!yr$>K}QL0kxye6}R4C z&Aw}(HA`@sT$Fs%qdR||%vc5?S;dvU5dH2;)iEiv46>pf70wMT0FU%orc8@8XVSqO zTy8CmlIuF_=@t^KZF?kr;F4rDCd@R0M3K;N=d;f+==ZUb6Hw6^s3-9t8^dx*dxWMV z9mtm#MY>xzMjtZT!~@|{wI2{dP0?#Y_^C{uD=h&a*bS5@sol%aW5WJ<0r<$`F7HZ=szc0ML$HLe%Odu`aI)y`ZXOiPN72BVVd zk6(dNUniSopF{&DIS3vxh@9rLR5tTYHguJ|PZq0S5_eK-bUc-i<%D{&hBZ)~ z>azG;U9(Xf`ZTW9An$|VE8$IN*P--#230*_Ei#|(XScD4yJxk=Z~l)K07ko8Z-3JD zXmH9uWr1i$)N!3Hqkf7N*_f02&N#1+F<3AXXUG%vte4Y*CDK#~=piF8PNm$B#;Ytr|Bl~- zv^5MV)(u_5;v2$80r>!L9raPKzf|=EGhV%8>Ee^3y>Ns=Y@UmL6~vpK6|jpK*j{_0 z+4~U~q=*kNW}EH5BPIC(X2VsUAKKi4jBX=mgC&wrqBPlqG6m&6Lx0u(VHJ#d*b@k50bLt zlmDLl_N!izpy_Q%o`KvMzeBQ+i7Zk%rH=n#)bUOx^(ATbxp?QdJZxW{rzp> zmme#Ju+K30>gYwRFtx!UTNMA*IV&*k6|G3a!Hw+1W?vvJ9C z3^N@XLf#$!DY7q_?NC+0L?Sbs?5g~Laq~Vf&zXKl ztg`{e`SOc?w{yCn>7cl({Z8kn4xbgzp7nm*xsiYA(ywE}_KG(U&MW0ktKOi&2t<>e zMvV1E&Y-DJ*5IsfU7S|}~KC2Zj`Cx_YvOP1BWHER11tc}enK*qq$`mwyr#VC3 z!CRf@*#w)30R-oH{9B7w%I85e?GkT7jzsKvbERLfRvB8W!qh#y0-LAJofneb>H_b? zlJx9-S$vergF}gXxd2}9;c|?io{TQXSr6WxG(O9-3ueicK2QASGnG27Z{ll-ltvo< z@ShyAcBYIf>H;|n>GmqbQN~1lD2vbU%hRw{S-sW$_w@gUKw#4`Lypkrs*sA+RU5JB zov~X{Jw;koQigOd8tU2$OdQ1+Bg;`hzp3Xp2)+8p7;0rpR;BqVPkIdHoQq`x@hr|F zlNkw#(>y}1nboiSQ#Bg!&oGK3;F{LF`9t+i1F8i@UE$tWw!H#vcZ=%$1G^|C7YE`ZPa8u}nw5zaB1 zlJi#KFg7tE@d|36!7gS3E*t-^^BdGhBhm(QzZA)V>7{}mt(K?sajbf5ti5CeOLrj; z(r~ufb#UqeZKI10Cv1#UT@2jl^U!hhC>I=StXN{|>Bi_YAcJhwGUZy>PuahJqF`#; zJyWn~WD?NRDC-d6$vQ77eQ(r}}&G| zEFex()>B3xTpn=dsA(7QfsyK8lo^s1ACUH6&| z(tBOPT*CmNY0@_`CT z2mrrWO-QmciZWJDLh|gabVl+@IyRuH@i^SNAqUoi*vKM@6tE51!JT_7d!y|m9kR+Q z05t=4k@KHgm-cPO6;@ECS%n(XP~ORo$e&&ciLcIOZ9W^k(*I+7lqL~e^%X$(C%~XO z!XS6*kZAd1Lz3uW#qm(We_CuxYhV{_Gjj@0+SFw$d%$}CG4Iim(_<3G0v_woO^mD*4gmFHcui( z_g}HPv0}(4YHZbQvhL`S(W$5vOOn@?4}jMP3_a}mYi{q-XJiE%x_B+GqHFnIn;M84 z%gMU7(`7rj>qD&`cbO8>xdIt#o%B|u@$`tKM8Y>2%4w5Yp|^iu8Ee~o6KQ_qR3G-R z!;H?s*%3EE>a;D>dr0dg#KvRRnJ}OG8j#Itaf_ohCTtWxa#mGrIG5}7FZWLyrzE?KHV-)KpIDp6 zn)*{O!ygyx(bn*lrCMK@dDofB{RnEK9cneK^m2nmKy`nI_3dBk)7B^~Z=z-lhg`9k zHuIA!m-`jU$bfZ;og2-$a5CcWX#oq~vuq7Fe?)eqed%+@cuq^$vJkX}4i zn%m+VKlhUA)tx!9+5zpqXsAUQ2??@LbKZZJ#}`(IbZ(;1#=>A(~wd z{jyF%{w6^rkDP2(2~RNMxCC4($s0ND`wBlCgI^H-Y88#6=(`Sr)cd{s&|q?jfgF=N z$(qo@!!m9o~`kefa?g*F;7k-nfTpH)dnKq*OcOxGCC48;hR` zu%y3QJKnPf-&EQxK{0K^9M@U8Dx_5OYqADK$ENv_q6o|4``B$hi^{(VOmD{W3%yNg zS|<%gX=9m}f{CwRznOcJCx()9e)>w&gfhrG5THEPsHrBdw>geKKuKUG{zPXBFMkJH zJ3PiCc@R1LWb>2^;skB=3GFCbkxtj~z^XdPmmwkD=?6R#(}3 zZ?K4?m82o!56^HhnldQ}Jwksx5{Dg_dl*&68LjrVF-z#Drn|ou1AnxAGP6P`HDS<3CW+Q4#Cg53;Y2x|3Zk!i*;jc=ADgF- zjq%l`hlNrK=HDjLL|1(;|++zM1-)@xZtBw{u!F)j)XgtFE&3Yz2WtTT}*N%mfgUf7LK z@y&Mj$h9mrM>p-;Kk z4!{;X>4`&p$exG$(E1PNbUj-nXg4+cGQfcL=-UcZQ!+E{wvM**^xmV|DMfHfNSch0 zXcqJ;&z|pj&WZ-Br)d=Q(q@c>ESyJ`&RVL@naFld*KV<~k}Yc>ehMoIZ+QkMxlGQY{oyvUEy>G_kge*ZW3 zd+8Twgb69U)A{zlY5_BdI(tY$ewpYiOJ~BSz2vjBaX3BQ>s!-!@WCP9Bt+ea`n|iZ znz`D8bxb5{y!?+{ov9S<0V1@e{%d5u&mkj-FMcld)*G|?%Ynv6^4@R?hl?ZxE7JtM z%m?rH+pNOKzFRptm$S?S;huj8!#w}Qt+y3DlkQpe6`2DZT;?q4i0&g!xG9%yyPn=Y zwT3WK;04kFrSF!WXvbJ$BPo`$d5%V?FRHg>xt@lr0;pQPP>&JT&|}%Jsk~XXGsD zzi|!P4cW3M@N@-)X56?xleH|vI~HWp%iOrVo{hjb-68AWvoR#zeUoRX%vWM>QU!i0 zaWCSC6Fw;HY|c7{C{!%x-@nv)AgTr*uv#?=>?im>kp0cIFxkN!>9B)bJ9!^7JSsq+ zBBCpFEN%8pO~Bq0?-n=L!ZoJjY+U67Pri?OR?P;#6iAxcRxy8*Pg(+*HR%@^_^@P3 zbk>SJ-ES8e(8qVy+JsO(3)AC4n5U)fnXe z7#$#zsr$(qBxYQjgBXBIf6?YKzI!{GzVQw|5+O(VCUwDNe1YiR9XgT(k~%Nh&2&~{ z^Lz5fu|#SR96&3B9M<`cY!9D->iU0Jy6B!2v>|dRgvy2!Vda*MOs{0{Z?5K5x$g#S zgi};4ojfC({ANc#1uITAWsx;RsH?=vTr~gdaZ>GLxor(d28WG;l;6QruEw2Mgn=6gf zAt>_jx)y@oViA+!YcJOOCQi=I}V+=2&&vj#fnL^vm*ca0|Ps<4BDBl;NbYOfA{ z(9w}T<4~;hke$VWBCr?Y@7x@uVNI*X<88q1)!?uZ@jt0dtG+J}m2J&;HHuG^Br0w8 z1L4B*kgyJPe4)+#(u?!rH_~@BYwl!rR=IOzE8d7Y{?z~Tvo;f`>wA0AP+upmbAePE zebs3Xzwysi-kttHo)#9q!JC@S#J%crWGxJUTZOgWWfk{@ZZ9ME0bKNeZ`8XD61-?3 zmWZEK&HOjUS_(n$TadvGR33ta?${9b|gi~;hCMDDw=)vx8~HI8DWJmcl`#=TsFFG8mbD$p*G-#tP&vB+B_@i+bOA9{SI0u1678dO>Se zUkvH4I+ z?+DyNJ$y}>`p3|bs6m~s$2D5xpVw1?p*K4{5(%FZ`j_ex6BY}J6Im-|Qxnrr;CDKy zLtKkAz(p7ouGUt&n_b>Mu&4CA$y;jlEsYbmSAS{0-q;pCdLS*f7?L|QA&YDb&4aa2 z07+RSNp-wo%_VCh=9$o|%Qe1dU*Vs?{PU7X;sr* z$uljoNB7C1bO7G#LuAMcAnp>F{#?g4cxL)&n-Si*nZEzCOGx9TpY`_08=F8hLx?n#8|@*ma=`l(axE}>F8ff8VUW>xPV^+`XC4`@ zyMQ1-)eb+*&@UT(`GZZA%?M;rcomSM&LDr7Y5 za}r~V9?@FEA_0@c5`+vXJY2S@dif-gZWL$anKKwy|-UWb9``h3N?TOq-rT#vnMhUX3?0^_X5&*Yhn{ zYxC>-4F`pq(|ohP^hQ0=VO$ybL*z&f)pUmZG{fN=#@brH4;&WB!38kp&2IfP#GI+z zcE4wTF~oDPS0(e80HLjZW)oSxFUfvz;B-RaA=hYXnlK?GqU(Q8(Z3u5IS0b7~)1>pQR>wKEm z^GTKTHs4d;)mZ_eeX;F>_ifA=eocj3uPwR;TB-Q!n(mChDPs7Z;Et&pM4jttkuqPi~Z1BY24P=a*vswX;AgB4KfBP ziVqd&c<-E?1<;`pGnD_IGQw1^BI@$#Z)5vl71$RRu(TxdfF?k&UE~DTg6FZ`q$Hf< ztPH7eZ$z{@L+m^^$M|OV_ax}W%ZyqD#&s$%sH(uf41bkYsvTe8C&U?a+b;CwBYfgP zOHXeD1)wPGLh~=)eZ~TECqs#IX;j0$>Qf7!?R>nKnlelj{c&Tg17*s^3i`G9Bo%@C zxu_y!VT6b)WBAL?(|nv{P!OS2bn(FZBB7Z4GO`0?L&WWR{1a$5$@TVMa(8t)31N~5 zTq3R%L)&P2EQ(5Zxd+^n;<*j)%p?j=P;MnWm(Uid$!ueZ^8U-YyCl7>BD5M2sm7d6sOLpK4ofs@Fw9#9C}5i0Bz_HH*7o#8*SA z1y<_=Y?Cz3rD9C$=eV9j>O->&o(e75mmnbD*W+$ z^iZ+x-}c|Mq8I_LtQ@0PUkkgJYDcsvlZQA{R5OvUbOyae`|UjOO)2vZRq5=iB7`jP zT1_cWoO~5KwfD3GOYlrY!?Jj64hc1=Q4WMiT?Ra2RpIN_DJM?#ms>Kobv91C zN*Ss=sH(n}lzn<7w(^YlpD$mhxXunxE}Q@$mD2(JRSyV`2)l8Q|HZsE3PTskfz8aJ z?>7<|X%q5poKERU|DI%^=ZJGi)q>&toL{L3j8KTwjXQbi^0LOD38=>-l`8E2YXwOb z>F@^ZsluBc|CBbtdaacBsHu(FDyV<|t67FZ9#5eyOJUEa9fr*TK&WI2{jW__2_vc0 z?f5*FvkS&$A48`D&7H?CY=2M+30uz|Lbjy6s)$cS(zYLVa$$kPB%ia zTKyo5A{sR5%m$=)2pf;#@jqNI*>h$2E3zXzMBX?^yxmd)t#np$Bq5FhRace+kx!qf zKm(pHUz|cB7PRhjVjv2V0X6D6(_>izKpD zez3|@0mCnG9sV|+UL@-uPbJ=VAYi0QCk&rlH&xAyZ*vL3>lz$m0-uac3yM) z%OV-kVG#GolpQGibjcj$TDRFVROp@ z!fE*Oz|Q#as1#VI@6x7n?BZr{=ZC4m_@l3B&y@V3oE6M z{NF#m3lg;{ckhRE)jBq#Jg62N!0BzA=h~j0;?~^R=!*mxN~r+#!=WIxK5x17pv|-9rVach_pN zfvlBmFGl8htUld3$s6`nwOg95x;P(BQ)c8IGz#(P6}*RGL>lJGN>TISp=>Ua)Da8d z5>P)ojfyNK5{l}zN&4{-rE25)O-bBVZc^bwt2XG1^0qgKA!B4{_q?UYD;~tm-y66+ zWbJj^;3+7L_uccklK}R3RhD>N2n((-hMqC}o7^L4oom7Ohdmcsrh*LKRY|fED7nH) zjSEir`a4=ato!(Zl!c5~Dc$p&4f%SW_{hd=sto?tc`u7|d%4sVaHf^L1{jZ#$&+tpUG|EaXG%IAJA z#YMk0+LnkC(GE4TsR{kgyoBJW+cgLCC4XnlEeZSmY+1N>C|Zf|hY#L5`f{gd*njwv zbl~F32Zab5dKpS_7MT?HgRpvvvpQW6TvdA}$!L2s@ys5B95W-&RV$pN?x>i^wzun>T&bFSmX)a6{m{7P~Hh2~Q)lMXPfUN{j z;8U9BYhv>Mg_F=bm z*+c#36nv=^GegBE6De(Pr{TD5Npsiu$8gwHXriqqFR-00lAejw6Q;IM&hw9@KB;@* z!~!gog6YSDZwpjoy+*qSZLjXKZHpS|>2r~fFf@y~x`TIO)v8(P+opZ_&pBOhWwDA@myrBJaoHWlQn`i&;D`Ik9SzgTWzT zt-$?gqTXh9?AbGc|`*&L|yt)bfv47xz zGx3>*TG1VK-S1bWm$86gVx>YE9%F}=Xt~L1!2x=jF+;UYoaUC|tFdyBZoaiWgUD_u z=42>(s)c3!9aHxsnp8x5R!6$*l|Adt*?d@edAX&X9o}ClS#NKz9Zz(UYX=~F1G+Ol zJw3f_|6fWnKt1?#nmFQ>$w_9fas|Cc@rdcD77 z6yk>}IsR8)3R`}H|6+YT9%hycUXJ&)!Heb<{HRFr!+~nSqg$k{$kO=R*auE~b?Z-> zoh=>B+wK4K5!S?AY#vJZ{hBPwf%z7IJs%$E;A@HSzPTJG*~foG1vi)58J{zPqyuNI{6&Zw`6=9?u;h5Zt?ndi(%DKXIQlQMFRR_i0)GqwHF zs-wW{j{CHqvgDg~8%4+U=&9fOOdc9j5+6I}t}D@|=kckE+K@lz1{EFV5+~SR>Bw!c zjlfNtHD`Llm5QT6!H%Kk@RW1LT8mnwmt>a44;q58|ukDMGs>vZ<-5jD5cB zsPD96?=MRHTT)0R5keF$(iWn(d@%XxzFEOrg-)y(V<1QezdC5Q$%8rS@Spec z^U_C@AyrWhxZsV7o~qa@EfwSjxl(7BvewSF4^f3CIqj*)3tIvjEUrA0R>n z^Mjo2SSwQaH`i@8FX$_CVPu;zBCWgea9Fx)Nf;glZz_2x1Kqbum?_ET@gu#krX3&} z)L!8IMl|Kdt_|r)5T9;h`- z$ELD->^42n2f-?x%4(4AXv+b!8Wk8HbEl`3Up{z5G?p7o#FX*m+wU#RvGIn=duhuw z!!Ujjsd@Z08BPU~5d`U-%UZY>#R*-H$5vLksL!V(>Z3Oev#2{Xjg@8%DHQhVgW;Xm z0|T(b3;IpY0c$Uq-GO2pqvpRg@3_CCKBf?r-87%}71GT=jn?!PiB7v`oH15dq{wd_ zq|wQT3Psl?ocexifT4L_!g-8R_=kW+O6sFHwgJgM;GI(+X7V4lfQ)j9C|6%W~-=b>Uw&77PML|$d zK^li{5s(gHq`MoXyBh{Xln&|c?(P_olFp$+8U~o5JH7>8_x(J7!1u$qeecW0wlS=k zS!W%wANzS6=gO>xOfg}HJej_#aRkz*@OG{)t5Bf{l)3T(dE%-t9Qi>i=@R*WNfQDA%Lf3Q3+7gtf!4GRtL zHtIjLi}0T|_fJ@jWx`RymY=wQbe?y9ayNB6AXcTojyCNJfQ-o}l`Ob7O%rU<7_pm1 z5xt9b=9V^&QI865|Dhht82aSHsxX+T{}Y9!6z=%dgxo9(PtoUqJmY^v!%50xi^i{7 z{LG{Lf8tQBLRMO7SNY5hpzr9}EmLel9!eeaNY}+E24#wc^=ag=2I+YFbaIt4PlYn^ zCl&(Qcz*;?o^nqbfrP_q!qNB(mijlN@q}D{l4VzMnlvV;;*o?e|CTxYJ{JTwV=4Pq zBHeUr#TdK|-g&zy9WDh@4Cz+=eneXdW}#3pHF$@grD!V+{!T82C9Uo$uG4Oyf@SXy zE)k&iR%64eR&YB?XT)xgG(9{r4BzP`qjanPI9hl_ui0(@+t$r3dV?>@MxG_<0~Ak{ z>3MBB;OyloZf1A>iu+L!{yJil-=OjqQ;BsH@nL&El&2#MrTW1|hQ{>!9u;=Gf=^tO zb??YaUz`e210n!k#Y++78xYC&vMtg_`oGQD@NM(Y>LQ|mb2oQ+j&pi}X!p*7J0rz% zN5yg##USMG10MHflKu0ElR%U%`2$t5pcIOIoeaATyFFt1oOLs6K9(tgfaPeuefx0) zc0KeF6o6<`4DY&4gjf4Oa;e0_x{4Gr5W37}ziyY8*u7~{A(8$d+>ghplo;bT=PO*m z<_LlKR2$p8wTBhuf&TCIm5caymZaiqESV?|?C(mDnH<>*q(KBrbCUXXdYe304_iMz zujSf-8^E@{CL$%!CyK&PEOmj2Fg-HXcnZ~DyKL>G)O)aQ14N=?PXnrs;}N}C;m=q5 zy2C|ab^lRh6(5}PHwZPF&@|m}`f#=T`4%K-$rZ;jMmA}%XPX8@EN`s9;jeKv8APbo zwcqW)b8L)Y&@+gY^M^D!b`Uy#-jnYw=`4BTvPjq;W>e_P zBX-F15bALJgeGvn<1rR5o5%4GrPyZyO1R(EYo{f5hzueST>jt`F>o|Ko1tJjf0&Pt zDMbdhBCIYu{=tT1=kw~AgYk8i_(5>AKkYhIfJ4of_@f{G5}k4G;-}nAUHlVuY&^an zjt&R{z__yDISzl8t+P_*G|q^RbS2HQz=$?2RJQKDj%?<+_X)cr+|xkeNqZ*tUWy2| zWX`Zx+GD>DKh+XwO}6|c0ti1cqzJy7^J|LOUt4E~;{|dKm3p+0%eUj08i?kUq(J^D zvmwh)&J9+_z0geU1K__`nd}RL{iJ8OZ1~{L7t#`QnDc z#sQD_4#+951;Mb3kE`tCETxwo{t!JegGcf-uVjth{%)oF zcX=w_0DOz!&Vm4H;NK=KnE&VXZ6p6bEr{Y*)6md+`}*l4pVm+R{?Tgt&;;bgwigGqijfd$3P$Xs=kPav2^d7sFlx8Q zXpsDmR#O6{Q-tMHIOTfuxmY#pat(p>Y9Y^pa?5~yVX3_vBCSU}qW>)wGhn>!M7xnB z1Ox}$%>lV>mLJ_GK%MleC%c6#d*0e$q{|KO?WXF#!yNyI5dh?Mk0zo` zMXXqRq%z}i6A8Ef5v8zwDK+-I*QuB${9FD?1OvXoFsFoEwEyp6>tYp{lWHLpdNaAu zXgr9Npf9dkKZ|pHR-@AB?o{2*+&plW^g>FlU|aimvoW?yL9(5xwgJz_b^$+%qil*0 z19baS!wTdP|70yni4lP-b17LpV~nky+NN_>DXeJ`r=CWOI{w0e%G0v!H_LORnw?lI zQWmx^bo1qVGPsN|QIxdLM3@&UuhPWMSw$8XNg2Lx>`AUR;~Y-^AiH6EF`b}H3e`%q zSjAF?v*%Y^v+cMZ=RBH*kBp@?Ow)1o?o`bD>h;`NwNrxUv+SQ5H34_CRDf0suhtCN z&-5l2SX!twk2XP)2)5~q@Mqx#Lsx($Exe`%M;=WroA<;@)K18a8 z?<%UW#?dAOk564074)b##y&~AIjCaSHtDWwWB|tKCLEhT&g13 z3AUA^PKw8%b{E!_m|C%AFYJi{o+`%vtbLAl28X2=r)W6({Je?yXl+%iD$86+cYm(g zhg&`x>Roq?!_ru;T$>$baYm0VERag&bMltFR@8l5oy^xrNVKGM?fUYr?Volu*sQx% z6O_?ykDn$%LIiyP5Hrkwo#R%Qtj-Jm)R^`%qVS^SF9lHKB8w-Dk&X0mbuka zh!`81%*yE$flsL9&xR|FQO5ee&qWX1ForF62c+vlO}?qN0X9Dct_nUH?!vDvY_a}CiR_oRFX zL#dUVqGBZ=2&+|uFI}C0HWJ2Wl}Zs&nas)D;SP^Y1}HN!RYIiGPwL7C;w!FdxP4BB zl-?f5`>%IZukTkOk;x;-gSC%K1M`&9Ylr_1JP;W89#&y7Q#B~)RY2#%jOO!iBgK;; zcI^4Q={9B~g1(JnBT5oeDkbN~i+z&%k&+Nm``H8O{LJ~3Q|=d`?FT*ZD6Jpt#?{T? zUDlz4Y_yDo;f@9Q|drEP@`?l%Q@@fS&)D3Rw^ElUvkUv z$;_5&T>l8R=>o(G`3*ugPyg+Xp%R63e)D_V?$Wspe?jsb%8XWpmHjLQ*80OLcpAu-)cSw7*Dim-!2cU$oV5s(B1luJcS56AbL{>nA5y!PSgVtvJePY<5vWsheiF_bC? z(O-YK82ce7G!;Fom>r!DA+nHRz_!GsrPNyrkE{-$%;0D<7f%4vX35U#x5mO1(n?^E z?L0|_CxsCb5Y^17h%MeIe}p{r*Wh4&mJe~|%4l^Id`2vIYfE>FJ zo-pDs4;FF3i+vi)DiCkPb%5=If=>3^8QnGUgIJ=yT8s{7LY0h)?{MtPbmG>ESi?`h zOfI|lKl0To)blFyld)$RbR&;q{kwaMb_y(sr6!rIWtX_{fNFZ#{dc;FW{NVnVgWP{ zkM@Uxtt9Q?tI2#MM@(JN#)VQ=)e-G}S0QICm-;gFy9R&z98bSpR zv+7Zw6z~lTQ31Gi-L=tENoI)NB?J+nI@pahRv!?&oUs^(*0_p&?rLhSlz1F@^n#NP z2UX2bB16vf=H^On2SbfoN?ke1dWUW8|425zJQ#OGDY3xvJy!u@Y|;ZL{j)SfZOFNs zS0acEH+%DjRg|fT^VL+06kQ#Y2>=T-HkQ|U&aKR~9UyvOxe@OFKpd#V>DHOcstM(< zfAom$?c21L7w~`%6QKYaS2qHj(rYc1oOg-B@S_kjD=QUyMW2Gmlr}fY3<|&|_DQrC z8Ec7_RA%AdjoLsYKuvHy<5+Mxrf^2HvUAZ-^wBb}f7 z<^rQqtp+ky(4f5;Lt`w!Y>ecirj+2bxns(MB$zeu+$0_r z!vanHkHaFm$y2OpF=p<#rL@`sG~$^ElY*WKt!lFXnr_r+v$p>96jvrn=VWu_XO)v7 z4dzK5?ka)q7$4s<-A>#vS7uPzT|1!HX%Gf7RG#DxBVbC4BQj@6cy!bHOYDrR5d^Y% z(4UuDe)IYFs#8srw4;Sr!wX4gEGl@C3QDY%B)dKpeVN_Bk&jpz{v;YiuvM_iP}_^k z*k@5O)w^n=l3!EuL7G|v{&|0z*N4x{vOu-EQtSA){-i}kERV9XcJ6tnQFYac$=k&@ z3`$@Lg-^;Ug4?C@A4`!i3pp~U0ffS@=s2JK(}~l+e(q-k4YoIU3BjSZ=3&_VM@;2z z0AIG{!S_F|6acwD2R-j7!FLzcfEPUC){cqu^b!8uz26%IeoS8wy?Y(#{KG5Ce@kxTM)+@kCz3cvzStWdb#0mJw z2fImab@lKCRP5k-B=9@2W%&0KILilTD<>D#6%~4~le#7E?x6-nkB$wzN2y29O_~uM z{p!qvpI;6H`lRW<5*sqxE2DEC1e%#LTFKTE3NRr%^I1N*c=h-n^k#KHc(^eBxlf1_ z+${+LrKwpc>Cgc^7mpBl>n$j#Q(8Ne2Y5)X52k~XQN4Ts z`l1IsI&o3MhsE^?2=ub?Xf0b$G=SznuBoX>Yoi}*l=5|CEa0186;U&*-vf@=Bm;78H8eEn4yk|^ixLOdgVquqS~-bt z`v+8Qtx(dJIRwO6mAb7wsH~_EqIm=YeQaGnFf}x!qgI7`hRPJz9 z6_u*GI<<{{0GFt7lunqx4rJZYre+32t5D5crvkk<#(!#CnfmX5o^;f2|9z8QT~en4 zM*`y0j0k@gynvec^-Cz7;}x(Xb1|{8t0xyPzS`zAZ>>-QS18T9B~^q1;*3fg7EpJ0 z%D{fo5&p@d#+mPH6VPyx0i$cT1cN%*sFJMy<uAkE z2XePGfp=Xmf%L6j^7r=kCL|`(A5sBAP&D)F*H>W1D!B*4hEwlEbaFK!wn&Xa0gMAo z!k33~U|@)GnGiP70I}QU#1#y93`}Y$&M*-rIQ=!SY(Nq*AR=565PM)rRSBvTXs{Y` z*=tYi6N+ck)w{4`^I^-7(Fx$*X;lV5(KK+|JxChJvpM+E^m~`xSf7$s}s;YBhG%J ztJ%!2u+jgG(w2e&wDN)yT*I5`bshjHf;7-TC=QD-jZ@>?_xTmf7j@?zRSdx|eJewU zhW*opST0Xytl@}_t?%=*j7DlZM_5zaGVBg7k4^d)kAWDNXEo1yLg_;-#juU2qDdoS zI;xjv#gV;m`g3f*N@)t_3^%AOCVF4S1>H^B~^Z@wZ0_@HqX3y61n@htVDySraQ- z7BJB(s;kHMAh=h;v+_S2IaU=`S2O31STvs#?4<8Z>b;qPE0Ii>6pSa$Ka&;J-tYwQ z;}6v+|KGVD*Y1{4hBam__dqW>?p6l(X@_^LXT02Vs;KXw3jLjo#-TTr7sm<@bE(mr z&otZfxCsiCka;SKx-`?FH7b6;tXw0t66+{6*$ouI_kWHH1^9d1I>?vge{YA;;cX6k z`s({)=JUC3QF4(OcGXU%vIv)Ndig6UOozRbfP;Pkc;nk|)_GdDoaK04AEa*Wul6F4 zNSXNgd7Z2C30O@#^Gl%9U-a(QXjm_ubJq^mIH=%z6SS#&>^wrf@yU#B5lh=0ruqNL1(0Yz&4154)C9!T zC4~z0#dlN$v2uYq@zXiZNd{41VtbOfS%_MMWt%Mw4e96$6&tA!vrT^2@F=fV^%_-n zBlDE?FVc92Czch=g_8@CS1V?ElvIo&=hSo8j=!($#&W^oPyj#~ zNB+1vlV-eh%|0ER!`Xy$6SA%dWh^K~=W8i$l2FFdR0x>N6>;By=38RiaKDA;Ojo>% zj-G-)=TBFd)|F^#LzrM)N%izt&^eFi=R&TB~jSW;*7HWp`?XF4~=*NkiXee~3}-PrpA_{aXopx@8_D>653ELLX~ ztr2TIW2KY}$Pxx+n;NkPiMg`Up%r67WdOkwYJ@4)BN?y}!Y6XcNgndKgi^0(Qh5f~ z^LTiCl8cBnq*;e}n6y~+LI1$6JymFPjdI&?>pv&pAk8 zTtHR-%l&>O6SnA#vZ~c#5*GV0r7GaIR_=^c#w(#cGcy})*Yd$Cnm#i+$!hLnk$XBr zodj0-=x7SL32q{*(W*YwNmH@@t09O3mz6!2l_QCfs7Gj8cJ*M^v{w02AVMzqR<;vu z>>$@R+>5iO2IeM&vvL*;x00|cPvO*ZXn?1c7x;^YTd~+7=u*a!Zjb!fCv{5qD~99) zkBC!#Ct}ZczT+a8W`D~|qiU{wda=ETI>^gpy7X9eG$VXHzOnm7!|cGBVoAwed&61?UUDMEmwbpAU}C&H$#N-;wv58W@!oC`KZ!q-A7q&ka|Viy%cR zy@Gl*W$@ zz6akPVeE+jPy!urArkH2XC3qpm`$8yGJ zre0-+L_3sqHbOEW&OxT#L>`w=^x(_Nj=XT4QYF`xV+K@EanIb|o)LTbYc0n)6mCYW ztQDYElC#^12^mm-jX75yQA&520PtsR-*u9?Gk8w@;0mw!3Ch!Db?P%t>{I+ZPR8uP zCDo9_f=vEPjIVR~(+%8kI6S{(8rw6Z+Khh0NADh4Dh+n!i>Hs^qobK6B_)p0etQR# z`eFIi)ykzU=Vs};I`gl04kf#BeW-uYzXB*EzniO)!f4hcw4SzfibkB_?3{hE(7;tp zYgwP|I}?CzNCNm{?_1}lhwZl%UC7)XL$)BF^T!V1>Z)>G$@5vglE*Z_e#NXGX%lba z(Ac;?ijFHEKB+=D6*P~{w=fSpDkDO~oj}>20%M#%NRGLouDO^8})J$@UtX026B^T_)KLd=*{INV8sY$*+X)^=LMtDR)x( z>k3Bf+-b8HVI!<`*p)OQ%V7|U!6h+>s3Jo%@c6-U^2ZtL&^{%wTlTlr5iXrge9&{@ zfViopB|Qgxdwz`e-+xSfBh=xrB})% zw&yD54gnD{+@^{MIH#ac#^jTOQd`ORq1&n;6as{ZKOa6f~6v>Dyias?*?ebH&stE_%We?SP?2#2cp!r(SQS;+|)hXabLG z;ZV7Z=0do1fP3Z5xW#X3 z2I-tOJF&DKx)$nob&s2tS$#k1*?1_mes_Hsi(7r(X`WCxpKN!uHU?~2t6DKd&yGHH zSv_N4HIs)b*8@JXVv5*~+aeyLHXjS##Vn0Q8oeQLLNVNYApQcgmE;KW%dW@3*3l?Y zQMzQ8qqrKv*2rz|Sm>L%)eLZzm(%1goDcs11}?!+x*SJ7v$!BMrfxA?eEwdtzZL_P zX+g#eI_T}KV90vzzW|I~=>28jjf#Uyas1f*n(p-JZjYP_hW{6KaI3NSyTsf_`ugB~M`D$r_ zbDIZwGo4!wlF|RU|J`%SJjN2>f)qt@#3$`@bpZDV^BFytumFuNze$%11 zm3}`EfhyCSOm5pLapb`}UX6o5XFxW4C{DSUknNxBNo;>)&!H%K=K^y6z_dHnm3HIu zrg?Ptdb3lzzCZT8JKEU%NJ)$L=Mb3?v$|4Bx2WXi^ezL}cOZ}^9%V*-b~dG>lT$%s zqvkWd!y(@oe`?v3v2ekwRTUrUqd(HSk=ENBle-pd6=ffIl z8vC}fzokZ-xhBFYzPwn1n)8MP^eGXL=Gumaf|wZGTkM0!tTVfdQ(jmoiGrfss}nkU zo&&)s7Y%m5JlF~dcZE37fYUS{%Y()vBVAd9v z*GPo!@9t~6*B3;@qCEhW^#gqL`0Q-atv0GUJD>Q*`rjN|-{hP$t@EAVn%<3AOc3bT z-)5HOER@KobWhti{98|F0KccmT!h2FkU@U6gY1ztcWitW07T({AOG>`ZQkalY4h0{ zu&MJx_4Rf=G>reW^%-I;Uy<7xISWkCGyc=GP$I4jl*c;HLpN$5_IY<_@MhRvmQpZ& z4u$>fF3MzEy-y#2rxGyNa(Vh7KGnjMW#>wN(A*PnNaH*8RrsJU;12+=C@Wi7S*d6| zkTm?v>r^fxX237ydwvb^aL5jc*Hj+^COBr`+cy>L;IVNro|`QEGh z_d!2ZKHkcKEursHwE0zhEHmLH-|FLz9^!-xgmD%F|KWA2V;sq1+%cHx37!_MvQ13k z`aO``V-;rXD^FO8$G&(Q`Tb>P8@u*i6QhRO z+ut|8CI*NC-&;XgdVd#LNb#cR*sO&tR>XV<~lq&YY-Sj)L*HlXu5m9o?BCR zILAtO$pi$I20(+%T6I4ZmiR8VE4f|wvyiZx>y42$I9wTeT$!pYE*@Z2xA>^Ks%qob zkmf7q?(2X>Lfx92b~L;ffTqa+jtdA=LI8oEX4aSVr6;GQoXkT z5R=dE6wo&D+tSZ!-A<-Zg?P8{sBZ$QMw~)#`**tW1mbUuvR|r+PsNOZS+16I8-cDA z{9%)H1_&btU^Z@!bZ^){C(k5zgg>X$sd1_bcg-2NNr#mvGu?6McO zA9*Z0D7W6LgZVh?WcbK_H7q zg|Ysj0`_^u#f%!~A)%p&*?N0!hm9Y{+f$Lpp0a#LQT!KEgNWbZN{JE;SQ03<4 z=JTIu{AstHySZ2xJd+pzjz#2lL_}S$$X-K$`8=N*^sEU$0Yr}2ohezueb(V^;vH9K zz%}RkJd!y{?{uB5HaE(jz4m*`R_LJE{A!ft!A%i)ZWl+x?Zm-{Cpflt0FYDxETfE+ z)P^;n=#B^d99t!g$Pt0dHh~TMn!(M)h07cf5s`QEH|qj7^-ec~bLR{28%;DUqM?(P z6Tae-5=5`=bw!HjxoKNaO%`ETS7sN9yA;sFTh#Is7hnbfWy0`V`uP*Xbim%kjwRYb zGOn@?n7PACxaF`tRSpk$c*0&@a=|(Rb@@Vrcb?`%RUpz~?DOgM;*PW@kX^5IYfX;a z)^-8*Z+rj&Y&zV|;xg$)-TYCB^X3)G3uaZniVIv^yX4f?);=H0<DT{3h^CJXYz|GkO5%#SLcHOo!7krBmJ94vIG)! ze;SO-C%B~UPUzwBv$V{einUKdXLYZF7rAgET?a2=bzRK;yO-rb#s75KKidNY1UO>v z>|~krM$PMh!z+`|{W$N|1Mr`IQjv@=)vC|%I?we|03_bb%z-%kiG?(`y7&fXx4r(9@qcs z>M9{Mbwct}r~*EZ+u+7m zTBO8s=9LlaY>M6I=sI%jW#hdRYojCXHP}%#o2Xa1X==0aX}!1zq&~8s|Vw7_(v~GFqjz|Gxj~TZZp@W`!e%@o?YW27dCxl3U!mV z24-B#w>0DTj_#4E3xAv#`>j`aFhE}n<-s`slQj+m;>mkjzF`8_b^Mo$&j_zG-g0r} zhlYl3oB$pHaelP5@4^c#MwpDIrsm;Sx|?Ob8)4Fm$*#j+7|bvKC<6qg!(R+BEJs8{ z8hvp*^6dcJ8N))TU0%=Du);O>T}7`qCB<YamJK{38-|W|ZCCiMDz+jVC-4wRSyh z8QRFVyA}KXRQn<5X9K{x-BJY(4hFpFwoXnejEs!84u_40Cvl&1koO=Mpzj^_SH$bJ zO1>?fl-ZgVLuKYns6Htjd9@02GQ}nm0Q&MGKfh zQ4&{(wfoGB!w~}ht!ww<3XtQG?nr9*%#67jnT)LL7Mj4RcgyZ~=De&d2+(V{g^T%H z4^S;wN(2IB0jxP-J%jv~0BbFbr`Eln^tC+m3I{-jZfu_rJG7$UP9O~-jP&Y)ICXe7 z`9={434Lpg8*X~Y9s>L{VF(V3JlXTN%^CaTVZ0fDfP{pEY*GuH1@P~BKf9FW1NZ7Z(?EJ8j3c>_?Z-tV9}Dl!zmlJ6l z*uJ<{6)E@WH2QvXB496{QR)@IP7h#WTm&rFUuk6d&$5_wn(~-E7BLzC_lJXYzdCmW zVzI5m&C&CtQm$>}iOjhyhYT;30V2(Dv)J!;bu_`w z$w}ka_Q4x~1n&j^gRlQ=M;X0{d6au$KLWrdOzRUqXQnIrdSgAwh)5La4UzhM3-`OK z02E*V{nH>))~2T7x)omHx;N7kN9mgUSz&+UdGAt7RUkm$V2>r(X0qea^DBjBQdo$%X;X;iL>``CB3 zb|Jw5**f`MVT6fNreRKT>-VWvuWXWp{mt0O(Dw1q!kg+RC}0QbEwHne3{*Mw4-6O` zH7}fYayVR`+CujuQ^#}x7`k<_aMRLqTwU62RSRIu^O)%riO2J?sP$E9<4u?oYQC5UStq=3 zHsA~-XUJ{z1N%bee`hk$Z|P4W?1{Do<*Lcg_MqY{62{jF@cg}^6zXfD;@AbxEEov}z^4DLuPUpz--gKp&Fh0AQOo1Kfi zY$(Il>MG`3(+=&Q(fDgFKHeqx?!L-pn44T%_@Ek0blvEF;`#Rc>KETR{-aR$Rl8CX z2gw#u(0&LG_Sr|B>Ejw99rPlzk>v@vc&QsT)NSg;4`X|MY!JnrKUVuE-NkVmvz}ft zOe{Dm$VxQdHeOA=AX>M+!Yx$YhjL_-DF^4KddK-6J;7#X8I$#TmS~Z+%Pb`RLK@q$ z&d~gU?O^n0CtdZi-h1NSulQUI!G}jdquk3i<6d>|_GB8WdCprxwvge)Q6j4F8G-my zd>)RHgvIE7*Yl2tJJM$s(wm+~IXT6CBpOzZ7k<8P}jx&z2q~rS^;WvWKc^pEogn z)KbK|N?&FQUR;mwX-KyvNEEN#JVXB4eYTgIbsKJSFXaO96Ef@mKK;TNy$pM^&m~wu zf8E%j8}?)n#X^ToeWVQ}aBKjHJp;p;qK<(7sH(l0M_tWRSxJ-ph~4i*xaQA9pI6SD z0hzbA{lBHUq|zt(h`GQI?Tcrf&j3f5ms-tl4P*|R zh$Rp4EvGkccZ!-l9J?4PI(7&)T|axW1NHn+!p;y0bow1`0+Yp63rE}On4vwGf9<;f?H5Hc= zRP{4j3gz~{TCzF$A-i`&xqGhqWLGde9m0?V_@mL8TFn44ogTcP)og&t-*szhsO|b= zJi(r8C3`t&qMXt{IgAdP{N7GH}62>EkhX{k|J(rFXoLn8)yLMk;bS!f_@FBH?t__JB;!K}i zs9<&8lj%kcS0N3-WJcTcU7HG3Va01L1?gr!Jh@RH#pAS_9rT?zQ374 z%~%0R2ei5jQL!Irjc&7UcC)#XSEJL0Zfu)%$H&aQ>@8{J+PBF`aLNJmC!b!( z-LcmhazxnL(?nc)Zx!fNVyKv0Wg4JJuc_+GcG|NPPo)&$3mjP2#`U9G>t4#fy_k@; zjS~9a^31Bs-Uc3I6K~_vwZ}%ttPC9qMn|`3`kAAb?=Ry_pYpEeEI%~f1~2Jl6=~6> znl;AP7f`p;{W>S@_t%sZ*LaDisR0v}c?m(w(>#BoyUS}6$wDl>#_8L+vBv1!W3}nD3>mt z!?Qsz9oUg3j8Yu2vjY#|n9l>U3HV0$f_1!h9OoQHr2)tsi>zD50`N+HK>^)45z2MY zokE z>wSgy!IiQlm0LYVq{UBu0%?ta!N>hT^B$*RGH|a$ZuSwLI7^t?^m#IU}TbA;{|kopgojf=0d^>ughOIrE;d42va1}x{n~$++_5tt%a*J zKlQ{3bw`Ej$q7Zv@#42nO$GL<0zF04|JfmBLbXUwe8nyv(A8Yb=G&ox-vWM}8&yIWQ|Y%zr9U;sGl#er`zIp-;c^W#W{ z#{q}kLW&!FEhH{l^%44&-2pw0hdVA?l85Feby2YU!l3L%jmadzMEF+y6&l4Nk-&Oq zRi(aydqYHtQ=I-={@B=0M8P~T`IK9uo!qzc+vlI&-iBQIGh1q$u&4v(ExAiLVcWyW z-cqUTrrcUSSk%irj!gQ8x7QFRtZ%g)tc^!0P8X*^g0Hz0z>j=BKzDseqbTNV+AxP_05(fU zJfCu@5g;1Ab!nLg)KyeutgaeDSLt=btN0`#;wzN<3b-ncn-Vz_yg+^?YeSwC#!hN=_Z)o0v!uY);7@J2*>D9cf+;2-_rf zrcTnOuA%l)E{RnbY_7cMA=h95;0YN>9P&X)Z$O}OyBM*G9fllG8nJ`~Y^aZfN9mI3 z!NiCN)B|`#73A8;H^WvYr`QYawd(OrEsZ7#N55xYIF_B!9@U-0ozvCXL(z8x;;F`u zNhewY(UrFa^3A(jT{o)C=;)LdEyk%j&Mff)i-8BG2FCbXL$@@KZZ#V)0B-9%3$(P= zkjqI?ftcO6`WT=RT<$g!8XF(aK_m5$)4f8dQob?`pxMW9r9F<@428@(PDQ$uCmW`= zBp!d|deKn%CpY`v_}8YWFB`AL**@n-1RUa_FVnXj%&X@a~-D!?{uWpr?rLtb_&ZsnDpc#epQh7 zn9p-itYL07UJ!K!H<<8#o#N^*9{3x-U;K+K~1X@^Ofmd z5G|$-Ubk`2v*uXL6O#khf^unQ;rcl0f+E)6>$1x$$>w5mGVT~TM|kC)gR>VvoicQL zSqz=g_ur4pSveH~7_GvBo z<_f~Jr@niSYe!mxuClT#(uE}VDA2=mKo*h0p%OgkT-Q|BN}0jN&6a$4_EtTCcUk=G z`{%iJgI_tEzyhHSbjFDL-rv}ht0QhqYm@OaL%K^qudWbW?n)Q*#~m?6!F<_1p-}GQ zD9Njd^Hl`tu*b;q;33f{|N1>*)b>QRIh5PoA(hSye2=55YtpqyQJ9>Z03Uxicn~-v zScWUq$(NL#NQWM4OX$=TT4KbN-1V~OJAX*s`Iy&ELdns|#>$6WA~a?bhGqKH;qPr& zJLXRKzU}cCeye$0#VM6&EB?B^tad7BMC{yi_P`%B$2a?ssTNf{Ed&asx}exq1q1Wj zBsODZo`^?Si{+XVO*(lWG6wX)kvy>uZ;tiSM3Vg!GCuSpSUiJl8=EZ>rlriSjUPYLb%OXnG&;aHML$fY>DR6gnJf zzwrLY%ry~;I~JYLPp{UNCX~n9eY2ir$8Ff$rahUB3purm!?JHbxB71WkvNc1mUz8< zvBG((#O85C6!Ngcoce@1xvMkxdJS5@X`@1}z_|h6aG3tVo>7TLR1k3E`y1*jG-zD4 zP4RLK8QDuMKH*>oQf)yrzBpJ`-0h&xe{gO0izu|6Bt zVE+1qWILjrVUHE)tTS)Tx8Lgum80oxc;ikP3c#*|*DjjZ^Q(iI`Qw_6RBM1D7ayq{ z1P<(IT4i(twiQVE1eP8=S>y3`>`n?~DbCIv7zjYZ?kUOrCG98_7nL7*lPZrQ&GFG@9J!~uxIt3GAZ0e6bAR7MVyEqi zZgcdV?)inH%B~ahn>|l)eK*7xVYHM$D%+`_A-QDxQ#=)}2#?Rv9Cc+qHEUZFdr&Omouu$m6hGGqyWfe) zI`d0XUY@M*-HM3taO{xaknb_EkY76X`%lV*TWi<0e{?btjkjE!v!Tq!TM|YI0=I{; z1lA|N`v6u4VIT|h6%ldR`86D6k7`e}B~}g5hb3I}oiH^b?K_X%!nB7zh=zpDISYpV zPOn8m)oR@!z7CE(J`421S0fCqVtim<(Zfqs#n&bi;B0M-j4V-Amf z*K_b)S!d}Nof`Rm#G8Eux;y#|7qg=^V9Rd7(>#HmHC9Bj?Notfw?{CY!~LM$Zz(9U z;o@T$35m`~_Lfe)kqTP^3d45g&1=yId;1m0O$}o*6}h>Rr>d`X+EyBxs9W{69XtHG zFO0uNc&R&gG1gB_HO4)Es|#=htB4-}1kPII)r~(hn+@o3c9epo+8d)3%>K;%#u?rj zPI)R2q^&*LaM2Tt>~lCWsiYj5d?&QHO{>khHg>&yHM|NwQ%_M$ho0c4ii+;%qvC`^ zFBD?)f|K~jy1XN~T_^K1`3@GFuh9T5eE6F^5)zXMK`nS`U5tERDwiR4M2-#*NEw6n z^ViipekZFgu;kLw5v5x`;gjEp4cJ|n*w^Xs(>s{>e93=y9@?#LD=3@o$`$25x&K>o zB|BKfk=E7JZa*n?Xnr1lZjL8=ZoMDoy#C5Z>Y+hEQ&fZY3Z+jMkW&rF=ORG2o#hx| z20}8`@vG##Uq8;{vAa&OUv6-pOucS$I;#r(l(Zm7^p5*oWCgWbv;Df8W}~6?FZY-A z4H+lr7QbrdxuOnvgCx0M*0viD2K5qXFT}i73)z_iu$t9PAW5i&`G{*;6SCtQ`9tRu zw{ed#@A5ALS_6ZF7VE3uF8!#Ihkp1n5lJ>0Url#k*%5KlP7KLyxcm9CvAv72v$Ho9N%o73 zX?yC3INif&z=h75bJs7V`-C5?7A-bQOjf2WI=*g^Z87IoS9}9J>)oxORCl7}sIatB z@oF(Q3(_7Vq7wnp>G5@*O+FTDpEVLX3D(?-bzH%BrG4Vs4LrXO$WFiAI_TbuBFCBA zTNf;<0`gk!!ARb#3E8gGYjV7{hLB-BL9C{?Q!+N{YK?E$2}YXZd!<}2BThCKdzYsj zr(W=L$S$1)OAJaQ8XxsqH>Z4rYY|P%dxvN|igeJ)4zf+nJOvM+;C$Wd4BQ+!$+36` z8so0U??^-9q}4dI0z(*0q-2R5+K=yd#lw!HkUV9wq3C`|7tadn?P+S9IfCRE&e+CW zwfxMJ>~1mWY^e{mb~zchm$Y%%`0vffb57erE3KUli)rLYBF+(yK^87LESfi?XCh-$ z9S=?62MNf%W&e@wGe6f8vWun3c_H_}>DHis_CZ&u{?F>OU0YN+-+xawO}fs%yf zEwK~+{yK-_$$LBYN&o;)hq8CQtPjA!*2HzC#d4*s{4$`eeuJIZ=oUL!9^eRO#&0HF z$%fn^kS84)$th!63EBPLx-g}U{u!kd4kP_uPNvYV`-^8&S@xY4X+&T5Iv+0iw|~;| zfAO6Vqw^|aY4mDu{f4FST>q2L%>$JBP%>?=4VA-++cxCS{8stkq^0Vb1I2k|%1E0l z-^nLAX4t#pDeTC_H88 z>@EVo=D7dlW0J7}RYS4g{NoLTWaRLm*7YFY>nQ4Le_z2{>hEdHOMrk?^#~L|HBZ1K zydMMUK#&y-Ks;S($!`jl1V~5#Kh1uA=GdP<^TLaAEsZx(S>{0*@4tO*7k3|s39>q} zaw1`S(wT_ouir!neYrr;;TirU`m<=wdA%Jk;QfRDALiaVEUM`H7sf&*4wxL7LSn|JJ;b9ahWcXQ} zZknE&_hRY;AaCK>%vIxMR3_wOp4Pe}K>9OMp7%6EeW1;TWntp3sgvC42Udg{$E5M2 z124Xrgu&!Ov-@P5uVUW^*Gvs2=|ooamE022FIBlRx3TZI7R@`p6(l#Bj*oBd>iJ?1 z$&=@CD9FbRM<5;DVlR<9qx<>SqAg5brMC?p`V)Q!Hfi>*o0-Q*uA7-kBo(qy)_s6~ zv9B%poq(1tClAgtHnfgmtymfYJn-XFi>cENPz(;|XYTdmbT1sJ=M~o(jSvn~({8S9LQdR7K#~u2g#Gz3r z78L~p>Clch-K#PGTm^h50NCoCla{7t5GwKYL<>m}mMLl3zcZ|?2O9zMZqti>t6U6J1;L;$D_W!zJ#Qtfw3_tn4z?T21~O} zO%OjI#?m!?lSSw0@?f5Uab|(C_D>-o#93SW0X+CzSeOlbe#d;F>*#1%b#4PV6=!EI zKF|#&4ne^VEVt5-Pn?WK$WY8)g4W+vAbBBT+Sm6=oiVS4Mym|O07Hv3$&>wxVZRlN zMGcl_jIi9J@ST}`2W4X6z;+eXCeG*}+#q`-bR+S~^bSkMIUN(OVwwj?fnUXf@f#Kk z`QqL@<+|R~a)Gxm11*e$?RWz}!pL_&n26dBj#qD@M%E5eyq{4y;Un<4!A7N>0`Jt9nRgW2ZyK}tg99pNm zLg{OQIunonA^3lPAx;!bE1)?t8ke~U>O7Ub`(@^m{n0(I)H4oidn2O~?L0wx_2LNV z-d^rM;%O_KbTfifo+fLgG8rp|MN#{#pY2%r-xfB}py73)^`9yM@BC*{wTw#@A;lNl zVgnSdfAJ{s$li@O`;AS`7DOG(jd|u<|5}$-3aCw)ZAUVMg?uS`u7 z+6agv14amU%nuoPBH1du1x*M*S=uR?4M)Bs6TKAR7!% z3w4;x6i?#2v(Ca54DWn`z)nDNV|{ z<(6|#frk9)VfQTY7rb_?pl2P5J19o{raUhjoG)iBvr+>rQPwO2jgyJrWP#UuHYFBG zGH&%OZRc|itF`p4QU;&{j;Cl5Q)NUK!$Jht zNC52exvhh14S-P2$il`32+PK#K_PxvA?g$Y`^2J4lf_>qM@!Px)ddRJVL8TTW=s!B z<`rqN){t}-%OUPDG9$ps@$@`SQQ;q`{Oj-_&FRIH10SQ8aId>RLBIn+Qzq7tik9afbtR zXmSRAgSZ-{j2cjv&49K|0@vOorb`1<=q$~H0k-GM!(T^Q@7wc>ejV09yj*M5BBi80 zJ_X6WvP;)IyS7f1`eF-}VTt6WTn+9VbT01COV~Lmv@3@iqLeIomo;tfJk|B&aLw+R zsJ5C!SV_{Ztw}B{e_^O@?7TTtcH4>g^6MZ&89uHx`X%~bQ~aWyk)QsQ2tyw&zUJfe zl(;BJt+H-T@z61Baer=zH>HbdXA11=OQ063Fh(@8LQ-O;Q30e>K}zWlAKj|-PF+}h z{OCqyuDwv{foEF3KOQAsA>9Sr2nCw8`(Q`BYXx~kgNf}D34YI@Q{l* zRSVBL3n?y)936-HeCudIMjhHRD|-G=>j>GgujHF$+xf+l5QRjikuQ&%uY^P$>N%Ts z7JYG#HMdymCl$&lS}#-y$&+-U@&CJXLC+s>%n1vCWe*3w7!RIvB>0TQ4AS@N&)9Vj zcg;KQvbekZq5b2j`Ae4q@eV{b3>ocD0o7*%(6eC3jS%U}?!5Ve?AL>uDv& zNFID(Ah%EmO3Xgtqrf@P=;2TrJ7Qgk?w-ipS20JB!bSfp z&(3T(k!J^dspkm3ylBjq4X5y%Pqr(HNZZOh;d*?PZkmW^1#t0OFVjtTVg~t5CMuv4 z4Dtzy@O_v@kW%z<+|E!;sBtX}vDc;Q__cqs^hb0HSbp}T}k+Rxy#cUh>oHBoSewYx+2~;xyVQ8jim%l zL?_p>Di6A&zG>}Sddm?s!F&d7$DNyJlmAEj5ez2e#EDQ*QvxE_92n4jzIOmpF>sbR z)1gRKL@U-^$+`p1=R zW@8*#VU)U_+c61CI=OiT?9XJ9v_f>e$l+Cx45aiM({cNOLG@x~fA<0nnmh6?hF-f4 zphG?zen$tmR1^bAh4hGJ^JnYvc{K`mE00^fM%@QI2iv_$Sd*-3=%gK)6VNy~Xuw(y zCWh6D!e}#3{&p8rHkkx=F4l(52~!E`WEM0aR&`hIB`jOCuIR_cCw$(_cK8F;?I^5j z%CqP<;xc^y<#$z6kX)7kGmRF_9a$Z??&7}rUP8(J3z7~?7C+p)J2W!aeH4#4m-<(_ zuFk5LYpo?5b@4JACL%2Z)t|0WkVj^~DD1P_eke!=wM|-5xy;;uBp_j(Q&R!viPb5z zRq-dOtkul@SEUDVmP1p88CA96qlsN$t|e@~)%+1;Z|g^i^b{fc_9$@(i0P)+!eXKK zW2=<^?rn`gjGgb2ttuwzG%j7^F=3hUu4HZWunZr^eAkG7=>z(5Q+sPRNjYzMawk$-ck#R#wf-VX2bX^QAv?7;EX0 z%{|k!8Hb?YHwpUB3T-8HvI3SC@R^AN-?C5+#>I1S{3<;06K8mIeUi_@Z$*=H=gVVa zyl<5?^x1l!-+VEDPN~Wxm`>EuLLRj2^oX)&cJ|w0f=+yB=6YYaSBJIlqsXA(5cB>j zWjoeqxv&=A1_SmtUv_g_s(L9e-NBF&uvmbi2~Yc7PVxbY`2JaSUHa{z=R5I}dvVs~ zeGhlj)-E@a1O_uv-s9|ono5hQNgx~PL3dvJOqx7=dq6pJ^-;_;tW@KDxg859M*A$w zKVX%b!TXH`0Z{rzCR})SGMb~l!gqNDG294e36Dv8{@-0 zZJN$S+4O_?1#?whT6#0ZYEu^_8op|n{4ty=WwY4A;g(rI?0xhJr9@mNF)s-S<7wXPq!pdDfOV~9B=WiJ}E!8 z(5z>uTdEu=C`6fXa&zagdmWkNmUx8pY;R-~(FBh@yW~)iaO^x;(vchxvtF4a%(^Vh zXwG^_nz+JQ#P=N3*52LtZGzmG_`RmalfWCPJ4C7~`zt=#edh6{%01)4qMjoOsr0pW zQn!%%(E;zA4ldZkJe$31(Jqjn1y!%ZT+uDI$@ZWCOBh4L zbJY4kNFf2HU+FD6-Wi6QlEWGB zAC+waY6$yavs0-gfJOs!c2wnHf(O(AYz`mn=1Be{U$wy#rK7kNX>L_ebjQ21n}N5@ zG0jcdxz~j{IALmdZDU~(**hqCy>UZfhfCw7dB|9YS0mM@4R4+2pVJ%pcVPt&h8vFK z=QCpe)*sr}trbd%wGByAzl1#{qpr+^zls^^}nv$^-l%@Ev$d&awm+(KQ$$JHPs#>tUbP~BB%cyj@Q6n zwOqV9Z@hc6JvoQ%4t?EXXk{fyTyPt?!F}oaG}A_l0m|X2=zzy8M5J5G1_gGcB3@o0 zu$1oM`<%c;HtN_^iHFQJ(v{K~&?=E@7U2w!r1+9_MZHJa)3;d|)o9lj`xqV?UQq*i z3EL75DXw=lWDdt!_pigm+I_k%{CNkkb2MzLYQSAa6SL2+&$RHzKT%3>Zz72#>4Lr; zdlMMfamlIUIH=x;NuiG}t+=hyf?|OGPUJNEl?v_3cCCglcvy=D)MoNedFbI`_^N%v zw`JU*8pS78)^`LL4jSfT;HVKgUW92+ncI&;=LXVH-+?3o zKOKEZ_8r~lAGKCBoc2P=J&uB}lH6+>%|<sy~pI`D0nOpwdR>ihPaL@#P2c@Rw?vuH_7o$N1dEyf5 zHZ-rkdp)QEB^2^T_OX37OfRs{2xaK|GVogJ7|3!61SqG0${YubtjOY$ieVf2&>oNm zal}ehTSwm^$No^9d4yQOuq(9g0;kMUkAp6ku@>bhfE}H+{aYoF(X6v90yhM5|+#d`Vn)vnPQjalR++vW@)rqjGGxZU79#YL-xiP`GApB z4Umo96~3j-8rj2Y7|1Sxsx8BKe$6*ZSP?p$SA6!mc65JK8#+3@aX@trfgr7|>zTGm zm4~`-HWypcyM!i>&2b8MPc!=%Qv`3(9lASQw3*79Qn?aJy{AW6-jm@DC&?`=R7k2+ zxbGtFuog!Vy1m@k;Epg4`KzWhuR0TAyLSIQ;RBK;jIX$uKjwtm=AR04dwS)tL4!jq~>4jZkv4V+}>|Cr)5fbCix7D6X$O;540x)hs(O)lAn^OXoXmv_BPS zI_w`ohpe!dzv(P)%v;{#LFme@w_&U&up%1Ahi6v=7+s2ivzw zdoUAay4Dx1Ww{R+pA;4;B;`Ru?s{-){`d|bIpq;DG4iXhbW_)wSM)N3uZaaw@4a>B zg`@rQQ@HM~sYs;9d*oUuYt0X8G#OsRp(Mc`Di~-|n}8XUO3W<2A5)1sTDT}06k z%Y%dS(w2eL zdb7joK&Bi5lgUe0(`OaEEbsRifoXe|#%t+qer(%VT2@x6?9LmV3XWC{2^>ZS?Aa&O zjHgwlt0%>sAgzw#w;yMb zCFjpri^PsqAoikG&*5T?^kK<`tpe6QLoa4#+TNTxOB5wh9*s|2vO~q?{UFuhnRNlt zq}jZTvlc+|e~e9Izm8Es#nO7R*)Q#)5tp-GKP?roE*o({ZKNn$F!Lc-*)2WU!}d6f zb^Dw->=K*Ov-2|UR{=&M4^On>*-#(~*rCv4j+_e4@b$hC_<%FTI|(^ZDsi053Ei~C zy#+ZT%+Bl={{x&dw@TXmVjMYF78l5};G38YIo0NrwQ` z+5&#%GXh}o!>op##wf>7?QSPzYX+g9L&LgA=*XpS!(_XkPG1%rS4jtYAP1Lr2wt6b zgl=}GC3bO#a-Z&`7e0O^cN)!=B1bs@@`Q-I;yYhB=R49EES#FdTKlUNkJpDfDeT!Q za_v(Ly;&;5%Z_JuO$Xs!fhUR7BWnkdY$t0zrJl#RRuJJzxBbEGS^erH5G|;RJYP#M z(y(WKu$GwlY?AFtFH4T{AMmpH!w$TDk?mA9t%};6ObGO(C`)T4j(QVXaP#3q`WAzI z=6{M}9vxYbir2m7r9n8T^N#H2+26y50jyzJBr4$hxHN#~24fc$I{ZZ!1t z#c)isLclZgfm}h z2Z1=;^$frx06`|(Zmflg(PxAl>Ym^};z>Svf%5tM!~!g_(Ikz~-vXwKlcz5HXrYsA z^3nOxW46-5SMlCRN4gafnqJt?+`}^JxlLuMFF3nDcJY9DvNDSc@u&!+CTC5sk z50y@2YO>L1E>(A}Iw-Q)Dj$p?+)BEFSz`ZnboK!JTAIZ`dTgiCDI`2%%Q8$G9m%NIar-)O zS)NqyPBI@#m8{N;3i=oZi`>BZsn4JDuOX1^1uTSkOhXBWgZ4u&+Mv!5>qvq=1+{1| zo=%T3=TPcI`DKz$mn|OC{tGxfd<+P&C`>F&?-V;>R3GJ8B(=6UG>_~i=qI!L-t!1L z|9Xxt*ZE#5WQ`PHKvRzD)eJSsor>f%!-+8jQRQTy45Tn~{$2P?sY^1((7u`vfltNX ztaFH+H}dxSP42$h`E69#x>8}Et7~$3Cei1_FmOT)$WjTESBSuNpzEvy+43xA%oXys zS4Yi+lah|Sdv-1roaku%vatFjq_W-Qqw*J;w8B2S?Yh+E!*|F{fb;IU8arJYwh5cF zCg7Mce0I=m*H}_q8FHiM*D*%BPP@2#Myfi#h^ON^=qjseB%q#z-V?5M0nzph6~#bC zOi1qM+L>zg`>Gznm0hE>-6Z_uvb+N|wc18VU7u-rL1+`X&S=fxVUgggWZioolBnds zfmh;hCkTJ@N2{KT0c17+alKG8#+Zzbbz}#AV`a*$DYez9C`F4`bz|Bxu9P5p=`V)3 zD6dQx17N+tPON|goj?H^QU=jsOlwF-9e$_vyfqcXb$2wb1F?9&`iqn9!^$Fyy~D*x z8_G(Ns+{aDHOJMdwBO=t+me=B^14rI61pYARjP$+(p)~jF;a0!Vc@h7Vz{F-gvR_8 zR+zo)@9x^9^!TfbM9g-ln0EM%{ZZ&)49#K+EIe+FHRH?nz|1n!t2DfuGEJmktlt*1 zOg_TFEl`ve3#@YFX_juHa%&-S!#j^#hPpAvv;$Rz-}ODa&c0v8nEDHF3uf~Eet{VF zn6${jI(`*U^Lv~2E0MeMq~BeW&3P=iXEMO$_4+GaMVi{W2E-!K&CFIsPANi>!rjNV zaev=`%bisy8tg8kPj7W!PM~RP55D2kL$a^;cs77%1-2Eg zUzMX?v-GR5Sez(;F~dYoh=b@Pd)#I$4;QUEUFQXBN}g&RSy)?{El$?RZyz|{1`)yz z;nR(Un)OT1JMqnBr*pAj}DR`BaVZr;-7pVou+cL|lAe5B8{B}-Bdeba9GWpyVoiYl~| z%D{C}k!9XPZgFG(!(8si6=6yUwOsR|?gv+UrHzk5lsI$%eF%R0UVpdx1HUAm@B9)-lv`$HlulJIa#JvX}Y4DM%B z=8$z$(e)U*W}|uEP($~sw!hIg8~WU55XQhoteDuht>jplqYPGZ_W>zZ7Jh!*P~G?$ zQ+71l@Yj9UK`GP6W*RO%BJXaa$ugY zII64>Cs#Gap3G|&oc>O)Kiy+)nBa*-^E!8dQ?)v43rw?&FrAH{(6oz>erTt{SU36Z z6QuV{<+#=3f(;Bu3e5i3;gJv zSQ^ZS7|bd7k{i>SQ93wbhrc`x7xMTN#0U)6}(N(fYkaiiHmCfVCU@C@uJgu zGUej3ozB+0_j))~uPUeVW6V$$cTweXgzC_aA6*7=)3*A@FP`XL3H`0Er3vV7`UqU| zfXt|g<88f@cF4YCCN28;1%{5z`heP*%yC-~LA&KLmdWLF<$k z)`4;reF>wr@;WU@6K1W#pVDt{g!d@=RN^w<_dI3}niY=G97`+tXXVS?-vx zL=(R5q!MVo1>*3SWyyloU)z75kE7a8LHP-&uu*sjyFw6zJ69CId=8-+?>wovi zc+aV{n8#936VQo-&f|oQ#cz-wp0c|# zCt0<+UGoB}PA*bxHw)Je0lb%M$B`y$s0=^JpD4)C!X5sH`qoGoy0PBRcs=>aEBYYa zmW|q`&lPP+*Az^MJ)eqfSI^_@P?H80PCVNxy$ElmCsTBTrmvtg!bEZtf$-}CYT|t81 zFN{QTu8c91F-y?GR+ciRJ72(&<5+zu)Q54W%!Q{EuR;8eMy~~mY*(!|&pqMCv6uud zS&+jAyJv-^jsYw!sHvEc+C7SZ^gMS#8)RzkiCcB0ylae*fI&66p15$^0kX(z-(#bX zRB)m$B?78fR>BlNJ+Sd zEXupvxft9AQqYWmp?%y8T`jF?Q43wsIh1i??mlrDD$d zZP@4l6LRiVOv;$rp6^wJHYQN_61i<_qH$j~li0mGG|u@!10nM`>k@2TB}RIpXni$NX( z7A4RC7r}Qht0$eLBU{<6!+A|A#_0VtW8u`d6ZA8Qw@!QlNU_tn3CkO?K12BIthmVxV6w9uXNKKu{zZJT7+6#kRcWwu_i~BQn_Li z-sUA~gDbv0D+xQcjUg@no$A0X5!GF87+7w58lgQu5p%lhhR6qyW$WdtW$482UkZ-`YmAw3R!ZqCI zo3nw*!TU~IAG8Yb_c)EI_CDT;9ZMp7F2w#7U;&@d($WR5Psy}dT}c+`Y5r)P}s2(Z07hwwyA5p#!>f8-x1c5yFE+$ z+x#hJtLEebQpt2|-s$*PK(YYdf^!>L5??Iq=#Vfq6&w&vABU4)zBx(SATT;=tl>hue+yY( z8x+v;mLor_fo6ty-Yet%$kHL(L?B3#eX6Z{W0d+Mtth)}>L>BSl zOkTD^!au((uR3J++xGFqBEh^Zw>ve>J!_k?=7d%jhKn5@G)UJ6mUWRe6;pPr?2$S7 z-$t=>HIHwK;NufIwm8Wy;^QQbSvHSuF?iU`3&a_#&QUuZp ztT?$FojsaJunm+@C#BY<`4=4)GZYb}B&C+y$F3W8tE~CyhVT4F7dPDqL$_RTs<1o}5}q3z_^#|&g!DyM%$j$1FgzOZ>uB|XCvsAbZd`Rl7setW0?janm6r`GD0;GJ}Uh19wr5tZo!oYg1#Cw84nzwDKs-Ujq`}C`<{J&; z2VeK0vPp|EliJ0R$vIaZt=z3)XcT7bRG^{4+w3I>1JEar7Z6bqAx@jmW4gS5?y>m5| zb<8_0XYS~DwpQjhP}jNwQ-HjJ_DnR&*MP+KIlG zjn!6jh~1>Um}H;AS40@Z!k#9^BDmShg`tfBTm4meg`@Sw6H}o~4zP;_PCl3?dmbSTNBLCw=*`&V@$EyF~<(H4s~{FANg!>pFblWJkFc9=c=A)Ne*yh zoBa-TdqK!L_r#yfCv|yfeOZz|TBxT3h&E%dt;LeWTX!m)=!&&V?ytGdQO2>U_Cs6{ zoSc~ga>Wh-CGa*;IVvP;#`*Q=woH%i-R>jWN0>Y=YWDv+h!GkNDXO$4#8^-TW!C z%MEgds0jfCnoMOpX`st8CbHfzk8f}42jqSTb#D!)8~U-=+XLR>t8GTwRtFw;#*=#S zQwpix?gz73`Z#-`<6*j*mw6I;aqnu6aP*Slg$OSU`d%&5&erC0ILQ@qjR=9`YSEB4 zb=&qW7M6n*&FX@L&M{CgEFEyzC)u}*gAx*ijd0W2GQ0*UnS~d7S2)W|NoQ=W{~7g-HdfKc3ALn56>;asVol zmuh&{y2c^$^;09Y_E4sSHA0rmXGpi4tn-dbgZ;ZK$I}mO#ipr0R@S4I``zY_oRB)5 z&FbC9($1qu?eB<)&?=*|z^N}baGElp7!EYAu$RtK9ls)M{SLg1M+n+^wbtXan@1yM zn$G2!I{bPw#IJG^096?+K6*s=)nf422fB6=$2WWWvq^RPcXh4a0cvX{3$-ynk^+mx zjomgub-Bx~Q!YUG&SMTqJ%}DB-)yyQ_Y)z>gI`C#K1{^RE~NLkRXf^96?t2gHYU6o z@g7L7>IVe~+Rg=GBF3Oh&mC|~e4`hqIN+~vlhTRG@mizA-2nKszn7|eXz^(nd+m5) z-<%ti3`UAJ=AdR>icBweuiKSP*p*JefwDve@G#D1PJ@Wor>e`TAg2>RED#5UKgtaK zz~S~@U);u1Esdj<3yA)Gx#!$C=>}u0!sZn?DR!tB0`33;k+D>yo!vnjKTMA!Z1cUqga+#SYl z)JM=GKQEPpn(k=2HjF*3RJ3BcBfYQ&rz;U`s}Y{Fk`7-a)$u6*R*DICQmzVDO#dg` z2^sF5bvHh4z*PpEF-n%r-VIU6?ZY!Dd(Gk$j+TMOw=@VSsdv>f{&4#3}n5HSXtoO%&kwumPk z^GOK{h9*6$*hF?dYycF+!SbrW3s|WFQ2Z4vS;|%%qgb$2o*v@>(i+Y?ASci=w!G7Y z{|~wXAi`BYekd=!1SGHFvgqjOm(19LRDWoP-++=v`Pgx!5@U&U|4#$vAj$s7jzOG5 z#TrEI_;6Pz+Fs4mrA z!E~{tq(r7haz1HQ6k7yMIbs}@DW%jyH!ZuyQ(je-4>D>gQiDA8Ka=SqTXZJP!Y}~( z$1RXe#Z0h~=t+tS3yZ}7gMrebAqGXMeD*c2Y5e^DFCk%oNe2WBrX76%IbZp`w3ItI zIOtrBB*cXLm4m9mue}Uh_}(Sw{S>09srW3OWoHUJX~`Tf^Z3r^k*m`mAD;=3XVeCg z`#dUu>+A5^%Hi+d380;4Q?3B@4yb4#Yj+>ue3_VR9Wuy_4Y=@!~m|UIBAG@NqKo(ysxkChxn8fQ!F{gj<2Vxq&&2GS4e_aYwf&6CRopzVk|5y zBprl))6h`jtA}aw6nu)@+MX41NtWQO^HkiX8`Y8V>tTjbENl z`VT41VGQ+cOOY;Tm{`GHs1jlsFYEo(`FfM{!+2~hK@+yf6tTE%q~t5tO11{y0jl~ z_;SMsJMhZQ=0O)g6@KeHonWQBi{Em_ zn8M{eK-4kapa%5`&Q^c}G>gP-F#`~70Pp;&VI_QpAMc#-hAZg&qI`H{`$)vI8+^h( z?+rA)Q<~vEU78u&FIR>OXF@_f%~HQ5)Gl&P4@B|2VcP7K6c2nGetM}`hi5`kqIk4m@TweYT3jUjQxI_Wxe5t6uC_@OJ8OYVfxO+*Ng>s#a@r?Ah;#Au9 zNLIt|jO!;uC&N3N83`)#QpgI+|7Xw=oTLAti$x1%wn{TxpqnPJ+`A+$j~xT*n`zm> zr}HK<-yr5PXFw+6SZDO5W-NJ6DfeIPNghIHaEBV|eNB426x#!(c%`KWvh-(DMCmvE z_Ya_5TzZd{VVt5&&gU1`#j#ts)r*mckcw`aHJZ=ztnb*i>z?9r41>B%_lH*r^>WTh zXxO!*A16h9z2W04P_^L5-qz6YWs8wwpqME5x8VxKuH!S+;KzG4@-=Og41EapU4v81g_7!?p&OvfuXoL?+@@1)5fbn6|Di8-~n+x&DOFMM_GE;Q~Fy zM;ef${I4Qw>P6bf7ARc@Ng#re=>GM3<;R&o%_~v^`-r&+G-$$`w_h{_)k~@N&>6t; zZuJR2rJ$g|npkk3^g;ORw}yu4sjp|v#Xt}1R06e11o=0?( zREuV9_OTeo_JiwPYZxmLg1iTmKIl*hSfq{vQUXR$k@_+AHV(na;bBEYi;--2^FV+` zRKTl3Q5pKk|NJnG4o%i)vFtn|W`$QV0sI=RP#OB@*R)tW4jOp;6TD3vSpP+;UW$d7 zxkiko^sYgLm^L87?M(ga8ORbn7Zso#5(hqj>N9a*oC0u(7=MomU@>C_@!0QCyi}pg zcRoiS+MbEgwpmq8jWo2$r78o_D^GI=!Tg`M=Dsr%ZLRmp0Cvm2PUyV~T*yz87Rx@q zHM7Cl*do)Typ)r25sA{RLIH0Ud^5mH{w*bdNM7kaxCX?$dRh=SItcWh8A3ZzL7E$Azs4Y6NeMSR?gPb zpKsV_GsIXb&ql>#j&-ogn26GQ7Q(3wbEK;j39+yLRM3Jzvcw!k0$&HJJ1g;`NNV~r z>0OdQ;XoCoWyRwL>w`xdiqyaX0T=1n`650hK-gu!U z;X$2K>5^eP0q=a|gxt$4tj7MAADTdmf>-d5x2wNjFXjt%Hx4H|n_aRlD9D99?ia{7|t% zrd-LE?`$*d>LsWC1U3I-_tSvBxAkXJ5j7vO-Xe6$LR-`L}AY>VYNrt1!^0Gbzwo#Aq-4B`9=EWcBYM9I=u&47k5AP zFXH87G8jdbu1Ru!rn&fvjtw;QK&sPC+EvGWN)!*Jxd1#{5@; z_)dqhFcO&~4#b{oR+Y}%!DKrFIBI|n#3=;P(aJvjTt*THuaVV;#bvSt@8#t*mXpIa zWIGwKV|e!x>vhAR(qa~YYVtIGjw5#!D~IAhP6?3jzle7G#<#keZBJ>uMa~-4ipwmn zH4H_cWP~U0D*Btg_SyQJx^{9Bn&5h(P0v-#LgK`GK5^MX@y!YG z3?KzH(Y-on?39e;U75MSIYge~QtG1E`>jHUt1T)oPesW`+OPpKx2Jp9OipQ1%N3U1d>W zt2Gyn$8D$<_jG06n%Ft*`A(TgF)!PBal_NPB$Ag`YlIiF*M-`(7t4v|C=bv{Y~7Y? zD(XHj4eca1cwaTr8(S*zWKmeB-^yRU#>gr;1+bv@)z+_QEdm#oHkqH1DeO0Dz~g?f zU7Im1a~x!$u}D0ucfzE`0Iu^B?3o4hmEhYrM-Z?BQ+n|*4xO5?BSRf4rI_^`wy z*tlbHlkFJFwVwK0@Rtl(oLh|xBRtz6(M5h0H4u2eM!#g|Q+w!@Z9;0#%x>zelJCV? z{f(XYb+h79_-%QI=AN>r`)odndmfL>H*V%Na6rA1wv$7^YwoyhX=1@+x!gsR`F$f_ zAXjJ*F1%!wQ(ROoPG-uz>Sb*#_idPHS~O`YLR1wJmX*>Glln?NYu^4FFbHSD6@!vI z4R7)@{r}|*!}IJ3k(K~hC2?xkOs>}@hiP0SFs8A(?2jjA zK;P%u(U59+oszKB>tbBkKau@5mxp3XwfYU);*G^eA;lSW+MSt$M+BX+FAUnfT6kL$WBd^Zr2-LD^jFwic zMPge*+muxOf8|$9T!Jw}kD>e_yxh7uW=l%DhqX!30kHNE<)!{H;T(0Am?R$GGg~YH z63PIG-bhS93~{&V2=`MjB@$_cIHm=G3r-1YESjGy?sUx`R_Y4(tA%S6FhuaP5hyVU zqPNnl$Gr2oer94 z8NAq8&c8L!`w9w!@@B|x!9b5HHl1H15C7(v+)*omAz(Apw#H8~L;Y)%Ds6t2oA+>M zINPYldg(j4*ZR8H?B2-jxZ6pk8|vn{I5$Yuwy}dTPQ^&H1Mhg!fq3MSP6?P3&RhrX z+?mdA_BKVtLvIiL9s}lLo13L6T^e$vFh2v64hDorNX|@#S>W(A9)%h@Q@WfA{s|uA z3V|D~;N{eDzV14reE4+xmRE$v5ujDpjBEoH_ zD9hO6qEt+@`Sx9GJ5#z|9~fW<>1JS(y{V&addAPoO$zP*P_JrB4+Cd;#GfaEbkug-Dt?7~We?MPwW9qFCna4M{O_#rZc@vp`qgYRcg;t-r1O zFArDOn>YojM|JGVqZQ3LGTE9?jyti9(SECfUuAv`p(H2ok5tV#R0wR}$m_VPT*)1$ z#AuRiikSLbBHw-h>Lsu|>`3c29DCj1$^updj{_aexsS*QQv86>6n2l+n(y3LK;ee& zY_s7@WjWia8Mg^|bLE}xe-2Yv$SiuWf*0>1CaW6=7I?%{rN3@|9kpz4qkINGbXQGD zpNxOS7it2+edym_MAnKP)1TQ9JolkfL7f~BB8xE#-0ylhY3^p_f~M4DfQ9!99}N-B zNWJU|Y@8-^Do&a-ExAZr`MHj2&@>SPU3-?9M*@gFt5jPOy zrW39Wu|6|VslPp6l(=6qKXw!8;1*VE;;*aNU5l--n-8Br&u1?YdZu?Fq1~~D9PYcT z(1@InM?T0iU-Vy}$|ny-b$!ertK3k;MOd97NnjF+c(FbDlig+#D@~-@AQ^qPYYD}i(^sg51c6}$R z$mEwhE>ycYh}cZrSUBChyq)5GAkQuAnz84@o#k_2AgUYE_10Pc6|)7irX-aN*=tOC zCvbhiKWp)am_X-Qzis=ma#Ey;8OJ{HZy;dJaG(7_0*i8|0lE`ZRRq^hg|nDxU^#r` zzjgN=P)%pwpE%A8qbL|bKmue06_6%MlM)moD4U zQUn4@Nu&!1p+^!!hZqP1NZT)t`kUR~?%6%N``_KO-*Y@C@-6SZ`)>K%`|f-9yqj`v zf4{p)-|*u*(?g6RS{j3qb)EC>M9N7ITU%iB)Ymr%0$+15O;kZC3d(r$mbbelCimh3 z<-b5 zjqiEcqWk<^AMKkv^S1o!ISKTi)6uaolaxxut*{8kJiY9X2HaI)4!Z~PF>pbElVeH_3bg;bp}ciZ|^IS2LZaz#M@gwdGxZA?29&=tI2a2+~d#! zQuI*i00F@UF?1PB7EDtp$y`Y#$>m~ zn9W-l+P#k>!XIw~!~>8(Si(=(Lb>OffUX1}S9pt2GEvx~*yXJ}UwFb#uewh@)g*1B z0VB}tuHtQVdpGx;8KA*NUsVzsIzDJUQrI;X*>We@Rbij&ZOS2>8AI8P`WKBfXW8Nb}1}bIpB9VkdjGIy*J7R}NQ){rYjO_(5Zy!)Rn^ zZD#*K6RaxjJOF|JX2Gu$UjAKa8^sP!gRNq;GA01M^0X%x@X+oLF7J9d0q#=KTHkw+ z1>U+pI8~*j1z3rB@X!J58~Znak247X+?W&88$|%LlJnFfDG80~jTB2_0Ubmal<0gC z+2YQWX!~5nY?fekHfU-FTT3GiYF@&byem?Tf2oAuf4#rx+e{c^zJd$DU-go%{Jgps zfQPP1!s`cr`E(%f_60=U=T*VtLET%6ZnNO4Mc0+8!=v1pKL?Izm0YSk-O!(+axluM zeO9gPbl0OtxxIsP8m5NuMG05{}aV>?Zfsq?PF}WdK`13*C zrvNZb$DN&L+<$HIO~6fnV|KQ8BBY^9x25SmBLaEdfYqH2D8~lx2~@u5s=Hyq&wv%t zeS|BIb$RPoc=IxVA6WZ8u*U^47!~9RJQh^!AADd{}JwKOMbbxez zxmG)YaBZvT$u3T}ZVR9}b@dLdnsnZH*82IoE#LhE)zJ6M`k7z0jsOO`r+5H-+0=Zv zfrU73w-UO#oI5VuHK{+663qO}R@{pl0TtHVv zfKJX49MRsp-t6gQe4cTtnb%^iw*7U}7t8|e;QH#~UYpT|CtZUvnfnL)_+1z1-!;S4 zzhQm#5%OJ~uIAG2ae?wGxoo?iY)xx(eXC&%o3g`<=~VQc3mK~sy$@^~b_8vw==zNwY@gCmk?A1 z3q4d;_XHcdZ*BrQ@DKo!x~U(h#wn|NfGEZ-CF}KHDy?O{#U!*IIb6EN;?)b5DWs!tfMZSLJzv-9C!t3*XS z4c|$cRjo9wuN(Ds(j*YJqBEe}^w0{jCN4R6yZ>rs?mE3e_^&HD3|@UY@Rp#}2UM z9O?HN1Hos3idv!hs=1fk06%-CaLUTWR1p!Wrdh;WnYtF(C}ovJke5pY7u>514(?eT z5x0oZdTvE~P`1%;tqX)2lz#JH_hjt7?mg}VCHWmW68_B!e4A^)h07w?+|Qo8_Mvw4 zL&N+B-RJ9!1F@5b92Pi+G+t*$<3`KVJEB&POqLps1GZem;eso}ymD*MK)(;gjz$DJ zXQ^%nT}B%KIvzZ7`(2`4*q?V|wLKqY5A9dO&EylV$~^9T;h(1KVgjRVeurKE!szn{ zEn ztGEDY4LHdY&8mFyrSf@MB34myOsP-JQ=z)93Hwd5VO-k!lnoG^&B zn_GC5%$abgRxU}nBeIdO!VXBDtI{KZFBi@HJZ^Ja{|S>oWQ1^L;X2%iE2_2~_11Y_ zlACH>m%3&|(Ljd=o1T72h5(C`z*P?{O(yK8XQZKl=#+`);kBi%$H)bqkwGM2kvFQ9 z=_TQ!TS`Z6n18560ICl_MO3^(+WrbTEQ~>QyzN>)^Q3A!@|9w3__)_#*;>XZxBJC* zCg+CsOY@}H=f|&ZOeGXHWDWKTa*Tsb%O6o|+Mhyq_ll&UnbT{PBNjcD$>q0hb7Fwa zuYkY8{fZBzqxP$nmp_^9sN<@a{}pT?F@V~#Jg+=QZEZXR#DIW6iF!Ji-`_i|e^R*P zy2`jaZZ}|yHGw$N^vvR|H;6lLD&$aaD$DPkTHVT=5gIW7XcKN8)Z5BffbjMsG_U1K z86}IG9|%AE#6zgW6z!aLq}49wRmrJBCV$bIA+KTb@p*YY(4Zpo*=_+?XM_5_0Xcz% zFc)7VU^mL3U1i~D%~y4B_lHx>{ycRLxn^$8sA=L}HK^yDNAa?Z0ZpUqKbB2O5XW$) zpU?rlGf(p|P&b${<#1T=c^Yc9kWTM%o~FfP9=LC~- z3Ql0d7ly020rFZ|t#mV8zy zWcYoK$`<>Ts9ujP020PxPLA}Kp{_tmr;+&2wQIFSYtyUB3aKCKcaB_L{RL$<6(zs) za3PG+5*6y>c(Cx?Hd^$pP&QAH*K52y-y$DQ{Q~_Ow+GC}_M{52DO=bkjC^CVT?J>I zNs_Nh?O$wu+!)&UXmvQ|4`1cJP}#CwiZY^MlgrAhc41*fpeNhT(*F! zzUno{(>FId=HsBOh|@rE>deO2h?LcAVAY?*>71)H)QLOQex}Q#_hC5vQugSFi5pYUs5e>{FU)av zEJ)u2_IxR{xui4vkWWJStc@-ujg9La@!|5;m*tKw@9bqoc%Pa+aaBcjO^tAV0O!7@ zP_*QF#o(CRVUa}UzDvtd#&K->lH`WRsm7(S(dw{Z{obb&oP?8^lX{u-l!FFK-f}6L zdrELe*E7nC&hNoLyIQ;9{FnTz9Z{RkDCXr~L@tXMNSe{3h^AZ54|vAqZ*a2Lb(>yp zT`*SQvWu^>=hDaYpn2wPRe0`uz!7!K&#a9&A#B`pi#c6PRUu>w8&l3dQ#jGBj9@dU z@4eRUH8pQ)4}Fv@(s7Tj&zxodb?R|aZv1#>LyINcM-@_}Op8X_q@!!iWyxYWJL%mu zDaqjM1jPy2h2}9Hvif9No~m*0TZ;fT;X@sqRqU_j9Oiw9yVXRBBb@Yjx7?GXOQ$*T zq&s`lDLznkR$$(0yIfvt0RiI_!s2*!R&-Gfe9~e*BI0=tq%@-9^rr zl_GS;Pcmd^BHDafjLh32*wL+L%8cPRUk1Ut%-d4!7Isp2>&01g6x*PN{P7J6Lw%_z zE|xAvNq0dVWco8H2HrfvGxSCF2zjN#eaj0RXz29npT%^S1qc;c7Ld+>dU);}XpU1wDt2=?RYXd1nv zZ^W0|`lMAz=Gl+1!#yHZw~fe>%|NmZ@!9Sfvg@=>w(27u;u-U5Hgs}-rrFWQc9&W+ zJELv9+)s{Zqvk_iOSZ$VT|4?1lM_FA5q|TKU%ELVw!l~>#Vsj~Qbh5)Nfo_AUTJ^k z>TY}e=%v6Q!bsXP?J#fU<%^Cwpv<&N4{Odv$2j54RF=L(x_K4M|Cz$$#~n4KE9X~` zKM7EacbVJA*%BpG0&?Tb{7ql0YZ2Nz2b-La>Ri$=_BSKM3|6Y zcuE*J(6vYzCb)PQt%f9T^<6pVf!RVX9h_&8Ra2 zelk4)3HbQNu|Lr^d0(Z)M`a>0mf)|ZsR5o*nY=DWy~JLzRWg7lsba;*(-UhuXjo|D z!EL#y;lZKY0&FcXM=V-i8;QH+su@MPk1m{r1DeeN6yHE%B@bSU4$F^@Q=0W3|xJ|sU zymPJ8*^XX(Tl;6`3wFS)gtfqOE7_18;rthi17k;&3~@rFiQbk3eC)>aAu;3$2nrF} z;)QgKGndBALPC1U@W#;)NKt-de2hECLo-d5+>1L5M0Z~C_f)I5m8Uw1E52JcJN0W4 zFeBZW+FS3UXS?ncP}uFRZaNj~BBVY6gr5K5OAfPfo<5p&710?ZzN{3fBJ%mwa&7-p zU>q(7!Tp@$EW1KT72sf(0k;oF2z;l{ei9G^E`GqfZE)TJw?)sNN`^M-YUeqjl}Dm2($*P01Q#tv=j^H4&-c<$Tlrg0FH2W z_d5pVab~ihlZZlD74~X$?H6+~r!Vh5%@a(o70%Ah#ZqTF>GdRzifH;!ZjT=GmI_pt zcb&b;+n5Qdc*W&9upweZ&MLb(g3TqdnE6zEm2CtuVD&s-j4K4{dKpr^*r+_-3 z%LV{883CPC#88q?dYHd)oQ)d*SP?PT#%)%R8IqG(9zcg=5JSL|dqZPD2N(TXC<`DvJaZUQ>GN4rX*tHXL;BX8N3$I`uY?&!5QyM61? zwI2=^oftH4ak%au@!>!@)#GnPl%_ofrYiDmFA+9RD);#v1%nC@Q#MDF9BgnuAFu1l ziK8eR=bsvoG)_`C9=Kn0&_{hFR3}Ljl6cYqjLoti2%mmGKllLWf=Mf&-ZIYi^o~6_ z65YY9UU@Vx7G4t8`x-XgN;TP2%8dMo%-%hN84U5v%Ad12wc95So%-A^k~(+kI|m|D z6!AIZx5nEqw&vI?g!#42ZU)JO`8jVJa{5JYy~g%ba+bYXWBY*uUF!rNzm#N7kW6Fy zMSPA=JVH)OI@qspu$MPIc6D=AGlEM@$s2We`FPLM8HG$PAaHVZq5c?r2b@qH;^ z;4mqRao~Fk+YJf#RfdgGdwEB#Z8>b+H|^W)R-|ILA6xEV2FYoaZ*2;6nvNNqR%P~K z*6qNPzkOc4%5EbL&{xIAT~ex=Z6DTGi09dliSH*GSn8mBoF=dw>hPAqTSq*&SY)BG zyyI5H%JVIjLz2hHE}s$rxT^OUYW7IBx3+htlz-SfqYgRc@a899rVN?B`bOR&_r9IH zNd9phTO?3tN>Ud`-+Q*>$(Pwp`vky@7(-_hGRp=KpJ(5^FSXxcv-!9nJ<0glW=QtZ zd!w?;=t)yKEu7WOs`j#z2=#&eMY;>{MB>_+)ltho3)0CU)2`WDpKNYfl_@2xSVlqu z8aJE=?E=r;=Fke(DHhr&^~XusNlEjB>dWZ9c0b7pNszU)HHdzDABgD&)9dnh>h$FG z?Jr?dk?D#D)6>c1Ca;K?>AsE1aMSX+-A%njgPaXFI=!w~qzQ#kM>4RO{77!SzER7Y z{%X>yd6^kL4`mr=FcI?0XM7~|01*ZQ5@wDl5=sORa~A%uv)jv{xS-(No^cUl=yOh8 z6iA>i^q6p_kfuRljW5^cR#Hx4rQBo6ErJ>KSi3V~eX%_dd!=@TF)`TN3t$<$bFF=y zh>Feg*$oX7ibqvogctMj+QKXB6l8Q##B%$VBhJ~%AUqjF@z`A#1n|DS1A*raRJ;Dcqzndv?OOY1LGzvTJ=_fADncyBdq zdU#~EgWA!gl^$<@GhiU=9n1_*6$a-*v+E^YdhFvS2gjBYE0r^~8&|geRQ+O8S`Qqe zOe>hCy#4@o!DybFp5;e8ISE+0k=cfbQx&PI3Np*epewNPV2{^x?QDLq?Qlde^9>zvZ1U)mDB&66~3RaJMpn!k~_i4*KqracVXEtdbWiY@8)K@KGdl zI!zl{?V&v0&A@M_7#Ezn#;v-RZsiT&Td7_P+?^Y(W`q~-)urMC_j*3rmu?Qhq)o3Z z?6~t71M8&wmv0`S%TfAcZLz%}4fxauDxrYt=}l3!P-xvOSb)QQi!hdfu<>=)@I2!2 zV%%y`Qd_dwHFb^KbAbfrt#uRd zeD31+ffj`S{<2e@wiFHNh}7{b?+dh8+uh~N}y;dMZAvhKtlYrh{SbS^rH#xU| z`_6uwf$hIPk&_t;o|SQed4fS=Vq%oJfg(C%ZXhE!*PAf`C=ftNW@TmBEuB$}eC`O- z^Arq(nXL$R10_((U%&o1TMyKV*>?46YiDyZYYxeH3xo3XLdgoyvkkr=JW<-kIe!H;% z_zm=SX*l=%*@OTR&J9(r_;qD5KMV_ z`CwvFlJ{s!j8HdFTV?xN)Ge{{f8l*XG3S|$QrUXe)fXbyu3e)8w9UxLaaht{%k5B- zNt4<_*G^n}taZOt&OEnuanZA@rw8BFWoBk>PM{Dl6gq`KpY1CMVa#4JyLhqG+t1H$ zz@+eD=C>;{X3$+_@Zz1qfs%l%xw*N)^pdQcoYGD8>8ION5K0ycHSxziuu(kfy(ez0 z?HoYDuh$sTZY^#8=rt*!g~Zd2?Q^^q)vCx-_`4aO-MY#Qm4rdUj)^w3xYkl9r!`IK_jkTs)w;!lPMY|Z zFzeszb|b=LbYzSU*GnLZAJkf!l?cWS76+cr`qunNJk}~|WZ2E!Au{9e_S1>z+O|RT z1w*IOj9N>Jah2nbzdd<sl<)oFI`iW-i>ZY zqpujqSjDv3S|2&OEAB_HYKjjC*3@nJI-eE+X$gZA9SZlxKZU%Mh&f z=W5-z_r5n)$*Ia&mz);{1-lmU|Mh(imwJ=4(Hm0gTc@?YQzIu)Ojf4xa3b{3H-_jE zTo{g&k=YiQ%jsW5o$uq3zt=tjW523`(+>YZw|6P4s2DxDjJ8)1W70@9k*|Rt(T0aa z#l*mo8GLV(B2HF`8*u&fkiH1@MxQ`tRD1!QqDr7-DexNke|KQqo_K`@mR{q~Lwxm@p$x}8hI~{D-<(eYJ4QjO|f+4CJ zTR>WH?CdU9cvy1}pkzdLM~h2KdvCn+TGLWj7l}4}(ibDZcepjp^YaA8y<0%bTP&8dlT-c_f7KuyP$Bjz#93hf(|!eGH4y#Wx`BhF7Xu^2x4%!g zUrqneL6F)XEGA8heYg5nJ&K1c5EA1%|FrLr%F@oe>K}yrPwL+cmvQ>((iWrZg3xJO zb)DwINWKTZh8c!Elk+r(nZ3P`mwRe%$N6|8zn;8eSODiiP>FqnYpj@L25hXBEzPi^8c&-Pf)G_e@!Qzwc$-W0;u_=b|(2ra<-m`*%JN zO-%B2gYZ55Blkh>+^#V|+72{>KN?#EEluzB10wZ27N__S4&3hAaoM zYGM}kSSFd_$rV)WWnON=W z<&{`nW=}5OP1y2zMBA1K-Tv9%YN$v9kO9~Z2sUFL?LMOXIw_&L11PSMrg~ZeER7z=P0r4l2Z32Y9^W>R*X>{pnPY`$ z8;Qg}!u9*IAhAv_MB0)g7;B8Sx2`K=`#?KBwE-g<9JRBSCN!BDz;PHr3?sC{$AsgO zY3^{2ZWszdr8p;re(~KSC|FkJOS?mD^-f%0z^U1f7qcoj!0H3dhx!@%Yad!T-^r-7AGo@-Y>ug`X*qe!!-ea0IHhsOX_Bj$bq zcE)1lptbI3L1~r7=%@~PzSKV9D4V?!DIObPZXMwGV%&%|Sex5Tuz6txlZ*}5I>w_G zaEus<+H*VpN(1B~kp(z(AiCatLN0z{r84szjBg`py+KZ-0&#n-@B>~mqC~@X%)1p= zzCu$TUzSHLnrQAWM)4p?+{MJ&(LT}AQm;P5n$dWpR;?(%aaciR6~HgLx76y%jk8bBz6cZNsoNc}2@ zf8fuxmW$U$7W(aXjJ4Z*nWA*_=Pr^vDd0p6sY8y-4!q*q;w7SG)as3)-Pb+TNv2aP2{2o`^cZE_oI$CzloNCfO zSaunA7(4e|Zt)bLqKts9{xMd}tNPTj^vB-xUuef=96RxEzntGAB$|KR-i*EJ%+Ugl z0q-A`&Kcp#?-3&S9)j#_XgiH%nmBv8sN0j;0vSiXl;qeoKidX&C8S1=wVS}#ZEOqk>9NY6#2Gr zZc2ba@tbz3E+USJVKNvR{a4X&@!IOZGQ#7j3RlmH=0!6g$zw!t=ULfoip2R$yr%!B|=!|Bfv@_Bby^8$%?R-@Fk zZE#cK(#rTc;;Gs&UB4(lc(=4aTXKsFmtQ>t+1N#`f?G#0>Gqmu{TbeKLp;IBvvzZ|OHI$0%f*J!H@ z>nI+uw2l)OmrR;^XZV@L%16Cg+0%XzR4%epk+w39lnoP*RXcG)JbJ2pZzRP%V2$eR z8=`$*U}y5e0;V|wouRo+#ISx$NrTF}A-mA@g1&IAp&a(Yq?g+mI%9Fww9W7q)*D$= zsI00hjS~YDRpAq0onwf%)(nWoA>!q2G~<{l&|x4@q?on5>oJq#FD-f3Ed#9-Mpj&hh1mMi5b_qX}DzlP#N^ z9b2gqc*$F6>*lHfFyiBfADsj2Q%OUtiHF^|4U@U@vPc=*K=E6Pi|Wh69VA-mo(Z>q z6C~@+v@WwL0f9^lo%UFb8hUtmysm=B_Kdw5{Pl`t`#E!K7kf7!JI-1$u|6N$F9mC5 z>;nnA4qxyA=1j2U{|_+pe;1jZMxjuE7po2+%Pn9FVsa-{BC?k6w9GcnB{gXShvuZ? zIiJWaM!XHa-$D9^qy~f^fYp)jxiT8lCrXb(IH}fWAV~o5O%u{L{sm5 zp%-dpET-?@k?(dL)NRat|9-xWk|z68^%~GH@HG(*hf`i#JNy*~Z-)7mM`(~~z_!Vd zCU88&UNW(fV4BFK?>H?J*38Y#eRWdC$uK@X{))VaOnPSN64)AJr@B<-HzPIn5vJT4vp2ZCygvO_x z5s!_>zlB>z z-7Livdi>|Z8!P^_f}4sirM0d^uo>Qzg3C*L@w$c4A+=xBp4wh%Rs{w5}>^9Hr)wD2x=d#$71-7s6Y7i2rBqtY6)^+sj%zPH7T35}BXsITuJv}*Fb6+=t}B8xO~T`Z zAo_`uZ7ymM&}wg5L5;d7)@7CM-fP2l3OghXjbFLeEhb8ipPB;VswQi_i26LDpe#9v zL;&v`ptmhL0lgtaJfis^gN{zt^G?HlzAN$%I(Y=ZB3$ZLBx2(SsOVvR5nA`q7L!xy z3MpwQzhLgR6u4U}<8kKm)~2wUH9c=kqJ<1GDkR)Jbk!#_6HSC4mRT2}#JAZpJr$rG zrLeN9v64n}_#Qp9_3|bBQilQjy^uvCro8rYY~fP0VK;$UHQqJ-K@3!WT*}8%npR_) z1&M#r@7mDsu)u{elJ5opnV`XgC&n@-`sG+00`0TAHq>H15%qNPv{Dft8~xO zTbj)nR@_0TfkOhZVlxDH+`17cPy@X*uG;DW7s8JTryi^Et0KF@B1H2RUG>qn8tSfeUobd~VPWJ94fSCkJ%chBZ4obwwyS6*RO=)uWV4N1s zAVI6KhoCs}B%~>#$oZwZ1ojRvb38Mu8_Aqfq(K^fIuA|5lM}I!)`du6dYd1tb#){E z%Z< zd}+X+-o~(xP^-6y{bQAiu9g6$Q(CxH57uu|P4%)v#DQmJD*fy%%{7qJOKPKv)@!K+ z7Ke~Jl`9%zYO$^lPcxNLK5!RaEAp@5Fmmj`SU*wT^#Vb z0KKOm6@^u8Q(YFa_-TSY?*X37mB-sfo~0X+&Nt{E2hmFG%Wc*kqnBD_=|;Vm*}h*c zPy=@o$u~-gF!tOtA}nH`&oqHtS|1%!stdtR=9G-DcYw1z1(De4JPYq&1*nvG5^Zfy zTUKNgeZCHOzHaL=8ZsDqv2_%r2EmrzCv+59Ii9STri|f4Rh_3UWWUF>f`b83<@SZt zeDT!~_m%?1keB|5p-<=V)7_b;2Psy&(u=1w@`Ih!0ohE@S{5QO>x8)tFMp!37Yjlb zdQLB4a9@~*04MLvU;i-0wdf4hrWAUI2fh1Z8p-la_~FUCaL3igNylB@fs;9>rXkqI zc$(rwi(R9xKW(F<{-kwuvAf1($Zd^{iGvscFzG{R=ri`m>6bJ&T;Ya%(^^)Qr(o0| zEu&%mj+))l+8?RtIyx&Ou?rupF)0qR#`2AC*p$I~--Y-DQF?EwP0~y^Ryzb+#|mHa z->wtK4zh>ik^eR`dlS(kD_Q6g`}UxlpWeB%!(G@H#vMbfxK%E_G6q^=5Wzj(Xmqcv zL6f);knmPXt>w&KX~5AHnkLTDdp7JDDo_l1Moq&20@<5X;xI_m-%ryIlh~x1{1(2h zv{G4#$VX8%_ImI)5x3+h&EqShoUF*#5~}c}gYis=a%&59rnrXbh#K@bd^8pih=w;S z_m2q-&|8+5AQU3Yl-_4Xr2`FYTTT6ArO4$p5Zzl1>cDA0Z&C}lJ98`SW$x7o7xl?J z$NHshvpm^xEvtqVdV8B)W$BX^n+V6qm%*hN+=qXgr5fvZx2>&LH9$h|8>JJp!gkYf zjZXG93Fr`M_+B6S{bNHP{tZn{M+e=NB`-v+E}%}YVuT%{UBeCj4X!nO5cGvb_;Kz>|4X<|sdOh_Q2IZC=h^?gz!Qg@Inx4w+0pf_9R5UT;Eqpk z`~C%$Sa3*!mfrh}LNA(V+`rugJK820EGww%bz~IYMvY%Xx8LUFiSPww{phb_QgR`6 z8=-F$_~=!QcouW|w1miVq$GSxA=N0ag3tH&AF2=VE&iW(LjEV*s}f1G@9UF6$BiQa zUn~)d{=NjbNKFEA61Lr{zf`_vCh$Es{d=3@{Qj>A33u!MJGZ&0B&DqQR>H=1A~D~E MbC+OchByBFPavxIE&u=k literal 191803 zcmV)0K+eC3P)ZgXgFbngSdJ^%m!Ds)9ybVG7w zVRUJ4ZXi@?ZDjyNZy+%@AX8;--RD$gW>sb7SJkQG@Q44iM+D~p@8$0tgiB=^H1!fmVp&65 zT4nhCTJa_>^vUtQWw`7&akcPOc(;zBAO@y-79MK&G(C{YRPb5mYOTGkGDZ0XI@h7> zml|y!uTh;3U^M{48dx0xZUtZfFaksDFGuDq={J!-FI^O5MZ1B9-ebI@Ar~2)4n0Tp zlseAFx!|QqSJI;Z;1pYHv4btX5^XMbE&svE-xCCxOW$|EZU<~XC3q3qtoag@ zUZlfhINnnwVVwXdanxo)e`Z{6c%dhM*WZ&Uq|-^lS~_(;Dv2lx?bJ~U;U z)vfZ@;*poP+NYY_1{%YPU6bl~%zAKD^5+~ddSH7K@H+qwa3cVMo9mPUocz6a?qq$~ zkf}7mq1bBz-cL4q^s~LVumRTVNk7mgja%UCW^N0*bwC^kgDgx8LbYw)1M3yAS=n`Q z3wRty^)vu@L5{o+a)F80R5lsD5`Tds{i*Ynig>8yGrA+-Rpm3|az3Av+>s~ocCD>O zUZlC=Yy5!B>!7o<;>IzSWI>(t_u=E;|0Ar^ubR`>)rWNOqtbPNKLf@y;0yq+Pmam3 zngYf6-L0m?UL3R(U`EtF|KBo>5N<~$&}vg}aI>V&A{ycU61le0>os<A9~w&o!6eoO6*Wd$4>ZI4`zTS2`g5UcfjV`_-yQK_RjZau(Ja9VfD*(zvM z0+;9r)o^KiXZpw2%SM_~KR4$s;Wu52I^0(RAR^bmlqeZTV0$_RKdYdl{bu@I7}{X1 zqpmOTONN=VYM29J`-#IK-qUbVzAUoF=txxxJt6Q-$3LN#oF(O6WSa(`n!Kd)f>UQn zdO_=V>gXyR(xWHD@%8Mxn}QF25!l`WFoqm}gFN_T3?kl<_Je0->3r<8-v#f&ebu&b zUPzh5I|-^G{pKhRpriQ&O>&F6>_>2nFVQ&%=DrvDijFOfYf?g=jAte;6@8H|k-FAI ztS7%Coz}QlfsUg@m+=YdH|KMg^BDPYZd#Dp-Ui@-aR3IA5UkqdS|D2SlO#w!ea#1q zDQLu*6Un@?002Pw6+@Now*H9RRymxeHQdohBBE~iLUkXfodzY70HY6H7 zvJzL1YV)H87P+S5C-GNpk6~{1B+_biDAba8>f%DBY%iF`(UTyFRN{3d9;m~YetTed z3hV&j)|B{JT?AG{UprtP$Z@V4L7RIPndiKTH#AywY~v;3Obo6lrqlQG@1BIZ5X&uJ zNKzas^F)`J>E*#niu8xszKu+V0bm5y#{hP~+3hfvWG7F85bVWZKH{4gU^r3spG6mG z$=Za**jHU$8VqQf-^!$@$`;?n#e%3bPVss}k6MB5ikXSc|FiKn;NrR}LrZ*!L-=l* zzLt_?(n5F(oR_Cy@}Cu&Rz4%L)fyOA(+)HTzz_1=PX4jQj!SmL;KxS)o%Wd)M+Eju zeL!gunYeU3*{2wDI2ZcZ&3a&11Aa3l@!XQ+*#QFPXoEKEnRl8f#{l#0Aqls%2%X)F zvMSBZg)|Qi6`6=M9czc=+kNhV%wyUIN1Gt)+~LMt{*JIG=ot^#77~^ERUipz^J2I) z>88xdM5iNpSHsr@hm>{27^TE8_l0A7_lRHb!y;I>ix{9#qCrVGkIb3I5Vp7jxtB?m z$_VUErl9d88hEl(&xOZu<8D1*cK*yslZFD@SMghu0>wl?u6*wn=;4PtowWo^wsS&q zG=u<4RQ4o65kVrW?S`oVcP!Oi20}!`6Gb)Ps~D{$QL|qm$e^3&Ue8!+eaY!a{n`xL zNiZtW+9%Om-SL8Xo=IhDFmf3PA87|t(tq)HA{^+^M+A+K`l%wjh4boV9y!j4m&&sz zV+2e*Z*Krw%sSYufK}X`XKjb#3`G8=_Qm-@6Ej&GYr3|=LnaG@AQwEq$vRA-C+ROC zz>oTp&Zi75>kCtGOsm%hM9{xgsOd|e2ZpIU4;Uz_N{!0smCc3~HuBwNK7 zcHdw(Ej~8yvzmY9Tz$Mfrd@2uoA4A5-Cam3IycMO>S(&0HW6gR1wwm3W{#r`8|LI4 z+`JZ%rb5)IK=!zEL@3SMk(H5vCb(<&Bd_y~@YxCN3$jP&ms!>|Ig9@dx**b&_)fBK zL~}2K3;unSmlb(jR*MUk_`mz`M`?;a906_2Te2X;2xGY7%5NyX($>+>v7clE-K+|L3-iIAU#cHGU^;6p-h zGbyQIgK4EI7{v?}PrFcPQ4oE}*HT3%70r|>D>t~daC0YGqtgOwpeGr`7JsoFIRRFV zZrQInXJB$A5@kQBV=eFpl!i@2D+NWYzVtouE!1g2tBgfiN_dK-0cLrx8X1MQ)b^3| z7j3(gY@tY#kzh0&O1YB)vRKX%Oe8#nMm720FtT)40Iw=0qWpX*?Eo7~Tof6N<vbL_UVxm>LVg83Jo2)XNm{ zE&(Uww9rQbw;27>eOxqT`)O&j8}s{R4doAL5^K-+Tc!yOIrYpFbXuaomZ)kh`);Xzh(>K zZZ0=1w(NlE4^0e(^YM!0VVKL!1vv$z{C2eRN3b6&Hzn^@1JR*e{-f>nbKUhZ zaJHLlnU66<%irt(sR?o1HXCHS|0Eshhup{EWvSjvJCYgg%$~+;d|?qY9ll7JA*|h_ z_LB5<#;{Vi@FyLsU#m`aW#EDL&pydJi>d7K@qzusOG>7sX*vL#qiH@!gg)!UNzIOl zi*8GSoO|i0Ju#d+%JIyVOUV2VZi7b@yQ``1uFa>SA4ppUS|xsoffJd7nNJdJJX_qM zFlzROpaqb})>c`+%Vh9#1c%vyw-ojnNWYtsdMCFgV-#1kh80Wf6&1t3=mbT<_lH;1 z$ysO!y=0&*d>mpT@KsK0`5Ks-;qpL+ClV4FPmHqCcLM728grs8?JZV-m9bZ^6JDxG zA`AHWpVj%*k|)&HDx6$WKfwVBUenV3WpK8Go2icXEAf_aY6YR^Fk z0C`&+yC>AC&Fz{FswLA}U1^q?2E87T5?d6i$#}A|y}2~`09gXO(qO8Knr*NIo(-tB zBicEGtatY_b?80X(QD_N?{GQcnVkc|USk^1VGZqBucjAPn0+kPp7n)rHXtz11-^sEu%pHT5&dS} zZa+`r19KY-U!y@c+31F>W#6;NT|r#C&k$$H3#kmpyTlI|`Xy<(J2PJK=IrGP}aSD^0b!_0%jlZRGHM04

Date: Tue, 24 Nov 2020 18:22:43 +0000 Subject: [PATCH 47/83] release version 2.10.1 --- lerna.json | 2 +- pom.xml | 2 +- scm-annotation-processor/pom.xml | 6 ++--- scm-annotations/pom.xml | 4 +-- scm-core/pom.xml | 8 +++--- scm-dao-xml/pom.xml | 8 +++--- scm-it/pom.xml | 20 +++++++------- scm-packaging/deb/pom.xml | 6 ++--- scm-packaging/docker/pom.xml | 4 +-- scm-packaging/helm/pom.xml | 4 +-- scm-packaging/pom.xml | 4 +-- scm-packaging/release-yaml/pom.xml | 4 +-- scm-packaging/rpm/pom.xml | 6 ++--- scm-packaging/unix/pom.xml | 4 +-- scm-packaging/windows/pom.xml | 4 +-- scm-plugins/pom.xml | 10 +++---- scm-plugins/scm-git-plugin/package.json | 4 +-- scm-plugins/scm-git-plugin/pom.xml | 2 +- scm-plugins/scm-hg-plugin/package.json | 4 +-- scm-plugins/scm-hg-plugin/pom.xml | 2 +- .../scm-integration-test-plugin/pom.xml | 4 +-- scm-plugins/scm-legacy-plugin/package.json | 4 +-- scm-plugins/scm-legacy-plugin/pom.xml | 4 +-- scm-plugins/scm-svn-plugin/package.json | 4 +-- scm-plugins/scm-svn-plugin/pom.xml | 2 +- scm-server/pom.xml | 4 +-- scm-test/pom.xml | 6 ++--- scm-ui/babel-preset/package.json | 2 +- scm-ui/e2e-tests/package.json | 2 +- scm-ui/eslint-config/package.json | 2 +- scm-ui/jest-preset/package.json | 2 +- scm-ui/pom.xml | 4 +-- scm-ui/prettier-config/package.json | 2 +- scm-ui/tsconfig/package.json | 2 +- scm-ui/ui-components/package.json | 8 +++--- scm-ui/ui-extensions/package.json | 2 +- scm-ui/ui-plugins/package.json | 22 ++++++++-------- scm-ui/ui-polyfill/package.json | 2 +- scm-ui/ui-scripts/package.json | 2 +- scm-ui/ui-styles/package.json | 2 +- scm-ui/ui-tests/package.json | 2 +- scm-ui/ui-types/package.json | 2 +- scm-ui/ui-webapp/package.json | 8 +++--- scm-webapp/pom.xml | 26 +++++++++---------- 44 files changed, 114 insertions(+), 114 deletions(-) diff --git a/lerna.json b/lerna.json index a4385558c7..c72f7d7317 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "2.11.0-SNAPSHOT" + "version": "2.10.1" } diff --git a/pom.xml b/pom.xml index 603bba5657..0b6d1a49b1 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ sonia.scm scm pom - 2.11.0-SNAPSHOT + 2.10.1 The easiest way to share your Git, Mercurial and Subversion repositories. diff --git a/scm-annotation-processor/pom.xml b/scm-annotation-processor/pom.xml index 87b63417d9..2ef1cf316a 100644 --- a/scm-annotation-processor/pom.xml +++ b/scm-annotation-processor/pom.xml @@ -31,12 +31,12 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-annotation-processor - 2.11.0-SNAPSHOT + 2.10.1 scm-annotation-processor @@ -46,7 +46,7 @@ sonia.scm scm-annotations - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-annotations/pom.xml b/scm-annotations/pom.xml index f83dac689c..2ab175a7a6 100644 --- a/scm-annotations/pom.xml +++ b/scm-annotations/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 scm-annotations - 2.11.0-SNAPSHOT + 2.10.1 scm-annotations diff --git a/scm-core/pom.xml b/scm-core/pom.xml index 8346a25fbe..aff722ebc4 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -31,11 +31,11 @@ scm sonia.scm - 2.11.0-SNAPSHOT + 2.10.1 scm-core - 2.11.0-SNAPSHOT + 2.10.1 scm-core @@ -54,7 +54,7 @@ sonia.scm scm-annotations - 2.11.0-SNAPSHOT + 2.10.1 @@ -227,7 +227,7 @@ sonia.scm scm-annotation-processor - 2.11.0-SNAPSHOT + 2.10.1 provided diff --git a/scm-dao-xml/pom.xml b/scm-dao-xml/pom.xml index e9001f190e..655c4fc217 100644 --- a/scm-dao-xml/pom.xml +++ b/scm-dao-xml/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 scm-dao-xml - 2.11.0-SNAPSHOT + 2.10.1 scm-dao-xml @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.11.0-SNAPSHOT + 2.10.1 @@ -58,7 +58,7 @@ sonia.scm scm-test - 2.11.0-SNAPSHOT + 2.10.1 test diff --git a/scm-it/pom.xml b/scm-it/pom.xml index acc6971500..ea147e1b15 100644 --- a/scm-it/pom.xml +++ b/scm-it/pom.xml @@ -31,40 +31,40 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-it war - 2.11.0-SNAPSHOT + 2.10.1 scm-it sonia.scm scm-core - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-test - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm.plugins scm-git-plugin - 2.11.0-SNAPSHOT + 2.10.1 test sonia.scm.plugins scm-git-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test @@ -72,14 +72,14 @@ sonia.scm.plugins scm-hg-plugin - 2.11.0-SNAPSHOT + 2.10.1 test sonia.scm.plugins scm-hg-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test @@ -87,14 +87,14 @@ sonia.scm.plugins scm-svn-plugin - 2.11.0-SNAPSHOT + 2.10.1 test sonia.scm.plugins scm-svn-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test diff --git a/scm-packaging/deb/pom.xml b/scm-packaging/deb/pom.xml index 232841d07d..5e8fa5373f 100644 --- a/scm-packaging/deb/pom.xml +++ b/scm-packaging/deb/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 deb deb - 2.11.0-SNAPSHOT + 2.10.1 Packaging for Debian/Ubuntu deb @@ -46,7 +46,7 @@ sonia.scm scm-server - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-packaging/docker/pom.xml b/scm-packaging/docker/pom.xml index adba6c8271..dbc52bdb54 100644 --- a/scm-packaging/docker/pom.xml +++ b/scm-packaging/docker/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 docker pom - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-packaging/helm/pom.xml b/scm-packaging/helm/pom.xml index 6d53125f2d..b70b5f5b8c 100644 --- a/scm-packaging/helm/pom.xml +++ b/scm-packaging/helm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 helm helm - 2.11.0-SNAPSHOT + 2.10.1 3.2.1 diff --git a/scm-packaging/pom.xml b/scm-packaging/pom.xml index 592139e03f..8b981fdfaf 100644 --- a/scm-packaging/pom.xml +++ b/scm-packaging/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm.packaging scm-packaging pom - 2.11.0-SNAPSHOT + 2.10.1 packages.scm-manager.org diff --git a/scm-packaging/release-yaml/pom.xml b/scm-packaging/release-yaml/pom.xml index a8b6dc0a94..077fd8ebed 100644 --- a/scm-packaging/release-yaml/pom.xml +++ b/scm-packaging/release-yaml/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 release-yaml pom - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-packaging/rpm/pom.xml b/scm-packaging/rpm/pom.xml index 072a6effed..d64cc10a17 100644 --- a/scm-packaging/rpm/pom.xml +++ b/scm-packaging/rpm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 rpm rpm - 2.11.0-SNAPSHOT + 2.10.1 Packaging for RedHat/Centos/Fedora rpm @@ -52,7 +52,7 @@ sonia.scm scm-server - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-packaging/unix/pom.xml b/scm-packaging/unix/pom.xml index a7d09c302c..a97745b417 100644 --- a/scm-packaging/unix/pom.xml +++ b/scm-packaging/unix/pom.xml @@ -31,12 +31,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 unix pom - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-packaging/windows/pom.xml b/scm-packaging/windows/pom.xml index 2fb9a1f595..0718df2f2f 100644 --- a/scm-packaging/windows/pom.xml +++ b/scm-packaging/windows/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.11.0-SNAPSHOT + 2.10.1 windows pom - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index 2c61f07a89..72cf33d568 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm.plugins scm-plugins pom - 2.11.0-SNAPSHOT + 2.10.1 scm-plugins @@ -60,7 +60,7 @@ sonia.scm scm-core - 2.11.0-SNAPSHOT + 2.10.1 provided @@ -69,7 +69,7 @@ sonia.scm scm-annotation-processor - 2.11.0-SNAPSHOT + 2.10.1 provided @@ -99,7 +99,7 @@ sonia.scm scm-test - 2.11.0-SNAPSHOT + 2.10.1 test diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 4f4087a3f6..5612d47a27 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-git-plugin", "private": true, - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -20,6 +20,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.1" } } diff --git a/scm-plugins/scm-git-plugin/pom.xml b/scm-plugins/scm-git-plugin/pom.xml index b5c374758d..6cfb4c689e 100644 --- a/scm-plugins/scm-git-plugin/pom.xml +++ b/scm-plugins/scm-git-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.11.0-SNAPSHOT + 2.10.1 scm-git-plugin diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 8aaa4d0b34..57abe11f68 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-hg-plugin", "private": true, - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.1" } } diff --git a/scm-plugins/scm-hg-plugin/pom.xml b/scm-plugins/scm-hg-plugin/pom.xml index 435bc052b3..eddcd2dcae 100644 --- a/scm-plugins/scm-hg-plugin/pom.xml +++ b/scm-plugins/scm-hg-plugin/pom.xml @@ -31,7 +31,7 @@ sonia.scm.plugins scm-plugins - 2.11.0-SNAPSHOT + 2.10.1 scm-hg-plugin diff --git a/scm-plugins/scm-integration-test-plugin/pom.xml b/scm-plugins/scm-integration-test-plugin/pom.xml index 3c54fdefbb..81e68390cd 100644 --- a/scm-plugins/scm-integration-test-plugin/pom.xml +++ b/scm-plugins/scm-integration-test-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.11.0-SNAPSHOT + 2.10.1 scm-integration-test-plugin Add functions for integration tests. This is not intended for production systems. - 2.11.0-SNAPSHOT + 2.10.1 smp diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index 6d7aed0b46..add096f6c5 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-legacy-plugin", "private": true, - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "main": "./src/main/js/index.tsx", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.1" } } diff --git a/scm-plugins/scm-legacy-plugin/pom.xml b/scm-plugins/scm-legacy-plugin/pom.xml index 9b8115c172..c942fd7b69 100644 --- a/scm-plugins/scm-legacy-plugin/pom.xml +++ b/scm-plugins/scm-legacy-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.11.0-SNAPSHOT + 2.10.1 scm-legacy-plugin Support migrated repository urls and v1 passwords - 2.11.0-SNAPSHOT + 2.10.1 smp diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 6533d2242b..25fcdc1cfb 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-svn-plugin", "private": true, - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" + "@scm-manager/ui-plugins": "^2.10.1" } } diff --git a/scm-plugins/scm-svn-plugin/pom.xml b/scm-plugins/scm-svn-plugin/pom.xml index 722755991a..f7b864795d 100644 --- a/scm-plugins/scm-svn-plugin/pom.xml +++ b/scm-plugins/scm-svn-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.11.0-SNAPSHOT + 2.10.1 scm-svn-plugin diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 854d17d347..9c4fb7429c 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-server - 2.11.0-SNAPSHOT + 2.10.1 scm-server jar diff --git a/scm-test/pom.xml b/scm-test/pom.xml index fbfc202396..af77c11b46 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-test - 2.11.0-SNAPSHOT + 2.10.1 scm-test @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.11.0-SNAPSHOT + 2.10.1 diff --git a/scm-ui/babel-preset/package.json b/scm-ui/babel-preset/package.json index 9cfea3931b..b13f0c45e1 100644 --- a/scm-ui/babel-preset/package.json +++ b/scm-ui/babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/babel-preset", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "description": "Babel configuration for scm-manager and its plugins", "main": "index.js", diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index 252d3dfbe7..a2b4215de6 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/e2e-tests", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "End to end Tests for SCM-Manager", "main": "index.js", "author": "Eduard Heimbuch ", diff --git a/scm-ui/eslint-config/package.json b/scm-ui/eslint-config/package.json index ea2bf6c5e9..adb595f1a0 100644 --- a/scm-ui/eslint-config/package.json +++ b/scm-ui/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/eslint-config", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "ESLint configuration for scm-manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/jest-preset/package.json b/scm-ui/jest-preset/package.json index 86528da5f4..52112c9b27 100644 --- a/scm-ui/jest-preset/package.json +++ b/scm-ui/jest-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/jest-preset", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "Jest presets for SCM-Manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index 7ef7daae70..c4416ba2b7 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-ui war - 2.11.0-SNAPSHOT + 2.10.1 scm-ui diff --git a/scm-ui/prettier-config/package.json b/scm-ui/prettier-config/package.json index 6d27467ac8..bc175814a1 100644 --- a/scm-ui/prettier-config/package.json +++ b/scm-ui/prettier-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/prettier-config", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "description": "Prettier configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/tsconfig/package.json b/scm-ui/tsconfig/package.json index bd292addca..946d3e1afd 100644 --- a/scm-ui/tsconfig/package.json +++ b/scm-ui/tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/tsconfig", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "description": "TypeScript configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index 0a8499a875..dc6234d13d 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-components", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "UI Components for SCM-Manager and its plugins", "main": "src/index.ts", "files": [ @@ -18,7 +18,7 @@ "update-storyshots": "jest --testPathPattern=\"storyshots.test.ts\" --collectCoverage=false -u" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.10.1", "@storybook/addon-actions": "^6.0.28", "@storybook/addon-storyshots": "^6.0.28", "@storybook/react": "^6.0.28", @@ -50,8 +50,8 @@ "worker-plugin": "^3.2.0" }, "dependencies": { - "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.10.1", + "@scm-manager/ui-types": "^2.10.1", "classnames": "^2.2.6", "date-fns": "^2.4.1", "gitdiff-parser": "^0.1.2", diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index 4d9647eefe..c01c261368 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-extensions", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "main": "src/index.ts", "license": "MIT", "private": false, diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index 2dfc6f60da..fcbbad238e 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,13 +1,13 @@ { "name": "@scm-manager/ui-plugins", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "license": "MIT", "bin": { "ui-plugins": "./bin/ui-plugins.js" }, "dependencies": { - "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-components": "^2.10.1", + "@scm-manager/ui-extensions": "^2.10.1", "classnames": "^2.2.6", "query-string": "^5.0.1", "react": "^16.10.2", @@ -18,14 +18,14 @@ "styled-components": "^5.1.0" }, "devDependencies": { - "@scm-manager/babel-preset": "^2.11.0-SNAPSHOT", - "@scm-manager/eslint-config": "^2.11.0-SNAPSHOT", - "@scm-manager/jest-preset": "^2.11.0-SNAPSHOT", - "@scm-manager/prettier-config": "^2.11.0-SNAPSHOT", - "@scm-manager/tsconfig": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-scripts": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", + "@scm-manager/babel-preset": "^2.10.1", + "@scm-manager/eslint-config": "^2.10.1", + "@scm-manager/jest-preset": "^2.10.1", + "@scm-manager/prettier-config": "^2.10.1", + "@scm-manager/tsconfig": "^2.10.1", + "@scm-manager/ui-scripts": "^2.10.1", + "@scm-manager/ui-tests": "^2.10.1", + "@scm-manager/ui-types": "^2.10.1", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-ui/ui-polyfill/package.json b/scm-ui/ui-polyfill/package.json index 70b9955dd7..d07a596874 100644 --- a/scm-ui/ui-polyfill/package.json +++ b/scm-ui/ui-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-polyfill", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "Polyfills for SCM-Manager UI", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index 07096ea1d3..12124bdabb 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-scripts", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "Build scripts for SCM-Manager", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index 376aff3c95..d9adbdf366 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-styles", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "Styles for SCM-Manager", "main": "src/scm.scss", "license": "MIT", diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index 639d5872e7..cffd16b012 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-tests", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "UI-Tests helpers", "author": "Sebastian Sdorra ", "license": "MIT", diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index 729d5b8c55..fb443113ff 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-types", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "description": "Flow types for SCM-Manager related Objects", "main": "src/index.ts", "files": [ diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index 67b92ecfd2..bf2c21f330 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -1,10 +1,10 @@ { "name": "@scm-manager/ui-webapp", - "version": "2.11.0-SNAPSHOT", + "version": "2.10.1", "private": true, "dependencies": { - "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", - "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-components": "^2.10.1", + "@scm-manager/ui-extensions": "^2.10.1", "classnames": "^2.2.5", "history": "^4.10.1", "i18next": "^19.6.0", @@ -29,7 +29,7 @@ "test": "jest" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.10.1", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index df5199f6ac..2f519197f4 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-webapp war - 2.11.0-SNAPSHOT + 2.10.1 scm-webapp @@ -48,7 +48,7 @@ sonia.scm scm-annotation-processor - 2.11.0-SNAPSHOT + 2.10.1 provided @@ -73,13 +73,13 @@ sonia.scm scm-core - 2.11.0-SNAPSHOT + 2.10.1 sonia.scm scm-dao-xml - 2.11.0-SNAPSHOT + 2.10.1 @@ -343,7 +343,7 @@ sonia.scm scm-test - 2.11.0-SNAPSHOT + 2.10.1 test @@ -405,7 +405,7 @@ sonia.scm.plugins scm-git-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test @@ -413,14 +413,14 @@ sonia.scm.plugins scm-git-plugin - 2.11.0-SNAPSHOT + 2.10.1 test sonia.scm.plugins scm-hg-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test @@ -428,14 +428,14 @@ sonia.scm.plugins scm-hg-plugin - 2.11.0-SNAPSHOT + 2.10.1 test sonia.scm.plugins scm-svn-plugin - 2.11.0-SNAPSHOT + 2.10.1 tests test @@ -443,7 +443,7 @@ sonia.scm.plugins scm-svn-plugin - 2.11.0-SNAPSHOT + 2.10.1 test @@ -729,7 +729,7 @@ sonia.scm scm-ui - 2.11.0-SNAPSHOT + 2.10.1 war From 4752fdeea19a83b63ebd86acf58d6bae15f31bc8 Mon Sep 17 00:00:00 2001 From: CES Marvin Date: Tue, 24 Nov 2020 18:59:15 +0000 Subject: [PATCH 48/83] prepare for next development iteration --- lerna.json | 2 +- pom.xml | 2 +- scm-annotation-processor/pom.xml | 6 ++--- scm-annotations/pom.xml | 4 +-- scm-core/pom.xml | 8 +++--- scm-dao-xml/pom.xml | 8 +++--- scm-it/pom.xml | 20 +++++++------- scm-packaging/deb/pom.xml | 6 ++--- scm-packaging/docker/pom.xml | 4 +-- scm-packaging/helm/pom.xml | 4 +-- scm-packaging/pom.xml | 4 +-- scm-packaging/release-yaml/pom.xml | 4 +-- scm-packaging/rpm/pom.xml | 6 ++--- scm-packaging/unix/pom.xml | 4 +-- scm-packaging/windows/pom.xml | 4 +-- scm-plugins/pom.xml | 10 +++---- scm-plugins/scm-git-plugin/package.json | 4 +-- scm-plugins/scm-git-plugin/pom.xml | 2 +- scm-plugins/scm-hg-plugin/package.json | 4 +-- scm-plugins/scm-hg-plugin/pom.xml | 2 +- .../scm-integration-test-plugin/pom.xml | 4 +-- scm-plugins/scm-legacy-plugin/package.json | 4 +-- scm-plugins/scm-legacy-plugin/pom.xml | 4 +-- scm-plugins/scm-svn-plugin/package.json | 4 +-- scm-plugins/scm-svn-plugin/pom.xml | 2 +- scm-server/pom.xml | 4 +-- scm-test/pom.xml | 6 ++--- scm-ui/babel-preset/package.json | 2 +- scm-ui/e2e-tests/package.json | 2 +- scm-ui/eslint-config/package.json | 2 +- scm-ui/jest-preset/package.json | 2 +- scm-ui/pom.xml | 4 +-- scm-ui/prettier-config/package.json | 2 +- scm-ui/tsconfig/package.json | 2 +- scm-ui/ui-components/package.json | 8 +++--- scm-ui/ui-extensions/package.json | 2 +- scm-ui/ui-plugins/package.json | 22 ++++++++-------- scm-ui/ui-polyfill/package.json | 2 +- scm-ui/ui-scripts/package.json | 2 +- scm-ui/ui-styles/package.json | 2 +- scm-ui/ui-tests/package.json | 2 +- scm-ui/ui-types/package.json | 2 +- scm-ui/ui-webapp/package.json | 8 +++--- scm-webapp/pom.xml | 26 +++++++++---------- 44 files changed, 114 insertions(+), 114 deletions(-) diff --git a/lerna.json b/lerna.json index c72f7d7317..a4385558c7 100644 --- a/lerna.json +++ b/lerna.json @@ -5,5 +5,5 @@ ], "npmClient": "yarn", "useWorkspaces": true, - "version": "2.10.1" + "version": "2.11.0-SNAPSHOT" } diff --git a/pom.xml b/pom.xml index cb59bcb00e..4568fb06a3 100644 --- a/pom.xml +++ b/pom.xml @@ -32,7 +32,7 @@ sonia.scm scm pom - 2.10.1 + 2.11.0-SNAPSHOT The easiest way to share your Git, Mercurial and Subversion repositories. diff --git a/scm-annotation-processor/pom.xml b/scm-annotation-processor/pom.xml index 2ef1cf316a..87b63417d9 100644 --- a/scm-annotation-processor/pom.xml +++ b/scm-annotation-processor/pom.xml @@ -31,12 +31,12 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-annotation-processor - 2.10.1 + 2.11.0-SNAPSHOT scm-annotation-processor @@ -46,7 +46,7 @@ sonia.scm scm-annotations - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-annotations/pom.xml b/scm-annotations/pom.xml index 2ab175a7a6..f83dac689c 100644 --- a/scm-annotations/pom.xml +++ b/scm-annotations/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT scm-annotations - 2.10.1 + 2.11.0-SNAPSHOT scm-annotations diff --git a/scm-core/pom.xml b/scm-core/pom.xml index aff722ebc4..8346a25fbe 100644 --- a/scm-core/pom.xml +++ b/scm-core/pom.xml @@ -31,11 +31,11 @@ scm sonia.scm - 2.10.1 + 2.11.0-SNAPSHOT scm-core - 2.10.1 + 2.11.0-SNAPSHOT scm-core @@ -54,7 +54,7 @@ sonia.scm scm-annotations - 2.10.1 + 2.11.0-SNAPSHOT @@ -227,7 +227,7 @@ sonia.scm scm-annotation-processor - 2.10.1 + 2.11.0-SNAPSHOT provided diff --git a/scm-dao-xml/pom.xml b/scm-dao-xml/pom.xml index 655c4fc217..e9001f190e 100644 --- a/scm-dao-xml/pom.xml +++ b/scm-dao-xml/pom.xml @@ -31,11 +31,11 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT scm-dao-xml - 2.10.1 + 2.11.0-SNAPSHOT scm-dao-xml @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.1 + 2.11.0-SNAPSHOT @@ -58,7 +58,7 @@ sonia.scm scm-test - 2.10.1 + 2.11.0-SNAPSHOT test diff --git a/scm-it/pom.xml b/scm-it/pom.xml index ea147e1b15..acc6971500 100644 --- a/scm-it/pom.xml +++ b/scm-it/pom.xml @@ -31,40 +31,40 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-it war - 2.10.1 + 2.11.0-SNAPSHOT scm-it sonia.scm scm-core - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-test - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm.plugins scm-git-plugin - 2.10.1 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-git-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test @@ -72,14 +72,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.1 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-hg-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test @@ -87,14 +87,14 @@ sonia.scm.plugins scm-svn-plugin - 2.10.1 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-svn-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test diff --git a/scm-packaging/deb/pom.xml b/scm-packaging/deb/pom.xml index 5e8fa5373f..232841d07d 100644 --- a/scm-packaging/deb/pom.xml +++ b/scm-packaging/deb/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT deb deb - 2.10.1 + 2.11.0-SNAPSHOT Packaging for Debian/Ubuntu deb @@ -46,7 +46,7 @@ sonia.scm scm-server - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/docker/pom.xml b/scm-packaging/docker/pom.xml index dbc52bdb54..adba6c8271 100644 --- a/scm-packaging/docker/pom.xml +++ b/scm-packaging/docker/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT docker pom - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/helm/pom.xml b/scm-packaging/helm/pom.xml index b70b5f5b8c..6d53125f2d 100644 --- a/scm-packaging/helm/pom.xml +++ b/scm-packaging/helm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT helm helm - 2.10.1 + 2.11.0-SNAPSHOT 3.2.1 diff --git a/scm-packaging/pom.xml b/scm-packaging/pom.xml index 8b981fdfaf..592139e03f 100644 --- a/scm-packaging/pom.xml +++ b/scm-packaging/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm.packaging scm-packaging pom - 2.10.1 + 2.11.0-SNAPSHOT packages.scm-manager.org diff --git a/scm-packaging/release-yaml/pom.xml b/scm-packaging/release-yaml/pom.xml index 077fd8ebed..a8b6dc0a94 100644 --- a/scm-packaging/release-yaml/pom.xml +++ b/scm-packaging/release-yaml/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT release-yaml pom - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/rpm/pom.xml b/scm-packaging/rpm/pom.xml index d64cc10a17..072a6effed 100644 --- a/scm-packaging/rpm/pom.xml +++ b/scm-packaging/rpm/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT rpm rpm - 2.10.1 + 2.11.0-SNAPSHOT Packaging for RedHat/Centos/Fedora rpm @@ -52,7 +52,7 @@ sonia.scm scm-server - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/unix/pom.xml b/scm-packaging/unix/pom.xml index a97745b417..a7d09c302c 100644 --- a/scm-packaging/unix/pom.xml +++ b/scm-packaging/unix/pom.xml @@ -31,12 +31,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT unix pom - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-packaging/windows/pom.xml b/scm-packaging/windows/pom.xml index 0718df2f2f..2fb9a1f595 100644 --- a/scm-packaging/windows/pom.xml +++ b/scm-packaging/windows/pom.xml @@ -32,12 +32,12 @@ sonia.scm.packaging scm-packaging - 2.10.1 + 2.11.0-SNAPSHOT windows pom - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-plugins/pom.xml b/scm-plugins/pom.xml index 72cf33d568..2c61f07a89 100644 --- a/scm-plugins/pom.xml +++ b/scm-plugins/pom.xml @@ -31,13 +31,13 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm.plugins scm-plugins pom - 2.10.1 + 2.11.0-SNAPSHOT scm-plugins @@ -60,7 +60,7 @@ sonia.scm scm-core - 2.10.1 + 2.11.0-SNAPSHOT provided @@ -69,7 +69,7 @@ sonia.scm scm-annotation-processor - 2.10.1 + 2.11.0-SNAPSHOT provided @@ -99,7 +99,7 @@ sonia.scm scm-test - 2.10.1 + 2.11.0-SNAPSHOT test diff --git a/scm-plugins/scm-git-plugin/package.json b/scm-plugins/scm-git-plugin/package.json index 5612d47a27..4f4087a3f6 100644 --- a/scm-plugins/scm-git-plugin/package.json +++ b/scm-plugins/scm-git-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-git-plugin", "private": true, - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -20,6 +20,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.1" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-git-plugin/pom.xml b/scm-plugins/scm-git-plugin/pom.xml index 6cfb4c689e..b5c374758d 100644 --- a/scm-plugins/scm-git-plugin/pom.xml +++ b/scm-plugins/scm-git-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.1 + 2.11.0-SNAPSHOT scm-git-plugin diff --git a/scm-plugins/scm-hg-plugin/package.json b/scm-plugins/scm-hg-plugin/package.json index 57abe11f68..8aaa4d0b34 100644 --- a/scm-plugins/scm-hg-plugin/package.json +++ b/scm-plugins/scm-hg-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-hg-plugin", "private": true, - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.1" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-hg-plugin/pom.xml b/scm-plugins/scm-hg-plugin/pom.xml index eddcd2dcae..435bc052b3 100644 --- a/scm-plugins/scm-hg-plugin/pom.xml +++ b/scm-plugins/scm-hg-plugin/pom.xml @@ -31,7 +31,7 @@ sonia.scm.plugins scm-plugins - 2.10.1 + 2.11.0-SNAPSHOT scm-hg-plugin diff --git a/scm-plugins/scm-integration-test-plugin/pom.xml b/scm-plugins/scm-integration-test-plugin/pom.xml index 81e68390cd..3c54fdefbb 100644 --- a/scm-plugins/scm-integration-test-plugin/pom.xml +++ b/scm-plugins/scm-integration-test-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.1 + 2.11.0-SNAPSHOT scm-integration-test-plugin Add functions for integration tests. This is not intended for production systems. - 2.10.1 + 2.11.0-SNAPSHOT smp diff --git a/scm-plugins/scm-legacy-plugin/package.json b/scm-plugins/scm-legacy-plugin/package.json index add096f6c5..6d7aed0b46 100644 --- a/scm-plugins/scm-legacy-plugin/package.json +++ b/scm-plugins/scm-legacy-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-legacy-plugin", "private": true, - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.tsx", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.1" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-legacy-plugin/pom.xml b/scm-plugins/scm-legacy-plugin/pom.xml index c942fd7b69..9b8115c172 100644 --- a/scm-plugins/scm-legacy-plugin/pom.xml +++ b/scm-plugins/scm-legacy-plugin/pom.xml @@ -29,12 +29,12 @@ sonia.scm.plugins scm-plugins - 2.10.1 + 2.11.0-SNAPSHOT scm-legacy-plugin Support migrated repository urls and v1 passwords - 2.10.1 + 2.11.0-SNAPSHOT smp diff --git a/scm-plugins/scm-svn-plugin/package.json b/scm-plugins/scm-svn-plugin/package.json index 25fcdc1cfb..6533d2242b 100644 --- a/scm-plugins/scm-svn-plugin/package.json +++ b/scm-plugins/scm-svn-plugin/package.json @@ -1,7 +1,7 @@ { "name": "@scm-manager/scm-svn-plugin", "private": true, - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "main": "./src/main/js/index.ts", "scripts": { @@ -19,6 +19,6 @@ }, "prettier": "@scm-manager/prettier-config", "dependencies": { - "@scm-manager/ui-plugins": "^2.10.1" + "@scm-manager/ui-plugins": "^2.11.0-SNAPSHOT" } } diff --git a/scm-plugins/scm-svn-plugin/pom.xml b/scm-plugins/scm-svn-plugin/pom.xml index f7b864795d..722755991a 100644 --- a/scm-plugins/scm-svn-plugin/pom.xml +++ b/scm-plugins/scm-svn-plugin/pom.xml @@ -31,7 +31,7 @@ scm-plugins sonia.scm.plugins - 2.10.1 + 2.11.0-SNAPSHOT scm-svn-plugin diff --git a/scm-server/pom.xml b/scm-server/pom.xml index 9c4fb7429c..854d17d347 100644 --- a/scm-server/pom.xml +++ b/scm-server/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-server - 2.10.1 + 2.11.0-SNAPSHOT scm-server jar diff --git a/scm-test/pom.xml b/scm-test/pom.xml index af77c11b46..fbfc202396 100644 --- a/scm-test/pom.xml +++ b/scm-test/pom.xml @@ -31,12 +31,12 @@ scm sonia.scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-test - 2.10.1 + 2.11.0-SNAPSHOT scm-test @@ -50,7 +50,7 @@ sonia.scm scm-core - 2.10.1 + 2.11.0-SNAPSHOT diff --git a/scm-ui/babel-preset/package.json b/scm-ui/babel-preset/package.json index b13f0c45e1..9cfea3931b 100644 --- a/scm-ui/babel-preset/package.json +++ b/scm-ui/babel-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/babel-preset", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "Babel configuration for scm-manager and its plugins", "main": "index.js", diff --git a/scm-ui/e2e-tests/package.json b/scm-ui/e2e-tests/package.json index a2b4215de6..252d3dfbe7 100644 --- a/scm-ui/e2e-tests/package.json +++ b/scm-ui/e2e-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/e2e-tests", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "End to end Tests for SCM-Manager", "main": "index.js", "author": "Eduard Heimbuch ", diff --git a/scm-ui/eslint-config/package.json b/scm-ui/eslint-config/package.json index adb595f1a0..ea2bf6c5e9 100644 --- a/scm-ui/eslint-config/package.json +++ b/scm-ui/eslint-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/eslint-config", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "ESLint configuration for scm-manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/jest-preset/package.json b/scm-ui/jest-preset/package.json index 52112c9b27..86528da5f4 100644 --- a/scm-ui/jest-preset/package.json +++ b/scm-ui/jest-preset/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/jest-preset", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "Jest presets for SCM-Manager and its plugins", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/pom.xml b/scm-ui/pom.xml index c4416ba2b7..7ef7daae70 100644 --- a/scm-ui/pom.xml +++ b/scm-ui/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-ui war - 2.10.1 + 2.11.0-SNAPSHOT scm-ui diff --git a/scm-ui/prettier-config/package.json b/scm-ui/prettier-config/package.json index bc175814a1..6d27467ac8 100644 --- a/scm-ui/prettier-config/package.json +++ b/scm-ui/prettier-config/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/prettier-config", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "Prettier configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/tsconfig/package.json b/scm-ui/tsconfig/package.json index 946d3e1afd..bd292addca 100644 --- a/scm-ui/tsconfig/package.json +++ b/scm-ui/tsconfig/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/tsconfig", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "description": "TypeScript configuration", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-components/package.json b/scm-ui/ui-components/package.json index dc6234d13d..0a8499a875 100644 --- a/scm-ui/ui-components/package.json +++ b/scm-ui/ui-components/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-components", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "UI Components for SCM-Manager and its plugins", "main": "src/index.ts", "files": [ @@ -18,7 +18,7 @@ "update-storyshots": "jest --testPathPattern=\"storyshots.test.ts\" --collectCoverage=false -u" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.1", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", "@storybook/addon-actions": "^6.0.28", "@storybook/addon-storyshots": "^6.0.28", "@storybook/react": "^6.0.28", @@ -50,8 +50,8 @@ "worker-plugin": "^3.2.0" }, "dependencies": { - "@scm-manager/ui-extensions": "^2.10.1", - "@scm-manager/ui-types": "^2.10.1", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", "classnames": "^2.2.6", "date-fns": "^2.4.1", "gitdiff-parser": "^0.1.2", diff --git a/scm-ui/ui-extensions/package.json b/scm-ui/ui-extensions/package.json index c01c261368..4d9647eefe 100644 --- a/scm-ui/ui-extensions/package.json +++ b/scm-ui/ui-extensions/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-extensions", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "main": "src/index.ts", "license": "MIT", "private": false, diff --git a/scm-ui/ui-plugins/package.json b/scm-ui/ui-plugins/package.json index fcbbad238e..2dfc6f60da 100644 --- a/scm-ui/ui-plugins/package.json +++ b/scm-ui/ui-plugins/package.json @@ -1,13 +1,13 @@ { "name": "@scm-manager/ui-plugins", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "license": "MIT", "bin": { "ui-plugins": "./bin/ui-plugins.js" }, "dependencies": { - "@scm-manager/ui-components": "^2.10.1", - "@scm-manager/ui-extensions": "^2.10.1", + "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", "classnames": "^2.2.6", "query-string": "^5.0.1", "react": "^16.10.2", @@ -18,14 +18,14 @@ "styled-components": "^5.1.0" }, "devDependencies": { - "@scm-manager/babel-preset": "^2.10.1", - "@scm-manager/eslint-config": "^2.10.1", - "@scm-manager/jest-preset": "^2.10.1", - "@scm-manager/prettier-config": "^2.10.1", - "@scm-manager/tsconfig": "^2.10.1", - "@scm-manager/ui-scripts": "^2.10.1", - "@scm-manager/ui-tests": "^2.10.1", - "@scm-manager/ui-types": "^2.10.1", + "@scm-manager/babel-preset": "^2.11.0-SNAPSHOT", + "@scm-manager/eslint-config": "^2.11.0-SNAPSHOT", + "@scm-manager/jest-preset": "^2.11.0-SNAPSHOT", + "@scm-manager/prettier-config": "^2.11.0-SNAPSHOT", + "@scm-manager/tsconfig": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-scripts": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-types": "^2.11.0-SNAPSHOT", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-ui/ui-polyfill/package.json b/scm-ui/ui-polyfill/package.json index d07a596874..70b9955dd7 100644 --- a/scm-ui/ui-polyfill/package.json +++ b/scm-ui/ui-polyfill/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-polyfill", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "Polyfills for SCM-Manager UI", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-scripts/package.json b/scm-ui/ui-scripts/package.json index 12124bdabb..07096ea1d3 100644 --- a/scm-ui/ui-scripts/package.json +++ b/scm-ui/ui-scripts/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-scripts", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "Build scripts for SCM-Manager", "main": "src/index.js", "author": "Sebastian Sdorra ", diff --git a/scm-ui/ui-styles/package.json b/scm-ui/ui-styles/package.json index d9adbdf366..376aff3c95 100644 --- a/scm-ui/ui-styles/package.json +++ b/scm-ui/ui-styles/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-styles", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "Styles for SCM-Manager", "main": "src/scm.scss", "license": "MIT", diff --git a/scm-ui/ui-tests/package.json b/scm-ui/ui-tests/package.json index cffd16b012..639d5872e7 100644 --- a/scm-ui/ui-tests/package.json +++ b/scm-ui/ui-tests/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-tests", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "UI-Tests helpers", "author": "Sebastian Sdorra ", "license": "MIT", diff --git a/scm-ui/ui-types/package.json b/scm-ui/ui-types/package.json index fb443113ff..729d5b8c55 100644 --- a/scm-ui/ui-types/package.json +++ b/scm-ui/ui-types/package.json @@ -1,6 +1,6 @@ { "name": "@scm-manager/ui-types", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "description": "Flow types for SCM-Manager related Objects", "main": "src/index.ts", "files": [ diff --git a/scm-ui/ui-webapp/package.json b/scm-ui/ui-webapp/package.json index bf2c21f330..67b92ecfd2 100644 --- a/scm-ui/ui-webapp/package.json +++ b/scm-ui/ui-webapp/package.json @@ -1,10 +1,10 @@ { "name": "@scm-manager/ui-webapp", - "version": "2.10.1", + "version": "2.11.0-SNAPSHOT", "private": true, "dependencies": { - "@scm-manager/ui-components": "^2.10.1", - "@scm-manager/ui-extensions": "^2.10.1", + "@scm-manager/ui-components": "^2.11.0-SNAPSHOT", + "@scm-manager/ui-extensions": "^2.11.0-SNAPSHOT", "classnames": "^2.2.5", "history": "^4.10.1", "i18next": "^19.6.0", @@ -29,7 +29,7 @@ "test": "jest" }, "devDependencies": { - "@scm-manager/ui-tests": "^2.10.1", + "@scm-manager/ui-tests": "^2.11.0-SNAPSHOT", "@types/classnames": "^2.2.9", "@types/enzyme": "^3.10.3", "@types/fetch-mock": "^7.3.1", diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index 2f519197f4..df5199f6ac 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -32,13 +32,13 @@ sonia.scm scm - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-webapp war - 2.10.1 + 2.11.0-SNAPSHOT scm-webapp @@ -48,7 +48,7 @@ sonia.scm scm-annotation-processor - 2.10.1 + 2.11.0-SNAPSHOT provided @@ -73,13 +73,13 @@ sonia.scm scm-core - 2.10.1 + 2.11.0-SNAPSHOT sonia.scm scm-dao-xml - 2.10.1 + 2.11.0-SNAPSHOT @@ -343,7 +343,7 @@ sonia.scm scm-test - 2.10.1 + 2.11.0-SNAPSHOT test @@ -405,7 +405,7 @@ sonia.scm.plugins scm-git-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test @@ -413,14 +413,14 @@ sonia.scm.plugins scm-git-plugin - 2.10.1 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-hg-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test @@ -428,14 +428,14 @@ sonia.scm.plugins scm-hg-plugin - 2.10.1 + 2.11.0-SNAPSHOT test sonia.scm.plugins scm-svn-plugin - 2.10.1 + 2.11.0-SNAPSHOT tests test @@ -443,7 +443,7 @@ sonia.scm.plugins scm-svn-plugin - 2.10.1 + 2.11.0-SNAPSHOT test @@ -729,7 +729,7 @@ sonia.scm scm-ui - 2.10.1 + 2.11.0-SNAPSHOT war From 13906dce2d62bf6bf236ab6036455257d7745b18 Mon Sep 17 00:00:00 2001 From: "dependabot[bot]" <49699333+dependabot[bot]@users.noreply.github.com> Date: Wed, 25 Nov 2020 00:29:15 +0000 Subject: [PATCH 49/83] Bump cron-utils from 8.1.1 to 9.1.3 in /scm-webapp Bumps [cron-utils](https://github.com/jmrozanec/cron-utils) from 8.1.1 to 9.1.3. - [Release notes](https://github.com/jmrozanec/cron-utils/releases) - [Commits](https://github.com/jmrozanec/cron-utils/compare/8.1.1...9.1.3) Signed-off-by: dependabot[bot] --- scm-webapp/pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/scm-webapp/pom.xml b/scm-webapp/pom.xml index df5199f6ac..47817d3192 100644 --- a/scm-webapp/pom.xml +++ b/scm-webapp/pom.xml @@ -295,7 +295,7 @@ com.cronutils cron-utils - 8.1.1 + 9.1.3 From 8e7d0d87afe12436440efc51be0000f03728f5ed Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 14:23:08 +0100 Subject: [PATCH 50/83] Validate 'plugins.json' files from core --- .../sonia/scm/web/i18n/I18nServletTest.java | 27 +++++++++++++++++++ 1 file changed, 27 insertions(+) diff --git a/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java b/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java index 495c233906..1a189926bc 100644 --- a/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java +++ b/scm-webapp/src/test/java/sonia/scm/web/i18n/I18nServletTest.java @@ -48,12 +48,15 @@ import java.io.IOException; import java.io.PrintWriter; import java.net.URL; import java.nio.charset.StandardCharsets; +import java.nio.file.Files; import java.nio.file.Path; +import java.nio.file.Paths; import java.util.Arrays; import java.util.Collections; import java.util.Enumeration; import static org.assertj.core.api.Assertions.assertThat; +import static org.assertj.core.api.Assertions.fail; import static org.mockito.Mockito.*; @ExtendWith(MockitoExtension.class) @@ -239,6 +242,30 @@ class I18nServletTest { assertJson(json); } + @Test + void shouldNotHaveInvalidPluginsJsonFiles() throws IOException { + String path = getClass().getClassLoader().getResource("locales/en/plugins.json").getPath(); + assertThat(path).isNotNull(); + + Path filePath = Paths.get(path); + Path translationRootPath = filePath.getParent().getParent(); + assertThat(translationRootPath).isDirectoryContaining("glob:**/en"); + + Files + .list(translationRootPath) + .filter(Files::isDirectory) + .map(localePath -> localePath.resolve("plugins.json")) + .forEach(this::validatePluginsJson); + } + + private void validatePluginsJson(Path path) { + try { + new ObjectMapper().readTree(path.toFile()); + } catch (IOException e) { + fail("error while parsing translation file " + path, e); + } + } + private void verifyHeaders(HttpServletResponse response) { verify(response).setCharacterEncoding("UTF-8"); verify(response).setContentType("application/json"); From dce761d01701a207eb29a83358da9e07d3d8edf3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Wed, 25 Nov 2020 10:29:42 +0100 Subject: [PATCH 51/83] Add test to validate translation files in ui --- scm-ui/ui-webapp/translationResources.test.js | 56 +++++++++++++++++++ 1 file changed, 56 insertions(+) create mode 100644 scm-ui/ui-webapp/translationResources.test.js diff --git a/scm-ui/ui-webapp/translationResources.test.js b/scm-ui/ui-webapp/translationResources.test.js new file mode 100644 index 0000000000..3e11f7e95f --- /dev/null +++ b/scm-ui/ui-webapp/translationResources.test.js @@ -0,0 +1,56 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +const fs = require("fs"); + +const dirs = fs.readdirSync("public/locales"); + +describe("locales folder", () => { + it("should contain folder en", () => { + expect(dirs).toContain("en"); + }); +}); + +dirs.forEach(languageDirName => { + const languageDir = `public/locales/${languageDirName}`; + const languageDirFiles = fs.readdirSync(languageDir); + languageDirFiles + .filter(fileName => fileName.endsWith(".json")) + .forEach(translationFileName => { + const translationFile = `${languageDir}/${translationFileName}`; + describe(`translation file ${translationFile}`, () => { + it("should contain only valid json", () => { + const jsonContent = fs.readFileSync(translationFile); + let json; + try { + json = JSON.parse(jsonContent); + } catch (ex) { + // eslint-disable-next-line no-undef + fail(new Error(`invalid json: ${ex}`)); + } + expect(json).not.toBe({}); + }); + }); + }); +}); From 6adba1bad21fd379737210e06c5ca2c3d9512b10 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 13:30:27 +0100 Subject: [PATCH 52/83] Add lastCommitDate to branch --- .../java/sonia/scm/repository/Branch.java | 128 +++++++++--------- 1 file changed, 65 insertions(+), 63 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index bdcbc66a82..b1e8313202 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -24,8 +24,6 @@ package sonia.scm.repository; -//~--- non-JDK imports -------------------------------------------------------- - import com.google.common.base.MoreObjects; import com.google.common.base.Objects; import sonia.scm.Validateable; @@ -34,10 +32,9 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; +import java.util.Optional; import java.util.regex.Pattern; -//~--- JDK imports ------------------------------------------------------------ - /** * Represents a branch in a repository. * @@ -46,73 +43,94 @@ import java.util.regex.Pattern; */ @XmlRootElement(name = "branch") @XmlAccessorType(XmlAccessType.FIELD) -public final class Branch implements Serializable, Validateable -{ +public final class Branch implements Serializable, Validateable { private static final String VALID_CHARACTERS_AT_START_AND_END = "\\w-,;\\]{}@&+=$#`|<>"; private static final String VALID_CHARACTERS = VALID_CHARACTERS_AT_START_AND_END + "/."; public static final String VALID_BRANCH_NAMES = "[" + VALID_CHARACTERS_AT_START_AND_END + "]([" + VALID_CHARACTERS + "]*[" + VALID_CHARACTERS_AT_START_AND_END + "])?"; public static final Pattern VALID_BRANCH_NAME_PATTERN = Pattern.compile(VALID_BRANCH_NAMES); - /** Field description */ private static final long serialVersionUID = -4602244691711222413L; - //~--- constructors --------------------------------------------------------- + private String name; + + private String revision; + + private boolean defaultBranch; + + private Long lastCommitDate; /** * Constructs a new instance of branch. * This constructor should only be called from JAXB. - * */ Branch() {} /** * Constructs a new branch. * + * @param name name of the branch + * @param revision latest revision of the branch + * @param defaultBranch Whether this branch is the default branch for the repository + * + * @deprecated Use {@link Branch#Branch(String, String, boolean, Long)} instead. + */ + @Deprecated + Branch(String name, String revision, boolean defaultBranch) { + this(name, revision, defaultBranch, null); + } + + /** + * Constructs a new branch. * * @param name name of the branch * @param revision latest revision of the branch + * @param defaultBranch Whether this branch is the default branch for the repository + * @param lastCommitDate The date of the commit this branch points to (if computed). May be null */ - Branch(String name, String revision, boolean defaultBranch) - { + Branch(String name, String revision, boolean defaultBranch, Long lastCommitDate) { this.name = name; this.revision = revision; this.defaultBranch = defaultBranch; + this.lastCommitDate = lastCommitDate; } + /** + * @deprecated Use {@link #normalBranch(String, String, Long)} instead to set the date of the last commit, too. + */ + @Deprecated public static Branch normalBranch(String name, String revision) { - return new Branch(name, revision, false); + return normalBranch(name, revision, null); } + public static Branch normalBranch(String name, String revision, Long lastCommitDate) { + return new Branch(name, revision, false, lastCommitDate); + } + + /** + * @deprecated Use {@link #defaultBranch(String, String, Long)} instead to set the date of the last commit, too. + */ + @Deprecated public static Branch defaultBranch(String name, String revision) { - return new Branch(name, revision, true); + return defaultBranch(name, revision, null); } - //~--- methods -------------------------------------------------------------- + public static Branch defaultBranch(String name, String revision, Long lastCommitDate) { + return new Branch(name, revision, true, lastCommitDate); + } @Override public boolean isValid() { return VALID_BRANCH_NAME_PATTERN.matcher(name).matches(); } - /** - * {@inheritDoc} - * - * - * @param obj - * - * @return - */ @Override - public boolean equals(Object obj) - { - if (obj == null) - { + public boolean equals(Object obj) { + if (obj == null) { return false; } - if (getClass() != obj.getClass()) - { + if (getClass() != obj.getClass()) { return false; } @@ -120,48 +138,31 @@ public final class Branch implements Serializable, Validateable return Objects.equal(name, other.name) && Objects.equal(revision, other.revision) - && Objects.equal(defaultBranch, other.defaultBranch); + && Objects.equal(defaultBranch, other.defaultBranch) + && Objects.equal(lastCommitDate, other.lastCommitDate); } - /** - * {@inheritDoc} - * - * - * @return - */ @Override - public int hashCode() - { + public int hashCode() { return Objects.hashCode(name, revision); } - /** - * {@inheritDoc} - * - * - * @return - */ @Override - public String toString() - { - //J- + public String toString() { return MoreObjects.toStringHelper(this) .add("name", name) .add("revision", revision) + .add("defaultBranch", defaultBranch) + .add("lastCommitDate", lastCommitDate) .toString(); - //J+ } - //~--- get methods ---------------------------------------------------------- - /** * Returns the name of the branch * - * * @return name of the branch */ - public String getName() - { + public String getName() { return name; } @@ -170,22 +171,23 @@ public final class Branch implements Serializable, Validateable * * @return latest revision of branch */ - public String getRevision() - { + public String getRevision() { return revision; } + /** + * Flag whether this branch is configured as the default branch. + */ public boolean isDefaultBranch() { return defaultBranch; } - //~--- fields --------------------------------------------------------------- - - /** name of the branch */ - private String name; - - /** Field description */ - private String revision; - - private boolean defaultBranch; + /** + * The date of the commit this branch points to, if this was computed (can be empty). + * + * @since 2.11.0 + */ + public Optional getLastCommitDate() { + return Optional.ofNullable(lastCommitDate); + } } From 181806f84bf250c48a052166ae9bc1134133de5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 15:10:54 +0100 Subject: [PATCH 53/83] Read last commit date for git branches --- .../repository/spi/GitBranchesCommand.java | 36 +++--- .../spi/GitBranchesCommandTest.java | 107 ++---------------- 2 files changed, 29 insertions(+), 114 deletions(-) diff --git a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java index d026affd8b..683e5d0068 100644 --- a/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java +++ b/scm-plugins/scm-git-plugin/src/main/java/sonia/scm/repository/spi/GitBranchesCommand.java @@ -24,14 +24,14 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - import com.google.common.annotations.VisibleForTesting; import com.google.common.base.Strings; import org.checkerframework.checker.nullness.qual.Nullable; import org.eclipse.jgit.api.Git; import org.eclipse.jgit.api.errors.GitAPIException; import org.eclipse.jgit.lib.Ref; +import org.eclipse.jgit.lib.Repository; +import org.eclipse.jgit.revwalk.RevWalk; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import sonia.scm.repository.Branch; @@ -44,12 +44,9 @@ import java.util.List; import java.util.Optional; import java.util.stream.Collectors; -//~--- JDK imports ------------------------------------------------------------ +import static sonia.scm.repository.GitUtil.getCommit; +import static sonia.scm.repository.GitUtil.getCommitTime; -/** - * - * @author Sebastian Sdorra - */ public class GitBranchesCommand extends AbstractGitCommand implements BranchesCommand { private static final Logger LOG = LoggerFactory.getLogger(GitBranchesCommand.class); @@ -60,23 +57,22 @@ public class GitBranchesCommand extends AbstractGitCommand implements BranchesCo super(context); } - //~--- get methods ---------------------------------------------------------- - @Override public List getBranches() throws IOException { Git git = createGit(); String defaultBranchName = determineDefaultBranchName(git); - try { + Repository repository = git.getRepository(); + try (RevWalk refWalk = new RevWalk(repository)) { return git .branchList() .call() .stream() - .map(ref -> createBranchObject(defaultBranchName, ref)) + .map(ref -> createBranchObject(repository, refWalk, defaultBranchName, ref)) .collect(Collectors.toList()); } catch (GitAPIException ex) { - throw new InternalRepositoryException(repository, "could not read branches", ex); + throw new InternalRepositoryException(this.repository, "could not read branches", ex); } } @@ -86,21 +82,31 @@ public class GitBranchesCommand extends AbstractGitCommand implements BranchesCo } @Nullable - private Branch createBranchObject(String defaultBranchName, Ref ref) { + private Branch createBranchObject(Repository repository, RevWalk refWalk, String defaultBranchName, Ref ref) { String branchName = GitUtil.getBranch(ref); if (branchName == null) { LOG.warn("could not determine branch name for branch name {} at revision {}", ref.getName(), ref.getObjectId()); return null; } else { + Long lastCommitDate = getCommitDate(repository, refWalk, branchName, ref); if (branchName.equals(defaultBranchName)) { - return Branch.defaultBranch(branchName, GitUtil.getId(ref.getObjectId())); + return Branch.defaultBranch(branchName, GitUtil.getId(ref.getObjectId()), lastCommitDate); } else { - return Branch.normalBranch(branchName, GitUtil.getId(ref.getObjectId())); + return Branch.normalBranch(branchName, GitUtil.getId(ref.getObjectId()), lastCommitDate); } } } + private Long getCommitDate(Repository repository, RevWalk refWalk, String branchName, Ref ref) { + try { + return getCommitTime(getCommit(repository, refWalk, ref)); + } catch (IOException e) { + LOG.info("failed to read commit date of branch {} with revision {}", branchName, ref.getName()); + return null; + } + } + private String determineDefaultBranchName(Git git) { String defaultBranchName = context.getConfig().getDefaultBranch(); if (Strings.isNullOrEmpty(defaultBranchName)) { diff --git a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java index 967226012a..fddf386d92 100644 --- a/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java +++ b/scm-plugins/scm-git-plugin/src/test/java/sonia/scm/repository/spi/GitBranchesCommandTest.java @@ -24,117 +24,26 @@ package sonia.scm.repository.spi; -import org.eclipse.jgit.api.Git; -import org.eclipse.jgit.api.ListBranchCommand; -import org.eclipse.jgit.api.errors.GitAPIException; -import org.eclipse.jgit.lib.ObjectId; -import org.eclipse.jgit.lib.Ref; -import org.junit.jupiter.api.BeforeEach; -import org.junit.jupiter.api.Test; -import org.junit.jupiter.api.extension.ExtendWith; -import org.mockito.Mock; -import org.mockito.junit.jupiter.MockitoExtension; +import org.junit.Test; import sonia.scm.repository.Branch; -import sonia.scm.repository.GitRepositoryConfig; import java.io.IOException; import java.util.List; -import java.util.Optional; -import static java.util.Arrays.asList; -import static java.util.Collections.emptyList; -import static java.util.Optional.of; import static org.assertj.core.api.Assertions.assertThat; -import static org.mockito.Mockito.lenient; -import static org.mockito.Mockito.mock; -import static org.mockito.Mockito.when; -@ExtendWith(MockitoExtension.class) -class GitBranchesCommandTest { - - @Mock - GitContext context; - @Mock - Git git; - @Mock - ListBranchCommand listBranchCommand; - @Mock - GitRepositoryConfig gitRepositoryConfig; - - GitBranchesCommand branchesCommand; - private Ref master; - - @BeforeEach - void initContext() { - when(context.getConfig()).thenReturn(gitRepositoryConfig); - } - - @BeforeEach - void initCommand() { - master = createRef("master", "0000"); - branchesCommand = new GitBranchesCommand(context) { - @Override - Git createGit() { - return git; - } - - @Override - Optional getRepositoryHeadRef(Git git) { - return of(master); - } - }; - when(git.branchList()).thenReturn(listBranchCommand); - } +public class GitBranchesCommandTest extends AbstractGitCommandTestBase { @Test - void shouldCreateEmptyListWithoutBranches() throws IOException, GitAPIException { - when(listBranchCommand.call()).thenReturn(emptyList()); + public void shouldReadBranches() throws IOException { + GitBranchesCommand branchesCommand = new GitBranchesCommand(createContext()); List branches = branchesCommand.getBranches(); - assertThat(branches).isEmpty(); - } - - @Test - void shouldMapNormalBranch() throws IOException, GitAPIException { - Ref branch = createRef("branch", "1337"); - when(listBranchCommand.call()).thenReturn(asList(branch)); - - List branches = branchesCommand.getBranches(); - - assertThat(branches).containsExactly(Branch.normalBranch("branch", "1337")); - } - - @Test - void shouldMarkMasterBranchWithMasterFromConfig() throws IOException, GitAPIException { - Ref branch = createRef("branch", "1337"); - when(listBranchCommand.call()).thenReturn(asList(branch)); - when(gitRepositoryConfig.getDefaultBranch()).thenReturn("branch"); - - List branches = branchesCommand.getBranches(); - - assertThat(branches).containsExactlyInAnyOrder(Branch.defaultBranch("branch", "1337")); - } - - @Test - void shouldMarkMasterBranchWithMasterFromHead() throws IOException, GitAPIException { - Ref branch = createRef("branch", "1337"); - when(listBranchCommand.call()).thenReturn(asList(branch, master)); - - List branches = branchesCommand.getBranches(); - - assertThat(branches).containsExactlyInAnyOrder( - Branch.normalBranch("branch", "1337"), - Branch.defaultBranch("master", "0000") + assertThat(branches).contains( + Branch.defaultBranch("master", "fcd0ef1831e4002ac43ea539f4094334c79ea9ec", 1339428655000L), + Branch.normalBranch("mergeable", "91b99de908fcd04772798a31c308a64aea1a5523", 1541586052000L), + Branch.normalBranch("rename", "383b954b27e052db6880d57f1c860dc208795247", 1589203061000L) ); } - - private Ref createRef(String branchName, String revision) { - Ref ref = mock(Ref.class); - lenient().when(ref.getName()).thenReturn("refs/heads/" + branchName); - ObjectId objectId = mock(ObjectId.class); - lenient().when(objectId.name()).thenReturn(revision); - lenient().when(ref.getObjectId()).thenReturn(objectId); - return ref; - } } From f0f7ddc444cf5ebb472e4b95fc01e800d48acbc1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 15:18:29 +0100 Subject: [PATCH 54/83] Add test for hg branches command --- .../repository/spi/HgBranchesCommandTest.java | 49 +++++++++++++++++++ 1 file changed, 49 insertions(+) create mode 100644 scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java new file mode 100644 index 0000000000..cbd6e79d18 --- /dev/null +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java @@ -0,0 +1,49 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import org.junit.Test; +import sonia.scm.repository.Branch; + +import java.util.List; + +import static org.assertj.core.api.Assertions.assertThat; +import static sonia.scm.repository.Branch.defaultBranch; +import static sonia.scm.repository.Branch.normalBranch; + +public class HgBranchesCommandTest extends AbstractHgCommandTestBase { + + @Test + public void shouldReadBranches() { + HgBranchesCommand command = new HgBranchesCommand(cmdContext); + + List branches = command.getBranches(); + + assertThat(branches).contains( + defaultBranch("default", "2baab8e80280ef05a9aa76c49c76feca2872afb7"), + normalBranch("test-branch", "79b6baf49711ae675568e0698d730b97ef13e84a") + ); + } +} From 4d4f89dc7e0bdfd01d304baa9e0b8cb8dec69f9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 15:21:59 +0100 Subject: [PATCH 55/83] Read last commit date for hg branches --- .../java/sonia/scm/repository/spi/HgBranchesCommand.java | 5 +++-- .../java/sonia/scm/repository/spi/HgBranchesCommandTest.java | 4 ++-- 2 files changed, 5 insertions(+), 4 deletions(-) diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java index 22cccbc8ae..1bb9772b98 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java @@ -79,10 +79,11 @@ public class HgBranchesCommand extends AbstractCommand node = changeset.getNode(); } + long lastCommitDate = changeset.getTimestamp().getDate().getTime(); if (DEFAULT_BRANCH_NAME.equals(hgBranch.getName())) { - return Branch.defaultBranch(hgBranch.getName(), node); + return Branch.defaultBranch(hgBranch.getName(), node, lastCommitDate); } else { - return Branch.normalBranch(hgBranch.getName(), node); + return Branch.normalBranch(hgBranch.getName(), node, lastCommitDate); } } }); diff --git a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java index cbd6e79d18..a8f43eb435 100644 --- a/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java +++ b/scm-plugins/scm-hg-plugin/src/test/java/sonia/scm/repository/spi/HgBranchesCommandTest.java @@ -42,8 +42,8 @@ public class HgBranchesCommandTest extends AbstractHgCommandTestBase { List branches = command.getBranches(); assertThat(branches).contains( - defaultBranch("default", "2baab8e80280ef05a9aa76c49c76feca2872afb7"), - normalBranch("test-branch", "79b6baf49711ae675568e0698d730b97ef13e84a") + defaultBranch("default", "2baab8e80280ef05a9aa76c49c76feca2872afb7", 1339586381000L), + normalBranch("test-branch", "79b6baf49711ae675568e0698d730b97ef13e84a", 1339586299000L) ); } } From 541933a03ac751f5e39a1cc357c6595073881e36 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 15:40:30 +0100 Subject: [PATCH 56/83] Show last commit of branch in ui --- scm-ui/ui-types/src/Branches.ts | 1 + scm-ui/ui-webapp/public/locales/de/repos.json | 3 +- scm-ui/ui-webapp/public/locales/en/repos.json | 3 +- .../branches/components/BranchDetail.tsx | 30 +++++++++++++++++-- .../repos/branches/components/BranchRow.tsx | 11 ++++++- .../sonia/scm/api/v2/resources/BranchDto.java | 10 +++++-- .../v2/resources/BranchToBranchDtoMapper.java | 9 +++++- 7 files changed, 58 insertions(+), 9 deletions(-) diff --git a/scm-ui/ui-types/src/Branches.ts b/scm-ui/ui-types/src/Branches.ts index 87eb5af3dc..de19f5fd16 100644 --- a/scm-ui/ui-types/src/Branches.ts +++ b/scm-ui/ui-types/src/Branches.ts @@ -28,6 +28,7 @@ export type Branch = { name: string; revision: string; defaultBranch?: boolean; + lastCommitDate?: string; _links: Links; }; diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index 6f658daeda..1315d6e1bd 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -64,7 +64,8 @@ "createButton": "Branch erstellen" }, "table": { - "branches": "Branches" + "branches": "Branches", + "lastCommit": "Letzter Commit" }, "create": { "title": "Branch erstellen", diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index c126c3c7a1..cb384e0dd3 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -64,7 +64,8 @@ "createButton": "Create Branch" }, "table": { - "branches": "Branches" + "branches": "Branches", + "lastCommit": "Last commit" }, "create": { "title": "Create Branch", diff --git a/scm-ui/ui-webapp/src/repos/branches/components/BranchDetail.tsx b/scm-ui/ui-webapp/src/repos/branches/components/BranchDetail.tsx index 42bfd781b1..224187401f 100644 --- a/scm-ui/ui-webapp/src/repos/branches/components/BranchDetail.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/components/BranchDetail.tsx @@ -26,21 +26,45 @@ import { Branch, Repository } from "@scm-manager/ui-types"; import { WithTranslation, withTranslation } from "react-i18next"; import BranchButtonGroup from "./BranchButtonGroup"; import DefaultBranchTag from "./DefaultBranchTag"; +import { DateFromNow } from "@scm-manager/ui-components"; +import styled from "styled-components"; type Props = WithTranslation & { repository: Repository; branch: Branch; }; +const FlexRow = styled.div` + display: flex; + align-items: center; + flex-wrap: wrap; +`; + +const Created = styled.div` + margin-left: 0.5rem; + font-size: 0.8rem; +`; + +const Label = styled.strong` + margin-right: 0.3rem; +`; + +const Date = styled(DateFromNow)` + font-size: 0.8rem; +`; + class BranchDetail extends React.Component { render() { const { repository, branch, t } = this.props; return (
-
- {t("branch.name")} {branch.name} -
+ + {branch.name} + + {t("tags.overview.created")} + +
diff --git a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx index 1acaa78159..b6dcd2e51e 100644 --- a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx @@ -25,8 +25,9 @@ import React, { FC } from "react"; import { Link as ReactLink } from "react-router-dom"; import { Branch, Link } from "@scm-manager/ui-types"; import DefaultBranchTag from "./DefaultBranchTag"; -import { Icon } from "@scm-manager/ui-components"; +import { DateFromNow, Icon } from "@scm-manager/ui-components"; import { useTranslation } from "react-i18next"; +import styled from "styled-components"; type Props = { baseUrl: string; @@ -34,6 +35,11 @@ type Props = { onDelete: (branch: Branch) => void; }; +const Created = styled.span` + margin-left: 1rem; + font-size: 0.8rem; +`; + const BranchRow: FC = ({ baseUrl, branch, onDelete }) => { const to = `${baseUrl}/${encodeURIComponent(branch.name)}/info`; const [t] = useTranslation("repos"); @@ -56,6 +62,9 @@ const BranchRow: FC = ({ baseUrl, branch, onDelete }) => { {branch.name} + + {t("branches.table.lastCommit")} + {deleteButton} diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java index 4825291c1b..5f75fa5cd2 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java @@ -24,6 +24,7 @@ package sonia.scm.api.v2.resources; +import com.fasterxml.jackson.annotation.JsonInclude; import de.otto.edison.hal.Embedded; import de.otto.edison.hal.HalRepresentation; import de.otto.edison.hal.Links; @@ -31,11 +32,14 @@ import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; import org.hibernate.validator.constraints.Length; +import sonia.scm.repository.Branch; import javax.validation.constraints.NotEmpty; import javax.validation.constraints.Pattern; -import static sonia.scm.repository.Branch.VALID_BRANCH_NAMES; +import java.time.Instant; + +import static com.fasterxml.jackson.annotation.JsonInclude.Include.NON_NULL; @Getter @Setter @@ -45,10 +49,12 @@ public class BranchDto extends HalRepresentation { @NotEmpty @Length(min = 1, max = 100) - @Pattern(regexp = VALID_BRANCH_NAMES) + @Pattern(regexp = Branch.VALID_BRANCH_NAMES) private String name; private String revision; private boolean defaultBranch; + @JsonInclude(NON_NULL) + private Instant lastCommitDate; BranchDto(Links links, Embedded embedded) { super(links, embedded); diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java index f82c434b3d..f3860f5708 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchToBranchDtoMapper.java @@ -38,11 +38,14 @@ import sonia.scm.web.EdisonHalAppender; import javax.inject.Inject; +import java.time.Instant; +import java.util.Optional; + import static de.otto.edison.hal.Link.linkBuilder; import static de.otto.edison.hal.Links.linkingTo; @Mapper -public abstract class BranchToBranchDtoMapper extends HalAppenderMapper { +public abstract class BranchToBranchDtoMapper extends HalAppenderMapper implements InstantAttributeMapper { @Inject private ResourceLinks resourceLinks; @@ -68,4 +71,8 @@ public abstract class BranchToBranchDtoMapper extends HalAppenderMapper { return new BranchDto(linksBuilder.build(), embeddedBuilder.build()); } + + Instant mapOptionalTime(Optional date) { + return date.map(this::mapTime).orElse(null); + } } From 9d25a9355862140c5569e35f5a38ca74b395e0b7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 16:40:26 +0100 Subject: [PATCH 57/83] Distinct between active and stale branches --- .../java/sonia/scm/repository/Branch.java | 13 ++++ .../java/sonia/scm/repository/BranchTest.java | 62 +++++++++++++++++++ .../src/BranchSelector.stories.tsx | 8 +-- scm-ui/ui-types/src/Branches.ts | 1 + scm-ui/ui-webapp/public/locales/de/repos.json | 5 +- scm-ui/ui-webapp/public/locales/en/repos.json | 5 +- .../repos/branches/components/BranchTable.tsx | 5 +- .../branches/containers/BranchesOverview.tsx | 23 ++++++- .../sonia/scm/api/v2/resources/BranchDto.java | 1 + 9 files changed, 113 insertions(+), 10 deletions(-) create mode 100644 scm-core/src/test/java/sonia/scm/repository/BranchTest.java diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index b1e8313202..b37648513e 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -32,9 +32,13 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; +import java.time.Duration; +import java.time.Instant; import java.util.Optional; import java.util.regex.Pattern; +import static java.time.Instant.now; + /** * Represents a branch in a repository. * @@ -190,4 +194,13 @@ public final class Branch implements Serializable, Validateable { public Optional getLastCommitDate() { return Optional.ofNullable(lastCommitDate); } + + public boolean isStale() { + return getLastCommitDate() + .map(Instant::ofEpochMilli) + .map(d -> Duration.between(d, now())) + .map(d -> d.toDays()) + .map(d -> d >= 14) + .orElse(false); + } } diff --git a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java new file mode 100644 index 0000000000..dcb3ae63a7 --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java @@ -0,0 +1,62 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository; + +import org.junit.jupiter.api.Test; + +import java.time.temporal.ChronoUnit; + +import static java.time.Instant.now; +import static org.assertj.core.api.Assertions.assertThat; +import static sonia.scm.repository.Branch.normalBranch; + +class BranchTest { + + @Test + void shouldTagOldBranchAsStale() { + long moreThanTwoWeeksAgo = + now() + .minus(14, ChronoUnit.DAYS) + .minus(1, ChronoUnit.MINUTES) + .toEpochMilli(); + + Branch branch = normalBranch("hog", "42", moreThanTwoWeeksAgo); + + assertThat(branch.isStale()).isTrue(); + } + + @Test + void shouldNotTagNotSoOldBranchAsStale() { + long moreThanTwoWeeksAgo = + now() + .minus(14, ChronoUnit.DAYS) + .plus(1, ChronoUnit.MINUTES) + .toEpochMilli(); + + Branch branch = normalBranch("hog", "42", moreThanTwoWeeksAgo); + + assertThat(branch.isStale()).isFalse(); + } +} diff --git a/scm-ui/ui-components/src/BranchSelector.stories.tsx b/scm-ui/ui-components/src/BranchSelector.stories.tsx index 5abc1a2202..8f59b379f0 100644 --- a/scm-ui/ui-components/src/BranchSelector.stories.tsx +++ b/scm-ui/ui-components/src/BranchSelector.stories.tsx @@ -24,14 +24,14 @@ import { storiesOf } from "@storybook/react"; import { BranchSelector } from "./index"; -import { Branch } from "@scm-manager/ui-types/src"; +import { Branch } from "@scm-manager/ui-types"; import * as React from "react"; import styled from "styled-components"; const master = { name: "master", revision: "1", defaultBranch: true, _links: {} }; const develop = { name: "develop", revision: "2", defaultBranch: false, _links: {} }; -const branchSelected = (branch?: Branch) => {}; +const branchSelected = (branch?: Branch) => null; const branches = [master, develop]; @@ -42,6 +42,4 @@ const Wrapper = styled.div` storiesOf("BranchSelector", module) .addDecorator(storyFn => {storyFn()}) - .add("Default", () => ( - -)); + .add("Default", () => ); diff --git a/scm-ui/ui-types/src/Branches.ts b/scm-ui/ui-types/src/Branches.ts index de19f5fd16..949f7b40bc 100644 --- a/scm-ui/ui-types/src/Branches.ts +++ b/scm-ui/ui-types/src/Branches.ts @@ -29,6 +29,7 @@ export type Branch = { revision: string; defaultBranch?: boolean; lastCommitDate?: string; + stale?: boolean; _links: Links; }; diff --git a/scm-ui/ui-webapp/public/locales/de/repos.json b/scm-ui/ui-webapp/public/locales/de/repos.json index 1315d6e1bd..6433fb348a 100644 --- a/scm-ui/ui-webapp/public/locales/de/repos.json +++ b/scm-ui/ui-webapp/public/locales/de/repos.json @@ -64,7 +64,10 @@ "createButton": "Branch erstellen" }, "table": { - "branches": "Branches", + "branches": { + "active": "Aktive Branches", + "stale": "Alte Branches" + }, "lastCommit": "Letzter Commit" }, "create": { diff --git a/scm-ui/ui-webapp/public/locales/en/repos.json b/scm-ui/ui-webapp/public/locales/en/repos.json index cb384e0dd3..cc4996b937 100644 --- a/scm-ui/ui-webapp/public/locales/en/repos.json +++ b/scm-ui/ui-webapp/public/locales/en/repos.json @@ -64,7 +64,10 @@ "createButton": "Create Branch" }, "table": { - "branches": "Branches", + "branches": { + "active": "Active Branches", + "stale": "Stale Branches" + }, "lastCommit": "Last commit" }, "create": { diff --git a/scm-ui/ui-webapp/src/repos/branches/components/BranchTable.tsx b/scm-ui/ui-webapp/src/repos/branches/components/BranchTable.tsx index 312275b663..f78fc5a447 100644 --- a/scm-ui/ui-webapp/src/repos/branches/components/BranchTable.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/components/BranchTable.tsx @@ -30,10 +30,11 @@ import { apiClient, ConfirmAlert, ErrorNotification } from "@scm-manager/ui-comp type Props = { baseUrl: string; branches: Branch[]; + type: string; fetchBranches: () => void; }; -const BranchTable: FC = ({ baseUrl, branches, fetchBranches }) => { +const BranchTable: FC = ({ baseUrl, branches, type, fetchBranches }) => { const [t] = useTranslation("repos"); const [showConfirmAlert, setShowConfirmAlert] = useState(false); const [error, setError] = useState(); @@ -92,7 +93,7 @@ const BranchTable: FC = ({ baseUrl, branches, fetchBranches }) => { - + {renderRow()} diff --git a/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx b/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx index 8bbcac53bf..37ff8cf327 100644 --- a/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/containers/BranchesOverview.tsx @@ -84,7 +84,28 @@ class BranchesOverview extends React.Component { const { baseUrl, branches, repository, fetchBranches, t } = this.props; if (branches && branches.length > 0) { orderBranches(branches); - return fetchBranches(repository)} />; + const staleBranches = branches.filter(b => b.stale); + const activeBranches = branches.filter(b => !b.stale); + return ( + <> + {activeBranches.length > 0 && ( + fetchBranches(repository)} + /> + )} + {staleBranches.length > 0 && ( + fetchBranches(repository)} + /> + )} + + ); } return {t("branches.overview.noBranches")}; } diff --git a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java index 5f75fa5cd2..eb7351983a 100644 --- a/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java +++ b/scm-webapp/src/main/java/sonia/scm/api/v2/resources/BranchDto.java @@ -55,6 +55,7 @@ public class BranchDto extends HalRepresentation { private boolean defaultBranch; @JsonInclude(NON_NULL) private Instant lastCommitDate; + private boolean stale; BranchDto(Links links, Embedded embedded) { super(links, embedded); From a2341f3ce2e98f221dc60f0c200ca34d260c2a64 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 16:55:40 +0100 Subject: [PATCH 58/83] Do not mark default branch as stale --- .../main/java/sonia/scm/repository/Branch.java | 3 ++- .../java/sonia/scm/repository/BranchTest.java | 18 ++++++++++++++++-- 2 files changed, 18 insertions(+), 3 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index b37648513e..d0213a00c2 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -196,7 +196,8 @@ public final class Branch implements Serializable, Validateable { } public boolean isStale() { - return getLastCommitDate() + return !isDefaultBranch() + && getLastCommitDate() .map(Instant::ofEpochMilli) .map(d -> Duration.between(d, now())) .map(d -> d.toDays()) diff --git a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java index dcb3ae63a7..113a687c9e 100644 --- a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java @@ -30,6 +30,7 @@ import java.time.temporal.ChronoUnit; import static java.time.Instant.now; import static org.assertj.core.api.Assertions.assertThat; +import static sonia.scm.repository.Branch.defaultBranch; import static sonia.scm.repository.Branch.normalBranch; class BranchTest { @@ -49,13 +50,26 @@ class BranchTest { @Test void shouldNotTagNotSoOldBranchAsStale() { - long moreThanTwoWeeksAgo = + long notYetTwoWeeksAgo = now() .minus(14, ChronoUnit.DAYS) .plus(1, ChronoUnit.MINUTES) .toEpochMilli(); - Branch branch = normalBranch("hog", "42", moreThanTwoWeeksAgo); + Branch branch = normalBranch("hog", "42", notYetTwoWeeksAgo); + + assertThat(branch.isStale()).isFalse(); + } + + @Test + void shouldNotTagDefaultBranchAsStale() { + long moreThanTwoWeeksAgo = + now() + .minus(14, ChronoUnit.DAYS) + .minus(1, ChronoUnit.MINUTES) + .toEpochMilli(); + + Branch branch = defaultBranch("hog", "42", moreThanTwoWeeksAgo); assertThat(branch.isStale()).isFalse(); } From 0988ec5c7b38f90edb585bf5ea3e85df594b7faf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 17:46:28 +0100 Subject: [PATCH 59/83] Compute stale flag depending on default branch A branch should be considered as stale, when it's commit wai more than 30 days older than the commit of the default branch. --- .../java/sonia/scm/repository/Branch.java | 25 ++++--- .../api/BranchesCommandBuilder.java | 4 +- .../scm/repository/spi/BranchesCommand.java | 11 ++- .../java/sonia/scm/repository/BranchTest.java | 31 +++++--- .../repository/spi/BranchesCommandTest.java | 73 +++++++++++++++++++ 5 files changed, 120 insertions(+), 24 deletions(-) create mode 100644 scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index d0213a00c2..038775d716 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -32,12 +32,12 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; -import java.time.Duration; import java.time.Instant; +import java.time.temporal.ChronoUnit; import java.util.Optional; import java.util.regex.Pattern; -import static java.time.Instant.now; +import static java.time.Instant.ofEpochMilli; /** * Represents a branch in a repository. @@ -64,6 +64,8 @@ public final class Branch implements Serializable, Validateable { private Long lastCommitDate; + private boolean stale = false; + /** * Constructs a new instance of branch. * This constructor should only be called from JAXB. @@ -123,6 +125,17 @@ public final class Branch implements Serializable, Validateable { return new Branch(name, revision, true, lastCommitDate); } + @SuppressWarnings("java:S3655") // we check "isPresent" for both dates, but due to the third check sonar does not get it + public void markAsStaleDependingOn(Branch defaultBranch) { + if (!isDefaultBranch() && getLastCommitDate().isPresent() && defaultBranch.getLastCommitDate().isPresent()) { + Instant defaultCommitDate = ofEpochMilli(defaultBranch.getLastCommitDate().get()); + Instant thisCommitDate = ofEpochMilli(getLastCommitDate().get()); + stale = thisCommitDate.plus(30, ChronoUnit.DAYS).isBefore(defaultCommitDate); + } else { + stale = false; + } + } + @Override public boolean isValid() { return VALID_BRANCH_NAME_PATTERN.matcher(name).matches(); @@ -196,12 +209,6 @@ public final class Branch implements Serializable, Validateable { } public boolean isStale() { - return !isDefaultBranch() - && getLastCommitDate() - .map(Instant::ofEpochMilli) - .map(d -> Duration.between(d, now())) - .map(d -> d.toDays()) - .map(d -> d >= 14) - .orElse(false); + return stale; } } diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java index 5ba45b00a0..908dcdbc7a 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.api; import com.google.common.base.Objects; @@ -165,7 +165,7 @@ public final class BranchesCommandBuilder private Branches getBranchesFromCommand() throws IOException { - return new Branches(branchesCommand.getBranches()); + return new Branches(branchesCommand.getBranchesWithStaleFlags()); } //~--- inner classes -------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java index ae1468e768..921818c4c1 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java @@ -21,7 +21,7 @@ * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE * SOFTWARE. */ - + package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- @@ -50,4 +50,13 @@ public interface BranchesCommand * @throws IOException */ List getBranches() throws IOException; + + default List getBranchesWithStaleFlags() throws IOException { + List branches = getBranches(); + branches.stream() + .filter(Branch::isDefaultBranch) + .findFirst() + .ifPresent(defaultBranch -> branches.forEach(branch -> branch.markAsStaleDependingOn(defaultBranch))); + return branches; + } } diff --git a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java index 113a687c9e..89828d2f65 100644 --- a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/BranchTest.java @@ -26,6 +26,7 @@ package sonia.scm.repository; import org.junit.jupiter.api.Test; +import java.time.Instant; import java.time.temporal.ChronoUnit; import static java.time.Instant.now; @@ -37,39 +38,45 @@ class BranchTest { @Test void shouldTagOldBranchAsStale() { - long moreThanTwoWeeksAgo = - now() - .minus(14, ChronoUnit.DAYS) + Instant now = now(); + long staleTime = + now + .minus(30, ChronoUnit.DAYS) .minus(1, ChronoUnit.MINUTES) .toEpochMilli(); - Branch branch = normalBranch("hog", "42", moreThanTwoWeeksAgo); + Branch branch = normalBranch("hog", "42", staleTime); + branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); assertThat(branch.isStale()).isTrue(); } @Test void shouldNotTagNotSoOldBranchAsStale() { - long notYetTwoWeeksAgo = - now() - .minus(14, ChronoUnit.DAYS) + Instant now = now(); + long activeTime = + now + .minus(30, ChronoUnit.DAYS) .plus(1, ChronoUnit.MINUTES) .toEpochMilli(); - Branch branch = normalBranch("hog", "42", notYetTwoWeeksAgo); + Branch branch = normalBranch("hog", "42", activeTime); + branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); assertThat(branch.isStale()).isFalse(); } @Test void shouldNotTagDefaultBranchAsStale() { - long moreThanTwoWeeksAgo = - now() - .minus(14, ChronoUnit.DAYS) + Instant now = now(); + long staleTime = + now + .minus(30, ChronoUnit.DAYS) .minus(1, ChronoUnit.MINUTES) .toEpochMilli(); - Branch branch = defaultBranch("hog", "42", moreThanTwoWeeksAgo); + Branch branch = defaultBranch("hog", "42", staleTime); + branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); assertThat(branch.isStale()).isFalse(); } diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java new file mode 100644 index 0000000000..2abb2c2326 --- /dev/null +++ b/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java @@ -0,0 +1,73 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import org.assertj.core.api.Assertions; +import org.junit.jupiter.api.Test; +import sonia.scm.repository.Branch; + +import java.io.IOException; +import java.time.Instant; +import java.time.temporal.ChronoUnit; +import java.util.List; + +import static java.time.Instant.now; +import static java.util.Arrays.asList; + +class BranchesCommandTest { + + @Test + void shouldMarkEachBranchDependingOnDefaultBranch() throws IOException { + Instant now = now(); + long staleTime = + now + .minus(30, ChronoUnit.DAYS) + .minus(1, ChronoUnit.MINUTES) + .toEpochMilli(); + long activeTime = + now + .minus(30, ChronoUnit.DAYS) + .plus(1, ChronoUnit.MINUTES) + .toEpochMilli(); + + List branches = asList( + Branch.normalBranch("arthur", "42", staleTime), + Branch.normalBranch("marvin", "42", staleTime), + Branch.defaultBranch("hog", "42", now.toEpochMilli()), + Branch.normalBranch("trillian", "42", activeTime) + ); + + List branchesWithStaleFlags = new BranchesCommand() { + @Override + public List getBranches() { + return branches; + } + }.getBranchesWithStaleFlags(); + + Assertions.assertThat(branchesWithStaleFlags) + .extracting("stale") + .containsExactly(true, true, false, false); + } +} From 518a1118fc5143156b8cb6f2264b820e66ec238f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Mon, 23 Nov 2020 17:51:32 +0100 Subject: [PATCH 60/83] Log change --- CHANGELOG.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 2ede975c00..0d7e1f9fd5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -8,6 +8,7 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0 ## Unreleased ### Added - Add tooltips to short links on repository overview ([#1441](https://github.com/scm-manager/scm-manager/pull/1441)) +- Show the date of the last commit for branches in the frontend ([#1439](https://github.com/scm-manager/scm-manager/pull/1439)) ## [2.10.1] - 2020-11-24 ### Fixed From 7a47e687075c495ea007629812d11a78742365ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 08:41:03 +0100 Subject: [PATCH 61/83] Make stale state computation configurable --- .../java/sonia/scm/repository/Branch.java | 11 +--- ...nchXDaysOlderThanDefaultStaleComputer.java | 61 +++++++++++++++++++ .../api/BranchesCommandBuilder.java | 2 +- .../repository/spi/BranchStaleComputer.java | 38 ++++++++++++ .../scm/repository/spi/BranchesCommand.java | 22 +++---- ...aysOlderThanDefaultStaleComputerTest.java} | 31 ++++++---- .../repository/spi/BranchesCommandTest.java | 3 +- .../scm/repository/spi/HgBranchesCommand.java | 16 +---- 8 files changed, 135 insertions(+), 49 deletions(-) create mode 100644 scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java create mode 100644 scm-core/src/main/java/sonia/scm/repository/spi/BranchStaleComputer.java rename scm-core/src/test/java/sonia/scm/repository/{BranchTest.java => api/BranchXDaysOlderThanDefaultStaleComputerTest.java} (72%) diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index 038775d716..2c65e74908 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -125,15 +125,8 @@ public final class Branch implements Serializable, Validateable { return new Branch(name, revision, true, lastCommitDate); } - @SuppressWarnings("java:S3655") // we check "isPresent" for both dates, but due to the third check sonar does not get it - public void markAsStaleDependingOn(Branch defaultBranch) { - if (!isDefaultBranch() && getLastCommitDate().isPresent() && defaultBranch.getLastCommitDate().isPresent()) { - Instant defaultCommitDate = ofEpochMilli(defaultBranch.getLastCommitDate().get()); - Instant thisCommitDate = ofEpochMilli(getLastCommitDate().get()); - stale = thisCommitDate.plus(30, ChronoUnit.DAYS).isBefore(defaultCommitDate); - } else { - stale = false; - } + public void setStale(boolean stale) { + this.stale = stale; } @Override diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java new file mode 100644 index 0000000000..cd05bad1b0 --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java @@ -0,0 +1,61 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.api; + +import sonia.scm.repository.Branch; +import sonia.scm.repository.spi.BranchStaleComputer; + +import java.time.Instant; +import java.time.temporal.ChronoUnit; + +import static java.time.Instant.ofEpochMilli; + +public class BranchXDaysOlderThanDefaultStaleComputer implements BranchStaleComputer { + + public static final int DEFAULT_AMOUNT_OF_DAYS = 30; + + private final int amountOfDays; + + public BranchXDaysOlderThanDefaultStaleComputer() { + this(DEFAULT_AMOUNT_OF_DAYS); + } + + public BranchXDaysOlderThanDefaultStaleComputer(int amountOfDays) { + this.amountOfDays = amountOfDays; + } + + @Override + @SuppressWarnings("java:S3655") // we check "isPresent" for both dates, but due to the third check sonar does not get it + public boolean computeStale(Branch branch, StaleContext context) { + Branch defaultBranch = context.getDefaultBranch(); + if (!branch.isDefaultBranch() && branch.getLastCommitDate().isPresent() && defaultBranch.getLastCommitDate().isPresent()) { + Instant defaultCommitDate = ofEpochMilli(defaultBranch.getLastCommitDate().get()); + Instant thisCommitDate = ofEpochMilli(branch.getLastCommitDate().get()); + return thisCommitDate.plus(amountOfDays, ChronoUnit.DAYS).isBefore(defaultCommitDate); + } else { + return false; + } + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java index 908dcdbc7a..af784f287b 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchesCommandBuilder.java @@ -165,7 +165,7 @@ public final class BranchesCommandBuilder private Branches getBranchesFromCommand() throws IOException { - return new Branches(branchesCommand.getBranchesWithStaleFlags()); + return new Branches(branchesCommand.getBranchesWithStaleFlags(new BranchXDaysOlderThanDefaultStaleComputer())); } //~--- inner classes -------------------------------------------------------- diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BranchStaleComputer.java b/scm-core/src/main/java/sonia/scm/repository/spi/BranchStaleComputer.java new file mode 100644 index 0000000000..c6324fa1cf --- /dev/null +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BranchStaleComputer.java @@ -0,0 +1,38 @@ +/* + * MIT License + * + * Copyright (c) 2020-present Cloudogu GmbH and Contributors + * + * Permission is hereby granted, free of charge, to any person obtaining a copy + * of this software and associated documentation files (the "Software"), to deal + * in the Software without restriction, including without limitation the rights + * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell + * copies of the Software, and to permit persons to whom the Software is + * furnished to do so, subject to the following conditions: + * + * The above copyright notice and this permission notice shall be included in all + * copies or substantial portions of the Software. + * + * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, + * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE + * SOFTWARE. + */ + +package sonia.scm.repository.spi; + +import lombok.Data; +import sonia.scm.repository.Branch; + +public interface BranchStaleComputer { + + boolean computeStale(Branch branch, StaleContext context); + + @Data + class StaleContext { + private Branch defaultBranch; + } +} diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java index 921818c4c1..becb32850c 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java @@ -24,14 +24,11 @@ package sonia.scm.repository.spi; -//~--- non-JDK imports -------------------------------------------------------- - import sonia.scm.repository.Branch; import java.io.IOException; import java.util.List; - -//~--- JDK imports ------------------------------------------------------------ +import java.util.function.Function; /** * @@ -41,22 +38,19 @@ import java.util.List; public interface BranchesCommand { - /** - * Method description - * - * - * @return - * - * @throws IOException - */ List getBranches() throws IOException; - default List getBranchesWithStaleFlags() throws IOException { + default List getBranchesWithStaleFlags(BranchStaleComputer computer) throws IOException { + Function createContext = branch -> { + BranchStaleComputer.StaleContext staleContext = new BranchStaleComputer.StaleContext(); + staleContext.setDefaultBranch(branch); + return staleContext; + }; List branches = getBranches(); branches.stream() .filter(Branch::isDefaultBranch) .findFirst() - .ifPresent(defaultBranch -> branches.forEach(branch -> branch.markAsStaleDependingOn(defaultBranch))); + .ifPresent(defaultBranch -> branches.forEach(branch -> branch.setStale(computer.computeStale(branch, createContext.apply(defaultBranch))))); return branches; } } diff --git a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java b/scm-core/src/test/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputerTest.java similarity index 72% rename from scm-core/src/test/java/sonia/scm/repository/BranchTest.java rename to scm-core/src/test/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputerTest.java index 89828d2f65..12fb269162 100644 --- a/scm-core/src/test/java/sonia/scm/repository/BranchTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputerTest.java @@ -22,9 +22,11 @@ * SOFTWARE. */ -package sonia.scm.repository; +package sonia.scm.repository.api; import org.junit.jupiter.api.Test; +import sonia.scm.repository.Branch; +import sonia.scm.repository.spi.BranchStaleComputer; import java.time.Instant; import java.time.temporal.ChronoUnit; @@ -34,11 +36,14 @@ import static org.assertj.core.api.Assertions.assertThat; import static sonia.scm.repository.Branch.defaultBranch; import static sonia.scm.repository.Branch.normalBranch; -class BranchTest { +class BranchXDaysOlderThanDefaultStaleComputerTest { + + Instant now = now(); + + BranchXDaysOlderThanDefaultStaleComputer computer = new BranchXDaysOlderThanDefaultStaleComputer(30); @Test void shouldTagOldBranchAsStale() { - Instant now = now(); long staleTime = now .minus(30, ChronoUnit.DAYS) @@ -46,14 +51,13 @@ class BranchTest { .toEpochMilli(); Branch branch = normalBranch("hog", "42", staleTime); - branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); + boolean stale = computer.computeStale(branch, createStaleContext()); - assertThat(branch.isStale()).isTrue(); + assertThat(stale).isTrue(); } @Test void shouldNotTagNotSoOldBranchAsStale() { - Instant now = now(); long activeTime = now .minus(30, ChronoUnit.DAYS) @@ -61,14 +65,13 @@ class BranchTest { .toEpochMilli(); Branch branch = normalBranch("hog", "42", activeTime); - branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); + boolean stale = computer.computeStale(branch, createStaleContext()); - assertThat(branch.isStale()).isFalse(); + assertThat(stale).isFalse(); } @Test void shouldNotTagDefaultBranchAsStale() { - Instant now = now(); long staleTime = now .minus(30, ChronoUnit.DAYS) @@ -76,8 +79,14 @@ class BranchTest { .toEpochMilli(); Branch branch = defaultBranch("hog", "42", staleTime); - branch.markAsStaleDependingOn(defaultBranch("default", "23", now.toEpochMilli())); + boolean stale = computer.computeStale(branch, createStaleContext()); - assertThat(branch.isStale()).isFalse(); + assertThat(stale).isFalse(); + } + + BranchStaleComputer.StaleContext createStaleContext() { + BranchStaleComputer.StaleContext staleContext = new BranchStaleComputer.StaleContext(); + staleContext.setDefaultBranch(defaultBranch("default", "23", now.toEpochMilli())); + return staleContext; } } diff --git a/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java b/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java index 2abb2c2326..4a0f9326c0 100644 --- a/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java +++ b/scm-core/src/test/java/sonia/scm/repository/spi/BranchesCommandTest.java @@ -27,6 +27,7 @@ package sonia.scm.repository.spi; import org.assertj.core.api.Assertions; import org.junit.jupiter.api.Test; import sonia.scm.repository.Branch; +import sonia.scm.repository.api.BranchXDaysOlderThanDefaultStaleComputer; import java.io.IOException; import java.time.Instant; @@ -64,7 +65,7 @@ class BranchesCommandTest { public List getBranches() { return branches; } - }.getBranchesWithStaleFlags(); + }.getBranchesWithStaleFlags(new BranchXDaysOlderThanDefaultStaleComputer()); Assertions.assertThat(branchesWithStaleFlags) .extracting("stale") diff --git a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java index 1bb9772b98..a2285bad11 100644 --- a/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java +++ b/scm-plugins/scm-hg-plugin/src/main/java/sonia/scm/repository/spi/HgBranchesCommand.java @@ -27,7 +27,6 @@ package sonia.scm.repository.spi; //~--- non-JDK imports -------------------------------------------------------- import com.aragost.javahg.Changeset; -import com.google.common.base.Function; import com.google.common.collect.Lists; import sonia.scm.repository.Branch; @@ -63,14 +62,8 @@ public class HgBranchesCommand extends AbstractCommand List hgBranches = com.aragost.javahg.commands.BranchesCommand.on(open()).execute(); - List branches = Lists.transform(hgBranches, - new Function() - { - - @Override - public Branch apply(com.aragost.javahg.Branch hgBranch) - { + return Lists.transform(hgBranches, + hgBranch -> { String node = null; Changeset changeset = hgBranch.getBranchTip(); @@ -85,9 +78,6 @@ public class HgBranchesCommand extends AbstractCommand } else { return Branch.normalBranch(hgBranch.getName(), node, lastCommitDate); } - } - }); - - return branches; + }); } } From 07cf29037031ba90040c4f0cb57ee04796116fd1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 10:33:57 +0100 Subject: [PATCH 62/83] Do not render last commit date when it's missing --- .../ui-webapp/src/repos/branches/components/BranchRow.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx index b6dcd2e51e..b13e0d9893 100644 --- a/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx +++ b/scm-ui/ui-webapp/src/repos/branches/components/BranchRow.tsx @@ -62,9 +62,11 @@ const BranchRow: FC = ({ baseUrl, branch, onDelete }) => { {branch.name} - - {t("branches.table.lastCommit")} - + {branch.lastCommitDate && ( + + {t("branches.table.lastCommit")} + + )} From 9119d2c075d601b5f5ac9420b2d9b30ef0ff89d7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Tue, 24 Nov 2020 12:05:22 +0100 Subject: [PATCH 63/83] Adapt documentation --- .../assets/repository-branch-detailView.png | Bin 91426 -> 111571 bytes .../assets/repository-branches-overview.png | Bin 162190 -> 199970 bytes docs/de/user/repo/branches.md | 6 ++++-- .../assets/repository-branch-detailView.png | Bin 82629 -> 121722 bytes .../assets/repository-branches-overview.png | Bin 153531 -> 209210 bytes docs/en/user/repo/branches.md | 2 ++ 6 files changed, 6 insertions(+), 2 deletions(-) diff --git a/docs/de/user/repo/assets/repository-branch-detailView.png b/docs/de/user/repo/assets/repository-branch-detailView.png index d671846fef9cc7410f363d59e81dec1c5a3bc798..f9727d9d4fc51bec76b7883c2cf49be9fb7291a4 100644 GIT binary patch literal 111571 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�n$;u3#?}C;@2fm>8zBH3ZMtWh0bW!w<8Yx#`bGs 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 hy8HL+|LZgXgFbngSdJ^%n907*naRCt{1 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%0Du3B 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 z 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 PJ)@&(a1*2MaR1)`XNBY) diff --git a/docs/de/user/repo/branches.md b/docs/de/user/repo/branches.md index 17afe92924..fd9a0ea2d1 100644 --- a/docs/de/user/repo/branches.md +++ b/docs/de/user/repo/branches.md @@ -3,9 +3,11 @@ title: Repository subtitle: Branches --- ### Übersicht -Auf der Branches-Übersicht sind die bereits existierenden Branches aufgeführt. Bei einem Klick auf einen Branch wird man zur Detailseite des Branches weitergeleitet. +Auf der Branches-Übersicht sind die bereits existierenden Branches aufgeführt. Bei einem Klick auf einen Branch wird man zur Detailseite des Branches weitergeleitet. +Die Branches sind in zwei Listen aufgeteilt: Unter "Aktive Branches" sind Branches aufgelistet, deren letzter Commit +nicht 30 Tage älter als derjenige des Default-Branches ist. Alle weiteren Branches sind in der Liste "Stale Branches" zu finden. -Der Tag "Default" gibt an welcher Branch aktuell, als Standard-Branch dieses Repository im SCM-Manager markiert ist. Der Standard-Branch wird immer zuerst angezeigt, wenn man das Repository im SCM-Manager öffnet. +Der Tag "Default" gibt an, welcher Branch aktuell als Standard-Branch dieses Repository im SCM-Manager markiert ist. Der Standard-Branch wird immer zuerst angezeigt, wenn man das Repository im SCM-Manager öffnet. Alle Branches mit Ausnahme des Default Branches können über den Mülleimer-Icon unwiderruflich gelöscht werden. Über den "Branch erstellen"-Button gelangt man zum Formular, um neue Branches anzulegen. diff --git a/docs/en/user/repo/assets/repository-branch-detailView.png b/docs/en/user/repo/assets/repository-branch-detailView.png index 615ba696c1a4959d4317e2a8b9a237096293ab8d..28f768a6be919494ed7097ce6c5f88df05667dca 100644 GIT binary patch literal 121722 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 z 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 literal 82629 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 P%=5C6N)i?C4FmoMap)$Y diff --git a/docs/en/user/repo/assets/repository-branches-overview.png b/docs/en/user/repo/assets/repository-branches-overview.png index e63ebab775d896a19501876b76c0afddbc172ef5..08a2ab19df3db77b2b3a4ba1746f972766d1d504 100644 GIT binary patch literal 209210 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 z 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%0AHjI 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

!eQaPXrjJ3LO3*n@- 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 diff --git a/docs/de/user/repo/assets/repository-branches-overview.png b/docs/de/user/repo/assets/repository-branches-overview.png index 39dcf5e4242033760297e17615c7b8148d024beb..c839e6b57cc724c2ecec884084183565d43f34cb 100644 GIT binary patch literal 199970 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 z%0A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

#k1)qnD$&mA*8;~w2A zqK>sESFuC3ZBl}Kh*y(jQQTKq zTps%y4h#Tc@Sz|d$-lA#0W(svK7nu&(b5xu)H?-YuW@~JYkVzon_pgQ$;#yfAX@Ym z)ux^~ciN=ix;9_hqc`KzoRdXE@gz-Be%jP~P2V?z;sb}F6Z>rogYk{jr_0d{ceL~E z{&3FDRW4^R{=x^E?|>NS$~a%p(XLK>xLqQ8znzkYcH!Fdh?A0wWeFJq^| zole!LSu&)!FIs}x_XpKD@>1pHXUx(8IyVnhNFmOz98V$F`>QEzyZP?eDz#xQ1+IJj zE)%%;BHr#$xdN{SonX=pxQT9b$uzw`lnb5ms7H<=*tjqN0!obMel(VhQv>$rq?CPX z#&COCDk3;xoUlNIN`Gb`p_;<6Lf){%vAHK6_-9zdto*U1YeOmeX3yM;)Jyf*aKURQ zU+G=%070eQ3ZgJs$*tAJN+1v>of?3#=XwP5QJx1j&4=wk=U2z zNdDon*nW`kp1^P?AvW6-Ql{b8PqX3g@4+X2OrX(OATWjz^omi#ll0 zUQiS2{zWFil{pICX8Y#<0R#oe*I$op_v^B*F0re;4^Cx2 z7iRko$@lLt`{euuuy`2X7oCV`v|y!d`aI2h0`Z&;J=)^DnS%bLvxh&4Es}eC+;Rgv-Njl^*9S0>VpMwiXea@`pcPlNX-f+x#tKt> z7+8GuxxkN%M+Y_O5lDLZr{aha)&{7d6R|frS_dlrwLF*xS z3;=K&;cbP|cD>9?jVOb<%->r^n&W zB-VT48IS+w&yX(0v5LIdrP#Nul>o~oL{PzJ$21gSEiZ2K{lIHsgq3*~M=LkvDp{C_kg$u^nwZkbmQwow>Io zda(l~EtG}{Ay-Ci7ou9=@8?~aYPouL3WA8dr`;mUZTkLMq;({n``Tn{viJF9E}1PK zVOoLVR135Z&2HFC24m)Ht{B5QChuvCH$!4Hiqt+UcKJtFMQ72J^JYp*W78L+^$gB< zrn40`?A*-I9a5IN3nHN;JFrddz7&7r#9ekZ39pV*UhG`#+j>20`^%p;rGSw{a`RJT zuyPHcx?|7vsgg%NYamddvSHkF>CPCg`oW)bQHm}&$JubsomNxbN6>bE*yzJ;DY%cn zXoac6w?pcI4KEW(f)hpJ?ua%M#(%1c6BY&Sc)1oN`3Y3kFDDdJE!uyVYsYj$+R7c| zI7Mst3TbJjSV0@@D()o;fqT&g+|0cehhr-w+apLRDuj4#WCsVBiR8>|&iOER+C?I>6KnPx*v4C3O%C87t%rYghN)@sU zP{i`Ah!S0`AQSX9-O8Iw;gC6!LUK9v5zmsfe}+7XaZv-DewQ)?gpJup+OrNZ&**1BRftdEq7Kha{1nLUx6mvuQ20Ylzf;UoQuF}o_-^aovYgiEw3yum ziD}J4g5f_+2wW>0ev^l7HFg;sHn7@@2FEfNgZZhqC2Pgbj(2S9tP=^OTh#H0jk*i( zF}dZ#-x_Su;6K~&nl)E|9+yqx-khk^2~;B{6&Fb-kq1mzcf+fxd)LIay9NYlOf_

MQdyZ^uMY?%di7uW@4L3&e)Q7}Oe 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 diff --git a/docs/en/user/repo/branches.md b/docs/en/user/repo/branches.md index 370165710b..7bf8aa91c7 100644 --- a/docs/en/user/repo/branches.md +++ b/docs/en/user/repo/branches.md @@ -4,6 +4,8 @@ subtitle: Branches --- ### Overview The branches overview shows the branches that are already existing. By clicking on a branch, the details page of the branch is shown. +Branches are split into two lists: Branches whose last commits are at most 30 days older than the one of the default +branch are listed in "Active Branches". The other ones can be found in "Stale Branches". The tag "Default" shows which branch is currently set as the default branch of the repository in SCM-Manager. The default branch is always shown first when opening the repository in SCM-Manager. All branches except the default branch of the repository can be deleted by clicking on the trash bin icon. From dcc848eb4bb23be62120ddabbc5eae390e5bdcd7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 26 Nov 2020 08:33:25 +0100 Subject: [PATCH 64/83] Update docs Co-authored-by: Eduard Heimbuch --- docs/de/user/repo/branches.md | 2 +- docs/en/user/repo/branches.md | 4 ++-- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/de/user/repo/branches.md b/docs/de/user/repo/branches.md index fd9a0ea2d1..47ac022067 100644 --- a/docs/de/user/repo/branches.md +++ b/docs/de/user/repo/branches.md @@ -5,7 +5,7 @@ subtitle: Branches ### Übersicht Auf der Branches-Übersicht sind die bereits existierenden Branches aufgeführt. Bei einem Klick auf einen Branch wird man zur Detailseite des Branches weitergeleitet. Die Branches sind in zwei Listen aufgeteilt: Unter "Aktive Branches" sind Branches aufgelistet, deren letzter Commit -nicht 30 Tage älter als derjenige des Default-Branches ist. Alle weiteren Branches sind in der Liste "Stale Branches" zu finden. +nicht 30 Tage älter als der Stand des Default-Branches ist. Alle älteren Branches sind in der Liste "Stale Branches" zu finden. Der Tag "Default" gibt an, welcher Branch aktuell als Standard-Branch dieses Repository im SCM-Manager markiert ist. Der Standard-Branch wird immer zuerst angezeigt, wenn man das Repository im SCM-Manager öffnet. Alle Branches mit Ausnahme des Default Branches können über den Mülleimer-Icon unwiderruflich gelöscht werden. diff --git a/docs/en/user/repo/branches.md b/docs/en/user/repo/branches.md index 7bf8aa91c7..7a9d318786 100644 --- a/docs/en/user/repo/branches.md +++ b/docs/en/user/repo/branches.md @@ -4,8 +4,8 @@ subtitle: Branches --- ### Overview The branches overview shows the branches that are already existing. By clicking on a branch, the details page of the branch is shown. -Branches are split into two lists: Branches whose last commits are at most 30 days older than the one of the default -branch are listed in "Active Branches". The other ones can be found in "Stale Branches". +Branches are split into two lists: Branches whose last commits are at most 30 days older than the head of the default +branch are listed in "Active Branches". The older ones can be found in "Stale Branches". The tag "Default" shows which branch is currently set as the default branch of the repository in SCM-Manager. The default branch is always shown first when opening the repository in SCM-Manager. All branches except the default branch of the repository can be deleted by clicking on the trash bin icon. From 58cbe1a535ad22d63aa36c7dd5ad3014a94a9030 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 26 Nov 2020 08:53:09 +0100 Subject: [PATCH 65/83] Improve readability --- ...nchXDaysOlderThanDefaultStaleComputer.java | 6 ++- .../scm/repository/spi/BranchesCommand.java | 42 +++++++++++++------ 2 files changed, 34 insertions(+), 14 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java b/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java index cd05bad1b0..15de6663ec 100644 --- a/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java +++ b/scm-core/src/main/java/sonia/scm/repository/api/BranchXDaysOlderThanDefaultStaleComputer.java @@ -50,7 +50,7 @@ public class BranchXDaysOlderThanDefaultStaleComputer implements BranchStaleComp @SuppressWarnings("java:S3655") // we check "isPresent" for both dates, but due to the third check sonar does not get it public boolean computeStale(Branch branch, StaleContext context) { Branch defaultBranch = context.getDefaultBranch(); - if (!branch.isDefaultBranch() && branch.getLastCommitDate().isPresent() && defaultBranch.getLastCommitDate().isPresent()) { + if (shouldCompute(branch, defaultBranch)) { Instant defaultCommitDate = ofEpochMilli(defaultBranch.getLastCommitDate().get()); Instant thisCommitDate = ofEpochMilli(branch.getLastCommitDate().get()); return thisCommitDate.plus(amountOfDays, ChronoUnit.DAYS).isBefore(defaultCommitDate); @@ -58,4 +58,8 @@ public class BranchXDaysOlderThanDefaultStaleComputer implements BranchStaleComp return false; } } + + public boolean shouldCompute(Branch branch, Branch defaultBranch) { + return !branch.isDefaultBranch() && branch.getLastCommitDate().isPresent() && defaultBranch.getLastCommitDate().isPresent(); + } } diff --git a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java index becb32850c..9fa28a49aa 100644 --- a/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java +++ b/scm-core/src/main/java/sonia/scm/repository/spi/BranchesCommand.java @@ -28,29 +28,45 @@ import sonia.scm.repository.Branch; import java.io.IOException; import java.util.List; -import java.util.function.Function; +import java.util.Optional; /** - * * @author Sebastian Sdorra * @since 1.18 */ -public interface BranchesCommand -{ +public interface BranchesCommand { List getBranches() throws IOException; default List getBranchesWithStaleFlags(BranchStaleComputer computer) throws IOException { - Function createContext = branch -> { - BranchStaleComputer.StaleContext staleContext = new BranchStaleComputer.StaleContext(); - staleContext.setDefaultBranch(branch); - return staleContext; - }; List branches = getBranches(); - branches.stream() - .filter(Branch::isDefaultBranch) - .findFirst() - .ifPresent(defaultBranch -> branches.forEach(branch -> branch.setStale(computer.computeStale(branch, createContext.apply(defaultBranch))))); + new StaleProcessor(computer, branches).process(); return branches; } + + final class StaleProcessor { + + private final BranchStaleComputer computer; + private final List branches; + + private StaleProcessor(BranchStaleComputer computer, List branches) { + this.computer = computer; + this.branches = branches; + } + + private void process() { + Optional defaultBranch = branches.stream() + .filter(Branch::isDefaultBranch) + .findFirst(); + + defaultBranch.ifPresent(this::process); + } + + private void process(Branch defaultBranch) { + BranchStaleComputer.StaleContext staleContext = new BranchStaleComputer.StaleContext(); + staleContext.setDefaultBranch(defaultBranch); + + branches.forEach(branch -> branch.setStale(computer.computeStale(branch, staleContext))); + } + } } From bbd9160b18def68bcddf5c18187cf0cd6c5d0b69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ren=C3=A9=20Pfeuffer?= Date: Thu, 26 Nov 2020 09:24:09 +0100 Subject: [PATCH 66/83] Clean up imports --- scm-core/src/main/java/sonia/scm/repository/Branch.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/scm-core/src/main/java/sonia/scm/repository/Branch.java b/scm-core/src/main/java/sonia/scm/repository/Branch.java index 2c65e74908..acfdd6a884 100644 --- a/scm-core/src/main/java/sonia/scm/repository/Branch.java +++ b/scm-core/src/main/java/sonia/scm/repository/Branch.java @@ -32,13 +32,9 @@ import javax.xml.bind.annotation.XmlAccessType; import javax.xml.bind.annotation.XmlAccessorType; import javax.xml.bind.annotation.XmlRootElement; import java.io.Serializable; -import java.time.Instant; -import java.time.temporal.ChronoUnit; import java.util.Optional; import java.util.regex.Pattern; -import static java.time.Instant.ofEpochMilli; - /** * Represents a branch in a repository. * From ba9143d78ebb50d6bdc3bb255fd155ef616e7575 Mon Sep 17 00:00:00 2001 From: Florian Scholdei Date: Tue, 24 Nov 2020 13:05:36 +0100 Subject: [PATCH 67/83] Unify key views across all user settings --- scm-ui/ui-webapp/public/locales/de/users.json | 17 ++++++---- scm-ui/ui-webapp/public/locales/en/users.json | 17 ++++++---- .../users/components/apiKeys/AddApiKey.tsx | 4 ++- .../users/components/apiKeys/ApiKeyEntry.tsx | 6 ++-- .../users/components/apiKeys/SetApiKeys.tsx | 20 ++++------- .../components/publicKeys/AddPublicKey.tsx | 6 ++-- .../components/publicKeys/PublicKeyEntry.tsx | 33 ++++++++++++------- .../components/publicKeys/SetPublicKeys.tsx | 7 +++- 8 files changed, 67 insertions(+), 43 deletions(-) diff --git a/scm-ui/ui-webapp/public/locales/de/users.json b/scm-ui/ui-webapp/public/locales/de/users.json index 271caff650..187d04a19b 100644 --- a/scm-ui/ui-webapp/public/locales/de/users.json +++ b/scm-ui/ui-webapp/public/locales/de/users.json @@ -79,15 +79,22 @@ } }, "publicKey": { + "subtitle": "Öffentliche Schlüssel", + "description": "Zum Prüfen von Signaturen für z. B. Commits können hier die entsprechenden öffentlichen Schlüssel hinterlegt werden. Zudem können hier die vom SCM-Manager erstellten Signaturschlüssel heruntergeladen werden.", "noStoredKeys": "Es wurden keine Schlüssel gefunden.", "displayName": "Anzeigename", - "raw": "Schlüssel", "created": "Eingetragen an", - "addKey": "Schlüssel hinzufügen", + "raw": "Schlüssel", + "download": "Herunterladen", "delete": "Löschen", - "download": "Herunterladen" + "addSubtitle": "Neuen Schlüssel hinzufügen", + "addKey": "Schlüssel hinzufügen" }, "apiKey": { + "subtitle": "API Schlüssel", + "text1": "Erstelle und verwalte Personal Access Token um auf die REST API zuzugreifen oder diese als Passwort für SCM-Clients zu nutzen. Die Rechte der Token sind auf Repositories und die gewählte Rolle beschränkt.", + "manageRoles": "Sie können die Rollenberechtigungen in der Administration unter „Berechtigungsrollen“ einsehen und neue Rollen anlegen.", + "text2": "Um den Token in REST-Abfragen zu nutzen, übergeben Sie diesen als Cookie mit dem Namen „X-Bearer-Token“. Sie können den Token auch anstelle Ihres Passworts nutzen, um sich mit SCM-Clients anzumelden.", "noStoredKeys": "Es wurden keine Schlüssel gefunden.", "displayName": "Anzeigename", "permissionRole": { @@ -95,12 +102,10 @@ "help": "Mit der Rolle können Sie die Berechtigung für diesen Schlüssel einschränken" }, "created": "Eingetragen an", + "addSubtitle": "Neuen Schlüssel hinzufügen", "addKey": "Schlüssel hinzufügen", "delete": "Löschen", "download": "Herunterladen", - "text1": "Erstelle und verwalte Personal Access Token um auf die REST API zuzugreifen oder diese als Passwort für SCM-Clients zu nutzen. Die Rechte der Token sind auf Repositories und die gewählte Rolle beschränkt.", - "manageRoles": "Sie können die Rollenberechtigungen in der Administration unter „Berechtigungsrollen“ einsehen und neue Rollen anlegen.", - "text2": "Um den Token in REST-Abfragen zu nutzen, übergeben Sie diesen als Cookie mit dem Namen „X-Bearer-Token“. Sie können den Token auch anstelle Ihres Passworts nutzen, um sich mit SCM-Clients anzumelden.", "modal": { "title": "Schlüssel erzeugt", "text1": "Ihr neuer API-Schlüssel ist bereit. Sie können diesen als Token für Zugriffe auf die REST-Schnittstelle nutzen oder anstelle Ihres Passworts zum Login mit SCM-Clients nutzen.", diff --git a/scm-ui/ui-webapp/public/locales/en/users.json b/scm-ui/ui-webapp/public/locales/en/users.json index 877675bc85..a087716618 100644 --- a/scm-ui/ui-webapp/public/locales/en/users.json +++ b/scm-ui/ui-webapp/public/locales/en/users.json @@ -79,15 +79,22 @@ } }, "publicKey": { + "subtitle": "Public Keys", + "description": "To check signatures for example for commits, public keys can be stored here. Additionally the keys created by SCM-Manager can be accessed here, too.", "noStoredKeys": "No keys found.", "displayName": "Display Name", - "raw": "Key", "created": "Created on", - "addKey": "Add key", + "raw": "Key", + "download": "Download", "delete": "Delete", - "download": "Download" + "addSubtitle": "Add new key", + "addKey": "Add key" }, "apiKey": { + "subtitle": "API Keys", + "text1": "Create and manage personal access tokens to access the REST API or use as a password for SCM clients. The privileges of these tokens are limited to repositories and the selected role.", + "manageRoles": "You may view and create roles in the administration view “Permission Roles”.", + "text2": "To use the token in a REST request, pass it as a cookie named “X-Bearer-Token”. You may use the token as your password for SCM clients, too.", "noStoredKeys": "No keys found.", "displayName": "Display Name", "permissionRole": { @@ -95,12 +102,10 @@ "help": "The api key will be restricted to permissions of this role" }, "created": "Created on", + "addSubtitle": "Add new key", "addKey": "Add key", "delete": "Delete", "download": "Download", - "text1": "Create and manage personal access tokens to access the REST API or use as a password for SCM clients. The privileges of these tokens are limited to repositories and the selected role.", - "manageRoles": "You may view and create roles in the administration view “Permission Roles”.", - "text2": "To use the token in a REST request, pass it as a cookie named “X-Bearer-Token”. You may use the token as your password for SCM clients, too.", "modal": { "title": "Key created", "text1": "Your new API key is ready. You can use it as a bearer token for REST calls or as a password for SCM clients.", diff --git a/scm-ui/ui-webapp/src/users/components/apiKeys/AddApiKey.tsx b/scm-ui/ui-webapp/src/users/components/apiKeys/AddApiKey.tsx index 216f33d425..fdbda0903b 100644 --- a/scm-ui/ui-webapp/src/users/components/apiKeys/AddApiKey.tsx +++ b/scm-ui/ui-webapp/src/users/components/apiKeys/AddApiKey.tsx @@ -23,7 +23,7 @@ */ import React, { FC, useEffect, useState } from "react"; -import { apiClient, ErrorNotification, InputField, Level, Loading, SubmitButton } from "@scm-manager/ui-components"; +import { apiClient, ErrorNotification, InputField, Level, Loading, SubmitButton, Subtitle } from "@scm-manager/ui-components"; import { useTranslation } from "react-i18next"; import { CONTENT_TYPE_API_KEY } from "./SetApiKeys"; import { connect } from "react-redux"; @@ -105,6 +105,8 @@ const AddApiKey: FC = ({ return ( <> +
+ {newKeyModal} = ({ apiKey, onDelete }) => { if (apiKey?._links?.delete) { deleteButton = (
onDelete((apiKey._links.delete as Link).href)}> - - + + ); @@ -52,7 +52,7 @@ export const ApiKeyEntry: FC = ({ apiKey, onDelete }) => {

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�U{el|@zXLpnOH$N)T{ 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�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 Lj5JF%>?8gG_<_oW literal 153531 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

diff --git a/scm-ui/ui-webapp/src/users/components/apiKeys/SetApiKeys.tsx b/scm-ui/ui-webapp/src/users/components/apiKeys/SetApiKeys.tsx index 8d80add477..7b9af8a415 100644 --- a/scm-ui/ui-webapp/src/users/components/apiKeys/SetApiKeys.tsx +++ b/scm-ui/ui-webapp/src/users/components/apiKeys/SetApiKeys.tsx @@ -25,11 +25,10 @@ import { Collection, Links, User, Me } from "@scm-manager/ui-types"; import React, { FC, useEffect, useState } from "react"; import { Link } from "react-router-dom"; -import { apiClient, ErrorNotification, Loading } from "@scm-manager/ui-components"; +import { apiClient, ErrorNotification, Loading, Subtitle } from "@scm-manager/ui-components"; import ApiKeyTable from "./ApiKeyTable"; import AddApiKey from "./AddApiKey"; import { useTranslation } from "react-i18next"; -import styled from "styled-components"; export type ApiKeysCollection = Collection & { _embedded: { @@ -51,10 +50,6 @@ type Props = { user: User | Me; }; -const Subtitle = styled.div` - margin-bottom: 1rem; -`; - const SetApiKeys: FC = ({ user }) => { const [t] = useTranslation("users"); const [error, setError] = useState(); @@ -94,14 +89,13 @@ const SetApiKeys: FC = ({ user }) => { return ( <> -
-

{t("apiKey.text1")} {t("apiKey.manageRoles")}

-

{t("apiKey.text2")}

-
-
+ +

+ {t("apiKey.text1")} {t("apiKey.manageRoles")} +

+

{t("apiKey.text2")}

+
-
-

Create new key

{createLink && } ); diff --git a/scm-ui/ui-webapp/src/users/components/publicKeys/AddPublicKey.tsx b/scm-ui/ui-webapp/src/users/components/publicKeys/AddPublicKey.tsx index e0129e8245..c693d89130 100644 --- a/scm-ui/ui-webapp/src/users/components/publicKeys/AddPublicKey.tsx +++ b/scm-ui/ui-webapp/src/users/components/publicKeys/AddPublicKey.tsx @@ -23,7 +23,6 @@ */ import React, { FC, useState } from "react"; -import { User, Link, Links, Collection } from "@scm-manager/ui-types/src"; import { ErrorNotification, InputField, @@ -31,7 +30,8 @@ import { Textarea, SubmitButton, apiClient, - Loading + Loading, + Subtitle } from "@scm-manager/ui-components"; import { useTranslation } from "react-i18next"; import { CONTENT_TYPE_PUBLIC_KEY } from "./SetPublicKeys"; @@ -77,6 +77,8 @@ const AddPublicKey: FC = ({ createLink, refresh }) => { return ( <> +
+
{t("branches.table.branches")}{t(`branches.table.branches.${type}`)}
{deleteButton}
{apiKey.displayName} {apiKey.permissionRole} - + {deleteButton}