From a41bd341799026fb8f1eee804f4c7e53ec54e3ee Mon Sep 17 00:00:00 2001 From: dalbodeule <11470513+dalbodeule@users.noreply.github.com> Date: Thu, 11 Dec 2025 18:49:56 +0900 Subject: [PATCH] [feat](server, errorpages): add gRPC-based tunnel session handling and favicon support - Implemented gRPC-based tunnel sessions for multiplexing HTTP requests via `grpcTunnelSession` with features like `recvLoop`, `send`, and per-stream state management. - Registered and unregistered tunnels for domains, replacing DTLS-based sessions for improved scalability and maintainability. - Integrated domain validation checks during gRPC tunnel handshake with configurable validator support. - Modified static error pages (`400.html`, `404.html`, `502.html`, `504.html`, `500.html`, `525.html`) to include favicon linking, enhancing error page presentation. --- cmd/server/main.go | 595 ++++++++++++++++++++++--- internal/errorpages/assets/favicon.png | Bin 0 -> 129517 bytes internal/errorpages/templates/400.html | 1 + internal/errorpages/templates/404.html | 1 + internal/errorpages/templates/500.html | 1 + internal/errorpages/templates/502.html | 1 + internal/errorpages/templates/504.html | 1 + internal/errorpages/templates/525.html | 1 + 8 files changed, 536 insertions(+), 65 deletions(-) create mode 100644 internal/errorpages/assets/favicon.png diff --git a/cmd/server/main.go b/cmd/server/main.go index 81e98e5..bb74c30 100644 --- a/cmd/server/main.go +++ b/cmd/server/main.go @@ -20,7 +20,9 @@ import ( "github.com/prometheus/client_golang/prometheus/promhttp" "google.golang.org/grpc" + "google.golang.org/grpc/codes" "google.golang.org/grpc/peer" + "google.golang.org/grpc/status" "github.com/dalbodeule/hop-gate/internal/acme" "github.com/dalbodeule/hop-gate/internal/admin" @@ -793,11 +795,439 @@ func firstHeaderValue(hdr map[string][]string, key, def string) string { return def } +// firstHeaderValueFromPB 는 map[string]*HeaderValues 형태의 헤더에서 첫 번째 값을 반환하고, +// 값이 없으면 기본값을 반환합니다. (ko) +// firstHeaderValueFromPB returns the first value for a header key in +// map[string]*protocolpb.HeaderValues, or the provided default if the key is +// missing or empty. (en) +func firstHeaderValueFromPB(hdr map[string]*protocolpb.HeaderValues, key, def string) string { + if hdr == nil { + return def + } + if hv, ok := hdr[key]; ok && hv != nil && len(hv.Values) > 0 { + return hv.Values[0] + } + return def +} + +// newGRPCTunnelSession 는 단일 OpenTunnel bi-di 스트림에 대한 gRPC 터널 세션을 생성합니다. (ko) +// newGRPCTunnelSession constructs a grpcTunnelSession for a single OpenTunnel +// bi-directional stream. (en) +func newGRPCTunnelSession(stream protocolpb.HopGateTunnel_OpenTunnelServer, logger logging.Logger) *grpcTunnelSession { + if logger == nil { + logger = logging.NewStdJSONLogger("grpc_tunnel_session") + } + return &grpcTunnelSession{ + stream: stream, + logger: logger, + pending: make(map[string]*grpcPendingRequest), + readerDone: make(chan struct{}), + } +} + +func (t *grpcTunnelSession) send(env *protocolpb.Envelope) error { + t.sendMu.Lock() + defer t.sendMu.Unlock() + return t.stream.Send(env) +} + +func (t *grpcTunnelSession) nextHTTPStreamID() string { + t.mu.Lock() + id := t.nextStreamID + t.nextStreamID++ + t.mu.Unlock() + return fmt.Sprintf("http-%d", id) +} + +// recvLoop 는 OpenTunnel gRPC 스트림에서 Envelope 를 지속적으로 읽어 +// HTTP 요청별 pending 테이블로 전달합니다. (ko) +// recvLoop continuously reads Envelope messages from the OpenTunnel gRPC stream +// and dispatches them to per-request pending tables. (en) +func (t *grpcTunnelSession) recvLoop() error { + defer close(t.readerDone) + + for { + env, err := t.stream.Recv() + if err != nil { + if err == io.EOF { + t.logger.Info("grpc tunnel session closed by client", nil) + return nil + } + t.logger.Error("grpc tunnel receive error", logging.Fields{ + "error": err.Error(), + }) + return err + } + + var streamID string + switch payload := env.Payload.(type) { + case *protocolpb.Envelope_StreamOpen: + if payload.StreamOpen != nil { + streamID = payload.StreamOpen.Id + } + case *protocolpb.Envelope_StreamData: + if payload.StreamData != nil { + streamID = payload.StreamData.Id + } + case *protocolpb.Envelope_StreamClose: + if payload.StreamClose != nil { + streamID = payload.StreamClose.Id + } + case *protocolpb.Envelope_StreamAck: + // StreamAck 는 gRPC 터널에서는 사용하지 않습니다. HTTP/2 가 신뢰성/순서를 보장합니다. (ko) + // StreamAck is currently unused for gRPC tunnels; HTTP/2 already + // guarantees reliable, ordered delivery. (en) + continue + default: + t.logger.Warn("received unsupported envelope payload on grpc tunnel session", logging.Fields{ + "payload_type": fmt.Sprintf("%T", env.Payload), + }) + continue + } + + if streamID == "" { + t.logger.Warn("received envelope with empty stream id on grpc tunnel session", logging.Fields{}) + continue + } + + t.mu.Lock() + pending := t.pending[streamID] + t.mu.Unlock() + + if pending == nil { + t.logger.Warn("received envelope for unknown stream id on grpc tunnel session", logging.Fields{ + "stream_id": streamID, + }) + continue + } + + select { + case pending.respCh <- env: + case <-pending.doneCh: + t.logger.Warn("pending grpc tunnel request already closed", logging.Fields{ + "stream_id": streamID, + }) + default: + t.logger.Warn("grpc tunnel response channel buffer full, dropping frame", logging.Fields{ + "stream_id": streamID, + }) + } + } +} + +// ForwardHTTP 는 HTTP 요청을 gRPC 터널 위의 StreamOpen/StreamData/StreamClose 프레임으로 전송하고, +// 역방향 스트림 응답을 수신해 protocol.Response 로 반환합니다. (ko) +// ForwardHTTP forwards an HTTP request over the gRPC tunnel using +// StreamOpen/StreamData/StreamClose frames and reconstructs the reverse +// stream into a protocol.Response. (en) +func (t *grpcTunnelSession) ForwardHTTP(ctx context.Context, logger logging.Logger, req *http.Request, serviceName string) (*protocol.Response, error) { + if ctx == nil { + ctx = context.Background() + } + + // Generate a unique stream ID for this HTTP request. + streamID := t.nextHTTPStreamID() + + // Channel buffer size for response frames to avoid blocking recvLoop. + const responseChannelBuffer = 16 + + pending := &grpcPendingRequest{ + streamID: streamID, + respCh: make(chan *protocolpb.Envelope, responseChannelBuffer), + doneCh: make(chan struct{}), + } + + t.mu.Lock() + if t.pending == nil { + t.pending = make(map[string]*grpcPendingRequest) + } + t.pending[streamID] = pending + t.mu.Unlock() + + // Ensure cleanup on exit. + defer func() { + t.mu.Lock() + delete(t.pending, streamID) + t.mu.Unlock() + close(pending.doneCh) + }() + + log := logger.With(logging.Fields{ + "component": "http_to_tunnel", + "request_id": streamID, + "method": req.Method, + "url": req.URL.String(), + }) + + log.Info("forwarding http request over grpc tunnel", logging.Fields{ + "host": req.Host, + "scheme": req.URL.Scheme, + }) + + // Build request headers and pseudo-headers. + hdr := make(map[string]*protocolpb.HeaderValues, len(req.Header)+3) + addHeaderValues := func(key string, values []string) { + if len(values) == 0 { + return + } + hv, ok := hdr[key] + if !ok || hv == nil { + hv = &protocolpb.HeaderValues{} + hdr[key] = hv + } + hv.Values = append(hv.Values, values...) + } + + for k, vs := range req.Header { + addHeaderValues(k, vs) + } + addHeaderValues(protocol.HeaderKeyMethod, []string{req.Method}) + if req.URL != nil { + addHeaderValues(protocol.HeaderKeyURL, []string{req.URL.String()}) + } + host := req.Host + if host == "" && req.URL != nil { + host = req.URL.Host + } + if host != "" { + addHeaderValues(protocol.HeaderKeyHost, []string{host}) + } + + // Send StreamOpen specifying the logical service and headers. + open := &protocolpb.StreamOpen{ + Id: streamID, + ServiceName: serviceName, + TargetAddr: "", + Header: hdr, + } + openEnv := &protocolpb.Envelope{ + Payload: &protocolpb.Envelope_StreamOpen{StreamOpen: open}, + } + if err := t.send(openEnv); err != nil { + log.Error("failed to send stream_open on grpc tunnel", logging.Fields{ + "error": err.Error(), + }) + return nil, err + } + + // Send request body as StreamData frames. + var seq uint64 + if req.Body != nil { + buf := make([]byte, protocol.StreamChunkSize) + for { + n, err := req.Body.Read(buf) + if n > 0 { + dataCopy := append([]byte(nil), buf[:n]...) + dataEnv := &protocolpb.Envelope{ + Payload: &protocolpb.Envelope_StreamData{ + StreamData: &protocolpb.StreamData{ + Id: streamID, + Seq: seq, + Data: dataCopy, + }, + }, + } + if err2 := t.send(dataEnv); err2 != nil { + log.Error("failed to send stream_data on grpc tunnel", logging.Fields{ + "error": err2.Error(), + }) + return nil, err2 + } + seq++ + } + if err == io.EOF { + break + } + if err != nil { + return nil, fmt.Errorf("read http request body for streaming: %w", err) + } + } + } + + // Send StreamClose to mark the end of the request body. + closeEnv := &protocolpb.Envelope{ + Payload: &protocolpb.Envelope_StreamClose{ + StreamClose: &protocolpb.StreamClose{ + Id: streamID, + Error: "", + }, + }, + } + if err := t.send(closeEnv); err != nil { + log.Error("failed to send request stream_close on grpc tunnel", logging.Fields{ + "error": err.Error(), + }) + return nil, err + } + + // Receive reverse stream response (StreamOpen + StreamData* + StreamClose). + var ( + resp protocol.Response + bodyBuf bytes.Buffer + gotOpen bool + statusCode = http.StatusOK + ) + + resp.RequestID = streamID + resp.Header = make(map[string][]string) + + for { + select { + case <-ctx.Done(): + log.Error("context cancelled while waiting for response", logging.Fields{ + "error": ctx.Err().Error(), + }) + return nil, ctx.Err() + + case <-t.readerDone: + log.Error("grpc tunnel closed while waiting for response", nil) + return nil, fmt.Errorf("grpc tunnel closed") + + case env, ok := <-pending.respCh: + if !ok { + log.Error("grpc tunnel response channel closed unexpectedly", nil) + return nil, fmt.Errorf("grpc tunnel response channel closed") + } + + switch payload := env.Payload.(type) { + case *protocolpb.Envelope_StreamOpen: + so := payload.StreamOpen + if so == nil { + return nil, fmt.Errorf("stream_open response payload is nil") + } + statusStr := firstHeaderValueFromPB(so.Header, protocol.HeaderKeyStatus, strconv.Itoa(http.StatusOK)) + if sc, err := strconv.Atoi(statusStr); err == nil && sc > 0 { + statusCode = sc + } + for k, hv := range so.Header { + if k == protocol.HeaderKeyMethod || + k == protocol.HeaderKeyURL || + k == protocol.HeaderKeyHost || + k == protocol.HeaderKeyStatus { + continue + } + if hv == nil || len(hv.Values) == 0 { + continue + } + resp.Header[k] = append([]string(nil), hv.Values...) + } + gotOpen = true + + case *protocolpb.Envelope_StreamData: + sd := payload.StreamData + if sd == nil { + return nil, fmt.Errorf("stream_data response payload is nil") + } + if len(sd.Data) > 0 { + if _, err := bodyBuf.Write(sd.Data); err != nil { + return nil, fmt.Errorf("buffer stream_data response: %w", err) + } + } + + case *protocolpb.Envelope_StreamClose: + sc := payload.StreamClose + if sc == nil { + return nil, fmt.Errorf("stream_close response payload is nil") + } + // Complete the protocol.Response using collected headers/body. (en) + resp.Status = statusCode + resp.Body = bodyBuf.Bytes() + resp.Error = sc.Error + + log.Info("received stream http response over grpc tunnel", logging.Fields{ + "status": resp.Status, + "error": resp.Error, + }) + if !gotOpen { + return nil, fmt.Errorf("received stream_close without prior stream_open for stream %q", streamID) + } + return &resp, nil + + default: + return nil, fmt.Errorf("unexpected envelope payload type %T in stream response", env.Payload) + } + } + } +} + var ( sessionsMu sync.RWMutex sessionsByDomain = make(map[string]*dtlsSessionWrapper) ) +// grpcPendingRequest tracks a single HTTP request waiting for its response on a gRPC tunnel. (en) +type grpcPendingRequest struct { + streamID string + respCh chan *protocolpb.Envelope + doneCh chan struct{} +} + +// grpcTunnelSession represents a single long-lived gRPC tunnel (OpenTunnel stream) +// that can multiplex multiple HTTP requests by StreamID. (en) +type grpcTunnelSession struct { + stream protocolpb.HopGateTunnel_OpenTunnelServer + logger logging.Logger + + mu sync.Mutex + nextStreamID uint64 + pending map[string]*grpcPendingRequest + + readerDone chan struct{} + + sendMu sync.Mutex +} + +var ( + tunnelsMu sync.RWMutex + tunnelsByDomain = make(map[string]*grpcTunnelSession) +) + +func registerTunnelForDomain(domain string, sess *grpcTunnelSession, logger logging.Logger) string { + d := strings.ToLower(strings.TrimSpace(domain)) + if d == "" || sess == nil { + return "" + } + tunnelsMu.Lock() + tunnelsByDomain[d] = sess + tunnelsMu.Unlock() + + logger.Info("registered grpc tunnel for domain", logging.Fields{ + "domain": d, + }) + return d +} + +func unregisterTunnelForDomain(domain string, sess *grpcTunnelSession, logger logging.Logger) { + d := strings.ToLower(strings.TrimSpace(domain)) + if d == "" || sess == nil { + return + } + tunnelsMu.Lock() + cur := tunnelsByDomain[d] + if cur == sess { + delete(tunnelsByDomain, d) + } + tunnelsMu.Unlock() + + logger.Info("unregistered grpc tunnel for domain", logging.Fields{ + "domain": d, + }) +} + +func getTunnelForHost(host string) *grpcTunnelSession { + h := host + if i := strings.Index(h, ":"); i != -1 { + h = h[:i] + } + h = strings.ToLower(strings.TrimSpace(h)) + if h == "" { + return nil + } + tunnelsMu.RLock() + defer tunnelsMu.RUnlock() + return tunnelsByDomain[h] +} + // statusRecorder 는 HTTP 응답 상태 코드를 캡처하기 위한 래퍼입니다. // Prometheus 메트릭에서 status 라벨을 기록하는 데 사용합니다. // statusRecorder 는 HTTP 응답 상태 코드를 캡처하기 위한 래퍼입니다. @@ -817,23 +1247,30 @@ func (w *statusRecorder) WriteHeader(code int) { type grpcTunnelServer struct { protocolpb.UnimplementedHopGateTunnelServer - logger logging.Logger + logger logging.Logger + validator dtls.DomainValidator } // newGRPCTunnelServer 는 gRPC 터널 서버 구현체를 생성합니다. (ko) // newGRPCTunnelServer constructs a new gRPC tunnel server implementation. (en) -func newGRPCTunnelServer(logger logging.Logger) *grpcTunnelServer { +func newGRPCTunnelServer(logger logging.Logger, validator dtls.DomainValidator) *grpcTunnelServer { + baseLogger := logger + if baseLogger == nil { + baseLogger = logging.NewStdJSONLogger("grpc_tunnel") + } return &grpcTunnelServer{ - logger: logger.With(logging.Fields{ + logger: baseLogger.With(logging.Fields{ "component": "grpc_tunnel", }), + validator: validator, } } // OpenTunnel 은 클라이언트와 서버 간 장기 유지 bi-directional gRPC 스트림을 처리합니다. (ko) // OpenTunnel handles the long-lived bi-directional gRPC stream between the -// server and a HopGate client. At this stage, it only logs incoming envelopes -// and does not yet integrate with the HTTP proxy layer. (en) +// server and a HopGate client. It performs an initial control-stream +// handshake (domain/API key validation), registers the tunnel for the +// authenticated domain, and runs a central receive loop for HTTP streams. (en) func (s *grpcTunnelServer) OpenTunnel(stream protocolpb.HopGateTunnel_OpenTunnelServer) error { ctx := stream.Context() @@ -848,44 +1285,73 @@ func (s *grpcTunnelServer) OpenTunnel(stream protocolpb.HopGateTunnel_OpenTunnel log.Info("grpc tunnel opened", nil) defer log.Info("grpc tunnel closed", nil) - for { - env, err := stream.Recv() - if err != nil { - if err == io.EOF { - // 클라이언트가 정상적으로 스트림을 종료한 경우. (ko) - // Client closed the stream normally. (en) - return nil - } - log.Error("grpc tunnel receive error", logging.Fields{ - "error": err.Error(), - }) - return err + // 1) 초기 control StreamOpen(id="control-0") 을 수신하여 핸드셰이크를 수행합니다. (ko) + // 1) Receive initial control StreamOpen (id="control-0") and perform handshake. (en) + env, err := stream.Recv() + if err != nil { + if err == io.EOF { + log.Warn("grpc tunnel closed before sending control stream_open", nil) + return status.Error(codes.InvalidArgument, "missing initial control stream_open") } - - // 현재 단계에서는 수신된 Envelope 의 payload 타입만 로그에 남기고, - // 실제 HTTP 프록시 연동은 후속 3.3 작업에서 구현합니다. (ko) - // At this stage we only log the envelope payload type; HTTP proxy - // integration will be implemented in later 3.3 steps. (en) - payloadType := "unknown" - switch env.Payload.(type) { - case *protocolpb.Envelope_HttpRequest: - payloadType = "http_request" - case *protocolpb.Envelope_HttpResponse: - payloadType = "http_response" - case *protocolpb.Envelope_StreamOpen: - payloadType = "stream_open" - case *protocolpb.Envelope_StreamData: - payloadType = "stream_data" - case *protocolpb.Envelope_StreamClose: - payloadType = "stream_close" - case *protocolpb.Envelope_StreamAck: - payloadType = "stream_ack" - } - - log.Info("received envelope on grpc tunnel", logging.Fields{ - "payload_type": payloadType, + log.Error("failed to receive initial control stream_open", logging.Fields{ + "error": err.Error(), }) + return err } + + soPayload, ok := env.Payload.(*protocolpb.Envelope_StreamOpen) + if !ok || soPayload.StreamOpen == nil { + log.Error("first envelope on grpc tunnel is not stream_open", logging.Fields{ + "payload_type": fmt.Sprintf("%T", env.Payload), + }) + return status.Error(codes.InvalidArgument, "first envelope on tunnel must be control stream_open") + } + + control := soPayload.StreamOpen + controlID := strings.TrimSpace(control.Id) + + headers := control.Header + domain := firstHeaderValueFromPB(headers, "X-HopGate-Domain", "") + apiKey := firstHeaderValueFromPB(headers, "X-HopGate-API-Key", "") + localTarget := firstHeaderValueFromPB(headers, "X-HopGate-Local-Target", "") + + if domain == "" || apiKey == "" { + log.Warn("grpc tunnel control stream missing domain or api key", logging.Fields{ + "control_id": controlID, + }) + return status.Error(codes.Unauthenticated, "missing domain or api key on control stream_open") + } + + // Validate (domain, api_key) using the shared domain validator. + if s.validator != nil { + if err := s.validator.ValidateDomainAPIKey(ctx, domain, apiKey); err != nil { + log.Warn("grpc tunnel domain/api_key validation failed", logging.Fields{ + "domain": domain, + "error": err.Error(), + }) + return status.Error(codes.PermissionDenied, "invalid domain or api key") + } + } + + log.Info("grpc tunnel handshake succeeded", logging.Fields{ + "domain": domain, + "local_target": localTarget, + "control_id": controlID, + }) + + // Register this tunnel session for the authenticated domain. + sessionLogger := s.logger.With(logging.Fields{ + "domain": domain, + }) + tunnel := newGRPCTunnelSession(stream, sessionLogger) + normalizedDomain := registerTunnelForDomain(domain, tunnel, s.logger) + defer unregisterTunnelForDomain(normalizedDomain, tunnel, s.logger) + + // 2) 이후 수신되는 StreamOpen/StreamData/StreamClose 는 grpcTunnelSession.recvLoop 에서 + // HTTP 요청별로 demux 됩니다. (ko) + // 2) Subsequent StreamOpen/StreamData/StreamClose frames are demultiplexed per + // HTTP request by grpcTunnelSession.recvLoop. (en) + return tunnel.recvLoop() } // hopGateOwnedHeaders 는 HopGate 서버가 스스로 관리하는 응답 헤더 목록입니다. (ko) @@ -974,10 +1440,6 @@ func hostDomainHandler(allowedDomain string, logger logging.Logger, next http.Ha // on a single HTTPS port, based on Content-Type and protocol (HTTP/2). (en) func grpcOrHTTPHandler(grpcServer *grpc.Server, httpHandler http.Handler) http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // 임시 디버그 로그: gRPC 라우팅 조건이 어떻게 보이는지 확인합니다. (ko) - // Temporary debug log to inspect gRPC routing conditions. (en) - fmt.Printf("grpcOrHTTPHandler debug: proto=%q protoMajor=%d contentType=%q host=%q path=%q\n", - r.Proto, r.ProtoMajor, r.Header.Get("Content-Type"), r.Host, r.URL.Path) // gRPC 요청은 HTTP/2 + Content-Type: application/grpc 조합으로 들어옵니다. (ko) // gRPC requests arrive as HTTP/2 with Content-Type: application/grpc. (en) @@ -1133,8 +1595,10 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand return } - // 2. 일반 HTTP 요청은 DTLS 를 통해 클라이언트로 포워딩 - // 간단한 서비스 이름 결정: 우선 "web" 고정, 추후 Router 도입 시 개선. + // 2. 일반 HTTP 요청은 활성 gRPC 터널을 통해 클라이언트로 포워딩합니다. (ko) + // 2. Regular HTTP requests are forwarded to clients over active gRPC tunnels. (en) + // 간단한 서비스 이름 결정: 우선 "web" 고정, 추후 Router 도입 시 개선. (ko) + // For now, use a fixed logical service name "web"; this can be improved with a Router later. (en) serviceName := "web" // Host 헤더에서 포트를 제거하고 소문자로 정규화합니다. @@ -1157,14 +1621,14 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand return } - sessWrapper := getSessionForHost(hostLower) - if sessWrapper == nil { - log.Warn("no dtls session for host", logging.Fields{ + tunnel := getTunnelForHost(hostLower) + if tunnel == nil { + log.Warn("no tunnel for host", logging.Fields{ "host": r.Host, }) - observability.ProxyErrorsTotal.WithLabelValues("no_dtls_session").Inc() - // 등록되지 않았거나 활성 세션이 없는 도메인으로의 요청은 404 로 응답합니다. (ko) - // Requests for hosts without an active DTLS session return 404. (en) + observability.ProxyErrorsTotal.WithLabelValues("no_tunnel_session").Inc() + // 등록되지 않았거나 활성 터널이 없는 도메인으로의 요청은 404 로 응답합니다. (ko) + // Requests for hosts without an active tunnel return 404. (en) writeErrorPage(sr, r, http.StatusNotFound) return } @@ -1192,14 +1656,15 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand } } - // r.Body 는 ForwardHTTP 내에서 읽고 닫지 않으므로 여기서 닫기 + // r.Body 는 ForwardHTTP 내에서 읽고 닫지 않으므로 여기서 닫기 (ko) + // r.Body is consumed inside ForwardHTTP; ensure it is closed here. (en) defer r.Body.Close() - // 서버 측에서 DTLS → 클라이언트 → 로컬 서비스까지의 전체 왕복 시간을 제한하기 위해 + // 서버 측에서 gRPC 터널 → 클라이언트 → 로컬 서비스까지의 전체 왕복 시간을 제한하기 위해 // 요청 컨텍스트에 타임아웃을 적용합니다. 기본값은 15초이며, // HOP_SERVER_PROXY_TIMEOUT_SECONDS 로 재정의할 수 있습니다. (ko) // Apply an overall timeout (default 15s, configurable via - // HOP_SERVER_PROXY_TIMEOUT_SECONDS) to the DTLS forward path so that + // HOP_SERVER_PROXY_TIMEOUT_SECONDS) to the tunnel forward path so that // excessively slow backends surface as gateway timeouts. (en) ctx := r.Context() if proxyTimeout > 0 { @@ -1220,7 +1685,7 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand // Context cancelled, do not proceed. return default: - resp, err := sessWrapper.ForwardHTTP(ctx, logger, r, serviceName) + resp, err := tunnel.ForwardHTTP(ctx, logger, r, serviceName) resultCh <- forwardResult{resp: resp, err: err} } }() @@ -1229,20 +1694,20 @@ func newHTTPHandler(logger logging.Logger, proxyTimeout time.Duration) http.Hand select { case <-ctx.Done(): - log.Error("forward over dtls timed out", logging.Fields{ + log.Error("forward over tunnel timed out", logging.Fields{ "timeout_seconds": int64(proxyTimeout.Seconds()), "error": ctx.Err().Error(), }) - observability.ProxyErrorsTotal.WithLabelValues("dtls_forward_timeout").Inc() + observability.ProxyErrorsTotal.WithLabelValues("tunnel_forward_timeout").Inc() writeErrorPage(sr, r, errorpages.StatusGatewayTimeout) return case res := <-resultCh: if res.err != nil { - log.Error("forward over dtls failed", logging.Fields{ + log.Error("forward over tunnel failed", logging.Fields{ "error": res.err.Error(), }) - observability.ProxyErrorsTotal.WithLabelValues("dtls_forward_failed").Inc() + observability.ProxyErrorsTotal.WithLabelValues("tunnel_forward_failed").Inc() writeErrorPage(sr, r, errorpages.StatusTLSHandshakeFailed) return } @@ -1359,6 +1824,10 @@ func main() { }) } + // gRPC 터널 핸드셰이크에서 사용할 도메인 검증기 구성. (ko) + // Construct domain validator to be used by the gRPC tunnel handshake. (en) + domainValidator := admin.NewEntDomainValidator(logger, dbClient) + // 3. TLS 설정: ACME(lego)로 인증서를 관리하고, Debug 모드에서는 DTLS에는 self-signed 를 사용하되 // ACME 는 항상 시도하되 Staging 모드로 동작하도록 합니다. // 3. TLS setup: manage certificates via ACME (lego); in debug mode DTLS uses self-signed @@ -1552,7 +2021,7 @@ func main() { // gRPC server for client tunnels (OpenTunnel). (en) // 클라이언트 터널(OpenTunnel)을 처리하는 gRPC 서버 인스턴스를 생성합니다. (ko) grpcSrv := grpc.NewServer() - protocolpb.RegisterHopGateTunnelServer(grpcSrv, newGRPCTunnelServer(logger)) + protocolpb.RegisterHopGateTunnelServer(grpcSrv, newGRPCTunnelServer(logger, domainValidator)) // HTTP: 평문 포트 httpSrv := &http.Server{ @@ -1593,10 +2062,6 @@ func main() { } }() - // 6. 도메인 검증기 준비 (향후 gRPC 터널 핸드셰이크에서 사용 예정). (ko) - // Prepare domain validator (to be used in future gRPC tunnel handshakes). (en) - _ = admin.NewEntDomainValidator(logger, dbClient) - // DTLS 레이어 제거 이후에는 gRPC 및 HTTP/HTTPS 서버 goroutine 만 유지합니다. (ko) // After removing the DTLS layer, only the gRPC and HTTP/HTTPS servers are kept running. (en) select {} diff --git a/internal/errorpages/assets/favicon.png b/internal/errorpages/assets/favicon.png new file mode 100644 index 0000000000000000000000000000000000000000..e395e77d812ce16b1106dcce179b17dc38ba3a5a GIT binary patch literal 129517 zcmYIwWmsFy^LBs$!4urQ#l5&Yl;TjJxO;IgE`j1si@O%L;_gn17Kh>xpt!xX&;NJ5 z*M3OOe%U=UvorVHGkYRblw>hbiBSOn0EWDrlo|j4|MC|e0782C`Q!QH4gdfHtW&DQeHMWcC4=X_{U7;<16_8KMqOZ z3lXX(gwLJ3{{N)dJ|M|KJVNaMMwdYN%S=TuRy(Ql|E5}^#Rz@(0YKalHENar8`UvX zDguDR1q3#z?*FDLX{s$AURFSYp4Um`{NFIjl*n-f%#{x6V>bS8N?&$ebkI-$@EjrK z#SEeUzo88U(~||b?HQ*^vixsq9&%&2#YPtJ94hVg{{JsNLHT#_v3yqK5C4C0SZ8df zE8xlF&Bz6Ipc@EI6EDRXQyZG)#s334@R=;|eDt|9Uo|TgR6zrZyV;_v-BiHBEbPq6 z|DYoqrjJ=CWke>s{!Hq(4|vG-OwxJ<@8AWLd*aO3d|2_AY}pp=xE_oY5%?u1N^-Dz zj=+Yj{jxO7|L;zokx6%?Bf4}c0=>HMJ6rD>tCalxhmwjRe5|!!4igupMu01_U3!=;Vc6^IJGl>dL z` z$?fGeAV9h8v&+c$552sTEq~P6%#v-E=hpkYKVqZ2i75a>wjhfsuPsWeH2j@c8w{T= zX3<0@JFZyZCHbSU1F-`;1OAExQDvm;MUwFFw6L4N=}jh4!RI^wY~k&xH{1nT6u1F1@F~Kl#7j0^b5xok2;MUAianDF`3tA==-TJO;O1CZFaOwfsIA z%;rIU`l4D~5M7tE8F3@ln)5vdLpPH=PSMs3UZXe*Ad!Q`jrV};IMwu33)%X9%c4)W zEk0~ng#zR|f6oJ~NNT;4v*pF0n9N4*umgFC;LB`2>I*d=QaJd3I`Noj{~az}N!*l2 zj7mbp4IfU;N%ThdGfvD3k@{T?^6ljSue1D>dK)6S34aK7V1Lw9l|l0X)H1{8HrjHB~_UW=hd;lh(4p@y8 zDrKc0P5hIi*?XYQbh7pG$@aZ+_G2=CS^KNazgFXb4}7u}R6t(u94Km2r>=fa(-m%L z@y2aLx-R>ka#V-h+bf4t5>J6`Sw5aN?YP+4>n%LXCdta*?|2w>2IMY}FnNm&En{Qqbi6fb|2V4Pa5EnJ?Am{MjnT@MItqVy)v6uicPz7BrK2SP z@W;qJH;Cx^5Y#oVIUZHGnUrq~O;)`uzmTzbQ4QFyyx?Qo%M|G_w0 zQ*L2?3PmM^A`%`VlPOJe((SBOu7AB(xBTg(wew+~uFBtNvB{x%SJ zwt^AU_+R&a!}M2bhH%Agn$$2E8ZpjqoJ(t40m+N62!uUP?K?YezUp>d@7g|{#q$2L zG?X(tu--%5!KXbdvHBsT_i7FO)Mrp{x-Xkz1`Dj+UPMuxA^odl;Yt|(vW}a*ZyvX|2V(L z#1}5Oe~zL0#XAT9Yu%%^S0^hv&Mh|G zPg{uAwjos^@eF%D!C$R8NVZ*&`KZmY>vdoc6a<*&(oCsZhoE8P@+35t-dOy~|8}R{ z3BTeAyN%xqgIZ(>Rh&KT)cuYAo~GcN)A|(5E`O+sSEtlEhFCzUzqJop>Z|r89{txi zl|$(Z0=A*0el+piVB?KEQPe;S$E6Ua_oj6$-mr~WieULf95X*~3~Nv-;rDXW=IKa7 z&U1=k@3=bw=VS45LI=P5V!^4Q0V<}J1!VS`{5H)6&qP8Bp<}RJy^{o;5n>yOF%lKR zn?mFSk}3Gmw^TMiWfB501EUMA%V$2fsGO2rWU{C50(#WU|3+f};DB3)lhmev?tlqeNEE{9rMVd}lgyMCzPHAH zL;k#jWc2-qhlhDB<7OQw4*u>wpILYXoiQ4!VXsO)NvF_-H@T13%HS)|K|@Z)Yfk1t zi)GiXdgV4U!Q&1%+B}*#HcJ^J!mv>^8PXrSDwk7~=}10!)&;I=RzBZTK}nzrUy$Qx z?fWQ37RHw?2Us`yHfbTjb>Zr ztQrrBv+4qj;WPHP>v+5y+ERV<$PO077Z=~WoS=pzJj#&~WVr}_>^MWw<_a{^I|jGy z%mgZH8I49W-V8AyZ~VAEf?~|8Tfo1k%){w=^$E8Uo*Tz$Zg8&iWjs-?7FlG0p zIDj=t_wV8V00k7sHcS-FROvXR(aCb7c~2z-|2Ai1fUkVqX6V#Co?yrp?nShKREV`mv#=FbL1i zA(bfMVjp)Qi39*c1VE6F9nbL(-GjSNdYYr(kzT?9?2Z!FWW&&zHx=fdyqe!u&Q+)o)pCm@?*8Ed1g}Aj?1fW{G!EbsN&EM&&p=s4| zxLx_3_5477_`!f}jykmzInMy6`6+-Sj=I~IS2zsK-vgtvb5Ducw55|NOD^w(8jd7D z1fd=BarU!~CXM?J3z{j}?aw+lf6nK_OI`Sf{8fmkQO+O{os^*SVn zRen~#MRxUluE#sSpGGLppp;ar{TA)^3ItrjVAUi$?UJn`|J4Ey3Ka4fT%Lg_JgoysQ*fWiE937wRTB@-d;5&>dBmo^&S zm5Om=PtL}-dPZOEBsv^F_vr@F$JFvuf#;YV1VIj>#_+SuMrx&Rn#1EyM*En*gJu z&PSM*(=th9IkL%_RmAXY(s5o4(W8z3;sho< zm!{7|HpjhI_U*vrWOj{}RX$Z|dRT0n*D<)5QLbzwST=!^kjba)eU>LTOwXAh+PIIB z5A@o&m0mWV5Kv}+dF-Zg#@e0 zd8beh4&qz(Pv+pkHXkg~`-zn);l>pmYM5WhVo;uGg!fh9c*;m9kF=S;Ee&Xx;;lld zLVK`_G+k?)`YHW#?7~N(Ml-YC$!FO7^ZD|9*250`PYzt|{{_6?ZgW~?Oc3o|NLtmB z|4+r)$>+IKRuSJ-l|YLhJL=e0xgj!gWwgp!RB`mTS;awOf6Ahk_R&2X0<=SZ=kg7l z)AUp73HMJRJ3w(noZmFAcrc;kF~u$85?ezb$hz_=_l7k#_JuqNxB0<-!wwS_#u@j6 z%j}%m(q`WBH$+IYuNLf}HJ;b9SpB)O4$!+a{H0q|F)jfraua4LYW)0FbvScWG5}s6 zYE|;9j0^A|!A1(VynMBvyXukI`kp@rCtD6G55tGO?bQBzB~W1M+;>-i0kMJk3+bX2 z0-$+Td?6fCBK>?f8lYG?Xwtuqxf+tJzno|}`x(9CEX5B`o1vRMCtoL&XNth3ed?)u zkI?F_l(xj?*fo8>PF9>9Zhdc$am+B4ph{l{AIfKTFc0>pYc&$wjgcBx0NR5lWLd#~ zj4v4@MIWw+nbU-W(&lAM>d{8ZVvN#P<_E2_MKA|5>M2sGWsK$iod$ zW@MJeexk*c25^kzQ(N+g^-~hqlE{q({5XT!eq7noN?mcj&n%y@&WzcS{p%19g95zt z>yzI8r5a!r2l#7Gi;Jn*zP;_xf(ED8b;;EkthReIks&3&cGoMY;D`^ZS4TxEA zlrZcesF*CDvO{MTyk`C7eA^rMo~^7gwx!EFP`thxRoA`~E_y_#Nv5+VtiVA6No*d3 z=g7{y?ks^bR}gN6^TUZ5{xp*h&p>*qAbq+rdOGr>uj6QT*5&S@g;@(4V(LF9KPt9f z=*~bEkosABu|sOzoD$a6wWrj1b8$KAkjdc>ZJTpYOC+R2&+QMpSBqLx#YTavxL99I796ig+jOgj6t{gV@r*KM!fUzhN@+qAt5Moo{3ULRAgSe46 z!ty-FnaaePzxHwb`LQ(R8o=oy7awR4h|>A6n`{6`1v=xTTj-_kU!>UGT!`w6JkIE_ z9fkkr3CAIOpH2;3SPFw)5Cmc1u7=0$83kMG_Q<~SW$T@1J@-k$hH!|~!7vnYxRz49 z2&UIWAu!_ z$8N(ew&Z}HG`$G8vrrv?Yp}7XYua!)gw4?y0kIa|G}#mrzjLPi-uiarQT*Qk}DCvpRr|d5(~4 zV9X5R^4}g-&hSNp-z5}?i^ z*xN5CD$$EYF`uJkT{NQ(S=%E$7-2@D0&szy-Kuicp)u0c-Ta7(CJpd*M9Vy{6&-ID z_MxU#!aVDIDOC7*Q@5`qpc8~fIoQ)2oL@D)&!M|)YwK(NeiNFp=w{}x1L$8sNtbOX zpmVq?c~9+QL|0367q(1|=wt7zU4!SnUkug_u}PNgA8d#6Xoaw=nZRE%R4)K1zOPpA z0}&j@1U*6(-scrEseY?rAOk3{a?{$S?!qt~X?0&&d&|Jqg$?O5aJCUuJYn=g#JH}g zJrp?ScBk6T27&?r{z>83KMXlZ8$W5lPV|{{GDH%-BUgEl9F(Yi@j^~aMo1C@><7i& z`D=S#6}I}wJ2DK7LYfWA4zWVUAy@8EYEu8r3BH|2SDoe!HS-WDmILt)h|P5=-;q!Z_s&30l1)R%eN%<32L33;LJ;?Im!Z>7{ z=x{Z`Shj~Y@qNik%VI?zszsPoa8a`)nm<-jk-bzynwf@IeI#cH&Tok6D2vetTQat@ z6Eo1V)TIXbLAzez=aPmA?WaQ$mRxO^hu0btw)?mcg!H~Cu|GoB1{=P66<|{a^^)bB zA>okAEE&eh#AY=9RBC}vPq|v<8dMx!pvd`flWF^KQhZeqrMc5OGChWgskKjh{R|Vq zFYo680z?19)7=tm^#5`iL#g#0&9ABR-;VyJV5wk`l-sCeo!?Em!pC2&WY^SSqVMQ$ zd(eRdPYwR0UWDkTTZ)G_UHcBuW1F}?B<%4L@=FJ0)qBCC)bz=~JUlF`-)RTPX&``3 z0`REo1Bk?l8!l_#dzX25p-WYXJUm+#3d$`|iZ2((CxuIKG-L>T+bt%XHi&Hp8Ua8A za14xl6#=TR_8-no#3cx7*ui`Pm;(daG)zIom~L4-40;>Wc7TJs4ZhcdrTDCSEoFk}niT-2v7^#d5 zUhx;Ey%;hab+z5?p0(&rZz08m?ba0aB7T+`eSoFFFI!Ao7nxzE>e-L#uoHDGlNNtK zIApIhFGk`|}qnJ(qqmFg9PmgnZvyXN-Bo;pOfG4YXD2(2Fd#ka=d>@g5yq zTK~z84Iw&XX*h;EfX{G4LYsI8tvju;vr*Jr(yjTMRo3TT_X zZNa{pg-{UwRsQOPXN2J>$@U7)A6|l&ItK=S|n~qM^^PYg_ z{BcOu+i6)-c{50KH7NHdzaCgj;^>pA{6rS;1Yt3(Bn!eLS1)lI$ha4Qb=u8+}Ter7y#R@7%A!r0}a|GfQ1)Z(26?QYD`4^E0{wC z)TV8L#C%z|ouww6iLxV%aOw8TXO~p(W^g$k^XGT`o-vt^lwk?>Xw~JgMw;Rc7)?{5 zOLcv4{PmmnT@|5uDjV?P%;gOholmoMA}$wgg%o+wZIS<-@K8{i)*n{|v4&UF`ouEZQDO2^pg%)H6xz{}m}~e@vN|r}TeT9!MRhMhnLN`P?}&c> z&UOgaS}OpLi(JNr_AP=l<+78d`V<^UDG&$Yl=R+PTL4M=U|s%>|9c&MNDD@-V*$>3 zP;U;EqJv5ZPX*d_EoEd@uq8yTOpJ=wLK91~@M1&!HS}}OMR98<@^KH1y9-uoXfPe(?CJA$34t;cm7S3*WEFHBmv8Yn`u9)9bNV|Q5m z;Urbd)XWV&*e}6H!Wj>UVx}(E%mhei)RIgMB6youKt2i*vMqR5gAjNmY-gz`Qn2m9 ziny)!VUHPs{rr@)egA=6jF0!-nmVHgVwCHUu7Ddn1R*Bqx|t-$f%G`2d&&qQ{> z*GndI#)@@MA+@g+PYbNo&@i&tvLbJm6LW~)eFR5xxdz+kh@0sC zq=~^vH=4faLR^;i;YrfKGoL4=@te`rh|GM|MEilRa+9kmD%ci1QIo2gF_?{{{O~o(gA8SdN$TYn@pD?B6 zB==Z*gQKPQhODMScJt_Ut_+yuf|OPgyAEvDcq%p4rXc_@Ko^7Op{{1M!fYbEL?c6v z46=Pfr12e`;Sa|p%KIM|;6DvVuNT6M6M`Oyr2ujT3f;p8If7I>1DtCt)Um5oly|eV z{#;#CvEfQ0(6HAdcK|S?ekXCVkby(vngrW}$8+@XX&__~sK@2`2FqYAgLA;gjuUH* zaU__IRP+yPm+g;;tA2lC7Q9j~<93+R_#JWAAoSh2HiC54Gsmp$zIX4Ne%-G-P^cAg z3yh4!zF<{?KrK#ZzY7ET>sp6@Nav5ar0l0%tzAD?T(`tT4NdA9t_Zd`QLU=TPk4>1 ze(w+lc(LIq>v}`@=UCJmSvv4X2zLa-C+lEsR&|*N4TbAuJqQZo?vO;tpSgpDY-u4P} zpOH;Mvv`Kd7bEtAGVi$rd;Mojz$HByc&g(K)-_9#H%lF)p3oR)1RNg&dVvZiW;#)P zIuzG0EJ0=S1EecDxR_>}pWN4pe?1Myy>GRnissevf%WS~lQIMD<&b;-w(n)%F9^{Qj@iaD&FQj-QueCmzPj@=VkfleU$MOk%R)>%=j| z5lHORdO1#4v4Zt3*b1VB;w)6fgCd&$wE4gmdKHY0wXyTN2oq`uttb^G4NR%JyJ1Tz zAM9x4a@ikHp34pOs)EPHnELk)s1izZhJ=!~4dSBEEWaqqfn%hNy>Pd4V_xn0Ugyo7q=kvG5J*NXSSnTTccu1C~_jzfr2nNNaZKa=jA05$U8@8*G;FUzn zxgpWoYNqz2@#Iy$UcH}gqKQO;lX*ha4X}M0@^)Ih^)Oz|fJnKcBX}Z&=h7HKcxFh4 z360iQsM;KH;i&xz@-eXU;r-JKWXn>k0KJQSWn zzfc&R9=Mn?s`zbs$n_LI{`b&$jx;VGTrGnu$|#CSr#{d`Y~t%r^~4lUeH?N&`2jpR zB2Z9x79gpf(^x{205BEO<;?m2$49p~5+uv$dR%5GChIqlTE`QXETKm3z@CQ=BkZ_f+I z73fS(CN{uJ_WJjHqC{qOv>My!P#K)uhJ1Ke$mN`&`aT(1fHw=Vc775{VAt_ZiYV2oB>$;g)xV?;7Z*%Ki+!6DTIdDXWk4nN_q@hj2)!V4IE|5iuq6vM_Pwa zUC;25hI{mEx>GPvY1D>rn39z49t9(1edy*bo1e?HoBBuJPZOfEN;YEOlR*{gpthNA z=P<8A>XD~c@Q3*DXqvn?)2D1tsqcSj4JWx;R-CD*zCuv=`~z!!;hG%8^;&koYA#+b z7iIq8-l?|`YvYS-YEK@Pj&ANm;;$j=qr;z)%wA)leS8%Vny7q6HNFXR{wdtRO)mLf zCSUyakb9`4fY9gg5apN<&I9B~v>1S*Gu7kd&`P``85wZW)tAqbmk$v=GujAx-DU(4 zQ989oi|t|j3a1-A{SFO82ACfLtQKGHVd#JkP-6yRBjVW2vX;WxzFtVg7GE#jviH;dE(dgH>UndR#?2RE}0v-^5I#wA(EWzRj>9|Ga2KH%pOgMKE) zzXI1L1nj>L_atN@gLcL9$-c*;RtpRlpP3&#Y1|uEr8dy|Jks(}NFsTK!3bexVPOM`I<3(lXLTu@qV6n@m8kLQu4qie7 zet-d>ew;9n8d`&Cz{hC{=27;-R?-flF;WbHvEeYD0e?B&Gyn3N7H^ze8`&-on>#6hC|RO;Ui4UJ|VfhkJhSbzVL z57DLrdz$?mLh0l?9eIpgBHXqSV+`3X*2b!_f0veEv_|7DWg{b}5)!gaLGV&3S~vOS zGpjCFkR4(8`2#!877G?9=Oo4w4NW*@TfJD}=Zr^j zwP+nnqFkssK(e(DC8WSku6TX=;)DDXVjUn06YwLUf<+3Qvd5+CoSrnU%hhi$Sd5Qn z7d1-X0ejMbFOp#? zWeT2#`lDhJmyfppZOd^G>w3VjA9?*ZO_wq%wV7|4;Je?&SWbN75}Gg$Zw)n}L2i(| z>7r8-Q$Uh?q7}q;+HR?Fy#iIX!#=vwC9X$;<_2H~^wZ*flIvb4@*l%?F;(M2jWt?` zJqHD`3dylc=uhLBILGL$fipd-jTs+4o}*%fI2U>2{yg)eaY3XX--Z^kl9{`4CE~_L+ozU0$8YoNA()oGR=`U^hwxGK+Qd;Klter4c<_uxfL}&+m z4I+nr%&dru(9$g@;RvRZ+R$ryF0|4QsqgP1{ROv<*jSNy@|$0h9?wx4m<@WI;g*)< zJBECz^>5LDh>>5SrdN}vzTO*1-!D_YZI%GVBR-NmBMN_HIf@EMIIW8FT|v`9sc z0T&?uB)ZQyAo(c*{* zT*#OhVN)2#;zA>M@iy4{)1`jwQv|2!e~f^CLCS(Y1D4QiCK4FfGN!dL;BoF9j zx-bKhZzc@xYyRpPpAN*u+`yse@PT}Y;8O_+3h8|LTJ9m2SQ}CE*%(kzV1FdUXT+WM zJvO5@EiP7>YT7!m+7s(Np=XvlvwYe-t>VX;Pop@;IE$x^f@U zeRZ$;(pc+Y4K&E?4qe>)8L#n{0pb}+%`V$;evjsGvsK1?;u1E^g)(!Wk?*#hjs9~L z9h%*Y#VLpyF=Y8Y=itt1`qUxB!98B!kkX&y>lJJ@7{W-xAjJ?=E2cBh7=QSd)T!rW z;og3BJ;8X}%Jp-!5PT_PC}GM#nYeas7F}Rf=kV_ULJ)5M5PMk?LGSq>C3}8JV0GpO zL?}qreRs&^4#yQ;$O_$FN;V8D86dP1;=&Ph;$#}X^BGo!t|thEk;}Cu7TJXu1y7|6 ztb;3R!t?mj5J;HXtR=T_S@gr~-ASQXe%tJ6W&v9cD#7^)+%3XFhot6bUu)6pa1R(A zzp?7cp)(0&nda&p#;1#Cz_Jij4iz`P5IK?gAfm?WnV{#N`1`Ex_;-G2h5tG?rK2;bMUJw;zQ* z?J_fGuF=-~WaxJHjysc6Z=;QXy7CjDt03>n%0HE#RnB7eHu@-v2gis}F{E|NzAxB2 zKD3}yHsRjZ56<0D$kl{Mw&8Hd5Ibt6u1G+X+3Ml z>u6=_1aeQACB~Ox$P5BnMDpV+_UhlTnUK=x%_L>=Xq5EYD#P)TPK-eZixhsDbG&y3 z4hRVwk&h)FM*G;bZNR32)>zCCF{wCE&iHG1DrAFqa^Z8MUv0@T?m>#&8!rMg_p)#&TZxPt4b&xegcU1ydd}*(O5okg#Jpzgswi6mRyIg^8R|^GOe)#4v!1J zgMIH$U{2iy7?f%!%m1!$8NZ%0TwTOXsD(~;C?6>fK+gPKy24lcOakrVH!GYl@@H^~ zhn%de3PjwDnG?^GL=q2NyLC}#DL#`C18Ob6?D^sA2p@%jqCqH+K!zMJzpY4kg;gv0 zoTE)Y=*qZ|oxG9y@NNcCUAv9_P)7;?KV4qiF#JC*!24jVJ?;sEk@j#p*EmGfvq0!N z>HGS3JkPx>{*obDD^+ufB?iO{^!%B%u2yA1V5klpmHR3L?O=ug17r&1rGZE>mAuAr zTBWFz{rN7>*{1HZUYO&JQ!7>JG+Z36M0)TRT#Xg}fDoUL@#I!rYL)`W3q=aUmt6lz z6619#m7MU>_xb_Ete*Mjr^6HMzO*!5FS)J2m}c>}RjYX0DGr^noK~+6mbpzktEtl> zKQ9f15@k%myC4m0bxOLp^^iB_6;wp{+ohylZ^G3@eW@97x-VX%4y(phhlW_sl8-f8 z!udUqjsT$_#EH)F4cz%k_*5XLt^8 zl)|h=L^})_TnEvcmt5DQCt&~u`Q^wi?jnaI>=&#I)VYuC3KcBK2gZ5k~VEhN|)fAr6fSaQih({Nw1A6~4QuteUAlI2gw z$d*UkqKZvLCC>g3IL%}ggEnTYLq2#5G75kGhnLRvaIrL6OJPyirK|;8nK^c%Q(xTI zJ_7!IhW?~)1Nj}|h^(w#$#yv<>=NW%55@1P&ESQGhdSjd0_TFTIeLPjJI>;xRXwdr z{({s+wd%7WoMnj2AT{Sqp3y7AjC*(bxvzyx%WoJ+Yv}=B=4B69F^e&)m%>VqHym=2J4Q?J9YbANq=;C*_JeXjgkM3@DMlw_aLixUs5|O=KYjnoR-x5@kAljX5O*P@GH0f z4zEMI%fR)?_vbGZLf1X(yh~sFl#=(qy5Xeo9+wy@_RjCK4V0spF&usi?V>h1=k@!u ztlX#=9nx2YvMV2^1l}HEkIG;3Ae31FJ11CXCCq-%=Q|xMPis6ip&h>>;}a4Z#*JD+ z;AM<8A#*0{t2q?}J(A4FC-$Z7hq0l*Q$+})-<_W~IoV>0%jr}%+(vApaZyjj!UT=h zhE7sZ2kJ&wcMqg@$I~X;lt)O5@P&u?nyki_iek!QJ8T2PO!n%k*(il9Z_p(N@R#t9 zfV`TklxG40kjE_^fLiR;=j0L&;%lj{Y1PFz0UBa*FQZ$uNd!BGU{W|;dOqUj9tnNk z_iRl!$CH&(E^Zieml8T`??iDefR7}ot7qMk%}F(=1GqVq_*B0o&SeK_HOYI|KM_nk zJzm!PGN1EsPr;^53bR~Cx`#d|2TbO~aBA=~Z_K>w|MZ-?d-OOqwI|5nnz>AXRnH^x zJd^%>$=mt7GSrQn{qU{*ivL_emhAq?pYN#T`r(n>hwO4EKUVm7aP4V2`}~5fbw9Ce zscr&J12b)H7W?JCz{^D(1URLz^C?r8r^lM_k@a!Sk}?mJHSvV@pM^13;G}tnU%%ds z(_qRFtm1!uPaET6rKCzLX^w1MKvEJ#wxLb%WUcob*>M5I$LJz+j_#J1GU`EinEz~r z{{1Vy`>4^H^IP1SedwsXv)*hGy`QRZzh}U<#Sbbo0Jgzv+KqzMU}|syq12DthdM5z z$KWdfhxy=kUwG&tVfDt)SRgLy9d!V**tymcK}BKJvH4!!F;&_ZRA+<$M=(sV1JK(nmg?YbtJV z1kpx`$Ag>4r@x>|U4Yi#;9Llj(0RyUjIfm0_lkrxr{;&C*0>=;&!t?R3u&POWYX_w z88Nl~;_W}iEBT{HhN9ayCZL^VWste}XjAS<783sbQ_<_6%OcmeRgaSnFGU;A%~HfA zJ6WWn(enMdZphEpQ-5N^`&5e2)Q&&jvY#IbI(#IHS`G!^r_(*tsw($44lfVhG8eu8 zj9~~Nkmu>lVN&otQ~Lx-I@&Nh_&Xu=7rJRIjfXTb$59h}Z^Mb^h0NKJDO*=uPAxMO z%d8|&XL>QjOzLFY+XG?wh?8jfxSfa-J6r1Qhe(y5 zX^P$S%9C|C3L&60i%k>noCi?8$1X*<8&nKxK#?diTD+Ld9Y|3vqO}s=##Nn=IFB`; zeG1mSA z7R4CR&vCofS5r(DshZIA0bU(+H^!&uJ;yDVmNh3<)>F?LLfhB#`UuNdBZg1<)Egh# zZp!winmA_vW9|z#sWFyL`)P@d`P=Iw_moIXgf!!wE4A zpXr@y@dZ_N%}d*Z)1TI>?q&@7NNol^u^O6`6~WqGX{F4X{oc^sUr}Xbv2WD#-#Ftk z!Lnv!gI#C>@P8D-ObWgYRK3MuZ9O@uidby$qviezp5o#pa$a{9b8%4Ny2Yr3D@ zR-G4kW2|X}UW3~ar{c)Pb4^@+5fNLq^(%RP)mHSe)c>wGiZ1IOWR9YnbpIi&tK5D< z_YUpMCRlUC=a7ayr{#?8$#dtdV}{AVPKtWVBV@MFEZhg}-RehSGadx5l}G z{Fi~!kZGq}lyKarnOkuZxTUurKzBVm3s3Tn_JzIc?5AJonrU;BnCUs8m#;sDhfn(t zF^{Elqh)d==x79B?kC=a)@qOq7F7IjL@eyx;hZ&*qC?qI!O99m}4sh$#Ibm{q-tp z1lK7w!()6LnHiyIgQbN*=P9B5^k)BF^k#7@rE1JH`KxE8H{s~DTAz1zld;EPyjy30Qn+D#$NRn zi?+I!q$F1K5r)8TZP=60`5)0n?ST)02_!#eJ_>mrCRTUA{}kg9kC*Tb6!W7DTpr4g zuj-1R;6vBp1nQa!I_EK9(^`u@Jw%r0Mm^}Oz8aQRDP})HKK0C!l-t}~3>17bgh{vF zhQVxD57taD>G|G(d43JLO*CoZe!4RLJ?hdt2<>0t8#tqK(+xf>SCnp zYB5xn-0g8W0nKF!IeM5kkCUvy)|cHa#OOd9^?Ea+)yG`PY1Wir0|??Yy8!maH5&SG zb})^IQ8wdA>%LRYG@?^{ns&ph@=Jtl0hDj9cy7+sS)8Sl@=?+Vr6RDKwzU^+2>-ch z+Y&t+_7@n>M~j*Kw(b%JqC~BUDYh2~mxKw7HJK2ua;XO;Dbp6$^?QgRW?=@WGG=|f zg@4-B>hN$^a8plO{t(ht?(o^`QaT0uqp$_RkFJtu=#w>Ko=s_GHvoxuI>xRDI(6xK4Y0e$1@5 zy_fZcm{l?v)~!oYMh{{70o&`2+RRB?E~*3_k9BLOe?I9JZ?ZHBcYd-uSbJO%eY7ys zC=W$r1BVNOUwvY`nXnf6jKOo*Jpug~DY@D}aV2W3Y}c?WvzJLfbWBhBVO?Q}+R*@@ zKG=RO%6-NA!hU-T^smr2H8I2gW)ZA)HhKlm1_=zMK`0h&Ffz~JhXlHMlc3fAVvo6> znjXr-r4CAa$>hEopK&p%uq(3K6&U%fZqfAxn-$Y$@w5!0T?yDBzj005{yiLv#7!1y zJJE_mGm1Eb(-nNILoNLqIaeOxCkLjY1!fzMTn_)Tr1n4x^# z_11zjL{4^wVsRVY`yO2hQIho(i8s9*3}W|)^10#sizFkQRI}YQUjUUmH5YTO5^B?YF$*LQojz_3}f2!Xf{!cr*&jHzbFtUf= zpSfTjh9c1lxPSD2K@KEfHE+)>o&$g2Z`46nYV@= zR?o8^!2n}{pyTT0L~kppG4@9%c)#7jnBHo1mmp30`+=kT1^r2rr^Iq2J+dC$h7$PA zI8)s8qiS-IyU^>+dVf#e)%$%MRU(AXipJ5#{*4H{JN)Zji; zax0)WW~e3V`oQdYj>EHL&!eZ%@WO1&s2=%1jrSXGVmgzn#2Rb_(%h?e)PUnftO$cO z+H0ZZ6W?_hJ7Px(Y(iBXMC-Usc}jX-*GI-61nFSQ8{6)`#PZcOHZ9*#sfJN4Zl%Ya zstJLvv@$x@(Cbjf8rj0Yd}TpWO9Nk|Mqw*Pvmg^%qW(Ct9xI`sit^A7MJB$Ty1{)f z-bei95dT2quV5!wUpZwXdBY7?_Twh6);AlaeWCgDEf#3N{{zWDHotkxji?+@iNMQ1 zVDZZ4fj8av*x14wrgcP2zf+d3X6gHBN$nh!7*Y*hj;<;2$Tk> z=OpSGy$|AmKYkd4bcpq5q`n-`K`9x9w4~~JK`9aKmRER zBWT05{ZJydi=0R76p^PK&h|lGu)}g}d+)F>qklRBbSh@fd<1bt;7Ph6sN8;=o#5LZ zhJ6h?tX#E}_c99Mu*p85U9hPrS{Th&;XR)?4jb(_5m{{z)rk%#fA~mrPvDee9mhbe zVrgbXr=kbfTsj@2D=e(*g0Q|2IxgKUyzQ9X(M|`TE(d!69eagXvzQ2uS%ASM8J>S; z6~|eDb55InP*45WB3cUq9Wi(B)XA!x)kjtpv!bG4jM9jXfI7mn>^9)!Jl}|M={0=??pE z0cRS7%K-utoPgW!ctGyH@4JoZ*G8>*ZN!#RO9b9L2yk+XFTMVbf05c4 zD9J}jkgP+TaL%iw=w}8%V_QG3Gi~C?mKw{WN1fIlX7!LCcWHD678BE)6 z8-%|XplstZL7aBs&%e4H72ks*RnD;>L3so+&2$v+{pg7p@dI!+NBC!gS=2_x^!eV0 z?}prSotC7lijFRk@YVH5Vqkb+1@dMKF7?=Ys~wS&q=P-qr+8-848(zO^MZPTm;$2W zMF$|TqE~3)P(g%o$yknWEFA+2p+hq7`B_Zcw;}v-ZD6a-wu8?Uc{|0>;7TNkL5Rvh zN2K$#DO>3{Kr-yO&sL~!VA0ee_|AA*Xhj1!?X&Mhfj~0UtAfDKE;Hy(CgHa~y##3Y za)1@60a_Tw?gvjp+@12dv^nnLMKz(Xf|ZCQLMn^+lHSI@)iZM~)#&6h#dcTL| z*g;v2<8(aHYCo>N>E8E0q#EN*wyCPHbg^`^^ekRFa>}{qUa^VTy70Y~&MOhOaP&ux z!6By}rpt6SMq-DN#A47`EX^DijI^-0onr;xfnmOvZNfDyO=(m|{14CmriLsHOdACq zF7=+@fnNOEH-30(nqu=e8C<2ge**&iYWxkY$|fZOZ(#&h0-K$C<;~l)nf7D=xn`uI z@SF%wIQ1Cj02+V@Bg`0!XRbsxXprZ^ItvfLs{*_Xe?&(aevjs>ar}pm!H^#$k$ZrV zdCm9Y(zC8dHSgnf1n)h&D8di@229$h4{0ce9%`a4 zL(cWo?LlD(srZDGxrIg67EBm71y*9V_o&ni=FEKpR&!KnXH+OE-XQ!gfaSUMf`s~{ zq1cbnf7QjXlsYS94yrs6<+Z`so(afD91Po2IcCp(0uWw@5h!hOjzBn$$)oLuvH#J# zqv3`~xfZcY*pE_e0n}Q|baa8f6F{5!!9#?CcAKIf7oU9#BFA(-vk__?hV!L(AD2;5 zKL}$ADD?;cQX!}efPo8{7&=#T9$QS`BNA&3+8EaNedKsz)PnZ~BM=2-p4-v&lmpstjo^*&F?PwDNK*|eAX%!;T_p} z->vZ8fBK+X>Q-aedJ~9$=E`9_x@ZL+UpjzUD@XC;Rfr zX;%2}o%?M>T}?0z1m#cR1dlyFC%$L;WB-bBd&3ZTtrVNrN^mK+MBvSW!0q=x^UteB zii-0B=RJhq3Z_!gG9y@Ts|oPTm6PL8xBa-{yqf@~@`V$wlAr|R516!1z0(Em??BaGBz+l2|GE4z>cf`yY9OkGHoNz3ba=_%z0=LDn%W} zTI5j^6E_}5(zLYA0-Ts3LI(k~H^<<>GM;4ctsEh4Dbh|3&{Q@>|nDqjqe-Kv?nQk}UkWh0h zU%7}nnEnsI1k898S_UmJZi5~aNefYAVcQkVe{>m&0fR^_N7}%i`|m)xIf6q&b7-f) z(+*7&ESx=zryp7jDe4@XAh#*%>lu!~*@ftxQLENkO+L{01SKCpHS|j7Bq7V zNfj+y>y$=R$ADC@jL&k`;3#Ge3`(<-*g=e_AD{cb`}Sv`80lcB4A!(`?7h7z*`D|QPoMmKKsHGovkqI%&!9pEJTc+IzmL&TZIIO)T-leR)a zf=?2Iho6}a)Tn}EvL;4%r4QqJC()J&S*wXfOXou@$Io#n3pkEW0sFvX%W0dE=v!Pw z7F>V+9k}_@hdY1ls3#tWN;Sfk+iyfNZ+BW7%RaP8$3kE*@g)jW;wcq%UpN}0Jb`n>|8(SHRxHeX7bqpM;>YUAu z5e?a@&wT42FcddU(~4RJibTi&SGZh&jPL9doIAg2~gt^dW8bErEkQAHikJ+YjQ!z9|&g(n}NlLG3j8)hcj5b+4VZ^0_= z$}W`W3^Nnmxb%-Vpl-$jBrr$EC5=XK{3(Y6QO36H$4@1p^U&D^2I8x@=x@V@_;J!i?rAda3( z7dg}M&co-37lAFnScU@ zbwJMR79upG8WuB4@a(D)CSGc0saxs){(Jujrww>IP6COXkMydmZuxhmZ78?53&3B?2!I0ZwN2N54Jy3q{oJy%DeK0TLHDiEg>;=2)GrLhcJNK*x%CgQ&Yc_#B)R zNmOhn#=tOyRV8_mRZXAA7P~U~l?(!dimTw6duAj2s{wHqU|nbnwpUK9hK_(xr^1mC zGgd2RJn$4^PWV|sV8jXsM~eg3HxfNujfQvAagCW+k^0F8wn@%4JU4j zn(aY_5nmVsDuR0+z7y3h3!mkP3Psce_Skec)YBS#yPy)qO%L8o0x4*bLqvjz@)#S8 znS$7Js-Uyd%7&OmCo!;v=NJ$+jtAmtmq+kxs$B_$^+gNlsZ2ml8Hwq`;}1OzLz&K} zP${7FtjJ_+$-cpl1#b)50L3%;bPJruuI?P-dspZv@} z|MJ;6OL~p1afrqc9^pF^iXq0L-t&d!SojV&Y2(9R{Ww-(2ziv?xfR0*nfwdWd1*6%PSKfHnmIWfC8m3hNCswp|6nh=BA6krp6@sLw z;Ks1_pIJbKLt0b3cO61@oP;xG3{Lpq(P&^8aT3Ag2Gz8VyRN(siFQ$nd9g2e&Z2<# zBqYiZE#TEb=ukA9O|T`57KosC3#an(7u&_3BygYGHz8@g&PE!(j8;&R_KUEwmV+Gsnza2){W`r4=l`SCE zD%(X+Sa{;8Vms$bXTY;KiQy#TlQt|7GCEyt(}mefhY^+uR_YM`@yB1L!;nHmm<6*~ z^uo$yc(_?Q0Bg0)8nF0dRmweG5;`e*&u-%iu`!hFJjR_{arVkuJj% z&p(bLD&T2oq7lYd#$W@k{Z~jJGyu#LV|8l)-YWG8Wdu9W8B2$}X^^rnlO{Y9L{*E- zH((^^cnWN=;Uq9!&62Z!i**^ml!}3eG8+JnEDXo6x6ycPlE|2M}wM6zE#t zVxwsj06ID<)Xxt5gz`hw&`iPTYQ?~kHVUqe=OoCi(!|6KyQ$Bi(=fDyL0f8ga_-`P z!CJJnG93Ti@BC~BW2y*{NOd(2@a8@S`x@oaEyI!U?)D(1b5M zg#8ivgC{(S@F*lcij<1r@n;@}u^x#S*v#PY{f^*K5YynoXONo5-H+W)qHiJhEl8qh zB~9G^#O-i3hqOqM&|cdT9I?lt2>(Jrh=XvfkIsGszM}s>@q1z+A}}m~frx-t7^SU- z>(xHWk@S0*gv%3t74|xG_m2FO%N1{b$H9y|hoNCPfJ+NTz`g)k4W03kq$8jl*4!&Vs=3xOi{C%9hLnQhW$)lrQ>ijd>W%5&JB#{;nbJ9Q9h5( zGZe2Pl62u`XP&dyuC*5c>@4a%@p7H$c$1x` zV2`7AN9ULBEYL6`IP|1_(6gb%i6449>obyCg!wa{M`SGJdtNJ4!Ke-p{vaqI;XCSI zGPDE*=s4s#tP|9H6+3Od6NK3d!?vxWg|=?<4;B~hSst|HWl;JN3!>3GlcnTDey={weW zKC95S;F3>92Vy8s(A26nrSKpB%4eX4n9(T=a?d>L97}=a{yHJ>TB|XywSrQ9iNM;1 zK$!k-xo`T z7bs}MV{@NC9w~&=e~0uHoz3f-6NSRi4t`?Zti`BE4=mgEOtLunBZpx(Isk2HvlUQ? z!-x*z@OK{o)LRJT&Bboen*co=2-a+(pv@HwEzPlL_8^R_z|(okbQEtpZcmKeD8?R# zPQzBaPDUyNaLj1H6%c0-yKdZh^}VFJiczD~H>`WSZC4nM!FeYlV0~m!>D6m)zVlF3 zf`vD3qyFf!%WnLTNS&xz;m{4NXOur#-uInK*113p4xr^s37JTC+B(=kxCE$9e@Y=HBI{VfVp$C81z ziO~=FV_4hQWaKH;MtW+k#_D8wBB@i%giBXh;C=qxG2&@Fw`~3x1ZKiRR6Rm)g zFDJ(WDVo^r@IAFHnfJLzk91@DwfAxYB@ufEl>%9%fn!fU9($00wm)=x9P{C$VaGDk zN+^dDWF5V@?t)tp(P<#hcVvTX6Lg4#uN&!&O~kx2a)9|ViJOk0tfGO z5OmaYEQWm@vN*@Qq4`*xEkjZ9j2bg#qt;b` zWb`4F&O(gG?tB^vmjhJQc$@2iNAF95Yd{Qb^(@rkCB{`Z-hK27VCalDbnE}OfBV6a z*3|Rh(D{%t>asZHdtb)_Vz^2b4O^pgT0z@ZSt=NyGqA$u81jmNwq*vY8zg5gL3z~a zy!P?=jVUa83PCkjMBcy{wj=pF-t&An9FK(;zBR0u2!*l`ij_k-3Y%bMK7{qAP5~tB z7S>i}{(_|kqTF5w1YUa;=CxN*YA6v{yAT)|X>al5+!y+s8V33xc_~T3qkCc%S+!8H z)>x+Qv*m4A5{NI9Z9H-k^NAmS2V`P|VcS5%G%#wL7}X~4D^(qMlwmT*AY9znIyVF!77G1?E!MP=>^tWPJfpZ5&k zEu|yiS)5vU7DYs-(4t^nxaTxRM%jqF%&Raypy2QQW0~e46Lc-NaibLLcIGSjyDollIq1XNS8pK*5@dm>3kbXgJ z<36ea^M8MTI0JEK2DL5m{3rz*Ysx7;xQxH%46s>G4FxrFd>?Velr%etQ%MU@kX>)X@@|m6d*yuco^$Qc0;h;1txDXo)dV+ zTdX%gAr7lrt1)lce6))UA)6sB!Pb+eVZ+{yU~_}WM({!tSz;3-I0jS4ZjPzrroyxg z!g6|w9CKI9$BNcUq=B3XjB>o08^z{3Oh#=S(Dp+RTR=GuKxhNt3&GH`0#~1Z2fB3v zdd&oMxiPrsiidH*FRn!0kAaZLZ6s*QFm^w3M|7{Bz$8jS@)ToP6k=!x9S$K$C+MQQ zThN_MfcF9i565wu$nY#jYMZF7A7kv4Zua#ZJEVwl<)5!*JliEfOp^;WN4@KCIOcj_ zl0cqEir#{eCUEHZxAgZH3a4&Ey>0F`LfP~!k% z#W(E@0&5*n`+5wse2A|H%B7CA1_4f7y%%3~>+TK_Co{4@nDR+pxoKm{cAIeSi!>60 zYL;N-+~plIV;_=CfkRI|97AY9U`WnYM8kqEsRFzv!C>~o&jO#RvSZH-#-SeN*g8?L`=i>_+H#`(Vb{672I^r?YQ(8SK-bJ?!(#Ny8sKGTn^W= zu+%}J6iY%kDWm6MY_!7!obvZ4;fVJhOp+J@l=q69lX}kdZH|X#K7@vEAgt{hPVUkW z?7!`S7;DGDk_f1sJQyL#W2~1_iU zSYw$D7{u`(I0m_ILD@-|g=x?c@xzAWv~(~;r|r2FoaKE!QTXtD=rGyDUw_-ZyA1%n zLEr0LRJC&HrPr_T38Dhli8tFHaS#^M=}K({t41<4!>SDc01yC4L_t(!njj}J7d(2Y z!Amz%*M%3Bw$Nw_BH}%!>G9kp*W=#r{Tc&LEr4fM0K+-l$_7@Tc_eu=&eMwd72v~QFujtije*FZ$JcS&S=ZvKpInUPPb^_H3kXxGciwatl8`a*?4X>=A<#fFE}VNf68F}7 zPDO14Mr{#iRuWmYsAAsq=kUz^^EiojqsxrP(%FM}@}4;;1`NUy1V1}+U_89d&^D`a zUyQ`7F;W@q zI0DCh@G#_+VUCaYg-lK7hkzl{8X7A-W^#Nh=Z&Cl#zOKso_%By=1gCRIHmJc5C@y1 zI##j&k-Nb#y8?Drg6;!$d_EfFu|z(`{dYgaF5x(ZOx*4 zB9~Qslg|xw3KBlUUOay9Gl*R*Vj!c%AU4>10w0)%^2aH}vE{Q1SJcx2JL8SnHobrP zV_P|A5-|qKbo+kqI}yV)cr+Dcd`3keemVdiF$x#+nItH*j$tkvEnU(;olL#_*1PfG zAI^tqmUwkfGc5#fZi;zo3TOHLq zL>7!Xhq33OyCSu1ItNWOqCsr9(|DZvnG+F>p`*ciF>Fu$LPFsP5u+P1$tsYHkjSdq zhg&YW8%etxmO70Q$O}xHHVt{GX%vj!pJ4hfYnW0_a8sPdSr0P6rRrreA6K@Je^o&0qY!{ zf>vhXB|?jD7OIwV_z=YS>CU_V#2$Nyp&sfoiQuGnp8(HDT@@f( zkmMYs<}u^BM=|IJ;cNjb22tB!5;F~lZ+8$5+vY&@r9Ft-)CGgKrWnuxJT&(qIu?$E zlfxK5)gws^jyU>IB=s1)1Z%-uK1Q(`^$i5?{nW9jjP*!$6rPy~c4Iq*zygRUCuXq_ zt)M33aQ<(vM1MR1KJ!rP(ZB$XfB)fdriCyL4vs1mh7iDWoT`|z@f4Duhi7DrW(4I@ zP2Kk6>HD5UOcHAqZFKk5K}87tg}QB4#mMp|@?1qKqU&wB9#Uz*!$ANT{`jbZAN}I2 zjaB*3S@(MF)VJl&&N$}>VyYsvBN#M!hi$N$j%F?uIwuKoM(65@xr+es*eMaQwGd_l z#%O|@fBtK}hYng~P&6RbVI23tL-Cofe+UPkxF^&MK={5;AY}P4W?gzM>bZiRA&SDl z^SxIU9>e*X;wYC{5!292s$=;66EUb-rxiKlR~JtG)Th4u$LSBw`Z0|v_g5K#*Grsv zy%d#tN(A0$1SVwe=vfPvGx;u@XBFW$=>t)b{4p%4<{lDpvVHXC2NC;(ZNOq6Mvzpi zY%hpSg!X6(^+AS3Y^!LuGMLDqyEhOI=Tz?jRftdrodG5BCSxroZ8Hgu(KQsPXa#d0 zUVs+Ys147Bk(TEKtPtKd0Kz2f;F-=ZJlDo+O?>e4?}Hr&jOqviVX_e-AEB-_G*-7U zf9^u|1w;gZz|y7^8S-k52j)zNt2;Q!5tEFo%sxysV=>nE(IK$ZCdf2HT1j!w%sY`L zDT&x4j9ob%js#hnVadWJ7+f@jZtdanL<}Jg-V|t>Vd$7P-uJna&^3{=+$bDV&z-&s zh*$`VLMYP!d4kpo!Q=Nli<<3)2*^b_CT-D=zV#DC72=?d9Tj0I034aR0=0StUIE94 z6-PA$PAbS!twBb-9xxnp#AgNS5&_g3CeCY^e#;}UE|%Oo4EqsmvfYNTu~3$Ru%qBO z<}X>@yQr1#f!Ar9J$vOgpZ)xIr~muE|8zZ(n1*;L2ekQ~yE5uFXfjRj`Fzz|IF18! zW`yV9xoE^^7V-H5^;IJndhBV4^TaX3`kVFQ%$t9QPkr}OIQ$bw;tRj{BEEgm570GM zU@dhN9#3C>9oCl!#)BYP;$+tx)xuN0ryr!$A#n{YI+f$rqm#-eIl*^@(9UiwSTNLk z^s(>%)Mc07dWI@HQdGIWxe(wt@y%s$X>EzX%SB-Bf|W;lsaoY^FPuK13db36=eO;R zmK4?)6W6uci6&8i6RNU_XAu&FB8n1t_NnxC^QOQt+IOB2auR{9V4{d^Lmx5}YaAy| z?=!T~z@hIt1fwCcr89vXh({~9;euNb6;;52n{vY*E2Ym){FFk^n^nL`tLvaP<4$hNc^Y z1_yvj1s=QrI3DMt>(*{QvyKGtVyhEN_+jtAfDmC&avds!B~I0&g4woYZUQUUJPr zQBqYyV&FVWV-zV#YU0)#!n0Bwq|&s&sB&@zi;}1WVQY=FkZ?kDoD4VEW;2pH36h+X zq6Nd0I4Cpxb2}y3h4x`dz^jKa;;&DtqGw7EIA3xy7t~P4b?4rIZuG!24Xa)e%6~?> zp+Bd7I7aI!C-nDx_Pwy{MQGYK+CC-uduAxAsAb)_<-$90_f^wj8VM?<&aN+hrD-QG zIB5eRHfxzSmS)TG_~NIKF(Xg}FGMsnfwK--m&4=BpTv@UDO!e%Y2?MRD}+)+1R@3z zt+&lO?z-YZTzB@Zup?b`Vrq~;9&Fbpg%`aU-ubB$fm$1s3|jD_ES_@r94`XlWP;vk zJgzHwUmj@@`1!k;P@w)B*(vN%hbY)1Y-6i2l5$uHXMfriPkFxx0PgiJFJU1dB&_@ zWw=2y4gVKF%~X&uy}aGtJD^={W5f($&yx;D11UTw&XtQ-!cu4;b9RQ(0cg4r9QnSZ z(2x}2m)De}H?&|FOJ*&HwmGSb{bPhraDN$5Sh2;i+Y_P;faQl?<6l zkybN2vHWQ~vuY0Vnn&OpF#=GAh;STW36>dH#Ekzc=(XdpaK>_G1FnJ&R*<-EXu;`( zds|v4`ZJvL>35*%2H-iCK(a;{RU*h@A=?-)aC|T?JhK8TpBv#AB90qq=rE3W_n~Mq zdd-WpgHPx$Y(IO(9NG{O@f7=?bP$?$811Bi-459ug)dM~x{$RTg0;%$CVU1$Cm_}Y zw_F*XZ2}n4rZzEo%kX~@_%KWe?aG|G%dfxPt^^L?;ZTn;yX8v^*S&NF$R@BgZ)lE2m{#&x}^tK z{q}17;PcI>QjSm;Xo%9$piczPa|grs z5a`=}W5ipG0eTfa&cvGnj(D@3co*yR=}(UR^EsFOftXvA+bcrg_3Uh3Pi3X95`i}g zfn`I@Pq%#JvZCN@$B9-skr{`BPdeq1b5etvMkIDw^Pd+d?F^W`vy50dc5LtRbFIg+>BvVs!g1+;H~w zs1!B$LZKu=C}(rdq(+2xP@90n+`?{0?~cAL$6}O(>aD=BeWgess|4r&=mHGPZz7@` zmnsY=ZE#p&0;d$vP+H9zb(RhZC3>#$r)WiOJo>_P#)~-s01yC4L_t(zB>ZR4s%2=B z{GT42gBdHHLW53CPO{d}nl_OSDF6sKNRWnbF2qNmDIjTr#$tzaes~EQ3v(o{3!V{U z;E_De(6v#51K+U^QbTgLph+CBvLC|66CQ$N6>%Bl>a%Y^kBmWhJdVufdU8zMYCLTC z#WmXE>4<5em@{K8^$-Kfo4WT@9P#19al$80;F3dxBuOy3dW7rRmevYM4v39~p&sOd znbT(?0de<0ZVNr~=@qBe9|wLeYhiB-K42{ARp0BC^e24VK0)9;> zo*6RmU9{NdgoE*!bH9s|e)Nx6Z{MlVxCM!n&(xuC!N98f;ursAuVu?d-i~s6(;#5p zG?tczmI%B81a7awarv;-QR=oN3|6Q;xwXW2k~8V;Q9{ zeR45c%QJwfe>MM(@0%L@w!cn8%SDQ#&dZ9M$^V|Z}Uqj+TL6L{c-8EDrE z4xMpGJ?w*Qvc zY^TY{(Siws4YG*7@F@JS{0Lc*d`K|+kp;vuhNtaq+r%*+d^?)OAWhGxGgx6zj3`Vq zf{+kf(!?Y>31c?xLq_?Qc0a%11yn0F-d6~nyx?GUbT}}xQ-jSD7(}AR7v1Z1b4jH^ z`32}C0g%Yqs=w?0$BtDEtcq84qfGhzpDy^<1q)VmsWQW41WLRSc|;pcz+qqd9FF+v z7cpvy0g2vs$XEf|9-gg%1?ZirQ&=7&zN2$)y^Yv#;MU=zU-|@^KEu%SBe?R6OE})~ zEPWI|4!`@_FEBnHhk>Gjw|(#=>ZMRR5zC*Pg^2RRbEwn_)`jl^8xR*kmK(JBoR<_W zEVQHO+HDgY_l?hB&(lwUk5ZaOIUI-g5~Z2Q`4?XmejzZTv~qu02)w?X_~yL63QKJz z0(cnAvsBmCf9uRLWvNh-=Cn2`h*k#uy0pssZgC`be}%`lER^)N(z9!@ea zWCWEUNYOBM7DH?diTV0-Z$Q)0_&}GrHkNStXx9&)fUQnG z1bi_;F%Dw9;dkfDU;ekrgCp6|R9^0H0t8<5m;6mI=F-G<41rN#(}$m!y)oxh?>Uhw zIQ?__ox1ldavjUy6vgxU8#ji{YKb74C^1YPs>^Ufozr@}Zi z^Hn(ZLq}uSj3AQ&#u!9}rJi0~`io0}p%~Ux0nbUFb}E$_77>q_ELk-k71xH2tneH4 z+2(tWI$+j*J8pr9i|xic2<=xm6eQKW;*ix?kfCEX2TmG*VH`MC2o#M&a^UV;j;hLVW-sfHS zJp6a97SyR#6`Eiudu%@r`=>8raKbn&=jDhBTzD_k!gmPY^LYs1ux3cK4_;ZPh?u(1 zM_at1=pEOMp<)z?so?25X25_>CXw}_&`}h0;o7qU-*@B- z^-IuC2SAvm7+76k1q~ab)0w4pAnHX^Eanx%IQV~j0JW{whepnL5%o?q%PsD>bNVNg zBc#-Fe~AdZ-p$SHt+3QrBJg@6uw-@PgRP9S7RaU|oJ|c<693*u9SDg942n_V#N~zy z7!Puj21*5IYAER;^DS(#*EFPz&N)9KAt4XVS&6QZD%#IAalsGHN1Ty_NMgoX_HjTj zr`%1(z;T^4XG**)ui(y0Z-*s;3EM!zS5K%1u-3r40;x8!^?uV(n_NfRWZ*0g(8=h| zdvN(LFYl!Nt*ZdecI-4Ts*ZG_P9ycc;&N2dp`kIRarY@l?7hQ%XZ~C7k3V_h*8ld8 zAD%j;FL^$8EpL_V0e*zk&lruBhb!A zvE!c8;G}?pdZ<8HctKkQz9n2naKz19AHnZ@z%D3|@;P`I;Q zSjYeKKY!yBfI(SPVbZjmP$lpT9HZ;K z-@Xq9T$7|Jh`5gW>;tpWEj>_9>VZ5V;5|=$oP<4R|5!OUr`YGX{V*yiJnd5U8*9el z=5ubw&~pvMMGX-{H$%hNUDX#7iAO~oqIAelsTWV}zvI+XzWmvD9sZrqyzeOr@9aDD z*XDirUB{j{CdvjP-wv@QR8_b^M4k7}8_J6FmgzH1?7PFpPTIqo7zLRU!lqt@lt5*{ zWOTIC3W`^bS$Sk#WMW3~F7X2?wG8F%gBK4q-cOB)I&{YjDxeF2lt?y#(Fp14vv# z+SzfR?a(GU1*;VNQ3VfS9H__LnD_WR0kZ)f-j6b8;1hNPZDKp+IE3%Y`IlZjAz&0_ zyc%WEk|ifTJ9kmVD{PRbRZ~C){SfWP$ZCTn3mSm0qZt{j>Wi@Xk^2GG!xKO61vlP! zr?d;~gK~R`2)zEy&FinS)L0_$`XTU;YJByLcXxU4RTn_1T6wzu)G26c3de~r;eyF^q+O^8Q(hWk6-`PHSgMIpBDbF?Ni6>|M1tp@W~T; zB^|1w5YF8`iL4ihCDGf8Ptk+s>hFF1AHVR!uYGRM-M5_b>m(m()hsb1D_CP9D3Mce ztSkYf&V=uH&2iB#G631lqDo0ipIM0+w>`9LgWM{3=&`4^1HgyO&sVrp zw_JVIO{c|i4_`O+N(2HtZJe5VSIKZPK!RiL5LIcBezL2(N3 zoRHB;4d)7BR!0lN>xh1W@Vd(HNDqp39ZMIEAdY&lS{x2O{e65s)Mr?1LP-_9`;LeI zi5km&Ek}S)Y%RC2G_OS96(Fz`u+NjT=68D$PKXN5iQtMQw%Kb3~x)_J}z-KYYXeT;n#JtSOTzdU6gsaH3>a=Hju{K09E< zWKil9rvDc`J|9&s0f-lP=O82`uq``rDyE*uVZCkELpPTUQo{*cg;|3LZh3*bFTD$K zQ6+I%_M<*d%EHdEC~C+lcTkT%c#lt?@wrnzyGfTU2{Qky^3FY{-Se?ij{RU4T3JO3 zkOGlVSVeR4>u~nI;}1LegdH~d*(QlR^34w)^Y{Dgu;mA%bWkgzBEAS>UHD)Z9z1Oa zj4E;UEDFOK5ep^B)J;F8U;8jdpKrmWF~k^TCdHV|`mo-X6HrLN(?KLi6Uqy_z#vA# zwdQ#bKSzA&bHHQR4`PRdb_8N#^Pf!_sai&~Ca3H?`D%Rt01yC4L_t)nf=6zjfmmxK zHN|i-j2-vg0Wcm^K(vUlu<&_0hNgortU`@$ilIkQh;v)-u^qK=d~72kaC}blURd5W z2w1#2+xlmpd&!oN*uz@!Mlfl&U9lprAeR_{!?RI3Eljz?3Bn(T0%=r&`6PUCp3hzZ zl72WhB<`dr(CcWkCnlN$Y@7!NfcFG~@K``S;HH$Jtb-WPKR}CZOcKMhFDSd0jU&nn zaDi<_1@PQ+hj3qmEqtb+|K|!zRoy6>H4Lmsp-}}Zs|FkIy(>62s)()Fnw)*^gBl=qKxLq**bZ6rd6BLpf#yq98^_ zXqRCLj3LUNfbb_|J1RvtF5(hNg^@Zk0|uaIU=&BZ=WS?7gINH>UQ8X+xloeO8c_tK zNHG2Shfrk(#EOL^4!az@Bih=uqwcy2j1!}Ey5-$S7@ zuD%XJQs?MsJHXeMeC^kanV+nI1OZ_T#20Ma=KDj}6w3EZco&rW+`adst0PzWo`SY0 zgzvTx=QZTdmh=VaCjvZ*COmdwU`Yx?r)x+QyT1E)1ermHs?`S`cx)p8T`c9k79(KR zV%tj7N(5dJ0-VgvZFfELE*sZ*s+AVN%XFf5$xglaiq zDksl^k$gO^3u*)*eLS*Y6)G;_1Q=v_P$>6s&en|Hvx?`EK@E-(ui>OF!yf5i0pl$- zV~uQdfb`s zJbb@zn&wKM2wB0qf?$TMI!Q;_g(YAmfakb)4`EV~4!J~#nh9>Z=q^+pxqxFUB!l!T zcGzzkyd~+9kVK?|jk3Rxq-=0YRy+71K97RqhlA}_m~IDSsZywm_^~;&4IaFWn3ye_ zyAr}>5~Z}tSfV6NSfdaH*ag915EVY@3LX!C@F}OMG?rb}*#cm{HHDuNnVasM{*SDD z#ryJ=!|yewN*<>b5?QTxBc8kwa=sH;BSUzv`0BuNC=v=`4p6fLgib*qX@bjfDlG3M ztm_#a#go_H$nnKcF-*~u)+ye1JP0}g9CyG$gTNQ-!1MgYf`|hrD&f{6mt2mqBzv0` zv_TLY41;#xx3V!5gEw)LJ6&+9O~txa{hK9SpgJ^AU-P8GlUPY7;bE2FJ-X)(CSRei~t7 z1Brr7I4uI~z(N2qD*kdrJQs*aVsZCWn=Y@qfp*=C`jgqzVk?o`Zf#| zRkez%{&W=*)Onv1XOQp12O#V#M$twCyBxMBQd58;5jz97BE!tPpXPamh8TEG&Ym08 zAtr6qi_sO|`SNE!_37i^b{k&CCL->WN9}*v55D!~y}tG3e>m{(-*NaAtkb_FiuL|K zPCx1UZ{L5ni)=PTS0sxh*e=p(9xxCXjt}sxM_^@eqqIOEiLYV)BMUJ&e-u#>1MHWY z6nh`F7jYVb*nr)dg75$!5Ryzqx^dOn*Pu%5L=0Mt{*QjoktooHQU_aMO?xV$Uc=>p zTf?9FWu_(EYxyQN+-5`Cly{ni=Vc%~R|p-Eg-^~y-PRytq^+r+yu}nyF$CIaqlomv z%dYKTuG)=PxZQT!oyXhGFPK`GxQdN;*#kpNhX|jhYZb7bcJW;dBrD-aqU9S4!*@kq zEPU(;&Oj(tE(JVw!woQO3q$Pr?xf6A@iCy0k3tis=HnKSw1H{{)CzQtRWOT^qc9#t zq;S^3h{CTP!tzIEAY#g2xkeD|2>L*xHwEFK!y%3!@H#jn!aCu5YFq`YmNX!A*oHZT zXoCq5zV|?|KC&xTx6WX%a$k!PFl(`GrD-JsuLuDqdApySIX_ks1g9~QfhU1DOx=BZ z$_Nk|@^ z)YQTT(>4Z!P>`$9rF9G~9D)y-05K2|PPjq#n)8BD=ibNckMO63H4<17-lN+$Z7_D>!CP%GQzVS$zZS*&`A1JV z?evq6*yk#f4Li{Ss?IBM8b_GX~e5a|8OMAHs;93o>X| zGVFciUXWN3e(<6RMgU_CDI`Mpi*}WwPMHSIdTg-u21q>#4rCzW5p-z4-aGgVSoOjn zs?r7J^9kg3z)}0L6&(QHXC=JyIdYhkj`m=N8h>cNEsVnsd+!XT4&Fw1z8r$gU9hBD z$+1nSdnM(LJMQmOM1WY@U@&#>eUZ@tFnr#I?*=jt<2g(cdmvZ@!X>7icQP14Yz>`) z&NbU~a~#i4pN?1r8aYhddOSAUb8FfUq)~?5PTB`M9=j8EIBpkAJ9;N*z%J3Pxz>&PN^&rA;E?DO!E-fk$64c34NYH)@#XjZ$3dEfILF5okBEe;RG(&U=P@ z-XV}hLGl{6*<^StoahZAM)kr1PIBND+5jFf%BZu2t_{btt%0a8ovn;wBS`q+L`Q*e zocI9c#O}~Pc?=pRhl+u97SBF12MMzP;zJL%BHM812^Co&i&9M6e+RTV+lmO{!eZ_N zv(a9W!nlZyUhL$kj3T(S;Bf6H{Q6KmC(?A;v@5$B4do6t)*sxE@^$@g5&H`4!#k_aH|~`E(cv zysQxpo|4om7+N|23v2mkb^R?TBXceAUFo#)Dw?V_&n;cSxVcmHvOgZ1@stTVLqQy) zZ{tlt&V_F~SOtr~5Q1=SXbfK}1QHI#kdzG_0?p}kg%lAx8m9lzpd;kT(zQ0ed+`tP zj?bTp!WM8ng7T|nrG zp~9LNx7~WXpxoAK1k74(U1?m2z$-vt>A=7^n2J?Trhsxz%Q?w6VEb!;F`RS-Gaq^i zRY@S8WWpI*L^>KhJd*J>w4(wcBDIC!@w*;GSTYb82<3&Qoik3Lxu)3vgd@;03P-}P zG9`W2#Wx`I6X(%M2~fUvdMbS6vF(04VAQ5yHkBkN=tDQx%Wp<4I1SW+&ZdaS^;O^0 zlMmbbic{Ws*xz-k-++(ZM4JEc<GpvR1nXq9;zKFnxVH=C^pEuDKQlg6Kjx_fT zX!xNnHsfcE)kDn#@Cr7LWBnHvEsH6Pk_E6aT!k3GAa7-`d^Lo)*)VPr?V5A&eNb2h z0_lS9kKs`H@hi1eae+A|C-yrbD-8OHW>QZxwz-x!VoH=tU_dhUm zSBVnNpM`KDf{+NJados97di+hQQ+ZQ?*$lPaWvuItUU3BWwz96sc`vzvB)?*bHDnz4}55%$SB^xZMVt&k9_s>ANyL8 zk2>oMRg#zI_<~6R7a_TVHbXR20VED3xmkwfRZj=!;@gq9Dlt(sh}M2w0`bg*gl^gy zv0-a4t!4?f)m-f$M&tk0T>tFs|*Jn zcQ97VD4NVX@hxY*!xOR`4PH07JkYd?(NGLI9u|&HRh}C(nU!I(1pOOt!m(05pJ7D3 zl6%?!m=}-15wNr+5Pru7o_FlzG1zCqyFQ#zhCyZoumn&6LkF9VPZhv=EakqIBEZ*T zEw!vPt3==xATV*_7G0NKdBZlIGm>yqbx{6nf8ahO5=9XvT+YAkl_Q*tIrCDN;UP@a zJg`lH-459gE-*0L);MWKSp>_U&O{#Ci$FNvkwq|eqls8uw2^z(6&8=*`XCY>jRIj_ z)G%T4oZUb!#3nmU#gMju*n<8DYIy~Z-24!i0b*E*LNk!oTp|upd!YEl2TuIh1d)-> zjW_sX|Bbf(<22MPN zbQGKJvN_NBFjx(QQ7Z{fAl{?OpXoQ;kC;mb5*Z8>LzuMH7H+~r000mGNkl7IrcbcFW#g; zHa5mW_#7_1^7=Yn!RCP8A`iY}_x2(z8+G0bsuF@Fe7{1pZ8%OuP$=I+S zyf%!)L%rd(p|k2+ZDLwL=>$kuL?_ZAr<{!aas@KJYvGuyL2#UM_NNKN!J-J`<-6vK z1S#L?N>?v}g90wWfj88 z)kzv%8gniGN%(e#@C7pzDv*x+(65aYd%b;sgiHk3qN*hSn;t|LxWpoV z=m$=sWt+|FmL|{lr zU8Wm%U2zwkqqsB97Ew6hghS9``kfV>cKA=cNIH=-#BwGoEw$5Vl!UKsyyC7w}7fJfqEg9va39 zAk8w77&V@j`&x>CSxfCI%_l99+R0}T-V>arC_QWWJw>f!+KNbAs9gmR|3`AH7p>V zLebncIF6=@fuZbW{~myIpk%Ln1v@x&)w>{G5K`-gV+=$ZNY*ly98e=V0i9BSkHEV=Ub@A=n&-8L#R+thH8ZHzfMkS^&@+98OEpGi1GwN;x}{x zgygTOz=e=KI2=J1Nk8Za`o#l6nHr3DijG~ZGrq(!*fowF zCBQ3<58nZl+kcI~8+*sRvFc0hB?7Mv0t=sC`axT%i;{ghQK?bb#GuVL-l=q=u*dHX zztm@5Bn5e>Sk0~JLPDSU5)Ef3opyPtX@2I&ka zdmBbUGj6$uJtFcM^*BXv3KW0a}VY5r5c0yZ-y86Y9&Vc8zHwYmWcxGgJ@*B{ICJ>Y>D=+w|c6 zYwtnK_2_`hs5WuHaR(s}h?8_eyMTlz;Sg*jrj7@hA+dqHtU*&+=$$+UVx@yAA1#|J zT;Tx{>7qG{P?b82L>P5#Ox|)M1aO@TY(#WvhXMOKV8%TUBWA=5QE4MnH4b6~2=@(J zMO8fb=#xEo`I{&+A(Y>d8;M0A@`!c{8QXGStHJ^A3*k z5K%#pU6!>H0kc+GRT@-F~@nH%Ql5J(;ShP6#i-}QT^f&*Jr_h;b zS;rX*BFZ9YxeQzEvMqdMVM!thC(ZEB1;acJ&Xon*6*a}tpFIs*9lamM?Y0e?#=|or z>X9lI&6ow(=FCk8!mxvg@N*6EG~6i0ZN33Izgxg)ZCuiaC+}qR&k59Uk_Tr`G6pJ| zMQ`7C=VeFjw$=Tw5Q^8V`+6dc?|kL6-$Z)|AUIJJQ5PK~ek#Wi3LyZLJFg9K6OPd` zTAcUL9CS0X@BA_xL*DV5k4M`L6T=KjS^Pk!Kl}PrvGnOh=s_0(0i}{**F*O}Ar669 zmAD7&1b_`cl<%6plafYcu+1*puv<=fd`8ZJk!dgpVB|Wycr~%6-Lx+^1-d5oqVx9v zj6j5i4#0vJ79T)c48^~!onoNW3xbhnZFGp0x?_^1Yd0|Ma-N!s## zHsP29LOZ}sL_qT(Bz2+V5&j@hC_+0dbz0VU>|y&*2j?KPhe{#LA{f5E$UMTc4x)$` zrK&~<-vgeO`(H%hjjnvzFZCO3c&Wcc;J-qElTY=r$7fCi3@35JdDX*lX4+)u?HT+S zgh;W%{JR?*C0$SoCsKZ{Aqbyy9xTwk!32bf)pJr?JZk}rRA5L7DnQ0r`>+qc2RT#A zLy}`uGtPsKTw@WZ9=7GlOG1&tqasY`o}}hYfz5W^2E$xhaIB6vX)bu|S(ui@N~n4r}eU|CSs7diQNNT~JHJ=S5C#Rd|vT?OtOuSxQ*IqQTMP zbMPdQm}}E>ALiH@g|ZVG(!$g|r-8m1NyGzTCn<{%;tGV|*0h3pue79r>SP_0NBBc&S|29Pb zJQ`we*j_1!rcoFNN&OwN_n?hJe5j=G2#yDMqylszezpsB(y5Fl(=ArDY`oFAsqcV55g;JT*xf^@|`(M4aM0rtY>gJnQHUKt@th17~N> ze8Rh-1oH5_>FO3EB=s=)$E4%g)1N?v^S^*!7dip8$zw5Q>y6O1ob-5&FbR4^mS*tk zQLu&OGqroMs`dR?lx^U@o+3}8Wi?|LLtJ|UP+(^vmSbiglfS` zI(<1@0_t%P_5}<=F(OE!8XBt_yeaSo#rAve%q49nbj3nfK3c`2kIxi#V48rRFMao& zhpV7G!RWvMB91Q*yrr`e(cXvvNO*@xs)i&hJPPY9Gei;3WBLF#6rNiT+Uh&9L=4BI zC}_CjGKOdLUpNC{c5BtL)vzHo&lud0%2zE~0px;+Z6Z1V!TFT7((wd9+xQ7_p3aF! zZ~#IvytWRMBg9l$c+P8Z*+B|rdtT7qD10|EAmNgR&oT(VLxdJdLeQxZ<@R47@Wxl0 zH{OKOf)asO7XiN1)rE^zR6UtS46nEsoRn;TA3P^baPk^>ehI23frwzukB8w*=*h$z zPTd5JkelYjR+9>r%z2?RF?vpj-UxO-`Vb5wN5Un7Zbnh{p#n8dt}&epW>=APRiF~a zq@Z}7@Mu^nigwMwQHF5BmSKltAcJO{NIBuNp^J?Aq!=y!>3@9WA4SMRtX$jo1Gn1f zx;?kud|}lJ;gQbB$>Jm@$AiN2IRsJ<_$i13n>dcS7*QbnV{~R?G~z?*wm?!qjpvX( zLX@k{LHJ`C)z5ouF6vU}l|hOOTkW z4}V@@{NxQlH895TD5!V$Q?5W#AP|2{Cm`m_YS~_B8FX#v*I3A%0LwG~GK+?B- zN5i=Z&x8fRPOnJ#Y=X?rpAycP0U&}P&i#G88M`khXtvRp za(#16XN8b(T_xf=eV`v8L{m#=&SP9;AR=t$;Ter72}C)0Z7^*ra`p-HUc&Wc&ul@M zAi;Ynqw|SdZOrsDCq9z?-RE3|yU)A?>2oV!If1scz4Fr{*G- zSm;UQ4Nbj^saI%wr>Dk-4=-bL8D@^@@AaW;=ff3wXT#72A>kXo&mkjWg9E}gl6&fQ9UClh3+7*~$?K0+t9U+)y)6GP0&7E!SsRQfZ730VH4&J<;DvvcIPri$ zL2~CL*t`BjFj(hYCy03GxhI|hII(qz8h{9AEKXh-*XPGh_6O_>`gNs%{neFj>785sHpN~6(^JGy_ zB-`=;Pl8>!cqJmb06dMGuI>BB_o<<75n+1|n^fhor)Jhe`+k!`~FA~6Y_35QkBEr8{d6UtILF$W&F4@9KkWx21V2$;3huF|X$ zftQWI6Hh&}gGeGENl0h11jcSW1qH&?B&c!nY_1qUh*bVlNpJ)>#c^)S5%qNgjIfG! zj>qqL2qtg_31dwJ>F5S<_U7dG_}veqiW(&RLRFYlQxBz%{`DrnF$(f5U< zr(-5hkl?_9X$cX-{uVdhcCX-NZrg7^jjx{fmMTGMOXkmpVQ$=diY$OYqEw3x*(<=> z&bd`jEFIV26_&tPq<|O^Bh>_(9a+e@2EC%Rgq7p+1K&_`2%@*Y_ z?H}=7jp+$TeD_QidK&;N{GJ%vWBHv4dLq_YUU%yFzJ~9Bq5e*x17O%L*lpNG`2C1E zp6R#T2)chT5I%CJM;>)pPT}SL7ZF%HD$UwqMrlQfz^j7*XCC{&BhN&}#zs0*DQ8^) zCQaQ8uoi|BdKH!tpA9_GQOZ7?C>5c()+=bUXW){GiShi5nFtY(GLk}PV>|A`#>-w< z+L@3;d>UEy8)_h;j!IV@oEIS?@SMaMjAFwbw!{c0V-?E?R`AsA_ahTm~qNFADW!36fT406a=Sn@0lDsS*e*@r_7W z4_<#a^C6@h5i}*mCOd8cjRasDkaR+yaAk?t{70X~rN6uw%b#3^xMi`;Hrwzv8Hn=9 zNeG)U0`V5lKQ*uOq(gmfJ!P`+9)zUMX9&s{07fHZBN_O3OyLXNaLY~L=q`4e@WVUN zr)JOFknc&%<}Z0a?63pd0F5Wti+6bXq5EO-l$j{LIW*3btTkuk&sP9^@dB}i5+ZO3 zQ8(*oKCD;T3JCkqYQD1q$8lyZMoRL}vY4-G1sNm#l+iu7d6%OVQu8@=r9dEm%eO0L z2~GfgPPVdZ3U!5ae;{<^3JnL-f3s!gDBW9v&~RyQ@8rtU!-Ztax@7#Pf@y zbg_KOXS2nR*|OZ%Vg$@uY+GqsiNH%nAOp5}cHRqB?}Za2IG=jXWgZhZ+XQO(x^oh3 zt{x=$L@*&57wPDbFsYIpCQaK4oUP$G8AeQxW~+w4=?tNngkKEw9zs%Zygz=@cqoYi z{B&H~t<~zC3EF^qSUhDaJW?(zY;(ZgNGU`;&}%AK_}EN3A%?Ow)H0@Xwl~UKJMXaB zEggg2gdg|Dc=Cw-_qf++Zbel*F(DUp@In~4Y6r)FNpOq|NA8(gUOejsbV(gT%m@T_ zJ!DT}MM4HQJ{}DRwk6D{YYn6GhjHWYufs*ZxB%TToh?THO4-J+G24P|`IwLnwn?%v zcnc|VOx$uqNKD61SSZx7QFzW3rm&YUTuM7dY#h4{x7=8B@)#)2vkjYK*~+0!27r1H z|5D3-`|fd;x|Hu!0p&Zie8IEmVn}T$ySvr{C8>(17G4XTfKK7H@*Ojb%q`uR&V4xA zs8C`lVgO^{x%OXh3B~yeavs~MO@a0Z2ASQWNDLbNU zCGOzc`2Vr@AMlnHRo*}RUA6Z<=iJ=68yaYGkfeejCd8bxm@vn2f;01sI-|}wI-`ym zP!t@@BA7ry#6XsubLvRveDg_r@2dA#`!+t$=Y8M*{~3W9pgH^QI#s)B)v8si_F2DG zt8U*;^&A}lCvcAu8I#WiE;0K1Q-%ik z_MfY(9{vBU2HgMbaJ|ub8u)M5zya$vZb=2&-lFA?cGaLhYZ!A0aVN8B<=QG&g^Z~h zW%w`?M3n6RlqXWkup$SdFYcncB~Hi_4Y$`WO^2-bPA*&MIppb2p<^A2q{J&#V_$f49b`b;o5!%WjH+alMF(G48ruGyZ+zvgi_A9j7`=`+D?j`< z@BF$IO)K+m&?WtP=?_dgtUlwKfUrw700*Mp#nyz%0>Y z!s?}~1clCg2xb4ALBVEMd`e6*c&*QdjazE7(IbEUHEZ7B&uXb&5%X9?b)U0#=^cb_ zi&~P>P>Sz`UMeE^rjk7=A@2I)GYYS}I43y-5>Py(3^Qp|`j7+Qi@JcfPLLB&7B$K| zMK7h2=p^#kmTi?D(zc_f(0{EPsEdE5luCC_M+sEljey=-Ty#PN_|`2kMJFtdTX^KN zh^GgwlXY{3Y6GPDj?~M7+poTi_;;XOVp%8)_r$}W(Af&|KfbrTLdKvqUAsZX?;n}icHBRPU7F7JzAS3CLgpfLB?XeqP200Nh z6r+$Jo_ux9B>QkRKF5GM9>_FT+_ zjD9ITiFQqQUVIgqe$WmpegQ+#4ViEGx4z-!@2)yMhCfCIlRwTMYBXz!D--Ed)5i-y zkdD~_{^$zc>oKS{5zuAaa@qA*VFWX#Lx)9s?@DwAL`sm}yy#4 zX{~|?ZAWtEh$*v-?q~}qkV=G3yX># zmviU6wYx<*MO-wI{F!$RRv-D4LpP)e6?i*Ejjp};0_t)(BiIiQj1a|gh1!cim22z> z`c4j`QyGDBOhI|2M(M%4!^c#nc!7S|iMfNq$x+fIP0xClCnr19M3V`QYh9yJBs6p+ z(C|ha9~@?mL^??{R;mFK?{P8dIY>Wo?CAKGor35XG^E>EeS_3QGp8Q7>$*Q;K1MhK zUXywDv!8MOJea0;J*qX}9@WzIgzIVG&(wf6Ep&?@%n3d^07>Ssfrbn}*gnk*$wYT0|8QwI>;=tMk8oMu;wQ9P? z3K2b~?*(QXpa0AwZ%aa+Y89xorjMZMn}8)Ir`kj*PE^=VBA{Ax_iBdHK`^7RfjTHc^zPG1w4q@dzT- ztrtX0^&p;O8@H2ME&62Xbl$OKpr$qf+KkMB;M{}#r+{WQ@#eR@`eyH&!qnV3#TQ1` zuM#|tQZy&4cVXVh909K3G^Yo4{!ZX;dS?^WnaZ)g$|bVIA|^*hDNqmHL{3B^9@_nP z9bI|6PkGBbIPM+qA|DdWa+Pb0u^&CY5LN%V`Ly9Bvk7GqAAd%zjG^WYn zh;>emK&&_I{%a)68&X6|jzL2Hc}sx}I=7 z4g8rJn3yh2wpz9)SP&rN0&{m;EC5EZ;ACtQCbo^nYRnlC1cF)$?Ot3xC3gv>ENd#j zxbNoMaAwH*6R)6p3vlyAmsg?BGRxTP+k}O)*xGGE3A0>3W9zmPLCLFUTf3o!`|gDa z?4vkCLBP^1L@Tc1rvjNP?ai-#={5VAHlJ~z$9Q_(%UnLiAWxVJ|Whq9JF3wI5~82jbajx3xERg zGOeTegk`rZqu#F3=LPNpv7q-Ms2}D)YwRUsqUXHX5dbE1bDwm4;TP?;5U~)yh+#&s zG_2pa?Sql`gGtYQ)>A%J6q6)zSUCWRm7M>R?=YufBnqK7T*`u3^BHOkP_u*xvPrc= zM{=2HAcouJGE$RZCYhsvl^P1oKv51C&p8DAP5@shBCzO*$1wZgqnNw zas&ePP9R1DBEV~Q7*LZwGQGozq7X?0e|ggp@X;}VQ(aw-THN)|8=OUG=lU)cmHby- zcs`m}FwG%JE$p?|;_i~&hffmA-u)=ofP0k7*AuU&f&a1w1kiTh^824*mYM*;EI>5h z^Y+-CTn5u{^b3f?bcguw!MzNzQ=OWKSvJr|*NI97HuJ_-h4N!q)R_T+B<3=PZS59A zyO3QB6lq4D7_ljp!My(07n8{VyI@tHQVeXUU*YVGOm*vSzgvdWVKTNzx)4h5J5%Ac zFMIwc)nTW&58h|ts*#49N)jlvgEZ_<^D>L&8RsYLD96T{WyE8E#5-K-2>p&iN5~-* za?-qjI4F5>(xRdyHnF>p&VUv=uBU3n%0V#oG0{7kTblgpTfbm*`F8wN!QjB4XyR>{ znSjegA8RoC7$mj`+6v(Fy)9eUXQ>&)`pqRc*L zbn|Lf-*Y|vPGG9&Q>JkG?EYcqYj?eHWFCv;5Gasb*bBhPD;${TVL8hS5d(utLh0bKRB`|HwyVdzz4cK-;A z#ebJsbJ<1XEmFRql4CBhyl{99!}WeSBLTT|9@o09b{{Rfd>o z{Ltkb{ficm69mpEZ0si`BAB^lFG0pGZSebfa9000mGNklzLLr@`${m zEJ5I#1fxCLL`CN%^X%Og5nN;hnuEg<{&>|jfd_w0o%q$yd_V6_rl$8IXill#wu{gI z2@{)^(~uM3%3SYGuJ_4TDU}nN2I;8Mk0X`FQpwrZXy7%^=%0kKrgrp@v;$ce(hg*b z0%URo(n3AjN%hBn>I(fg3L|ZM>T(1!h4M4$q1l`Qj70P6a~U<&*VLZs9nMN4{!4*O zkrb1I#oD{+plK%T{mDzK&(R(8HCmev6@fW6$ z<+6ZS)vV7dmn{ahQ>zJ}AjxXguHJ2#WW%+0@au2ajala z26k%GsEln|jT+e}l*u!WIpRz+ivw14kM)l@m**dQ^x0)+TFc-y9gFHFXgx|{g_%P% zSk*#Y4GMuvcOn;DXL77O?a<|jV~?WL5sGOoO&W`UZLzNw!qgYlmqnYrJB|rV(*oONUs+Tm3LqO*|{tXa2G>N0%vd^AblZR3g@1u7u#5cC}DtSBT$SMn9qY?@_vU&AH8`?>nc zDJbPJpvASE=RNmnH|?{}F6TZtE%kc+Piw&aPY>7|ucv|kP7U0B-_j)PxMbCcq2b!_ z5J5W}N5aMxt3bxznPFx!TLF_mC4nUe9f-F`m5@(N6XkZXT(K7B1QYRh}1#B`|tbxvNMS}%~5j;O4Y7axtY`F%pLXQrLRP5Q&SWrAM5DYz>~`hTe$xo6arx{ zJxA&)(}!90q-FFJd6Op|wm0qOCY8rYU5T03x+;lp&{_7(KU;HTz9!8pc&*S)WMSgv z1^yaJ;HI#}JxNOQ`Thkk;xYzth{F_2mpxB#LE-Gsl?O2 zU>=w{2{gtxZ6kG=+SE^V6$lA13K_gz4%k=w_O#+K=oHA^I>CTXb^a^7Xb9t2e(QahuV4}1XT*QD=e7IQLXbEU3)|5z;Kd|pJwEfPkMM=h{5=Qk zGY2cj@B-Az5l|-+P1QqdFOQ5MoC>N75{cL@Zl&51OW3q>9fJy+*9u&krWT^}fyX6| zp!OuK4+=sLRF?;Jn^}0l^N#w|anCvW9v#dFf03Vl=ZpO4`(NaHKl%#aIrBumb>>$%^~^7G+7G`f zm2~iWPlGG?=ILMNJ7=84_kMgLKUO;P%#-=aSts!`rL%tgCGil?U!2BStq>r z;2hl~K~`44;u*bvEwY@5gh&$;YAsaLO;XXP@*9lN^&6=r0`FiF(`4}Cj@{uD)*sq^ zab@=6?$T+;p9tJh2s@4krH!ov!>ng^#Z_xN& za!V(g6XO%)YgdzRSWQQ|=xn^7=BAa5Z(PCljq0;a`RFRPjjv+M#QkiUnn~?2j;D(c z1$o(G)9C%I+qjeso0qa_+cLI|#(pap9bL)T_-eY{t)%kOoGI+@^AIGzDW&@2?XqxS z`xig=>DR~kNx0tq7}0>Pg2MpBo^c-J!RA_JJy*{UNS zo4|!2Fp%+7j=;go#D{u@j!p@|NY#JSsx{h4ibiG3WSC8D&{0I8Z~i>>(z7B7>+fAg z798=56e>XRc+n(6_krCP(Fz{z@2E?z)|yQOoi!8W4TvhCw5J{Qq<=Mw@Wf7a#lH&p zyr(_szIr0$#L6I`@*zmmM$F@6LwpWi#elF@y75e}-9kOCfH|5vEALx4Op?y%SA;XS zK`?z_1ebE#?Y9%kY5E&&p7pf-`N8R*<->pTW_Dkgs(!nOr%97i)FqT9W?prrcm&B} zL^&e2tZQ8GpJ#FL_kYRsn(Z|Dhe2|fsa45b#{KKpt1}Pjdiv3aUHdPe{K)$(v|1MO z5H%E2s3IK&iHfKAEN2h3r)A_!OeFf4< zOo>;&9GB!G?%>icCJ;xUU4}LwJ;(vDs1wnU^nQHmXyi>8kx{!=oQLte1r zmOF8xLj*xaI3_PcEQ`%PhaW;nQ)EezUBwDytX;*?z?tu`WbvG9*-5WG7R|lR%C?tk z%y7g@et_m5Fu@0E2*F~tl94#k&dUT69R|j0Vw_qW1!NAL5Q* ziKyt35CPqMq`(C7LC+PP`XQbY1g}N25L6Uzn~}vSck$O-{bc^vfBoLSc)@dyx6;u}l62bIPODP5F(ORbhhl!QuGMdlFW!GI zs(v!W)0?(Z4{=B8#m&?wgg)oXJ$9MjWGB6L?W_Hw&q~c&v2CeN$b?CcPI?R>5P#y- zz4U`pT$jG2pXQbck!sD7guM?rQ0rIX;~((}5ZQ#FHX?~~@3`~cRRS=rO9VK}DXmRc zz&bKg@{;Et&QE{vMLzi6SJIbF;B!R;$`*-0 LwiIcb)aRaW-)RR7vJjF@!pfQ6$ z7Uf=Y4-U+Jmxv$oZD!@^r+wzzAAJ8?|8;PH?M5@yQ?K1LxXMG-fO@ei9c7YGZ6WT; zpCZiP+B-V(KB*i_!*M3y~NI~y5F8Tc61FU@4!Od)-+ z+-oP9VCWJp;^OrX`sx%h7YNmGe&>{$@LhY%W3gom2U zES!AuKmXf1-ul{?9r@(F&kalzc|NXr=;hOAi0_jCyi7Wji5${o8lOy2x+&#NN>lEp zDOF!2Ey}couXU?b#=Ne6wKk#Nh4?JG(xwT@y?6wtzQ`#`rz#$0s^{32wJ0JlIU2#_ zXh@bgSLdMH9S@qg3u=+omhEQVZi@-#@X>(hC0Qb)9-Eco?S$Mi=rrce#fwh(LO$Il5#m^g6!9Ze zJmXHNzFR? zUCWq8LI<%86xxletj0L+SyzhOl;LJ0> z!kgas90vMYblaODw8W*56Vb)%y+KZeq4&g_+JcgiWGNlJp6{=4000mGNkl_GkC!9KdeR*`M8>dw`xr zbKJh{_MDjS$Kqr6VYg%VW%1MZWY?$f#o}k|C4PIUUhU6TI&MGp*`M8?yB|x`Z;76F zIeZri=}!xzJL)3mRj+#9cfS4oZya;^B|kagU;p((S3Sh(_qspA8t6FykMIKYhJSc8 zAY)wHym`xEg?4h0qX~Fp-k387%we+Q@$bC{8F3X=C%Z0V9|TH4&@r@Nfj$kd=hoN+ znfg0sXsGB^*7L4=??a3fI6+1OCzx=8DYQ!!*JvXZNA}uLHik#E6E)&#gDV4@R;(sI zn0Q(2QFM9kvyc8XJMm=#w^zR4>35-Mh?g_urJ|USlN9wFryf+HwZoiNLAr6$>Bjrl zQcQ7NqSJ7=- zyR}uGbowt|_s^d>=_mi|GpBxcYqNWF)!`w2m|6G5FFxY7lTQ5DX@st{A%==(B=hV1 z#i^g-UElf?Z#(s0dE059$CQ7Zw|w)Tc-uGsk+**1qrBsk5A*I* zKEk{7{7$8JsP0{-{Uh%<^`pG~)PLe_>ho5m6HfgEZ#nG~oN(I5IYIp1^39L)CiOev zq!06slmCJDo%9cUoKnZeXSnzbLdT= zr-7(}zE!JN?;nE6UJGJ_&_)KlJ~ATUh|kcTnyL)BMF7q~F~4fH%ZL$yNL}ckJ)2xz z%EB|gX$z)2(m9KtY7o*C1Qsk=B9Kv?`nz_QR6A9e`5INcL>k!-&7DoDAhLV`o&C#6 z7@vmtARYohMXI|TIB(=9k#=WJbBFudro(+y!4EV_w zb?+$UG$^vq$oyGaL-oTj(^?{ZdQ*2L-M%z#Q3N26%Eu~c%pPGydzy>xU&eLY*0HKP z&4fZaW4=vGJLTlESY!lzMRw>t*g~}36YcGi< zw~2qMUHPC}JDSh?-p_yk`j?;Zx7U322fzO9ch9}#sgk{>4iD*;|Jd=td#lDQc;N}J zVVRtlRhF}^W^8IWw)H1$8%o(S;Mmv~*gRlt>UV5a{gytJ>z<9ZvPzpWNhHF z9!%Ien6YIjWBaTITZbCzUlX5 zRjRH&G^mmT)s1f41gay_MS${ZQtotoFf@N2rOnWFwvQ5btj-b<#5#>BI+BFJT^0&t z(B>&n>v$456i#iymk@#*tfyfDb!X?kq?P4;POujB88lZPKa{i{l`f=9=Mt&J)EIA* zQfgSMAZ~+$R6A?&B7*45X6VceGb3JcEe&JirZK@&ok9_VSz60Z>S*=VSUNq(7{b@9q=`HMmbeNnatlPWcZ(tKGED44U? z64pu=OSiRIwWY)I4U;TWx_kXNcW<0#*|rW#x3;-YY3b%B_o(ikO-=6I(&paHEtYO> zbI*nrcdeV|?hQ(trnzflle;!5ZEDTbss0|--LtV((cUfkyEnGEck48%B50MWHFpVw zj=b!_%&XVu(WwD_KOdcf^`z=);Lp{-sx|8@g7gFZg0`DpppA@oD$I$%Uej~5U=cWw zQFGPS)RFb|VWyVS)84ub#||)$G^&hA_Sr$t z0#-G}-hGg^+HVFo2n`VNq5S36Nl zSl*iA>eb7*dtxi=iWU=A>WD_W{6xv7wT|0ZvPVCE``54MtTVpEYhQj0{f!pB7{yta zB$4py6Yx6F@!nfNTXljplH3Nu$_>+vuYB`|PdonYAH3kiAN=})i*8){^2y1tKqCBE zcYJr$K~tATq?bZx5*_O!_k;LWjlt=D>Qj9>RT-j{4>8s0XR14(e2|IG0Fz4NsvB?h z6VpuHAd~GOI{66g?hw=JH`y6tqS?>1=wtthc7vAqv^s;dMAyuRndmm~X&?XRRTR1X zpU=JWV_O66u`Pa2`kn^PKfOoP0z<8|&I&HS{053{NiCFQa<4?Let}Z& zKrW|XvXOD`^cXiN8gSRxMz)hPrPQ&4GHHueaip-FT^A;N{2$-JcTW8@Z+OkK@cCAX zLeV3a<3y=R=rz$>BT>BM=#;8X`^@#vwxw$)%76dz>CgJeKmW%WC;s5f-)`&VpVs>z zN)i4S?ylqylD*Oup1cfn3x~@S=Cv}eJ?RYYIO7itPxnE$U-RuJ@Am2FqM_7BN1)y5 zG*s76xsPtHq`FddOr)d}8TnL3XF8*tOvol3(Xl8xdY&+~JJ2}3?9&lUUCUIH)TUgS zJ_~6nmU?OD(12EZ=a@)u7LRWY3~BmP)2+e_6lA9aD5?+w$V|tAfWk4ceH&i8bFk`1 z_=1^%Gnra+Ifb1AoyiGIOkz^yj@#rclrsNG#XA+n=5+#gF|kM?qpdFB^p#4C#;g&Q z4df_nSsUrZTSo(k$U^D%*=LUpW;)o7eRuM--(I^lUGUOvgv*k+dk%7fq`IgLq)JRX zYNRf#`e5_=O{74YK>zFk;=f4`0`}6E>LV?xv&E!mUlfs&bI$&)y4U15cxKmYI8h3G z^=Vo=k55v{MxCiFVO3{}8#b?IMR$y?p{-*9Pn(Y1ffhLJ{KFV~>{jC+|KTm1@%_*8 z++zbTofwE>#Qldar+N{!S+jUVEx$_F@Ejc)VnpTtV1E7E^5j%&~xy0z2_OB ztl@QJZ$(O0Bn;`8ptx}v{Zl20ra5cEQ{Eh(eVj70n_8dSSI|F^6T0BLP9Iu;fb?pb zquL94*G{AXt?*7Xo8D9&&l<2!r<)+78I3;C>PKwEwZ0e&ShA%)rlg`W76SJs)FBNP3)E?J`*dkAF>3wT4>LlX7XlPiD0HSlMb0jVWt*rtO zcsXKuEn~W#vV3wIcWz(L^5#}X73!Z-k~^SxLXjlb)DCAA&kiA&1o*$-kzELw1!B|) zFWD6V7%UT3{N~~c$gLT;?dKQJ=olt|4`rrTDwP;|{RQ+^YOabHnEC}JQ*@-EFvWG> zIGvkLJ{7lW1C3VBs$X8fO<(;6^)(ymZxyUM{|{XE#S(@+c3>BNQcS) zUH%@$V@d<=F(qwJ*q#RdA2culvx*WKDZSDHjcBu+LcdM)5kN5I=#rt0 zWrhDe4ik-2-fe07Lr}YJ^$lKNqugodSjxyF9!}sRkAtB60a8&{w^u}=5XeLapmHe2 zC$;<4n34rd#=090*mtkxJWj49yX}6BFLHs1S6Eq#BwY#+|NqQBU>5ZRO*vO}fp(m1ZEkL#pk zfk|zmSGC8ud;2;z6cdcnV#?aImCB?;X;WA-&R+Wt^O?_oh!aoxCk{S%K6$ZKYdJxd zlzQ)wOhA0;ERnQ{<)urE#NPP&*WGRwCE>q#8FAitk(VlW1F6(Uvy1NpGEzDlx6>#S zoT39kU>||LEF5vy?z`%vI`nM010CD<%L!=Seka*g|FJ*WNHQp1uZ}i1g|S`VM$G1CpqB??f8V+p!bPrZ<(xtp@6_w>Ijsd{G5L z17%L}V{ahiE90-aTo#QTm%vy}deCRBMyV32OPs^!1wmWI5WyX_E16QFU42(|v7C}1 z%cx#KEmZsi!X_UGwFVvWGVzMPeAu3BszLRUKr{#p=gn<=B^DnKX|LTDUl+<;U|HbI zc1$@cBS>!%<)j|f# zZ5k(_8j1fmKv9sG)=9LnFXo6pGf-^AcOxed|J8lBZcNratJ>RGI=PW`?NP?9!z4}G zIua-qGcVl)9lwPmpSBk#p7JsN<0~I#-vj3|Ik}#)Xd;er7UF1UiA zh3ARRB_TvWkRoF4w6m8D#W_bJ^Nd0S@!1Oy%nUP=F)c~!jmiNid?D}viw=N*9+SzF zUDT)SWWW?Q&LhC9At_6AD5`VeM1F%;jVWoTWPxO$A8p!Z#x>c}whXK}oYR90X($WZ z4EOUmxdw*P&7q8lBOT&{GlxkJQLjPzjB1Dg6M^0*p4@fF1{2cE5yE3I(*OVv07*na zRD^bM^V}F{5Q6#(1mn_Fee_%{cjOUbP0Gc8xJqH`8Vx-+R4)#37>$QgAg+O_Bvd0_ zLF?rWa`DO&qm{x`TC%YmXW8@yHu`bKY0V`*F&Deu}^U=sVbB z$%tmABLVR-jS^)|D8lPr{(_Cb7=OkkaYU_8=k$IC`HMmCX99|9n4C*XGy3N*BKHz@ z$1dNLBhW{uV5VaLD`NgXzc_Sa{Sign?le9`a<`zQ)Mm zPgb{t-Jf)%oD0K*_Avs0E;G}oSL)q6lLp+*G@0I99={q89`6={Sp<}5e4{2T%Lt}d zJQx-$gxQHpFf*(IV{kJ1bpdw#kAR#@NS#AHA~mw;Gjsxp2oxp*ESrdrz@h=E&__sv z;HxUDn;FBiXUSnON`;{N(i+G+F*SuqD%vbdIatq+mpd*)Dm^DA%}RGj5mM<6Jqz6A zc$t%Oq^h=d+9UhU;?;lgMp|VHC&E$@lfl70=~Muu+i=pNlFC$^ZD8-pXSYPd5zwU_=ZH-^pc^&i(dHjzcsyDUe zjB!?|p3x-?0)xh^VVP$Y;zJCR%2suqX}{OEQC44$GaG<;xC ztNnetGj2r>;t073+=5GV!eh*$h)X^2w*YnXj1g&y!72K z<+u}`%Vai9NA+o%kQRZFq>te~t&#c%>9^{uwN!uw3|$`QN-XIROwLwCS2C+sClg&< zcg%rR#IZXMT&DFjwK=63I;|Oj81X?}O6LXVo}%WNPTOoQwzD}OWg@gG6bQ7DNqZMo@dbzhCw}5Cj_4 z&R;+ifg=Q}%S?0_eZwQ7QGb<9{Swui%87G0$v1EI$c`RWx1IhY6C}-@JFDvyp+P#3 z1_|0Bm#(D6BqRF{^QMo!jk$*`V7s1k?Ytu}XWHQomHpgv)m<#VV+Cma%uMlZnOYVE1k zSL2A6SIV6*R&tL~u)aOXlp;EUNbkk?;)|}*@sWU4?^%4;eBQE;efY2cnLqQAe^|XE zfkYx@xOPE9PEbwnY^PhYt=VB*&PJJgGJ$)l-FnsuWCH9|pzo9?qF3NT&Vab6?9{I& zC!l5-HO07U-qG(ydp#4D(u*S2-x z{COchKVFh>Y2B=m;VnUvFGC@SEVb)z)3PxRe!=0q?5|!+cXr9RO`~W5Xbt+yjGrKS!o7yI5$+=2K`;${am_3) zj%l47rk~i)N%^LFGgAq*X-S-6YBYhoGx0Z26{a5q$c2D2Pa2F_!hKt|<1N+O<3!Wo zyWc*GG7sWIX*#&K?quhXC+>3&f95qjTtmYJ(-=-7-Ff9TEY9lmw_5Zo>eR0zr$(ML zSmX?J+Ewarx9N}Nyu(1Z&7ksrFczpH>apIr)V@=)TXA%rd4h=>2J5_ zi@EwlzJrQd4QMRIZ0K&?iV-g_r^wT2WbvVwb`lM^on#)pX*|v~kQdqxIg{D;(u7q; zE0F_GYDXV|JX&ToV5T;kG57(iz$B^H@DW+`Y;q9H8J3v3co}&0GAIS!wVI4`RTE_F zb7cC}7;hPV^^fC3pCIiYK#!s{%5H%Qq7{>%qWH`i9#&=S_xMP2%_jO9wM|}H305Xu zYY~QWp7!SF@|4#-lks|sW||WcN7*hJu_0P3$2sE*-(|zC>!^3?B&FeklGJEQNsJPR z56L)he%lNA$4|bWzB!60Sd(sIOeqLIp;sX&>L8yBGvk4u=!l^wr*+nfNGgw(hWP2V z(+w)26ttM8F|h>iYLv+UquM1e+c?Hlt0Z&v+`LWsZf0v&Z$r2*H=!EQ?X}0kduPKG zf96$7*b*e5nMs7ey4!AN^wyin)~zO8vx;QRN|jeBt)RAkIkk1ml$MgMT}rb09a%ES8mOs!!L5Zv6`C8&*YvI&&m0FniXBPG@7~<0p*_4|&UiwS|d&i|f4dZ{Nt?#~s9W zo2JmFGDu&p>zMCmbK7rk5-}OhC35^6 zrPb-`+G(Q}MizxS=~Uvg^3n^hB~1p!M{AyU%d$J|Kk)7ot}wHbKmWRF zcvgQ4$%8n$qU55}zr{r-f0awW{#7pe+Lve2$zR}-uYaCPzxjFocaRTQEBx^rU*Ym^e2L4x`4uize)*|i;qq^&e9D)(^qXJi zl9<%zGSOao+E=+y>G$71jYPT#(VLa-2ZsixbqaPDy=$k@z>aUlPBWk0L>{La5Wt&k zm1Zx)F0fUBBu!$5j|QwNQI)-b*&>YqyE64jf;oK^RA-S^xiCTI*W*-h!2}=>9g5gQ zY^nOHw~0dKSZ8L$7=+33@akg%o~|5#YAo@IOvH)4zIt>30*|AsK2!_SjN7hH*^M`T z;vHmr4(O>Vz%I43chtHmL(Pm!zjp!G{p@mVG9k(3z)4eD9fHo=gYOc2lWunl2OK<) zZ~x#wIOy~zxjCjIl30#3F^yGp zUUa@SuJSlm_*ri>WCkIKccJsunbrWJFgXFL#*2wdQqiExC^`|ev=NMr;uEQB zwM>>(&5x5?`bvs9$-pz-^lV=I{#P+xo2Hd?A$3^k7%UoO8@l}Ji$CO^%kHFJ4B+yF z#3#h{NSwp8nKsvCy1AA&zWqh~%YS@`bg(1vpCbO!U`x83q{dCFH*)8OZFFmc+O;Qm zIRHWHsFfFmZk4U#C!TsFqJFiI0n-{eIc>S32PJh1H^{i}58QrEs#k@wI#+O2kmp;e260PV6KmR^lv&L6v&^z^v*ar0VW5?l_lgk zR?MXM?5g^LM3Iq1?TOyQDpxt(QMR&65(-?TRYW221*zWT$R`o+|D8Np99Qj5eVz0X z<#*DNX@-CIcklP{xtDex4Y-|WD!rLJo;4ugHC-~7l{F`pojFQ@er2@+0%h%EwEGtz z#RsV?5UEW&zRK1)M+|ocwGh7)8(nrmwjFbaxzik~q z(Ru&ms!9680BM;D(6j(PU;-Ymov3G;v_8#8{{4fz`fV=|z)#ZDdH=K(Oo-Pef%3J> zSF>iiOI{x&7sQ1sfftxnsurE@su(}S8etolZZ!mN^F07*na zR6$~jG-d|oh2A(Oh~{c^qp%XZIFluqyKv z3{y(t?(a{AGS)dP>PT%NmSkXKpUTLoEITKgrRxcugCuFIwy+sg?; zV$w!RrXBw5VyFuD|Nhi-NGDV33blvaq!}k2dAxS6PR>H7yNw0A_wku;e1a!F>i{Nf zlulYOrKOn=pxrk%%@xa5v&B1n-ynr0U=B0!0-V-ESzKQ6jU}a^q#84)f@w^FW(0A8 zf7=bSY)gx~HjdNGhL{dD+5-MOI84!jz2+}4d6tcY`kc>w=4Sx7 zJDZ1aeeG+fHB56bQcTBFUh>Cah|i!%q0BUVEXO=mS&@`dW0%rxkwBGPAXh45dtwyg zk&9Q?fzMJ(l}q)>RbM(MTBEFGl;Y(dNSaxEuj5o&I)=FQw!2jmpL%I$(STluon;x8D{z_6eaNzKw~(ys8t<8sSi^( zZTgfEuMh!Ud{ry{K4!66W2z{AajfV-cmYPNbXA?`M5W@)Kq~Ky_YEOr*XN_pK6`xG z-RCX4{=*yliuuzKu%tZmjsf3K-$cf5zy1sEyWmE$P9I58lg3k=fKT3=)FKtR4&8DK zPkr9OeDPbKVsQ65t)xX)AUB~E8gq4SQn>&6HJcbu`xFtV(N%rWTAFF?#KozM>P$&1 zjG0kg%0o=SRF~o{qi};vmi^qbeu6dQIh}N<0{+s~CeHhR}iqk;IH*l8xyo5^QP&VPUugU^rl@l3ylc7iE zG$uiQr6?!64JN!X8M%O&$^s1I|M*%M5a~=gs@HBmmj1T`08V`#sFS&@o=tTz#d<^h zB^t^jD~%u6Nv}IXsCmY|dd0eX&i}*Od-mEoV9Atrp>3T>C)&c!vJocl8|9oYpUL`L z*3t;W3i)Rw`VsgEObf6=D>X%Kqx|hB-opnz`VOYu1Rd8E_?w)7jP0SuAMd@NyEjkJ zt`E`FZn-UxF0?+OTI;BFX0E7hQ&H<10kvw@W55a66S_sF9q}-mrj0w-jIzCx(n$vC zXxm+clx}GhrPBzGIgJLX_g%d6Th>pK+8{nysTWA^QODl+x>tVI%;JbVm`iTYGuPa| zaR5sYQ|-!)H-7fxyy0t~ z{TFzHo{#^=mwEjuU*`BzmA>&s-t>(x^5$=Rfj56sc}(&7)GuTHQ;2ZoEZd< znKARD$5N2%ci3dLsfG|_UgMT-N4+St*HVj~W4ThMcz6{ac#iz^Sn)-lL9}>Ns5352;28qJ+=17=iPI|`)+M-YK-+;*-QwX z0$2BShKfP%yX!<-??XY7mUR6X^LB6W`O`kdASxL;b;mXFM9>z%3iv~x z9E~CF-`ZyB`f-gR;13Oo5Zh96??jv6)!!-Vv;S_pp_($3E<5o{-y(JW0{%FtFN=Jl zc;2(0d_gtNgZ(HO3PCQ0k203*@suMNKJ-wMz4lewn{=OjVXwXMd+kH9x6(fQkgKg! zeRt123Ci<5_aa}i7u_X$(%oY((e6#DHd9LX-51+yPuxCxk%%@?|3rM8c*bWZUg_TZ z)3@(IJnC5%3q(1o|lgVi3L8di%mtv|7yStD~!yxxw_0m)=OX>oGIM3QD(NR^RlY`|NSM z+8^|tmtsd!{Q|!Da>Q}Z;ojvNS#kF!*4?{>`|sY!+T~kWfB!gZ@1J1Z>M1s?n`Yy> zCR;Xk*s{LE<_&E&ZD^_7X3N?Zo7Ohjc>fgZR*tcH*%sEU9A)Lwt*lzMjr*5xXVube ztX?|Gnq^~3%B%7y_pjPcW9~vs`VG>5u*5o@mV3~X>veq8X`r{5kGdu43G`qz5M-`n zKd;?(m3uEE9uN*-@k5nCsUlN_!!T#62{?BCK? z&RV6nqJtaq1J=2}X=i`sCv3WT9ev#fS&?Es>cXK_QYtB|4fQEr_3oGQ?vK0`KTXh1*1|^itk{O-H&j5wiA+Awe&!7=3dInw%-l@$I zk^#2IkpKPL*xpVk+z=g~>Yd5N!L*)|FM5K4cCnJYfq?`P@;sCwUv=+#YRM4Q7-eZz zcI~g;|Mt7htou-wwk0)4REsi4K1nu!AA|bVl*R_=U!T)hm*ZEo$yap9mnpxuN#~wv zI(JVgZ_>VJ>VKzur>gq=zBa}34#kQt{{AjujdZ>`r@N{{xu&2{^7oe{Yav@_)HbDb zH+dTM5s+@<%$*zoD2(2<(`dl$G&AW<5zpoeZK-6{RR^lB4E78l zQ)OTTfp>g}_CEFz0$}EFPP|YOuUHq2J-RfESO)bA@d+YAh#wPx^XF6S_!^3q9cL? z)6U;%C-2L+22M*5s`c>FaZJu4jYGO7F(Zy?awNQV_m<9L?ba^K)=tn=B%*Kw3iXS3 zA!<+h zjCoN!3={0Jc+_aXJ!&NB3DVQRL(o7pnz4J3;Y1H+79TNlMBtBgveYwm`V?G1B#DW5 zsgtq@9>}U!ee@h_XX*q5st-!0jwZfpuGp#tGlAOwu29L8bc?b$-y{t^7W z*9yvGGl5fxItHzQ!|9-oRV3FSsytAEWLk}wVSnjw#c(VS8|n#43wp03R z$7cb5P+x@_pw+U)b7qGWs}Hz-yYM$xSo|l8ruQImfkkusrxy;^?&l$1-EJ4tTM~kt zikRmmuIb5|9k$$gD}Vg{x47s(zkzMq#6T<1XhK6#`6_i%Y8_LQC8ba0{`hwaJBj)l zwHAyN9=2?yZ>pd+Q8Lmlaho@jj(12VOZrF74uCZ?0p-p4_$Wu zJ?EUe{H7x|_M4w@=5hgc$ekP3Ea`_G@YbPnI+`f-FMv(SKhLMyL4XdvpM9UrZf9gx^@*FW8$e4LCMTu zhsUOp^s8F~=~f}Zmnn&MvQzDhyOwWZtd$aU-k&SvUzQF8a9%(c1o)+ZKLph&1)*K! zkp^QVO{j$;Pf81$S8lV6KJ*&kwIz0;%W=Uv;B65 zjd$L_C3i-MA9b#tH8K`|BE9&jtC|cVznH}o+my!^pGf578R&QPM#jIkl+<9@TL0M5E~Wpzh~t(+J2C(S0q5-AFPI1q!X72{@VF_0l$|+Q0lqR zGs+W%;`d%SUlELMCo7ZWXWu_Zz}Oco1PN1;cc<(F?|b_-_AngnI88BVZq>VHkm#Lp z0`*if6wL|ZZwDqCcgwo_$u#Foy3M59n5U&Dt!M*v$(`wym%l(#KqHjgcKL6Z9$m%# zcicpy$hr2ybD7$07*na zRQl0$Q$6JyEwD62c#aZ_F7C%Y#gk(E`!SA9%0No>U;0BPVVk8DI1WRxRC5N+Hsg=%bd2_l$j z(8FWzUKzro+dG?nbl%dNK6>NW1~=WG(!rcBovY=UE%3A4-RE6rfB4of$);-5gZ8I| zCM+QGa;CHtAe3q`LI2_!fAeo2xM8?z+~;+U=gpu3ye%w?Rk;$pzxU zQi1>}k=k4!E+1y%9d)Xt5)MQDLq%r-^-??gBpINT6S7<(|NGZZo21c9qlSboX8xzsh)eg?D4e|HV2ziIkLL4Q5?g}cxD z6c5*>p>>O!;XGK^;{@jD@}(!r6cl;LLLiZRN#Ut`NMocx4nTAWq9c$MfqEWPACP|q zd7Hjk!sM1s)YPvtF{X%uV{-FW`ZV9Bjss>5_A$PBgT^gM#M3l}w1mYU>Aa8(y?f`; zfZKVd(woWST?0W12tih>%JpO_#9MXIki}w!9>|Ewu+7lUm^a}&vT+Ct2x^14;}H)~ zwHU>^nDnF;i1|!2kyhlYiN%0yYa9VH^+Wtcr(0yzr}9WG+Q+~xUAP-V^QpItt-9*G zyRLinD%YmfmsuBQnbjE%0}PF)T>9UyT=xZ;cB!VFaMYeB zUV%!*S{Kt}qQOkg0wKf6nP@i??!I?D+s3sf4ARaMyxL0d2m<~{8^qrW=)D#`#9U56 zDKJFsp@f>8i2(-<^O~2KPdhqOo}xsrROwRZi|0N2X;;k$oyJRuhkPgT{gC`d(7bi_ zK_W*g6tO_ap5(=Fi)M?VBgrW#Jxiu5vm&PI{rbT=m)e*ts;&Th*OwJs-cb zi2>OVh=^bo;Xrm&1~il&S$!Ncb?6cmiF2wB_#`1@DV5Eaqagc_GWJL!Dj@)ftA z`ows z?6tFxd5jJi39cyFfAOwJBA=DDd&`*pW z#W`6CNsNNXd6_eRZ;-x9>Ky!pBe4z&$G? zG$ETe2iJ%|SIX!Sp&V16Xq3gGdUh4Kt5SEUTA>uWm^p0?QPTKwB1|2l;Z%kOs8TZX zpz@>lzAcQ+zO1$7=jSZD;p^8=ZkRXLpV3NO+7Z~)e1nm4kc~I2=69$3obINAdfBI4 zV-2U>sYy45&naC_CrmQ9DCI5x{9X=y>CtSnNr8Vs%R??8+cIHXa_v&qje2}CL}{4- z+bKcfjJ|H00~?O_KlLd7_W93dKspX`%6#xz8;^<@38E&ohJbp2^{dBNw|0yq84$qN z2tHMNs@#F(3vvKTjgKM$s!+WtsXaOYasW)ptF6pSLZ`#7b4Ex5^o0f&{qhn)f1Ia7 z@|B5olV?Bk@Kbo0u0#&$pIAvolfD}Q;v~;_?d#vm$jELiT(}R%KJ7)+I|+@hDGybi zH9a)}cU{gvy&b42RppMC6Ogiacwb)m+_zH8`?X#*X4iJ*WyhUB!w(XF!cODJ6oo6b&nLM5~AoCOu+L|-)L3gN3RuE#VW=1tZ z7FEx>@uDeeDM!5Fc#`?^MQg;LPOZio^Z$L)?c5y{N`8ORgBXfYJ`>(=l zfT4VlE6%)#OMY+xjZUAyq)sC6Ok7GKWcB7D^>mqJ_oJ5ZwtxR1a}VE@O~n}9%+VD9 z`*fIlS50uqRrfN{Y0&j`^%d}!5JBBbpE_D+Pq_*2f5y=qy?c29b|| z+ABHrFFPqKmTzW!v>;1{<&f1ymMKrPUXi!SA<%mvP$Q^L$qQT&A0yGqq*^N{IiM^= zCkG%cy3`yR*DUMS$Tdblyn|zZEprN|cB|c97bBlLk9h|lOf-F{pL_-JP)Dp{8No@+sye5> z#CoVcLq)7|Fg?qV>)B8@31${$(b%RY)jitoJ3<(|q?mZw(o>{%)T@LUWX&yg*emgVd3`F5Rrj(XV+X$A9GQwCBPY zO*)C%LQMca$aUAR;HF#G&@TFE34n;ZbTKgL$w@t_^x9~*c>i;s#V%RKwCXqIIbDIj z#U#*1z)zXT`Didbp0i5eUvx8^^=oZv1o5l@UUXjcCci5P^n=z0r68Fr9zH=nUX^?a z(IH4gpZUQ4yDvt^{DC~!1wa2SjZAQl!)Yyj(YDvV>cyWhv-onTJxXApu{QXXxW8Kz28dnucJ_^V#cn3KhoL7XQ8IX_zeyvww9{)fHrg_Q#k zyQvdc2H26Tim3M4oV7_;M{WxWV13rd55N9>MFtG78ofqjE^j{R zko~XaVZ3U!MDL7-keq0o_T+XNQqZ6a49bDhL5qMK8fMgzKxP7S%jI|FIOU0Tq?;~| z4yhF+s!Od)E%l^{CreA}S)i7A^cW#}N2V{5#7bi& zy=!ODfZJIn(wj$513{KP$WECVC^_^a!*1wD&(WyI9eN;8%8<=F=s+y1G2H30>YQ`A z>qloWtJRU2a}*;Z(CAayWB?6yAzof%Ab#;Vjuqmw#zbRz;-ybh9#LPJ*UltA|XJ~g-{bzw??-RT5{_iGF_8(goDe@x}}lB`G} z_oPm_lYV4Hd{WX$TFigK0^a|*zh&gmUDzDP=?J*WkYVLO^&iq)_J`YOP3l=k3BJgn z@I;`E|1P~TJ;ChmGz0BP8by~UE?!6-IOpo?xP7|A1`8dW)m!b`7E7CEFY@D(xPt)>p zthTPv>`J}%UMmfaMxR$j@7_r?ps(&uGLzmk9@iSEfLLZyW*uarWZQ|jY|=_l!FyH4 zvJ$4(zOSG0U=#|mZn^0uR$qKETW`3Ln}6{O;=ixX>vhuEv&B&ybYqbt$|8^`0bW(& z6icW9vq;FFE?G^2Xd<05k*J>@f=YiPdISq0g!;Xm;#D`STz0|Px81b=vTobPlEk;P z`z>05;j)j~h7P~~+K*Xw*&Xy14brZW2sEQQ3T>t1FH-uNrzLN}*_Hz0y_DJMb->Mz^$jcw++yUpbvp8GW3^Ry?^FK1x? zMGHuQroz?jPJt`H6q>GEo%Teoo&P9#%d`vb7e9wrDBnvqF9*TUkJck-jZFz9uXzQ% z20h*dmH4nxg3c9|nt<%pyuT=|>Jwc{R8dm#SxKZ=(9%g6riJ3P#n zf=^yU`%noO*s^5}XZ-9me)x-1`2H`xu5>a#IQtv?;G9$V?k`T_d*__Y_s;$rG5`MA zC-MDXevR**Gn0Q$&p$lx>wNE*U*`wsep79yC_hEdU*iYAJcToUeJVdZ@02Qi?^o)h z^h44A@Z4DUO-?`aWJ+rjLg}3O&}byxEKAov%v0{MdjvHwW4|6j0eVCCH1IHKAjsa& zuri3{5RE%B^vVr`SSjNk>j!4fqN^RO)9!BF)mPK-o=ncb#Lc%*m-#IfZe6hF63po< zqOQdKPwWU-{87D=BOwr#fz$xROS$eD+byKASf>y5Gu7)>MZlLrB9$Jgd)>CM`>(FN z<%ILDzvJf@UU}0`ufKiSKFzY`+eI3>Z7eAq^UHoFZ(GZ`U;G}^%eT{4*06RdKsJJa zJ7`*^LePZ{j>AyFOWyrTp8b{=Fi~sK4BD}3_e!ZEsG&hg4ebXdX)JQ^&P&!d1n1pglVyi_rqSF`a(0ZXUV;;0Dp(v?xmGO?U2$XUf zf*beh_j$Jz(d z_%hKi)ALf+i$1okQy$ZX$rWsvT*kV|`&c`EulV1`_SOcxju4CzbTn|}5r<6n_1VgY zdCEO@kDvzhnmvM}_lE9i;9=5$nGy68*#$g7fF6^Vu}7d_6#yXM@rabHU%N(uRL!L{ zw{ORHJ4%H>MQ5LcX!4l1a3Ln355W@z2toA~e;+@^OKovfS2+T)P86auj2)y1g-~ZD zwF~sDYBH7d{6Bna4z^-j^B?~1lb^isA3t^C>F@vh&%ErTAOE8L@RYN-?5y7S9 zV<0Rl2f6(hmvF`Dzob4@)46;d%O$cGaF$A%oKHNRq(i!>!5csNF7|rH6WCIW5l;tj zbuu^1)YiZizq^IWtzNtIL40APCJ-$OYU1TOO_KH$A9=$|dBFjD(kFdLJq#;9a-Y3e zzGf{^)$e-lvHY*+K9hfV_S1RqF-Oo^w}~|VtpEYPg+!p7NWU^=A`a>sv|e88Z*k4# z%tfB2HE{y?Dvv~}N1*Qub(Ir?`q6rU6SLKN&$69N@5Cbrp~9a zPfl>gna z=v(s$OVAs>r-6q-1G4Ed+eQRqbOjlFnRd)Ml^ptjX!K2xErV8-l}A7TwJViA0)0&C z9Ux6o?JiZ&O>`pEx5@!^B?u8J<2du6=jZ?kh18B{eYI1L&ptk?-GjyuTt$li(Ih!* zzrX(WAH4Q$fBD5f{PDK^H*W9Lo9ztq{b_eRxNWzrwu`^|!?bhD01`p%zFK$r*M4Ga zF20R=w?V3N_6VFox)ZKa3J?l`Pun$Fc-Zco@bUMNEFNTgIZdu8i5D=F_p$oEQLeh= z4s9F%BK)=fYb7o=E)#dlD=J&VVSLtQf*|WH1)jB5i zG>~P?PZM^_5{_1cU~w%IPp7pp5O6yTi)*AjNWWECYvR;5Xx&srS$M5*P~HXeL?91w zPC+bUuB8boJMoA+{CPtSDCG>6aMkawBu$4%^gbks3;5ih@TOPaYGz`_!+MElc<(#j z{3d6L$D~#UlVU7*MFT=iQFi&8I5`C_0cVDDL2VW+F{BPquGbzYaf;GN@pzSSUhO3o z>!J=+>!X9AdQ`6ZYW~3t5{D0-L}wDI`1kj@^57>Ne2kd(?wv>jZYP>cZz_*-4TKQz z+Mz}@m_AI#%tzy{`Vdh-IRqI^=r*6{s}&px&S`hlzH2Y&!}N;{tk) zDTt$z45WjqPV9)6#g84Slnf!3Bb`gs$B43pNTdci8a_7vPbH0Qm)y4O#J~FRXWqDK zLo<*K(N>thTR@>*xzkQM%TwH_=dy2~!}#4BwCnGyz+V_3*^RO+utf9`{L^WUeBHBo z(O(|VXuZv(cB=@a&DTiEA#S>AIk(?%KQ%@O3JF+9)e&l9)+pN4$2W8Q(NEy7U;P~X z)THQO-L_G_e)a{NdhYKdH-;3USvA(=>J4LTlA_{2w9l1~DD6FW77_?E1L@PWN+#iq znV)K@rQt%+A74F)NC4Q$o7DSL_TFz#YPAeuAQDMD3@y6e9h3qg@37bIi^SEFl?lH& z>o-`bIm{p=37zoD7d_`+`ER?+KoVa} z0l1{cS-`3kbFXJF`k*?L0?`q0&XZI$C1OaDgzDKz5l;1qGn`VAIQ0)9)}?yU3wem| zdixu$n>C9mde=^+0WI%NHJ{#O9ja>S7|MdR{<4J%jRw96MNh@U4q5du^32{NF{;-@)g>f$pbEtSNMES%KX%`|ded|M^6x+SmeE#XKI!wFQiflE?SyIC;0a_Tmw>WH zMoo@D&DU`PK1YH{W{<~d_uY(uG$-M?e{nqfyx>T-*c2^S2wD^AsX;!GaoO)~V$0eV zsUIY0e=KYvlaBfl7!Uw2ET{O}S3Q?EJ@ZK{)H#2UETuG2NSM4YB1}eCbsgz{S`NkM zeta(f@`H2v*nj?%i*LPGI)zz%873OyQ_#{VNkl!F*4jX&>TS?EO4(Y2oTBV7f0sGz zd(d834TeXCM5~To{gq0uvOKhqmzcu;vquJS;xn9$uy)x-l{3(@6Dl5a%;A2)?AqP@ zH(h4d`tn!*_3gXwKC;Hqv`|b-$Z27A%Q@P5W7`hj4rM+i$vXkx3Z|qS7uuNGLfLY@ zY!S*P!8i39Ho-UbDo=vy2-B(;Uq6kB4li0I@u}KMJtGRVivV~#%Tw$Fd=V{eyS z|D*5if0KH9Z2u1pxc{TvEA}+-nAU)g249BU$xsuM%Ci2TJnja0;F7JU)nv9AwXDXx zLl5KNSH6bbj(s+Vy!=&ITBBdUJ-&Q7vZCtcF(Jwf(5tgBMxUxtlX#e^Ld94SG!}vj zBABSo1b(v6#J<&TRCUVZW;U|W(|_;1HG~5{`^D3~w{d$u+%8iAp-(Ie+VD=(DJE!l zw$aVUNRm=uk(0zTbwvac$z3Y?9MDe!EkDJ`0SkD=C*IG{;Y-+}3x@k^l!{ao3X$A>{hg9u^Vu&t%pu6Mlp_IJGPl{dcat*^KyrnjD;{DfCr z{nj_X?2jkBzc@;7W&+m`pe_x0P}_ue;7yzhO-Pk!LN$4~#|2j1BI;9tC{ z`vzf1!0apDeulj=sa((`{-k%J?Eeqk0+g5D2 z^0$}Ww8$re-UpKS3tnY1$)Y9wyzn(oE^(Bq%WFA% zz2InG@v-+aHsTo5(YJhr$c#qO&x)Jw=lY9o!`cmje=7YY0!@?(wYTW+Oz^5B_v5qg zdbyl{+4KRI-noL$|LB+a`Y=n7qsGyUfSS0d!iWAD#SdQZh*-T78PItJmunn@KTx{_nh>|NNs?+Zgu5UFqB3`sCBTbNZ*Bp>(X;pZTrR{^hBsedC`G`^G6B z-|rh=|M)&%|Juj*KIO!J+T-gd|KsjoKj|MAf9<4yTy*k@F@1E=Nhf|};nz<5$bzq* z_|bVMpY)NDlTZBU@JT0rbnvTR{&4-PU;2moSCqc`<$oAH<8cb!Z(gP?(nt$ zo%8JRe&jUZ9=V}=Blk4$@M%ChY#~ArFa&{xk06VQeN05#E%Z|(sL83tl_fWy{R?Il zUE&|KnGo$Z8T}+l87d0y{_St6nIrCmBN&J?&N(8l=m;tO+JeI)G`rL)Y_wNc*rm#^cC z-~1#W`q(>p&)>d*|M==h`RwQZfijHhC|~lKQV0UuoX()3G7`zrL3Hu3t&L?8mh051kUHU3}f=^mnJ2)!xP{pL!6lJMJikG~Jp~y#MoO z=Q5QJQMiopsU{;jVtB=q4&;Ov>NrLOSKhi*y3Yuclhh}-Gp9SwTVHk@3S_f<1xM6hkXv(6R%?m6JFOsLBD8IbxboysdWx=A~bQF)-Xhe zFK;t<&JeyR83=VY-nT|a870UAaaCWV=ybXo`cZiIMCxha&(nauDt}&w9(7Lxk5UcD ztcOZ8ClK~B*1|9zfLb-G%_^XXPC$_HFSc)E{I**e>a=J$qd!flx0=*8ZDQ^9*JA>* z3jD<=h*3*@5N|Oe2zXSbVxZz3pwyVvfGVRtYE-5N-P%&dM?L#kj5XEs!~Jo42)qAw zbmH4Ty7HRO-M(pb!QJ<*lb8v@Y}(~G@A#WH@WMAfn|z?n=6nqGzxbU5Ux`|+IPpA$BeV{FVPSv#?f)sv&#KfQ&G#U_q?=7GH7jW5I^ znrm)pT4Ss^#aPiIB#CzR3B!Jn71!R!jlaHudb2^@H?Xd!hLQM!dfp@*+rV3&^JG5r z{@1h5NJhWF{u1rzKYsczxMS@mQNnPe52v40A^yq9HW7Cd;1Ac`&G#?3mXHl%h38ez zI*e!RIfq4cn9>@4@q6b{X8i=MaooY9_3%o;0^PDhtPsWdq3d}sQuNPh6jNOlUy29Z@s&f_CWfkurjuwX!XsD>$ z#c>2q>Y_7dj~9OvZK>mhpmJ6JCu((g814{)`@>}G*%vQgd(l}p-Ld~_YBuFluDj&Q z%29EeNRc%8(7*q!U(?dp&>mk@u3MZRxM1p4PeY z_m@#mYGiprqnUBXA8uytjjI_@$UpO$^aQ4PCE7Ko3ZD-Z6MW=^7xA{|J(+p+l<`i% zWdi^2{q|}(9Sv4&+#WT=qTyLsH;{&uEt|)yy5C%OBVYaT?ycbL3m z1%o*xdIuIQRD?jzocW3o-ENCHvxiV%fC0^I*)_L8A$LtH9M=x5BPth~uX^- zYvoF6oi=G+$kuxzT@ZbqWgPU9moX_oNkv;%ID5lgcav&|A88OLQ#pnSf{#vtU?Pr( zt_b`ps~gpLvC8W(S|lnytTu6Ev^I_+ot@`~HY z8*}NpKJHmH^QYu@pErk0{qt6rjT^TRwRY=WOR=FvVp}J1HPtyz|Jmhy>f7h@v2UKk zl}k60*M=yAqtu#e?&OL(bVHZj6!KrP{}Nh7QzLt7()N%-{_|SKMJIiiD}HniSvSSy zN>d#&NA)icf*b%ZUWpc`QHy-riaeAw*KCnvlOf;fPb(E9WE@iiJPPlgNIebw`5MsI z;Lq>W>(SG|qfG-IFO&a&NENNM9?cwvV+NQ5-ph(74ur^N31)^Dpr@s$rk$M$wA4CN zFCN+)bLcBy#a1UUNNc15jJc{`cJ(#5$V)I45h4PG6EAVc^yB0#nA&66%m{k+;_p>g zdU+i@^y`)o7XM=7_HTdp4_EyAEo0q*iQ0(k_$-vUPlidcPD!bwjb>+@*T4UbVb#?3 zuy(_Cch^O?asJoNX8Y16KKdayX*4D<>BF_QbJPKg=!|b=$-+5kigcvMZU|hrYy+)yn6`HG?XG9l`Ypt3 zH#q>l)l!JvvtAB>sdC?a_QNIpm~@Rsz%sV95^i4KWJ57PyFNlEDp*dL39)l>d=2(J zbbp2xj1V0Gr-i6VfLUciv3w(^|Kn#^cTN0{jA|ruS~9D#edQWO9yFkN3g6Y*h^cn> zd+xa_MH$2YCD)$!2kLS{oH@y3BGxKb>sO*zt$OZ#^fd5T*MNJhPoO7%PXm<(1U5lN zJSaEYVX$SZO#(X2f6gYnN@(;Xd|x(m~Ll(H3x92)K5aMWo#I>x()2 z-%f<}V`Op$oQ@GBHIkl{H{41in8wJd)e{Ua;O{bD&Wke`vKrT4a4}Bf$M-3wI8_nG zyOQ z_&9-?s01cKBcPCSRUdeemw0Daj5XhI-fgSS|IMBEA2OB=StsqY!aMD7VKxe5uU^X) zXa1Z_qhx79Lx8?1pSEqIlXl~;uOR3MASn~jPCl`e&r2N@ryW62 zf>21K-GZh<{t}D%Bg2wUbqc?aPirSHeazPxexxNjP|?Y72|=ldbJ9AMTDh){cRC?w zc-MI>IrISX3`*_f6D>fWA|A7*3jTQN8Qk#wv+3B9T5YCR#B%aK8o(1C_N24I1RW5*R9v9r-4VA2BLLV5*k*5#XM-ICXAZdbyrBN zCgp+@8GA5ON#KF5NRO<2^_V7tK;x-zeH+_#4vl~<&AZHMH5tA49<0+W2I~M4f{^e z{@fB9N@`(9Abr!>zh>n{ms4vA$OLqeeW@MzqWzXIRpbn~e!AOR0`r6**}U`vl211R z<;iVL>h*q_q05qecbCsp;6;~rI-or2G6=L^a?C+|<>T)lbf$^GxOV+!ITJ8XpzhLs z0lcw#-BzS(Mj9!h*_894apgD#5=JMc8R`?*x2B21cdX96+napv-0KN0)wn*2P8k`P zG?^vjLh@v!pM#!y1U2p2J61~1UPm#Wxw)r#%U%5ZUq8?IvNh=Rf}4hN~#rb>JxJU-3p8#?{+86 zEJ8_a`oE@C@QUADamNK`U3J$hHZyERV-}^QN$Qeh#ImxxdV^i@gR>aB;~pBMn8Ms{ z$N2H@7Yr|$OE=1tYpAXxiV@WABxw9aznH6qP&%@tMziQJG%|=i5U5auz|=peqw`(f z_3GnTltQYqbB>LhQ(W9pxlWIkHV`bQcnX9Rs-(AcI@@*Y2Z<%foSP18tqVt6<=&;`t($0+eZM3Kp;a- zyaZ-3^Lnm&sBe`EsN2Cf@^!~Es$I0OkF49puUbKS{W^TNjj68*eAE>)jj88QrN|LX zKM42@U7{mCi`XPj@FlHQd*-*^_W@xp|f!-HOXs5z)2=g96bV23|NxjB`czL zAyqjgSE#+#SEDQog5>uCR2RfcvM0`HO-#@SIO)Rqg3X&YB29D1{`+bdEwGdfW8*Ws z`~CLZ4a6tv4AF`mo5!Z~+}wEIw#&d`+@a zk`Wlz-1|3;@|(|miTi(h2}wIZ*Q?D)#KS}bzLGx{L)1TLmdJ5|d#<^GItgW&v)4Ym z6XXcgB;3{K{f_v@iA-x16LN53uOKE-O=3;&>S&e6!rlIxba z79N1NGf62wMOQHtYMy~V>KKY^v030}0EY{w>%4>etkCs9yJ`@eH#BG=2p2D5VA^$!ZA0p){OJ z`O{@a5U5+M20vnnNL7$20eiq)4u7q}2cb z5CBO;K~zTS9Q@QLGO~Cs@!7QVA8@d%OK9J88y9{4t4!Rrj7-jr93n*p;@smz0?~0n z#hJMU$pETUu5uaJaPLa`aMDZ8`~`E=7Ur<558-!XHNr<9t~KG00dA@yn?_i2+d4JJ;>lk@WSVcLVMwWQiVp*?h7m; zI>k;p>+dN1f8?uQOIx9TZHH+T1*5m!O1^C?MXOCFn&<=s^^ad3Qyw`88>#A?o5=-& zCZ1jnM63tXk5lx(bOeyM`G2{t9}h?U{<_syo$-h3U%jq7$fOPUW})svo`DER+sC-@ zjI-Dv5Uh1`5{0sZcG*E=&9K#20xZ;pD33YqbiII9De6UflGp^*ixM;GL4AYt<&|=k zRYjaXnpjzMNmSuP4+-nHOyhuIYjf1zb2;(T|5!Nyix&(j0uVG#$#koWd>!`QeOENN zs7-T+faAQ2Z{}Z5{2^uhr+t-E6{>YXvU-CK1;e|{<*=t8iSJA3Xx*IT=+jy(kh8Pw zyx;T3Z+?eT5r9n5h7`l9d1+$RNW>cAI+^;JCToD-QKs;;wolSf#3YeE3q=7;9@0P# zO@;qMAzI1l%~6Ed(}^Ea#SDM3>fJpJ>=YVsJH;$|lX%=~zzbTU5@hQ!GbKIg!KoZy z@(2)Br9dD8au8rtbs`hBKEVt84}8w^m~0GycFlbXkMCAbx#RqEiGKhn%Tj@W#{^Vj z%>&@>gbNkFn8ya?u`cp=q6G&68xwds?ZEr{6<_E7_mW(8`&4-APkwXt*+0K}`5qIs z1)Z@Xu^cf`_`34es!QF_ zEN04j2fqsXYGfK{IsO>+l2F@5u+# z(#*YiQZXMc0&}N3Tzc|p-1gJ+sCA93bXY+py4Xu{1lV#wJe54e0hLTz37TVc07MO< zOmfY1q8V2N4X@)9Sa#jbq#;w^L^O^hOsEiI_*y$j#2@V(XZi#cl_Xjaw8VbC z`~MpOxZ{pcJNxbpA3yob%YJaj#$r*cHrr2=DYBpX(9M0L(_!f!uL#$ieKvk_ikil7 z+7YL6QoPE(4ArouWD6RbC}#)~QT1wbl24E)DLke=5=HcCL#YDC5|b{1`sA8JSG)dF zdPKWpSLCc+wiFa;5PR0__{)9AKIKsAnPbhiai;T5u2qD(ynm=QbXWaSw-;=1E2xuxE zaRBW~g`TlQ1vUZ%lNTXQlmZz&BF4lkhRvNe@MeaY;RGh20rc^}y(WadD@Ip-<*eV` z_Q|#F2CZ}?X+?n~Yu)E=uruwh`{gg}j!Q40p-_KKfF8j(j!}i}1>lHpX^zE9_LOLW z=$IfmgY%Rj$0;O{X8O9<3@>mENl9=q<%Fawk=umO!L;iyeV1I$k1yK9bN6_z-x=GE z%R6|1=lyHfOS`BK+_q+v|Mi7$vq5M6wJag=9h@0K0IN;Aa!odI;;Y=^jH8R-R4~a^ zQi#)(cK!XkE#R={JRO@ez(grIL{gW-u{f!*?EDM)?MbK67ypKTOFcR{2~Ip_?vQ45 zO*{6!0S-RuXz`5>hes06RyR`$d;3ir^)4pwTVKH*Tls%JEP$ zqHD~Z4ULA_gjl0wn3;I|@3DDAuioH24Lmdr^xou$roUeAM~Mc^xggstIFUfI*C7JD zc79lp0XHR8Mgld*JGKWo0zq`9(7&%YIN%x2!q;l}Jl8I>a+X4`_bqhj4f3v z1@yjAGFdc966qi-NoGM9%<+R=?8Of05Vza zSPrTKC(|7SUIJ7Rs<~2_3sr`okSD$HC5)EhAqt$X^Tvia`;8QlbA+AZ7y8QgU>a4teTRIqc|TxbMDu z!Fx>oecItY|Ni$ZK4c#MTr$;cYv&G4h0mK|fR1mlZ1sBLRZAVt z5`wGqsgus;lrw*as}G4!iWfmtNf7WiCI5t?6Z=2?DJ(qnAjUOjtWQ-xOA!~hW&;;~ z`D?7Z{2FTUpD(t%Xd91{4iT7}ctl=afV}I$2lMQAy&KzYH{^2=EXtrY4<>rkGmt1c zviDx(F+ziS%2Dy{oNT&FpLYM(opU~^7hOwWeeFO^V5*`zQ#9P1( z4zb6PN7D%jsY3k&0*PzS{yCX;+ll%_(3Wq2PZBz6@0g=2V9#Tl#z1*Ykxr}$Vjjo! zas(2LMD&I(4@KeSaHQo=uUon3l%HO8>4xsm5k>!8>x5L21Zo1FT4$0wFa0g|UU9KP z)Ll~XkLTTqP{;&6)f7}Nl(L~=j(Wk1n78*nG<9xYv|9w9;}y<-`3K+3$l*(9_ZzP6 z@O_@)C(LK)khu&WI)_<@&1TM%=CR<(3s`*AVs?AV9<;L#p<#Go_OY*c2A})tzY2G! zt0;i)XcsQsOv?d?A&jh^k#_=S8EZC-OL7<)9;Ot47r}Acip|*IBC7wSNID48UzsLM zd1-U*2v2I#^(-}sQrmE)%ACkaOI5mjR*^fe0htC`}wA$U)E`1c91YitQ3dRF1Wy>2rU7&Dww2RtyjL`fS%O zAa%~q>Z{?mZRF}-{)Dx+-$Gr2n|Az(b9gy1rFi;a8ZV_Q(4DvU{ygOcFHu;34o%4# zf!9TF)$X?In>_6`FXZ0IQ8vjbm~400)|zDH^k$Y$t>?a}bu67;&$8w^mQJi?+2lG_ zO>SW0wCJbDxkq((j<4XEFL)Z!nb4?m0u&qQw#c$NO?d#dG^5PhlyYj;ZJDAaU8H@( znxiSy4rNlOqp-TvOptDKf&X|YSa{e$9Q>STkPkM<6T?X{@t^qZ?gO{{@Jz1!_7Ai( z?@$xpM7lGrTa2Crt%Db>*K<`iz#MImJ`zmwU;7^4Gd^m^bCq- z7&rd@LdNb|iYW?!bX>@ZDmBJ_Pku6ST}mAh5IJbfn49>DOuZlJyElGM0}ovT?xC~j zap-B_k=H;lgtP=S4`J`FNk z{4}TF5`0=`zax(3;A4&@uYRLGAvz*Ow}Z(6Fa(#bWQ*?-|C(V-afMc4Ov}+27vY%X z7*h~`yCMbK^Nwh8#x?J8^_^5$e@wgZ_3a6kj&ESnT38m()JrrnQ6~}5w~n<)1?ZF= z&9h|v_9mbD+Rs?FW~(Fyi%tuULSx0qNn0{?8W{&a>**{$>2wF{fO=0OG4Ey!Zwov6sx=#6W9=C0c_7qK;G*SH+81 z(pNG?XK&W-yQ{^p;3OR^yYUvT{mt*lNU*9!(-H4|pLm31PY7|c;sN5KJia>;L6p6_ zr-8@526_&_V}A{MGpIBWyboRoVFWW7cUL9T4muUcY+1ch&*%~fO0xEOFrM{>w=yB~ zU#jezZHf(Rm|V3IIvwJd!xWnCBni)W+dJ7T@NUVGXbONgX$SuFx4nx(<(V+CcnTmi z0754!Q3M`A&Q8%B`#_BBDv1kJ27w}ST%z#fMZr{VwDN>bko@&us z5CBO;K~!x;!(u_l4Fch%t2cAORrlf>Lll~~mmH<~Tb3{-M<$s)#E~yJPR`b@v<2i& zQ)`H37mc&w%B#5K%O_GST}jO+BtDQO31${miH0NoZ347r5U@C~q%rgp83i<5rzbFh zf7Jm|nu%Hk(MRC!iteBzj;we_`MmU0PPSNa>)o2M^rv}5CnGc(bZh;DkP_EHoQU)> zpGo5R2;aTodm4B+G~gZ%COsZK4Ls5saAtx-!({BMQ~`m}5I_tHCa?R=dDK#YC8Z3z z_LHI;TD%12@1`AfAKEZe@3y)0N8iP1R~*CACO|Ln?0M8vY4#0L8yq73+xtX-mMWAy z(HLN%cH;3D#e^*c0b1-+eW}z}k03Bp13}=g2b{*u1Z-I-c6HQ z1!|VJDK_3uck4#d$V`Y3L(jRu?cirUi;i}rWwS}&*eJtO6WXbl_^if}FMKIp;pZ}f zjlcncRm_}ZhS_c_ z1f<5U`yR-_M;*hIcGtODyv7MJS|G<_{qm)(S+=Y?ODAGf)zuKGKrA88Bba3rasrAX z5nY3%lQQ3CGtZBZ<{8K-D3uEBdUG8YbVXOjTw`e{oaDeN#)5Fi{TnAa>GWR_&-jtN zrMBtaGEhi&XyP4#caxk0o_Yia9P<<=)l1uYoa%=p*qn(et~ljeEWPM55;+6bElA8T z(S=arO#^2sUGduEsH1q%8;>VCSW$nG28|P>FHvcpLGrmctY{#JPpmhsf6U{Wqq^Kf z**Bo6&ipc zxG^*FslHs|Lv^WDpyef#Z%=XWjn{C+ug}4?rpbbkDKCfsgF1^+y%X(JYlM0~Pk72P z>~_Et$Q3U4&Q)}od5Y;Vmfv|BQ`@$Z2`HU`1d+@{6cqRyg?6&Jjsap`2-LkI06|9r z^ZX!7e|Z&m{Nyr5T6Iix-aCOFl##AX$yFCf2m(nbK=fz;i^*~RMK^HP`B#!C@*~>Wgt#4KIppR-|(xGXLsvO4*UhAqgRUW&>CNoouk`KzkSAF!Xxl9#7 zk(6B^$q44Ec6G(8b6gvfe$lZ`@P@-6fgC7NjN$HXp&e+4&3D~I)}BPDhnWoj z%q;+}(-9cZ&AI-(bE!{FkxflMiNB{2$M`iYST ztmM8sZsvwdeovnjP;|w|lbS&_1LfjXSVrHh`P%hAo&I?XX=!Kb#V-O;CQzE(vYu6U z-%i<_LJ&>Rq}2@7I1Xa&P4#NkJiP!tlnGwD{H(~h_x!84;oIkP(-{|X-5I~7uINCB zfG^rYxi3;;pBMoNk}ZgzX(S>nDr`R0HPV6kl$H{hxg?@O=LJKHcj55kjw8$(W;(VS z;$N^hOS$*=7xIU%e}iP(D5*Lm5v0Yy%xU^cTBDBUkDRXOe&B;FIqrF^)>%V`I2S2M zRHpe?%95T<^VX#Bg>)X9#VbBXiA+4fFy$6`s=cG}=Ip&ML38jpg4)ph(B4`}npoXa9xCT+XB74N{-oQN#JX{*+y~_`mCVPAySq+#j3}n0$GrT~eCV;p? zXaCykVP;q~`U0$dj(P^2+OVE88Uld1iRb!XpRGuMClLSzgCH~w>R%ro*7K8aki0G(~t8aYAD`C6tWRB~_glFV*11XL5X-T#yngazScP zvKfrgz=c4mv>J04FX6x=kCp>6NJn5~7HJABZ?SRJeXLzBSwa)j(Si9AwPKn}V8>;N z3J$cZ_g*rT8A0Ihi-i87#?5E`hFZ5lBOl<7Uthsc(MM35SG2$)ouULjIsyXB$kWU) z@kjEh3X&S#$X7C#0^#^~5t^FmE>Ad!{hs<%I$1{i9e}dz&>wO}+AXg6!5Q3h-UYa+ zj+`z}{5=cQ*CmM@3C*A;p3>K>0}tYbfBm<(J@zF2D~3F+(J2c=fj+2osr5m9tGXbd zmQeAZL82VVVO4uT{#bmXDxeneUvkJ{c#FL_t~P9W+M^(w*jIqE`zQp^pbJ-Q9A9WrtTD(ju36t2$U$GwzX zAnVl0S`*xR)y23@6R%yqx~r$j?g!;CI50@J(^Z%rtktIMbSU(UjssEwP$6faHaJKO zU7Nro_HxP-B@?rV7eSz88Vfx*0ZxJmxCLmjuJn|03e05$r9yHoIpAP++vh;0J8HvW z;w2(NyUE(6cd>2DGJLX)X0b&=busfu;2kN_Cm^6hu7xj<(~(dLtbKF>N=MobFxG{( zfV1myO%=B_DcTTnfnw26UZa!~(3O0|d0@<34&+<}Qjoks5tXhPO*udZJpCCg7Pw9Y zk!ZJ%Kzl@e)3xik@T(_r|5ewKX*ZupXQnyFHHm;*h0qa&VXl z9J%IENPlsLrPk5Q*{K`=^)YmbPbf4GIY~lwiK@XhW^9Y=U=^L*1XYU-CV5A8T}+v{ z8DBxNi-cfE|C*aqiv44SSEV||_sPexRj(0si$^9=%qHOrR?rc^ET@Urr`0Oj!KzF51{LE&SK49~*;gu4`ucij#lZsA2& zO(Oz>%3T3|A{Oxv!icp%qr|29+6b5;U84dzPu%G{(VOX0$*GUvBa(m$QM@1qCK)s= zR!UaMh#F0RS_p8GzCrdst7`Ol-ia3S&~Dp^vU_s^C0F>%|i z{N}_HnbNs`O-_^3c&7On5;wUw+O{6w>d?%$rD58+k-@LY!pmo8#kh6cXCGr@m-c0Y^req&k?He|bs@x6Jyy>rBO?Tcn2R&;y8gt}YM1D#^^2UT|-Z5!bc*B&C z0}zyo!a(zvf{3C8$?fw(GDpBqpvdrD<=qSmb&3KieyAU)TM$bppCVyOWA1X$fgE=1 zvG_q9Rfr~Wj$w75=W}lU#m~6EjkOTlj12gzSpij=s6}yF4@tX zjFy&a?vlMR$*LMT77nvSc@oJ$j-U%OJkhv@fs*$n6@gRs2;IG5dm4B+HPCyNA5Lxd zcs*hokdg033-1L=F-1cifz6pk8;;j*^=U786%#s`P6RMXk<(u`*>LBr0)-&+E+cRH zI>e+W@gs5C0Z&fR5Qm^0>C<2P2D|{;HwJjpi(g7dJI(kT{G;pEfOedwej<&ZWQily zE*UdGDS%UM=!zezR~1;w!d;iJKxh7i+Pg6-;2}CKq3E(rz(2KpJ1)+PF4N_9(s|IX zH`&rz$CHjeP}9zZc_k`fru}T>?~Lk4)lNHns@;D|JlF3=N$M&KBsF;fdZ2H3Hlav# z#F1ih0?Ljl0$_9nhD3QR%H%Q4D_619u6^I99LXMsA4XSYOH*ozF)TT=&6~LB8((MR zbyt&?Ug!NKP5|x1sPqMx;ia2G^ox#sGB5m#50WeDG2tO3Y1OAs<2D4sCeSs3IB^aE z5kR6fGE5J8RGU-D)D|=rdPXv+g%B$VXgE=z+z4_Kbn3w#`yVK2#KWsy<3zx(=z{1l zsU?t9xlvuQKBnrS_tDe9&Y^+$-Pt*2(woKOTLZzothP)x%4Df!_!9w4e8DYAs1MC% zkAt3!xdy2~V!%p%f7bWWNjK5>I{`c{6;2AKVs``~qNC`LPEC+HN2h;?qu%l^p8mG? zFtTJ{5`o?Vd3ON+< z+&mE<-)XXS{aSpdMWU&dbZ9ck(2{;SX`8Gs#k-t6_S{uK-IIrW26p;H>w_+_P>l+Rv3Ny@uAE$o2pIqX z5CBO;K~x0IN5jMh!~%;0#|o_tq78B?Bxa?1(o8i@wCb(#y;zyXFsG4J6}wigY6BB5 zeVP%Emw3dk-oQN#JiHo+@A$*ZvB#~afk!|CL3=w{bY!7ru004CympU4ppdKPnCHKY zW|@F?k`Yw%?Hid~vl6EmcMzg@8TZnqJoVV;Ae_()ObJqf+kIDGPL{XHb#816_rMnH z&S<-!n4V(GJ$F%4XnTfQT{Lc0j))Qy8q-oW7#c=7h=jg@VHWMS1Xt@rQE%00s~!PU zJLKt!QO37!#+8NYyX2w8bTZEFN9@W6KJgb3(^aog1oGpf;}KgyyWbG!t3(_qpjkW2 zn}A$pu{SvbPC95S9sG=EB2`E`o@cz`6^yq^eC`N&Lg+|lIRa(J$tf|Z)!_t$5y0o| zzAJ}4{b?j4!?YxCrX73I?J!Gc{&!vQ8*cpBS%k4MQaLlG`A1-uC`8~70^MACZY*5L z^WOVDW*>SOW74_Ymr7O_`3RvWm)^q#r+tHRY?SI4Kx3N{l`a!aCdy=h;RM*|ia76L zt~zO0^6FFL$43pR%rNQ8B#g5}Dl)w)o=6g9iyhQdafrV+5P8M1qx>Q!L?>c~fY>I& z-rdu{V_pNjclj~DguMww4OsB;Pt2KD~S-nC3oCPf0=U~;R0s+r}Ec-?0 zoJAHCjuzmk69|ZczB9)Y*2xh8v3=9r4G;1!U9D^blL1Q4`H>I&Hn`jF7OgxLSUG4j) zvk8tp{+Yb)gRfP%-P1^h39W87;1h@VpQT13D1!B3DQdQuXdg&Dd?9(C$O8|2NIsa?dT z@lACxkB*DQIs-GqOLwKbfuOoXvPMp^ztgjBy-+iBTCB=x;t{xdL-sWAaBCpG=MOi} z9>1Oj{>L>S%;`p>kF0f&A&-VSK2Hl|p7-iEG1ZX`kH){unb^3J*5V#*!>{X!ieJ=n&El$7{bF}-v;^#kNM95*P&$6rntj)LFNO$Wd(BMH}1wpM;mjzJ@ zSaj<-mi1NB9aQ0xI%P-%I%-lM)VI{`cVcWiF?Uuf)ILqinv`?km4Epv4tw6=v?=gY zDK}kk8zbGhu(gjZ_fJZGxd1_fhR`QOiNh!qDFah+$ z__W#+TsI>rR43qMol|3G;j*n`+qS;gW``Z?OFB+Ew(X>2+qP}9W81c!ba1lP+56m_ zA29FcJF03_)l-tu!n48EZ$V@zzN@nomKzN4l8|eZ4JwkRhj5>EYh|*P+7hBuehG{d z2#`cHkmYgBp_*~z&DZzY(<_z*zbxIF~N=~Qv#QXKv-YNfTS_4%75*5P) z+$$~liEBFHrfMW3r4SBYN?_*5McsFh$I_wL|fqt4x_~^Y4(;8yl zON?$=RM5Ehc@vJKt3p(m?hp{WproJCy_N14?k5Rh9Sdd`LqRB!F9|TJEgRm@>&aUY zzxOcKu(+HBeJ7cG@(FFD(|RQdWfcqMX-QE;Nb=KB7OG8UgKNxo>OJD){B#tJRkEyJNd-AL(|<}f+b)7(jL|cq7LoS zEr0(8;06qQLoQ(`&g|IAF^+=gEu9%HyRMrzrK+h(YT7Tn;%PUGnPUMg*TtfcQ}fGIzF!ciQJA1$ zhcFZ~FUTOMs6#|M*gUYmemBUV#X<2_6^ofyXe*l?Zx!j&p4TtWBOiR*i@*fIQ^Mu^aiTM6 zX7MJ7@r`{4M=Y#aAJkc@PJrse5r|JGbm`e(8m{y(zn)^laQ`Rvl&n|sWE~F{jwEzY z-;FwIC1)k*@XW#c&*(z@HEYYIy?SJHZeFl$8ZCs^Y1Ep>W$o|D@;AZFNqi|f zL2<}Wk^9i+iB1atx3q)M3(pKeyD$8eL*e!0pTZgj7C=b zXD%WpuC%*)vmwF{Rg4%#I@ey2=*FIFBKq4ORn#feP=MsaZ^`8p(_LBCyNF@s}ns z>1?P_JHfy9j9L18!#=Aw_^G}7cM>vCl-^JzrTMB<;b!~zhTM5iCA(~E?=bxV?qC0Q zV#h~!^KQeKg5ab5$KHL;?o)2b;8A`*RG2-tgX~HquPi`uV7L?WlKnOnL1V9&6yQTq zkRvs#S45tbzt#8~#NlX2nCEHA&q$i;4U$6K)l^Wl(oI~eHcSxAb|&M8+8j+3Ju@*q zv*zf%0hXj8Ov^@`B#6~$JsS0Zj?1=5!rX^TvU>68`tq4*jYkZpc8dghgU+ig z)^8lW3c1NbuZ+S|3(etSstAZ2F~x_rI$RH`0I$7+?cD=CNk3>_uWjOt6}9#2XOzo_ z+=0f;k0(R$nOQfLitM=du0mc;&l)bg z$YL^v6AsJEua(JQM5rnyCpQB(aUn>C)>*dt-X$CV#wKL_!mkl91JLIUL}F_sHe=D! z!szf%0YDvWDa?gEJj$yGvVa7&z!89VcZ2%uMly2(Dp%PGtzE9D-SiAW7SkB~kGFET z0+t4$6CpWBajnj*ZuqT+P676Z%gWCZ!9(1&<6TKJ@0#5Ps4lrB>woSYg^jywdS@A5 z?>2H<_92lOet3Lt^Jp`2${^uvLfOz3hHOA9a|a_b8!6OghzVI1p|H;18<Fb?F!~3FpxvH_S8g--a`04Rvz#Hkq=Dr_M!cqE0{#9FG1B+dY z$cF5G|JorZth9GWV8IOF2kc8!>CpcWmgJaHFHTwQK}_0!wDUhaz?lk>;GjUCq~%VB z>+fgcFzhLbfd;rkgn^I?LZ-`x3(E|hz>eptQb?MJh4n@VCw=pzOS`qWE6?8&3<{xM9+lzaj+|-v4K;Q#CFSR-EJZ&{2)aNz{@|U^@8(Z%72*(o#x02By+Y_6^F{!p7zTHts1W z8+CjSxiW}-?$E1jS4f(T&oq_!^aX1pp?ir99FB(Td|6RTw3<%P`!b-!9dwbbgNwhX z=Iig>C8SRVI&#-%*l-s_nTHLWT$V(EH@NoxFe9vZ=nG+Ic3Y(+lHs4X(NKV+!CNDK>)~zvdtXVoRh>6pO@07xLF% z2GO$Y-qP0YMgF0y)SIYP%`b01l3KUEsWFVg!wxqo%0u^U$c6_w~Zt_F38;l7{ceX7H@Xy6U^wG@(Nxr%ZwUNY10-SoA+?mS(y z?0E&+VBsx}z`1icCbViuS!qw?L-X%auZh=U`Qr_gYI7>OVmLpH<&onh-i{=lXtrS# zaHc^pm7_IJ$%1KND;XgC)>aPowR&T0oBn+(9Pc`Zz-h^sXQt-B>7`$?S@mVYMhq7|_ zuwbt<^2hm71QV&L<_p)~5|0}Uc}|ua0BQHRs>nG#7S(0Dxd9o5aqoa1n*!w12=!bOkbkGh{a}8U-;bM&al4Uf^?_Vrt01@LjT@?YZ8Wd(@gs|>=|{yHFwKaHkbL}4?b7f=?^Gg`O;0+DzNp#*U% z3vaCi8J?9Fwqx5j4i4K(y*0b#RwYX0-aZ#V`3&)N>9VPXEcm4QxX#d7KlqXvKz+gPqpDne`j~1?|vk0 zBqF0m;7d8M+R+&$yff(FP%2U}(^mt53nl^gmDKhMe&W8< zm&@B1BU0xeXBb0o|9ImY6wxgnG~h9U6|C0NaZbW&u>U1CqgP8|?p4R$EOo|c}0^-zC(PUS`!mv_SFvREDG+!O@aLMFFq?;Pbvh1u5J~5|?&U><=;My-eO+(lLcTBO@+@Od(Q% zLevxVo2?@)y;2V0%qiFJ0tzKp3!5IPBfd$2TbUpwB3axEU88C~i_~GB6G9XeW>JP) z3p;XV58tqz_t(N}w;7GMkwszb!C@%fp#NY4ih?V}$H3hWCZKuZ%xo?Q&Xmlt8BIi*4ohH5p5rh$x%i7`LSYB{ykd#fy7+OA@0$KO7* z><*%P2oRScAuqQmm@aqhv3@8OY8PI=sp^@I`r&w7Sp9EKq0!4hw!-I=Pj0hG!$R9B z?uU(wGyUm0@oTBg>t{>jZSr~J>yn=3ysd8$Vow)VE7HcJrlk91)v^WR>zS5M5oYft zmtGa0&1;a&*W}{cp=(bbvCnNpd8KkW%%^ocRr1-N`BKvqwjwYzgYC5N@qi%JT z3agsKr|JUa&BIDZ;1iLW0aQv;jvsCGd?d$ZcCZV)hq;ACkspg6W>5=T;wqiNK{ zNWbcS(m18MSMy9r%`Vi^M)ST}S)Y*$a>@fNBdh#&1TJ+5osSGLz7qY}TI%xb@EmRs zzZIPIEfx34IStoKa{9mW^R6}#;~yzuzuoLtbaU1((oiUHmsb!itm6n*NrHmn(a0v*4!3YI47-27GjL1RTpg_$%p&}B)DZY;BDoF8~v{5jpO=ziL|;JW$RrFTBY z<*VBB@euR4>igo?{S?h)=EYnbo`WSQlVV+w7!RSBlexe_{4ccoeu?YU)7G=W=jF+F zE@tZ!>*Itl<@B3|)zJMF-EzWb+atT}g^%*ew^dHJ{o$f>JN5l5TzhnMf8E9a9`VCk zCs%dR*RLw?b3VZsHm!ZFsdC#b7FP=9W!GOOHZz{Lb%_Pu`vbG@CnPVL;Naiap);By z4c*8(F%$KT{4~s-MX><)GqaM-=cI%TObg6UcJav(8G$2S+Mld!ls@dz2gvr_JYR>WXWl4gTl<)Rw3_vl+TSn(^(Hh6Du`7> zmZtoCEfA0Wj5F$NHCtJ@re+~0kf;@`q1=P5+{6^9Qj-VZaoRsI-gu?9p~9=VH;-}u zk%47Zu-eVxe0IQoQZ~O`N_lyf1btn1b6eASVt}oqzjU_!lcy!C7X7KV*0tYlRp*BU z<6AmeYRHx`k~y3Qx|^R5KP13FK{r;}R0TL@<(8_NGzn&A$_4?-NvLx4^g|nUvbtMN z-RC05|GBK?i4k^{&AKRTX#C*hN6TCe)P;scI0hw?1I4rw{KdEaue>qDHh+>vN-)=h zVA;vt5(y?__=`gL!z_hK>6;92YUb<51;U3A=|lJ#X=zG>+Qu|M6aPAX<97H3a8rY@ zXy9p|V}Ab841!ZacTU{fa85=bDmizjp2LR-GXY@10jJGRY7y8VLPnL@7tVDzQqps7Cj!Wq*#? zN-s0Iif7M|J;Tw}D#s=GiV#_g) z?9PmmqalDpg8t#HlcIX(xzv>=<8BYvqmKCT{u?4n+JQ3P2SS5P{dAXzRlC;jw-juW zuqBS1_L84{IZ5CaIY_=4N|J{S#Cj>M{Pjm-<2>lU)6&0LRh?c+uuF6`-AdcO+ol}N z9%?dc)n~&ehDA|VW8g1rBy1{27@1XboO~D3trf4I3=h?L3RY0@k%+-kL=PG}Q6wH$wf-?Bw`Z4H`v&ezDl*3Z+;wEw5ki^KL_5iAtulmI9g0d-ER1vUUIADw~* zi_^1@j&36kdjvPizKUWX|35l8<23thYjM06xk9G)|`X{DzgeD*;cSgj~!{i~M zZFqQ?qxq7P_o5MWCtWi@9C-yn7yyM_U{(`PmTHl|C zwk$kk`&mxgDq}KC_j4ypF1QvL-^W1V0Z>v>f-C?392Kto5PnH!cxuA#4f}(-UPLhR z7u@aoC=ft(ZxG+~pxZzO^;DmKM130tfzUg~*Jz3gXQ~@>lmp0zv>yz?frxETsJ_x0 zK7nYtkqA>57NuhJjI13Q#2nvv74Rne5dYEOub}cdr-G$d^CGg)8)Vhn>7(YF(;_K} zmW=5^u+NktVYF!V4gi@8Eh(8{yII@wy7nIt@5>E&(>nOm@>C)=lTI+B1hY7L06xpF zu$=xF56myc=%~^2qV_Kz?h9wss zKLk=M=8vDv_5KAv_v|eCcTkro0H8lVMsSY4q(uo=`}T=vjt^_RpW&N(>GYnbecz8- zyl-N9-XDpH8kW3Aeap)5`5j-(s7sTz!+Sot_&tJlAh`V*HG&ejaNWZZLGyUSh(iJt z7DT|ySpD0}$$s_MK<rNJ&5lM zj{>m`hzN@?XV|o%W~i_3e(FXZzt%3H%xvN7t0+$_*96YCFus+PlSyV%!hUoZqHA_v zK9!$oc76I;{!>GbNIv=ecTo`(fo1Mt0`*o2^G=4VIDIQyR`8iS7k}9C8djoHNFMDQ z87=g2%ll&R*K)R=@W6VSqa(j%JiZT~*!L+e#{H@QxpR%oV_;wCjoIq}x`~eEr54)2 z9cKd^u{Qw=?pNVNpv>(wWJtBafB`&~VYIvG5FbuRmbufB?5vtYNQ&j+^;P1EHpj$e zzqLzzi9N@L%|+*N_lBL6#QMXqGu$d8;ynRn*^l`d719DJ^wG38SwWBg7c4hiC75~6 zsRgcsd>;?7zgEY$KJR>Ah5(OL|LX;m_q0I8t=pkZa)F&Wmcm zp3jy$KjzeXo~%>4i#$P{h9B+klx#y%=Ue8 zO4psWt=DdZ?pvBd_jLpDKw9*N`lQL8vL3bEU$t;x=vJ*bZ?r!7a+d2NKQfj5f-D%cl;W6 zU7=QZ<_*1SJlrNo-AtU|q_o7u@;i^?1;F-YPXRc_Q znk|ar|P69>3A(-{aWyUex^n}q!K$Uo6FjWL1h63>#{WBGt zOmsD*RK*>We}?8mXP@=hUxyV6F9*jx-k3-(?>)cA;;n{xUW<&vNv=d=7%U+E#F}y2 zjl!ZyaO}R%iUYt%jTIB+O#DDN!D?w+Z~lRf&~zs4g7;4xK#;OI7)AJmi?x9*m(f|k z#+Je*#~+!I@BO?9#C~^a+a^-pc3x+yS>)~;+e3y?(l1Y+y#seqZ5T0j&gbF+)n4Y~ z!jkAVI^|6NRVy`hM9G3gtsiagD$ucO^KrnpJyYCq{hKX-W2N(;Z3kDQJa?>#pJ8qw znqNm!=!~VDcm3&K;2#ts{M5(gCiKO0{AoV(o&mjw7ttPl6Y!5~Dg?|o;0X?WWQw6E z`#`3<8T481p*$fNJ>@u~!8FW>QjKyDB3u%^Tb&5p04F%-w|<9xGC(ZgHna$6*h))i zb-8(F{Tq~dFw?i%ZN|G^(EKISb!vWs?vZNb2SPP2nsXv0@A@;3!CFxnSAZPe>Jdvy z>jUNr9K08GQSaq}Yx{M|)ywFwd>4J2>sd1gQc06$KoFm9q~DG(6$->m^!A{!M-f&g zyyn_^X6qZf-A_3!bKzX`7f#;ZCP^(MkK8=(CwT+9?#D7T?1AUDH&vEcgfhi z^#C3zGDzsyI1zmW2~;9FxX+Xk8#GKr`bK#NB<4vrH()^q3Hn9qXQ%`bQ}4&q#H z(crpF$1zqmE}zNeP>aX@!nC~nZO$%F=i8E5%fRz&8&kVfiQvAK4Jck3Do9m9Ingq! z{D-sY4~BasHpX#qh6{>K?|+kTk1;)3V0v(y>rh%G@H!iE0B4S!g&w!jDcVo02iYjJgHAUF0p>ca`HTj~Un!g68qZx34s9-8OguZG(`=$$rHl7e;nV zOzMkVR1DmIHml4OXTe)YV#EzQ`qD;7goFlun{2pVh&FWwcCJ>dCoRh#+JI+D8$PJT zA5DJuJVjGcKK@y}IQ&3ZA54VEHdtYRQjib_oTIbd&#?cx=jScGW|X#&j@&$}1o!IS z=qp1N4kdBLNuH*9UUz%3Rz5HE?r0nir+iUKJSkY;(n#>37#8JBBOYY5N^_)kgeCh@ zBsq8`nJ)7N8Z0|>(6L3b+@Q1phRg=fVeAlo2XL7zG;f0Eh|GSKS@A(?n*qMZ1*=Qn zuQ{$x!vUymD3<3l6%8Bo-=a)n@Q3UZ09Kq}|IV4o(Wu-}DZ`tEy_8%kkk*zWh4APH z`(c8Q2?Q^YK^9(gkstYP$f>eUpa5X9nX54CSXID;JMukRV{MB6ZS!KT`71=N6p#&t zkFQ(Fl!I`7A@#g9VtOXaJkW*L3>h)iB}7l|Mz7Nde~=oM3dpMVqadB3e-ffY%l5sf zGK=!0i8UazVV3z|@u8}+pt#KWs|$I_J;uBIJLS?r#P4gb=2#j9E^}JusabQM#b$lp zPBRIf>?IJlf9SNU$Ja?8S^4PCF`nT2!*9nz_c4+iYh(Ki6RVq@28lBQkw!TyH^8}GwMkh{H=#sA zmt&_@u+*=k-W3#fZK_hJCQ&C zE_0vr4=-p@BW?jyTz@vJvDrjCRHJFHc?hc8uyn=%^_%gF$(d8psjSh z)FO(aa&p{eXGHfjj7~z!KQIN>w{wSQlTXg;wzhuk6)|1Ze~ZY8Ji|?>PR2KILDzuh zUS9rKvh=?ju&wB3$JpD_PZ8Tc&xp+?vsx6VVMc%dDNiW-p%`CA*t%9+uutTkEYJVy z^`J-65Y0Oi$>wTaOMBgFWO%(BLht*4`n-KyGa31Fu`8*bw1jy8D>V-zDB0NEFT#OD z^jdl7C<%B1lZ<3w`1ey;wQxm4lamKujm0#rbI-NUjLFeRdBn;y!)fs_M>#}+d^Ac; zmejD9hW1pJAh#i<0HWUcr@dmC(oeSJ|VWa>JuCDUHl&TL(cKz40IBK$(w!o zdW?G_Cl8ZB0iqWOoU2IfxCrI%HZ>7JJIV@^{Wcf4U;U~FsXdJMVqE)_rqQX0BLs^# zCN2JIzOj$(SFPC~Z_r-~*s&FDEX*hR<590>Es^B1l@+rA^=Gp3w-cfK&uyTfBWJfD zd;MFeaLmwv(5M+V5kYFgb3PEq04A*9Z)2Q4pGw4 zTzadxW(wOY!~*k_HZRA{ki2Ps;kE(Z!lzKpXi*6?%fvvb4Ub7*gfS_845IAdi;TjO znNT%QfTq!aOULEQ0nB5%o`M#fCl!2iHGWsywg|^~&AGR4lm4@G@yNAkXuN$w)LhWX zXH@^3-JZbc@I&hJo?qj8Jh${I-CBTJTtEyMi~XA#f#75gT`UgoI)iJfQwdFY6UuL9 z0mSS;Fcu`4JSx{%+;-0xz0UNV^5OfMb%)k-UNN9Sliu=-RjjacOshPRBzl54cN8wJ zH9pYlrNLRDr5vhdIKx2e6C5^WwIZc-sY1xnw1ZC^&^c2p)~e~yR5@20&nW&jX?050 ztG|LA=G8+cft9!s*>xh!v(vHlhq!m56rtOHRS5qR4~M?vVcpd;>|z)Pa?e%pdOHI( zVFhhbUG*JjMANdn=^3f-gOk9)>hwb2v=8qMJK@bl$;pn8M>)}Z=66t-_Qt!x5O{!8 zn9pN!D@XF&RdIIfjmXX?|GFsS-5XMvi(~Q#h<=%ecRtAB*OmM@h2(t`kD0GyY8U?7 z{o*BXHx#o7dqDlU3d#G(L|iiedFPe&i5;_;=KIK z^WGA(jQ;s~>oK=2psVoO0sqk0Duwr@ZgK z#&{gyhFo@e8QQhB^fh$wXoHH(b=t(g2`LC|pg>1a4Qit&>eKv56vh@9g(w{sv3Q zbA3Pq(8P+FKSa{kK5FSVCV%-I&um^&3w7NlzL?;4mnPYdRl^MW=1cM)$29(RKQ>Eo zoLZIE4p~{iync~}e ztV*oktD#*hUowyJX1&#y9gg`|8>0{AiAuUt3wbg%Z1 zp5ppE_kDD%((*3Z+n2U-`k~ImDx0*p!#6hBio|>KE6e2#9k{%1?!x)Q*m@I*KfMX~ zSMB|&(D1qIChYj?YZ=+6R_?TihDCEhw3tuS4C5ZH8D7h{+8|uqou_Xj?faUjGQ%2$ z6=rjwNSP^^Lk2z%C$a}5sh@K%kK#z-ij@H}T))2XQu1WliESk&BWAB?975Nc0ngh{ zW2B(&U@vN9d}y@A|8YMGUztPQ`Ge0?a^5$}(2lj-<(;bzk$HsoLkJ2ppanLAz&qCK z)liw$_HxyBPzt=bi0nC9ftiNtAQk={j(V;w0-II-Y85q$OY_n>i<<`(DhiNRY8C87 zi@lqiRUIlI&g+HFi-k*O2}{bl37i&D)-&ymB9={8M88DMyQ;t&pfoDx*E;LlyPmZK z?kN>iGdT0UA+$rVTE;C~ZMV12N1ccc^XR(YP|6ihSNSraj2$itGae^6k-T0e3L7sC z;B)fb+I6#H5W*6=^;M9iKv}a^8<}TMtf~AU2usaOZ)*WnG}rEgO_=2m8QTC~xJfa_ zth;r}|9SyC-)KB$4vc)tq+5IuKsN!!dHK9fIq0_S_XcDZlG~sX-c0jti|bj&^=s-I zSLMP}x74~t-SDeRPOQKZhqY#lCYQErQ!zEyNaczuD;S?QBt@R9)_BIZ3?@cAhKA&n z754}uwziiW3s!tSWUZNZY;DGHn}w)M@!K3vr)n(u8o(Wy{LrIot`ifF_6FJ|VvI(n z!FSAN;@YkVU8Ll*oD@WDfPk7{GKk0q$0n9S%Yo4JG3BZTD($QoAq<%gX$N2Muv&>S z96&L+qjjDdV!6l9tHTcdr}icKrQewN)k}RlX6tQ>ON-^ZxYMt2wB`#LUG~@YOvL8U z8l1DDuMWG{9#?)m&)!TkH{|)8EBYR-Zwlk_1wTMgzRDGu0`Vp*khbh^`AJ#=-*#cc z+m7d8NHG?BwP49%Fx>~JyOya@i)gLHhXn}x1L2C5MS0qkthZ~2GPS_luQ0h#yS3`X z>h7ZyQ=jbSc!~r`#X%@6&OTiPIou6%QyrAA#jH++o1D!`6Sf@M zm0wM|=YFCw%2?pdg`5`%%YSrOz(tweOqkOMh9P_>xGU%31JKAL9nvC5^5{e9QBz@O zMu&|xa|e(F@B)G?p<0}Id^ep($2I@UnM}6tiw$fJndA<+^Y$$leG?*aRZK)NxupPs$5NsVGDW0O#M`V14 zAp!5%vqq>heWc358}vAL;BbMt;;89nE`4ft#egGB82Sg&h7r?jj{mgR$l(j!*^}LQ z5|ik7#`pgeX5PpHoA#s6P!|SB8H@+{j-(^n+Aydm5q`GFt%>MZpX&f$B%rT%k{b!F zg-SWLTz~!qzX2z(j94arFB<~1!06|IRQzeAXs=)~7fw-r(*8u}_-pQ1sy42G&TXdI z+MEb2TtF{YZmaRJux6CLlo!LVnuaKBlUMk~Z0n z{0=3RzN=&arRLNrl9!pGw$jS`gUf^nszPgjr=VF_5X}wbyJ`*TJhem(*S&A5Id7-y zE-=1mq*{~aG)r7*qySU0F?Cw6;xe1u>JHy_u7%M%qFn201}CngLX!_w+vh18`7~KUr~1%qzq+b`CExxl9sluBz56G;npNxy zL?gE{R{+2J@JG;>HBAd+KqvaPb{$V>`~21(2)M%miey_KDl&~EQ7r65wE7i#BTU0h z9MsH%a)q_)I#JJ>*@=dnYmIJ&C)=SvGP9~p9HD#%w@V9IHMiq1r35BxmN2tm-7kF3 zNedSbHKDIQ*T$#lZ8MJ#IPd-YoJ1BXgTFei+gkOS0WpCx4!HZUKGB&V;Mn&GeSE0> zW%%whVi`w9aQJxam|P(6+_yPy{oio#l7D}7K=5OK>I7|YaBYgTjAQ^_!) zT0U>->C#nEIZv!)*n#K_1tv!kSv}pQ4qK(kb3b(+Dg71XbhY}%C_LJ1-j107YHawL z@4gSzzr;}seY}G+^37D%dwKFPf^jCH1JKOhYQ$+~z5+I=ij;jxRW^QX%8Yj^k8QHuo&V{NhZ zTd-E+S%lu=B=Kuwx|TYccA>Shy3l8dtL0ON`uTS{FNHX8YrtCFU28&fb0R8{aia>J_yb1(P9q`IcmURd$?s@6qT&=yRFw#qkXvH^o$@jx(<}O5 zAN6q`U7|RMCEJA#quBpqkT;t-P@P0WP^*lUn=aL8kT(RE59T=!zV^|xf7F|7etYGr zR{onn^&&e{xk@p~p5DFNa`wcAw33(w(}D-8@OAFTI<1iklG<9PM6BkP!e?Vmj4yRW4jtVKOdkby9fl9@iD`bv4q2a{ z5tjXf0vS|zgZWP#f24_;Rj^ICevslKP#MUgzWk-F?sE^X%qLC~g6_=#mVwvQ_SgA~ zaIMuKsjyp?0UupGz@M~3K1rEVV}23*nO7BC@F;D~+}%rFU#mB`rrH6xm|))7;qehC zY4x?&^FBYI>#-O1tOeijMTcx6d^y35Lw!zp;s3-M(SmV3@gmMjLKO1>Zy42f-)1k_ zV}|}AoHUV&9~t>^Ukkh5x`W0Zp6%$S2n(MMzvkA|XmZ3jUf0neF}^{X5S&{WC2uDO zxGg5WM)>c;3xo`=@DPkN%8u?sfL6^!<~fYiLffL@BKQd-oTdN@w^K|)a5C(C9+JG1 zD6qm`WS5;UH)ATFqBK0cdsCP@4S{;>`NA9;(jXhYLhu+_LMOON>(08t;)ldAwKz*o zUe>s82dmIHFfU#TClwwg3?DTw`M@&p0k*5B^)TC&ip5BRSO#;f_r|k}sri>EZD-SgT%Sw?Nh>YrvzRsx93$~Gqs|#Ej1{Z* zD1Kh=25w6X6*6aMwM^D|?Cq(gJ3r^+fe-Iozip!yv~-~_nj_Mq3s9x$&WB(5^B2NN zhVe*gtzA$b-9x2=r~Tkt zW@=DT@n5b)6E>tgx_Pj0`4(yioFS18zZ;7w+V-l9Fir{XkF+lE344d$hA2dORa2R( zCTM3>?Z(nrBlV9+LNWt71NnCZ!N|e4k`hwq? zWO7Tm1_d)LwU{t$371*Jqh;pD%Ad^8U0_kL$FRobV{G8!UhSS$!+!U_5e9%O_o_mq z%)XBK=$>-R9*rF1KnU24+Rk7+NeZo3J}B&8nt=8)XMp?@XkALEN9NUR2q#@9820kl zAiz#Jupo-nC&48$ih%6}$&%!%h}s!RUVA z^4uX`euY7ZG`dU+xlL+qz?E(j8d5y&TRUCcGK5bcHV&@P)QfDqV_IUB2A%Db2A{z~&*_Cj9}Hg4NXnq#fWxpjUpxivOkDhs@n zDJ(d#27R$XP8UXwJDzYG(R%i8;xe+3>^_@Or$Tm#ZqIG~!1v#TEv}n2qi{=wszNW& zCc1PQfmHAhwo%p#$m&ytk^b&wz25|0v0H_8-KdvueJZ;ycKk8bD)B=xehAVU`KVK}SJz3l86` zM}v^)!Q$f<77kXgfDnQG@i1f@$;o#qsDI=}VfJs1#=gk=W4an6So>Fpw>6}~vC3}O=w2OR&O`feuoHT;!6*>}= z@c&E0ot4>k+lpxzi22YLXp+5ypGGcPIm>P}_8YE#B6vaZzgiXq`D^$7H^IFt3Ixl$ zyuDz2QjXD2HZ{v*wy8N0-&?fH*VKCsSRHsD$QIDQpOe1xs9%@UjW(4P&C+XPZd>=W zre`-PU1EHhFH(;d0fp4CHfh4eOLlgc@=O3Q3PFu*a7mqb(Rq)eWWiRErWwgtOS|D0 zk@}*D8VIFQ~PY$n7fxFdcm7EK3Y3FzIdiq=EASqp9$mZfr6>eyiG$0p-8*&57$3}nB^mXyXwkWaw4Bu zhOnQf3b=cCTCZ5OUakj(_Do!(cdG3*mwP`iN#h`>_Q8>qQuo?t2cskEogD0{3halP zTdu;uc)XY3jp1qsZ;e7*L8NN~1dpMO4jN}5x{JPIrzjpc!8G^S#DT6rU=uG;^2;~A z!}j^mR`2-=*?TWs#wiE<<=pS$JB%p?0r$_Gr2Pj zxUNch!?e8%ntmzcKC@ihL|1z+97ZC-4*~$GR;8r`-k=>~-2YgmA1)&+N!$Pizz2`F z<=H}MhRNrN<{8Mp$tmFTJaSnp03eruZuy=`7MwJ~>$9oJ=aJ~yrTa)iT9XT{3r?yU zkS#vz_?4B-n+EeK(Y!7-Yzjh_&rDCDFK|& zA`b|;6NV;5H8OCXi^G{Ci6F(YvJLbX=43oC6GZyCE2&L&b#T0zMnS@%>46Z|en#)P z;bh`%Cqca!p{W1O?U*&keRmRm5g2llZN&SH#am=5X6XP+Dl|-HU@^AXrLEP55PLC@ zY-l4ujL=FH2f~_XtS09l;sM8F4SmlID6BqX2bk&KzNJ`5jh9PwbLw||s`M_i-{rBzkC)XiE zRm-zFFD`TSyy0>p%fZ5NmYgJK#`TIe`il@*6^(oY@%OSy)o;QP|Bxd6&Zbv9sGcbE z^>7K_=@H>!V`?MiMqEJ3M<87OXo{)8lQk=$^gORC5fbg77ZSd_Xysi3mZ(WTHa5LR zZ$)=BrgWcBN(x>jvbp@r(}*h;Y8(tT1nV~&`ceJDLOBqO#vP}vF*=LqvCE199u>i<8uUnu_*&6iJh(mlreq>`gT4a$B zXQVB1`}Nii?+j?`U9EbMxnt|w45}O zpe)ULKy5{%O!h0a_@ThoS0rKuVqr?c@B1cN)`GLTugtmHX5>6ELYlbn_lzn8wQ!?x z5nNg$z)doPGEB|!4n}_h_4i;brbsy}06jEQ0W^b}%d8nY=Y)KR>&B7tjT&h6V_4Pk zNMYr=7Mif;Ufw;uS*JE+Ev+z}MRig5!-PXCblv1xz-(9LYtJ_3#gQ$-mqysPbo7@a zoK{{gy8EoUgFy@e6%noDDgiFXeC)7zn8O6qgKjvQi$Ws>O~OwJl_2kY1&E8-6horl zXkg6`qABHPa2y8{aSb+NtV`w(Tz0V9kX<8)xN50Xh|cg~PB{OEs<&W@tL>V$ad!=# z5S&1O!JXhX=s<9HcX#*T5Zv9}Ew~Nt!QI{ABiCI|z4iTuUHh!HdUYTD@2Ir<5kJ`x zxIko$M=3Hcy>yq<8o}nw3p!q~7!Gf%->F__=0HwX}c^EoL znzw-rEe=6=Yc1-?XFm&qT*~3j=C^p}e^t%+uRzbo+khV`h*+IhsG`>RCHV``cF#UU z8k-C#s<|)cFV54{1JaW1eQs^^ z3KYPNX6!9)2H6&n?_0ldn$xw=f3D@dQ4c3}bIfr$c%hd!_I zR9`k-miY2TaZ4k!1eN&Dk;=#eSpuv_mMFp8%A3 zOSrrgO0e3@U#!hrGHP*-g%mfw08-`Ud&>O9ddT<~E_~t9mT{2G6aMqaF{zLEY&aYM zZ4m_J`q<_;b40t**Pr>dZo_@RO*)rIUdKj0RW==4Mo)L6+NJ06?|0HVz{lOE32B{D zo7c5b$KCZ#8CBSq@zLAyF1Mh{mt$3^s(Ft0qq)|tDsAX?pz2H0!ZDH0Eu7cuckQC8 zm!;#IUHmRFou`?FqloVP_nn5PldN`NmUoYZ-@%i#r&1u@WJ=<;|`=-dpCjNE7hj)#CH{|u@D2=h} zC}bgnYdq044X=0;Algq0>?cyiisl;GESFUj6Ne6e6LJKtTDmcyK6=9IOm0 z%;zsbE8Rmm(=(T=PM`SIR5%GVwG2{q0^~e1c=(dKEGwO4cc8iK&lhZy5S1yG&eXdH zq&+|L+MclCYdemGJ(E~Ab-S0jGJV-b1@UPo02(b56L7O61GNOvR$S8}oV9rqQ3(CH zTbNzqF5{6V#uDOar1kE@E`!E|ZSA?TKr(%`%r*>7Mz~HQ<^&Fhe-&O7bd4E>+xtKl z5&S)6ii%*V!WOdxfBAp!?@KiVy{9*d;afEM>QvVgNgp-{ns`50_G-=|pRIe%MVek! zs!U~6Wv#+}T%B?`vbE|bFj z1g#qFBv_28-9e=@7yc$z_(DCSU@qG8M#I8h`GQTdvk`7^?qN9^&LYm`iDc61w_^@h z>vq!NXUb=t?|ke6Ygy~9XE$VTJFQi3dv^`!XAXGQ?GbWk&DaRbmY=9LFQ#CrWrGGG zRiM!Xkc?H-d+n$z-}!#?8KxbT7FK{Vp3IveQ&Kf^c4kIke8faZJqz-sBJiz>v|QFA z6y(vVC{3Hmt5d#CLTyB}@|SUaijBUNv<6)%_#nl>y?-hj0@h~#pyjfRNN{seUkj#7!5{>VFZL%Ei_F@-wIhBC+(G`um$Z6} z2cK3U6=z#Bp>Z+)?$SE!b+ViopZs=I$Rki|?&Xs%R-voY8YGzSM`x0 zay6{6lg}0j-{=NQ^BKSgkluiUOlWO^*%*+$&2e%`0WGVWwDbb6osN5I_!iD8H-I^+ zi=l9D@*WPu;BV$gOU#Nk8a)U!a;(ESy9Ezvz9KDo>Skbtq9%D0;@gjF>8!yl$+x&C zN!-XW_up3MwMINLf3GgKow>KmsZVZc0i!`nD)-@P(8Qr`hMwVU3`dc$b^0{PfMinE zkI_!1F_J8nZXQFHj)?XM&1xkp)(ttx%$e#~fjTpfYX1AH9s;N=u*b(^rs22l75Ad2 zd+A)>q!)`-4RG|gqQ47x-EKv;^g(nx9vOr!`XEf`KP>hyi`EadS+qC$b8ny1_SU#C z&;wihJ4aNcAerAE=pu@#GnjG_?E(?pBFf=7T38(T2m{KE<~FPe)t$|sqAZj`xd*tX z{>chNTd0cob3d@FYz2&%kiqvQgqB`2 zd@lJHkID1GqH~Vhwp&$AhrWtQYs+?nHP}o(f*0XmV;HB*(fKmI8w#5y1Uebg9veZ< zDlpjsa=+=*BC)o6A@s-q@oHEE2H9idf&*|rWe7T4mYf6_v|EX+wo5k*Rxw^4JXCx6 zZiZkS42?rfcrOx@8(T}mwHa*}wRb`j#0jbweQ(>Ay-&PbAL<3By?F#g_}6;;8^Exl zR2@a@vQ{o#C8Jp{xq0Y3=fmhNQ`P>By@3ql;eQqE^<<3v8|(0bU1MpCSWZmBSPYpr z|5%?8T*v3ubQ1$WIGy*WHeh~vsVQxXXOg>VAP+wT(Yz&0ZDdyA;qg(Hr*vW==9xrH+a60cIHzD0?#pLy_jce2@D-cR$$^&H&10 zD#Djup3M=I?y%gZR7sd0LD%HEq9`L9mkRz8vB7>!Lz;LKkxCW=J#bp}@SG%kNP>@I zsFMc^KZxSmIgf(1`;=@Z5~dI<;Y{nY`${Gg;aa z&rOpz_3Jj{zf(ugTRmnlGcNnZk}nHyL(^EGN`L7Fv-y64CZ7#_i!Ri#XJtT-!t6$U zHiWV^4){zcc&#Fdm_`H9NkG)f^+`6JzSJtb*QG~^J@;xUH!I=$Z3J3OD~;) zSLO$PtbcMUts0gl0&6tqGNlBVfFy`?N`;5|eF>4I{rRioTbSH611fE!#F)+oQj}C!$g){OHO52wqL=&F7;CL5|X<@^Ax8bqA<&Ksq+}1D88sq zFfVL3c8JxYQV<)f$dx{I3z8a*C#@>UO>j60>2&+2fk&afnW!E=DcCT5;v@=Be=Nk{ zA$VPJyiYi{A8mCaOG~#RGrVmM(}3Zq{ZrWM4*~P*|Fi&#a9E6TiaxuqqhC38+5Kyz zkTeKH@T?xJ_HoW#t&3~W4gBdweg$0*I!ACOWP_G$t8BmFFz{# zx*infK!60Y*$cdpekutTf;IZ9Xi%vyi+K2sZo%(KYU~dY?g(7xIIS0RdD+8W`rFQC zMN{vXH%;{t(y+gY(R2B$oa@##*%KFlT)}a@H7AAIK-fe!A>4)ltoh|6ly4jhwUWUZ zMT5|RBDFD}B?7#^TD;=qb?87A+u(_m-PN8K2Fqi5|4cUa=DQv?5QGZ4d_8Vk@6cRx zR{@O>9!Hv$YnOVF+J@R!&NWVOkCgIEqkG#14GiSx(A|XCl+%jp%Zjr5e`MvHk^k5% z&+`YnRdr#%)Nx&!AGo2Iq!gpUTT5})&U2gdV4IgQH#n(UHI*5cm*IV%ceL0Ii&p=9 zWz0*9y`%AQoC~)vO2pgR!ZS1_+J&vSa{WqnPVa(vw?^;)EI9=#!gHt1LCH2CrV`D~ zr_IgA6JCrHlEnxIp=Z(m?(vOx@W5_*?^tDz^NZ1y#Q>idB+{!gYSx+c@ffS~v{#sq z9waLEDoB?|NezQRlotk}dKYX-Rg%0|r@US@Z2N2Dg2_+eYk(zwhnv{GKmjtuI|! z6}1zqIM+l2NNH{pGIC{O#k51FvU;Dz@bCFjFw^ACSe~U!!lp5i-G46i%m_TWrS^BS zS9S@PowX}4Tq_DKu((jCKm3#!Fk0ky=jjq(vo1ULIxj0d78|ZLuY8yDoK<6q>Z?~g zNWS*v%K8^xQ7f4BPyRs`qk52rZ2m8j_kk$+h(Rz-!egKf|3RNXwxNm+!`j`7G)2k! z(<6E>@FGESKem6AvfnNkB5?fZ{y_O1ESz=kN%GPz?Fc3lkc02IXyM+Od>27~P7|1^ z@p&d^;4vi&Tk)mxw_9*LArnv->^gaL-x*LRv9CCC%=;SBC4NNf4Y?LQSDac<_h<1N|p*keh-B#Af zwU%;lpfLX>y(8n^K6mBSrG)DExG#`xeI%{_2I{ekC9R&!vFC3JZOwMxJ5BC-@N@6D zt>-{WHMrI1+sPI$*2g9}&ZitQL3JGe?&BMp$>Nj)KvpZJp!{!Q?1joJc!B4SdJx}a zDWH)z-{wxEm&FkMDAc06=DxMVw-|&*o4JGMli?w@&rc$|LSPU$L9p`pqoD3RJEiVC z8>{a6XH)&+Lb&1JLfG*IdqR~H(AVSMG~GABrO-y^66(x%_htF?A;kP%oTPLuMnKsk z-8SWp_tN&%X{4`Ve>lYayRMCHmTx@Tls7e5F0`D0GJK|UD5>Ysm*sb`mwbaLN4@iB z2baxds{Ju`Xvc}mAFl|rIBuC2L{9cnMa>27p}XEHeQ~M7U}igBl*sLxaVYV@O$dr@ zzu+cQtg(oX5$?nOFpBYcelbBLjljtf+s{8vDpuQHr$Wl!UtGOd3AlT+?hK-~J+1eC zth1>tS`6(#B(^{Jec*)tp!thNHX%d^l?aAbp|3n?#z?^=)sxEZsT@?G;#Hy0;o9$V z$E7<(Aoq0Lr(N}~wrswl3HXX$ z3q2FjDHgJ5*~sAMUM3 z^XGm7$~gcX4^s4B3I_%dC`iWlm}Re`+!PId*VlSq1fhfVcSw@f%05wfum2!Jz7p&PJayAC-PG#GP|%<-xLsUr1aLw4 zRkycx_#zICp9>f2L@1xJKr&>;QBh zi+_L86Q~U}{T&j<)+-f9U_eBu0V*w~#^|Faz&W%3Je=?th%=LRU^ok{1F^#6KzyB2 z(=x?(DOEBBT7O93W~bckj5BXIO+oW{7><+e<_M(_a+w)lC^jpaOUqD6o-|JU4z3Z; z>fM9f{dJz2LFmB8Q>PGohPU=Zz!-CH_TT)k(FHp_FA(U)50$R)kRGaqXVe+y-iOG8 z9WE4X5GV6jMT!fzxIIomwNJ9KBGI9LDTp|P)3-22I3vR$8&2*R)$ta;GiTlNwypJ% zetk|>=PAj$^<|~i??&)tyLw=#iwS)KP5>!*Q9r&o^3 zsVLPqDGsk^Zms(Yo#TNr8^r^93T_trQJxjoi0Feb7t!Xo!P&|Tg7~EgeJ1MxUDxfY zFK7u^X&BOqxg}CKp-9GX*xyg>>m@feKJ_KDYv30Pl5Pbk}_w)kb znm?-mVwm3y$;xj1Ee}qeJZMw(5;K4~kbx^kh47X)Qn9q4?r{l9?bTe1YLKVj|2MdK!-D{IRaKSEx`_Cn!$pR6D>uY8tE* zU0D$+2S@gF(Z70GETty2IyzwYLpe9N7q0$Ta5;o8*w){0JtG!>JD&3Zz zv@I3)77Ya2JF0jZ z(dm@U^10Nwxy08lMeo=^{SdTtid__Cn& z+Y^{n@ho$;{Gz1bJ-t7-uyI`mIwV^9aXTe{{u}@7zGnLx!+PMLe&P%R&0XpUfRgjY zrU*S=xKZ=q-#qm3IiN@9{Yzz*u`f5)rYC1_ zsc1Qr9M~_2H49K^jgu3ZsaUF6c7lmHE6e%&kH>9+&?f zH{dCDoF|A0P*t^*kj{EYhUBo+&S_IwC9f&L?gG3Xst*#|5q4pd812aq+3n#ED3BXK zO?@{C&olXeed$7~-0*(t=Oz6?^$`;c^dOF|Psv)1sxR#y$XQhKSsaR+bJLzb z_NQ&g;)tFSfEz`%jQ1{_a=MHqe(_Lki8R4JTk^w6ne6c=#U zGM~!Evdz({5rGDAAp;EdHo8Ps@2pV>J2HKS9d4=L-Oz z&+G1*%X1x? z;RE5uw)Bp$xX6$G^Y9x6xw>wRrsfb|jvl~FvN%h;5)(i&xH9#d#m^`q=`g8MEUUmv zggZhiFplOIg;a7RSK4~zV6P^yuRIIfrWW6se-W0(;zcp}xkIjI)rZAYTLlWuewD&8 zJSz0p{za6#uL2{4X^sj?>^94Qe^T+t>ESC$b>@$GeJf4L?O*IkwpI<*C zId&IW6?!eFCicQxSO9yJw2F&NmSsPAd~F~(nb`bcH_AWyjLX+oUyz*!389`(eu&q6f$!mr=W(}pINx?SzAL|E893rt(nVMRpo8Ra7m|XK#R+9)0hf}faPdWBl7P5 zlK}JP+HqxabMit$;uFa{Nk45aegKa-H-9$|a9BgqK_zT9E8_M1{h-;{x|V=i2tsQY zQBop-Ym-5>do)k>ecU=>JQm`Y&Gv^>JQy~^*h~s4JSSK3s=H-(~Tjk zIxGA)Z_96BzWULe`vuaNMH7S&0YMMa#^m;yWJ=^S7G7#0aDM&J8l8VO&snl&-{t4b zqVb5SMWXO2@hRYXaZ>BBR146Fz=9<{HK)rU04ACg4u?)#0+C8Sl=BBqvmlOqY(^{% zZuqozkH_P*R)gUsu=E(VpkQVA=_2H>WJl_8yfnUy6q!;f-2sBMsG~pgDT3wWD!BGi zs$Nl4TGg8Q_H+s0`ifKr7tmW$@>^6QNR5opRe*eKOXyKMZA( z<{hoq+ZDQnC9eZCSXJ%aBjx|JfCW6$do46DyYzXHC~~qb4+eK2qp5je0^Jk!e`9wK zR9@o8*c}lpjEp;;LO1fj;`#Z^Izkv`b5jCdZIyA}RJr)c)9YNbunanRGvvz8PzJDagESOg`YUdAHy@ukgvsKwB0j5ZxerTl#UHZpEWo zn-Dkr%`ah7PT0LWm%Wj~j82~59!O-PI-wwaL4Y>j1Lwv0l-+|5h)bu3jx%{^WTzmx zlcef1mJH+V@m@qAvE0~8)jZHQPs?|h?39=7Qh7;+umY4h9osAn$kJ0bl+ryBiT+H< z!R8HMyp-%OS79Z1;^L(@9hwcUFw>PXogzkG82AA6^&axy?mSdcAk6FYGsUE2b9JM@ z>fuypD{bcF#_35w<2yUew+z~44WtMgkSdlMj@6C1(p|2B)C#?ZFz@!lzYb@p zh(CX1V`gL|XFTcG7Gv3+Wsm)aIJT%coV3ygG}ELr*|W4(o-dzpEPR;(xrjRjVPAF&<%JZ~4_b7EW!IbmG~ZnQc<(UYFxpo>)xn zi6IxNGo+9GUX+r^Amf?-diDwIKf^yYTErTt%_%Ys!82;4qi9+a@s1Q1q^0{a9dZJTC>4P7Vx1Gu@))#2?bd z_>$A!rm$`I2|}!p^D@`xVE02^{3GPJ?onQ9gvXB5_u>;Hu*dP42HQD`*I;KFxy}E> z7zxA`ldp!Npm!iT9!Mpj0;UdUrE8WY(p$&wcVZE(FUhJE^$TF~N?3wxBXx*PzJhHQ zj!jf`Xz$fPEJpKJZYBb1f0ePEp7{{|5*GZwlrNcosw89_9j^}Mb_kLjXBz@L<__0| zM3i9#{U+>k{2&8n>!h zS;yzF;OT0;ODOC8nB%DK-<|jByLMH~`!3N<4t@vl{5^i*V9n=+u4CJ+YIcRut>y3C zN%CP9qg#oJ<~`2?rUb4ZOH1hW-f;N9ux)iTlp?4|8L7Q-G+b|$LC#1s+9X7oR{I9$ zCv-McGR{FOi&Ge_tj(GhEjp0*GEn%vSCKu|U+tHM6rGm{S|@K0x-C1unEV7x7~k1F zM3hTY{4QhBYk3&#^nTZc9%WxjkMD+cjRhroT=RTZ@V(Cq zDC)au!iwL(baSIddmCOfgQ~uEMoS1~Jx$VoVLW8y$fPT>7uKy+79e#yPAgTryd@OH z1&oZRAx;5%nLi^YbkvLw`N1I7=gTz#%!er7uH7y;i4P#SBRLluU~}uN^U%5C@s>gT z`Bd{pc)ft#nS{u|h@5D@5h>#kr#W$wl369I2w&J?N}; zkFlcJIngtiGD!PlEtd=IEmkd#>T{Nl>?6+}$qn8vtTkxXTR+LHLl~2%+k(m8sYHp+ z+Tkhs#lDefaY=6Ra7@*S|4XWeObc>1_!{Mvy zo;S_B&J7%9VdrAzSG8VUo5LL|P_jdi3yr3f&gN+1GchLSHDOk-PK|;IGwFycA}crC z-24`!xLoaJa-V-*r9@V9Hg>DCAg4XO>%u0NSVpJVe0Q9(3}-Vp#$pG~rHnNv;oqic zbf*wqM`IB+OO0V#Wb!3rRgF>U+CN!;m<7)1)Ko}Qwj8?#8K0TDsET~_(KHU!t>)#b zS`@eHEs&n(-y01L8I zN-2G(y{+(dr=k~J|4V$sbCDr$KA5;AQ0HHzp?KjkvSUy<0y9yZmfuJ@9XE)5*`@fK z8BpL+86M{tg;_ZVADFAB*0HBht6@+a=8J={?WJh7CdDqZY1_z>DVe|C zsE93#`T@jQTr4>aj zGAzV_1VB)WStd+r8_@z^F(3MeyVBoUdS&VhI?IgX<%K?IafziDt_GZ~l%x4Z(gnLa zkO>`UH0}`9~rJx+= zz0OsbPTe)p@1x3^#!C)&bVm2ag~P9?=U!u?F)a^4le{Llr|(sR%HE+I1H+7Jj`(>p z{Yx5VvNttQcuuA(ixdsh!Kh^kmMXF{N@4}zB60~zvYE{gJ}Eh$<*cKv2*#g=1Pd+P$fy)e80Tj_@3}T##AOpz|XnvWFA;5)zygG?0_11B-_R0I-K0$F*B$B z!fz*Ni77CkYy(Odt@>0MeGevC^~<~@i6ZPM8Q%( zcZsSLXB*nYlvD3aW@-HU&Lj6>|96--<)XL#tOFU{g%Dzz%}O`i{MA8;Wd-!yqxMk5XcVl}uWUd zaoFlXcRSN-TXd{{=U=SOLLp#$`jVe%psiLdtw_)$Sr7ZEmFgf~hV;Ee{j5yD*GYkV zhozG0aPcc}>T)nM&kFCn^fdXrM4ZG0?G~WC(){Pae|5vah~|e0Yc^vpT)LASd0c@9 z-Fr^&%V+yaUMQcJevZ5sD%ibCA`!Fl=fync8+c0}7!$nH&J;x6s8K|$pr zlich`H0FYdGGSZ=W&fQ=b^Tb$;Fz-pb%T|{;kzh+Qg-f=FzKJ_FlXbo#HIcg4@ed? z#%>9`9&?nsZ_q4gTDd$`3=9n}Aw=3CgM%Wqv0l6^Wj-1Y?9?5*-#+#~Z$cli_t9BX z6&}AW+3Dp5v~7OHML4BPr80mN3?3Zo-X3#99y}OAmr-sK^z4cv3WNgVa9`!j3)8Iw zEzuSGF9c!Wg)0&q`Wi&75td|Ydv=z+oORxslG9!OSVRlFz13m7#Z2yvr%*#73P$MR zBUct~jZtn(){=jm`$)Fs^D$&Ds+1G~2lSvsedWSPtpeCJBkrqB>ax=X^J=YemxClZ za&Z!G|ADp@L5;9as?eGMVK(n;tc9y(PQ3~y7P;!Z zd*#8W^0f!)fCy5qo`oN9?d`LexV7YqeJf+(+PH50Vmy$!!oQ3iRZ~s>&8`|9un!H3 zM}tgN@Zc@tOW{anXvJOvmCbQm-QXFiB%C7KT{9;u6>QJJ^o_4?P!{#w&+30}_j8R^ zq!BD5;Q1I*Gp5)tWM`A-y_sbFI+%G=N6p8vwjJAMlv?(r&S3g`&sZg7sPfP`^10}SgUIgS~t2^zTZS$Nw zO-{dR7Uz3l(|CG$c1z;a`&fb1r~#F>^q?K6IIKQh6d1Bnq*Ol+NfQ3Ne3~I?FcV$R z*Bkz)p?KB?<}yVF18OC`m7r~Gq!|&7#DN~_W{GIoD8-@3cHb$yF(ezpcfh1)4uc=| zvu?;wofN1vX3ir-jiPFW&q4~j6C-vi=aMIrdT?5y`l`y%u-$|yn;XNhV$;0 zzdYinW6^p1S|CX5u^mQQt%=x)FLI^&RGUK<4F3Uzey==tC5(oHLD+XrNODg+)%=3h^e zmtAigmM>;>Okd?Hr$)%$lwGtu_;Q7t4HJhgR8{(VEVCP}LJb+C{!a^NpyWbpp-4$-)CqEBpCr|Q1MU3<+K_%rtG>^;`IYhA_2v>@+o}e7 zY5H(|T+6r@^tB8}rtj5vQlV|kAqUY@Y@dly8A-k{0}JKTcC~b0#jy9sb<*4d6|Sz; z44J%Lsp2ODO^M|-tvuYT##e!2HWNpAa{` z+RSnAKYehnH%A@&;TdO|_%GPKUO%w111r{`J&~PF6uSu>k3o-{3J#sZk7@}PulsSE zx%>A+tEV@O^$+mNJLN=UA~q*q3*KpKg?$k&M`iI0){AL8PBfc;W&}=a+@?1O=;2vA z#Hq9y*%28u;N!K|`cs^%Ehv4}=K5ss4Y=~n^-MT=^&OVyq`GgXEACxR>caV{jPs^f zCHN#zxJeI$fDsS||6JgaLg0lelM}#x0+lny(+$-Cy|A-m?zI(vK20rfOM2oJ^(XO4 zw~^#6?Xo2?b>kQXI$%T;^f8j8(bXc50q@9s_An`-_roAl)eIdlB$87hnaL!r#_-w8 z43Q*K0B>jgsb879YOIqP{;JHR8M8IGNp*Fe?LT2yy!2(cC#(GRf_D%NF^+UA1I-&c z+wW2BA&?pu!kqWUOkaqcV{wX(2+^z4Q8wnKzKNx&wFl__3x=U1=RYz>KJtaz>i61h zCfQ2GHRPI_+sPyZ>W~vjctT0Af0eG=C_H4Ld`xJk^xmUY1E7vcy%KCv+Wq=ycpDTG z1bCVKZX7lCgA=RJ*c zYh8|i$9R8UWH%c;b^d6NC=%$EULX2e4P(`7`nHlC(yV53=$qeec-k* zxf?dX_Lp73d3}>56~er$f#H|QZ>@B$K!#$+RWbps!S)NYE6PNB{cZUc355RNlq<|5QLRg`*)DR2|rjr3@a9;=3Rz;XcV{~AJl z_Eq#W?$wont>3^ZNNKCi(L)EAFc>qa*Nb>r>j;`{@2IP&$Vo-1R6LT>(5){f&kHwQG@;m|bhFW&IN4lRfyTO}E@Fu3^!@ za+=u+cFw2E4#ssO52;d>#N_OY4G-m9IzO&lZWyHv6+l!44`e32HXRl5l?t89!_<>5uH7 zow!t3e}9o67WCu!Y(yx4utw3re=<=#?AE;=f0W5vRDVcx2#5A?;xi0Ex3uqw6ellQ zC|bbW_ka>AOVk&hFz9ZbKB$KXysfn=1Oao zr5?St3+Qtg(J*+49`B;1k1cQgMSiGB&@R8>k0gD__TZO6<6KJgf#5+MDyz=*Mr@r$ zv&UQ=F}{oU6%3#Tr{zNk@ji^I3@pFDpDEynU}Qgyfp!kvQ_B_)U@zfQxP%x#UxQjk z!YrD)yVKlhH1>;`EtLFAL?}#b>LINwis3w+;h%BgO+U*mTtDcfDOeJeAzS~~_oGzR zQ@#D_utbFx)^9j{pFl<>`dS2ch}^L#>7t|vRJ8NT%v68$u2bTZWPhHtwZc4GuNk4W zjjVFRR;8xWQbsgj$PbVG`eM6z7YreFPjM6Keqf%^B1jYt9cx%?NG{ABZuY-$#y{Hs z*gGaCnnW`R0a|EwZZnWNg)s9wP~mgIg* zr#_C|=l_U{JJm${+{AE=xbs$KImjo)|t+Eq-)P?iRu@ zh{#43cGLm3mKlz8^MP0s^4dD)MHUC+d8qXLM%}mjtBa)*Y7CNs4L>*>;WH+hwn&KW zM%XN{(pCj)NW8R|Jej`i%uHGd_9A?tFgm|_hgtk`rSrOx&u)^e;Ed_%??fp}?{ww} zxA1QOIms6o9YoT&WH+3jYx`Ils(n!UOLT7-fK&tcNQOanh}&AmYD^WSFZm3+(@|~# z!L31d!yJ}B%NRMncO0s;oisQ7_Wq#uI$l7N4ZKkFb1&ALY1IJO2n1@vDoTr6cyaV9 z{jEIwXF5RTa>{XF>aX9~%hC8iu|iz`4=Fu%kI4zm8YGMyqC9MC8y!Fhw-m_1 z(yj=w9hX66d{W1bUE9Gy>o44y*_v$wkRuC zJl*!&TW!CZNlQb5)`KE3)o7%wukE8TdFoi?%U=)n$(j+EP+bxgdLS>d7s@b{Ok6TI zY-TZ0Yc?7C4#Ri99C_NxNci#cQefFgTr}^A$Z7kFkb0-BO@`}9-maxJx6}Lxs0p*` zlfwm54_OWj7Q)U>VPidhhvs_?>v}QMa1tsQjP^Mt0tffAin6a?pK0F|AelKNMQ&<= zR#1w|;&eH&mTq2MyomUn^R)iNZ`o=k;N~JA#^f)Z8=+}omzqpk3f2Rq{l~N9ivf+L zjm9rU=dkm_kJzHmm~s9pmP`Zhg%gtS-@)^L6;u2%y@tjp7z-(OD(UHELy()ry!TvT zcWhiOc)tmtKrs-k^l8s!@2n|tw^T-TX$4ENSE;B{03wiVl`6hO+I%rj3lN#+`;paj zT<&Jx%c5>A(gRVq$uCd~N)FTjBAr-7a(F*9SzeY<) zJU1fWY=-732d4{7K{(>i|Pbz_-aI!=DPXymidk9a3Rz-%^PzzT19Itx9q>S(BSAS1t88 zQcfJOBFgZ20yv#X%Bdvc4=K(Yo?C~>`pyi7+oowiUnEG%AQ8JM`NN60MV_M>M{6RY z;yk6KVr5Uu$&fvn{{LQ?K%d@y+IA2*2K>eZ&KnJL0IiYN2DHtb$NGJY`}^~HzK`2_ z+D*^Bw))1`_ZKR!8@}YD?Q`#V{%TKA{tk_as9kW_)P=(AzEq}?vI;#n)+P92r*lkkf_Z$LL& z3~?d7oVL7$P`v~ZJvcht;?PSScPUH6ReEQZtl`^t>*9I1+!r)Km!?SE^DSDxJpfKJF+}Qw}L-&4z>bP2BUyGP-YTRzG?}@Khw+Hy@K6JJLmS;y9o98 zY*hQ9EA6y2*5yc+>(X(V?$S`mMxYxst8Iq zC3)|MtiS);hYK?sG_(2NOfx?(u$wSi!XqE#=3F%rN8+FW2 zcSuHn*>YN@7O3_*0rd(3EqhY^`)GitFpiTF}h#)-H2qDr5FOTGd-a zt=D^UY28f98ac4^FGwf*@_Rg>{GyJlrEpyiScZ$ifr=*!PJ9&hRz^nS%jNx_J3YU` z3*uVqeaq9^<`-^}B7cxSvzna<`?qVfqC{J##1?)1Jj%^(tch}{$fzF)s3yjz5c|LV zR7N0#Mn~ZKO8UM*eOiACfd7Pgn+;?3Zq5JYrXb93mY}(D$%=!)2MoQ0zF{gnk#51L zI{bfHK%E?7a?H2V3&&K-9t7WapB^Pgqjur>p~6Vo@S!i(4~4MwT!|l5@sUdyx@Q~WzSDz$#0^#RzkRuSU2|w0hEzBfy_~G2+t}PQCsgg zdwO{_mt3s$vS^IAupl{*|Y z+)Pl=!@%V0%9jAQXD!0x7Cf6HGlIv$H^G?Z1G^EDc*+^RF#U(CT1eY!*D2dt<3hUJ zinES-*UK$kv3i7@FW*YV7E2)doC|$q`|cP%<*_A-siw13u$mz9g*+KsrD*1WEY9R% zfhgv?M=QnaV}&LvG6DKo*q*uRAJ3wG`&gVz3e(X}YLp5iT#h}Nd%3=a`U%~MpD4`= z7`(^`WjhdE$)vT29!acWW?eB8;GAfPSGSw+tln{ET(MUD!%6CdR=q;qt8Ct;GoH`> zE4|}Xyjo}&WcqmE-d^t}$#oeESx*d?Nd`QlGSNhqGH0N^B5ee2!9O1Y>CeyO0nB5^ zUq0mlw#TsB9}E-i<8L0WGYgB--#z(md+`rw@!x7P?Wf3&OXOU0GF>mp zjuGYD{TMyBkR5xlb&3ah59J)s;&t*JGM`Mi_sx7N0hw3&8A9I6fH%z|zT-*9r#kKO znao%H4DaCxrvb|EvzhP$I10fIAUp3(L5{yS8VnZsJe3cX?5{5ir7ejPZD;vG&!-hs z*4Q||;Zj&8*auCZJuT2e=*KTv*3!%#AR$B>s~Kt$zNYW}8Mcjx`99HsaJT829Z`x& z94H&qNs6GJQKJk~nMA+e3Ot&v#CZu&NoTTB`M_2}rH~W6{xPeEiTO4+79%R${i_B` zK;iY>*DVY!zQ(4PTk@NRKbH#hAxNm~&L5V!$LPw?r>S18XR#1>;%A_n15H-E7MBV$KsAwJWNa!e{` z2`=}TZ`Gg=j0aES5#*T1ZWHHc&tIFJTk5Q_gUx(IYEfy&rZE}!Q|!pjv%M3I>MV@` zc+O2Te-<0nIXeRe1{xPQnbl^qS;xYGv3loq%x#}9q@Fe zkU~<)2TcekNF(D8wdD-Fj-~WSB=Mj$RWzIE6{O;@9w7YiF|#SV+f3BW9ATy86*we< z9}rk_b^5423zKFz>7JBADOW8N@ z>36KgV#F&URbm(jk`O?zxCGNo?}y+K(t>?VD@6PBplOX^Quzqz5m=_r?NVX~5WG+t z_oYg?ri#caQ~bt-&8MT3st?#$`e6k7J#N_FH!fFMFgO0+o#LY#@jvrZh<3V?D{~)a zDtWasXEw!OPOdtNzKC0QuQ?~t>ht0=a=!PX2o7FKmhCFfA%)!W-ED}rP!XJ*G zj@bWV-Onwe7q5n(w=x=)+%$wFk`_A14Ph|B;DHri12#ji4dF;T6os3H7{VsWP;i#c z(t5){8-^^rHYKZjMix>CA&WQ*Pk$T26(P+c0wwxog!4+&y3blDuf=c&@gHa5qfPJM z?f-$|chDfBpu+#x)l~*W^?YqQM2R0I-6$>HEJ#VKfOIG!NSEZ&A=2HAgmeqiozfxQ z4GS!=H19>=|Ka_3_qk`D6LZeoojZ4?{Ci<*%MX>F!gc1r0=Z(y&1zEJ>3Z7cWOG&1 zc}DT|0G9n;2x#nC(|Lp?HP)}gI>^@gj+dT?T8+*v&D_NfWGB?Dsbt3e96aYf0JGm2 zY|L7?S)HjnM^)SIgy?3NHGZviKWT&XhJWf7t)y1J=r1h3op4me862}ZX~1$mE@t+j=8QkHQ zzj#Apm}E9$ol4OiPKaqMPO?;2O&_5MV+GOsOGFl>kqI^@{f_3gKAm`VX!UQz4ofsD zm4Al`=R`ksji>cIS)S5~U^d6+qul;jT*_;&T1Iomj8kID{YplP0@d4341(mqxtXa= z?^m8J8i@B&jI?E8V}0DPGOvC>-gtHyjsKu@Q*^)VmElp|XsiYaJl?;T2o1<1A3)yc zB5=vr^U`OOLQyeMf=j9qPf?%OYGpyLcS$bB)aFYD-A?q5YfHeQdS}y3n{s-$kc$zu zg^TkO@r3ndO}7WpHt8% zh!+vPOB21QCu9b0sTJehOAoe|Wmii$|EGr=c=9|j))tiPfsg(-z=>$<5;p(n zKj-v`MZ(|tC1#P4@egyAGCm`DTt0kRuMhI$uLfo9G3%oL^A*B8c)F+HSNnr8maTp< zf_oKDC_uJ_&8H&rg)tEo(I;!hzy-M8V^zkJVKX58=kC+rC)7^%7a2$3qK4g3iM1x* z3pZsxny%cc_v32CpV!8Nr@2^uXy|L^C&qYHaQVn3MgA@PPe1Y9e-_bEFtpL@k6Nj* zRm$dE#zwVW3{8HRsNbW1As;MvR7}qoKArJvQ&5=Toj=jFs6Qphw>el5cRr?mPDEXvdH zLr>%q`~z!0S|msc8?3;ob$05CWWB|D9lWvVt@f6fl+pbKGj{h&iy_ImCFuy~xc>BD z0Vwl-=CnK>;>1yS!b4ByV-l8?lhU6FsMY%*5KsK8oX(%TxRg5CJp#lkdkETA{0yE@ z_>;6MA9iZ^`8>rUy!FBFGBdJ@9{c{1HUHhA;bNAesIOHal zq^|h|X(|Rz{U#G0+E;XAA{TK~?xLd{q7JEaY6)BO$k9-1x@~+C!Yo=_D%D}Bp|OVe z>1r`Ld-)8rP_-pXV_SPx{6z7&m&(ENZ9>2~sZYdc!{5!mPWm(pPd!Y&`}CTDu~*+{ z%m51if(VpZA@+6`7pWzj)WJkjruTL|p$pC2o8gsrfZy|%{&|8QQKMd3p_l8L(?|Lg zOBA%;7)QsaZ<0x(^%_hyOlekDgyJBOTMl*B3qqSe>C0BwYV;kjRH9Ugo7rQ%ZTXG| z{-nD?@PcbBxw)G;+RONE^G*upw-Ye8=iOIih@mW3c!*r=I_=fIFAxeoX11?%q^vD( z3Xzg=MJ^p%dmPtn$_Z<*^jN!i9ed+@kupj)!7+Q)}O{xk3fs0NkjbttYNYIK+3WRb}Y4Kt*> zYd+2~+p1Axr1+6BaD-CcP-Ikow#I39w+hzBqsJv7%~A*!v^B<%VZ??kCY5^a2L-lh zJqdc{WKLe)??#XF6-ha@G=a!>OkGj@x6OspJ9M<)m`NG&uFYC-V=XB$&r~bDf}bA5 zlTxnp9U47a;yu*=muO9gUeNTCYBU zl9Q~psY{3eX(tG#FCDBTbQSSEf5fYRwpVyV);~ z($R3fIxAz`$uLhVk(AK?DY&>)8JOr!IE*xuW%L!3L+yI?D!$D-+o7-R6_p=W17!@F zEK%NnR|)A;NXSK0gLt4Z>R)H2yNk`;CNO=1OvFP_Yke_MmfRu2E264k1?N_B&z`&k zi3EO*Z3eg`G3^NjbE~%4aHKDo$%>57{r*5%Z{FINM%F2OYwN>k0XyXZ3#kCUAagXd zH`p)G6xt}>{$N>WGwW`mlqvzeeG`fk_$66rzXp_^KcUlw!~h7q0;Nq1T_ z)VI7d%8Al9`#!r`8)?UgU)!BRX>NlkN)e>sH5$ssIX;xYaY8_x>*4Q@$i;VXFmMPt zA0dWk``fjKpuCr5M&iW60 z3%4zdSv(-ztXwqi%;Jan=Eqjx3}lh-83n*+(UA=7JTzg_hqf}o;zW%Hm^XjoiEy6P zBNF~dN0bHjR(7ovBe8o~h;Im^YtHU;(m;ETrR9sx!Kd|kfFWo=zb=K)(bpm& zrKTn`OpeT(OM#IpYrg3H*;E|(k}}|FrUM_Oa59~pZuqG(xj=lvC*5RQ{}ByTs@`<0 z)kn7|4-UlJVo;<}LYA>xg37~|-n3w(D>x&R z)WU_(KWQB34xry)Jz+oal%zNwimzLdqditlq9ZLx*8VG?`ofL*81{!#M8w~_7ya@L z9RhZ94_$}ppSIvPm9(U_UfjqQ(Y{%1bvS60UX=5!(v#m{)cSbxn^@6N^l0im{pnem zA2}*M-ipGHWjlHC+WQpX(GT4+4M4xBsum)&7T|sKCupAAm<$v6@7 zeT()57R^Y|H6nhD%7u5>ETRDiCo-0_{~P1ZnYDhc=*(xn!D-!y^~cgRd7fcBLAHe$ zavYo*ZwJOQALjzbR`4rfE$2Z?Vfr^3lmksv10^`)Da0_`c@_i(CYTg8V~X3ZhQN+5 zhQoRm>)78HI@!R+uHJuy4yjWdMsV#3)+!X;GykCc5m=KEScwjDxL_dM3LZ_%8&z`k zRs@mptpwifc(OCbnfi9Ik~1w^xjBWH|4jK$ru%7>!~5t#IuJ}o;E;52Hg~gK8l)PA z0Lz1>{*+FI;*mL?;yUbV5bnftvQ7+t*3L8dQ~$Or^%{u`JmE*ISILqTS@_l1Kky@| z(Cnm3%?!HZll^(;{-5l?X3hLvC5xdIJgY=864+F@of4GYPK47Lyh^e^M+juQ{;n`f3&4t+Vy%6}G9YPmTj=g?R2 zkPS4>18?9DzA-nOd{rBgT<}I9M9W>~P(fT$`L`oWJA!Fyu)#d0!BYG4;uroKM_g~s zMwjS~k}oKJbu9@j-binXxr$`2qJkEmBa zyF|Ps`*Dp(?o>&BmY!7wDy1le_=Jv#tX>Lls_)q?mQ7!ZNk>v-H8d~WdS+EkiY=16 zC7%jm&$e`J-9*FOH_@jzhH$GO886Ik+myx|15ygXn1V8{!pBZ~;BK45#6LgLVjZv6 z1&)oM*1kJ67u+j{zB=k0+DCp~AQ0s98&@08ld}Y!6vzH>_DPrSfn9lj{bF(*(H}Ch z0DF3IUu(g=@D#dFGhW5=pC6`8=GSotlyEiN(JiKLzSI!RB^8hZKn z+Fj6tpO^Em0iqmjr$p-;b!3D0FQk~>_d>>?-knr?^Up&&rmaRrE zC!Qp?3j4@*y{|VXm}lFVo`&#jp)V6n-INK6q7#AfL7(L~!VpDack$o4<%b0ag5SZg zzjjhzY{YCnZSS~(E{NSNtFJ!l>?e$s&=z0Q3^rsN^YrBN4i}{HfhUnC`xEOcPV zF2JsfpH05V{k(zc0EXzsR`a|T5~;pE8h5x6cw&KGqy3X82SfF=gUzsskga>w2}#EdK$Xyt?tN+6zY9H|%om}N1h3+};?W!}10rXi=t&GhxnyA*7 z#UH5`r778Bn(^ys`va&jGPyeXOfd*LNuTbqs<&Wq%(s+NT;G6~`ldv!M#`~~Bn@0aQhs3eBB!fn`Z!-KJ=Vm;@)Ww=jk1?|xn%l7)+veu| zGX7J~>|}eVa($nq+oOoPpo9Y9gu9@4Qb2#Ncc;5#^g@*vj`vI3&z(wk{f?9A$|DpD zU7IYPck@n!YpT3oY{#v*YL9r4LA6Kp3Pm>|E@qY!(^@6Nlb~~Vx)c7?ji1Y}KbgiLXzCED>*$(!Bz_Fl>@jbNY~65!_};s4w;Zim~r7FOHUKMkdT{)$`h7$k#qA2vZw zgqlNV`JY)B>aL%q-^(6%4BukFG0#qc zED3B}K`=EUEP+=VF0GYlro2m>S5X?hX~+>$4EL&gGl7smUuH1Krhi6EUVd{u5Zw&- z#kRF*(cqW0x}@Vnwgz#En=7s3jKS+Dk%PY;Bd8!K!BI`PUJjPq11^o7MK|g~UKp5f@jZCgCvF>;!pXo( zDbnM~+3Mv&I&g+A#R+e}3=)`DOquXwSCCEmhE~7I)~2XL&$Jj<`GkB)3i;wf;(zQzjv1X>J^_`7R4RwvW+zm^ z)+L-rcUnq{-v8I)m)WhLc+fq|7qr-?|JHj*c%w@PhdI-`jrW}#aZa<0Vrghy!aE#; z{&HrzZB_4yOw|LfAHK|)?~wB4u_L^t2~@;I=se#9Hr8R~0-wwtW4uUlIv!ND^ldMs z?FdU?82l^PztTE1RYAtp8&VMRjP#ebJF1GgqH5dfli#hchf|pg$yo^4nx8bh`|ixn zPY35rpB)z>&8SW<_ln_&BMm)SA=@OdN>ugV#rrf@v~Qo0);Fv*KO2sT4K($&r`LC&%q$dUudPbyX6JtCS!f(yRVG{7;lcB zQQE#1g!@)7JAqPs?9~|_v0PF+(p_Mtbn+MxUbriXI6<;ZfkkSHRgS8e~m5^$q@?2ev(3-Q?`Tm&BNtiSv*#Zb$G zb3C)mNQg4(?!h_kK`vTMv2G_2%8TP5K^LR2mAnlP96Whh;rwP#zudV4bajH^_}8c> z(RF4Q$@^QQ2GV~^88yL7SsSnPC6vSY)-(E_i?eY?J(rFq(-i;s&m|Zo_h1jAwE~Z`5Bx8zCa76jz>UAjrAWWu|#JCrOtp z^SfaB!ss$1CJZ}7{)zZ_-d!zo=3(+hx;K*!KUDlIDhg$}h61_uQT`yOH9K2}s}4VX z|6W#wE1SVhqszuMy2n7l$x?p2l)_M!z>Hduq=gFc-#YUeDdy7g9>Tp`1gj*S%fL{T{6cc!NiwIIfV>xYs!-EhMI*O0R0FI*1|7+hEkmGNLBsk%`un?K6~m+k&w4+q zGK8|GGC}f(sDD};6DRL5s_cQ*bOrNSMI-8j+Msd2VB0e|2_YHdA!0|ZgzdX6bM9ZV z&A#xr?q%qjJ6vOPKl8Py*}AEdtq7@!vIw<;xCOxAEK#FB$I!rt7zVqcT<4Y3N8nV* zvDn6t=b)!DX5xFx&#T8l<>!^uVLVtOi#lyz-~I6$EG4)1o{!kstndpEN7RX#k%5f) zR0Rmx-(tC~m{GWmd!dp~-Im0cT2%ivw#v7aV>U&6{ia4$mk+W3%UdPfSJWIxzNmx2 zj%WPYB@Eni>G1V0s7FYP(0Hg5e4%MZ!3vI=3ZD~8xeDlczmJ+?#(p;pmwZK>C#JjK z|5N$KYuOde8!dh`Yy^Dr*KTl6t^RyOt)5=B;=@Otk0-t%DJhWwC;TS`oZyL3; zIBE<>QdsOW(I(D71G$ZCv5-AIyH% zbNXxNDVORnY!v6|v2WL%X18P%r)@iIGzi}Bh>H=}6LajbW2@VBUSxy6-Tka*|JSa1 z2t{~pL)Z4uC@%WQ&+hsT9mM!`R=%O@O?m+mJlYVtDVJM3FZ>L;Dc=CyqFcG%KvR#` zqZEbrqtk8A_m@aO&fx_f2FgKz)D3!BVW}oC%#@JTxdXC z5_+5q7$Izey#sGuQcS{%YhQa)*vP3anI44BpiVk^eDxE76@_hMES%>xdJNQrn?(jE z`4>i3UrogHf?*EZ`B)x1`!KBwt%}q>;f~IrtJ{x|eV^T*JA$De9vid2v1Nlsd(V71 zW#z83@_6GIx72ezrt+2Fb(Li+3FI&pGGCzI z*w0cS2xOgnNBja#f}*&(I#CPV73}(&`_5|?k zxAff`gyevgL>s*@j}xcq30Hkz=eELgMy+;r^rQ@bH=jh=l-JB(` zyJqK&-ELWzNJS3hr(OToaj2WD60G0*M$<74yMG^irubWV-ciUlY7RD~D0e*BD7ca1 z^M$Hg8w3+7Z?jZO(;}bx0u!ohJEB#VvW042@^a*~*sh(oEbLbblK=hL$UBYL)F8d4 zH^*kwahRFKk?-yZx{{kYY#*pzIkY%!=M3Anew(U1pfK(g1I?JOrWyRb2$d5#$l$cn zyE&oIE`@q^-AYW3$Oi+lq-$1~dAIec+$Bqa*Szj<8OEktzQ40@))GU4Vktsbv!E1d zC>FVvlf!!}ujtZkY&u80<=Z$oXOYl&IbLggGjssj8TW3K1t-rA z!7eqj*stM+^n{0M01)%d^-D%hmOjEaz00S(59ToPZ^rd64MDA zx}|M3eQ_VamRIJ~Rq(=9bn3Wpyx!BBBRAJhRF2&$V|MC09(Icz!`R8UA31t&soX1* zV}F+LtjJK-N!;0Hg<;LA_13DSC);Q`j_I>YvKCs)e^uI9TD8Tbkn+P-BJe(^B^7#3 zbbOQd#YSVs>S`TDIr+)Bx-KwYs@?1bW4YPS z-QL*m#W_O$geiY^$KHGn-@xS1ubp7hjsTm5uCfze@2DwVPmOpGdB9v1f1mlYI5s$& z7uu`PfZjvq@)JCwl0Q==G-iqKGqr5HJm2JWNjmaSe0#uqHG9RU9MX^h@g_Ns zUd#CCP*f1-x4xA_zJ7g8wJ_v(qa1?X=hHa^rOZ>#0mpt`Py5d|owF)+&7r`oUMi9h zi{{xU5&r~54v+K2#%w?AoW|;1Xi%TgZOyyQOV?3@UxB8zzldF|Cyg{G5kb#{V`+P< zrd|(;|BWMfvcmjMX|06HbufVeBDS$pD%C%5yHcCdOV6Uj*%yFdp5B;7`;>on2l>x87+h4ve&H}d+meWt>`D*QZ94|>r|3y?C*-+5u#>^Yr?TG`?y%VrHPOW{=M^4fJ& zJC>m_F-^_7TrQ({W2%|s&vo=Ktk=o@q3d4~BN7C5q*Hv57eA=J+Aiy$e4?rEM;curvryX)%3rX&_5WgP58 z1(J?7>i8`rPNw-07TBTd8F&_FG6Q^^b*L8DIgH9vh^ zKNd-Dq}@9>a?QorK93InjuF$V0-i0_bLA5w+?{g2gU_%#qNLGq_ zr3qD@bmZoU=7q}}d%pPd5m4%oC>0Whn4jnO;c({CIRlwSir1Ezo zw4tD>W^W?JYE&2;eE2$j04b6u32QV^Ti=#Lud>d=x&u|j>0%Ic+p*U7p=9>#h>L%E z)6ZY4F}Xn*X?P_ z)>Nvo08hn&JfWJB`zac!L$vUPpBxA_z)ZsFyyN`0RDxoZNp*c+5-Nmj!N_Krx<%s_ z^}A-)?tS6pc#B;$z8r|)d;NN>5*t{aqBD*sN^tLBFMSM2r;C|)LD4?+!$9TWAnyRf zFn=H>N)a!yyYPvsSomjmTctN6$Qt=>m2=i@MQci_&;%?N{_9=U+mq|G>&n!P&%|s< z({Dt9V>$=?^CcM49WSkCEF5qD4)S8^IZkhVo+Mz?wVhzAp1-Lp)6qc7Q0YCcAG}&X z%d(n)&fd1%M46^4`RhACV>f>`ht=SkIDg4b>%@-rRcqF{wfd9Xaz=4{+_ z9G;{^o14c_b^iHC5^~7Wh7;6g?DhK^T8nsC-#}LyM^lboZf!CLMifEhItP@0GdZ0- zv1`ZJ#dDJo&WfRE#1f$b1*nYCEk!zni;wi*(TJ<-T9t`Bb2-`YcA}0@EZ(i0#*|6s)Tyjn5w2WDxKIQJfWV{Y^fZ z;J!=E{`tZTliLRzlR!9RQMsww&3S}|2D6)^df^pho=ppo@!3&S_}c$?IlCz9rwlK^@!S zzd!74<(>b$uZ@#6h^1|+cwg5i8<+@D{?m7~$DpJxGh;*)S2=ij!Jj{&e4;c~$)*%D zW7`82iDkg*ZCXIZ?QLs6zOd9Oa1L|Qvsyd)b-~!wThKWH&JyVX1TIDY#D-gr@Zlp)pZ@S#9861w97|Shq=$6702yLuGZH0LPdX z+0<07g9Rb1b9*~4Rv@=drVpnIo?Fia+DOy3V?STlo3|f0P_BzHVy*+i ztY=ZhM(-#>5CMye^>AjCW&VeS((86!(wggb+^`wlBJ$hhujSQBBIjp&R-p4|Gf90b zHJ6PIm*=N;i5HLt;n7LhK;a-WxPSe^W@h1HVsc?t8^*sY7`I*>c4$88K#+1gt>yMx z^JHcIYBnKfZ!3P@{U~ro$!WYGH6AmiBe?mP!#Di4L&l?SWsk#QP`EaHsiJyx$8YP{ z#m2nzckMB>A;o^=aJ2Ssg$I3;>(RW>`sFpL73WUl@x-p6oiGHlGjKU{37NS{UUnZ6 zS~$*8TR2Ta_9djh1O0lT8~CKgaH4qukg##a9#xHZ{aG@Qv0X@3}{OhXzRnaoyDVY0#JAQ zHfvu!2;&06DZ*+}kHSv?VeB+HntNf!JK-KXok!vPyP|bo%l9CBXHkftn&hJ}1|ZA_ zuT2hrr?}S#G~n`eiWxQbZ@5DmPtiW)mvEY?2=xD&_H4ca?(T2mSCe><=D`M9^Pzo( zd~fx-mM4OKV@EAHLKy}&2m!6q58&3y_L8}?8IAH)69OI_bZ1~3``TErVe1_Ja28Y~yrC~?+Xc-M)DUU3Q zvKZiSY*GD2ptW_m#2v~9-L>wVswxow^xkqP(Aq1|A8ll>DdcYy@JQ40o(Oa4${28P zXsj|4Vk+qa|Fzox3m$en7SQtf+jU~Jc2?0VARu1>#Vz9gqxZct!?Stz&J7LhYNC&B z02DWA%YH@o;08^=4aI&$6pu{rJrUAbMq9HVTGs+vuRSrcf3!pS&JKmAqp$DnU z{ywe@=fO)B!1Xi_xBSz4FVzC!j~CREdJI1g0YJX8`ilF3T=tIKkcjY+98f0x?h*Te zoaBz&#z^In-0qHC342uhf&9*iuVdIB$@lKaMI`01@5%oX0_0$2smBh033Px>Pg-`# zdvfEu4p1#gg!Mo!@ERbe8EL1*xl0P{cpZT3?};JT1NkO4aE&R0H!5*Y&I6DcD@T<* z_74L<83B4#dAtYmJIjUTq+UO`9rHhcJl&98^?_XOj+~YV^^qL#M0(aphv5S`*&Vr! zA>JeTt2=VJ=cAGj_2q)d)<71TE?f&enIn) zc4~L9Br!U|0}KR>kB`me5stfqWvI~~a^451M|{s&E*=ZcmnGjd*9cHIvID zObFz({W}hHF2*=&Q8n4k&AK*J~Y`Tj_!zS-w z9a(g=dpHhovXd!|%Ogw()LHwF@6pj8V4(LoF;Im*8m4v!8)>3HxrYe>&7Ev0LLW7c zyMs+Xp<_J2fND$7 zDW8Wbi~~eOBHZxxLyqbJeFrQ#^;msg0(~d*4X4=s$aSC%pc^iwj}<)PPBzk{^+DDO zKpVK#A4fftJ6RcSuY1{2X&`;Wkj);H#*P5AlIWpVc}Q;HUSnGIM{lYCCcOKRq<^on z3E(^~va^r}jU#|K0;k8f-Y0f5(3`cr{2#F4J1ou?;Xd!0gAqJ`|4RZmFErpjYIy;w z`(acRzFFAwLFOIMyhOrR?|(8tQAVIV74$qa_&2bBQvohV+HraA1_setKrNe%w9N~KA``vC*emvZ|USLh#B2w-K#slOgD zZ2&tW@jUov`7%(1zHve%$nHn$W8l`|1q8T%!)^OZQFv^Fi9r5;j~MVsfT>CU&s1qv z(KA48Pr$dn%~*GAa0q39gW6+lmP7sx(QsaO6Ok%X!c-tRonpQ5?*q6DB-^(alM=-LRE0xu1)AFRYhip~1v*N5r0H_-1M3EG zEfnDM>_HY7Wxml2N)SEBUIOSYVk`Z +
diff --git a/internal/errorpages/templates/404.html b/internal/errorpages/templates/404.html index 20c21fa..f79a590 100644 --- a/internal/errorpages/templates/404.html +++ b/internal/errorpages/templates/404.html @@ -5,6 +5,7 @@ 404 Not Found - HopGate +
diff --git a/internal/errorpages/templates/500.html b/internal/errorpages/templates/500.html index fac2550..ee64341 100644 --- a/internal/errorpages/templates/500.html +++ b/internal/errorpages/templates/500.html @@ -5,6 +5,7 @@ 500 Internal Server Error - HopGate +
diff --git a/internal/errorpages/templates/502.html b/internal/errorpages/templates/502.html index fc46425..2960754 100644 --- a/internal/errorpages/templates/502.html +++ b/internal/errorpages/templates/502.html @@ -5,6 +5,7 @@ 502 Bad Gateway - HopGate +
diff --git a/internal/errorpages/templates/504.html b/internal/errorpages/templates/504.html index 9b43762..3554e44 100644 --- a/internal/errorpages/templates/504.html +++ b/internal/errorpages/templates/504.html @@ -5,6 +5,7 @@ 504 Gateway Timeout - HopGate +
diff --git a/internal/errorpages/templates/525.html b/internal/errorpages/templates/525.html index f94e931..9ba510d 100644 --- a/internal/errorpages/templates/525.html +++ b/internal/errorpages/templates/525.html @@ -5,6 +5,7 @@ 525 TLS Handshake Failed - HopGate +