From ed0fc1a47b86a814fcb931d0f934d29b4606f345 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Tue, 14 Oct 2025 11:22:41 +0400 Subject: [PATCH 01/11] feat: work on performance --- .github/workflows/test.yml | 18 ++- client.go | 96 +++----------- client_test.go | 135 ------------------- data.go | 38 ++++++ data_test.go | 29 ++++ executor.go | 61 +++++++++ executor_test.go | 265 +++++++++++++++++++++++++++++++++++++ go.mod | 17 +-- go.sum | 45 +++---- 9 files changed, 455 insertions(+), 249 deletions(-) delete mode 100644 client_test.go create mode 100644 data.go create mode 100644 data_test.go create mode 100644 executor.go create mode 100644 executor_test.go diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 206ae6d..184d50f 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,13 +10,27 @@ jobs: tests: runs-on: ubuntu-latest steps: - - uses: actions/checkout@v4 + - uses: actions/checkout@v5 - name: Set up Go - uses: actions/setup-go@v5 + uses: actions/setup-go@v6 with: cache: 'true' go-version: '1.24.1' - name: Test run: go test -v ./... + + bench: + runs-on: ubuntu-latest + steps: + - uses: actions/checkout@v5 + + - name: Set up Go + uses: actions/setup-go@v6 + with: + cache: 'true' + go-version: '1.24.1' + + - name: Test + run: go test -v ./... -bench . -run ^$ #gosetup diff --git a/client.go b/client.go index 186b6b0..6e19578 100644 --- a/client.go +++ b/client.go @@ -1,86 +1,26 @@ package jsonrpc import ( - "bytes" - "context" - "fmt" + "net" "net/http" "time" - - "github.com/bytedance/sonic" - "github.com/go-faster/errors" ) -type RPCResponse[D any] struct { - JSONRPC string `json:"jsonrpc"` - Result D `json:"result"` - Error *RPCError `json:"error,omitempty"` - ID any `json:"id"` -} - -type RPCError struct { - Code int `json:"code"` - Message string `json:"message"` -} - -func (e *RPCError) Error() string { - return fmt.Sprintf("jsonrpc error: code=%d, message=%s", e.Code, e.Message) -} - -type RPCRequest[P any] struct { - Method string `json:"method"` - Params P `json:"params,omitempty"` - ID int64 `json:"id"` - JSONRPC string `json:"jsonrpc"` -} - -func createRequest[P any](method string, params P) *RPCRequest[P] { - return &RPCRequest[P]{ - ID: time.Now().UnixMilli(), - Method: method, - JSONRPC: "2.0", - Params: params, - } -} - -type Request = http.Request - -func Prepare[P any](ctx context.Context, url, method string, params P) (*Request, error) { - buff := bytes.NewBuffer([]byte{}) - - encoder := sonic.ConfigDefault.NewEncoder(buff) - if err := encoder.Encode(createRequest[P](method, params)); err != nil { - return nil, errors.Wrap(err, "encode request") - } - - request, err := http.NewRequestWithContext(ctx, http.MethodPost, url, buff) - if err != nil { - return nil, errors.Wrap(err, "new request") - } - - return request, nil -} - -func Execute[Result any](request *Request) (*Result, error) { - response, err := http.DefaultClient.Do(request) - if err != nil { - return nil, errors.Wrap(err, "execute request") - } - - decoder := sonic.ConfigDefault.NewDecoder(response.Body) - defer func() { - _ = response.Body.Close() - }() - - var result RPCResponse[Result] - - if err = decoder.Decode(&result); err != nil { - return nil, errors.Wrap(err, "decode response") - } - - if result.Error != nil { - return nil, result.Error - } - - return &result.Result, nil +var defaultHTTPClient = &http.Client{ + Transport: &http.Transport{ + // Reuse connections aggressively + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 5 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + ForceAttemptHTTP2: true, + MaxIdleConns: 1024, + MaxIdleConnsPerHost: 256, + MaxConnsPerHost: 0, + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 5 * time.Second, + ExpectContinueTimeout: 1 * time.Second, + }, + Timeout: 0, } diff --git a/client_test.go b/client_test.go deleted file mode 100644 index 59d7b99..0000000 --- a/client_test.go +++ /dev/null @@ -1,135 +0,0 @@ -package jsonrpc_test - -import ( - "context" - "encoding/json" - "io" - "net/http" - "net/http/httptest" - "testing" - - "github.com/LiquidCats/jsonrpc" - "github.com/stretchr/testify/assert" - "github.com/stretchr/testify/require" -) - -func TestPrepare(t *testing.T) { - params := []any{"0.001", true, float64(0)} - method := "testMethod" - url := "http://example.com" - ctx := context.Background() - - req, err := jsonrpc.Prepare[[]any](ctx, url, method, params) - if err != nil { - t.Fatalf("Prepare returned error: %v", err) - } - - // Read the request body - bodyBytes, err := io.ReadAll(req.Body) - if err != nil { - t.Fatalf("Failed to read request body: %v", err) - } - defer func(t *testing.T) { - err := req.Body.Close() - require.NoError(t, err) - }(t) - - // Unmarshal the JSON payload - var rpcReq map[string]interface{} - if err := json.Unmarshal(bodyBytes, &rpcReq); err != nil { - t.Fatalf("Failed to unmarshal JSON: %v", err) - } - - paramsData, ok := rpcReq["params"].([]any) - assert.True(t, ok) - for i := range paramsData { - assert.Equal(t, params[i], paramsData[i]) - } - - assert.Equal(t, "2.0", rpcReq["jsonrpc"]) - assert.Equal(t, method, rpcReq["method"]) - assert.IsType(t, float64(0), rpcReq["id"]) -} - -func TestExecuteSuccess(t *testing.T) { - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer func(t *testing.T) { - assert.NoError(t, r.Body.Close()) - }(t) - - var reqData map[string]interface{} - - decoder := json.NewDecoder(r.Body) - err := decoder.Decode(&reqData) - assert.NoError(t, err) - - response := map[string]interface{}{ - "jsonrpc": "2.0", - "result": 42, - "id": reqData["id"], - } - - w.Header().Set("Content-Type", "application/json") - - encoder := json.NewEncoder(w) - err = encoder.Encode(response) - assert.NoError(t, err) - })) - defer ts.Close() - - // Prepare the request - params := struct{}{} // no parameters required - req, err := jsonrpc.Prepare(context.Background(), ts.URL, "dummyMethod", params) - require.NoError(t, err) - - result, err := jsonrpc.Execute[int](req) - require.NoError(t, err) - - assert.Equal(t, 42, *result) -} - -func TestExecuteError(t *testing.T) { - // Setup a test server that returns an error JSON-RPC response - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - defer func(t *testing.T) { - assert.NoError(t, r.Body.Close()) - }(t) - - var reqData map[string]interface{} - - decoder := json.NewDecoder(r.Body) - err := decoder.Decode(&reqData) - assert.NoError(t, err) - - w.Header().Set("Content-Type", "application/json") - - response := map[string]interface{}{ - "jsonrpc": "2.0", - "error": map[string]interface{}{ - "code": -32000, - "message": "Test error", - }, - "id": reqData["id"], - } - - encoder := json.NewEncoder(w) - err = encoder.Encode(response) - assert.NoError(t, err) - })) - defer ts.Close() - - // Prepare the request - params := struct{}{} - req, err := jsonrpc.Prepare(context.Background(), ts.URL, "dummyMethod", params) - if err != nil { - t.Fatalf("Prepare returned error: %v", err) - } - - result, err := jsonrpc.Execute[int](req) - require.Error(t, err) - - expectedError := "jsonrpc error: code=-32000, message=Test error" - assert.Equal(t, expectedError, err.Error()) - - assert.Nil(t, result) -} diff --git a/data.go b/data.go new file mode 100644 index 0000000..4487241 --- /dev/null +++ b/data.go @@ -0,0 +1,38 @@ +package jsonrpc + +import ( + "fmt" + "time" +) + +type RPCResponse[D any] struct { + JSONRPC string `json:"jsonrpc"` + Result D `json:"result"` + Error *RPCError `json:"error,omitempty"` + ID any `json:"id"` +} + +type RPCError struct { + Code int `json:"code"` + Message string `json:"message"` +} + +func (e *RPCError) Error() string { + return fmt.Sprintf("jsonrpc error: code=%d, message=%s", e.Code, e.Message) +} + +type RPCRequest[R any] struct { + Method string `json:"method"` + Params any `json:"params,omitempty"` + ID int64 `json:"id"` + JSONRPC string `json:"jsonrpc"` +} + +func CreateRequest[Result any](method string, params any) *RPCRequest[Result] { + return &RPCRequest[Result]{ + ID: time.Now().UnixMilli(), + Method: method, + JSONRPC: "2.0", + Params: params, + } +} diff --git a/data_test.go b/data_test.go new file mode 100644 index 0000000..2cd571e --- /dev/null +++ b/data_test.go @@ -0,0 +1,29 @@ +package jsonrpc_test + +import ( + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/LiquidCats/jsonrpc" +) + +func TestRPCError_ErrorString(t *testing.T) { + err := (&jsonrpc.RPCError{Code: 123, Message: "boom"}).Error() + assert.Equal(t, "jsonrpc error: code=123, message=boom", err) +} + +func TestCreateRequest_SetsFields(t *testing.T) { + req := jsonrpc.CreateRequest[int]("sum", []int{1, 2}) + require.NotNil(t, req) + assert.Equal(t, "2.0", req.JSONRPC) + assert.Equal(t, "sum", req.Method) + assert.Equal(t, []int{1, 2}, req.Params) + + // ID should be a millisecond timestamp; just check it's non-zero and within a reasonable range. + now := time.Now().UnixMilli() + assert.Greater(t, req.ID, int64(0)) + assert.InDelta(t, float64(now), float64(req.ID), float64(10_000)) // within ~10s +} diff --git a/executor.go b/executor.go new file mode 100644 index 0000000..da2c903 --- /dev/null +++ b/executor.go @@ -0,0 +1,61 @@ +package jsonrpc + +import ( + "bytes" + "context" + "io" + "net/http" + + "github.com/bytedance/sonic" + "github.com/rotisserie/eris" +) + +func (rpc *RPCRequest[Result]) Execute(ctx context.Context, url string, opts ...any) (*Result, error) { + rpcBytes, err := sonic.Marshal(rpc) + if err != nil { + return nil, eris.Wrap(err, "marshal request") + } + + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(rpcBytes)) + if err != nil { + return nil, eris.Wrap(err, "prepare req") + } + req.ContentLength = int64(len(rpcBytes)) + req.Header.Set("Content-Type", "application/json") + req.Header.Set("Accept", "application/json") + + for _, opt := range opts { + switch v := opt.(type) { + case func(r *http.Request): + v(req) + case func(r *http.Client): + v(defaultHTTPClient) + } + } + + resp, err := defaultHTTPClient.Do(req) + if err != nil { + return nil, eris.Wrap(err, "execute req") + } + if resp.StatusCode < 200 || resp.StatusCode > 299 { + _, _ = io.CopyN(io.Discard, resp.Body, 1024) + return nil, eris.Errorf("http status %d", resp.StatusCode) + } + + dec := sonic.ConfigStd.NewDecoder(resp.Body) + defer func() { + _ = resp.Body.Close() + }() + + var result RPCResponse[Result] + + if err = dec.Decode(&result); err != nil { + return nil, eris.Wrap(err, "decode response") + } + + if result.Error != nil { + return nil, result.Error + } + + return &result.Result, nil +} diff --git a/executor_test.go b/executor_test.go new file mode 100644 index 0000000..7c06ba7 --- /dev/null +++ b/executor_test.go @@ -0,0 +1,265 @@ +package jsonrpc_test + +import ( + "bytes" + "context" + "encoding/json" + "io" + "net/http" + "net/http/httptest" + "sync/atomic" + "testing" + "time" + + "github.com/stretchr/testify/assert" + "github.com/stretchr/testify/require" + + "github.com/LiquidCats/jsonrpc" +) + +type user struct { + ID int `json:"id"` + Name string `json:"name"` +} + +func TestExecute_Success(t *testing.T) { + t.Parallel() + + resp := jsonrpc.RPCResponse[user]{ + JSONRPC: "2.0", + Result: user{ID: 7, Name: "alice"}, + ID: 123, + } + b, err := json.Marshal(resp) + require.NoError(t, err) + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + assert.Equal(t, http.MethodPost, r.Method) + assert.Equal(t, "application/json", r.Header.Get("Content-Type")) + assert.Greater(t, r.ContentLength, int64(0)) + _, _ = io.Copy(io.Discard, r.Body) + _ = r.Body.Close() + + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(b) + })) + defer ts.Close() + + req := jsonrpc.CreateRequest[user]("user.get", map[string]any{"id": 7}) + got, err := req.Execute(context.Background(), ts.URL) + require.NoError(t, err) + require.NotNil(t, got) + assert.Equal(t, 7, got.ID) + assert.Equal(t, "alice", got.Name) +} + +func TestExecute_JSONRPCErrorInBody(t *testing.T) { + t.Parallel() + + resp := jsonrpc.RPCResponse[user]{ + JSONRPC: "2.0", + Error: &jsonrpc.RPCError{Code: -32001, Message: "backend unavailable"}, + ID: 1, + } + b, err := json.Marshal(resp) + require.NoError(t, err) + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(b) + })) + defer ts.Close() + + req := jsonrpc.CreateRequest[user]("user.get", nil) + got, err := req.Execute(context.Background(), ts.URL) + require.Error(t, err) + assert.Nil(t, got) + assert.Equal(t, "jsonrpc error: code=-32001, message=backend unavailable", err.Error()) +} + +func TestExecute_HTTPNon2xx(t *testing.T) { + t.Parallel() + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusTeapot) + _, _ = w.Write(bytes.Repeat([]byte("x"), 2048)) + })) + defer ts.Close() + + req := jsonrpc.CreateRequest[user]("user.get", nil) + got, err := req.Execute(context.Background(), ts.URL) + require.Error(t, err) + assert.Nil(t, got) + assert.Contains(t, err.Error(), "http status 418") +} + +func TestExecute_RequestAndClientOptions(t *testing.T) { + t.Parallel() + + var sawHeader atomic.Bool + const customUA = "my-agent/1.0" + var clientUsed atomic.Bool + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + if r.Header.Get("User-Agent") == customUA { + sawHeader.Store(true) + } + resp := jsonrpc.RPCResponse[user]{JSONRPC: "2.0", Result: user{ID: 1, Name: "ok"}, ID: 1} + _ = json.NewEncoder(w).Encode(resp) + })) + defer ts.Close() + + reqOpt := func(r *http.Request) { + r.Header.Set("User-Agent", customUA) + } + clientOpt := func(c *http.Client) { + clientUsed.Store(true) + c.Timeout = time.Second * 5 + } + + req := jsonrpc.CreateRequest[user]("user.get", nil) + got, err := req.Execute(context.Background(), ts.URL, reqOpt, clientOpt) + require.NoError(t, err) + require.NotNil(t, got) + assert.True(t, sawHeader.Load(), "request option did not set header") + assert.True(t, clientUsed.Load(), "client option was not used") + assert.Equal(t, "ok", got.Name) +} + +func TestExecute_DecodeError(t *testing.T) { + t.Parallel() + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + w.WriteHeader(http.StatusOK) + _, _ = w.Write([]byte("{not-json")) + })) + defer ts.Close() + + req := jsonrpc.CreateRequest[user]("user.get", nil) + got, err := req.Execute(context.Background(), ts.URL) + require.Error(t, err) + assert.Nil(t, got) +} + +// Benchmark the happy-path Execute against a local httptest server. +func BenchmarkExecute_Success(b *testing.B) { + type benchUser struct { + ID int `json:"id"` + Name string `json:"name"` + } + + // Static response payload once for all iterations. + resp := jsonrpc.RPCResponse[benchUser]{ + JSONRPC: "2.0", + Result: benchUser{ID: 42, Name: "bench"}, + ID: 1, + } + payload, _ := json.Marshal(resp) + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Minimal work in handler; just serve the fixed payload. + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(payload) + })) + defer ts.Close() + + ctx := context.Background() + + // Create request template; ID is set in CreateRequest, so build per-iter. + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) + got, err := req.Execute(ctx, ts.URL) + if err != nil { + b.Fatalf("Execute error: %v", err) + } + if got == nil || got.ID != 42 { + b.Fatalf("unexpected result: %#v", got) + } + } +} + +// Benchmark with request and client options to measure overhead of opts path. +func BenchmarkExecute_WithOptions(b *testing.B) { + type benchUser struct { + ID int `json:"id"` + Name string `json:"name"` + } + + resp := jsonrpc.RPCResponse[benchUser]{ + JSONRPC: "2.0", + Result: benchUser{ID: 1, Name: "ok"}, + ID: 1, + } + payload, _ := json.Marshal(resp) + + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // echo normal 200 with json body + w.Header().Set("Content-Type", "application/json") + _, _ = w.Write(payload) + })) + defer ts.Close() + + // Lightweight request option + reqOpt := func(r *http.Request) { + r.Header.Set("X-Bench", "1") + } + // Lightweight client option + clientOpt := func(c *http.Client) { + // touch a field to exercise the code path + _ = c.Timeout + } + + ctx := context.Background() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + req := jsonrpc.CreateRequest[benchUser]("user.get", nil) + got, err := req.Execute(ctx, ts.URL, reqOpt, clientOpt) + if err != nil { + b.Fatalf("Execute error: %v", err) + } + if got == nil || got.Name != "ok" { + b.Fatalf("unexpected result: %#v", got) + } + } +} + +// Benchmark error path (non-2xx) to cover early return branch and body discard. +func BenchmarkExecute_HTTPError(b *testing.B) { + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { + // Large enough body to ensure discard path runs. + w.WriteHeader(http.StatusTeapot) + large := make([]byte, 4096) + for i := range large { + large[i] = 'x' + } + _, _ = w.Write(large) + })) + defer ts.Close() + + type benchUser struct { + ID int `json:"id"` + } + + ctx := context.Background() + + b.ReportAllocs() + b.ResetTimer() + + for i := 0; i < b.N; i++ { + req := jsonrpc.CreateRequest[benchUser]("user.get", nil) + got, err := req.Execute(ctx, ts.URL) + if err == nil || got != nil { + b.Fatalf("expected error, got=%#v err=%v", got, err) + } + } +} diff --git a/go.mod b/go.mod index bb487eb..1754f42 100644 --- a/go.mod +++ b/go.mod @@ -3,19 +3,20 @@ module github.com/LiquidCats/jsonrpc go 1.24.1 require ( - github.com/bytedance/sonic v1.13.2 - github.com/go-faster/errors v0.7.1 - github.com/stretchr/testify v1.10.0 + github.com/bytedance/sonic v1.14.1 + github.com/rotisserie/eris v0.5.4 + github.com/stretchr/testify v1.11.1 ) require ( - github.com/bytedance/sonic/loader v0.2.4 // indirect - github.com/cloudwego/base64x v0.1.5 // indirect + github.com/bytedance/gopkg v0.1.3 // indirect + github.com/bytedance/sonic/loader v0.3.0 // indirect + github.com/cloudwego/base64x v0.1.6 // indirect github.com/davecgh/go-spew v1.1.1 // indirect - github.com/klauspost/cpuid/v2 v2.2.10 // indirect + github.com/klauspost/cpuid/v2 v2.3.0 // indirect github.com/pmezard/go-difflib v1.0.0 // indirect github.com/twitchyliquid64/golang-asm v0.15.1 // indirect - golang.org/x/arch v0.15.0 // indirect - golang.org/x/sys v0.31.0 // indirect + golang.org/x/arch v0.22.0 // indirect + golang.org/x/sys v0.37.0 // indirect gopkg.in/yaml.v3 v3.0.1 // indirect ) diff --git a/go.sum b/go.sum index 450e6ae..b21c5b2 100644 --- a/go.sum +++ b/go.sum @@ -1,43 +1,36 @@ -github.com/bytedance/sonic v1.13.2 h1:8/H1FempDZqC4VqjptGo14QQlJx8VdZJegxs6wwfqpQ= -github.com/bytedance/sonic v1.13.2/go.mod h1:o68xyaF9u2gvVBuGHPlUVCy+ZfmNNO5ETf1+KgkJhz4= -github.com/bytedance/sonic/loader v0.1.1/go.mod h1:ncP89zfokxS5LZrJxl5z0UJcsk4M4yY2JpfqGeCtNLU= -github.com/bytedance/sonic/loader v0.2.4 h1:ZWCw4stuXUsn1/+zQDqeE7JKP+QO47tz7QCNan80NzY= -github.com/bytedance/sonic/loader v0.2.4/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= -github.com/cloudwego/base64x v0.1.5 h1:XPciSp1xaq2VCSt6lF0phncD4koWyULpl5bUxbfCyP4= -github.com/cloudwego/base64x v0.1.5/go.mod h1:0zlkT4Wn5C6NdauXdJRhSKRlJvmclQ1hhJgA0rcu/8w= -github.com/cloudwego/iasm v0.2.0/go.mod h1:8rXZaNYT2n95jn+zTI1sDr+IgcD2GVs0nlbbQPiEFhY= +github.com/bytedance/gopkg v0.1.3 h1:TPBSwH8RsouGCBcMBktLt1AymVo2TVsBVCY4b6TnZ/M= +github.com/bytedance/gopkg v0.1.3/go.mod h1:576VvJ+eJgyCzdjS+c4+77QF3p7ubbtiKARP3TxducM= +github.com/bytedance/sonic v1.14.1 h1:FBMC0zVz5XUmE4z9wF4Jey0An5FueFvOsTKKKtwIl7w= +github.com/bytedance/sonic v1.14.1/go.mod h1:gi6uhQLMbTdeP0muCnrjHLeCUPyb70ujhnNlhOylAFc= +github.com/bytedance/sonic/loader v0.3.0 h1:dskwH8edlzNMctoruo8FPTJDF3vLtDT0sXZwvZJyqeA= +github.com/bytedance/sonic/loader v0.3.0/go.mod h1:N8A3vUdtUebEY2/VQC0MyhYeKUFosQU6FxH2JmUe6VI= +github.com/cloudwego/base64x v0.1.6 h1:t11wG9AECkCDk5fMSoxmufanudBtJ+/HemLstXDLI2M= +github.com/cloudwego/base64x v0.1.6/go.mod h1:OFcloc187FXDaYHvrNIjxSe8ncn0OOM8gEHfghB2IPU= github.com/davecgh/go-spew v1.1.0/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= github.com/davecgh/go-spew v1.1.1 h1:vj9j/u1bqnvCEfJOwUhtlOARqs3+rkHYY13jYWTU97c= github.com/davecgh/go-spew v1.1.1/go.mod h1:J7Y8YcW2NihsgmVo/mv3lAwl/skON4iLHjSsI+c5H38= -github.com/go-faster/errors v0.7.1 h1:MkJTnDoEdi9pDabt1dpWf7AA8/BaSYZqibYyhZ20AYg= -github.com/go-faster/errors v0.7.1/go.mod h1:5ySTjWFiphBs07IKuiL69nxdfd5+fzh1u7FPGZP2quo= -github.com/klauspost/cpuid/v2 v2.0.9 h1:lgaqFMSdTdQYdZ04uHyN2d/eKdOMyi2YLSvlQIBFYa4= -github.com/klauspost/cpuid/v2 v2.0.9/go.mod h1:FInQzS24/EEf25PyTYn52gqo7WaD8xa0213Md/qVLRg= -github.com/klauspost/cpuid/v2 v2.2.10 h1:tBs3QSyvjDyFTq3uoc/9xFpCuOsJQFNPiAhYdw2skhE= -github.com/klauspost/cpuid/v2 v2.2.10/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= -github.com/knz/go-libedit v1.10.1/go.mod h1:MZTVkCWyz0oBc7JOWP3wNAzd002ZbM/5hgShxwh4x8M= +github.com/klauspost/cpuid/v2 v2.3.0 h1:S4CRMLnYUhGeDFDqkGriYKdfoFlDnMtqTiI/sFzhA9Y= +github.com/klauspost/cpuid/v2 v2.3.0/go.mod h1:hqwkgyIinND0mEev00jJYCxPNVRVXFQeu1XKlok6oO0= github.com/pmezard/go-difflib v1.0.0 h1:4DBwDE0NGyQoBHbLQYPwSUPoCMWR5BEzIk/f1lZbAQM= github.com/pmezard/go-difflib v1.0.0/go.mod h1:iKH77koFhYxTK1pcRnkKkqfTogsbg7gZNVY4sRDYZ/4= +github.com/rotisserie/eris v0.5.4 h1:Il6IvLdAapsMhvuOahHWiBnl1G++Q0/L5UIkI5mARSk= +github.com/rotisserie/eris v0.5.4/go.mod h1:Z/kgYTJiJtocxCbFfvRmO+QejApzG6zpyky9G1A4g9s= github.com/stretchr/objx v0.1.0/go.mod h1:HFkY916IF+rwdDfMAkV7OtwuqBVzrE8GR6GFx+wExME= github.com/stretchr/objx v0.4.0/go.mod h1:YvHI0jy2hoMjB+UWwv71VJQ9isScKT/TqJzVSSt89Yw= github.com/stretchr/objx v0.5.0/go.mod h1:Yh+to48EsGEfYuaHDzXPcE3xhTkx73EhmCGUpEOglKo= -github.com/stretchr/testify v1.7.0/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.7.1/go.mod h1:6Fq8oRcR53rry900zMqJjRRixrwX3KX962/h/Wwjteg= github.com/stretchr/testify v1.8.0/go.mod h1:yNjHg4UonilssWZ8iaSj1OCr/vHnekPRkoO+kdMU+MU= -github.com/stretchr/testify v1.8.1 h1:w7B6lhMri9wdJUVmEZPGGhZzrYTPvgJArz7wNPgYKsk= github.com/stretchr/testify v1.8.1/go.mod h1:w2LPCIKwWwSfY2zedu0+kehJoqGctiVI29o6fzry7u4= -github.com/stretchr/testify v1.10.0 h1:Xv5erBjTwe/5IxqUQTdXv5kgmIvbHo3QQyRwhJsOfJA= -github.com/stretchr/testify v1.10.0/go.mod h1:r2ic/lqez/lEtzL7wO/rwa5dbSLXVDPFyf8C91i36aY= +github.com/stretchr/testify v1.11.1 h1:7s2iGBzp5EwR7/aIZr8ao5+dra3wiQyKjjFuvgVKu7U= +github.com/stretchr/testify v1.11.1/go.mod h1:wZwfW3scLgRK+23gO65QZefKpKQRnfz6sD981Nm4B6U= github.com/twitchyliquid64/golang-asm v0.15.1 h1:SU5vSMR7hnwNxj24w34ZyCi/FmDZTkS4MhqMhdFk5YI= github.com/twitchyliquid64/golang-asm v0.15.1/go.mod h1:a1lVb/DtPvCB8fslRZhAngC2+aY1QWCk3Cedj/Gdt08= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670 h1:18EFjUmQOcUvxNYSkA6jO9VAiXCnxFY6NyDX0bHDmkU= -golang.org/x/arch v0.0.0-20210923205945-b76863e36670/go.mod h1:5om86z9Hs0C8fWVUuoMHwpExlXzs5Tkyp9hOrfG7pp8= -golang.org/x/arch v0.15.0 h1:QtOrQd0bTUnhNVNndMpLHNWrDmYzZ2KDqSrEymqInZw= -golang.org/x/arch v0.15.0/go.mod h1:JmwW7aLIoRUKgaTzhkiEFxvcEiQGyOg9BMonBJUS7EE= -golang.org/x/sys v0.31.0 h1:ioabZlmFYtWhL+TRYpcnNlLwhyxaM9kWTDEmfnprqik= -golang.org/x/sys v0.31.0/go.mod h1:BJP2sWEmIv4KK5OTEluFJCKSidICx8ciO85XgH3Ak8k= +golang.org/x/arch v0.22.0 h1:c/Zle32i5ttqRXjdLyyHZESLD/bB90DCU1g9l/0YBDI= +golang.org/x/arch v0.22.0/go.mod h1:dNHoOeKiyja7GTvF9NJS1l3Z2yntpQNzgrjh1cU103A= +golang.org/x/sys v0.37.0 h1:fdNQudmxPjkdUTPnLn5mdQv7Zwvbvpaxqs831goi9kQ= +golang.org/x/sys v0.37.0/go.mod h1:OgkHotnGiDImocRcuBABYBEXf8A9a87e/uXjp9XT3ks= +gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405 h1:yhCVgyC4o1eVCa2tZl7eS0r+SDo693bJlVdllGtEeKM= gopkg.in/check.v1 v0.0.0-20161208181325-20d25e280405/go.mod h1:Co6ibVJAznAaIkqp8huTwlJQCZ016jof/cbN4VW5Yz0= gopkg.in/yaml.v3 v3.0.0-20200313102051-9f266ea9e77c/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= gopkg.in/yaml.v3 v3.0.1 h1:fxVm/GzAzEWqLHuvctI91KS9hhNmmWOoWu0XTYJS7CA= gopkg.in/yaml.v3 v3.0.1/go.mod h1:K4uyk7z7BCEPqu6E+C64Yfv1cQ7kz7rIZviUmN+EgEM= -nullprogram.com/x/optparse v1.0.0/go.mod h1:KdyPE+Igbe0jQUrVfMqDMeJQIJZEuyV7pjYmp6pbG50= From b52b801a3ae63a583ed2d138e3e9caee005061f9 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Tue, 14 Oct 2025 22:32:24 +0400 Subject: [PATCH 02/11] fix: update test benchtime in workflow --- .github/workflows/test.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 184d50f..c24fc16 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -33,4 +33,4 @@ jobs: go-version: '1.24.1' - name: Test - run: go test -v ./... -bench . -run ^$ #gosetup + run: go test -v ./... -bench . -run ^$ -benchtime=100000x From 1b6f0a606c4b4cb1208960435ddb8663f76bcd88 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Tue, 14 Oct 2025 23:53:14 +0400 Subject: [PATCH 03/11] chore: improve HTTP client --- client.go | 29 ++++++++++++++++++++--------- 1 file changed, 20 insertions(+), 9 deletions(-) diff --git a/client.go b/client.go index 6e19578..9dd6e0e 100644 --- a/client.go +++ b/client.go @@ -1,6 +1,7 @@ package jsonrpc import ( + "crypto/tls" "net" "net/http" "time" @@ -8,19 +9,29 @@ import ( var defaultHTTPClient = &http.Client{ Transport: &http.Transport{ - // Reuse connections aggressively Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ - Timeout: 5 * time.Second, + Timeout: 2 * time.Second, KeepAlive: 30 * time.Second, }).DialContext, - ForceAttemptHTTP2: true, - MaxIdleConns: 1024, - MaxIdleConnsPerHost: 256, - MaxConnsPerHost: 0, - IdleConnTimeout: 90 * time.Second, - TLSHandshakeTimeout: 5 * time.Second, - ExpectContinueTimeout: 1 * time.Second, + + ForceAttemptHTTP2: true, + TLSHandshakeTimeout: 3 * time.Second, + TLSClientConfig: &tls.Config{ + MinVersion: tls.VersionTLS12, + }, + + DisableCompression: true, + ExpectContinueTimeout: 0, + + MaxIdleConns: 1024, + MaxIdleConnsPerHost: 1024, + + IdleConnTimeout: 120 * time.Second, + + WriteBufferSize: 64 << 10, // 64 KiB + ReadBufferSize: 64 << 10, // 64 KiB }, Timeout: 0, } From edee00ef7d9e4f22cac52aed60be9ea4c3a361f4 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Tue, 14 Oct 2025 23:54:34 +0400 Subject: [PATCH 04/11] chore: response handling logic consistency --- executor.go | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/executor.go b/executor.go index da2c903..1172479 100644 --- a/executor.go +++ b/executor.go @@ -24,12 +24,13 @@ func (rpc *RPCRequest[Result]) Execute(ctx context.Context, url string, opts ... req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept", "application/json") + cl := defaultHTTPClient for _, opt := range opts { switch v := opt.(type) { case func(r *http.Request): v(req) case func(r *http.Client): - v(defaultHTTPClient) + v(cl) } } @@ -37,18 +38,18 @@ func (rpc *RPCRequest[Result]) Execute(ctx context.Context, url string, opts ... if err != nil { return nil, eris.Wrap(err, "execute req") } + defer func() { + _ = resp.Body.Close() + }() + if resp.StatusCode < 200 || resp.StatusCode > 299 { _, _ = io.CopyN(io.Discard, resp.Body, 1024) return nil, eris.Errorf("http status %d", resp.StatusCode) } dec := sonic.ConfigStd.NewDecoder(resp.Body) - defer func() { - _ = resp.Body.Close() - }() var result RPCResponse[Result] - if err = dec.Decode(&result); err != nil { return nil, eris.Wrap(err, "decode response") } From 6db4a0d8a334e7cae4fe69a7ca8d9664c9ab36b6 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Tue, 14 Oct 2025 23:54:51 +0400 Subject: [PATCH 05/11] refactor: benchmark tests for improved clarity and consistency --- executor_test.go | 67 ++++++++++++++++++++++++------------------------ 1 file changed, 34 insertions(+), 33 deletions(-) diff --git a/executor_test.go b/executor_test.go index 7c06ba7..1448a2f 100644 --- a/executor_test.go +++ b/executor_test.go @@ -173,15 +173,12 @@ func BenchmarkExecute_Success(b *testing.B) { b.ReportAllocs() b.ResetTimer() + req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) + for i := 0; i < b.N; i++ { - req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) got, err := req.Execute(ctx, ts.URL) - if err != nil { - b.Fatalf("Execute error: %v", err) - } - if got == nil || got.ID != 42 { - b.Fatalf("unexpected result: %#v", got) - } + require.NoError(b, err) + assert.Equal(b, 42, got.ID, "unexpected ID") } } @@ -221,45 +218,49 @@ func BenchmarkExecute_WithOptions(b *testing.B) { b.ReportAllocs() b.ResetTimer() + req := jsonrpc.CreateRequest[benchUser]("user.get", nil) for i := 0; i < b.N; i++ { - req := jsonrpc.CreateRequest[benchUser]("user.get", nil) got, err := req.Execute(ctx, ts.URL, reqOpt, clientOpt) - if err != nil { - b.Fatalf("Execute error: %v", err) - } - if got == nil || got.Name != "ok" { - b.Fatalf("unexpected result: %#v", got) - } + require.NoError(b, err) + assert.Equal(b, 1, got.ID, "unexpected ID") } } -// Benchmark error path (non-2xx) to cover early return branch and body discard. -func BenchmarkExecute_HTTPError(b *testing.B) { +func BenchmarkExecute_SuccessWithingGoroutines(b *testing.B) { + type benchUser struct { + ID int `json:"id"` + Name string `json:"name"` + } + + // Static response payload once for all iterations. + resp := jsonrpc.RPCResponse[benchUser]{ + JSONRPC: "2.0", + Result: benchUser{ID: 42, Name: "bench"}, + ID: 1, + } + payload, _ := json.Marshal(resp) + ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // Large enough body to ensure discard path runs. - w.WriteHeader(http.StatusTeapot) - large := make([]byte, 4096) - for i := range large { - large[i] = 'x' - } - _, _ = w.Write(large) + // Minimal work in handler; just serve the fixed payload. + w.Header().Set("Content-Type", "application/json") + w.WriteHeader(http.StatusOK) + _, _ = w.Write(payload) })) defer ts.Close() - type benchUser struct { - ID int `json:"id"` - } - ctx := context.Background() + // Create request template; ID is set in CreateRequest, so build per-iter. b.ReportAllocs() b.ResetTimer() - for i := 0; i < b.N; i++ { - req := jsonrpc.CreateRequest[benchUser]("user.get", nil) - got, err := req.Execute(ctx, ts.URL) - if err == nil || got != nil { - b.Fatalf("expected error, got=%#v err=%v", got, err) + req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) + + b.RunParallel(func(pb *testing.PB) { + for pb.Next() { + got, err := req.Execute(ctx, ts.URL) + require.NoError(b, err) + assert.Equal(b, 42, got.ID, "unexpected ID") } - } + }) } From 81c268174d1c768ed67144f65fcabce88b119bac Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 00:30:16 +0400 Subject: [PATCH 06/11] chore: remove unused HTTP client, add version constant, and update type naming for clarity --- .github/workflows/test.yml | 51 +++++++++++--- client.go | 37 ---------- data.go | 6 +- executor.go => execute.go | 39 +++++++--- executor_test.go => execute_test.go | 86 ++++++++--------------- tests/fixtures/btc-block-without-txs.json | 1 + tests/types/block.go | 24 +++++++ 7 files changed, 128 insertions(+), 116 deletions(-) delete mode 100644 client.go rename executor.go => execute.go (57%) rename executor_test.go => execute_test.go (73%) create mode 100644 tests/fixtures/btc-block-without-txs.json create mode 100644 tests/types/block.go diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index c24fc16..34c7ec9 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -8,29 +8,64 @@ on: jobs: tests: - runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ 1.18.x, 1.21.x, 1.25.x ] + runner_arch: [ ubuntu-latest, ubuntu-24.04-arm ] + + runs-on: ${{ matrix.runner_arch }} + steps: + - name: Clear repository + run: rm -fr $GITHUB_WORKSPACE && mkdir $GITHUB_WORKSPACE + - uses: actions/checkout@v5 - name: Set up Go uses: actions/setup-go@v6 with: - cache: 'true' - go-version: '1.24.1' + go-version: ${{ matrix.go-version }} + cache: true + + - name: Cache Go modules + uses: actions/cache@v4 + with: + path: | + ~/go/pkg/mod + ${{ github.workspace }}/go.sum + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - name: Test - run: go test -v ./... + run: GOMAXPROCS=4 go test -race -covermode=atomic -coverprofile=coverage.txts -v ./... bench: - runs-on: ubuntu-latest + strategy: + matrix: + go-version: [ 1.18.x, 1.21.x, 1.25.x ] + runner_arch: [ ubuntu-latest, ubuntu-24.04-arm ] + + runs-on: ${{ matrix.runner_arch }} steps: + - name: Clear repository + run: rm -fr $GITHUB_WORKSPACE && mkdir $GITHUB_WORKSPACE + - uses: actions/checkout@v5 - name: Set up Go uses: actions/setup-go@v6 with: - cache: 'true' - go-version: '1.24.1' + go-version: ${{ matrix.go-version }} + cache: true + + - name: Cache Go modules + uses: actions/cache@v4 + with: + path: | + ~/go/pkg/mod + ${{ github.workspace }}/go.sum + key: ${{ runner.os }}-go-${{ hashFiles('**/go.sum') }} - name: Test - run: go test -v ./... -bench . -run ^$ -benchtime=100000x + run: | + export SONIC_NO_ASYNC_GC=1 + go test -race -v ./... -bench -benchmem . -run ^$ -count=20 -benchtime=10s diff --git a/client.go b/client.go deleted file mode 100644 index 9dd6e0e..0000000 --- a/client.go +++ /dev/null @@ -1,37 +0,0 @@ -package jsonrpc - -import ( - "crypto/tls" - "net" - "net/http" - "time" -) - -var defaultHTTPClient = &http.Client{ - Transport: &http.Transport{ - Proxy: http.ProxyFromEnvironment, - - DialContext: (&net.Dialer{ - Timeout: 2 * time.Second, - KeepAlive: 30 * time.Second, - }).DialContext, - - ForceAttemptHTTP2: true, - TLSHandshakeTimeout: 3 * time.Second, - TLSClientConfig: &tls.Config{ - MinVersion: tls.VersionTLS12, - }, - - DisableCompression: true, - ExpectContinueTimeout: 0, - - MaxIdleConns: 1024, - MaxIdleConnsPerHost: 1024, - - IdleConnTimeout: 120 * time.Second, - - WriteBufferSize: 64 << 10, // 64 KiB - ReadBufferSize: 64 << 10, // 64 KiB - }, - Timeout: 0, -} diff --git a/data.go b/data.go index 4487241..192db1a 100644 --- a/data.go +++ b/data.go @@ -5,6 +5,8 @@ import ( "time" ) +const Version = "2.0" + type RPCResponse[D any] struct { JSONRPC string `json:"jsonrpc"` Result D `json:"result"` @@ -21,7 +23,7 @@ func (e *RPCError) Error() string { return fmt.Sprintf("jsonrpc error: code=%d, message=%s", e.Code, e.Message) } -type RPCRequest[R any] struct { +type RPCRequest[Resp any] struct { Method string `json:"method"` Params any `json:"params,omitempty"` ID int64 `json:"id"` @@ -32,7 +34,7 @@ func CreateRequest[Result any](method string, params any) *RPCRequest[Result] { return &RPCRequest[Result]{ ID: time.Now().UnixMilli(), Method: method, - JSONRPC: "2.0", + JSONRPC: Version, Params: params, } } diff --git a/executor.go b/execute.go similarity index 57% rename from executor.go rename to execute.go index 1172479..c7d5f6e 100644 --- a/executor.go +++ b/execute.go @@ -5,36 +5,51 @@ import ( "context" "io" "net/http" + "sync" "github.com/bytedance/sonic" "github.com/rotisserie/eris" ) -func (rpc *RPCRequest[Result]) Execute(ctx context.Context, url string, opts ...any) (*Result, error) { - rpcBytes, err := sonic.Marshal(rpc) - if err != nil { +var bufferPool = sync.Pool{ + New: func() interface{} { + return bytes.NewBuffer(nil) + }, +} + +type Option func() +type RequestOption func(in *http.Request) +type ClientOption func(in *http.Client) + +func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...any) (*Resp, error) { + buf := bufferPool.Get().(*bytes.Buffer) + buf.Reset() + defer bufferPool.Put(buf) + + encoder := sonic.ConfigFastest.NewEncoder(buf) + if err := encoder.Encode(rpc); err != nil { return nil, eris.Wrap(err, "marshal request") } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, bytes.NewReader(rpcBytes)) + req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, buf) if err != nil { return nil, eris.Wrap(err, "prepare req") } - req.ContentLength = int64(len(rpcBytes)) + req.ContentLength = int64(buf.Len()) req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept", "application/json") - cl := defaultHTTPClient + cl := http.DefaultClient for _, opt := range opts { switch v := opt.(type) { - case func(r *http.Request): + case RequestOption: v(req) - case func(r *http.Client): + case ClientOption: v(cl) } } - resp, err := defaultHTTPClient.Do(req) + resp, err := cl.Do(req) if err != nil { return nil, eris.Wrap(err, "execute req") } @@ -47,9 +62,11 @@ func (rpc *RPCRequest[Result]) Execute(ctx context.Context, url string, opts ... return nil, eris.Errorf("http status %d", resp.StatusCode) } - dec := sonic.ConfigStd.NewDecoder(resp.Body) + dec := sonic.ConfigFastest.NewDecoder(resp.Body) + + dec.Buffered() - var result RPCResponse[Result] + var result RPCResponse[Resp] if err = dec.Decode(&result); err != nil { return nil, eris.Wrap(err, "decode response") } diff --git a/executor_test.go b/execute_test.go similarity index 73% rename from executor_test.go rename to execute_test.go index 1448a2f..b48320e 100644 --- a/executor_test.go +++ b/execute_test.go @@ -7,10 +7,12 @@ import ( "io" "net/http" "net/http/httptest" + "os" "sync/atomic" "testing" "time" + "github.com/LiquidCats/jsonrpc/tests/types" "github.com/stretchr/testify/assert" "github.com/stretchr/testify/require" @@ -144,62 +146,44 @@ func TestExecute_DecodeError(t *testing.T) { assert.Nil(t, got) } -// Benchmark the happy-path Execute against a local httptest server. func BenchmarkExecute_Success(b *testing.B) { - type benchUser struct { - ID int `json:"id"` - Name string `json:"name"` - } - - // Static response payload once for all iterations. - resp := jsonrpc.RPCResponse[benchUser]{ - JSONRPC: "2.0", - Result: benchUser{ID: 42, Name: "bench"}, - ID: 1, - } - payload, _ := json.Marshal(resp) + file, err := os.ReadFile("tests/fixtures/btc-block-without-txs.json") + require.NoError(b, err) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { // Minimal work in handler; just serve the fixed payload. + _, _ = io.Copy(io.Discard, r.Body) + _ = r.Body.Close() + w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) - _, _ = w.Write(payload) + + _, _ = w.Write(file) })) defer ts.Close() ctx := context.Background() + req := jsonrpc.CreateRequest[types.Block]("user.get", map[string]any{"id": 42}) - // Create request template; ID is set in CreateRequest, so build per-iter. b.ReportAllocs() b.ResetTimer() - req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) - for i := 0; i < b.N; i++ { - got, err := req.Execute(ctx, ts.URL) + _, err := req.Execute(ctx, ts.URL) require.NoError(b, err) - assert.Equal(b, 42, got.ID, "unexpected ID") } } -// Benchmark with request and client options to measure overhead of opts path. func BenchmarkExecute_WithOptions(b *testing.B) { - type benchUser struct { - ID int `json:"id"` - Name string `json:"name"` - } - - resp := jsonrpc.RPCResponse[benchUser]{ - JSONRPC: "2.0", - Result: benchUser{ID: 1, Name: "ok"}, - ID: 1, - } - payload, _ := json.Marshal(resp) + file, err := os.ReadFile("tests/fixtures/btc-block-without-txs.json") + require.NoError(b, err) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // echo normal 200 with json body + _, _ = io.Copy(io.Discard, r.Body) + _ = r.Body.Close() w.Header().Set("Content-Type", "application/json") - _, _ = w.Write(payload) + w.WriteHeader(http.StatusOK) + _, _ = w.Write(file) })) defer ts.Close() @@ -209,58 +193,44 @@ func BenchmarkExecute_WithOptions(b *testing.B) { } // Lightweight client option clientOpt := func(c *http.Client) { - // touch a field to exercise the code path - _ = c.Timeout + c.Timeout = 30 * time.Second } ctx := context.Background() + req := jsonrpc.CreateRequest[types.Block]("user.get", nil) b.ReportAllocs() b.ResetTimer() - req := jsonrpc.CreateRequest[benchUser]("user.get", nil) for i := 0; i < b.N; i++ { - got, err := req.Execute(ctx, ts.URL, reqOpt, clientOpt) + _, err := req.Execute(ctx, ts.URL, reqOpt, clientOpt) require.NoError(b, err) - assert.Equal(b, 1, got.ID, "unexpected ID") } } -func BenchmarkExecute_SuccessWithingGoroutines(b *testing.B) { - type benchUser struct { - ID int `json:"id"` - Name string `json:"name"` - } - - // Static response payload once for all iterations. - resp := jsonrpc.RPCResponse[benchUser]{ - JSONRPC: "2.0", - Result: benchUser{ID: 42, Name: "bench"}, - ID: 1, - } - payload, _ := json.Marshal(resp) +func BenchmarkExecute_Parallel(b *testing.B) { + file, err := os.ReadFile("tests/fixtures/btc-block-without-txs.json") + require.NoError(b, err) ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { - // Minimal work in handler; just serve the fixed payload. + _, _ = io.Copy(io.Discard, r.Body) + _ = r.Body.Close() w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusOK) - _, _ = w.Write(payload) + _, _ = w.Write(file) })) defer ts.Close() ctx := context.Background() + req := jsonrpc.CreateRequest[types.Block]("user.get", map[string]any{"id": 42}) - // Create request template; ID is set in CreateRequest, so build per-iter. b.ReportAllocs() b.ResetTimer() - req := jsonrpc.CreateRequest[benchUser]("user.get", map[string]any{"id": 42}) - b.RunParallel(func(pb *testing.PB) { for pb.Next() { - got, err := req.Execute(ctx, ts.URL) + _, err := req.Execute(ctx, ts.URL) require.NoError(b, err) - assert.Equal(b, 42, got.ID, "unexpected ID") } }) } diff --git a/tests/fixtures/btc-block-without-txs.json b/tests/fixtures/btc-block-without-txs.json new file mode 100644 index 0000000..464b9ba --- /dev/null +++ b/tests/fixtures/btc-block-without-txs.json @@ -0,0 +1 @@ +{"jsonrpc":"2.0","result":{"hash":"00000000000000000001246cadf2834cf70fe92404e37c14e071f4b7da61993d","confirmations":35907,"height":883189,"version":560087040,"versionHex":"21624000","merkleroot":"93960bafc07fe95739ca835f5d1b30b78634d9859ea78ae667f94a01c1f289a7","time":1739204667,"mediantime":1739197922,"nonce":528725547,"bits":"17027726","target":"0000000000000000000277260000000000000000000000000000000000000000","difficulty":114167270716407.6,"chainwork":"0000000000000000000000000000000000000000ad4e5f6f4e49d96c1e4a2cdc","nTx":3125,"previousblockhash":"00000000000000000001778bcbd65816f9d0944345448f4fa19f17946ab59078","nextblockhash":"0000000000000000000189e4159043cf8e807c7d181cdcc90b4b7d0db4ed522e","strippedsize":759467,"size":1714974,"weight":3993375,"tx":["a3667aba97984ad2723d955a1817c35563f0c5d1af2f96f005c6a00ad612a5cc","18dfd1e6734f66cffa0524f9acb7b4c400ed8a5694680ea8ba4b9b24bb57635e","70b5d862dcbe448701069cc323f112f16cf291dcb16c47f56b1aea61640bcd4e","7ba0427631b32f6bf135d50b4bb4335b9f51e3b77f53722d4301685e29e2d652","753365d756a4b139d0df21453cb5bafb23a4c3e69bf2fb0589e11043ad78194f","8dce3de45428ff00d8a73ab463fdc7c964367bd84b7d5bbab69570cfb2ee0f3f","ad3e422430dc3649f416087d75980c301d84e85d993c866ad8dcfd8049d04df3","a8469e5511257589e26a34d414565af415dedd5b259405dcb546cf6652bb4692","7dcf725b7983ac4c68899b3d282a3ffd2c05d52a1624b048699ebd3c9a8940e1","d531ffee571739e765680d022eb383ba0f9c99b86149c9e9544e7875d9de04b1","444af0f79fa94bfdd83e69e9190086756ee60b8f82e3d4d6261fe4933e509353","13ff9d4d8afa943ead92a30919c24ed472fe5ad1a22d8e3e3070fc0271e51dad","c1384dc9d61c6f81956f8ae043cf68ba63123a457dadfd357f45d5ae91b4d64d","c9308ac476d38110045d3490a905cd1288d6a8aeba33541cac646930075a8ee3","8313c0b16e9f544155b647da003e0ab30539f891dc8b3ead61287f6c30ce8608","ee577ec5964d3255a8ab7ca395c6d958ae31e684a5aa093cc3792dc81ccf9362","a50d9a3d0a8fcf0d1351ba75bd4fef62b9d676c6051b0064d8e477b31b8e6b98","7fc0c5e0c37368e8ced92d0872c659dcf45e1529ca6fba0c6f0b532742aff99b","102f90136aaf5ac8a4599f77e4f9b80a1a5d270d8cc2de88342143e3950798cd","d340d6d6812f60f7b9a0194b9e78475388418f626bcf8c29bc3398d82cacb8d0","e9b3ef657de47f05d3ad4f20290ae1abaecca642173c71c0e0d2ee096ba793d3","6ad9d4860ce8c1e4169d7e72fb94bf85d65b8a2c0d1c2edb507ab7a408fc06ef","f326ef3b24f07f4ec2333cebb358fa38ae7e2ccb3fa4c742b1a8cd47f4effaef","d125fae94656e3312ee05a9a1e574bdcad9bc83c16a8fddcb8fa3ca8af84c3f6","3eec8e214f61d85e4d9cb45f14d42ca58eecbf1123103aa52554084198e6fbbc","4a1bd537696fb351600637c80ad646ff02c4b6aada6eea9233fd5652385bc7c6","ce11b1022097dc61ff0d894c7c9909abc84e2b19892267700bb867d8bb257e64","a57faec405e5db96e03ed57d14276844981193051c0942cd126dcde36adc4eb5","df3f2ed2153ab0b6d572548bc2d70570f8bdd7c234526a8b3c73b433ae7309ac","df0ea393cfa4f7792febe2187b1c6be1890816ddc90cbb9b82a0719e7a469509","b5caac2ecedf95b62163a66c3faa9727c80e4525994ef2b60a8a5edf830013b4","ca5973fa1129e940908f7bb5bfd0502be50e2975783fac532fb7d862eb7c6eac","ebbf0e6f0c751742ff2a8f62db2fceaa8ffb7efb17bb1e5acef094777725a877","c72c94d140ed649fbff304a4885ea486adb403a8fcd4568bf0b94cf5bf927388","3fb0ccdd1f7ff23a4f502f1b050f008fa4260c426a2567f536bd2cb10466fe9d","2333e92709680701e61c1d90f769673cd08b089dbab35931dbf4d1d11d7aef04","4a8989f2042cce81eccd73c9aabfdda75fb59e5330f561f1f95c30e2f6ecea35","e31ccda145bace588fe2184b23a0f4108f0dac19aca756b0e730d9e33d9ba1aa","90301c32b8b7b5efdbc5665299360dcb65c5ff9f00dbe99f48205c053a8df0ab","35f541f221920c9606222eb261c2f559e5f8fc6aa60d9d617a93121d94de16fa","62b6fcdefe120bc43c60f75f7988aefdc5c63776413894ff70c7c6ad768955c1","13eef0dfa6acf9948d20b8576653aa5e388b5251d1a1b387e129dc43a1ccf249","0389133869be2038b5f86b01a1286b36896dc3de9d558f307ebe29c31092d10a","84712058d8961000d28cfa843c83909311271cbcb8768c00ec1e625ed8f99de7","380171cc0bdce6f13d0dad9f08542fc982df0a47104707fdd2981ac9dde27d3f","268b8c81b90b97316c9b8714d4dd79f5f8683ca95ae67c8c2e5ee4431dd37520","2cbf7a53910a3e052b2896c060636244513b3d22fab3f9cde16e6df0f3cefa21","9bd0fdf1c5f0800f0d3d1252c44fa8867de589efb2ebc93d43e92e69b34da57a","1dd96efd466366faa0656815947c9930ecb079ed65788bca53bd01758d986f53","835c0c0f31746e9703f8d2139a207584076fd725280174d6e6d337af92255648","846b50aee87da8bf97f4e5151b2f0ac71f16994bbf93222c2efd42a0b8279f8f","9c00a4e1a45caa1bdb08755f13750a861c22dbb2339c0fecc1f600b13d6eb4e7","e1cbc26c3358a5715e399ec99035f4da991ac653c61404de2ddd339075cd8932","7748008ead79897d77eb9a6bdb2e6ce28f3edffafed8827fe1d50e78a134c70c","aa9292b61e2e368d02cb5be17b251a8dd546cf2f7dc1108575cf75a7b7da294c","a48b178008afcd1e18d80f77ebe607d67cbe19ac1af0953ab2a8ab2b09d3c972","a09870133bfa89065eef38c1286a037cb54e1a7923f006bb2a55dcffd6f6537e","2ce8f0555f8e8ff84ef09f1c29054fdfaee4e1f30ba8497b6eeca59fd9964091","820d67296bf5d86e14a0e6d87e8738121871385295cfdd312c88a57ceaf83a92","5cacc6a3e56f684bed0c49908986bf634d4d3990457ff47e6e8a7abde304bdc7","30b807f12500a90588a757f2f683eeb227b2d7cd0655bc67ee3661de2a3257ee","bab482b965b2bedeb7e731d6447d657c82f1829ac2f6be233421d68885ddb9bc","60136f8bcfe76af22686966ff405e7fc5cde92cd223a3586929b00830200a393","9df92ac73c76d6f514b2391d381c8ee6912220e623c2517a220dce477f6b7508","e6afc1b38d88c74c8f7ad3fc8265509ae0ae69d6d92d2936ce8f9c53bf49d4db","012cf0c88b00cbd8db14756c4aabf7738fdcbab74e093e888e948a580b1d281c","a78ddd367bbfbf9e66fd1213a89d8248ab6c9f1453456ed2e12c70f3833d4c48","75f8336c2740f948c77846c7488fcdf1c87af6aa93ce7860d64ac773ede2d56e","be8824dfad9092cb244bf1a893112fa8ff871558e5cbca12c7bd63542d597405","460d4d760e11167aadfe8a2e0c5d1bc59899fce9ef1069c9d9704c3e632fea1f","76c3d77df1996e986e99accf95cd7e4816a18801729dc753b712741ba0ef69cb","55d4bec1558246b5541005e00517d855b60b173f642f1f12e4439868bed71173","1fdeaffdc085f1f1fa225813c7a487267e48bb7ff39e7b45281ac56e2788277d","2997ada3042a1f9163b89fc431f22e9ddd818fe0761fd5de6d214974eb7685d1","f6b8a7fa32b703b2174a020eb3d5c940a33cfcad5d60ffede17a616a1e5275bb","d8bb75e82196a49b6ade781a825cd0207f572f4ff7e76b0908c795caef9221d1","8a2f054888309857f9bf102a1985769e0857b81d9019ce32f519cbd8caa32d49","04e0b96e0b5c58d6496e0ab1d1895d1c6c8f44fb7ffe88c6fc272ac09365da13","2a5e8ba3c6ddf4099601a05f536a524e0642f5586ef9db95debb4206bc256a4b","e86d1891effb7a5115ee362b0fc0dbc559036288340e06b9ebab02617aa12b06","dcef950141052e817ce6dc87cab2449a35a1911be2d516460be404a8a0271c9e","d0dd1ac0560730aebfb27dab3534243137198b7f6062bfefbfbea8d8eaff63c2","2cb4d72ff9c8fd5d29846db9625418a61e3f6ae376791e01db55db5f72c52a4b","575d3cf7f7f716ab250d3d400e3359e7a197a709bd1980eb9691c49b8362c752","7dca2b54671bf55932547bcf048aac76ea362ed04e40055b5e044ef521711953","6b5b097c179cdd596203df151648698670a82c50721b57e3000c135676132053","229502fb14b2c00571b8f2f3f6ee9619258854401ad258f21f5c7e073e292853","39c027feadb47fc3511c156986867e9fcd2a949bd4d03c5039b7e95450f58ab5","6f182f4a75819a47ac500186a9f8ef615f0f7ba05b705f30e02c37bd67a2cc53","5c0853cb91f18aafc05833b884432b227a44fdc6888ee1a1a63c39538369ea53","71b28089ff89e52378a8847a674a3cf6d67f80191d765c40953b1ce7c8f85a54","bf8a42a1658ca4cd5ccec73ffa8433036e84e155065b9709e75c0fb51da3a754","db8f9b68840fac6f6501909628b709861d36b95242fe6e220f8454dbc939ae54","b75230775b25b7df1fd15b4cf844b7b641216dfd2d4c6704be3356c46b8cd554","da616962927ca1ffdde84a3b1e21a5de4c76e35453c6328565b73e7e80ce3e55","1da7b4129dbe3afe9ed6b7761335f57037069de36ce6d2f68c715fb46efb9655","27af2fa9a11c161fa3659a4db5f241a8132e5ce8d43083260bebd16985ead455","bff30860959a580f1db65bc3d2fb13929ce2409c1351ab47a756dc9de04bde55","fde24279f4968499a424fb54ef8deef95f06e760f623e29eae14687bbfb55356","b12309957ad4fd1e1f43ffa1fa9862ae660d00d34fedb2c0b1b33bac04fc7856","a866b0e7ba9383720fde6974e3ea040f8156bbca9e2ce46e63fd2b2374506357","9b4a978f85f3d82b3896612340342c5a879e8668fae1d711acab16c12fc69957","cf136cac6686ac92246651dc4e70c04914a814dc6a75da2b06228ae606f4a257","2a62083564496e0455103a2cbfa8afa3cf0b1adf78a1893cd5f4251abe50c557","121f444f76713637f76639f9c819b5aa681e91296fa04713e2d7254f26e66458","53fb64f432679ef32309ba2f18d70642cddd8c74c46bd31b2d710943a010af58","65efaec19e1cc6f293365bb8cdea6cdd0af6a2253526f948aa6c9653ed273259","5163249b7e4cff5b77926b0aff6126b924a0808245abc338417e66a059a5f559","e51898a17f059fee28204b35cc78110a182cf613306f30ee0f19c84ad950315b","fb0ea053533cf7cfeded3e01c2fdec4124863d54ba3d2731857c9b8cc317545b","29cb14cdf425db23201dc0f19e7a156044a9ab06fb5746c2b82b333693f4ab5c","1f92441407ed6a29f7d842688189b1bb795dabc5f1f75a4a2d6230fdc8550d5d","3cb8231815b6bb3b29d48d2238181a2b3f4c5c0937002d6a0cf1e8d7ccc86d5e","f4c32191334bfc7d0bd1c74bc66cfe72664b7163688d03ca7a171e7058497e5e","9063af4e1e32971af1f1e13f9c835807f29918264a57a25c9a1eedffe9d7e05e","a8a441e1b2e05104835b08a37c5c62951406a32acc7a843e96e7b480644c4b5f","2c6a7ad6892e1aebed6315c0a4bc348e3cdb635005015808eb3a2eb64170565f","fc3ee1f9849eab257232a653dd29115b5beec3e3ba1767720267d7f50422705f","15b95db4f193d1a025b33d3e64f57d19192b61f8ec2920f3e02584d703782660","e789e002c3c44e7bcdd46a782f8374cc8cde0ad03ee126520a4dd0cd46ee8b60","c775ad8bc92935352636318b57a859a8ea192b86b326e1383cd52ca96efad760","ee841a534f9bfc262b855e2eb59c6f0bdbc55e5b133091f5670f0702e6d95661","82e4c87ecb808a3348affa64d91e8196b54de89c31af5f378f5d0bda1be89b61","20ce6591caf6fe0dbf02380c81d30e704556f074055309bc0499ffe9d74ac061","76f7ad5509ca65d0de344dd06b279b3f80f5ea23ce319a9aabc2425fe9c52562","777257b0588e642c8f73353bbb2d2d383d855301032e9e6a1c1f88a6786a3d63","7eba60619430bddd4120c857f06947ecdd155270e047500b819c73637d6a7763","00cea2463043570f5edffea58c25b4fc47dcdfbd3f0978d3a75c971cb5e0a46b","e489389fd44418cacbc5b506bfb72bd45c3c08d3e6213eee9b7ee0c63c1ae063","bcb5e505f0fa05df99240f74d55af18148e8908b054e6292765b4532ea6b2165","93296988fb08681332e9f8bd7d973b502c2969e2bb533195c9e85e4c49f33f65","97c7d93af03b0a66743ca3de2327a50df2f7fc22a627275eb781fe7452407065","0593ea172c9702b1e5f4f8258b53f99b7e7bdb2a2eceee435d43e49d91ed7665","0a3e751c9a40ad455e1984ba1645186acd9549316d11591a96e0d0033face165","c1540fa0a33853f44d15c49d63bf7037e33600af987f2c41b6821c3f46221366","4a3165afdef6b9386979fe22a22e8eaa6188a8a7f866a088775e7e2b8d049e66","7009bcbabf87a67acd30e47346ce894d598be58082fc9f71c0b331caf9145c67","bf19f5ee088e2727d0ca69d148009e2bda40d449352b3e13dee681a799978567","1b99e68f058f643c3ffe5bf1942d40052baacfda2c435fe98cd4102f9f058d67","92699632ae68cd9e275d95f3db16a633adafc2f19b3f9fde4d22e473836fa667","c81792b26e7783380e9c6bf6a52b067933e1624d0aba154ea24418ac79ecba67","38f3333cc74c0f9b81b896cb0320da5121545b2419725fb80f6e5923a4bd4368","a8d98896731001dec326aaea27507c9b995050444e135e23b532aeab83096768","6e4087a1eb90f2078fccf9fad16d1c6c83f7004dbaa1da3beaa8dab3c54a4869","4e4af11ad58d7fb334f233c64027da5806b2ecf0d886150ae7ce4dd8d7699969","5c9c2b287bb72fd22044c0f07b86b20bc18feb3f81a6ff54db48e33d5e56576a","b884df09469f6744c44f96819e530767841b320836a545d0f2bcae48bd96516b","92dd44ce41c14faddecc8fdc2fc7da77a7a24b0919c3c15e04a2c29f0de67f6b","901170da752a071899c36bc09b1d08ea0bcc3ef273bf3fe50e6fdfa816cea76b","cb430eb5be0322f7aa895a762a046d899a83a4d7ee3858486b2a06227f08b36b","1b29c5279faf4b2704690f6f939a01c6ff382442da7b3c7e9fa0d3c1439e84cf","85f5d42024fcd8631223332317a747809aa9670c0a3fc3e6404c9998310abb6b","3ac0004cc7a74d1298559c51948f86ce34dbe943ca552f73c68b92c0fa72146c","f0672acb0e9b83c58abbbddc574b491920cf0b2488bfe68d07a633f20c124d6c","caddc6a381d880a4075a68bd52dc5c7345dc4f542102cbabdb5dee84ade4666c","c508b4495f6c43b5ff9d341ccca8d5309f1785423645196cdf98405894cbf06c","574d1b7581a6e3c3c8aee7c14090852e774d98055eed47df4746f110d924f26c","8eff559d75c8a7e458afcbbaf6f9d4a7891c5b4fb3fd62c84682c8f407b7b709","4c16df1b89c7c14a2c0cc4ceab42f12225a5023537f6c1657ff261beddd6c5ac","19192f30f68f526de54772b16757680454a5ddbe57ed1c86c96ae936c0d11f6d","cb43b9b2d111da1b372cdb81ffba0ba19851ca78adaef54a41314cd8ebde376d","5774718e2de32a7af5b60779dd0b20c70411b5a658529b6f981dd9467b413b6d","d6ef468f66f012db6169d6af2d1c6bc0114361c4b825b1826def71cd3e00246e","bf04a47fe9d4c95a925a49b2511ead3c077708ccc4e40a3eff211ab91cf47c6e","abe56994a1af3d8f52ce8d3e2e9540afb9600c8053a3fd739bae6bb934fd866e","09b076181355a5777b352a1e15fd48ee77857e777e49773d2eae070bb5d3296f","6f1f0691d05add429df904ee9f458ce65c59df958ddbd789ff094b6f8c7c746f","ddc25b2c6063ccc987ed703a0813427e75d952deff64bfe0d40e78039d81fe6f","5e80132529604d3774ad3011d185cbeeed00c79cc8ddf734be2d3d3e3c5dc470","93457eaa8679bd1dbe628672762c1030e6b13f811a350886053465bd9aa2d570","8f89cbf92bc518edca8747b3c5ac7f82d17ddc102218df33cacaf128a08a4d71","10375a2f7c6910adabbcbb2c5ddc50c4221869aba7f666d160ece8defcb7cf71","19d872b3b44ce1d0ef8d87974a13398fb6c176a63b30f3b78e473670d6610872","f18a05e9817cced60140ad5f67f70c8884eea294131b8f915789838dd938d872","e3b1d88b6b34ba1c1ad410f7ed17fac28bee8532167177d3bf3862efa6288873","99fd3e55e8ae6f0fe7ffde090416dc4ff12eedc53c35afe4a441b4762350ae53","4cbedadd88288e12d42f5fc347655de4185648d66d82cb875f6e35f70678aa73","92f485fc06b8756b0a7a907fc32ffdc84d8c593fa08fd59909d95acaaa27c373","e5de96c1ed223f0ce2db6357b9dff61f996d203cd05bc000bbffcb52a51ed873","22ef4dde07c33dafb7a93f3a213189b1a35d86a7a7297532619ee2bd9ba4b674","79e4eac8be8faff6235869c166f96050fbd85dcd7520291b5bc578c68e95ea74","f065e005df8372369abd0a0680b3d11ec424d250220fcefaa6d1aae6e4230976","8c3c81d3b9ced8ffcc771f0bb12d1c677a4363ddebfaa2545182b9e34f114376","a92f991512ed0ad9f486c83c93ea37f0a11fd364fb04a7658607528b455b8176","9a22d127b2370f68f5dec275326af3fd17a4fb87b67d02b7dfe2b55ff3529e76","519244a6c0bb7d9e81c40f726f284d03b350e472d350f7826bb52046e254a777","992fc3d29ece0f5b1851abbdec416423d9e903c3b1a927483468af20a821d177","6e147da107bfab3d2deac7b13fc11e69fc61803dd7404c3f4428fb9eaa499b78","da2cae3887437dfdb3185ccc3f8348fa5addfdc652e0438b79e75ff7a3bac178","ea1831b2a9421a34186b61b1c77c83110a32d3f6d3c6a54e736b63f11c14f278","696541037974c1949870e292ba2a635cdd9f17b2ce5c46be66eda707f8ec5b7a","c218cca28b2a5e24a8888231100ddbdd578d867569824575cbd88a226fa0917b","4d968e8c9d218f76b89d590fe3e652915019bc72512642cb96bc896fefd2337c","f4c633165f7549fdd8c1ea2246f949b81c34ba545071aeb346fb47e824f49f7c","8b73a32e316f5a1ffcc8e08acda0531bf91490e3f9fc90cbb5ffb7dc2131b17c","ae7bd0424b578b5c0db9a3784c6b9007b56d6534d3517b7494260458d8f6147d","354a00d7e625cd5a14be5922d3aa8d02de060e1aec96f8574a94f203b1bc1f7d","16df96b1df398c64efb851c1eb9f53d9862b313ff2af63418d3703179097eb7e","cbf54ff2201cfe71a9a1a3a035cb030fcd37bfb2343e941fc4d82c364f04f27e","5ccf9edd5eac267246195b6e9217248e2a34c89ec7329d5ca581b32ad8274a7f","5c183388b8a2b8956e8681132ddb051185879e3695d8516d91bc21386b2bfc7f","4509b676d35745718111fe0343e67e6dd8c6e9ccff08214bfe090a0927de8480","de6dd03ae3b2b76f54335eeef5a985825f1698d32211323f1563ae01e409cf80","395b830bb59f12130a36cd9cfb7d15160e2faa9eacd63d3ae68caaff54a4dd80","01436116f5783525398d99440315da22116ab445d862894828513d01551fea80","e0d7701a7eaf8e0044d5b651a07c38ab835aacabe79521bf0acae1fdb94d1781","b8a5f6708b4ef1ed0b6471540e9a57dcc8183ff9ecac40972d8ad2b9064a5e81","ab2eb7a9c6f945734e2d320ea52d041bd91a5215806208b1c2fa5fe6f94a7d81","04959624e30618f1ee08000f64c017511a3e18581d77599d68bc29e59f98e881","ca62e1db6f2db64d4bf0177c573700cc71e81f07165c01a5db6005d4b6b16e82","65b7ef71f2266d78e507e95e79170c14208a03c08c3205bffa9ee864780ba682","12bd0654c90f296d6eb98860a0a4da14ee9fecff5f10fac7937db8ce06eaed82","785d2f9e65e5a3d26c2c1140aa23517267405c72807aa0f4fb0ee8e0a5f04083","459a604078d8f78d5325a62a0d573091f7cbcc49c3d7a066b143d0e7df932f84","a49609578e19ad5090933d31a44d6e655888fc9479038c8b2172f5d9f9594984","71f47cd220cc54600cfd66bb275160f46c764e23a79202054f840a290d616884","81fb76b5cadc293eb9a272c41c3a53fea292f3e653ffe7428fecad6fca5bc984","cfb0005bb8e18c3d40143c484127481fcab9bbd35bc7f6f21c8173f97f546485","6684ee562569ece848e3ae7c5156f368d0f3e2f3d6caaacdf2d4c6ff495da085","08d1be247039282fb471613ac433944cb3f06c0b073ce276c2c9892581a69d86","13123bda908c55a09a62c90f45e69981da4a9afedd6197145c0fae307428a786","c0690b24d83ce9c422e857f711c5e3bc1cc726720152d0eb443b7d9a19001887","a638c57025a24926f79afb99b3a515c7775289523efdf1534ef8fe7608657287","08f30b3adc4b4228b5a90fbd37aee62920cc036f1bc693fdc854ff2f148ab287","2a0e275abe1eef5ebceaa7a8fa6c206417759e35ffadd8a7758d13536795bd87","04ad895fe077e5af24c3e678845a6d9f657ef2001c043cda013ba4662d03ef87","a90b5f71c0ab264549b305a1afe8322fe91fbd651d25302e39c513c1d7461188","98a2772a72c05d5d6937b52f2b4e42d196ba3408c466c746fa4c3e25b6824d88","fd3b99b0bb86912e5e1420c80ba5aea350b889c1eec55446ec873d9d07a88088","851fe48763fabe9e6e76021a97b9c203e0e014deee6de91f8ce78823883cfd88","1e1c0c6d6691c9c9a751a18327ba6371ec16c78cfbc551d8b901eaebc3663789","3283c6261db6802c58aa3ab98aeac390edd885dd90a8468d3787ecae8c267a89","09b6b0c426a2f8e2f313ea3f8687731eb49e3bc3f36f14ae13e455448866b989","4071e06a45d4960c53b0b2e964e4ddaa7d7bc216c2f9031f6c787b2f7f43fa89","472fcd2c82944ed317b279e8d4123d6cd1ada37c255e4f215fab5b861eed9e8a","69e75da316c9633939e7e16bd2996811f88413745fdc8d43aef204662f4da98a","e4ecb6162d626925f880878fbed89a926d79e311a5fc5b202d102692f0d3a28c","4f2d4b303ecdbe0377c8bfebbfffc273b36f91d391216f647d4aa9f7ec58d68c","198fceeeb52a4021937e0d6b673dda8b45c6954ace40d1b75d20c5b0195f418d","63a1d1f81ccdc57d48c3df2c1779e2aec085dd40094832e6f5d4650ed035c38e","8ea514ee8839e43c6351bf12aa3939b29b7d323b09b62f48b90002da73d0f48e","7c4e493aa45fa82d02e2615cedaa3de8eb29491f7bfa1f2a91665470244d148f","456db53db7e7d793f66638adb10de5ae98afb2d1ce9af07460df8eea097f1c8f","894ebe7003f1bb3bd6ca18701138010a0f06f92c72a9129bc20a07ad3310558f","a69ca6c4340afaaffd957cfa6d9504a0fa44cc92f1dc0fd8616aef1d65e09e90","0e108cd3d30d7b66d913a5345500873ace23ed86afea08657301c19f8182d190","5b161d1b368a10093a649d4250e6fb06392265b7f70f13e31ec1f55511312c91","33937b48f80587ef48becec483de793dc2a27d8225f911502d836adde3504892","2858bd7ae52cdd20df03a292a71cbe257ef5e5cbd1dba4f3422f991e27c5c93a","c0b5bbfc4ca451f88bed10ebbe74a269483b95d687bafc40044c6c5b9d64fc92","df94f13c9c6965a89e511639c8a4a9cfec778de86e19050583a047117b4e6693","bb6519d12f00ae86496c20ee0fc813993c62dcd97627ec9dab49a0ab7e08e193","436fd6e071a264bb8bf5ed82b6e1c72086505796dbb77bded46bf583b79052d5","c1861c529f4ee215e609556e96bbe5ef94251355ffdc60c70503d6331fc721f5","78dade128d15d164a93187330d2a1556953e31ec13fad08f465ebba196b30794","8e77573b700614348f9f98454c8e84a463671406ebabba38463e937874d66994","415866b847be00c77e9f5dc8281c3088abefee0f0dc8e2d7a49e71388e3c7094","834be1112d93405a2560d194d384ee478dca4765c077bc349c84ebc76edab394","9ff7882395fd60929019e4044deb86b8745d99b105173dbb55cec72321ccd394","2f65ffff4b498593b8315e5695a27c9f7039836b6d7e0a5904f43c98fb824095","ea3e039bb118c4bf480d777759484294478d136523601ebaafe7c2baf00a6b95","3cfff5d1b7b55f802e464bec0428bc03769f7e22ed0dbbd3001989cdfec66f95","b2491d5d7e6dccf7b6eff2a78a880f94745a83d67ebb90d8e0f3db7c663ee595","aa12af1f2897e8ffde8d670a18ab2057bc70ffb8c0fdc468e330fae1c418ec95","b73da3e46d5ce5e802f13424bd5543162b9442a4a61b527db21f0c474f982396","2a49766f97e25e41614f143a473609f00162b3eee194859e548a150f48dadd96","314e09ed32d0b9812ccb839e1fbc022d6e19db7452352a0009ab4cd4876a7d97","92d3a78ba965d10ade2953d837dcd71f2909faf134d72717ba81d53f4009c197","eab896e7440d7393277e35b1075de48e075cbcfaa9541bb4f1bbab95950ad597","1e9300dc6ca42144779f22b36cb0d590efa84009ab9f79217494d278b5841f98","6a0bc05d81c6b2de788f79e219fb186f4391f16cc2c041a8c4c1a9191a3dc0be","01e91fbd4d48f11b9c20a32209fdff9c905726aa83482fd4bd6e917090bc8998","bd478ef69c559d164948bb549c099e65351bb3c70149f07db8d7d8f446c84899","a3cf06d39b1cecdaec01eea348d1e01e0f332b33b40c9d762c5108963d87309a","581e11d7f41cc1021e792ed7892d43618312903895447ee762f7458bfb80709a","daed01251bb8a10e174e7b730d63086cc7a4bf127ae1720100243bf71cdee5b5","b54ef8073b99ee4e957f22693aba9fc8eefa0dbab910a73132644bfe692724e0","5affefdb5103632d29d1dfc2f16a52ea3ff9d16b3b23abe4a9c47c23b5cf8b9a","12de82460b073418084e47df0673883d017126bd24770a3c47004766f538e99a","58acd21ed0554e409f4590d3c7af48fb83443dd3ae16e67688f2d71bcb56e09b","4fd7265ceed02645d30ec99849032cc8fbb4396e32422217a101d3fc5588379c","3e61c750ddb07776f780cdf76bd8660796ebfac6ce5359e28ab930fd225d509c","193aae235ac6e32e1e796cdaf9b74fb36ff21bdb1a196dfd6fe4e12b102a38ac","88eb57165e2d02684faf0b288f5d58032c564232bd1893566132af677bdac08a","831666dc3c01da1d9dddb0b64485dbf2234077a9ccce045468e3ae1c9f37069d","ec368e4b96c14a3d712d0f42899ed9f99a9697de60351584e939ede006a62e9d","fcdbe6dda6b607308190ea55fe9daafee0bb112b5928e46322d2219d76e23b9d","c63dcc8cc5e2bd2c5d77a730584d0ae535ff8e3991fbdfbec39d3a30a46a3e9d","2c59b54e2af11315b4fbd60aa00b6dcb81b4e007897b39a18638c4739929429d","16f2415923b7eb9838ebd40cf25ddcf4d8129ec509d576de55e263b050da679d","07f2fc2bf4f78b5fe0a866b297361a9e03bacc45dff4d0f1f93149ada455509e","5d76ac7232e687f1e0d5d9c06aea66f35e3b00ae65420d868bca304eca5a549e","78438b600223d0c1c7f9cef4916c5210e5e08083780857c0e0d930e9ad228b9e","8074b1e95fbb01e6323d227f69184a6ecc5db54d098ae7e0e648d9537dddaa9e","cb22241715e255fd5fbc9cdf3462460fd76beb53e1355e5680270312582041a0","bd6c52a3ef9786df0d0441d559e52bed21c68a5ebb0bfc7b8aca5e41229f5da0","2a0fe93a6ac7ceb88db21f529f055740bbdfba6cbeb210c1e9347a02fea92ba1","4fb5c67f844ce1aded6e50fd6cdcceb63265b4a720d644ddfb0d7bf11fb6d6a1","6975013b2011bc1e768faecfb1e0e1964f5220d5588b278089db19ef82e9e3a1","cbd70d0db918e8bb9938d5f13b7e8760ecb009562b08eb2c64fc3a565a054ba2","46120b3719f1334181ff67eba23d38e4d9aa10b6b8f61e2701313fee7849ffa2","f037358f63ba0d80c49e576bb74db5098befc2481dbb5730b37e7dab9a3880a3","661e024a1c9aae07238d806c48881ae0d9cda9c67d0ac2d9ba369ab4db8325fb","c357234f6004094bd3b8a24aa07557e4cf8b27830a55b08b64d8d8b01e4b93a3","b2e3464669f09b2a3ed163dc18a34b903101bc37a272e6149ac9929354eda9a3","5fc2796772025b9c87005acc9f0c723497bd52ddf6058350fd82ecc71e7cd3a3","1ada834aac016b3efbee9754c5e6122aabdfd071a65535d937c7ddb3f0d5b5a4","005b2af8f88c8414d9e2a433ddcbf836016e3f158a2ef339aefbd64efa6809a5","ad68a4d4227fa334e355dff591bb80212915cd0f1db8ee2fcf9665ef25aac2a5","3ac3f468854551f3667c879a1e27f7249672da3024000dbfc2bc0db4d18213a6","9101070a79bb1d29a976bd5db812a0f50d26b3a885698980982d043ca5d161a6","1e280a11a5438c99ee0fa6d7abe58c60c556582b80ea54cad99d7d498f344ca8","40cbe546aed90e3ea45952d33eae8dc4cd644b2f8f4fba359895b78b87f8e6a9","26fe0483e1237a91d109699ed21faa2f2a660e70c54a8c9221235998bd449aaa","75ee135c7d6a3340f3c49fa8897f55f2420df628104e0234ea56ff25dc3dc2aa","87fac011dc9a9aa5007e31f03d3906f6c18e751db9a11fa210814736a62165ab","2df964145385c8f8c1da5cbe516e4bd2a40e1cadcf6012a2a6fdf206f53588ab","0b12c993298f632a780a6de54cb94471799025d5bbb16badc684ee6f9ccd88ab","048ba3a9995d6a7b7eeaf4c2b43f47114f9518aea1107cf424a617eb6c79c3ab","979f684d3e7caa331b1faee1418ecf1c2ee21245add683f9de885b9e6f626dac","d42cac044da7124b0a2e5c6b15bb139024f9a380ac9fcfc97cece683c150b5ac","558faa943084b6f8ae213cc7ef0ed81376a07d3b5b0d6920e1e4080fc35505ad","43eeb5be7afc3a36330995432ce9eecc5e6199121fa67e1242fc44a927be03af","19b031ee37f7ddf3c45c64367869e9e4e77cc6026cd23dde83c9b4fc908373af","a7f48d68ab1c6abd912a085b09e44820d8f5f94c33781ce45d1879bde5f8eeaf","54f83d0265619efbaec63c080552f544750494359b117cdb85f6aecf1b972fb0","078fd6069546dd84272ed7428ddde8cf19d5538b49447e596df0e5409d7797b2","c424deb67d170c8be88a4f1b42626fc294f376671f2512ef01f97bf091bbedb2","1e4b4d6a1820f0fdad0c0c539af44f4a32bfbe2c1e5625d50244c0aa370071b3","8dc6d6767669b775177e2564fdaca92b42ddf8faa439123dee8020f333ebbbb3","9fd2cc1a371818418a5ec70b6bccdd2ab8640a91de4c3784fb0028ac66f600b5","5d0a8165e7e816496b431ec813bb8ee7f412357c3e93b5b199869064d63f18b5","874ec4f3405a34c4acb6dcfd8df55cd2734b09f1a2187ac25ee72091bd5120b7","5e33f2c72ae49b6f224f147cf17a1a6feb82dd4cd84d04ba2f4789a609cee0b7","40e16e489d76442fa7bd94452a02ee22cc0c61e7e01563519aef4540d5ace1b7","7a6b3ae51787a25017a98af701c4caa51e16dc1b9ed74927c2b1cad3ed1b2ab8","b364bffd00aedf17566d595a34d33fd32fd5e405eb9e800330d92c9ad5e01fb9","c1f0351dbc1e7182a12ee51d9284e609167c2adadd48b725efa66a8bf9e0b6b9","0b47305667f1791247e3d0ba8b0bdde54c9e6463094a5a2865132d8a222351ba","6c6f308987d5695580fc44d053ab8b28c1f7fbdeabbff7bef993a1c272888dba","0854be3526d86076115765bd6f175c06b0e840ec70133035a866b3c0f78e2fbb","d9fbf1e0c8ea1de739eb41e8ed1234b4779036a7f143712445e5bc4e4fa562bc","e7886a672335a32d2e7b05ee43dadd010e3c9971120f9eae28ae9b3d3d5537be","324230fb82bbeb25f2793f86c681cd6fb7562989915c19f79842068e4a24a1be","2207422f5256ad2473808c324b46af414428e50dd09518649da2969eaa87e8be","c30e2c39a398db3aab03702392d8e109b8754673f9393a70d3c023d3e89a31bf","13240452a464775d2e7cb40e932a3cdbe0eff88cc99a70be4dc7abf16ab848bf","a435edfd4037b281d850ef9ef1bd351f989d7dabac1b080911b6f3d9e5917fbf","83652547794c2fd575dca0288ff049873d781cadda9bb87763ff66b4c33cd9bf","d0595ce1fc4e9b10fcdecf2ac6103442095d562889ad0e9ff2aff196b629b4c0","fd800ed4690c3d392db71b3ee23af8fb3af2d40c9631c1c1a791442cd14330c1","8c2c47796ec2cf604abf1d79d6dab149ba9e91d0645de877ba0eb7ba8c1508c2","6495c7a40dbf4f941dd35c11078a966b3b42679eaec7dce70acf29bd253c67c2","aaf4782b54f9d52b5e55c05edaa92792370c88ed2bf19d667f2551138a24bcc2","a943162af90976aae5a281a6a33812e2db9ba86ef5f7484fda4ba991edc0bdc2","664a4ad030654e85a8f6b3132442a1bf232f1d4bc183e3d0484eafa842599fc3","f78e8e3e07d5dcc45fee6d228994bcca1682853ac2905575930743dcd08be1c4","95bb874941e17e2308e96e31ed202c66d97334c6c1f3fa854080a62a0b9b60c6","9a4e33c2bd2e95dd0a4f4830c1b87ec0f0e25ff8dd12476926a7d89f326102c7","dd6eedfce6b58ebf94e32dbf91cdd85eebe31ea1c85fa84fc392c21e87da0dc7","8a294bdbb3805ff0f39e0beaf9971b83088dccefe3e8df34ba4f3c53889df405","bf939d9b817587f171a42b97e2fcc8f8d77647ac95205fdfe382306d153e3efe","01f6b1089eab1d42223fe9b45943b4e0d5ffcc78583979e55e30a334601c2fc7","43ecd6ad5de28345804448c54396f0409dd71b9e8aee327db92143b2354e3bc7","2671f954c989ba269d6604e0914727cad837a9d09437aa9c984874ec85c29dc7","c2ae40fc931aa18a3001333d39fdf578adedc3da992ef7b0330d1b95b57b07c8","7cc5bc6ee1a40021b8311fc9a103ffb1366eca5b7a20f12ca34a6030a51671c8","de343c3926ccaddd4884c0263159e26d392609f4a67d3344c660244a1b317ac8","3fb5a9f248d424751a3d25be999896d43d3658b50bee733cc5278a27f97f8ec8","3497df0571d73e581476a271197b7744bba6e7dd02fa89e7d46ce69e26b8f8c8","607efe685d2619f7eeb9554a1fe246b0a783aa166e2d3185b49caaa623d844c9","adbd45e05d820a2733d91ca030ba032d1419949afbf616126d21c323805b63c9","df871d0809d7c22455b00bb491fc1d05a08440a85ed46d8aab44e949d8a1a8c9","88524da165d379af99e9b51adb62a5e83be8dd83c73a7ef8bc467fda653236ca","068434918144099d1215e026a3e0880a011abdf84dbaee88bf52dff54cbe97ca","52d929ea1b5d853b3c2f5d781ea64abd1b88603c9a3c4bfb9882acdfb16119cb","da1688c14589b28d8e82be92940259a78f2025165e1ddf743fa49fb5b1f5cfcc","77e9645ae550db866e7b586f9b0d193b893afeb32c6b73b54e2a1f2967b2e8cc","72324c3fccb8b95837992e8dd6fae649af357d43f4a1d9ce5837576a17fde9cc","3ba05e5673ffc8d6f805e170f8deea1c4d31664e01ab591efc3cb7b1e637b9cd","420661a793619ac1438ebf2edc1b47f361db49ccdf69e0d2219c555bf5ac10cf","4f575bb6704f5b8bd7b6d19cffc3ced94500508d8e983920352296e4f0aba8d0","1f2ce39b53fda84755a21bf430ef19811b1f0c963b03dd7bab4e269380daa1d1","714ffb52a2db74a114fa939ef1ee0e9caf87f1eb7a07079c826e00b66b0bbed1","ba45f0f1500f09c99e1ab42f7baf3db3f9c72f5aa6d97c250486368786fd75d2","7a898f21af78a4eed0688db743b09aa5922a34d6402f989f0ae9445578652bd3","39d6fb1b128df38d64494e137479d60e89612bbd3c5346bf09d1e420573159d3","1677df7e4d73098b83aa160714a8694164c6984b318591384b750e834aa31484","c2b6c76dbb2fa6dd0c554a498357b244ff6a1da197411637d779507d13e75fd4","821094186bb75f357711a95d073d2164f3adce422eb6f72410572cd1573776d4","3f78a9b422f7db6253a58f56e37dcd3baaf8834cbb94006bbe79b4016401bda1","5547fad2960e650f0e3e04e6390d35aa64231feff5da7a1b85bfc2b69cd1a4d4","131159806309a96a346866d568be55f1b7dc766f9615f258921e919fb7369ad5","e56e21cc31106b016b6d6027289cd85491e98154884b78a6b4460e71b2f6ead5","b25e9be13a36a38c4360729033185de5514e72d734939a72a97b67a31e8402d6","1004df8adb7f7692f428afa8d7bac99820aaabdcf50cc905b191ca8d5a266bd6","55a7382b88b5ae093ef9e201b449b1a98f73286d6f71c22c65d6d6d733a5c7d7","afb2c63e837bec8f0b9b0f870c125e10b25df66ca8238a2cc5a6d3498194f5d8","b6ba976f1d6e886583cb4015d4e2b1ecdc90bc07f695ba5ea49cae047aae1bda","139499ad5595f9f9ce9a846d9cfef31dc32561292aaf59d2066ee4aa37f364da","0daa290226ce5c56345950db099c3dbb798898bbba4c619caa19e994dc7198da","8c28bee685245e0810e26955c7f2f55bbb0dbc494fdc9fba1230e570e412bdda","d2c3e7eba2d8ac49b713df7e0de731439ad6dfce66ae1aa4da98df27556df5da","282ef10195d3a52212d13b0c397506816d12b2a8715e3dcfd809a21ea0af0adb","545b127c752215ab29bd769b3b72724eceedab79e83d45906fc77b29444398db","6b9dd656b266d82bd853c708250941b1b30e81b169c9c188cace364010f8a3db","9c4e6f15cb03b97d72eccb15f5ac6c995f77e6a2d9b5f4579c3c4430f56cf1db","1c974f22c4eeae32975f570637fd8a3dd2bc9efecc9af19fd7dcdf5b6fa83ddc","d5c447a534c51ecca9b94e3622cdc80cbc110a040c343d6e66e99681947b4bdc","28b7895e11ac1c0ca0f89a38d349e6cf480c767877b27c75f6b609504788eede","39118639301ed030136fa1ce5245c404a13c193ce2e90408e67492241def5fdf","e16f939d0907ba1c8b1f84ae315445fd14644d5f10337a3965ed5353adab1ae0","7a07336aab5cd81ebcd1d7aaa4eca32d1e5eae3cb13a970e217b6010380bb4e0","112c770ad5b48ff89ded182b47fac874486295d6780ab0a08b55675f35da52e1","789022b819ba13ac5aeb39b73d7ce95f8922c0f0613fe5b6a5d2478849318be1","3d66450c8891a0f7066acb6078c6c821079498177f749d365acb93a3d0fc59e2","6f67c7b84adf803751db1934776a15e81cf61fbf6ac51bd70e14e6732c0c18e3","cec85d72bdc7006dfaa9c0ccd756e3c86589fd4fec4221d269ffeda6b23258e3","b9fc915f9a168ccacb0cfe32b8ba78bb24623a12a2226c31fa06f021f0ddb3e4","073830825948ddc08d4ec231674ea007d1be29d54dd0c4bd5e934d7e58a7e3e5","dfb39369be6cb3fe4fbcda0a178f7276283103719469ed7827ceda1c90ee2ee6","3fc5cc257c8bad78cbd9ad4ec016aa81663d66ff45ba54a6872fa73ce2c8a8e6","82693cdcb32ab207365e1db4fbfba13ad8ecee62aa2e55b8ab8cef7af2e2b6e6","834d28b9622feeb97ed6817f8eac978bde6f5265663fb3d7959d6ba6b954dee7","cd143e56a6c464ef7e05e1daa50654022ffa3c18202e1e1e06f124e01fa853e8","c54ee66c38117084aba5fc20c33d88465dd4d62bce7c9484ec4952189a8affe8","48a357b55fc40659102d9c20c5a101fbd6b0996decaddfc0cd6b3bdf9c24fae9","d5b015c07de28ca33df42cedc548099db354151530737449e8ccf98717ca8cea","d22e8883217758534fd507f50dbc4ab39a2cc48ecdea854aea6581622d6ed4ea","f0d84f99c7a9d2dc0e5556d9b84b085b0feab397f014957ee028452511b78beb","01e001c69e0de41e90c98c6cbb7fe84ea82fc410480b115fc947a2ad34545dec","54a781ccc934ee231fa52d690c5d2af67324035b00e907d35ac3f747bf5175ec","d875c359228d693754e5bd185bba81c979fde13af6aab93d8360f71d9ac379ec","da21f2d09da551f018d0a41cbf64af73e515b3d745effa9ae4264e2caa538cec","efa1555da0fe9e60df87ac9d506c850214a594fd5174e1f4309a1814e50cbaec","4571e9c332c62dfa20db9019899b10e95b9424b185437cd758614d7aca7883ee","55c4fe3fac8ec57857885db3a244d8bfeef3ccaf46fa6fc8e80f61b1ea9091ee","af86238aa5ada900637b06eae07653513ac1eb2f5e5bede8d6b64be9aaafd4ee","caadbc97c65443895046464817ab5b699a71f49ca5c3b7464731828cbb92b2ef","aa44513ed752b5fe7d284320857c66ef40ca6f033b0a492e4dfc64123f34d7ef","446b1b5f3f66eb93144912a979606631c5bb0aef703a1ac95e7eae1d1946e4ef","81b74ad4ed075ba8656ca430b20628e1747e1a2be2acfd1d0e23c8c975536ee4","b7522065a8eb7740a037eca4d34970cc752469ea96c7fc13d80ace43f8cccc09","2c4f988b947e04d816a9da9c2de4a7c0929301cb182ef3dd949f4502a58249f0","e83d2bc731bb62c38bc4285e63593a7ee8d2806b03b87f8544ecc1d0df0859f0","539386853aa618d9685b7ea00a6504d28c1fb7cf49a66d76dce2acbd7b4661f0","a9e2739368de683446a26f2ad52ee7f0526c954ed7fb2fbc9956fc8f0fc8a4f0","ff5a5cd0ee260f3e3bc277cc9f4e934d5a413219e351d96437f33e383603cdf0","e8fb17a713a494293a0228e48b4dbb6d4be4d0d4a6aed0c4fabf183bd6a6d8f0","759106e2e2e3bc9906519087fee0dcc8735d989b8d3d6d612c46a7675dbe00f2","0330fd1af039c98ef23fa03d15a38df746ce5afe90b82e0bb1fa3c2531e962f2","1cd413228ce921c6d55008437d4a7525323041d1765b33f29b72bfa5a88314f3","520907891710b9c5bb7cc91d06b340b547eb9cf79dc7c7df9227ad443af3c5f3","f526030691d2d8d1a33c5ff70ef39628dacc6a1c8fcd55868b287b81e09e7cf4","292c2726e91abc308c4a394da3fcfc83e515d4964ab91cb1b2f81aaecd9de4f4","bfeaccfe57659b06244612b7b98b7d4c9435a4f2cb9128c0fff2beaf0ec8f7f4","ad3c11a2501ad46c969223b7762590581a185bf8f82d3d4736dc13973c7331f5","83aab532352e3d31f6af6fe84e7d63bf48a07d28b6d388cb91b7f8446b5e5df5","044d6590cdef8535204b755d75a9460e332955d71b7e26d827d6281f18251ef7","0df6ef3880b88b41380eb07b3ebf4d84623002570a30c1e8fd2b7354c9940ff8","12678cbcb382854a4f144b517f88bce5ca03cfafd95bedee7affb97dd1da8ff8","02158a63dc9526f44030216cf0aacbf0ba349717c5c97221f093db07abad6ec5","a1c815f8f1071da8a4c14f8639be89094043632568e4a95c24ceabee460e7167","94f2d04ee0b6c7758bc3b73cdee8166186335b2b795a4fab3d6fb6feae3701f9","a7bd83e74f0fa1faafe3bc03e7aaff99ab659eab0ce758a01fc968395c0089e9","fcba9a5824234ea2090a05a098695e604cf60719c6338dbd6b0c27af19e301f9","558b6b40ca906977db77a56191c35974348aa3c33ac90d159843f4323581a1f9","a4b4037d6e31f6e965e98ba793f7ae38bab7ffcc6c3a3dd4069414888816d4f9","a0b0b23a964a42f0cad331bc624fd0d29e38d9d6e839ee8d3609c8144f273bfa","cd5a71f3959c38d9617d497267fd4cbca1ffcb9fb2a9f10b10fa77d93ce592fa","1e29ec865bd755f024b3135318c77c00ad41bd0d59741cd9837a0287dc2754fb","f189ed39cdabba758013d5abc19619d3f0062da2de8d2d8d259b58a3857055fb","6fcfcaf07ec3ad5b00e4084315c784e0c64d83cd51fb3db0091b56ffd2f6befb","34ce878f22d7932678dec8a9b302d693c598ba35d90ec7a9355556362341f9fb","7cef040e3a060f9913ac315a6a6b4bf74f811462dfe21594d04215b80098d0fd","2c21b617aa23f8f6f63958734fedb253eaa1d1f4398bc1f4de5c3b53143be0fd","53285c116725454db864cfe27b0814facff3e663c78c22b16105a56f6320f6fd","75e56fb6598f290f6f2a0b0dab9e7315865d0e7899b895109e5314988bbf3394","e28a6ed15156348b37bb5b3acca6b48867ca9d1211e9eb1c2f079b4fa83513a1","e6b302795c1c4e9d373dbf7b45b74d782f2667ec1bed0d8497d480ab9dced528","fe45b7aaec913cedac147204a14a373a99b0b5f830d59671f0b9f7dcc506253d","95e1b1e6945ff19ff41e825bd34364f590195ef291c0c78682ff80bba63f4e66","f12d4bbde81e262541331db0564ef5649c1b874553a4c07f614daa9caace6d1a","bd62de1dd0bb065f7ab4b06a444110217396781797779d159f4ff3b4fbc5455e","375559b74b81936d91ff9da7199ebce87ff3dbe096c5120ea608ff164f95c9c8","804a6b49a1c65a345f03036b5044528ab51061f4babf6d1bebd51e1f5f49df06","133de7ca99eeb29894cbcb4dd4c6485690b27e84bb2986b57420fd88b8a04230","8efd2c1a3b07278d5553b667ca81aa49aba3e9dbc3a0e74ec647e8635a33a97a","b1191bcbbfacad20c464f768047aa4597f7de4eb6c87ccdf9dca34043f179cd8","70fe025f4f5c13cf47a787300a003d7f62ef2e54f8d6d7e064084405c6a5c1e9","2c78c72f6132da9b452096b7bba4fcfc106e66382fa34377828b38b414edd052","8ca0f8088325893d0f93ed65c4a3974cbe0027267c6d6cc6b575ed7c70a9a933","e85f18b36befa68e228b284fb405b918e869bd8e7f77509a502ba14dce9a8797","bf7c59a27df1f821dab01f88ec9c571360c39a593c9585e33104f57da2c0f26f","e264d72fc75898d4748598e3e1121fa426fe01c19ffaf28f0d81153fd3734a40","81afa9f3391a329423c2db3c67701e4a151e466f8e1303a916bb7df8f3c0f81c","02d016aad1b0b92ee215aa44f37a93eef07c4d04bc8be0ecd0881f3784d9de75","5250e3a6b30a060d6497736882b95c5b03672fd6d856f36a9f4ed1eb6de48dea","59d3297f7d35f16f3f5cf9e4c6e64f54c4fa2a276268f7b6a22d61294ea6185e","7e27a47d98a66e6305f87e63a2a209946a85458a11956b05d256babfd81b5310","1f4226809fd6e6d8880c2b68fa6fbfc5628be3cf1674d1243438b12b6a20ce5b","d7575fa6ebfa4dcce6dc9a455fd476a3537732abe7f6ab0745532270e13f7b6c","25ce446c4ef18fc7d1d1ea66de19b4b0379025e9083dc3a2897f4a1d018526f8","0d586faa074058d49cd3da4f04b66d74497b863696a52b3171e199e54908dc81","2536fb4d2828f83cdf3dd96587ad0b991853cb4dcd5170486d23a1815f6ea39d","953c15005407ecedf58646f6cda929b64edc402da1b1ed3352e62858ec58de15","54858a0a7a6e70c2ee54fe0e0bfad3c169c02e5dd56e39f5dc621eb0ce4af6f7","e16f32e783bd00f1bfa62fabe5600f2ef3e65427dbbcc2b56e78c4300b769d87","1fde93f0ba8dbda5ab72b51383a85565f3863cd40290fef96fad7e9a72a6ced5","4c0aa3e33756e88be063a71f5917031da41d2f6fb08ed66bd968f7374652f733","49ab7a59303425041e1275918c308f3557cfad1c5d496a34e37890ea6372a600","74723406602e7f1536f584700581d881e487f2bcbd861b39d9074ec6c646bc3a","37cf7b528d7e625c0c2b875a01458cfae05c64f01d5f683cf49700a57b42f72b","1c47150b91508f8579a10e37cdeb06a916dc1a042650e5a291dff3e4db9386e2","1cc6c0378df2d616b04df4241d1c8a26ad25ccbba891bfb3fea20975a3d0edd2","a519d83402a394743b284b2ee6f4c0cb1402a4e39952fd4daa853984bdbace8e","bd0c180b3debd82c8b1fce59da3152070184888bdfa8df4fe12b57af1924ed1b","50762f3a2419442044a088f4380bb04780f545793bc90dcd528c6823a187fb56","784a1748087edf48f0e9f53a676f57abb6604f232774e25c010ef0bd672ab557","c99a56c5a396a61cbb2e5e472cb8063f000253e6e87c77a00c4c86ea9a9c6770","541e118da83918e751e105d2a429422f7d81e181eeaca64c07ca8bd42786658b","02ea89a2eabb30142b3d264e220e1a9d796297ff68a8178b4dfc69eb0ad7a1c0","27e855746526a6c06168bf08a1dd11fa5a30c78c19d6d640c31465385fa49927","4d3ebbd0d3638810d29f25a6fb0b6861c442d6a3e2c23cee9f7f6d582cc1de2c","ec1d7dd0b301b431c07950623179baacb19009dda5c08ac4d171d8d35532ed34","bfccdd73f4431e1ef065caf21bed739271b062728cf194c73729232ad83afe36","0cf968063f81e9c4866734a5f4e1e881761925de54559e6978ecf812812f1c5e","df28b291e2e6ffa913f5a56fb2218e9e7c149d9c1b59f74cf3978f4baf1cf35e","fe168807376bb6648aee0955ba21561c98c94a56a6777b6b5c295d9399ab2678","abd8659310d443c9adb01265c1f9a7aa9196d3f7a533c065392ceb1c3decc783","4c609fadc74fffdd700f493dcb7da5115c1d10bbe6d18401dc1a4c172e0e19f9","f169db38a33f839d11845c484aac69b1a04be293ca45e93bb2bcb6115ce8c8a9","81d018b5688c8cdd2f06f865cf784d8245429f2e99a3be63d8492c60d459b4b2","f0d3b0d6b1defd272e8bd7effbadb9232f6c98522c4f16544e61fed927da4903","4614ba74ecb40fd3384f535b7ad6c3221aa02ab96a1c2dbeaa0a8aaad6843c11","4520b1f25eb65d5cfac72fb4f8a7e104ec1ce25b7eaa9f53e312b9646d19a212","ed0abf5e149f1874577b78301a27083d547c852ccb423314b3cfb497c1e84e34","7f6d3a4e85469ac3161763bfe6aaa02f226963ea8e5e9c2d5565f6e99724d735","00d7f6bdb3edf2c55d9bcc9579009a84e89532058180789949dbc1e40471a723","b5f6369bc79bcdfd39a9eeca632014a5dad3e5ddaee86d687e7f773178c235e7","d4b45ac38ebdce6309136d77493de6874f6721efa935e8162b4e4e5af1dc2e31","28e4a7203132d33f51a015da5326ddccfb68b2691d4703ea27850ac07547515b","ce7b5ece99200250e99be82fbf1e738ab537f5ef89db94afbd356fb06d80bc6e","8022bd235c81dae00a0b87219045c0bccc4151492da54322f453912500e8e074","7d2c2ec07721e38d975b5a96d1d4ab372f88d8be6e66ca8681c243dc867dd5aa","6ee148f21fe43d9d81c2b617783de25cb4cb0d8d2b8c09a272c5ec3b8b733c6b","237cd35f1cab43785429097f31c22e5ced1e0004317ed831119701a49b3ddb31","7dbae492bb5a255e09c5ea08ecba65b70f3c06f3e27c60b30fead2a8fec0e5c8","42b5c16def88589af3b7ac01aa3d518ec012c4ebdb2eaa9666a0541664372890","4c505968deeeceb936289f872bc0e8652e9978b9373bab782436562096359e71","ad8112f9200caba41ef5b0c5649cdca07272181a9508f2e6187a5e387362f60e","eefb990873013c1b2daaee43b12bd45ac7fa5b209324733dcdd7248b7c69887c","7a17de3421c885c4984652f64f931964ca3a30ed51601ef4c155e6b3022c4c90","bed3457bd50e089cb6d66f213d80f242b9ae6d9014ee141fd7f17cb7a6f462be","9ee5ed846245b26ca819bab4d07affa6b7048996c323cafd701b11052818c722","ff197c282c12f903d07cecb2e38af7f5e83a12c0ce21b67008dd4e83397b4730","10d5337a99442e2ecd0d73e3ac9434a7665751ec9de4a0c40a4bc940cff10d7d","5fc41902bf70e332dd1019eb693f2780b8b21fb9ca66f1335a2ea49bb94ca393","e743a94897e953b615eb06ca8773879f16672915d067e949c502305197de190e","68f8e5ec1aea864427d6104610aa0304d9cb7377779b147da42c32bc08103bb2","0162ba33846e736103199cccd10837ab2976a9ddd60d5055c7b3c74ab254b101","38e39f223f7034f52514c07f4e0ab9140a9f73e236727254843a96269f247d02","0a7d1d1a2ee16b0fac15a0903c29c55ca9aa662209511fc5890b1ef4174aea20","863dd1e14df4a8277017b71c2fccd232bf46ffa878b42fe2232fc4964512be47","0f06e28634b93d7a9e171c6e1e7d75c9a0dd91c8d052416a3f7caf756d5d7581","587e7d96c3ca7e0af478b0845eced842ab87490cb2bc8cb49671698077dd73a1","bf60c425e09d3b721d86d7ba00088f5a261c73c3bca10d06dd013209626924e7","657903e1a769db6a753401fdc0166193497abbddbf0da87825d2428f70f2b102","54118bab49310f027c6551944652e7403e68923a603239af65e700c1adfe3245","ef12613b266aa0ebea8baad771686efef8b323465227c131dd3963e570db284b","329920debff155b3a3232e757feb8a3fea8e65992f8ae0142af69e48ed45ec66","fe099ce727bf76e8055f269c7d8a6c94179db0eaff8eb613b9c6bc739783e075","9a92e8fd837cff0d8b21e4f7b77e42e1c30ceea4e541a3f53a5c9671e81b158a","5c72c5df93eef8c4cd602a08fe8402f11b766f7ce21fc4776c5721cab3c20d9c","8061f01372b3fc59716a337e60bc775e4e71acb6fb4d10a31b8c514254943fc4","ce2a8b5cfa280508f2c359dbdc43c396da37c55ae6f96f829ac1886039863cdc","9e47877bc44f3dc78abe5da00baef0e7ea76713eb8136f63ce36f34972b24ee8","7ba1fe90b2709ea0523680b9e3da4cd3b05a78b18eec70d8705de616f51edff2","626c28019756eb69dcb7e0dd458cc8c4dcb6130ac97b84f9410c6f062b276307","1be9c103068c1344c532a85737ff1ed4010ba35de25df32457f9d9e3959e7826","8b5e927c402f58d7a2a3fe6164722662803cfecff440ad0c315f10a24d687728","e62a02629c54bcdaefe470a40d7478a32909c5eb2352f1a7d2920ed67f6d282f","a2d083192d4130e77fec8a0255d0be517769a9640fb1dca22a3ea64a7f23f530","257238f46efc13a02f84016eb6531d60ba1b963d3f8c7f199ba790774e8a3546","b4ece495bd4452638ad4a7712c0873375f4555e74138054ee9e36b0893d55559","3f0366e19d83469f7d50c68ee6eac767cd1b19dfa16cbe683393d8bff636eb65","ec491d5b4f04a6e437575db00c52f3949e78806617bc1cf73eeee45397adec6d","0298f2df8474fe504fa2ed6ae88c622161470a0713c7da590ebc9f7f27cbea7b","b88e2ffb73a380e55c0ed47bc43f8b9666bbc253a444186533a19576bace2da3","0cd62be5fc67b2d6cd4a398eaf24c40a1e0d2e56c3a469df1e51fa7e00f7b8a6","d4e35cd0d2f2d7a8d6163a75c9e1aa84b10e9c5191553fd3b04e80b6244db4ab","6a965daecd2fa8f2bc6ca77c2f17317c96a5161a620fd0b2c42bec61d35604ba","ff84146568991b6d6e31b1f10f8fc98f6ecf5d859a90f8ef51824cb1fa2e1dca","4bd266e178b3991dce5632f70bb198fdae89db6ad5d0431707b2011acf60b8ce","835bd08ae7ebf0db65e7b5e5fa5bfe2aa60a652daa415a9bcf104477fc429de7","16bbca4cef746bcc831eb9ebd0ac1022545b1ce552584461fd0026b0e842e4e9","8c813a8ef0d5794923b3cfd1f63b22633fca86fd36d8a474a7af049c150ce2ef","2eb2c92c81f8f05888c357fef76a9aaa15e0d841b2857d233a508e09200dd822","c72fb3f046d0c0cec154963f68733d145fde086d2285e3818704e6df35f3d091","e129e68725237bd07c9a437d4709ffbf01c432935514d22f7ec6c22540c3b0ca","860829bb0798e7d07659aed71d45ee19bb597c12929f82397467a7b500f4ca5d","8dc8c71fbaa57ac327c1f2429b5deb689d1a3a32b2eb64b48a48b98ae88ef05d","600d93c28c9f21fca7d1f99f0cea9d1cf4db51110dff7d44bdd4edfe4cd1c636","0b454e7d24163f45f4a0b5aeb58c792e9eb8de97a9586bf321458c9497ba154c","df0d840a9fff3a42d6de88ebe7193305154d4d946c49a74365f48900210dbad0","05ccf4e5f21ff007d67e87d0625b2b56dc20b1c64626e61ddb549d56597ec6f2","8bb14da365c7d6f5768ff1e4833bff92349352d0fc15e060155f0e1aeb157962","6ae092f671d3a736e4a98997ebb4d87bd703b0e9c57225a7909913d73b2916b0","3c9178e4b6b6a020a0dc143b745babcb50283d149f7bf424159005b98e847a20","4d9f102eb8750c55663ffebd0176e3a6b1793e04b6465712cb86c1df06afe575","3846d6ad7c5c6c40ebc81b696d615ee5519bc3811fa0db3a572ef5872a24b729","9340d8527cf21342e2710b3f64d75c5785866f3b6201233280bb3f7d5431d378","c2d163713a19af9fcf9596fb5657f9081c456659e8165b0daf9ceef2c718d24d","e77d361167fb1126f145dd7039a4b4662ca6ea9cad766c01470a11bd30343a56","b04e534a22a6414243ac5ec810619d81077e081d614133264db80f76ba0c30f3","0eff80eee9d904e47ebf2ea306184762deb1e000a2524bdc012231d9b7e07054","1b3d6d0a5f13835b6940b9e38b0cc302aa3c6c5c6395364f53327d19ae32b17b","c73096cd4d212e1e2d451a6def27142570f8ffcb5d73aa8203a8abbb5a88b4ef","f22efc652508e47b41a5fc43be0bc901ed1ed83aca25a7ffc02b7e8170323edb","d76265ec8d21404f379fc17ba240e52ae779f940276d037bb2dd374f38e62b2d","c8c4d1b7bef035b74d25ca8e37d5398e8885f0a7c64854c1f0402605c92e415c","1e6228d04c5005a945d3e96738cf50d432644e2a0361ea7ea231711494b69f74","7163f842f33c76d59f9ea3e785f44e24cff990efb570ee866a3841d723d58fb0","fb315b5f3b44f40fbe256f3bd1baab6630786c8950bd8e25f3443e2c174c9a13","c482d1a21ec42450dbf109cd8b4706722be6cc327e6131c120a6d55f3a25d02d","6cff2113bf41f32e830eb07dbada5062bac8c9c9f8056ccd54efdc6c29003749","c01c7a3241c587cdb4017706114aea95c005325c22a5d0c180227b482b23f9fa","b9692778088bd903a65e24cdf8ff934b64861ce62b6a0c6667add79e47d54f0e","a6bdc31a505f369faf6c2d751ba5543ee97dab1fe2f2be8942755db7d626f050","f2f12e12ae06d737da60ebe95d21764645251b1e27f71b5d41839d220ee295ca","5b02598784cd63cc272883c3c4ff3d055823d9f21783dd351e7c05fd2b0d1b21","2971bcaa36be756aaa7b61cb9550a7442afd64188afc04f6ffa9dfa4a871764c","999fd7ed010eacbecfe9f08f2c51525498fafd5b7357d24915186d8252adb45d","b91e6ab9061bf0660544ee86bcd223622d3838cd20c16c43786363684b6ec972","f1793d9339e238faa88f6f12b6d371f872ea95908c8c060ffe8ab5a87c8ae791","df4dad73e07fbfaecc98b7fe68b091b990d8785cdf1348714c072993c0751092","73be6250d7edc6e06dbfd4716c2fe55316eceb1c1cd4520ca9a15f023730ebcd","d19146520d58d6063497b93f5d157e1a96e9d9e7bd7cb5f53c9362f1515775ec","0668831d7d50e1fa6ded15c4e63104101c44a4855c2599db1eb9458df8321367","70f7ac28638ce00050fe7ef367724d33506fe7949332d1f392c5360989a129c0","de95f07486b73b81b32ac394e19c45ec5d02989395dd34a6a02f82577025f67e","2e2b0901b9fa7a4b6dcf1209cf31cb2541db72c794276a07e2866756ed4fe559","6a4de3be83f4f29b315c214c7989bfba567324e1f030192135838f625fc7077f","d5c7f471aa643ef1575fabde179313fc3999a3ee6fef53f4d7b508ee66bed95c","5bf91860e7f8ec81ea7b56271a5d939735c6bbfb0c3cee8f4ce996e831fb4558","dad547fb6d32eed3f052ce4000aa82e61c1226f834f5561fbaedd1235f1bbaa1","fe7119b9a12b28ee130644a0780d4c5e97a54f69316cf6b2f8272ed9a27adce4","e9e6741978ae25cd143468e84b436ec8edbccdef084ba0cd8e1a6b837ab0520c","0c1f793a97bd2d6397f51177c14a1c64606050c77b3dc2fcf3edc1d2748da5f2","0c7eead4666262731f28d530db42f1680b931a75716c6d214ddb0d782a82f2e7","40c68f2029090da9a0bdba4d60ae5645fc587e1d3a133ac8e41a8977f1d41ee0","cdef5bb27e089982e41031d73b7b2f97382e68d09ccf6e6aedbaec59a26fa5dd","379f33149057149818fb917a7ab5f7659afb4202f199eec9d723607fe0b4f752","fdee76f56c6b14e84c2c2f4269409d36b4242a04eefd7b81dc26ffa068ab59c7","f63b33a809af4c46199efec5ec9a865f1605e81e2aea310e8b2f7aa3e63b7620","e9520a378fa497c963682244e956d47ed3934833b031506ccac1ccda38b24335","734841d94b38502f4a7b9b60629bad270f6e92a4a19c548e7fd438c447db8644","aabb5f2f03899a01e59e4ee571155bfbd04ae6427524e539c3eb9c5117f42411","fbf73ba8b2f581a1c73395f79b6ddb5676ff0ab7b7ad8930e23e54c6903418fd","3ce1e8fada0338dfe07a27fea092818157150f328d51d070ce6001d6f220043a","0fbe5504418b2ee8e92aac6c7cebd9656b35b8d6b252c343ce6c5d347b9e3e5f","e6df6c93755c299274b20c6f219e57652bfd172fccf22dc389743202ad8c37f9","d19abd3afecd0a9fda95bc0ca7dfb5192ef89827dbb3539d6319973ad5fff0c0","141098124b303d4dc8b2ccad65e99929389d27ff4e0b10239f70a7004749c007","441b2e6848d1390366cc2f0121d3aef9fdabf8ae18d21a296f7dd944ebac6615","094352b3da50576a87a6bfab2b59665886ca95c104a9a05e7bcb74726f547b25","2423de4a598e4a0c208a265eef81722059c3eb817bf8081bbcbde2cf55a3e24c","95798c6cc4b62a26d7eecbf98e287fbcb085fa8de8119e73b41e9fb6e09db261","85f65542e7465108803daac3eaf086710d64676561f32838245adb76641caf76","c71ff34faae406a76ad7f7dda6d5efae9e693c1c151ba887b6e86bc5ff198382","146aa6409e67640d0ea353099c27ea006a5d13e25c950aa164fba0c9c4df3a85","638b2954434e9f3687db9eb979176f5d13070509f2829953935f266e6ac04092","46dd46f5c64213a31e7d2d6157a806dcbd032e51f365202c2e96c8b022cc6a2b","113595b3d512179be927140efb64abeb74e4c318ebf4400e47948fdeda3e8e60","66566a482a7f242a92070ceae9010811efd5c28c8c32a5dd090356135673587d","bce6fc5e0094be2fc75c14e8bd8c045e32affa206e5998062d2872619b9531a7","e1e7336a95dda8f78f4ee0871dd0711e6c1bb6b2144083c4207ec75122750514","a42e901104e0df304240c4b754d5ed9a689b65d22cebfffef7e3236e8cb38f28","90ae2a0cfd81aaea833e2df28e304184b314387257b160185baa6298256a3f44","f4bf4fe7bf90d12c01fc79487cf9df225cb7c4bd807f40b8e8ffddcdb051d07a","9ff5706b2c2d14898e9d6c3c7f14848a680808072cbc76b68d8a74839cd34b7e","bb0a2c745ca2e1eb1098100f2644b655528576df71332c3e181266b47b7c5d93","5bcea615e5ea6034e93dad8b7e5ceefa3fd278de04cba31a023c85954197df9b","b35dc574f3b87e4f072277c1e05715897e35c5e44c4d9dcfaef9b9204bc6d7d5","c62680427e474680bbb5cf6a5c8f6c92190e54176de8c7722eede9f14a003405","b4bed95096005cd058d223098c0d3c48654a35a10957d66c11a0d231267e71bc","2991bc1fe48e08f80d5ec39dcf7d5a023396470e483e7ed67ef98e2b10a1dc37","6b88ff48e112f375e7663b0790adffbcce2ab7ded482a5037ba23a274a621fcb","38d1b882bce0a365b1101c878cbb7f1a3518a1b57e1bb9d9b16df66b7faa9994","323f4a04aef9c17fb9ba60bfbd39bd7b8420ccca6cd61d4257213343540bde18","1356bf7ab825b7399207176fa0a2b03f33c8cb9391cd60135e05f9fda588d0f2","e1a11c37cab726e458022428c8a40370d0f7322029a49191f5840628772e0688","68bc6f3a7fe9068c264e4d1d3dbcbd6e98a333f16d36445d6eebff97da1fbf07","e139412d2a649340874a58efca3d0f37e518bdab0089093d8b301af9edb6543c","975f808a8556a25e65681fa1955e855600c4f1d50c6a490b813bf03f42ca175d","0faa3e530e154d11441ea2c03b1eca9394c9a1a875a6315baea0f885780381ba","6790f57cd57ce66495fa0b1559e0f0d39d2f4d8509e8362e47400c468343a3da","48a23c7a673109a5d33aa35bcd0654c079bf21d40d910d19286c1ce46dd792e4","f1e761ef52081627909872fdfd0d3ce936f99eefa5792622fb1e88631d73510e","6d834a0bd03b93e548e435080d7b10ea9ff268573764322f784da87c3ee194b3","beecdf46472746fcd46baaede770781602ce40191269a9d76bc3d9ef2db5dced","fd2dad32e827eebcdc5f522a448a9e99f5749b20c24d1ff95a954ebbd67903b9","0ff943c9aca006162fdfa3d99b9ad6dc279b5210f4c50e2de04c49e1a72560eb","f5362e1b5eca91bfe8dd8575c476a3a284b31aa4f51eb4861ed94252fd3f3a59","f7f2a64f011a4e3b173c70938b357016f3a6c9fc3a816a748803090af6c58378","62ccb3ef16c041a0dc9c2021a30744c48a9f019b8bfd03132331bedec3237a09","4f13bf490c91b60c06e9b869894eec33cbc427db15b510bb63f5382e17204f45","3a3403576dfbabd62c515e7e82d2c8458dda7b7aa53c5d905e78f1b167f4018d","deb6ab6ad55d95dc0ca4a85ed0e87acac05ed8bc7d2b7e9139005e5a3ec28e84","38ba246d6bd8cc9573344ed49c196322bba7c9343fb919c030acb9c6a60825fe","b628d68a55fc0afe7fac7b67da6279fb7d797cb73431202bb162075dd7a56451","cd9679fe6e79591362a827aa1f4562ffc288a973aa51f3d82c916b9dc8f140a3","b647446e24c1d6d39af2b729036273ae2e880e244e7bf6ef78048c865a75b5d6","b8d0337e7c02adb6e4670e825023bb5d3f64fed5c32f3fb20aaf38ad0897e900","78feedfc5ec7dc8d1f420acd958fd26d90163ccbc5115bcefd6ccef66d34720e","987c31f1dcfbcdf51debfb0040850bb139c80a70fd4f84b4d9c852ffe6b32a85","105131bb107d4baea010bf79fd9a752411f4f2e8099af603a63aacda8bb3fade","0113774efe534b35f29766bf579f53bd091f911d036e7014aece6cc1b4430de3","221a6dde3cd2a3bb25e173af998a7682e4f75aaf8ae471932b6cdb1cb494dd53","71df58ff77853948d0b7d80f59b8e0876415e89afbf4834aa33de76e9bcdbad7","8fd4070b09be2dc095f3a7d86819bb4dc69b2386ad469c052af57c48cfcac052","0278f107497b9f6f1a4b4013aab64dd3cd0b0e2541d354ae542261edccf86a21","97846611cae182cce624a776fd8f3075acbd478389d0efa68cb23fc54a2e9ac1","e7c4264903d98cb4970896c3267f9070fad11b3d562c0d7e7eb957175fabd44c","566bcf3906e6de1d3556074c84b8f5c90795948691635bcb52e2f477876386bf","6ebef5ea143ef9798d3d91f8561629d20805a4d6c0f020b99a08d1efd041c9fd","f508bdb5c1b03bfb6e9d4091713d84d0f3b34854731c0466fb3bf2c91b3e3665","d005c633ce2c69d3f61e543846affa5195c73aba154ae915f7d112f55d790d23","745e498f9e1cd1e3e50d49d12f7abd4cabe4d9e6987fffa3f3999abf90112002","4db035acb46dcd38233ab3f790e0d6d92aeb4a9667925f2fac85059d254d3795","8dd9d67f5019aa58831657b98b7569a843653d08e4f896627aec494af22c3e8b","897fd79c7be405305029c2fc7186e06304fbd634335eb07bb2610c4a5c4db4c6","dd42165d3fd16543be61f37c218ef75ab005363c74ff58336d23556e1d3299a5","b14b4cfb2a90b5c13afb263116f71e2ed9c3967189a5bed8ebb402d9accd6891","566ccae2e9ee4afa68b446055165d066881d0e1f39d9b43839ccfcc0ba927dd0","10944007773220b95ae6c98527f31b537b65cbb0fc2a51ed7dcd67b38e9b3f56","af192832cd1bc7464e9e0f32d1f1db7ed7348ac77d05a8d62b20445914fed9b3","0a70899cd45ca4a7b666052c3d6d1a3b4f045025bbdb311b21cfe8cb41fb0556","465667bf849163d310ad0fa08ff5f5f05b4178a551cf6a44b3e752091df0967d","d0debb45d80b0ed9dc221f4374d45d288529fcac1858edd7fcf8f6d7d616904e","4c991d9761d6170ce6f94b626cb28304ff29d1cec1be7a966b17ae43b6279dea","3e67b2739b988eddf5e17e53f62cb3bafe807a6a5de9ce67b49635dbdacc37f1","a8ac9344d00d2d748ba5fcd7142c5682bb6cf3ba41c2bfb444b8e38916f4b051","d563dbde58ba347f82077a293eeab6802230a14e12022997a3354196bbca8fbf","12caa10fd4a5ae3de2d0fc67933e7ecad0d8a42a2a6afd665f2dea4cabf927d1","f8e81e6ee31e033e5b2ce72b6144bcec365682410a10f8fde190493bcfd32f11","30fb14b01d17486d46510e947dc50ead289287a777fdb7dbc4dd8eee85d0c704","afffc7b5af6bdf9291becf14b1607ae14865da1589deeddfc164bb926b183b44","0fdd75143f07c8f218245138b572c52de04590efe7538b120f7fcdf3d454271a","824cf6c39f87da0a4222808ee19f50a413da925341223f6ba5637bfc6d5499e3","f1d7224ea957096b4b5871a5dd3d0c62589e3542154699b67f7c192073c7af56","5f1defb769dd55b7e1719ae29c4ff9a98bcd81a2287858e0946511263098212e","5bd7465360065db2e07a97019a0cc7e90f7a9aea8258a06febed758e4a46bfdf","ff5f0a60b0d90f6437f4ee4e58c16e15bb2befcc82c265053d61c63678ee1db4","d7af3d4f5456e5d96703c1b039403be7bf355328bffdf90edc7731cc47036ac3","768d8868be14a919c15a8d6153221a76e2bdd622ba76d150b9ac1bcef7d7e044","e6a5fc660f6cae4a8b2a8fbd227b601dcb14f0b4d6c67fdfb477ac08265e9aa6","6575b7c5f279efeace68b94bee8a95b2f56f57774efb61399680f968a922e2cf","435d1c45b0c5fa088bc984866869d81ca7b7dbb5e0f57e1ebe0be57e49a46b24","18eed87c9ff4130989d98cd29458372a9b873fd88da99d081ac42ec32afa9719","24362a403c86979902dc0a2ba92aefcbb67cdf9898ef51b239204c193348e8ec","165b89fa113e70196f6c77c9d994c93a96f8e418a315f05f15901bcc08f1b2d1","1c14365c18e34c13f9c91d91656845282623f70fb32b9583591708809724da39","90ee0b672d98ea61bd5dee3cd2524a9b451d2b22ae6880bf9939c7dbd6c3319c","559ce466f92c06a636ea4dab84465cf0f00827f7744bec0702616d1e26127b0e","fe258e00994d076acccad980c0164c6fd99673a7fe36ac6bb17a467044e7c028","baa881c489662bf24c9471aac0065943fde98c7fbb9285edec34a57e5b6be5d5","0d157a305effc9c85f022c029376a241b47fc9cac6d05a2c39234d1dd60a0f0d","308b9f1da290ccdcb69b019a2b7ae942831259ed6295c5a1270e319963db033f","163b79a347e471823ad6073bc8e3fd627f57d2205e72fed12dcb986c0709d454","5b22b222a0009b2b3f39bb5cbd4ffc7f2ac5b30c76c923fd33fe059cb21dfcb5","8bbd56d8a0da2fa6c990061e3d2e75291b941b56661a398180da4862c1d6aa53","6ff0ec564c77d7d5deefbbee86424ddcf6572e8bdff6118c7a903aa0354d0e69","c9ef743a772bfd8ed390d969e93db36ae23b61e597264d34976a4049d92a2193","520a7788f1b19040a04a20a2f0666631eb8da4897e97396cbf02aca14eae593e","d1c5a9cbfd64c51cd58ade597ad1183b4f37c6c160fe207a3944777856f4164d","e46aa4d6c9a36b28d7914a4e9a914b847c2283cbfcee83fda51b397c70c95bf2","1e62106dc88f20cdcb86dbdff488a9465a4d443855871e4696d81485310c9f50","670f500699e096b3a80d793e7c4feb3a1efc8e7ef24ea9ce98d4316c7b318e9c","2260fb818a97fa09674b3f46cf66041ad659be0ee9c2149cdbf5f62a49fe2d71","5f4f2c522af7f7c3d7b925db33b0245cf0fd2019c07a4c78d1c92f3a74af1212","b19a4f7ffe16a4df319dc661d524971c07b5125e51d91ec57df79b04e407c61f","dcd02669431024a7f9687ca8186a60546e56c9e2314ce9df5b1a4157ed245a4a","69a6e23b934fbbbd5238f5665adf8bb5d849cc02cac31c63a295d2ee312d664a","fea7308ab5aa43f33552c50ce2adb78831010ebdb847768fb5f49c60ea995e4b","8c4a676449ad1230108d6464b010bdd874296a38cbdf580a8e495d75e34d9051","10c0672a5f5cc9eac4255f915b2ec5bf211e8f5514147567ef4c8606b563f860","15dc68569a71638a4b07940c3f36ce3facb8484237ae78ca43e08869abc37762","0a6d39b2eafbfeb5d607471c1c230687b95daedb282552695e777c6bd4bc1378","f63807fec81c70cd809bc30312ae28f094e710827d2884839008c15ced936480","56c5f7d7fc1559d311ae522d5685e7f3778d4df54503b0f2e1fd016d02958e87","56b473e7ee83871e92c4cf80bfa6e328d743c0036d182bf5493ba1797b07d592","b70569bf146f0f4a786d958ebcd2875c835a81129bb7b174f2608e6a96a8b69c","06e650a842429ebafb5d02d61882e492d412023b60dd494fdf181b4bf391ce9e","3624ab089e3ce0162873cc9e85d273025efcae063165937a06275a7e051305a9","1aa67b29785ad72136765d301321eeeb23f75e8637f841abbf7b87adb856afaa","8e4d734e871aef17c2157a6c1c84032cd4bb8daadfefcd415f92e818e472b2c4","379bb9c0f4563fc21dbf1e4c8a3ebac0ae064c18501819988eb022b633ed37d9","b0d998139fa74f610a3acc0918a507ce984776610025593677861883757e3fec","2a1c9ecba3f18fdc586c2707880f4500d7cb83fdaadd8773b741ccd39df709a2","1f12017688faa7f34c29404baf01e86b3d8fa9f77ea48635b190889b3826da27","13cb4faa6554172b04a253f979e620479de9b386349458696237177312c34f65","1c6e01418e11fa73d0690e7c7cf2fec5bd718f8341e5e368e6a156421b8b5319","139bc4c237f0860eb9ed1b15f8ed8923d4c4963e94352f0af6bcf64addfd22f2","4d10da70bbf669e28a9f814c9cbc59bff62e935e9ad9d2de9d300641fca894ce","bf5ac131a9558c8ac133ca3a3c4c0cecb1a1bad081b9aa3d9c263103e73760d1","8174aedeb7b9cdda31d94f3438d0d2d075ed0d18f37e6cda05b541b5c18c80de","fb482a3e028f013055831fb10bdb5ca0388833acc6c504e3f741db4c5f6f9ea2","6403abe47acf121b6e090109177a0755e4c4c0fb03baf9b5a6cd041292c189ac","8a1f24f433e26406ac376f6535b5f7e968ed6da116e9bf6bd1117b0932f05c78","2a0beaa795101420dcdfe4b4b2d0105bdc2c1d40d9b743035b47f04f229e3e5d","1344fac51e9ad99d8c0d7978dda66d03de7cdfdb18aa63d7a05d0145db57f361","5810848ac709945bb16a3d7b833ed7cce152d19680d6177d9908581d5a64cc4d","9b79ace6862a89b7f4b3e8dbcc962386ee2556df22e67ec8aed31d007b05cb80","773e06f4cd5e126103687c0116cf7ad75f43a6c51c31e571407b7cfba8e642e1","97b6e08eec2605709342ec712a0b2b688d36ff7ff8b00b8ffbeba77c0dec304f","92b07fceea3ac7e116c71edc72825782655f8b9a4fd6ff7bcbafd9eefacaaef7","85baeff0c78c74c1203d61c881b43cc48ac8f8716cd7425be57951730323cd28","7907a7c9f5ffbeee0607cfd0ccd18489e7d00635e68d88870589ede7f56897e5","80f074c32f9653738da87c4871590801f09bf60bf17ecc36800a496183aa18c1","f7b81f2ec336ecb714e811b442266ea7a67a74ba86ee74420e6f24d504b636de","a3199284e01757686989c94224d00d55e80de5123649bfbbcb3fc1422079d286","ad70d45af3ad7fcaf5c0cde58b22afacf0186559e13dddcb8659bb502b9e1c03","21cac97e0c7a65765873a4f732b69312e0588073c3663816f38ef5e62f0d97dc","18115551aed19b7b225e4f58f57dcaf301e353e9abaf5eeead16650574b1c524","e36f77803c8249e4765b6b60a5b5e3b08e3db30c2d1ed9ae7507c98c7fd97f53","0dc2ab0460d1a972d51a464ca381eaa6ef763f658ea872488d15fd42c984496f","d875a023a86a710e4c177f31f6d7857c2ed0781cd8d46bb419db6085b054b89f","f64858bf313f8cd6fb7a5ff05f3146d9ac6a0ad475a043d2de3afb2be0b33f16","5c8f5a93edc8438d011f42e9de5cab4ce45992357a64b3db472790cbc1053e9a","a1b427ebca0123fd8af06621d4b3e0ed01bfe7b8ed93fc5ae8a33e8a514502d9","2e32abdf392801645e47ae3f491411b57bfc5c5583d8b3fb02d841b7fe781966","c15d80428a18214836a8b1f0c5f846fdd48a30e01572e2292178a8329fc794cb","58d2e75adb63fa2dbfa0ab74d43fdac2737af5c8389686847cb342435e7dbf6d","50eaa51caa1805f97354e6c0c7e1964f884143d1a59be2945b22b67943c0ccc6","eab057dce7df178878bb900407ae13064c3fb9551c0036fce043d1ad1ce8f87c","4776c729e7976d8a8a2705783eec52fdd08891c3cadc6a76c71c0917e8edd42b","0b9d343e4f3bc88203977df6ea536c118ae55deacffff633e06c8b3178df3711","24510ec25dd3d0278bb20bf2f4b5dd8758871d19f0f94e089ef5980e9b8d2d1f","8f0df96987e3d90fb27b68ab6dd08efff8935023475199c99b107d5cfa8dce22","e28944a34aaab96fce9a610aaeb09ed24f3c21482dfd58bec4cb760d74389d26","c9c02b929c9c8a9079eaf38d9a92ca46c6c4dd6aa68a6d21be9f4bcce7e7d426","79907a55907e5cc427f1e2a89a4d04963f082fc8b0029a72ec3384593c22a635","ea56afab78bfc0f908dd4b733e00552c7d95c5f8d2a53f298f588d6ce4513338","71f4830fe6053db597d7744386d7fc68f39de1289e80e0248d1099394b609b39","ac1ee8cc4eed059e14208b529f249161f2ee63f102cb6d015dc6f9fff5feba42","1db17c48f09ccfd32f29112a6445202a4a08960b719870345e30c2202bf7d24d","f2b2040d25b021c1568cedf791f525a626354028c571947117e1976e0314d060","0ed025f603d00444c64387e4f236973aada5394047c3ef41af0d141b9107866d","54c67152fcee97ed62a4b82474bae5d66b9fabaafa71e470ab03894cbb70b96e","dbe7935ea5fcbdfed887a104b8bdfdb6681a8160494ae9996280cc569f3a2679","75ac655e2b7259063d292db457754a424f7b621d6207b25c0d4430c396c5508d","5339c66996c4ab1e0a03ffa1918615e054980c95422d81a3f4b72783d9056092","12fb6aa364bca812189c874cd8eac0211e00e8140f215843c1d7d17c11e6c092","e99c39cbb663d787c6f781bf44abdc0a1cbfad3621336f3f0649e2b1fec5a397","b55915ead23913f9e46884dc40a6c396f9e5801d3d213db99219051c686d81a3","3ae0b172ca2fe7ec27df2fa9e9ecff75d14525a2b3e238219f6ce2771664e2a9","97faf90cf7dfc81ec4e76dfaffe358108150ffebaa3bd77ddd657c32d3ded0aa","5d3d94f24e69cc5ec6dfb252f9f3745d2f43df0cdc050c63855042b7b5ec46db","d5d9f91fd5aa8edcc6d4f9cc5a025a4becb766790ab11b5b49cd3e829849c0e1","a1ec6b71f4b144506575728928b602ec6c9a2de2e265bdaccdb36aef50a7cfec","33ef846587548b933265f5d712bc7af90b0bb011bd71369c0c194114029435ee","dea567ab1959f7dc45e855548828d4ce4c51d7b42eff4a765a1bfdf6c4766cf3","4a06a04367a8fe45c7f6d35067fb00c882221b0be57fa57ad47ae577401afb82","01ef87a7c91ff2d89fc2ac11a26fd640885d8e4f7efd3ddfc94848c2612fa4de","e7d9c6c9245f3732c2ae02a3930c17d581989cf9193c6f809fbc514470a9d284","0fefa55cdb7a8f05c9b67fa84bca112071345a94eba286631045487cab2a9307","c007cf0d693218223d2937ecd8e523cd6f154ca5d438bbb34561e13c5c31ec0c","c9e07e32ec17606eafa793dc13accd131a6a9747a8cdd4ed7218dd743401a11e","57e2f3f1968c55199976906b828482d3afdcca0c6f7651d8a9a1a4497cfe9d20","fa6d3930898f70ba266c9ba6856572219ba0eda15fc0732b1b3c4abe3a6fcf21","f21ad1557b3fa9b25129bc1b4abf738177e252acf7d72b55f0fbd9121e4c3c22","c50358af2805f257afb1b917e372394436e8d33f64026f2bc485127442640431","d1a1827d4e17e50aa6c3fa0e28488ff620ccb1413e296e4866ada34ddd2e1a34","f9044d2b61fc036c0c97254c93336d03925f3238fb04572fe5ce435213e0cb37","ebfb35572126c4f6fc1061712458595390b41f39e40d9ff9888b9f0894b8ca3b","d62d304c126fd84024494c4ca4ad17425681ccbad204464e94c7c30be91c8644","e319e79ae53da862254f79276b8d7895b4440ae3b6fef3a57a36dffc6e20164d","d958dd91e78f2a430f5d4fb8cdf26feaf82a752c61dc9dff87a6bfca7e1b984e","9f22d186da68afc46ef8f75025505c1a0249a6fcfe9ebf45768647c2ab3f5564","cd804d646edd6b62da12058f343419fda4684f1a29971b1e2db49301bc2f496e","3027a10d34e5d71d5e380d0d623d4b7941de3fcb6206328fedb8a8c330885672","5a5aefb182e01f6e6c6453530f9a7ef0cf2c570d7257788e56f061210d894c84","30cb37eb2a93fbc5b562d47ef2429feaf10d2c26ae0d9372dece4b8363359a89","d76e865c6895bc67315831712d114009a3fd7854cced9bb78ef17aad73481d8c","693d7f67499c8b7d55586649557b29be79834201131eea970bad2c4920a5618c","78b6da3256b404b4952a6b83ee24ac4ef15ab6556e28e9864b067b91a368668c","2e73e6b4f2cf14890af95d1f3cf572490a563f56fdca8eaeaf985ce7dac2508d","afb69165fcee7110d1b3a8c199e9a8b1c78b459d67e29c5b17f470dc6081dea5","cdbb1974c1fe46e202737bf733c77586a59c0dc94ed32a47d12bc7befb4b2baa","d6612f4acf12575efdab5f804bcfb78077ea561e206dc8dda813bef8849ca1b5","f1ccff28a639cfe4b2390362a9d59a76ff67851411909d648ce41c16cda98ddb","7335d492ee361daaa5592a188da30fcdcc8e7a57d1050b20e61840cbbe106a69","4616b3d5d10a9c43f3008aa782b93dc1855b7e0542d1c458a6c424785cf2e57d","e35481a225859f644553e9b75f8ddc85b6daa92d8f04d20fdbccd52b7ad9a996","34685d007ed759d6b663bc67b02866a289b4a52278403c849ee3aa269c1f6756","a715e540a853bf114fe48b86c761479d7b93bf53acd97ea585409a4d823104d2","815e8713542f886f623f67c94a14b38d95d725df6a032fe0424f8c0f2d49efa0","5df7e536cd2f01edfaae3c4c27c52e2920552270d1d481e298056931673c03c6","e5ddbc1c6d84a67a50365538a4c8c65059bfc67fd7377df4deac719ba3314689","ee879547ddb4d532c3b0b41bc6aaec4cb121df3ed3afedafeb0547d75f570d0b","c34c8e46f6b861964950ad8bab8141c00a99b0e224731e9cae8eac9841038b0d","b6fd8aa9546585121c951153df70783b5e323278d18c3047b86f285bbe0f1816","3b6b07bb63056487131edd2998680f76f4a7fe632ee919aba29eb648bc1b131d","49611515bc2071f7083100dd09074c0970de4a7c82520c263d06e0bd3ce56c2a","12ea3198151a3d9d6a22f2a9ea10404119a1f118033776d49c75821ad62b6537","6a3d141302091846066373135732cc99d600fe2327a9c07519dd0a241bf0ad37","e4815ec67a00afa2160b8011df20dd5326a145bfb2fb6891c6b2c8599deee969","7ec0a8137df767410c0343ee48b925142c5dae5a39219cfc6a1a17b1897a2b6b","401440be29b9f0ef6a2193fbeb9bed197749882406dda32c6160d71cddc68577","2e8a0911862ccffe72d6b43bc93a19d8d5c73596246e2527af1cf456c335a87e","0c647cad561a44d55b4a47dfb48f45d3e4879e1ddb0ef91315e896e6ddfeb3b3","e5500dbc5a96e6d8b5a20a3788ddc8a152607df38f338ec36a1f4820e613e888","5b8396c8f62884dc9c1b243aaabffd7461a0d9d21a063af880e4a6f30371e3d0","566860eef71e754ed9f714728f1c7665d323a7d29b131a92fd14899a40e4411a","3d0fab6cbda0c83eef01770de53fd7af42498d0ef81490f627c3d5ed94daf1b2","87d76acec9bb2793e2430759c7fb32c72587407c65fe4753d7ac8d055053dad8","49f80c3efa98cb1b4163be73ac153b5e6cb5d730f499ff3a36c2fc21041544fa","bb00e2a69102bf3d04dc5f0df9a73144046b9cbed5ee45e9d86d349816b53883","46f461873d99bf36ef297c2274504a8d121f41c1103885d6c4c354949f7f7654","f0e361d050314d7c2d0e5cb5d4c95c280e8c967c6550471e42bfe62b1f8a4d86","e57af8f13275dc08fae352ed4962ca4a1468e74494b94a7978348445648ce5ef","c779367e528acaab1e052a1f9109db67336e2854127cd89e7b79f3520d30c81b","59e8cb39dec78c8a868441abdcdcc5f4ccb194a13a4b6ee6bb04d8685f5a7d22","086d5430f1d53bc31d1881136f34ce006ed8e52cdcee99ffdad946367e98ae3d","ab94aa45e0bdd1d19aa1f5f1bbc89276587907a1efb4662edaa9400bd196cbb4","a9bdd24b8be123598af3d677b345afa26f0f05f052ee2eb1281f9525393853d1","05ed5eb507a2982403a0ac4f6cbb87fd7389f8776ab1735cc5c7bfd8f4f566ed","6fba8e78423e19ab9028f964a7be1914e9f8967efadf80e184b98fd8ecdf9834","b2818f39c68ef6d6e96bcbaa4b7e99d855b9dee0937ffb55ba355548f280b490","76fa87b70d430409a6fe2f902ea78f4b36cc8aa4be5527d540170300e3dce5ef","45ebaecb3d6294c2b26acf72873710a91ad84e8ff98c7c8b34a85e958e90b1d9","ca6f3ae8a46c282b5dc07932c23105586991de63a0503dae9bd87fb853f27203","b671f216d2fa5cd46d45b02622b3e26fa592b57aca8699713a8daa004e033534","0ec948795f27f4bd1a244e21895348be31fcd96699d34c46126bf9c94b22256e","c1c1f7712da36a0f5ced1d04a15f345f1921e4d18828f7cef2849620d6464c74","bcf87b76e594b73504ec9386bd9a31a36c44b46b59dd0a074bca7dd364a2fcf3","6f2d7584516afec033ed0e427d736255aa71c6d23d83349e774b2ef78a36f037","4f83a615451a3dd22022c07f35a208011d555a028b678157e4f1066754bd0fda","bc4f6f2dd672bcd1a14cc05fca217f4c351928662d14a44ab02d655f391afff1","51cc03488c7aa167e1dcddc8756d83f9cbac5ef88644a0b824445fa52016f8cb","ad40a8d5e48ceab9f07a47b7e1aeb030e3d1daf6be1920b099ba0049a0941e01","10a247bb6d8e63ab87bce7c95745fefea6d327e8a05acda2ff6bcd28939477d1","fea01dd77aa8b3c4b8a20fa40162c475390b2651735ce6178ab3ef36ad560b43","2b8cc6363194e53f931138d7164fecf4d9531a5e2ec95b8420d01caaae94b464","bc47075c49bdfa05a538c529f185330caba26553ace0a43da6f6b08c9e353e67","146c5aa5091975a99bd0724a4c502893619b2881a7b57fc1c236ce39cff890ee","0cfabe5fa0cd50ac2bcbf83110d4ba036117a141f55175f33fba2cb9a92ea0be","e8a900dbcd60d9755bb59f2bfb07229b8377abe9390915f41b255fee44f543de","c2aefdbfde808ad73e3ff7a14466893c1f6b8c3af1c3698544821fcec1df7fe8","09fd5b0b18ed789821075fde3fcc2954ce99f49a53ced175c4864cddc3b8c588","1a1f3d5ac848585ccb4b17958b8d1c3c533af15887ce19a00dc037fc6f26544b","95573068c3b6de710f49dece3d3b98f91d5f95ab744f9c2209eb9fdcef37b4db","b85ee1d07a2081c8fccfd2809abb4625defa5e5ceed18695ade8cc30ece7c1d3","5eddba0e81a968f8dc3eb92bda15e091a238b9ba2e091fc9e073177564f022d9","ade7ab226920422a7254e0444ccc91fe67c9566c7643436fe8add8ec50cb3171","8f6c4f01bef77930250cfdd315b9539b3cb772038707c6e0140c9069510cf21d","19a5790a7c8ad2c76eee7673b421c2b678367ae041b8d4c0b7f739b7e8c235ab","5ed7713df717f7594d3f52baffb6dc895447b5e07368078098e7aaedf7456678","859e27ee7d43f665b6eabe342a7a4a8243792c2b547bf6d5ee5e2e6b5ce2d0c6","6bf0c597f41d0bd5761d4c43db22430bf634b7c8d47e54934ade9a4dd927b550","215b9d74543870dad1d06240611f127836165b533902d89a7e6c173e9ca73ab6","1d063dd4e3860ef7709a6cb642d91d384500153e9c809afef8b8d879db3cc8d5","9a0aa49dfb6fe3c31ee4dfd80a4b4dacc1d907b7f34f4138c71fb1b221f889cd","d4b3830df1d20757be6e7d9e3bec7f98e40c2d3562a4512810dc054bd85c4f66","39920ea3e7b80a3336dc7a18c3116b993a55ea97aaa67d93b9b8246428840ea3","77d9f020412d692971af3f23771220c8f9e99b3b0735fa05dd67c9f4788e4bcd","7cdfa875851b848d7a36718a96f1f9eccaf277132063d6fb25c9f1490f3efb48","49e6131431431443be2c993e0ab3c90197c018bea803311971c9fc84a06bd73f","c43d72633c4c4af17c66e24bbfb31382e24f3f5664300e8eec22835de38ab888","8f8168b38ac02db0582258fc22dccc82be00b45bf936a97407bee9010cee96b6","33a35cdf30e831945608828974ff3f606ae490f7089aa3ae9d96f7234b05f516","09011c241b948466cecdae6a6fe33333d100dbc4f9395686984650caeabbd613","7f75720e2574d83b8f833099bf3c6beae90c39b27a2917b0fda409c39862519d","054c9d3ebd86ce465cb8f79199486609ea693fcae8bc82b34a2ec2952caed5b6","085567a1173c9dfd10c6bd4a0ab8ad51510fa671ca17836fda5b6cb6ac50a9cf","3bd8ed3cff83db2db449b8bba108da74d25cb85fabe99e67a171ca3bf276f0e8","f04ce0b1f25dff8d6e06c6355a7bfa89524306f3ac45d8b7beaaecafcdcfaab6","737bd522107af583a7bffc4f0b2b843b969ef8c696b9c8799bc439d228f27f25","a46d6a94f3ac03108763882b3f19963a9735321924a2e7f22d885aa65348725a","08bf58014cd825a79664c85c76e83345f2f304f93387a3431aaddb4ce2ce75e5","930ce1940ef1590eef7fc4916b9b554b743516e2a4a68e57c8f1b3173a49c12a","6acc754e3328c63a4784b3b72642bbc19b9b4866c934edce041bf4e38b9f6269","9d288afa2ebc626bffafc66c4b30c76b482624d5903ee3cb1b2ab4e4d02b68cc","b82d3acaa19391e3aa8ca426f37f36d29dca575c869f14b493263bc09cacf643","a7c5531248775c7f86253a44d62fb84d83e7317b1147cb1a927d7a0adb17e20c","aebeaa5081203b3914acb85e540e62c22609ddcd57ebcadb5dd39a360f61fa12","b13b0c182ed77d1550d0461f51d2d8106adb27114ffab8be45a2276391466431","c3d48a4b423320dd9959ba38a86c89a01f11a6b195ddd7cded9acfaab48e3535","5918286d8f7d4506e0a50fcd91782390532e2de3a76b3c8840de8ca9b7cb9f36","07e06affbf8317bf5113755bb9759bb59820ab83a25a2508806ca723a3f9ff4a","846f84f30fd8b1ce80f4df4d85983116ff3857b7dc73cc10578d7f1190173d56","751e83fb28c8edf456147da2244e75d293a72b841bfa7d9416d74fef29fcf395","5f986f6d5eb2be5eeb3f0efb05a6e0a54862c68ef8c4b0d13f729c72781547c6","6864ea78760806e1a8339a0abff98cb87788c5e50cd4c6baf1df9a9f62ef73f3","ce97a50f2e24a572354db1ff266f689cecac3884de435ed6d2eb38b5171560fe","27ef948be4e6350b4ab239c8d078d22b70544a3b72ba33b4d2b491a59762ce84","6716eabcf87f6eccdddae398ab3d498e045971f34a096668ef6e640f5cf76c57","6e50a2ee76f48e5b3c4fcd8ba81c5c87530eb736f2df8ea4274d225cd31094d6","750e6af6318d24678ad1f119aa57bfa36daf3194ce927be5b20e81a3557fdb8a","517833968aad2055ede73bdfd193d3228ec89d088657b0be03d607a523acbce9","aed3e5485eae37555d7d9c15862db176bb7d92c4efceb2eabb39465cd988a5a9","345751ad37c9b73f590a4dca3ae92bbd694df48152012fdb1f72ed822c1e2138","f3971640206b12c5bf238d8499cc79c98288e0279ae105098d8814ea31111d2d","903ee2d0ab9fc962a556c47f8d1352f6e6eec0a543936b8964e00c2e757ff022","b890df839e1820a55e4410265b7af0e8216a3ac3d4738bd9a3f42645f15ed442","c217d14d98d0b10a106d6d164edfbef3ee2be1e83d242ec10f574bb7bbdba177","1adce0070b0b39246f6081b92f41b8db9e55e17e05b0d881d35f0cbf2c0218be","4656d5c0c74c4641ff1950e7607f343a93b6391311e478d582de6b94947de7ce","c2558de0c6201df22f8f31201910b255f9a8f562e8fc0cf69cde01a222298edd","d59805c3838546b4779cb40c23dbd5bf5ab754478cd4393f254e782675f9de17","a6da14ebc16c7d4dcd367d50368b6e4d16e68ed47d3dc5fcd8d9b13ab1c361e4","a2d6f9eb477d5f280af57afef0361b75d6020ac60b4e74d4a8dca7a3fce64fbb","e39f422f97b4e0a3665b63ab8e0894a74e57670066af63b2e39e650e6bbc89dd","129304ccc0bdd45f3054d26d398753dbef2c25ef7730892dcce764d6fbdecdd5","4448efd1aeb25d231411abea6002d866e8f440611897e2f02aa3abf76bf7b832","d575c1373fbcb4e70b96ca5b442fa7919a19d741e02b6a499d72ae36383c3ae1","5dcc86a9f0caf0ab6adeb96dfb362af5267aa227c046c9e9256aab0ad76dba0b","ff9fd979d07f47a104a7091ffbd988fad7409215aba3e3d1a0f22830e05afa19","886700ee71e875a46c424151b52dfff134f47eb20fbaa31f0d1c1ad67700d0fa","e4fe47901d3c6bfe135041ab96eec65685d08d9a03a689cc9be5d9164cc8b640","3dbb0ca876ae79f56b18b55eb402b84e547d56c5c0d5bbb0b3221fbbcf995865","ca912ee4c4d2f657de6240dcfe270944d9f3c2a8e7f6a2714695dbd1defcc97d","ce0fa83311f69ad736e75f4d6623ab24cec219a9be35370d73735d032ca2078b","b5d123149724d09fd0da145b4e49ba649ba9880ee4d9b7ea0cecec34c82a99b5","bd10d6f807efd5b75b1f0a5776507afd0800db241ef56dc11d3dd50a00de2201","d2fce71da86a5a88c6e969935db56fdfeaf2e8eaac5f08f695775bb76ee5a2a5","99fe7e5e74c78fca557638ee20a225d8402eb63edeea8713ac4148e3dbf0b9af","be3c409d346a2c1f92088d99e25e10608ecb4b6ca59c589ef2cac49df757fbb1","9b9e608228f8ee21ec5f02c1f222dd6fc3f92ba6fbd4d7ad93af843e1ef2b3b7","44debafc50fe83bd8a10790df318b3e857343199cdbff3d9af400a3c8014e8d4","af50cc023a74d36178248070a6ea72d42e230839bd5f450beb298b469fa7864f","6b786a483f75e2fa2d7bd9bff2b307887d750bc5821245951611dfb37364ab03","96d383fc40dc2d3604ad65b3c498b77de561ef0f555939aa76345deb9a93e51c","d7e060934e42c03660b3717ba4ada322c70439caa3e0f91e7156338db98c3310","3189a7f153feedcbf7094394e3fb28f9e9dedba6dc72887b500a681a663e898f","ecdd0cdcd83d10afd1dbc3b4459bfa9b6b78eab5213b2d5ef9914613677dd39c","cabfd3c3abd8bfc01ea9b36ffab025ea3ee5cd795ac7c2bf04f259ee08c48baf","f1c902134c42acac650c32d5e922a14140b89e2fc5372b2a735942289ade6ffa","8691c63eeffd3f313941827b382db27ed278b2e6ad877462e6310ad6ee6c9f88","e4c5eaa3a3d01d054c628744c3c0f3fa504cfa8978df6b458cfc1f8a08123acc","d08150164eb4cfaa67bd6df24f0909a157035f91213a0e9e54f4fce6e1f71bef","2b55e268a6739b5e3c40e15e76cd79dc55e75a7d7af8c84c36fcff55c823c5f6","8c3cdcc7949cc600f188fab300a117b1dbaff0bbdfca5e2ea910bbdeb9e63f87","c91930b7607e995516ba9535a81079fd5a9c34191d577696e70ff2deb8742bc6","b6aaf056916c95c779db17d354eb6457106bea4aa0450ab0871e7fbe860df0d7","1c9cd7b206e69061d481e022b4b1c21915a6712dd14fc811196f92ecf17b332d","3344dd2be44c4aa4aa3bb5a9d9f200a0836a022c2a0ebd9749ade201fcfb449b","d1e06f4a808e489f4c1317edff6f6422e4df8c1f81aa4499cf7d27898f9a5bc6","c79973ea23dffaff9c53a5644bc12e770a1b0d293f6f14ec0f6287a7a0e94f22","cec7ffdb7b6219bc4450b9065f70f93ec9b64f7ada6212f740d29ae41920cc76","e3fbfb4824821b17f225fc27e79af190955a17054ec8229233cc08357f6e49fd","0dd770a2b84d2df885bc9dafc562aae8b97ee41da57ed5bbf914fdfbce28e232","25b2b90aea2a7e68207aaf3f277c41bc41a18ed7431651e05eea9edf0757474d","943fc78847277e47e7cb07baf01251ad44bc0f4a541b6cce6a3edb74d6da2fa9","6fb1704d097eee874e6b43211379151fd89f4c7ad109fce24eefc68d49245428","557daa57aadf48b198fa5c638cd7badb54e7c3fe8a8b6091d0bba40bb59d7c56","b32ee37548b05d40dab6ca4be65cedb0e52b782b7a42d304a553971e747d00f2","e1ab659d7f653aa35fa9e1bc2e6277241f00c657e42ce0f4dc4a073d9037600f","6891bad228837554259a37283a88480f50a6375dbd4e2c700826c63eeca1f681","e50987b57e7d08e58ac770103c4aea333042e5605e00913f704b5223facd769f","6d6501cb12b08e320ae0e4bfd55e02d8dcc5214ee269916952e42df757ccefb0","bba5c532b1236271fdab0e2b756888e36ecd2991f1ec19ce469382b16b542b14","52a3440df1e5efa6795315899d9c57e6e5f13ebd574d4d935ac1efeabd50d6d7","b037a5fa85ce0d6da24079710b3a42c7fcea2046f3681b7f5fc23e9ffa06ae0a","3449d7efc198372e15db8e1e9de42511103e14903feaadde6a98271018fe6d00","981e92956cfdb9694cbe976f0effb9cfa49312c0a0e497a6e1662a3ddd4a6c05","80a334e9bfd27cd239a5d5f4232cfae4f7f2a115247b0300f2156e5b012fc617","acaba31d2796372fe7fdde1b6343eba80a8c4386f11f930f2a2ba8d98825d003","801eeafd5b8a77bc6c4ebb97795584f905ac7bf2d4ce8cd1eb657e6afaff2e3d","d8ad7dc258b2bbf4215a34b944f86c8dce7fcc8091083ef63f6ab2137399550d","9ff3ec55bd360e919d69a84fe14f7d513f785beda81e0069306215f45a31bc2e","230401ce3e710d71b1220fb1a1d3ac93f7817da7a0e4f18da39e4459bcbfc827","a2a1f3d6fdf7836d7be2ff5d7e663a9233577e758aa559c4769e205e07e337c6","b69b53e5da99d02cdf9cb0372f41da0d7c6274563b16337431f8fd0fc2692931","e3beb41251aafaf73a0e96680c25e7843d5412c22b1c0f47f67cb0dfc131c5bf","84d891f800b0541a091e8bfa8aff91da213e5f73d45e59bedfe4dcb5c0025264","6d49587d0a0713dbc741b0559661491bf4ff43edf44515e62a6c2aac28468cdb","fab486454f20f4a8f236b053cf6c14ad16ec23c1a7555594507ef9c86357f8b0","ea87d83bc368c75157fd9157696dcf0dde618705beed40f59d7405668b4bb098","5bc2bd7c380c107b9df4d0709a099bf01fbe0b7d1c09308b378127d6039356cd","42bc026eb38ac962691e65ca5bc2930cda4a4c625d14544c776cc261ab2ecf05","d846efa93adeddbe8ec106aab6c70b347a09a3a0d3c0dc4ab4a44c9daef83173","a64fffc1712c4fe4125d39707aba38e71387cf72202f1cd28218bdb81be965a5","321e361022b67885cf01a8bc23ae6ee42d41271415d9224a47663e191805ef4c","86de0f89aec0486b0ede4a49fd51dfa8b009678a7038afb544fedf6e4c479048","882b548f1f03d483fe94fc803f1462cc64a87e375ff5aea23752797aa02f4be9","782a1bf0822a6cb82c138a7bf64b70971c48913a7194c7718b215a98f0598e0d","ca8873d6b29bdbaeec261c411f9a830f4d0f9b97b15a89822584abd9787246b0","efdbb0e63f1fd6741bb73c0b6d2e75c92a312db476b78d6f06f08918275e0865","3a8a9b70c8646fdc8ae18be4a801f72e1319dcdf350356159ad84a152c2337e5","ff16d8dfd986ecce00143709102b67c2d675947753db186f353ffc9a91f9f7eb","a0b92f9e6dfdaa212f2176b8a3f3c46a22bc66cbb578e49201c91416694467b4","51df69b03968d6dc412fa35b96a45c3a7b36f3f5c4de48f5b7c1aaf520df755e","4d039698dc11714a6f59f7cb87189582a3e4683011ac643d45ff86cd400b0f6e","4bf60ab566dac3bf56b36a8df5e786a7cd01f85d270c9bbdd12147467f5c181a","1f6df4028ff34ff2a9ec2e3f1cf4bd045a3ae798a149e2bf96df462257e60472","e1d36cb5b56cf3c6c11353b08fde78daa3ab6436216c51f8e1b95a1dad9be643","da1524b4bacf654bf47e2b14d86c00aa71e86b2c24625f7decf9d814c36c12ad","a92ae68530c4de3acdc717a0a0510fe7d4d8603fc00797bf7f2654d668150d1b","101c1de42b3251b4cb576c420305b78e988071ee32612c5b6340108342e9c6dd","cc79c58ad4b4c49e0ebeb4490e8a75991bd62641de371ce544d39bb7a4086058","ae333f3c024b37c1b8e2f19f5cf09629c38467d7214502f62ac479edcb140652","c8b736abbacc1560a7ad8975e65ad5443cea6dc295b693018bf48aa92834f476","42418e60ff1ab4c769d8b0bd32ebec913dbcf3b958b893bdcee754e7ebe0c467","aefcd2156bdbb441b3f169e70b6ac3225292ab9b5581fabcb27473dea87b3bda","a4418f2dc2155ebd922e971ae78aee764c01945853b7cbbd86965d159b5e5484","d25ebe7bf87ae71736d12b0e03d70e4116a63c716e65eca6d05b47c435eb4346","59fbd574dddf9f1d12051fbdca9f471705832cf5084a229d0112caf2cf982abc","b8f0e94f2d7e96cf4152a71f90fd1c284d5caec88fdf8350f3ec50e937770f7f","76b23764655275121d47fcffd91692a76fd14bb334e2f516f8b2ae83890952b8","8d757e0d22594abb31f6cd9212423baff5bbeac94db90915bbdbb14fe9f37267","9b7be5004c2ef2603ec2fa5c0facca55a47d0aab2674a15916c59543ab939b64","2774d9736fd23f1829743ee109304fc3542b270639f7b79e49ebc4ddbdcc2bb2","55cac2e211091fca1ad8e893eb374c349c1f987f55eabb60da86252d87b1791d","c2460942781a6a5dafd7cae6db3f2513b7708dccfb45371a46d611f64f8617ff","95401a5fb6c470027c4cad03945954eea1295cc2a567c6faa1af4061f1840f11","3dc097eea23527d5b803e2b931b61e58a526b9390aa73fc75bddd10a799c89a2","5b7dec52658b1ac6cb5d97b80b4b85069deb87837298a8ae6d56df6c95795795","84619fbbc893b8e0f02926447836507d4ade826d52e98f5d69403c7c1ba78482","51285b64a433694e09dae88e6155dd31b628ab2fcf64649820329ecb7c21f4aa","4386a75bccc389d967dc9817df4551556dabde61fc800c4084100b2df2f1b17c","e2ffa3ebc4c95367bf01d2ab86059199525166a2db234e473ed5ddad77c6f51c","28051eb3f5e3acf7be6b8f6d342a84926fb7829d06e689ee48f881a73056c68a","49643c6afc16843d5355471f2153a0ce8171a2f0b1bf87e6c99a5f3e90bca4dd","aa73a159c75292a6c3def765c067af7dc45929d69ce35e2fab3acd25dd1e82bf","c4a3f3bf171364f2f3cc144ebbdb24ac123e22ef7a412b15cfb84bc4ad3a817f","8459d42f86e9c72fdb804cbb9abc8ca2d9402346b402b14b9a3894bfa61ca82f","93a91333f58914ef1cb085679cfb9836f48a709804b2e7005ff49ff7328ee975","84a83fa0d2ef3379c9546246072d4015912a61427c44935c82c5eccc432597a6","e44e71462642a48cd2e75a2bce544849dd5bd1a44b9f4d68900414e1d4d82276","561ff2e98c45cfee46eaf623a27810b879930b01c3bc7c5ccdf1b05dc4ebfaa3","fb3bbb7475944122bdd67afe14a9b47bb95c9d6fbd9d7e0c3382cbe2490966df","dabcbbf3699bfb309f650e49667f949baf5365d2d67ae9154a72847add8d0ae4","6d48e9f857cfd9ace22faa183a72889432ef9f0b715db6617d49b7346c331b16","adac303788e379965cb778d50c01298261824a93e63c38833320e3b3f140dbb9","f66cae70ddbee6e1be34c4c7c12d2b76e8b139926bfa6e9705ca0ff0c2d836bf","befcfab99b8826113e68c2d32ea0f49b6f41edc98b12ef63cf421f6dfe33dc01","41b3021df1781cae86264626bf55e75904d80e111ae7afeefd37c31509fbc119","8c5fd41ea2666f9b100b14cb8a241b2969731d51fa7fce2fb19ca3724064cab7","5df4a2343da81ae236b19828c7b09d34c32c5c387944b5448983f056c1fc98fd","34e99c06d75aa417352aa11c5ef585445bf1d705ea77156e83238a4ebf6f2350","08f9df823ea1eef484f9e4425aebf0e4ec5cf689eaeddd3b7217834c4133a35b","0040535d517ba0fdf744b1d2a3c28205f19e102e8d0cd81a73a5a07853dcee73","d19d02a0939c6665e94576b854d33b251bd6859d982f3ced69e0486c574db052","d99de9b28490973ceb8be412dcd520679d5ac502908ffcac344c04e598c7f878","1281ae79b988e939bbc67d1037e656b75e9e977f117a6681fed9d90527958113","c37efcefd487ad2b3b76bcfb7bd5e0d431541277e72e680d9acf1ace19cd0d09","89440fc4d8f00e9eba860278a97bddc8cd59e499e74a40657ea261ecf8836c7f","800aa9e642e83b0341ac295f9c942bc802e02a03346b42b3b49f1af1955a04f7","634a9fb798c2eb738c51dac52d83e20a20821ef5dc7d263172db4a5e954bea73","b17e68fb6c2f1626ff27ddbe313f2d703b9d7b0f0511ceb0af86cdb68698d08b","fe724b663364ab72b863d13b86dcf93d1287b9ef08806650f2259fbbf6f07b10","d876928df5dbf57bd5c98d795914959829386871a9d72a4616177480815d5da2","28f417daf64a464b6344e3cea7fabedff3eb45186a8e21939908bec73c0bdf7c","b020de4de6175727ec0c0dd12e68140d554ca94038d1450f6b3bbf4a4a3dc04f","921f5851d93871726d834d2c28bb1de4c97ec0aae0a9b575c7f604bf80a6f18e","87a30b1440b17452559baf5d6b460443678cb782c4ad76a6b51f6938ab26e9d3","b06db7a9b0064d3b3d4ee75793ec0857c81e9c7b0d3df720e9ab16817ff0376e","34c6b100ac9d6b2b002d2b5ae0d1b81cf23f0487300c9a2236171585cb5cbfa0","835cb53160dd9b6aea5c1f37c4589c727ffbcabceb8eaf78ea3c2255b91dc500","1fb645eab375c3ad5bc2ca60c8a8296368c01a92888d06d728a5697a9abe92fe","8e0d816b5247c8798c1630fd49b8343e5b95ba89c5e28a8b30257fef70bb0b21","52358438a888bc1e0454a60dbf3987040414a7992ce90a1bbd45edd36ab26b70","0b3aa20fe87bf1bdba3be4bd31ad1dd6f5e0608509b20d7e6b714609ad93c180","b2dec7be2118ee3135364d62cf7d3bf0f105f2cd3b45b07ad6ae1a849565322e","8408b7db350ee736071387758491a381d7a36a54d4a830097a112479e1394bbe","40e96d0d034623de6e5419619988e42eca12bd84ca65a2b40f001a09c147b52a","369f7ae27865e85ffb832fe8bc15af9318e5427ef4570536d6322296ea6f082c","fd604a83280a5c97a7ad7c1913084f7ce24e791abac8ce80c99b8c0778197bef","57e7fc29e9b314f7cb5aef180080d33975a0c6feda848c162f7ce14f1eccfdbc","ea4e38133c086901e85c4cc4157867ea073295b1dffe09bfdfc7fdfa6be5f058","9ef6c17580b49c727040d374f662300b9970463fa67edb983b95e62e6f93a01e","21bf82f719013a99b2d1d6dbb4b7cf7279724b54a433154208c4337b80c55694","c4138859190063a45c88a5a488643e2114da8aa055c79ccfc640a5e2bfac5324","a27d7e479802b5f76cce88341d25a883b31b356d8bf910c6986ccdf6574cd026","1e7cfa06bc04cb04716ae62a4f6f30961abfc5b06adeb8df3c22b72e52207d62","419fa1b97b40423416730f9b3ec9cfb4309c9a59879c43ac9188edfa08876b63","a12520ae952ffeb2653d345d1c572771e64fa622917d73d7c76cfdf287be8717","15ed2c77e3ccf8b7c5dae12c3224ba2f4c1c5486dc2e934e9cf74ef4b33ad2d4","43add96dbb4aca0f56371046d177ca3696c4f1a5f80b7a8b455f4dda94041fb5","6d825438677f23f1971e02fa8decff0d5779730b162e6f273b7393e2a5613f2e","bf5e4b6b0566b45b4234c0297f3821231b89290bf4781243aca0581bfddc7c9e","57f44077b6b46b5e8253f42a83f6cae2c7d4f1b19ca97786ba4ba07c9f45d167","7a5fd45796dcdeebbac2a120122c531008d5af9fdc07598b0791e9c4955758c2","ccce903e6a466e6574a73a55c2895fb38869722bb5d989148b9a4211704612bf","706cd7077180c18b28a85133c504fd372eacacd7966b7242e8d4daccdc3aacd5","a8e986ee9c2eb931f658769fc3d597712b223a23c80102daf09f9a09ce4cb187","5f3631b41962884c91face2c38d3350962d9c4bf0261d2da482ef65f773b3d5c","4edcc8bf7e0c1e42d811b5e5815e18e558d602a479dbcd15b5fb7a982f006e82","56c72c59495726ca7e8501fa2198cd6444914b6a026eaa1d2f8ac634f41870fe","8a53018e1b6f32dd12b7f0c37647a45c5f2b52e21e56620c9d750c95e152a85c","97f1452d13603543ef67c26e8c24020024a886ae40f8751ceb8805ac42486ff9","a14811be0bc49f834902b547f9915e1798bf3caaf074c5a400540988b86d8063","2b0b72f8608c93587b1a0c9d491a680126a5d935aa555f2a6a9cf46009c9f665","01e4005b08df8c0b0e1c6a22fbd26bd2ec32af578c03c7902bed872c301a537d","0ae78a35ed8979195a28bc7d888c6d60c6914e8b0577a9a76745bd8ff80b728c","c7389fd45df49d0341cc3c71baee39251ef827afbd5404994ab02729052a28a6","678fd6c6269eb9ee56c7bb560284a81d59f76fce18e1a82432b9d86a1064ae41","3b7dc9d9555adb6a92ced486c245d264eedf80004211f89660748656e32d2edd","d8a0a6567df237f5afe255012accc18a8aeef69aea0f4ae3f126e831007d82a7","9d65b300746f570f1c31df0eda69b17b691ecab6ac3cc577f2c8b87490464e2e","215394f8b90ffd0ad5df6d8bd8b52c98bfb9e193527d9d07e0ebd0f9ebdad231","6782bf2223623d3f17613c1988fc5dc7612a099082b459899f24013a222fdc46","121145115381918f7d7d6c2ae0faf3bd46402e51bc52c691a9c34b8d7eee8c0d","f430202d67906b7493042a8e2249982bc70d1d9cf2ae5b1fda9c7d20a31c244b","661046fe64c6da41e7cf817a01074ed53837d07c5819e325f006a6fdd63ac935","fe966b777dfec28e5f0b0052b6f0bf31f9d6d6d000ea87a4d21c4c2d40c07fda","be6f177a148bc0e72afc4bd647243faeeb8702a449430787008720b89f9a702c","bfc0da7a8ab568f91e1e41277b0805d2d1072f29e9cd0bcb793182ac31b1831d","2b3fcc31bf6b5cbb2d72a300bb098b2df252a8d56118ff6833a57e1cfd9326ea","5214f6b1c29ab5f4428fc58e6d38b10c920d1713a9f27909ffe58cc503bc15f4","ad813cb01f472bcd2ac225370d9121b4752c1c2d167d18e3b2df63c4eb2e180b","608411901c1221b2ffc0e8b5b17df571a9176da21f0e5f77aeeb4846cbfeb646","c033153cd35f0e9e934f2f5d4150eaeaa6e8df7f97c2e147c8a47f491ddd75ac","aa90d19ea37ebb1ffaf3de06b00d6bf4ff7904aca05705d2dac50e0a8836e7ad","a9b30a5002583977646665b7fd100c590bc5300fba2fe8f1afe84c3aba664acb","045b259dad5cfcee84c0ccd8dd13a7c2d3531dfbee0adeea70acee7c1a2783d5","842f8396548670ac466b2c1bde766966e7a25bd190ac733490a6cf4c7146ffde","e3e2b412e2b50a05f6d6936f608665c65ee5bcf4980b8dd0b52d6791e613c6f7","bac437cc5a9c64112ee451b221b6ec8e6a286dc8ed205d83a996b7963526fb81","9754a202376a8ec5b0908373e2bbe55d91bef459ba5e677856e3452c1c36b7c3","28638bff4b6cb6dd6ad8029c7fc1f2596c6ca42438a68468c61d47cb2ee93dc7","1eef98ffdd1f4ae931f5a87796f171da06b27319e65f63e9395347cd773818c6","1592173d142066270a78afa12fc5d5f748c9a0b33aa9de6e73fa9faf73b1ac44","5ea594628373ba6f1bf675da43b142d423453921a0a1ec080562b2975261669f","9b620296e8bbb9dd9ca027c6330f810256777f5c2dfd0034fac0c8cf6d77fa8c","2a06fd1c23f52aa013e53e5f221d459951265d849e5eded55646332af6cc5acd","5078742fa54221768008fa0b859744160f8d9167f7ed667d7060459f90b0649c","388db7518440f93080001bbb762ecb26df6320dab0f61d562d27d0d64de56227","23361a1ef9cb92af251ec1d79e378eb939623b1d1bc50d61d3f1658785e08bb2","92b6fe98d24ecf059d7d69a7d6ed449910f831131a18ac80db6a398b3fc17bde","3146ce66cfa6b0e80b660c14cb2f53d7472d753cd35561ac86e601a60d0a00ee","8ded718d6f8624d48adb56de6c552ce0f9be0e8fbd73fb8e3d5d748b3dfcb558","4cddf36a2d2ef97212d10587a3520006f6e6638a0310d43237c7d5eea06798d3","735f1ee10cf4deb0c3666f213232f26377b6963d8a8287491c2899f51b468100","c50caf9461679a7c8a5d31df2c496d7eceab7f30d0d7564732b51780775f75d8","160bb07ad8fd0a2e88bc8627d4cad64a0f1b074c3854ae7ab0c9480d02dfed3a","9d51fbeb863f0a7c0da7adb1706e9290e5c7568b5475105f5c345d2eea8a87e7","1d76f56627d49f66e1a917c15e9e0515bf85d92cd0b8e0ac3301bcb48fe7b027","a26dc3089bd6332b90b19003cabfdc5a751279b289138ab19e32d7266895e2e9","ad010f3dc7f389895adbd2ad56db24ce24577260ba31ad24fc4f5510d5fa58ec","4354c25833357e598079163722eb01525c8aad774bf4ad0f3b9976dffe3e85e6","9acb5ae08db2fd69dffffa6929855524767cbe0388e8284f19f3cbcdec66e4c4","d0c3ac332a92961d07d4a2dfb9a5fb4814d5fd4f9fb174223fe85de4abc054f1","0f6eec2638c2e67317be6abcd5e8006576ec1d358723d922966200df4ee2617f","e3a6a5754d60ca155a9073b90b76a9a03d714ebd854ad7baf5a469e131be35b6","9bb45177a305c30863ee97b98becaddbe32ad3b7ff2ee1668ef3f4f05a47df59","6d7326b86f9db63b48847e4e2e05b46276ed2c67f2e6e2f8549566f44d85279a","bc487bdd8bf8e168b1512d14264c71e4af2d5df0118c8116d60d277ade440d28","b69e97430423cf4270000f824ee2fa867108dad714e21393dbbc505503d8c957","a0d459549d1289707fb63f7a4d8c4b12611dced0ef0eddcf2ea8d2be64045408","f81ba9ae5662fdf20ec935dd05baef7e4fef1543f4bab019f65f30149a9d7a9b","bc19f005a28bd047e7bf172664819ee8ff99580d61b8d85b849183cdad9d5b2b","fb427990465a84b09cd265cfbb958df9215dcad5ccc5e56e1567a049444e935d","e9710accce848d3b9fb1f1492f1ead3a507a1407c20e64fe066ab0c244e31d8c","000d14f4dffc518572c552f267f4fecf3e2adc4548f91c8458ebb5998182eb7c","eccfdf86de899ecb0ac83c44d606f97da6d4f9a270ab0e6cba8cd7f3173b08ae","8d2121ef089f38cadb4278df88257fee576ab067a82e5377720224d9b3fbbc8c","42f84143e5bdcd6690543c026aaf01f657ee547604c5bd33ec842576784e2ab6","a6f5ea16bce7a2d868600721f2306a362f338458a2bc4c5b0a3ca7b18462ee8a","fd16329aeca6858c4bbad4d9c296592c97856a276b6abaad17b60f73f2793b8e","5d0c401ff79d70afca19fe59def4e4f9e925b3015cbc61d416f53a41ba3da002","2241c2e14e1d4fb51020b6415b6a16cfae7a2c661f25223f8ca9f110888b700d","605429f7cd4ef42ac52c77b66007ba9d4db2e57028d82b7bd883af9f0662f9c0","218baeaa544de905da91d6078d37fcb0ac5469f589ee51446c3f4a2404791928","84414c52807c52c965a5b34d6c6624f75e726ce95fc6d8ea2d4eacd4dd4ff7cc","6b37daa93380dc0da8cffdfbd872edfe196708198bef0edbbe837f60f0901843","b265ab3b84ea36e296df96f5a68282af375ace1dfd0ecef1740d0b77d60e7f81","8f527cd635c80e586c8b66d506bf30ec3191cea290444b16387784233a01c5e1","5799c7aaa8c9d0bd967aba8787d55df6f9c1d467bf1379899122c666cfeffda9","06c9db1130f823f4bf6cfe3de47b6b3f2067c1cee6697323fd0b0d32ee3b4eb8","96f6d5e70f7bd6acce9c477b3280863e5272f7a03f34c21d6dff2509efa556ed","1675587e59b8ff2097c3a68dce078f796426b276e5717034140ed31b537ad981","bf0659d00631ebbcfc18a5ab9ea4547a1c298f417a2bb89d32e25000ecddc2e3","73e27b4c2edeebda48b76fe310b2201e3d373c8d63729a6f6be8e3ccb4e89bf8","e7ec6d115e26635782be44f734256080f5649bb6fa66a7ea00ddce38eaed1035","c992390ba9bdbaef23ec8d481c33bd9bfce99c58c66d95b23d020ae2853bc9fc","c63f35802c065746f7b174d4a84b85a24093464523b369516bbd070292ead7f6","260a6183bc0d10553fef759de32fb0e5dbb81645fb6b97acce1c62b3f424636a","0eb12aede72ae6ef22b8e8edba226c01474ef7ede3a0c11777320679a812f910","4d1488459d9de4951f49a7bde653584d8269a8e4caf5b665570ea3e3f3441d7b","1151ba49ee6bbcf180ce9cd5ca394fda8cab4fb8ba9f0e7d6079c1dd6c6abc9c","9fe4e9383b6effcb85662e1d3c6fb9c20e53bf6a5e658bb3a6cdef2368e04c78","fc69fcda0935ea7115ab8fdf0fe70c786eec4d38096534d19d81bb87e60d8585","27cc3b7cc2159c3d2770cad5a913740a1b5a8ea5f0b017f3b4a9a793872fbf27","734386eea0453b97c0dbf196f0b0bd46eef06bb2f1bb690d42cbaa33f227d55e","0a53601652a6fd6e14206a2b6bcacdd879945fd0523d68108703b3fa50b1a7e1","f05486c9b97c1a6f95e39b2c13dfb366c92f8dce21a4438898fdd2080c2aa735","0cf142dbf0261a7e4d3d4a4f95f4e34d034c854766aceea0d46bcec8da7e9209","a4f6b61ecedebd6af376fb9bb9752668d2c900c28707907437e54b5f4d93697b","5f29b083237a56891b19637f7a2381ef584b818f1533f182221de3ca505c1b5f","09dddac20a5d05be2d06b90931c5e66fb68ec7e48d1b58b5cf359b2b56ba5c23","0184a3b7894f01ad59d2d92deeffe1a35bb01beb8e92ed792f5c110667aa4b57","d9ca158d3b4b77ce5e7d448e910e37c85e0ea752c05e0cb82e841587b7f18e5d","5fee62c4af6206d2f87b09fd49997f0160919753e8da53bc085d039ce659415e","a167dd7011faaea77fee0feeaa7be6344153485806928a173be263f165a19eca","3aa703f04655fbad6cf6f0ab5df08f7cd2481fea527c8c0865dd35e038c5ddfe","efcfd8a19aa3b922d2f89512d849bc5737acafbf9e6405fc9f69e7cc8ffbba2c","ebf09c24912b8692561a0789a34448a2cdf593539b17954034a084b3126bdd9d","0e8b43268fbb0366a6c16c53df0053c5bdd8ce18e67753be8f26d1f6ba114ab7","16c74cb4fbbfbe0a419251240520082bc963e25925be1c3eb1fdc993a31d5ae4","7256ce3a7fe7c3ef1591ca7bd7bf72187e8a69ac1fb1b9a44c30f7bf9338a3d4","426df2a3117cdac794745e0a32ab0744d1c201b65ff378748faf35028c0d9b73","e2d9fc6ecf5c73861691b76932d58354bfbbffad73d83c36c6479c41b1838e78","b21ac69272e8326ee3dfb0eb320aed0b8f543ffd3d805435f1756cf2ff891ead","248593e2c5a5707e65d62ecc069c03264717f076715c9bb05b3d4e32f3d1cda6","773220027f1f539a94594fe4f10392d0525e41ab41b2f4c04f4d294e139c4243","a9820e8186120f771df65c82069c0265b4bca46e110d9c7ab25c1831326b9b61","111d017fe4ec845982e14a5668430269cb2e412299c008124b388f41233c4b10","5e5746f1b1610e4b96d3ebb339a6de3880649d88725d276b7bbb9b5a8c6708a2","20f3836bded81ba03afd44608a052bd0d5467b945cbbe4abd9690eccf5e72db8","c483b808b4f050f165746166fd1f010e5e9a88b591e9979fbb7dbe5ae15bc829","fa47850b7e7d8ee4345236af75efa2451a691450f347338925da3ede2ef19466","a0b6fe4394582b1dbc5982c086f54000082ecb79c030eb655897984295471b87","7745e251a011ff76643b765fa69539aa558d34e39b032196be4b47f3c3b08c9e","55696e3374a80251e2b76d7c2172784c8cb8f1414c53c937e6acdd8c2ec1be90","0c2ad8d25bf844b45808188c188b47cbbbc95b1c4f8a05a428a46ee25e1e3864","00833fb9b76d58e7524b30d7b308f6ffe45831707b230b7bba2d3f4a85364db6","5b15c3bbff32eedefe60db8ab071ba47932baaa4c21ea8b6efbee5fe084b3b11","bf307f51954cc3cb9b325bd7394273d37cbcbd7c9924403e084a9896791f5116","491029e8aaadd050f2e344d46117d65e2699e4e9fbb157e02b40197eac88f35f","7a45b43d41f6b671ffbf3663bd45f3d032a40b794fb2974a11f2d2756704a978","e2ea59f30dea2ce99c1d9f4d19f63b47c5d8295db1d335011f5c2b432d9f598a","76effbe42db05673510ca640542de271c9b889e720237bce9cf85a7ee9bd4f96","cc45c892d7e31e4a5168d6a4cc15eb2c47a94337d8abfca8c0d984875f1fa09c","4d8df40c99bc80bf79c5ea05a1229a3d8806101837cec511365747d9be736f03","dce57ff2aab2dc13183d2ae68f1419a49dc437eb34772f14033e2a8075268f9d","8600741dbd36b7d9a20fab02ad7b36a79c1a3e3c7173ea226622ec84abf121ab","5dfd21119309948cf47b3d82233ca5362b5acba53d012692b7a1446f862f64e5","d6ea45157334d4b3c416ba7a22358c2ad9a19e2e079d0061344d7699ebf9d376","5c1b0c8885a5653b41728bde1df10814e8c51199d0b2ba2f4af91d38afa8bfb8","88f04fa4d1c47444e55bee444a1046d7833eeece158d0dabf5f294b6bf4b7374","b74e73d10cf21f187071203b7a58d8b8bda3b15495a4e9b068c9029fe8f0d69e","d9fd3fdc6471b44351cbc17c5cbc2934af558e49f4c18110c08835f728075bc0","4aa2534e3b86a88225b5ff6748e2cad3da6c15fe3b6ec983c6021f8cf2ada746","fad863f31ae0dbbc66f2e252f82d2bb7faed98da88647afa35c1bbac0f8b1d5f","a9b38a3abb92e71ac146462c5e0927e9889a328ec9d57dd322c5c9dd79ab97fc","61a19c2b5d7e8094e6920a6da0f6deefc71396e86f6a4bb69ebb6c2cac3cba42","6e535872846f8ad1b03d0b1cb4e012ebc5e302484b16f4cebc7db28d9d573423","06728118f5b2057f660d60767c11fe2cef919e6c219b2c54601c33143a0dbfbf","c6d6b8bb424f011b44738bb35abb38a9e319f81e4e577ec3d9b9cebf71122b73","d012e2ca84aa334fbe20360b700061cdc9fd2ec5d86e94f47710238579960b4a","093f430609dcc590dc403eba4b3ee9fa8134191d8499616dcd7a28ba3ab95315","437b29260c16c340c082b96c2ee0f3d1b3d999513323e1809c90cd6b020a103b","dbd4b14c5e856ce1c2d6d7eda1e6ef302324d978742594beb663447cc3a94d31","4f05793fbbd99ac4b0eed5d1c0046d4a6113d1988ae0a9eecf865629638e99b5","108036f78c156917bafddf7d37726e2c4290803ed484774150942c075ca2cc21","3215b880de3f3f26c0b9b6047ef499937296876210d2948968cc4fbf8ed385d5","469eed66460cb2718ae3556dc3f8c33249ee7902551e4b6bd07aadaa310c7531","21aaf962499bd42a444ef40f30cc687f21007790ff94e6f6eaa43d0d1a3605d6","b97c55c0947a7a93c75ecdf3ed4be838f782d9d5653fac85e7bda671b011803d","7824c314ac1773eb2ddd5d38b350d13b67f1f4fb74f39002d0bbc5c2b0ab96e2","9ea6d61d73f0f82d28d047ca504d25c5e2a5d68d08c2557585a237df23f7268b","f232553d7e487c80504654ed17a9b519636bc38989dae3c5e397cc54f4218224","329665422337d4acbb805023f3a7a6d250b561d5a416831ec187dba19f8fd440","78548890e00083243c7fa75f648b57aa18b7ee914d14edeb8cf4e6f623960226","91a1eac4a5c2a32740d7e2c57d4b323df19517ec7db21a0a8aceeeafdcc5a211","abcc871009c1e7b5687dfe98ab0af25680a0ea820dc7c03fc40569a9b39d2f60","297752e522a85da0dd793138177242284fc269b11ad1b2c3e8e959e66b217140","538e9e46accb7bf321893f73aabe1d86b18ef736c510dd7d807d6dc7b3bac479","a42df4668904c37fd497b7eb6c1bd9d72226311c4f3c8ba4b01337521895f242","24afff9fc08e1049a69e00143345a38a36d94814d5f8acd706dcdb383b01885f","00c58a4f61978baf822c8ae3bc104a9079394916fd73b4cbbf10d5dc13e22d2f","e55ba872a933ce6ac20fdf9e060559b52dfe94319abcbb256f5d0ccbff1afb34","bf9031e0a9dfda485a3377b316173b73f4f29faa23f283df73bc61fb912dd5cf","9a973ba34f33d19d29acb61843d8ad40023a2d8ffbc283a053fb81343f6e9e3b","e4d62f975c2f360b8958ee0535068d20bee2512f8c33225e745de7e273943f08","26eac118dff845c2d94c27eba67d32afd470617e850fe5e60c9133b50cbb5764","6b528c731047499e4d652fa04fcbc76dbd0aa2c1a6040d1ecfa9205b775a2b2b","6dce2a7083715c290a20b1939a4c42bf3e62c73c60876eac18f6c7d73a219c3e","0db58b67c228fc7306f291845ff81067077752f356c2649c5096a6fec1c60420","e7208c288ce53f63238b2e82ba80a56cf1b52dc348aa0d54a931608b8f531a55","937c179b5d5e1172ca2c880851988b59bcf9b178c6790c1722883c82b502daf3","6ed3961b81d98e93e19eeaea7e527e902389f515ddffc70283e59d8f25182ae2","100dafa3d3afb19fe22cac0e6b814330ae5daf90c919035a3decf6b54c708b36","2e3b77ab5cb69867a66b573dbcf7087751dc72674dfc7185fd31cfd134bd22e9","1d65632b9c3f7c4235ba5613940f7bae83acf3cbf379f8cb1c26b365183f2aa6","144f16d477f4c56075fe4dcf2e6e1054be7804c9c99e0d3d412d9b60155bd225","51731a97da8df8ca7fe327bbfd336cdde5385c96a98ce5890932e9607317fc2a","826d67f9fd435bb660c33229f06a01ac7e888c87386ad11f3f44169e9b3562af","bf12080232f8f33eae90424755efec22b9f0b3e0992ed772247790c0dc7f3e53","11b390131616961ab9aeebd43d0e4b84d55dd2e1728453a13a45a62cfe90098f","b46bb32b4e5ff25557573dd4b202ee549c6bb5abebccadb067bd690f7aaa59f4","7bff608303f99a17a529ec14e1bd20ae071b2d42661a1ac460e46b3bd105b291","3140008e48514f45f9bdb43c6c3cb7cc49723362611400ec3482dcf58ac89b73","efdae46d80433900712dba7c86d9868b5e7433067d9a5f7210faa49822cc0312","c170b349679a19229ae893a3bd7de183f67af29fa69ed37530ccce85d630a63a","1ef49735bb853fb06a98d0cac2bea787cf42e6932a758694b00f3d52429df8a1","5d0054f7bf923792de3c5a74d4b13d8ba3e58456a548abce173fe093ddbfac80","4732090d4887129579c763bb5b994fe619d10be97b915486b19ca73fb5c4adb1","858214c5d336066c15e9fac1b00b45634ec355788721d1242b6e91a98c84d883","fd5aef7aed71babebc4b157edded210fb3fe598f4a8a9fb67365086082d6e2c2","0ca9a55c62bb1b480dd86ae81665bbd7b4f6bfb5b2dfe4e3472fe908b4c10a43","de939a4fef14eae636297832654c4236136777ef2f3288a26a9f52d72b007f6f","524fd26e7c949641fdfdc2a82a304def7420005b993e5324f519b8ab0934468f","64da038c267f688f00c5f0fbee518e827da0df460effefd6cbf4a05947622eb9","2fbb0dbfe26f2ffd84413425a95fc61dc3d0be7401a122b49545352473e8f5e7","2d435841974413b667120cb44975132638b78d705390a59047d935318c1eac05","f07af3fac0176a2630620a3cfbe15015bae0b4fab8894b2b24b600a653f9b0c3","5d8fc0a41b2eefd99410bec2adce44ad189ff800d25745b93e9d2abce6607685","8b13658b48fd3eb85f2a97a990869810c6cf6b5c893ca0fea1d07a6ab12cbcc8","ab5baf788b3873b93878adb3c38ddf424fcd9fbd299cc028cb56a662d9db293c","0ecb3ad911a33ff3858a50aa0478eb011fa25af832fb019b93e3a19247b200df","97e230fe0d2d07d298be5a1e0d11c558585221bdd0130229c5354dc90af596f5","0d5f4f2c4c0fd86d7d6dec9432aac20e11045613a4b1c478673401cb4918feb9","0c89c964a8502fd41f4001ffb589c2727da3aa0d7a205191c85d733f708d2a26","0f1bc1b50b2135656ee46b3bf8c8b93e26777bc681a69bd1595cb318ae893dac","e227d3edb10b3b7f43d49f597d6647236443e4f7c1a2dad2445b374fdf3d9fee","22afe751a02e9c41d5c648675a2315010ab57a6569106e0e3fd2a745ae0dde76","cfad2fb66792134683927bc5a2f0bd154092574b7f46ab33ed46b90dc1d38a55","a8dbd46d44403ec46c2e334c73629996ae21859c315aed932a659f386afc5487","310ff36e200b48756e98b148393a0b55253706ece64344e9f4f2bec02942ebce","778715ec6b88e70d4b7d4f26bc94af6687b4d92d28a95def4d57c8beaae22de4","cf5b0c6ce415d3e54f91b0bd736822b46217bfb95d03b465903c3072081a3e0c","f64d58e30d8603e9882f34592795aab8f0d5f75097d78f26651d06cdda01a465","a420719d73ab46737b2b3229acf05c1a4601b3cee512114434aa0daff336a18b","29ab4b0f84e379e50c2301b5de2388b33386a50ecad1cce9ea5bf3c4ee20c18f","47fd105ddfe27e63c1d6706f6c201ad1faddfbb71182597c0fb5043b27e2eec2","abc00d7d2e60ba59b885f88d1a0d8ae04f6c78167dc4c0fbe682d11b2bcaf3ac","b125522a53af29f5582438d8762d56705f1d71d8fd14030097f0547f0cf4d9ab","001f27a6c061f7e924ce7344af9404dde9031f42da833a887c9de10d6e6d8bb7","fdad702b28240ecbb0b063815f8b6c9a3e7091b19adf932be93432c9b8ab0eee","0611f9da9d6771cb1f88d6a4f02debb712be74bbe4bf85835b132cf6e07187c1","f6fe1f935164fc1c52e1d1bb7e85c63cf3bcbc8e090cb16df611bfaae4e8d998","dde089ff16891898486ae1e8db4034c6e67c44c6bc7a520db40b03ebb6e6ad6b","26e9037c64133cf47de5c10994d7093e32f74a2302d4f3b014a2936db9eb56d5","d912ccf078291a482ce1c7987dffa3803a13c92bace1846fa92478b3a255e370","f69e0651c49ce2573972a83e3c719ce92999373cbef815579f849d22b7c4e0b7","f359c2be51f54458173a260a0d2c49754451efeb15001427f59c71e964304b59","5bcae328ab56fa472bca7b7b7fbfe8eca86c7d206efbda3c4996a00c089016e3","18df190dafc6767ea974cd9c8ba4617badf8f09cbf8bb32804ee64e961940fcf","a1c6026241b630f86b7ecdac69b429ea817069da94645107e03b474975339360","b5669206260d61cc61ef28007622850bf42453fe1cfc197ff1932af5442dd116","c6d0e0f8040519564eeb157703a74b17d6b5877a5de7fde4b8878c0ea5ce35ff","b1fb773dac175f9714988368d9a9891a01bc3379e7b16bdcc4792f52afb6d362","19a9f8498a71b59b8e9226fc74895c82eebf01f3e301147d220b50720a919337","661d097ce47e8524e2891d2f236203beeb256e183a71e82f1171b3b8cf005c46","34d8bb18fa4c5c66bd5ef728b2805c3c8f723a51b738d878b0f872254f44b950","03a366d938b219f40973a438ef19156fb1b070209c28d033998c33f5454d9e63","424f20fd38d4022b5c9fcf1c1ee5dbc582bbd134886c3e38514fdab230767665","379430050ad6dbc1d95faf5b1b661e0ccba8cf7402c04b8bb1efd74a53ced8e7","138fda4e3a56c68c5f8253b391556f16b6f74457efdc5104c82695be02f07592","a375ba8332a24700bbbefb16760d2ef638f17d1519a065fc9353dfc75725d2aa","54b5812af3c34f5a77f51c864450b745856f3d91e292f95c857cff032d8e5a2f","2ea0013ca24127bf39dbdacd7035371a63ac156c87e161c819d13a6c82b846ab","e01b702be4e4a9156575935894f01e391616c2221515e7bf86224baaf9e186d0","0c6b1a47b80f45766dc42f1f8f97c308c2b2d51054c3b2ce42c60a128a329ce8","da56f25acfbff5dac91cc7a192d6f1911aacf7b6e9adf74a909a1567616f9295","278f0f4f90c4a527308f6120cb031625459cf756995048aee8a84c8ad4100cbb","03900f7f33768102ac53ce6d4321289d67abfc015ea37e53829df7e193d3f148","8d302bc4d14b46ab70d0ea4d189c67a1f82bdc9f0bf80c1dd80dd7344874b204","45c24e3b58dafb9afddbbb0a171a57e2ec59fb5d67ba23f08cb2fdc702509672","d615615f4c036bcba843c302f099ba80b4613e7699548c4cf8e89f9555ef6dea","aa074016e7def843d07e72114e259c726141fc7c96dee65fa10d681c06ccec58","f054c395704e25f81f2e4771c7aa51c208b7b62cd4bd1c314422884d5cf3da7c","bde917ec6ee396f95aef680c933532df6ec934de6848a036a96bc2ab1ab0fad9","e398554885972376e0c7443939b51dcc52c2b0ff3c9214e7b5016b69d484a71e","264045b1102574c6cdc89a94b83ce0588d547c66a72eb805510ae5100630064c","38affadc2bc98ab6a41b9f517da0feea31594b800840e19ff6c8262d09368591","99d656c3fc29ace0951de61d2fa838cc3368439b689ca71b6d0f5b4ad7c36462","e2a059067d8e0b52abdfc6e4554e7e5b660cbb2b88f9f51fac98c442130d9484","6c7f8eab4a0ca1beee3b1426ad48d48541d2459aedb7ec2826bcc2761ee208ec","5df390082145f3eb6400ba3db0ad5ad71202f601aed4f1e3b6327b0566898123","c7fd0b6625166467b6d538e66bb6d5e3bb961dcf228eca34ab4a840e98fd92ae","d1cf0018fab925dbc9b48a3e4d9c116cd3c55727245ee7ada3cd6dcd3f55a0ff","ca89cfbb4452feaea136bd491b92380e8146bbf84fc094ffe5a124b75de7f317","794e1b29098398e42c6c47d7284a882853305e8683b677ad45cfd157722f9caa","af4b64fb6056c3acb8c602e83ad17b7a16544a33c7168c19aab1e6b1862112e9","14633caa527b868108064901e46f43e32970b94b8ac4933c458aca289c417624","1daf1509bdeb496a2b08eb94782ce56204eddd423f16466756f6bdcc7bf4f03d","c724bf3033d3ced119aed58e603be33f3a9b61e7fa0ad760078a7d03acfc2fa3","e9be9adbb0af86eb1285c231bb3b5ae7a8fc9737c330bdec802e6676907acbf3","39f6402de9354277cf093e76a663828bef0659a7a9114e59ebb450462d200ca6","c763128c0698886e02521fba142356091accee5031e3fa5efd823c1dc7fdbc94","611817acf5ecd8918ce9ae63581a1af373edee42995aed885e67a17721ff70ff","fcc3d69e7e20205daaf8bb27929879243840be9786722059f95fc3bc534e46cb","c346a1766045ee05e6bbc18c22e24db04285232332c478e9ab343270668f0e6f","18be42c1a2786ace1c3061f215b479f1db269960b24bce9dcbbcbf8eadb5cc26","fcb816eff2a4658cd598d2d6aaacb787a37b5d916edf52805175b071bede1cea","d96e4ea698682dac8794b4f56a10e384e1ed93a5836ef6b739fee1de112a770f","3d0868230845e376c2555bc9c6b6545a3a1ccc3271e13617f5860cce14dd5931","5ad4b7bbe31f13dd2d320e2d9b2c299a2909f7781e0d5a6f0aa96cf22b0f62c6","cf41eeaec45664d5c0490d80f836e61d2afeb05594e1c2813a9b8ee3bb9eb77f","a37ded2fe5a6027f16aa09c39e0fb9385c002bf8b609cc1b1b5e9caea382e7ac","f637b2b122e49a4c19deec6701d7a0e31f4d6b5441c1a73bb8d19e5d62b42d25","321c2f520695e4a9660fbfbd0fe3ae137db44d8998b9fbdac2fe13ea9f2b5e48","8a6715603c1dab99cf888a3c9018e8af9fd2e9f58126fc504e21002cdf23edbf","4665a59b1887174200bb5bff404e13d954f6637df10437ae5b601d7f63e2808e","46e378d2e9cb567072e3bffb3b0fb390a594163a54988167156e04228b9675aa","99583766e0d22b353a9d51d96f6d3ba17abc258343376a0b5f5463b9b5b95acd","64baca501ec2a543236b831507ed7b5f3ec1bb49b027337a5ec9d0c5deea0076","bf8ec5f5a156647433ce2172b47f136e497df5bb13a337c217eb66ad3bb090bf","b38b6cc38438723ab0c3236e16976a7d69ca2686b6447e9ef228a70dea8832f2","153a10b57d440ba337ea5d80f2104e70f053c22562eabe9b3cfae9f2fa404af7","530c2777208de8cf12d0b6f8c01bf6dec03f43432eb9ddb29aaa017b42895656","148816863a1370aadeb8b23cb91caaf0e103271be38f93d6701c04cf7ccedec4","a89063ac6900fd20c4f9569e5c40fc03341b0b4dc102c82771fbbaa83e67d5e0","b5c82474f66247061f469c7c2c477bad90bdcd8256f9cdf4261d3044cab8bb52","d2db96ee17b3351821a17ded0fe0f120efd2ad26a9d7fecd8327cfc12f1971e3","a8531b4e74327d2a8c5892a2a9a167f36f00ad8f83af7812f6ef7d4acd4d5c1f","d56f7da43264f2e408b476c3cb437c82ee1d9a594f0c435ea089831c14da2499","3f67f2a65e85d1e85de1b70e5b89f93aca177df4576c0ebf5a90e60d65cc5e48","518611444286b29e480650154773aba3332f3ea08f0e2c20d459bb0c0d879122","97909ef585714ba90beeb25eea77e485dfbd76bd921936a44ef48c6354456060","0fac8794ab36161ee86e08ec3d7f02ab52aaffac4d9bb5a13a617bc86375b188","975d707d9ec6ddcdf5911a3000a588711311479d2aae58224320946bb0d704b0","389ec9b0ad7ebef4a11f1b96910287a6d7d93c874f344ae840a2afe7db7ae8c6","17fc21a935a0cc5dce6e271cd941354628e2df41e1519dcc30d7051c56faeb21","55784c46a62a874509ade2636b5feebf0d5c0a74618de51e9a74b4de5bf67ec1","2bc68cb856585c2e96a6c8dad2c6e2bc59805f03e1122fd122cbdb0c9194ee1e","a02badaa5fe299f5232495d714e34f21bcc79522eb4591726c24e9e05bf28f86","7131e7d8cfd0204fcc8045e06b28af943911069acd8cfe67bc0bab44ac2be588","971320c2173adf7ddb254b7b0bc97565ccb10183b7cfe29cf268815ee62470af","20a1a1477da32c14245b40f4f1d60c441df80c85c06ef6e8b69eb699203117ef","168f22df8b33ae570d8a39b519bc72c12370920daded53652f5cb87d9bc8d7fe","bbbfb9b006f213260a5aab8cc72666b2322744c120bcace4f62e6f19d141f7fe","2b7a66adacc5379239aef5f0900c5c03746afb5a304ab52ff9124bd0e6c1b60e","6f306704b5e6fd864e9acac0caeec7bfdbfc9b46425dc97240c054213bc704b2","facd863f79e486368d033146007c4424a77bf0d2e4ff835a4a7953ed85d2f500","09486f3536dd782e046d09bfdc5de54ba7755c3e8d347960d67b456a55cc2b32","b7c8251a9b63f076bd47dfffd124df31882dfa7afb451276180f3a41c6650623","566a5f64ed3eac4498264892690b6f97be8dac7092a9d2cb0b11edbcde1e60f7","397b9615b659a9e56a832db4c0ed80fa2dcb00d54422599e1e1a39ac0b98c202","8b6625b54edf75ed6374091f47f33911e6166da7002ce636a1e9450e8b9125ee","f40e3aeda25e1e944748e0b851602ac8214c6e79f9752b9b92755fa0b9911dd2","5129c6b23014af91ec91920871e525b03d3765cebd338428b4fca9237b9c6184","521cffcaaad5d4f702f1b897a1b605b301132a657706d649a767a445ba25bd90","e8bc10257c79f6cff56eb16fbe66426881aa5f9ba8bdbbf875096ac44dcb03a7","6903a83c5d73e926a7ac952a52d124a984171143eb756dc2d17e500f387dc505","d2e74f9bcf1be428ab55ae321b9547d3137dec74384d91b74b158731085e7e0a","0192dbf7644b7e84caad8b2fa2466d3ba09f1584a4b713b0cc707d7dac0a9e29","79f39e9cfe803568dcf1360365ce5c3667e2c5a77f22fe97182f8369ac407813","69256d94def878511110162c2a44ff601738e7797b5f64c8290f91bc009ff32f","eb45109bd2713ab319dd4c944608ce78f501422d63f64a430a458fab3989d861","9a3be1db7540fbefcc314db14419e0142ae638f28f4ce11203e769e4ca2b899d","0ad95557f63ca63e36c89aafe0c0ec817fb6da36c799b694ff2b15c87307de8d","ea79d26aa22927e2287e496c8eae575898b53eaeb5a7476add907864fce0eea8","198e18f48d703866af0b315b3fc82e4910769517e9d97604c5bb5dd8c022f2b5","9306a68c440ad7d2ba0574c8490b505fff5e5897747eca5747546241c9710cda","aaa734e1c44079732bffb91c0ed1c6e940471e39247af3a7aa8522fa4e6f14ad","61215f8b18cf6a564af58170b93d84834bd1e527c574b5c6b1796df45a8c9535","766d9ab7d5dd634a016883445a96e28af4a17a4da40943b978eab93cc9b9a163","58470bdd7503f00c9e1d0eecaa335377f629ebcaccded46cd6b075c9510bff4b","5cfd0bcac2545e9dede9ba70ddf821e367653d218dc044fa0f462f0c8b97675a","55fde368447f53ea0af5f013dcd517cd3c1cb65fe593dc6574ad68ebe6ad68e8","d8437a8106210987b6339aa006e9d86234c247c52aec626d51b5169b61eef133","650185a02a6ff279bd6f341a9081262d56f6203b04a042e81fd1ee503f85b8c3","120851bc92bf1ea4c280eda70eda07b7768a87235d7fdec0ae1f9597b1ed88d4","effe0936025b22af56614fbeb9c48d90e13b49092c48644e5aecb99707c191d6","c6335d9339d4fc555ccde9e9b9b55931d530c0ea6f106ef4c28550d5029817f2","869b765700dae6319bc385cc2de9ee8059bf725d4c0fff73dfbbb276296c30fb","e2414f38af844367c4ad709f4016ae9b50f2a1d92eb5dd70735d852d0f2f4cba","3ecd637c22ecbf6a721f3db5fe4f3a013c992f1e04bb2969dfb28b24e436342e","cffb39a99e0422e351dcd13dca46f104d8fb430d9bd417f799fd3ddba3be99b1","a86bfd4d066aa0a2b788b81e21ee59f20ad9da2bb471051aa17a4dd1c3c0d508","3ad58338c798a83cfacb63d626315ae95887507e35aab3b1ac17de7c4842bde7","77ac5ff5a644bc234ba42d97abfe320c59895141b7be8405d061663ba94eb57b","0d3abf56ac48f6dfc0c809fd58530349ec54b76c835f226b41e94f5c4d643510","620b51a20446ce19fdea6287f69f2ae34afaed24a1f94d0d1bf6d79fc5f4b950","ed073846189f1f33fb34af6f08df09e0a718ea8ed1a1326086f8bfbff7d9e150","0557b73f4a6c534baf36526a9b683fe03dead935868152d4507b352e5ada6460","0e675872923ea79329bdfbfb7bb2b2afd5a4f3faa355c5b8c047f42563eb83ea","5ffc3bdf2c8eed8419100f41c8876a52933c54a71b732913e689397141df8e63","d162d186921be1ac77b0727ec7377a34a3eceb49e8e6da7f8413f7d72de025dc","7b3e38ab4cde68b1217ff15ece9b14b52b5788edabd6a8c7767b6fd58af74e2e","21d2f3b36b6d0073a2f4e6fa74aabd09df30544567bf5e2e99937c51b164ab3e","90e81ce46dacb22992dff38751fea7c8a6dbc8d3cf3f407ed243ab77e9fb9f92","1ddf9bacbe918f58a229a3d2a702a64b8bd43324ef30559bb5d42c9396bea4c4","884a20fe9d4451a304c88ca51c54b540bcc1a84b3aa96829946a563b96beecf7","fdf933c63faef65e4da8f6306b55a41c1f0358aa960ea59c25a784107eba099f","eb675242d079cee8fcfffac5c88d99043072ed081f3aad876fa43934dedd01ad","c35a9ddf77cb184671bd074edea34707a6b85e2c1430b2aea16600733f4b5e42","937f74a0c634cf501daa07a0d5a6d40bdecb071bad952a521c54dc942bf56c52","56be595d909d7a3c56daf8b0a29bb6d725157013765e1b2615128366e5e8956e","afd69b090ce004ce6917fcd16ad7ca5f5e3429eb021b16be4f5d0d6392665ba4","ab054eaa647419092f82654a6412717c2e242ab4fda4193ffcf6fc70e2f604bd","759075be98309f0d655dda89467cdbdee8dfbf92a217daa0cc909d62240bc4b4","736f96c9d515e02190891c1071fe8c7c249eba423204cab7ba67f5b513d4124c","1da0451b6a8694e83308b628fafe01a0d9ed6091bd3db7d85fce55e5200d0d1a","0911c916adde64685a293f66786ff5e396cb1d6935ff02a0f15a06feb9978ad4","86a2122f5e1a93d35fbbe7ad61b7df44f703ebfb08ab4edd4a36fa1a2c5bbc2a","327d8130938b159c73be813010c0eb972876c809fa71947f8112b3ce756aae56","a08fe0463e06cb5466a59a16c5edc563365854db6a55f9674abf291babdc2cc6","6993035b6a5751224269f723b505a7f0638f16e3ea0dd9e7aaf7fdbf8b4ee746","c7a3062097a7eca94783ef87a0d4ee14dbf6a316ffe7a4cc3b59fdfeff12325a","48f3cff766287b3a6933825f71872244a728b829fec22b804fd0cd71251f7a78","ffd48581f9be0a3fa1fa0e0a9e488b46d905b2c1435cc59e29b4aa06095dbb95","2695f6eda058e87c10e76bb71dc26e9f55a5e1c88741b2c8d71ca9918b1b8f78","621fcbda6d0cb614c8b9d68119421f33fc99396bc652371ef424fe00b3d5053a","d3e469c8e5a14e9c9c2f9530fdeef70191327e28d617080337206a6f4633ab48","37fe2060d41b019edef4c3afa4d4df6f6a9481ed5d2631c29ba95c3e3de3b2cf","6471fa2d2f7ebc422b10d620ef2504f24ef2636c4c7b9813267cda6a57f70cd5","f71ed4dc318a4b0f390ec95c003fb310485d63b1b0ee4474ac0bb6b82c52e4f4","c6676db516e86c1a47a5b82b85ed79fbe27dcbf008332b963fb8d12cfc1a868b","1a45b76eb3d6a91ffc48d4038e542053939836d2e13574f17b38ea822ee903b9","4c9d8690b42b87ec8d6deb84370091ef9e16e967f3f2fe37a2b3d2c4b02a3afc","eb8d0ad83efb58657bc7fd9c0e7a1c3f893890464a389ea0f9cd3b83e40e962a","35540f5e363f7f6b9f138fea3190720117a18635c870fc20e88144e3362a3ae6","30fa793474aa7d1f33c45c0619e69a1cb80148b88590c958dee5f14bb2f5e2f6","0b72fa093371659cd65dc099ec98c96424848d8dc1198fd41b8eac45cffbe4a1","fa20ab3662cd1316c13eabe2248098c097a27c19de49f1906eef12fdc4fe1ca0","9fffb6d2860a1a6ec626125648cfba7fcf0351d1e2823d2e3216f3acd5b6d212","455e2407c94665e05384abecab21b3364ad69ec28a005f7cf2eeedb36d12553d","428654f8e27396468de728f909f45adb29354fa1665e4b9c8c518f53853f0650","e600ec62a76cc89947b94a66c498e78a6b86a84b9c47fc10da16b9e875743c2d","d6992af527095e2ea0cac0325da02f70191374953e95696c5c2fd7478491b849","458178b650d755cf556a8aa9e3890b67c308b5d7dee77544b4ac81c873103f78","a8518f93695dbe1fdb343957a79c7cd4c962958986b85f7be88a8a98ef0d5e38","5eb7f8f57e61b722dca98aaa047db5f6477285afc23b24b96f582f1e4c9e088b","53b71c303d4f552fde6166e1b814d317dd459fefbbb8e07938a87fb20cce014f","dad398e44e7a006a4e06c86265e9746be9d89c3daae8d36983f26caff1459932","de6ca1039c2e884eaa35f18c01666ebf18d377747ae7b8abed8bfe3e0c52a0d6","9b571f700ada327211042059e11f303fff8f94b6763c1013decf422dcbb4bd2c","5f9b154ea96334430c6564bc512ed9b34331c4c2a28f81e8f2b08e71794035a7","8357dc4e3dadd79e553b79970195a259f66994eb1c4c3930544c0aa7d6e2b137","fa0427e652bdf38c70d01547584159b16a9dde72837eb512a5f093f7b647bc87","20d0807feee565cb42f625405efb8df747a269f8eb5baef7605f028a8204f9d7","61232de19a585a1b0cfc709a2ba969cfd360c69d5f024b59664f898a0b9887f3","54fb2474d21e87526eefc00d1c0da7576736a4b852dc29942f6449f62fd5a8ed","f43e98f383faba4f58d26fded9091ec9dac27593b5eb696962ae1719945c0a24","4d99e4742cb00d564964cecf1043b6a4c35bbd045a79ecd083335cbfccf8e02d","e334fe5d29cfd2643bf1e3497e42e86b5f0d13cfd54d15366476bb8bbb8148a4","5660ede07b78ba74fdb79cf3b0e47e74d3be784f5b1e26f0ef69f65382ebad42","305c5e43e6efd6032fa228f371f6f998bfe3515df54adbd58fa626436b35a7b8","c10cea7133522c7f47396f1f649228ee19e116966c78e2d2cebac33ac3276318","9fe6d03aa846ac8a578f378ad10b7e56f0c7cf2b5dd81e8c1031993e975cf268","60463c865310fc4c37181afd062b2d0015b3f644f7a67c54db5e993dcb9678b2","955dab43e5a993a464e6499646122b3a4cf4e81053580c392d6f049e9ade6c7b","d3f1b0ee8403c750f9a0477b677803850dc1e3666a329c6f0fcef42c5df0107d","60439ead8386484ccdd8900fb48466b49446d129106e9587eda916c5d1449da4","0a02cf62b18669a32dec2fb8972636067e190da0c68d77b7612da3cd67b037e6","0bf021708aa8337939814722d6353f3ad415747c1d40fa7e422cb8d4fabb9c84","9c908e318f4871c7cec7dfa8be52d213b4012c870e601e03f22deea5a18bc492","f712f915cf990de8ad20ccaa8632cbaadd112484418bca11a7a45552b64323a5","faf2e4577f5336ca4ea1c3bc1d6d431cb337d2a9fd5e5f677bd97942ee941b2f","6e38d4ac67742a101989547683487658493c8a3647bded41fdf89ac8a6d3cb84","52815ce889765b66c3c56bc2686e435ac99dfd14e3feabc38aa39a240ca67a6d","dde8a190ea50312b790d2330df56eb0c41a48702fcc9374a8c0bab5b92301c02","30ee3025ba21bf912ed074e3f713d912197ae673989ce0419e0f4869262d9174","0ab363828f4203676f87065f2d5d6035f3233bd915cf7087b3580dcb6fce475f","3b954d6fe2d19f7b045a0ad0cfb4d0ba0529dfdc9158519bdf1b3eff43d67b6b","c7993d7f3455881368e2295004cb1ae1dafa8b3bd8f21757865c2bbbaa3000e7","8292b13efcb693239e21f574c2834b3bfd95cc0c3085ba33c1f6bdc22722213a","7f6c5d26f01691f81a02d96328eed6633f65567a0c29f9bfad6927367ef0220c","e77d11f58f85cdc16b440be53d4a6f2fcbfe4cce985c901ecfb1ca35e6e9a27d","42bb0d5cffbb0381e27e77b17ecf04439d00664406602c4b206b262995dff633","71fdd5f6a77140a0276aaf3018d3c29e367ef7165a0e046afd984a79543d690a","c06c89a06bc20f8546c798ec9e845002f07d1ecdd66ffacef14fec58c2732ed7","3c7abdf992f18bb28fc9d03753e064bff204f5288787337e5a2690ae8661c8cd","57f75e2333541f0c378ab8c49408f5339a610cf5fe9bf0a8804043a619752683","4f6bc1c4e3e8357ef20adc5b6000934ab2db6a0a726e95b592936cf037bb2322","65c18fe87660eaf56dcc02c1f5b45c0291def1ba79bcbe895f1ed8be3fb39ec6","a925e34a869c804bf87a750aa71e2a243822f9df9e77502b81f9b7b7435dc6ba","c44e43466a7a573eec6e0956787a8f23cce36ec2dd47dc82d7c04538c42b6758","90b969c5be32070f6dd2999cce46dbfa6299ed46d7053f1c7f8246a199c7206a","5991cf34c509521d66ac5001b5ffb0f6294db851ee0e2d7855968c47ee84f422","8d0711da572cdf71335f7208ad675377480175237b267cd1f8c4bac57a675d27","2d174cf4753379a62a7cb35a69ee5b045ca05e3cbbb8cbb448daf108eb4ddbec","00e1d6fe6b37e5b7ae45eea6a09315a2974967519d36ea09a72e86f810f2998a","9ee7c3e2e576913831943c2d24f3bbd6f0cd7b8bab9743d128524b3194998b20","c2b167e805e84bb9253d7756f66d0288eddf89da6ecc95704f27cae8c132df5f","3236d6fe1bcfd29f6a1519d257ad749e70f31c0412cc7eceedaaff4aaa1f3851","23ed5446887c6534a6c01634fc833f02cdca4d18d5f48d5c28c2eb2da4d92de1","2abe696af52f0791b4f0e82879287386c420c2395c660c71392e98e7e6b50336","a3d5f0906ea9c3a6a5f41731675dd7c730eed674303037349e35ce98dc697302","be4651ad25b3eb3e5717d30ba360e9cf26815b689cdadb2dade9a9f693c0172d","e77d95c70f599e0c223c3297517bdd9d3972a9919c1200bea9fa9ea960ca9e13","869c2a544ca2748dff7b8fb5362f125e380a6aa314831589822f79dae3d3c212","28bb197314c1a1311765c103212cea2a640c11d08b98828c3a195973a9dfbb36","a1f720ad8439f8c310375086198f6bf966c39ce425dec27dba3f0e9d1e78797b","f71c579467571efed651dae1f5ff182dde5d60b0b4cd62602f9aae18f848f0a3","ece16abf2f081e7e1622550ba81dd88442f2991e2877f7ad15d2a234784cfc96","428deacc9511ebc1cbb72d72456b65b391ac260de6b76f2e646ca7b05b71535f","a0c4a38b04699fd12d66b6f6f811ca8424a5ce1c8abea7ffaadb20150f57355c","7894cf93da07b27c6a34eab2ea108965e785cae1ceb1e5a009ac55f62c35c570","8af2a6105d3d5ace4f8bd9c8808142e9b52d98ed7415c4341ba0a58d249b5351","a5dab32ec2c3ea70c22c3ae2ec6784d1f69197fa228fa50d354307fa615e7fb9","d4f156eaeed823016626853ab693d3ddcbf70e6349d2081eb4ab4fbe029d1eb7","7f065e9bc731b103c60ab0c7147a218791eda7250a161e88208431bace87dcc5","96bac95b3e700791dcdf35f7cee373370cf30bcbe076b340eb7406a80bb83cdd","4bcb63244963ec9668ea2b8d567e5f9579d4d1feb9b8bae53ea848b5b156ce23","008dd037d4cb41b1cb4b43bef862ce911b7ba17d754f733ce3ca84e56602aab4","d8f6ba9ad64001f3253589e5457865d94a3a79dc556468c9b0e74aae71dfaf1c","004ad30a7fd7aa1c038138aaff55dcda58b909a28c261f01089878951ec0b5a7","2fc30b1aeeba6d8afea0de9e482b03bbbd861ebdd34ef3b9d5bcd4c8ba851c00","4efe76431e37c02ff4e34a9654ddeb2f09c2894139a508bf7be0301120f0f743","05683197fd3c58311e1bf641fff754fe8f8eee6473c306bab0f48b8050c09100","4546383d66a86a8d8d813bfa64ecd5e41d924c09618c9adc5b9402a81892bf00","a33ac26369204d0561a1746455ab963afbe81ad600cf31b7cac57972fecde700","be1f6d4e6d809502d41222c88c76bed469daa667986c41e536a0dcc0a60ae800","7ffeca53d389076c4e5fadbbf19608c64200a0cdba4644a898f5c953ff27ef00","60b1d902a59bfcbe659d045a8598c635c4db979cbdcb6abe499ceca6332d1a05","f64ff98e7b9a8e7b6aedd4773e5cc00e51d3858cfe80edabf950bcc485b08305","5ce49ccd75971bbad54cacf55a8d88c09fcdb77281f95348327069580412d405","6031a83ef13f34f8b40ea1b4d35d28dc38041747a9550f469bff8f60c8adfb05","e7d96d381a42834ac9e7cdf32fc856d2993c47f6739bd836fd53f9d7de030a06","da53fa1e89091d7df72b1b67101ff70090cc32dbcb7a5073f02cd1e1ec3e5cd8","d37f1f96b17cd17065c09e5cc2a3fbed8f14107bb571a9a535aba411d94e0b06","77fda1e88bcd9aa71a691ef06986ca4945e6ad7cc9d2ea9c375094bc963a5f06","59633813df5fe6dbb839d6d27d7a9749456ff3bd4568872b10c0a004dc5a426f","b161c45605cb2ce6cb5f23e6a1f79238e44c8c7d3ca565bc45121485a158b16b","530119a717ae7dc99e948664b6b156011639068db09000a88e1a7c9113a5a206","28e7e5184aa17003cd14370f87355bf314ea14f06187e7d8a6e67d079e7ac206","0e901ae8cfa5da3febe42edd86a403271f3e2bb198628c47f759d8365e3c0e07","fdc90cd2f9d640c0783c509950eb2c81add440c30636004e4ada1b3d8c4b1907","fc834c617c0bbbfbf673e1dd9d6b0eae6aba464d28b62c07ef792c745696c007","40bd218ab25b69aa70e2188c05864c0b55830e7697925f4356d7ef03435fb6de","682dce3a7b380fc70d020cc0b5100da5170f9aa2d116095764eacc9512ab0532","8d45dc47e6340ccf1f4399e519f2c3f9e5b973f05cf680ce906d1abad50a73f8","b38185c7d5040e3b5cdf9f1bfba3874a9827ace053f6a606e00cfb03a419dc55","4e0b03f4776f7d1b0ac7908405587877ae704c599b9084699bfef64b9ff079a6","41d1b493bbe1023c2543ec7edb1480e2cb69cdea6c4664109b6960abc13aee07","73cef9f26b2b2c0a6fb575370f5c55b70ebfa6b1d70de0c5855e92ec30e16e08","9c811148631c6ba3003308af5433873e78125d0d9afb9b1fe28340bf98b12c78","f6c21b3dba7b45ed1dbfc825d05057492c5ed65543e7247ceaa583eb32739cef","9a8e52a91c9927e3dc8ae699e189e3c4c34df996149d1e5215fe0b9933f60009","720ddf30ff117c4d0bcca46ad4ce06f0734ca86f6539b534cac2500a113820ca","c8379f149e1140be74c79e8aedf578962eafad13b330d90bce519245039d8e09","454bbb9fc097c9e49664efb4d90b3d23e0e164cfbe5f715b8890661758027a0a","cdfcf184b559e405c9c626c07a1776a8b83c1f52251ca0788b6873f417471d0b","10c0caeb49a12fd47b1edd4ab64ec5c97c3262729abc19f5c74f8e050193880b","10de81d53f135d1beec065c2d0161cac349d640793cc0bde4ca6c72318dc7048","7c6d2cfd4e9a1c5747cb19ba7949ae296347aff4cd5d56184821e934311ef30b","e822dddf0429400a099861784eddba41366aa3b68b358ad769c3c0a52bf6ac0c","cbe1bbe62e6c353696e718f9809fd4369d94ffc6e3e647a8234a173cdf7c190d","0a324fc2a5e45c86d5a90b1a1c857ddab59f01e57e6632f680c1fc8b4d63a1d2","3ce9e05608f7de8be4f39015f82bbc28d6acd12e77735bd54d4337630699390d","0db73b08fc9cabf8ffecc484a90fb7b0a56d1d2bc799d4a08cd3b46fa80f850d","0d663c1a8b8665c0ffdee394ba40ce15f0293a347b397008ffcfd95ffb3d000e","b37088ec48e15564fb89cbb8a5d8e953657f7f5ef12e4b869e9fd0539efe050e","4b9d207acc69c885d0a9a6e5a39f88eb105b2402aa3886ed0c5054cbb6b8f14c","6c3e445665f2c1707715c24945abaa8670bfcf8f9fb8b19639ec1db65e047b0e","31004ebca087e4ace6634a5656aa6edb42c8482155c9e496b7b63ae64090f50e","0ced657762c21e6154f9f015356e55ae5c8d343214a09ced27a234cdfcbb16bc","29b260180c1c900920d48923a89d0d9a6a4ec91e9063f4bd5792cba720f2190f","b2818e7b9cdf481508982b2ea2dc63e71d901edbd2d8ea6b41238613938e990f","1722c9c14fab44ea5726e1d8a446308e4d6a1af33019398212e25cd2576df00f","4d5a645a3016a17ac9ba3a36ebfa6baa379c5dbe834559354ece5a4066482010","fa2996da6aa2e0532e4757aa20fb571f82b46888052de8c65347d2d798f84e10","c5bcfc1ca05541c801757f75438227e832d332b08e1bf85488246691724ddf11","ba33c645e0d769d344f7ed27ae799268c0b2a3b21e4feeff2d199ba4b1e4c768","cc493fcb70b8ca842c2a5e1bdf9a405f39676629d5e14b584c50d91c8cd4af6e","640dd888f5228a3f4c1d1f302b92292052e31e44046eaae4ee9cebf6e431ebb7","e953a047bb83b063c3020eeb567764df26862651c1220ea1d33e8502a17621c5","32b52b49480a40ea21bf075aa61dcc651120937a53ccdb1c1d7dc825b16e64a0","8278408670fd605da4146a7a8bcc0744de9f4cc2d00b25f3ea021beeb5f04d1c","4f64e18618898b58567a8a39731598b95b4a6a960841a73309043f0208c43e36","c8739d90309380c3700656037237c7b4e6e9be4b56f5d28bd8b5263eb723cf12","2438e27f2e7e5728c8c8483130f1c7d4717d29445dd260c7fbeaa229ad15fc13","def4157bbd717b658450ff51fac4e788e4aeba816631f978ea986fd12dcf1215","81b5cd59f1d6f541a0e619c03ea3f9eb88a846d6a38f1b8462405c9d58da3b15","feea9d280b388d15f82056c3c896e8a2b7da6ef27f31dc812cde3e4b3cf8f516","a6db0c1cd617c795e5f42b5cba731639713dbdfa078a881bafd43f4ea4c7fa16","128173dedde7e89e84c2fda9dd9f7e32fa1e577ea1ca064842fab5705cf04617","57cb1e9c55614ee179858a787023000d0d8e4d36b84cff09f2ce3a2806d45017","dc7c5b33e21ef285524d98df9484cd6be0523fbe6eb09434663a35b394a1bc17","3c824d682cbe140eeb114cae88bd9d09299a78421b92c11183d810464d8cbb63","9a027533218faecfa7ed1ec0ee92e56a88c1e54c108cfe816a3983a9fbbfb019","05dab50a5b345e71661977f23a94833694d61d5bf9e92bf13f5cdef4e1b0531a","2b6d1159141c81175cd805fa419264bc9eadfa891019c22cead1e4dc3b77651a","f26737626a598ab1229186b2c877fe11c5849a2a0448b086bd9afaa7363c931a","de5f44a274fbb28470e725ec5e9347ef0983a42788e3830725dc3c0952a7e91a","f44ebd4ca79218db84a56da16138f10da705156b4024eda6109d324646b41d1b","2f006523dc8f77029fae5df37bfb89202502a892c7ca0fc9ca2d8142f603281b","105180aa5922f0d2d4ae2a7d45628c0b0f0fd58a8213fadbf704daf111e3501b","bbbd33f8558a7d876b11eb26c6566b5c2fd4f61732935836d1bcc2e94f77711b","1352ff3301e668b0ab1999772dd4d22cadf6705ea3759d8f46c0e1c5ac0a081c","4237ffdc5c182e793bfeaad8cd496de86b0b30e18dbb658ca91bdba370492e1c","634a9ed4fbdb978c3b4f4c3c7ae21d6fc5648e9e20638beaea8e3beb7b06711c","66abfadc3440714876672e3b81fd3829f62bb5766701f802856af14a3bc192f0","c0f67d11a1adc5dff5c3aa6ce48ee8c31ddacf23bef77c7c3b15e6a6b9fe8b1c","f7f02a4989becdfe4b80998406e2aaf06c1c108d9d9ae6a4258397a84c5f71ff","01910526c8f92caf346b776d7ea1f2203b7a21ac6778ebd50b166c7a5d1d1e1d","9394ecedc3bbe1ef2b3bfd8cf0553551ca28db9c269e8273f237a3d279a9231e","f6f84701503b44f9c30dc37075cf763346a12ceb75c7879c873b16fae8bb113f","c4e23fcd8c6c4a8bd5442321129c7fb9473b2c6d43c7a98b06d80107f2ecb266","596fdb0b0233783216fa30a711e9adb17986943547e2cd58b8810ac057c7731e","45c6b0671392d0c8c50b33c6cee718e3df17fb90acbbd63a3838992b5bb17f1e","3b993364e86b55160387f3e4682a99908e5fd6be4f963654478e0f10cd69c31e","ab62b46afc5de216e161342f97c82ce7904e340f05bc0cef2a247873808c71ae","7b152a16c9bab8d91f928863ac2d970ff509d98b09ee5dff2644490864fc431f","cc1fab83b18f6590ce736e6d2220bce80eacff48ab96869c3df6479579365a1f","3c2f29bff2441528f3d76aa9567c2106b992e1d2fd360cdf7a3ae037149c651f","6f20b82fb4352c3d07c9ec7f89049d54a9269f91abf023d3fa1cc363eb4b751f","f1665affecf65df2c011141ef0c142ec3e5d852013803e4f99c988c7b08e6091","0311be3f0cd8d8adaa97e298ad9bc760962fa39f24f846e9b8034abb3d9fc07c","d389e368d8d7857d9c7dab160af0163a89ebdec9d7a877ff8ca78a7fc14bb079","e0546857a3b9a83c6a79c92513e9889d732cb41148130329837d4683c5edb4ae","b998bf8a44fa30d1393b131833e4e26b4d226245f0ef21b0e567d58a80ba1420","05f7d43ab1ded9bc6a543dceae0b057a93d47a2b0ffe2794270e2de13cbbc121","056d07f2ec780d025ea60f880563f2f5c752fe5b6ce57d6c71ecf72c389b0422","ec908ef915def0e45f31242539481cd006349b1284dbdccd56c9bed372b9db22","bc2b79c455445430ad463765cced9ed4f22b2a845f00b1a61d866b7c81810b23","dd41e82bc7e58255ea91e82125d05787a1d061a7c7ce81870880ec5657657423","51a54baa00b97ce7c33f30223261c0727e84dab95382e98b5499cdbd5b8e5925","22ecd83cd3e18fb74635865bf53d0fa8baf11ea98f78f91d951a7270a24b3626","d91ce3f3524d436ddd9af2a7fb7218e05787ba07a9a7d4108eb2e74d46e23826","2bc2b4bef34d7407fef88d557c886606592fd66958d5fa9bafc87498eaf06526","613d806ffe8ca2184e2b124e6a48d1e7fee344121d56acd5bda01eb35cc5fb26","9f206a97994606ac195a68769c8dcb69618caf7518ded14d27511cc4378eb427","66767b95891edde3914298626d258351b2a21a962d5791568c19fa15c3fc0928","e2d90e91a2934606f6d5174b8332ce214c4d374e956d7ed38e16f5e15239f228","e715f2347ee70ab00b81cf58e8a56c4de7c6b10037a229978b3c69c2cd216329","e9e0889af9dc76bdfd18162029ec26f92f581a84117c5bb8484946cd63586629","1662dc525d7e37e84b48dc085c6ef8e73919109284f67fc7174b5ce6cc3d7729","53f7309e31a84a275fa64e0fc51702039e7d4ae9a614a2888c2e77a6193ba729","ce9f302e234394fd7053a5a5996e6b98d0226c3dbd7dc5b990ebf1521b5e032a","2154c37d48a089982a04cafe9763701629875819ccc298d72767249320806e2a","6b8cab422d715b0758cbd5345deb3ad621e97a1e0422bf0a586f9e4fe4ce5c2b","b696ebb435886a51879400b5bb21334013dba0268d1991aea021b759eecb762d","589c7bfdaca6dca4446fda478be2317bd0f937e5e79eae6f5c7d4dff3f829b2d","90c3d962658e67856900c4d0b587ccd807656ca5c39645550514dd3d0bf7d22d","e78eeca96688b61722a62b93df123c0f04b45959db361e65b34f5867ec5c882e","5d282798d16a9e80d2b95140dcb01d113d4ee13299a4156b49a46ee80e72cb2e","77bdf696fd892a7d897f0b812099b313dece7132472c3896bb767848d981422f","6c33a5eb3eda43e48ac56905ded808046091ae7e4c2aeb7acdb1ea13b33a9b2f","daa736d7148bfd1365705c2b80bd7ec93590ef5b9be17c755b16e4608ca53630","58be8c37d7f1d403b92ba8faab86ef91ed383634bb7949d05642f61189786e63","dd03a06d740ca691c70fb1a5dd69e4a263f16e747395d3430eb4155f26d198e4","8b6de98cf5e43b25f125469e0c6687b08a7877d8267b0b5ecc80bf228f1db430","8868f2ba03844e9aaa9eb9d64b89a55cc530b192b51af4a4b51c1cf50005d130","9492181fe15fe064c6f00e589f6255589f6888a9e308d7f81e7369599ff7f930","9881f273bc485e56afa1bad56d2dba0a9f169a8a4f74a28a15b01ae8cf8c0731","49c98df58b734672894f6f08d7c13f8581fb61c0429e4f5cee2b0c95b9f43c31","2acc5cc9a80ab183b090dbcae5f95310c2d68f8296f51970c2924b4709bc14ff","a6e3191563da63b95ff83fd1515367b6e18e5be5cfbe174b52433eb3db966d31","96ac5e976382f2245818467dcb946fbf9777d15743e4bba651fbb7b0fb81fa31","4827276731ca03c02beb43589716a1daaba1e4840b35e236022f8da33598e745","4df6a5e95e024f99e3a660fc5b6dbc1bcea9dd6c478ef179de9df0d8f3f64a32","39818917dbd76a39c1e510dd115fa1bd23bdc1e1cee452486aef7b6323c1a932","5efc1319b0918da75616ccdbe76a40cd1bd5af9b4fbbf451160528cff78b8833","46ccdd482dcac7e3921ac1f4dc5750416a533451080a166d305209215844e09c","2af3731583bf88a6868078789cb780ded75c67791b4168d93bb6a17a9be93f34","337095fe7706dfbab2f7df4c2bd8188321114516720b70654fe09493906f5334","3d6579f86cbbdf5306822b6fffa0149de16117d08a57cda8ecab6ca060eb9034","1adbebcdced2400a286a3b21b19ef2d93f6bdcc0b03b9155decc39ab977123bf","d80df4c339a196605bfcadd328d900ace69a37ca298c944bf3fc0e26f7acf334","9a5318e05ace493359ada9e7b84ebf7813e3b23ba059e6b3f8306d597bcb9635","cbb0d627e83f4837897f73a9c315663a33445fbf9777e75a2c4fd765e6b51836","89bdb1c0b69a5206190d4c732c03c50dd1cfb2196119712150c4815602365634","01236498011e1b9d9085dd77cb6ac13a26cb6981cdca7b63096c35d11ebbc527","79af69240d69fe8cdffa44f34feab715172d1e7e9f4d4f68ed9f97d68c131a36","e68ac88d44fa70b6ee9315ea473c9034d5ed6776b2ced533c94d3abfa8492136","24f13aef03c38aeb210bf984f2947f352a7c7162ed9af5f9c19c4daa5bbb8f36","2a5416c5841e0627aa612fbae2380cf8c7aeb19dbf92591ad208c80ea52a7837","bb46439b9f8b2b86a00486128be2b064cd17aba34fa1f1a0c3b52b5d70b85e38","e2fbd4b833feebe76fb6510d5e193a0080068a24c29ac4870031708aa9320539","67647c9ea908895bf379d9fc02b9a0f7722ab00b1102f70bcc489d296519ee39","9e5e03f883c76c695c536fce6e532b89b3a228532f61166b54f7b3c3ae35ea3b","1c2db205e8da5aa31e643312aaf1d6045da6cec3869717f89338d3f48259eb3b","119de0c6b1e68302dfa12f3fdaa946e679b4742af3a5ae238cf1f08f37255d3c","b0d0011df6d74b7cbc473d2611b7d07ea3a1525a15401e4ec6f6d17a8921d23c","f9c1516aa63c068b1aac81693608ea9aa838d672b8483dec3ef1fa60b412353f","4ce62f945cf0fe5101ea1f8b4258698096cd14d4e1ddb0db0708173c83e2473f","17826e0c23e2432484faeca7b6e73db4162bc87a27991107597f6c83d53d623f","6412317fde75e5c25fd8ad20eb3cc899a2673a7732f218b574f5dab5bf96b93f","7f6753384a9bc6d1723b073e5f884f6a895326ca0a65928b9c715b6b03e95283","f9a9c5e00af0d4992fc62d970c8e4453ae3130cb69c8e1fa61c5af6fe463003d","cc4f8d51991b5c38c3f67b1b8c230bf851f5230607b282b216bf6c42314dc640","96a61be07a7d981aa0ac11b907fc28cc61308c16bcb3401e5b92c1ec28224c41","57d9854a9453b67645934cb09981439413cb24277db2dfd1c089467a9b786c41","27c9f692e62fbcf2632318ab872806ec8e9810a7402ede9e2047037325c87d41","1890128647691d12f1bce35a0474361e05e320bbe82b26903597c1169ff68941","3d9d50adbdd09aafe5d097029ebfcbaddf1909fd2735f59355d98f0a7c329242","778ab44e1b45a24579f5c90f969eef4471cc52394d7438d69dc7c0d15cdf1243","47b6c946c1f1ac90d866f796a50a32dde942c6314e08ccb53a4d509487afb143","ce6f3f333af177cae90361d130d06f46753aa00da804e3c14a06c8d663d0a7cd","ad6e513d0959507de90e709a2cc1653601b6a1959f036e635035c1b1d013b543","bd397adc0040f15782bbda7d73798064b43f8ac75697e57d9711d8caf73d10b4","f6d4c4824814deece186461dbc3d371d9bec0861fde081484f0fe883ee37e443","ba42a7264fcdeae789873209de06a29d7eac10babf8bbe6c8f0396ce90864a44","8a6468eac050e0e6e0b0c4b4b9c861f885cc726b0a00f656ea9878235b589a44","dc394f6d8632ee69ae24364e932bb1f77cd9787d2b2ecc8d47a60b583601f292","5be34fc41800d8722ade3ebcb649210b4b0dafe4cad1d10b03a1794b2ec0be44","52cdfca67f958d2e6ebcddfdd48915210de96d91cd0e120d76d4992344cecb44","2a5f6442c952bdd59b8cfb33cad5fc2b5fd80f8d39f43631f2853851923bd544","607a8dc27ecaca06429986dc483b48dcaae0206af0249a079c132b24014456ae","6382d186e1aa03abad15de005c40a7da44ee29dc21ee09ab10b2414da74c0b45","47f6d6725ec16facf946dd7cea4be88a5ca60da274cabce7ea08c565dbc94945","69b4517c0ec92a9a097e43220cb1fdebeb45d098350224067d7e5db9f5320d46","feaff465af33f5a98133864b525a6660b7e4914eadc4f3848fa4a034be544a46","7aab984fbc1ad354bd2bc908fa8c8084823fe3e2b34d25464ee5898c7db9ab46","3b1939b40d08551a044e365adad6964d17c34367505555c246eda56ac409b546","f60a2c168822687e415f2473025c9b4b07057945e3b5eff90472df9cebd8ee46","85dedd740643ed458f82f1013a4d5e587334415daff65a47a125ab47e9cd0f47","3c16366c3272c18c3eb236447e0dac6a846a2a295f40d855a64beba103533a47","10e71b9c9d09426e572246597f25ad5d1906849d68bca7d72bd4c9e28ff54d47","d5e2bbfcbcc869c34e93f5558baca285948f0fc38d4dd5b35e17aa5469f0e2a7","3e69e689d1b2c36d7f653a3b1441182a453869bc875086a41480e94be66ea647","0354369e5bdbd865c710de62922bb9f88c5dbe71db3300469b8132438933cf47","d8f86a17c1b7bea189961b7386421fa4494227c3da0ec970abe01d699db04648","3f309e1e8ec6a844be310d6e0cc72ae02c68c065063076ea166158ea8f2e6548","a09551007df8cd0942b27b2969745eb0f24f88e14ec2fa302b98ef7a4a7c2749","5fec8a13e1b22fe603478b61af6576d709ac88dc4612a84e1cc4586ef5b74249","59c13b0b2aa27e9ef28ee65cdcfbf8bce74dba03b5995acb3dae6b713fe17449","7ac6d0c9d5fad946d7b3a7d75e0c4a1542ecb9eccf9ffda260671e245d4bab49","ae5bf6f7a8845945b24a743bab107cc8cad2c8d22b8e9e7362dd3689c1f7d249","16f6734a6577dc3830c098e364d1fad5ef629be26f4997bfdbae9cfe1061e149","4cef63302123b40c599e7c2efac3aaf1bdc30ea32b075dea4eb1f3bad38f784b","0168bedad083dc80671f9fc07e657128fff422f1bb6aca8f04c683c075fd214d","dcab1b621eefce410f13c113e68f0ddcde28b935efee4a33baf9f3cf5224494d","77180dd37e939d3f78bf266278a77ebcc085cff45c71145d8a27ba49777c954d","8fa8620deccc838b5ad83d01b16624822724900b30378891a9244afb5c39cd4d","d59456422c1fea76fc1467fb1b242836221360f5dfab4a846ae7b1ec113789c5","0283c75c2b1f201861897ccfebe83c1763c47cb743f8d50330ee7b200981144f","2af04fef38814704d5185a709bdde68bdc1564da0b989ff253ab4c3e23c6ab4f","ab355c6011f71fd77da2c780d0766482d30c92888ab0d91b01f961ccf67317d9","4030d686fe411699c743420ddbab9cced2dada320f669fcc1901c6da4c059a9a","76198f81ad24171bbb5b84c47f4c82eb4ef50c95f6159e143fd0427b2aadc24f","09bf5ad651edec0debc1b395f2ccc88c6ed56007a4ffa2eb07c7e54b85fef04f","6b5adab96e7d3b49067814ca9245ac1954969dfc270c82538d4af520bfeddfa3","b5904cb565b30b1735e8a51a83339fdcc0c4893e9a0e9bbe6889da12ea887ef5","fbf696cc4e4242a96fd291c2ebd03cbf22eaf5e5cc343849809f0f166b193150","ff741437d3dd6272d718d48f1fac5708cdca6efd5e41b92b86db4a069ee85150","d34d844fd12cfaafe47a64a1df7aa9181ca16be348111fa048983cfd2a366b50","cfff4246ea75e4898f2605c21f9c5afe231fd6d58d3fccd2d437e0aea0244151","d927b3f00626343d7fe30000e265ee5720a2f129a86cd99a157c3929d7724353","0648c41d870cbeaac9a4f42dc06524b6895bd89d69a85100428d765eb9b27a54","bc0f60265acc59583bed42667dddb041ed852db46fc9fca70eb2474b71c42b55","b3ab70e6141900b55a1f47be19d98c05e5a23cf9646abdc2db1ed136bc7faf55","63bec5a83192265a9ddea1b74060558223c5f691a90f617928c3b76261771856","1d84299b437904f7066ed8601614f4a6ec2beede8e0e771ab9cbc1f077cf816d","9dc0d818556e20c4ad339804a20ca065d0d8c8961bba299973d1e6c596c26956","9efe1b01c54b2bd86d9e11d1b6cdd94078b2e5cb66b08f631c83285dc7c3a757","c3b0859cdd67ab15de1ddbd18d634975ed501f951e3e93d8f9716e201a1cb958","62100cb914f7c2021e7d21be0190fe937d9d5ee26dafb0f0cf9f028989394259","a462358f1cede2218b92f64059c40f0f78a64fa1d471ea51e33f0273f70e7759","9ba384c966228f4503fd8de9989eac2a03ceef62ffafc290a997c09865058259","24d1c8c10982da640941fe96c51cda4f88e6968a43a1fceef39bff17d6c9e659","d988c6655242ae8c0972cd220b4f5add11d9349467cc321afad05248aa3d515a","2e0dbbb584247a03a9eda79eb9cdeb3cf0ac5b138ee5dfb214f917f66131835c","8a400e0f911e8a641dd6a4bed83c7536a412412a73d4949a306bb43ac383985c","4bd727589e7c1d7491d53d0529321cd6aaab034cc3c242444bc27d91fc574d5d","57c18eb5e801f77a313e6a175900cd02fe086b6897f1cf56d8e8075573edc65d","ab584d783632f41b819a93544f9d6c056f3d74e437777924569b1497bd6e675e","274d73be15e468e4b6447a73a717759504c02117103355c5d549a7d4a5f0b75e","b8be5c7b9a7980e1065bb4d608ffe4901f9859b96a165ecc1c5c726a4126c45e","148c0e2f23d580f97bde2f232a4d6b0f90adc71111a451395360fe3b7f563b5f","16a070e71d5fb5af054eb9789f7564a89919a7acdfb6d03fed5d422d69883f60","2e92d4eb62c574715fc349609d0fff2b9d7c86f6d66ce1aa548f11331324b560","5b75c5531c3849d49613fc83476e38d14eccc62cf1cbb4aaa56ae4ea9a6eb487","ba4d1e62b904e0a4e4a06856239897cfd95cee80283cc3d00186b9057613d161","463f68b34691de5458bc87690ac0d7c9a1c99950721a1ccb84e3444b2d7bee61","6c89e5be06ecf8cc1813db03167bfc9c0b0fd4bcb1e9b1fcac5fa1b1ab180362","7dc87e2e39fb126ee8d3508a2603d13547251cc5d00a6921c0c51fe4522a3462","b8f855f09a062fb151adff41b9d6b0431cece374b43eba0820c569274fc73563","13a1dd822ad354ddc128b51707d4ebfbbc7f99e84c54edeb50b48eea407f4a63","e9927fa6996ca5685deeb1d4c60be562b7118caf179b238dc66a5b8b481fc863","5095e564ca8b65ff700fb57df2e9901b0fedb432d6536715efbac0295c584264","70c7ba0151d830862e79aa57756d3fa93e3d2c7ed210ce9a64592ef2edd4c364","6b49e297fc0b655e669f9ba097265fb662dda1ef069dead0adf31b95c1495765","f37ec171a9d98e4e2c92f828b7eeda7235f261f39b680db522b5511367186e65","db689d34ba39e931f71609196454718beb438c55f7bb0defb72f0edc9b578765","2c11d39015db2822373ba5ba3c1b2fb82601a0929a8b2c520622ad1c73c81266","97404547153ccfe9419f43ed2690f82ae9aef625f4c33ec8496e02dd6a93e0cf","449fb0cb95b4f912e5af1c211e6f3e2ec0efb52a943122b37b2c598c47663066","9787a6b31d1cc4ec5c7a83212b7188c8bb008ada750e43fc3d6abe7032f14466","7ac2553cb26d9c8c40618253dc32c86ece8fdb1f04fa60bfe02bebfaddc3bb66","9a8471438e8e4d5e358f1f81acf42a33e55ee44eed40cb641b159f42a07f2e67","0a4a94479b18bcb75c06131212aebc5f73b725ed3ebc99cd8380191bc30f1768","94f981ea171c224a9e3cbf8853dfd69dbf0e63424234daab1390eb46e79f6368","cbf960f7972507fc8042446b2f51285dee2516c75ff9873fdd245d08ad728469","d58c3b55956753c065b780e3e9b902fe76a7f3261bc6389864e7ca7c6b6f9669","f5d18ab458de682a717be6195af91baacd4586bb44f0dc76ce4d5dec72092d6a","2e3ade0491182e6d8e803bd95ffe29e98a7cfaf7aefa655306acafc89852596a","1d2c84b5a347aa69b39802c6ad3ecfc9010a5ed112318216302612599870146b","74a8909f2b4edad0a09a85e72f22e396b69fd3174d89e542d5668a7f6bfcf684","6db9e65c837eb894f1d923e21556af04ef80ab94917309940df73813967e3a6b","957471c5f4b2652c927ad98f4f3c05921340364bb64ea63dd737a390b08cb06b","6ee07310225651819d4272784b1d5b79ba44c0b1006c9657919e56652783266c","927cf73d3d1bab706e357fb0615d6a8e23bc6b61fbebefc7e374685205933aa9","ad9909c9f0fa026470fd5dca85c22d9be0cf5c17ef6b3203c74e26c195529b6c","3456fb757b419c2a06c9cff7cbebfd927269d583b2161d0d2841e6619f1fa56d","987525a488f2dd3e28bda90dc63dee516a7487eb4512b45f8cca1a6cc567106e","f5d5e9147f8372ce25a9d018eb23d2a282199323fe77586c5a4490879e811c6e","8587f4ed3b945ab7746ef893d6e7e32acf30a6aa47f6fa0d8ca95e8f15bb2b6e","b31c88f4598701b4112b743d1b4adeccd7d069a8e1fd5d8313a8bedc9de9d16e","beb29f413a6d2faae2251cd94ef8127d012cde620317506243e60b63a787de70","83efc264154a28a145a1e60048b896bfdff8707469111423b433e38abe2d1c71","3881dc26e09affd9a0a367084b51cdfdd9783feef127eab847874bb1b88d9f71","cd05d2db5615ed6370ec228f0d21b7a3b67a3993c76717a1152f48df5bbcd971","f2b28907f093626afd7b3bda758fcfbea1f8e6dd8e64d30303905c1e9048fc71","cf43fe3d9e8bca19cd600f3ad1aeca0edece1c505a069a8aeba83be849460a72","2b7c90ec384e1d7b96d9d868538200cf1ff2e978d7295bd49ec7962a9af61e72","89421275020955c6c73749c82ff68882689e03ae610f33205cc1d06db3172372","5d4469bf743c04e9cb7462debcf976034806b0cca9fc2a90d621d660a7d4c072","48ddfb3f9d5ff09ef8824189598da83db27102c81693bc972f2ae9050074cc72","2f0ab2ca53420fb71025bfd22d220c0bd51764367b2d8de8c7bcadf98082b473","cd741df4e1507e779938f76d7db66ce26b7f24fb1d2bf0a51ee4ab0d274dc174","0fb3fa31bbfd963edf9920d9aa91ee55d68e9c603d469eb858c76f10a977cf74","74adfe1295a1b932e0dbdc69614b7bee337849a3fda60248bf00570d15a4e274","3fdc6799a530e68efec08c50bc73ef4bc296f69a0f9cf4c853ecb65e05f62c75","5137afebef227047cb0fa1e40a91adae9008519fca2b3d83a506ebd285dfa575","5a70eb30e8c1c7542b4d81aa12c3bb47262bbaf1fe481cd9196c7f85e66b3276","e11b7f17d30be370d25c8eeacda73eb52199019c8f741aa855f67d6be6576876","ca6b7621baf12969ce632a7f37df9c0e852dfe140bf65ff7fb612f90da8e06cd","9647c0e6121ee97258179e0a28ae2b703799bfefecd1b243f38e178628738776","5666d2a83b7fe0cc8c8a5c17e7759e6917c43cf1bfebf46f91c5495d6af7b476","292ab84fd82cd7e341543f8a026cd58530f22523afb339abbea176824b23c576","bf8e53e0fb3b84947d47c5fec0c6353880b7a75cae045583ebbb8ec5ddb13f77","088908e06af4bf57d362758fe2d0ce7a4bdae7b78a06e7182f8d8b1269a6f577","79b1189d9f9122448fd26f833b7fa3ba647b9767fd9db3a3d17ece8cf188e6cf","60f549f37a29dcd016e9348f975480ad3652e54d71b312f5a1fb1d3abcabe8e1","617bff3a27090b77b42b1530bf2ec6acf9007513ccbd66ee72278b094fdc1578","924ac9705b8534c05cb400b1370f549f6498643f14bf1ae2a53b2528200c2378","f8e0bfe0938d94a8a54b69925fe00cd9494104670474165124cde371fbc48c78","1011b03108c796414aabc9d9075ea7077422ed9c6e870767be1ea8328679e178","bbe88a1d2979dd97680b10395927820d368f22a19917c7810904be1309243287","d002639f4cc576b6ac76ebb9a32c988c1a8c82008c3edf0dd7c4a097fca4fede","9777da53efea46e795bc19c66fbe09dc719e44c65148350e6cbced9f3afaca79","78d1c7cd7c69a084155c03087a5b0c0067071785eec2fdcb52c46ac969a0d47a","e8d69fe779d53d34a2dbd37176cd3b79c292b1170b019c0d397c79fcebed5a7b","7a7ee3709cc71e3272b74ddd3f8a0616b653683dc1e9c549d7d2630ab04a6b7b","efed522e08d9847ca1b90839a685e8f3a37a2d675677af8324c2d97d51e4607c","5399f989db4b866cfb8a69b7a2d59477d0075a79284320d5e8b856e86c94957c","42eab84b6ed21d59463d9371c57f8a4872bd2fcfcebd1f3ba1cc5521d627ad7c","3f634dbaa6e8c9116adb92fe767fc398ab77f8e121b47f9218c3e38c72cef87d","d09a9c7d2f0bbfb49997c754f8aa31d20f2dea09126929294ce093bf3150557e","9fcb4956514e333717e57613b1d33de7101a3657b7fd2cb46b8585b74af58f7f","706c470637a121c54fc26eeb90752236416aef9383e4f649b4eac78fda94b47f","414399cadf0f2fc4b34031ad18ef225290e13d255d1ddc5f40f1eb1ba6c96180","ee95552fa5f35cc6c8b6330f1c8ea3d9f1c5119cb99ee8f124113dd1648f2081","e797beb6f55cffd3397f63c85f7b342cafc20cc9e6cc909a4dd4cc759c182982","d60c59e79068dd62fe324e2e29daca99334bdb8eb2df58fa6727e0a570fa4a82","318247bf8e88dbc07443475b7357cb45fb79c87e4fe7005b43408c05cfc59082","629ffb74ff051f58f62d2216e07624b720e9e1d9bcce65ce09fd32f4d861c282","50d548c89215a9a899e50b8edbd27c5ad7159f31b824d420c904a6ac1df72783","70dc78324113215193a2c4131af441af69c28a0ee49c3ac6ece908bfeab0ca9d","c82add85e0e35fa2d97f776c8c0f57e253e193e5058bf1507d87732e2b455083","6b2d1c803ebcc9050b20f6e47fd8efaf04b5512a667dbb82264418dda4ed7783","9678bd4378eb8cce58d63ab3ee38fa1d12250bb9ef20058cd54011391985cb2d","f2968cb6d2c0a8288960b50a4f2cb5017316a69946d9e96eed5d3ca3c5077184","826087d02ce8b5d36aa0431865875c883791f0028aa8ac2bdee798cf80e2a284","b814f7f67b3dbd38a50c292ed92a661c9039737644a1833d64d1ce29daa59585","67fe77b2909cb2c29a0f53c2a958915bd0f386b58c4ffd18d998476b8b959686","7f3f2170a95b33718daf8026fc9d8b55d08acf7c6b73bf72e2201b352416d086","ac6ac92e4d3a450aecdd21f03f5ad64cdeef398aec1f1d6aa1f471080161e487","a781197f91d0ad8827d0045576ec033263359cb91606d2fed13bb758dfbbf088","272b5676a56935149bd15172ff119a884abfd2a302e12a9449b13dfe4962f388","57676dd5355268e8779d9a6eb1d657cfa1ba313f9d4d3215ded131dcfeb32589","4fbc2ebb95b3b6ca5dc789d094a0e9ba8dd1a5211d81b415d37de5a13fe52589","f720dc9677d1955ef97d4b0a1ce642c886da9ff7b9eddea2eb021b93e14b6489","1e8edcc126778eabe60285a7f386b6eb489f5ad4c6e137d1712245b77224c689","6b5a97abfbe6056ba121d0d514774c70b7cbb42dfd1697b5b05515cc50bc038a","a2cacb2103605f13fdee116c445ed460ce2732fc0a7f6a3642e551ba166f348a","3cc6473e4ad7d49ac4b591063dd7dd167c92c5ffc85612a9243717a3847ac98b","b3bf5ae3bfe1873584f6ed231bd5122f80e6b0a0eaa8e4c31dc1ca681720048c","53c577f15751f9850272761555714cc87c925cabeef83055c383157afb075490","1563822613ac2cbb84238f572abb77bb5520f1e18b5b69da6d194fd0422d2b8c","bb834071dccef63e189e5e8b319b0d2a93a5d2a2b3f92a0ab861112a637f0e8d","e60df288338f2d6a76cdc654f2087450eb921696f3e7ab0011e0e5e0584e6e8e","ee136cc9989a8a6c1e517e8b5842897dc4fc4742a85e6a6ad65c459467bf9d8e","55eecb39d9783489e49c79705a816b265d36171784fea8890ada5adf33a4a18e","b4193e552f64f0279dec89551320f709bc9cf7defdc31587ceaf7e06c26fd28e","026b4b0978a1c0304ecf92e78fb28da5daaba4b13232956eb231e447d86b618f","41864d2881a5d3ce620ad1d262ce80f887ce8ed65f3637d74e265b0f9176c18f","ec476c188d464403e8299fd32ba4d320dbb844e0aae4935a9f83e4a043c61d90","f52843d971b5603779711cc47b6a178dac1e6ced24d3a673c4aea49cb7767390","1e17a93a505035b81920d5a0d32913aec2a09a2d5b2b78e7af59ec0eb8222a91","d1b5d37aeae6ed3225bffb651b903d2b15f8f52b1b5f35e5c35b2b959e8c5591","89b2571df257b206a65d1a32303a73bd8aea58445464679bdbd73b4a3295b191","4597bed4acd4e076043ae517af1072b23e20fc3a268d3091d4a0f7fe842abb91","df30e9a78ca66b837dd85aad3fec4386786e626bcf51b9a3c15b49c8e0eb55c0","d093341431343daf1b192f461a5b8d46a57095f4be7328e6a6fc1b021539d691","166def833924fd7fa2f4d73f3249e9c26bfcd31311f67f863ba254c7f5a5d691","6fa793dcf77f95d832f9b25cd6d6e775ea09e78eb8f41db10df8c229ecf67c92","7952aa777b6df66c079c3da381fe9f1c0c913c527c74ed81876e365146157e94","a5b05d4c5823cda8b0e4f3579988e283c7833d441a8198b2d62c7752bf7f9094","5a71c6d82a734508d18f7fb52a9d9257d27e7d0e21e460cc698431aea225b294","44d092a10a1bc4575abfbddffb6eb9b9e834a714b686f94c515861aea5f8c995","b4b0d805b432055737d049a9a39cab23ffb28755d0d394e0f8c90fa11adb9f96","425bb3af14467ebb117c5038c7478bcb8123c1096644b6dbbb03eab8db1df396","3dc514c6812126bda4b9aa676154e1c793c124b2e2613c6230177e8790b0089a","9d59f43cca6a41d565b7cabf478726dd5cd37dfa718d621a0eee6f1ddcd4099a","9ae68a1ba0fa33ef7f6ba91ee7aa2cd7c746b5f06c80a4f4a2f8e7531e69449a","81bc04caba948314305055d70a6747a1de4e3d15222023ad21019afd8d278c9c","ea7fe6ab19398c0cc5096a21dbc55be1d07323614ffa333e0db6e477db06ba9c","4de17ec818d0c8fd1ff4db23f6b19c318a489aa4ac35495f5ce20ae3e28b2b9d","77123eb47eb724dc2188cf1e01bb2a7e0bde915d74ba9a5e2106f1c46853249e","4ba525892de63753651649fa6a8d530208420095b4a1a83366c51dad0fbf919e","ad17bf13bd5827f57c79bb155a6d92e308e6588ba3df002e49a159cbc7a19c9e","7b2f33b78931089c8a62d09f07a76a779eb12bbf2b6eaeafba51e467fdcdb99e","18f2b6b0d3e61edefa9d4a109f1566aecbc8c23c989523eaf1d2a7297602de9e","e3be3bc957cc080f7f41b7ba64a14605a76554a91790ded9a9c44ab0dad681a0","3ab27a959656c0207c6c779077169892eb172620a0e6a8b33d5019ed9b9fd4a0","7207b0e22e6a9e145b3a44c845f1ecd47cbf889ea2727f86a42ffc9d585e48a2","e0449a23885483a1553a3cdcd67c9bb900f369e5228427151cd669c5d6b458a2","dc615b89b79c5a9e501634683b22a1ebd550c47fb353c823d3cd0fe38ecfd5a3","0e46f7e0683d6981600e2aefe92f6c0fb2e5ee1746d9130f918d0056ef1156a4","ec8d71adce648b6bea66a5b57f96458401b7371df0c13df9a4170f84adcb7fa4","07d30396e21b687b61bf47e30e41235678cfa6a89f8c8d7134e53ec3913c87a4","27e796287b5517f3a312de79ac9a1e8e42f2397b703a8df65a721cf286e39ea5","818a52e059ed27f460e860157e4665b1aefe0ecbec745466fae2f25b54c6b3a5","c4acc92729a74c71b89190d6cd915b08c5d781e8644cd6197fa76ec912f55aa6","a1b395fa63e236d8dfdfa26ba5a64ec37129982ef7a3698abd5f8849e5b9d0a6","f9ee5b645552f44d84bb534d66c19b2777d8341d286964961f9921ac1fb8daa6","46165c7341a21e41faf82024ccce7b16a41dcd834d67c1ee131c7bc755b41ba7","ca2e2d594430f93d2782c13bc3b5121f91abd8cefe6b576c05f50069178237a7","7da212bb010681e1a3dc3265a7c96a690749c208ebd675bbf161d240bbd979a7","372016e65329c7ea6e7400c409b0ba0e8fe453ee2c24a28f8f9773bbb4001ea8","657d2e302692d1591c996210beebed52cb7846626a3deef81443b0ceb7dc4aa8","ae1b931dfd47b13ca3e4a6368acffb196e244ee5b2be53f862e741fbf04453a8","04b20157917d28b477ef19fe8749f57f1eca53a428344450e7168721ec9893a8","6f7ebd02edd2f4cfc2f978fff8aac7b6a6d6940f689c5b69cc5fb53778dfa5a8","8f2aa36613e13a8e6549c5277d4a4e3fbdd81de7133e24523530a225fb92f6a8","f448816222d09165b73d2cef5e6c1c322d488d882b6383acfbdbe89f0c2c0ea9","e951b66d61f30b642bd788542ba9795f67308e7f5fff33bba8bbf3b7d80135aa","712b351cd8c15411abda9ea0869c71955798ad97caba4e939be1a5bd9f24b8aa","543b9b92883b926fdd6683a8392279682d902f4d1dc207747e7109b3e928f6ac","7ee2a050b4edcbc160313d088cf1ba9b27d2a6206c87cc133b7aed64251e54ad","79065d5797199551fe8fc0ec5b0e428b4db6a3051ac88a1945c143f5268b11ef","cb11391e23004683adf2ba0ba554ffa572ce68491ce61de37ebb2baef2e870ad","d5f153f5587705c9f5ee0275bdb5333d0285a56bebc140b355c56941469172ad","49d9723e6561ae932e449d170796326a05d9b06755f541a8efc0907ae98679ad","10ff60d1488d68166e4410860bf9947d1a8d14f7bc8d9eaa642dca12dd80cdad","ab2bc213f14d7ae560bfa5f4b079875bfff43f1a5997dbf387014365f9b16dae","6109db1815015afe5bc161548bbf4b8963227f58a3d8f7d21548355c7e839fae","b5d5a070bb12c3b986fe370f9690db1796be540e15a9b66479b3d9748669afae","5a8ec459f53b2dfd6ba1bdeb01e8155659315cd0d07a70667bd11549adccd2ae","7453336c4cbfc8eb8cc92ff31895d63bc1927486688328d1bca2eb70067770af","7cf6902cf8c3cfeb62302bee82f8c0ce66ade81aaf3fdacf75e7d566fd5783af","1198bdac6b3e78c911ce6313dfffef19d32822089b91f186f3ccfd6f6adf32b0","f61a913d76a6b078d0097cfadebb2eae5e0a9a1fee67c3241193dbfe0c1375b2","74d1d5edcb82f6912601e2af9a2e3990c543fc23347bd2fd408580d39d7cb0b2","a677003fa74a9e8418b989bfd01dee6c305143945064d0ac25b87cf8ab2cf1b2","5517fb1459c59e18c50ca29e901be8c07e840ebda14ee6acfaf95d3d86a009b3","bc2226f04965a301df6e431a64ee8bb169ec362ceb659713ecaf4503fe3914b3","55cb19b83381197ca7efb155bb812b1c2863ae15ecb372b7a7bcda73b40b4eb3","dce99ee6173383cf3f02b9e4e6f0a00f9dd9387fc8d8dfe79080a810633ab9b3","1abdfad7b3f0ceebb254e49efcc4c73de75d2bf42e24c3e7b784081079200cb5","39ae5ec5b835e3df045cdca84f45c6534dc26ad34ef184398ff8dd13b46295b6","0c75c4e098ebb5e31e89b98582b06abc5a8e801441655c649e5905b64ac6f0b6","b91a86378464e5058af42717cda394b8c18f57a79f6614196876f3609b6001b7","bff791379d79be9ab95c40c2da499677c5f139a48961317308aa2f69936c03b7","6b7816d5512f0b3aa33914cd4c7795a05d99a9215b7b756a2b88964ee7b31c9c","942f6065b682c9a570662e6b9893b66726e860bc353487c8ea26c5911b1b6ca3","e56733241d7a8292db16ee26733f70b78b1a5236069e6a8546e70cd1a9c7cbb7","e46624a6993d657d34ebcd171b5557935c27c4b8472181599b7ed8108c5deab7","687a97c3e6a3ff7d23178875e3d0635689e8e2eb8f593926caa8aa5338b538b8","8e5fade4c1eca096c7ce76ebea6d420b7be0b5e01bd9d8c9e06514f2a1b889b8","af68ca68aab7ed037b9868f7fa2872524e4e2a890598f2b3af6d69283b5ffbb8","8cab80b43f7205561fd34a072109b575e814f3777d03483fef126fbb58e3ffb9","722ea328e3ad3e97cec6b35f0f291cce73be00603ab4cf80eff86ff24ed0b5bb","43f062ec2fda90d347cfa83d7c3468eb503601ca86c7f9049ad3cea43fbc01bc","c1836978e12e34244d41a0136ce52c18e0ae6b1495d244c2df593e84d1380bbc","583be8edd196a5a5038f647ef17b3892faadcb9ffeedfb84144d2d92c058aabe","5bc6dc57db607cc1f254af37e1e234886567833eb5669b8fb48b5495247123bf","3b71e7dadb7ed095a453eb44454ea34b1c816587aba1dca72dbe44d619288cbf","86d5202ae5cdf78fce485590a18fc2b574d5af77eff388e4d6c4d3b6894d9cbf","d0b3f55cf5017a892b1d7c01f7d4f7122d8e51f54ed72bc4341e20821c46e4bf","3a55e7c52e84597a8e6553b1dff5144c8a3f7ae71e3b2b9e959e124769801ee0","16d6cb0f553611430997c0152b2c1f3cf8e7a4134f8e739784bd457e80908bc0","6d452546e4a134a95eae195727729af930029e902d86630c23ae9a1352e199c1","80ea05807e2559eebadb9fc3a5dbc1c830f90c1e72301e7892a54ba04c27f1c1","c4c375d7f16abcc3d86d9077d9a31b909374d64641824b03fea39953991defc3","9be8f7ddfc49ad772aae8a6d8e1e83e5c7669fef39c18d9d6c23fb3eed7fbcc9","704f78286fa7104b3a0d30ce23740fb764ad3826f6a5a1e347b75505d0512b9b","b5020924547776fa10f0e0336ad159eb34bcf6a021f9e2a3cacb85b93e9c10c4","ca4c87fad113e5a769b6099257d5ba94ed5ab0e5e52ab46356e729d4732959c4","d7f637ec91d2676f654ba45b937bb0a5c6f16bbcb378532e4b2076c7b1df5dc4","c7f4994dc3ca5ed3c7de82f158b84072d322cbc363c25f451df7aa30849039c6","64e58b88fc9b6f6ac71b02da040bda4b69c27e8cc4ab09a8a79fb6a61ffbc3c6","5d5c980576e2dadd8371e57ac7694116dc43883cbc0b0691bf5839a5c53c07c8","b8fa4f11cf17041ca95965694cd98c0203a093c3af58220ce2d6bf0e16801eee","012ea56cfe72b027c915d4e5c6ce50d58a6eed5f797ace9397d16146c7ab2dc9","fd9c64f15dfaff94713e4d2e363a9d6c3ec46220bea901d4d16cd1cb70e474c9","7be05b9f250ee71c0509f46fbb9d31e6022045dfa09d605ad9b8b0c3e40417ca","662b73c051898c27e0cfa6bfff05a3fab3221073f03c7a37b3936a638349e5ca","d04faabb337b4251150b0d5d8fda73fbf396bbca9e11a1f42bb7938eff5f13cb","7f242908fb650e3780039e9c0bbb972e2eaa64b96028590bb803d9e517476acb","795184f051210e84e11a21e6ac59bd00c3aea0ffbc26d4acad5862de4513fecb","945cef87180b742bd0ebd35f3b73f1ef5a5c0907fd11cbb5255de79569fd17cc","ccfc37835f0b66b3a6a1533034bb1805a4038d42708122b6a4cb2a45f34b89cc","270d9e853f19c89ee41b2c01907f225b91f28cfd72a9661a957fb409525435cd","3d0d349389fb97e7b58ae56eeccdb2c6866ea133765abf7b5eaaccc03ab89ccd","5f47e2c1c17d3bcd4f838cb081605ea2207e808d4618521fc4c9cd35cc2ca7d2","cf3ae35a0c9fce4525de48cb68d6e00720ffec4b4de770fa5091c185cf1af9cd","4956d5ec83b67ae26dbdda99c74a67683ab113628748b0219e2f6ee4407453ce","f9681109b2686d057f91fb8c29a07652d74df0944f946ea510862156fa1cbbce","99e2617c3809c1c7bbca935ba77760a3d93b2b0eb1d5ac063a1ad319c7782bd0","708834c80f4dbf5ebdbe96c8bc5e5b831fcbcf0381a83b7674cd9ab1973596d0","cb9ac58054aad406f44a7a066ee340ea1fdd38fc1d1ba1d9e280dbdd805051d3","7a5744da361be224c1c9f52c316bffd6c7d0c821a1a8f5db1edf46e36b1600d4","02b0c8d089e24bdf1ed85249d072950843d5f0bb87f086e557247c1c3bc7c9d4","1468aa2610f5c32924d33c8ed8af934e98c267e9e625bff6547ba0071666f1d4","b09c1aa62902b600d96c17df8b03f582f9fd60586e5f4392949957a34a1c66d5","5aff6e5fbf5f07ac9becdfbfacb283dc376684d3f792e270119aaf4fdcda78d5","1b91769283c3f1ed1aba9ccded75b480bbbb98c83dc2555b00d83ad9f8eaccd5","1a36db019c4647cdfff6a991a40b7aa8d7d2126aa32bddbe366634c4e130f0f7","45cfd3f3a3458e19679ca90ec798606484c478277c6f647eeb7a7cd915b136d6","361e55719855776ece8593b617bcaa6a6c4e8082f248695483c860fdb6e761d6","937b887e059a3ce1c1bf82ee9326e492a6d32fb19adcf45ff442c043b11b6ad6","d39f64fa7b5a846eb2920ed4ae9cbe2e0f057ca22a39419e15cfb0f980b938d8","17af2a9cc91d93102d5c0ac83bf8d31747c869edd035882b2041489ec92decd9","e93626bfdf4392af56cfb1af671a5aa4813090ceee963f373a99e73801966fda","bd32dff6212e340f414138312a79d416b3bb3a0b0b5f823d996d3fd5d15b4edb","b61b56aaa1135ce1f5b4a061444519b1d20e9f120b6acd804f2e5e6d2aa2dedb","d3dbb8c9625862b5ed138bd8913854235ce72c9066f99910a473f59cf19eeddb","4ee5ecbc9c6905012ef38b6c5dfe464803b82b9837e9d1a689571610c5d131dd","bc9c49602c7a60304086a0c5c392f48196014d91f763808bc7b09e76a901badd","0d942ca08811d78fa8ea63ec8b60e6e014d929ca87c50b5d6b8bf9c3833a71de","68f58af7e3dfbb67bdb9b0e0accad3de497c69100886c4b5cb2e7cc0054ad5df","ecb16b530902179be4d0c1ceb3e9eaef5732f8ff4b3eda26720db166da8befdf","58829e3c913c2407e0eae16b3aba4c8c452ce80cef31b688f2e6bcad0e1f30e1","c1bc5e46477eb0a0f5becba6d6567e6e097e2fa5cf1c634a96f2ae4235d364e2","b269817258250434ca42b449d54bef4840f2155ab9edb28590ac2e90b429d7e3","579121a28bff1e8f0829589ad1c47d727f6a8ab30f25b2abac6848c3248629e5","9553af47f47b52e7b07f7bd7ecd87376dbd5135720baf31dcbca5a4c4b8ab7e5","68ff76e07d111a6345838f91c13de16e580f5f21526515c00c29a071612e04e6","6f57a77d5ce18ceb06e66ec4824af034a00ef36acafa5a9731f4f6cdb13b94e6","33bf9e37d4117e982b6ef456bf03b927ffff6f3df3174b36696eb4faaacfb7e6","79b21968a4dcc27bea034fb92c56061df209a3f8eea8d79b089b261103fe7ae8","a40843418dd7796b38bc05bc20d6e3848d8a1572e7d2fc1b5baad2fdf7fccde8","5c4e28b447cedd14b4cc4dda2a7ea24af5b28ce94288cadb5dc1d2afd65d32ea","19f92c67f06e607cea92f4d91e9806e6620f4428251673e32b47c5aea92268ea","e8ae83ea1a2ba94a8736262bdf97af95789290c89cf4c53ca64605c06232beea","6a673f31fd75ee1001ccd6752d163b90317b9676b5dc305266b89fe113bd80eb","204aa18d4fb6948f604b6705f45457a776e3679d571ead2e44c18b724ee29eeb","bfd6e011bbc087baf3d9ac61f926679afebd40512b9b9ad63552107ce1d5eaeb","277ad5c019c9c3c8c49cf21030ff15ee94e00e0c78612148a10d9c2039e1efeb","918bd2698ccfd1b2f9212f590b827630ec68ec71e34f5da8a1356e03bee495ec","0dceb75c22cfaef0fa37f61fe72a8a6d0073b11c82bf65bc6a7ac3c94e70cfec","dcf2d2ca149a6ab4ef652e96eb42f5142bb7b6b7db1fa19d0b6617a06bfa2eed","cea9d2cf1f29d328c2385d99ef072a71f47c2567297be82aa5e5ba36422695ee","549b982be8b117463db27efdc9573aa72f61d5f7e4b00ffd299161f166ecf4ee","af7fa4dcf60bd3881d1f3c2c2d9fa3992302417732ee899beb843240bca52fef","7f4534f2e294b988840e9369f24b28b454fc20ceec0df7ba1a8c301d67d666ef","18df7c2c2171867ed74d320beefefda9edd9d4feec339f984b1e3aba4f3665f0","1f920d62459799a88f5306325b1c458953ba5ca9ff341016acd96d806f16acf1","5b5a7cf2d17ef677857ffb513fe2acaa19d9faf578a9c8ced3f1227d4683cbf1","da3f406b94fb2fa6c17b7e51265c7ca0ca9e0cdf66adf812eba298a69033dbf1","5362a1c590070f88ac1b9b4ad314e7c83c5b27603891ad3050d0521d79ee4af2","a08681d782e128dc2350625b8d0dc592df1c169ed5f0ae973903117b524ba5f2","d679f8be23ca4432260e213a8e087418b49806fde112229942d6f0b02c67a6f4","3bbbfe05be69b81018058f8c6213c63c3bdecec5a6c8147af14f3b541fd0f8f4","ceca56f584ba454ba765212ce3ec6c9b3ca9cc8a137830a0f911716e061f12f5","049ed2fb5c11a260242c69071f8a83e35de54a54822ae760e098e019d98880f5","adc728c1335577a82c6e005e2cdf681bbd01cb6b8f618a544fd7193c2b2d84f5","818c23e4b925c8e17bdf788e15741b8dc84b1550ea9b1c5d9a6e584be1a49ef5","a798bb229243cc13c4d6ba2911e4519c006e63879c47962125b7a11364bac4f5","58a7e19113464738bea737d2e15998df368675c0abcadf993f196032d5cdfef6","f2f0f8d570ae479b07247d0c6b5b1669959363c0d9f8da67e13ae4c4310ba0f7","0da5238efc408bfc9c7f754ad197d20ac0ab57e1968634b7e79f6f6cf6a3fdf7","4195c4a257a922ca76086a94b09613a8f7e86e628d2809425fae3961fa9d9ef8","2dde1f81564dc4acaee2ed758883944de23e6b6f2cc3ae09fa24570801a66efa","6b593a55720c48b5a2253b55b087ebcd46cdbc720e3d19bb81ad452f931f98fa","b169a43b2bf82a8cc7761e0f4c62bb2c1f7155ce97b20d138292f5b8bd6809fb","2fa960ccfed8f6dbe5299e44832654a233d91149f09d456d0e17cd11d05e13fb","b002b9608c51fbe9618720eb60f0f194228e1b12acfff40b873249b301e320fb","27f94df12ac0b351194cc6a4c102f7b725f94fecceaa21f4d725c0be4cedd9fb","fe0fdf98dc4b07d7757d5e7f0d760e80f6909bbdf1975fba266b4774ed914dfc","52a3267adaa64001e14152642432061c4dbaefc25f5d576dceeaa5b32e827dfc","37a807708a1ef4646162b5856ffe040360d2f6f15651af5e5262ad47c74168fd","a6890099a56f344a8fd9524991385a04c271b684e65df9b8a8b8d1e0ae2b70fd","7851843bab29cf08421da7ad1ee7743650add287e2fd22e22e602a4eb638acfd","a8835f35d074def3ed49f9b2a905eee3c881fcd8da757e2c6c446560b299ddfd","3baf69413830c1adbbb4d608142cb266081c19fd092a8153819331f6f4e6fcfd","67af31aa80fd9ac060b19bbafc7bfda46fb3af2c879dc39d5c29834a44710fff","021b7c5f5210cb5ae96d73bcefc360bbdc74159d3b27cdd89b9727dae7752cff","1d07c41c3dd984229ec13d6aefcaf7cea8817078886759f81371238df83563ff","25c8ff2c4d59551a43252ae91acc7fe1d519f1721dbfcb56ecd2424324ac8eff","c955cdf47873c1fcaaf4c25c3db13efca07fcc832165d0564670031ea643a1ff","7bb3530c7fb6c8b96f269861660ed8105cfefe38be56c241c21dd0d4dc64cb22","048a9a1ab93472a23677c7f9009612d91be53181517a6c815fd87bdc787de135","b12eb78e1929e2a0c2e63fe95ce3a7cdc052850325c0e147436d2e4843670847","7fb4f4650922c98b0bbedc6180652f7c8bd1f82692608719d0667218e52e292b","7084ebe88f15d7cd36a2ddaeb898ee3bc324cb036ba510cbe07c458bd5bf9b8e","e2628cc06c90014fa2c26998f1286d1a63f28b9537f616071d4cd3bb30b71199","004f98742922fa4c1d3a6498c7ec3037f456656098970f7f4186213f389fd595","b6b63603090737958f9d872dce64395752f02361cd62246880f33de35b09d9f3","ed7c50d68972dea17d35ea4ca9686a7ea1b8764d60096d505fa4256a168baecd","ef9cdc48a8f47a7dc2aeb7566b540965e5b8bb5f7341384228b0474a82ab1859","074f7084fd2a2d7163dcf6fd8e56a270dacfe618b843ce469fe9bc18ad8fa2fd","4719875c4b1131d0ca6f6f87fe070185e8134984518b929e28a811147f93f347","046250b6de3a4f19b30257180d9baf65c212e1891cff456ebe9d693f480c0f7a","74052522b88ea5b0b233aa251b37b97556963aa975dff5719a403fea8763b2f1","0102400afeac89e15df80eff9a79a432b31785b9827f45877f0d064ebd560be9","088a91b7fe9c010522c78c93f6be99a25b597c6c3fb3550bc91f6c3cc217d730","c7ad8e78cbd889bb1a2f57625a07891262504c0abf9e34babe5c29db22c423d5","33a087ddeb5a5240ecf123c358f8a0136a5d953bef181e4387bdf96e86b15ef3","47d7a83932dd3d2c2a7b80f7ceab9b551ed32af42b597dc11766ef1b98d6c74a","95c4af42baf4159c2efe147b3d631bd9a22aa7425b77da1b0a7468a83ec1a1eb","a13750a2ba76776276b251918ef86be7bfc89a1e6ad13ae7dafd42ea170444ba","3057866745a693bd8f98286f2d51ddfa5a951e6e832c44156bc88584bf4b921a","c3a9c18c84c2d55489639ebb715b316971c44b7d2e0506760b7400d7f330a5d9","f83601b482716f963746c8f734bef5a0bd072ad22f102c40bf18bdf0ec89db8f","e1e5b026225bdae74f1810abab2e76f70f3d3e53102f4f10f2eb7d963d11a5ce","6c4b12f9de373ccb0faa79386675f719ad805e75d6614490d1259acf0e40b6bb","e03d18f9137d0cca77d83347617d34f8c81bef366564791c0efd915f479b278d","6efb492eec3ed1a3c17eff322dcc5701e4b19951bfa8967259810d4c1461a955","d71a8673c211cba54b82db858936077cc0939e295ad82e658934c90ef36d35cd","b91a1ea059127d803bb308b4e4edb47c029dedc30b3ec27e74bab967ecf02949","0f7e82752bc4717b27e65506c72be684c6fa6c1b82b08f588914c04b50a17720","34580a40696b8baca778d022aeb89c3b89a63f35b3ba7576691ea3aa0d56f887","b9acfeb1592be8caf1a8b7dc5ee7e113159afeb904a71682858cc8d461d74f94","5bdf02f696c3d69badda4bee508c29c13b25993519d8ab1e742858234f489fe8","3c00f3c9a8040c60dae219d85a3474259a3b2c141809093d070677e6b8a2a8eb","29454545116444d110005e0caed4b3c29544f158285673dd1d4f996c75f490fc","f9f66c0e82a4d673d5f29fcb1da663f6379f916b36027ea25fa53b7a23d93e1a","aad92689b061495dd8b6696f0394871f0e0d3c46cbcd730a60efce91b14a21c3","1671c7587e87be94c87ef6ea5f467f22c7679dec3212495d1c7169aa456f302b","3fa0929c5e94f2a1104d902cdfaaee6fd5c4fdd03c6477c9f2a5125f2bb7488a","2261f9f9a09e833d954b0bf83e15166aa793221653f37522b180d67dbca364a5","a0851b8dafdb3aca03f51a23ed6a0aba62528f6e13dd7a5723951707c3b26a2c","74a772a1ac87c8c4972f1161b61d6b5f34b7e9699fb4ef1bdf1cfbb1f9d7f330","5b9b2581ba279062e0338bf3ed39ee87cb1f71998c533e2525399259cf3d8eba","7d71fec165ce44eb0f4c9cde0494ef06af58883a8cf5a759c478a0c1c0bac808","f4dd303841c946c771f82715aa4997d345a7fc7b2788f928b28ea1e998584db3","7ee481309d9449bf1b4277647c3e41d5d43919de8c5cfc03f8bc3632bec1456a","0896a1ea99a98c042e70fe4de05633dacfd2c25c11df61fc4b7842eaacc2b9a6","e80f2282a2746d88b3e248a68e2bd463bc078c572f94643458997dbc8ca49312","4973e3f793cc60ecfe47dcd8ed53289cd5a299667fb879fc66ff165aab3ff917","e2d16f6ae69b65f2229100b17f09edaa684d50a84f49a3e27faa19ad6187be6d","5a1ce89d29d34fec37366af282cdf576749e2ba8decd9676277964e9a590e3aa","d2295dc9f082c053b6b9829bac50d95194b9c056712ca6fb097d675c46b27778","efbd97f8abb449c81729214a976a1635a9eb7ed081b72b557389f8dac8a439f7","a55a1065d14773f4d7627030454d754dff3e5687cbcdb72b0c3118e16176a1df","342706da0c9c98c7d034a02e381f996bcd5d58635cbc6879b0e9248e584c2a90","f5af37ba61473713fefff5dc9ef900793518c42fcfc05d69444b8fe0e544af59","61c18ae9a6d88f270656e21f8189da9ee2b8d5b7ac47bebcca0b0eb67d9f309a","6472bedbd104df322ebb07639a8abe657a029723ee376da6e7118d4200ff90e6","6b8889be143ed6f8e5ae056aba102363e29686adf1a31ac5cc263ac985e0b59e","6f9dbeb8f2ddc447ca17adf2203c75b056e6c90b76ea10c85afe2403e661510a","294dfda3ea61e7f537d9f9ecb9c0b4f553f0012bb274b6f57f69308e00e2cf14","35b74c79fbedb9a3896a050c4c29e9ca40be82a8d2b12e8d3483c32fc836ca17","48f23ceae0958897f28678f0e8a2927bd4817f99063fc70576b3d7650d4f6f25","bea2f1af445433d5ac65ebff260ca81902acf4e4eb38d0c027b5fdd6a08b9694","734f7958aabc3b63778648fe360883ddecd4a37093d664e2f4750c9b07574d97","cac5faf5f09b5cfc3bf60065ad39f79359c92d124e75d55b5f81d96d8d5d439b","2ca223d00c728f632ae05f46f531c4ccaf75a461a05769e3db42f78520fc2aad","b8115f8cc39bb112d1be227dafc130cc46f60d4cdb9c40eeac072d5c4f2020bf","4ef3190e288951ac11fcba0e49ffd78fcd32e648ac23fdf803860de3134c8bcf","484845d40a24baf70d86af6336a061f8f9b4a4c786461f0b45712246f8ca950f","8ac7a7970468a3d4a9706cbf53d4955ddf67168fdd2349a0e2242d9e6f6a0e55","81a0f26c4023d48a68695f1cef89ff85492fdd03ca28e7e13ee8c9acd174e88c","734a59b3fe03d183f45851025df56bef322c19303407d229aef55c48dd2497d6","3f6b56286e90e71dc3b31e31522108597dc8b504bd28493426338cf1fc896852","f9b72da687ef5207396935f4511af94b2ade60aca4d19cbc9003fce7c1aa0f97","46e00adff4f9c153cf93f10eec3998f4808182019edc6db2da827858bdd80245","9a87eab94a53a99e847eb932031719c74a38cc476a843f3bb201982ed3e7c647","dba22dd8fe911336e1302e94851c67deb4ef56eada91883b1cada9a6c2c4f8e0","4ea976956c4e0a9b041adaa2d3a323980c1001ca421673dcdb7a69b77ecc9546","8b528c62363d994fb473562f1340b264ba38c20be16f414990d9e9e957e15aba","35ab30999279d417114d8d50bc87d382656c93303af76f57dfb16e8f70419b04","b02ec67301698f4867f95fdc5d9d3f4d04923eeb2331a1be4c51b1d7b15d2e10","daaf72cbc5f6dfbec91195538f416ed6c04504fbbee38944f5f6f3c1527ebe04","4c282be388d9818a1a7a7063665514b5d372a603381a5d99e2c88c7eabc073a3","95fe67982b032f5193014a5e6c8fd2166f5974c9fd9616b24ac0461722523146","a41efa33959d5eed7060efd3cd0988100c0efafc7a6e4154a30cdfb8bd0e37b3","c86a982a9e2d103ff0bf72540406023c24db36a269846fbe376669c5c94f908e","9dd35821565c67616bd5ef7c8c9503581f13bf3e5c61621693ebbc965c61d1e4","efbb49b498c734d6624a5adf2a584bbb2cdafc3098c36f12dde11cda825556da","b33a7af5a51cd36504f0ba02c5010f8544ff9371feacfaad5e90235125c36e65","73e8b82224ee0807a20f70aa115af839f2e8a6a61e1d466f626f496678e948c7","dcde67efcf72758ba869122d44ffb7a2717dddc6ce9fb6e1ad53cd1e5c3ec549","1e7b576628dcbabc12f4a1576efac5d987877e6f235781f0511d976dbac72368","f819cd73ee56b151aa62f4ba5f9f63deedb5af71976c08a2b1fee9debf72038b","cd9a63f5469cb466fa9aaaa15dd4686ffeaaf08918213034fcded15cefe961ff","2c78ef034be974f2ab5242e0468c29d80c6c63358583a7d66ccbe638aa85b4f0","626730720f1ed3c72d6349df1cd9a6d151a7e17ab4e3dcca419a876512cdeb23","05d38e8363fc416e5c158ced0e4ffc9caaf60406a3a725134ec3cb07ded6c03b","455ba4a7f72417b7e8156cf04a59bc5fab546aa238cd432061f5e14a453d24a0","0962d3bfe4fb9dce825afe5b5ea3f4efec5f07860e567ad37dde4ac4e59801e8","4659325d96fa99f36fce321dc5633df292e30a5dbd4f25179977eee94d29f8fe","9d8675fd8e4542a7ff48d76f408095fa488139a8e91bf88f2280b6ecd1f7a81b","e5e0626191aad2388cb272733cf7a36aa274c4520f15dc7fb91b5be8e65d35db","4366dfd7ca82f64f4c3a2183fbc3894e6300af94e81ff617694f923a9a642416","a1b209dfbe8953a2ae09b2ca2867ad9192f86312a3e07de9b160c132a0987e5f","e9231e9471a60ca92e22c2b5899b03b61e6da769b3bd01b3ae894670f34fc90f","3243df08a5e3e7a698745ff26c7054922d0bd3aa95e5e333d292adb2fe1ab8a4","8d27fcecd3bc30b4c00811b8b041fa8c2bb97d5abdf92b3263b445e55feec894","0b281111b02720095a65674a80573be36f87215fe8e9b1db9b60e48fe56ccd71","cacb0a2b7f85f7766903a5deadf7863f9362dece7ac880e7c3f56329bb72039c","f68b7826b2190c10792bad2650e9d93e3bc0174f96dd08be0ea6e5b12c5aedbd","eab6777dd613e4cc27af73bc0533dad62c00848e24d724fd2fd3f054c662fbf5","cd1d1a863ae24ae9ec7eb0972a76869a6d03be59e3bdfb11a8cd721988882d99","573a1e25e842cfd46b2d1e36af3ff838731b2b2ca595e11a56c54101aec5afbe","35d837707bed6184b9be37bf0b5a5723dd85b40d6fc9ad1a4b9836f3ee8fd1c1","cc51f4ce9c5127e7fc1f25736e54886993e6fe21bc8a18252932efa5c5ceea00","c91f2d38ca44660da6baba83ebb534bf9ad746594cac254d85cf19c626836068","ea4f370a08f96e02585834df925d7d7a684386bbdd97b4465a9d1b97ff8d3343","b8e194ea0764889361e4c5842683e4d26b18bfb4b1f9c4705540552880fde95d","bee96a8ce2d3454d9bc3e8683dd43941d3307db817775970c563196d62c8337b","18cce2be675afa422bbebab739de154d5c30cdefcf66e3b2840c6d066025b068","fec5c3d0336109a49e3db1a8c6568dda3ed49ac562d97eaefd220e269de94b7f","e11295937f82f6c4d4544239a2a5de396b14d6db140115f7a767acdd1e0d4ed9","05ce2bb502da8114c9875aa3bfd10faf0225c2b62b1609ba2210b3751ff6b9fa","1a6c6b7618e1149412a5dc50cd120a4b26674ea2c0fbf5e781caedfcf68476d2","cec261f74381f72f820b178b5667bae8362fa660ed25ef2f68988e69bda88917","b4d91400d9ebce98cff73543131d91ef4afedfd5974e01aa295c5b7f23ba3b5d","20c61c61d6c2587c01632a9418ad0a7c9062808f57b93ae536e86112eab46f92","e04f3aff110ccfe054b563eee5d03c441c99c12cbc5d158b157b35165d4c7ca7","07b88a0bcb817c0d7ab6c65185031a71a0c468f40fbba4ed2737c4a59b7dd224","9f71f57110978f93a3b98c1f13b3a7075eb9b2c2267141da81945dced19c7e44","663cda2a74fbc41f0b59e6e013a982a10c7bf8d989e915d2e160a8b719757e1f","7ee01abfb0a7f8bedc58dcff54fa0935648039e4a2fe5bed9caee37ca95dafec","4d15db086a6f51a656d63bc55587a6e972499296afabb204d542013ff3b90ec2","21f1852ef535db79b47bd0b3415935a657bbd573d55b1f03a8ea92daee56cea7","f07e143b7dde8e5d393e816ca133f7b7f5da25116dff2ea10ee576310126a7e9","850351d4f9485f1e2ae0720bff324f24d9e679a814c94b35e5ef059810f85f29","f8899b8d5070016920e09105d761c4bb9780428903e72269217393c92f693ff1","521085b3f994d56e3a53c3d1c0e3c4a76be643734043bd4488df27d73fdcabf9","f572d224192e7bd7f3fdff5048d8ce1edfc7b063d11270c5383d50a87b3b5826","b3e9dcfbaa2a3ab1471e26e8a0e349f91faf3f60f2d48dcbd74e9323a6cf2d31","ec05283244ca4713922b7a179c40b2891004ca9377f3e78d0dcc06c342deaed2","bcf2b3167844de2ade7b840fa762b783e9073d2ca81e3dc243e90a25242426f6","56a9dcb5cf4cde5468d18aca25ec19e5757d168e91e25db3c03a9431b50e73c5","b6c8c019132c661276604d79a1e18fbeddf804e033f7d431094940d1e3f62bb8","59bdcd3d036fc156262fc3674a7bf22227353b4770980c5bdd4c62af3b04aa80","bcad361efe003dc9d3708060c594e0a7767951f9b85f3612180aed94852e621e","dcdc78034c4c8d4993c9e322ffa15eeb4e1a39b2750d89682f7d5f3a93486e68","ac14343e96a04256a1f274a65880b7b6d8a898fb51b9289c7e79d219137c7781","eb26a26559d756c7e692ff73569e04d9aa47c794ac567329170188203771bf8c","5062635d0fd746f2b276114dc0bb3c22e44ad76885c4cc6077b597fec9d1bb8d","a5e28c7c9353e423d50101d8f66e37ab2006e0a22cc99e4d87d12df61247d0c2","7be428cd300425e1cd2a38577aae627a226e1be7b78d3be001cd13175fe35088","9785cf0c24e3c3198cfe3b42172e008a9f25a8cdbf5288f683311d08ca55e390","2fe6aec007e8128fe6b4d9f32aea91c45941138a6bf378943cab3019dd177026","1fade1fbc8c04b753da90982bbdac2d1298b1a841127668e4a64c965178f5106","6155f1cbdf82090b6b2979516f9bdb6664fb1c5dcd24d184e0421b3f8f1402d8","83e27877fefd8496a3bfe9c648b32de804a8b9b4cb1cf3076629a56375cdd102","c8b61001e837982c2268b61133b711aad57e39ab09f512d4ae39e4b425a83a93","cc6609323720dc827c272e407fb443986118ea2731fa48d9d1e058a02dcaa4cd","77ea9ae643508fc1d6d95cedd9b5636f45e96c6f45e8b8b05a72c98be9a453cf","6b807cb89a79690e2d481ba8c7af72996e2e77453e636d3d65223f23d67fce3e","acd7da27aae564266390ef8c9b8335a5da3b9f1247f7d51eb43677b6b459afeb","80bfad7102fdbe621e2bf33a878401ce773609cc6665177097efdc1d489f4070","e86fea2f940804eb55fe987fdbb3b3d2eb403de637084921c93d753cd43c97de","3ce59365af89d458d1c6293636ed0944a00a3c0bde245b382cf1b736320ecd53","a56f4a07bdb824b7a8b21d6271d0cc9578f79deffa3d54b8907e75884e618fdf","37c47055129fcac79a0f78273bdca2afea53e7b22318d90865db05a67195a861","7f28362b73db2297acd719905049140bcb156e5da070415e1f7b8490782747c6","4a3c4c20693b5426e15bf6acb9fd1623d962ca81fb87b2cb258c13a55eb093d9","9bca9a9cea8ded1bf559537eebc9e808ad69c89d81256fab1521c60941724b50","fa8ec1138979b9783b0ad0e35f9d72e5d90aad6a6fc441143aa815309dd895fb","87f686a013038087c5f6e4768ceb2e45d0e0cc43d9aec19d62b316accb49a417","b0c3e694ae510c245fb92f3b4da2996db64001b2db8f3980e1ef28059ec98fdb","a2a0bd207a5c948e0595515f27d729eb679c019e0b50e687bbdf5dafd4625631","30d2905035b7d8c14fbf7be78bfc16b81ca1da6a5986109e629ab578a209691c","0c3ac1afc6ed22bea3bc00a56beea3914c8f93f07108022e28efa4fe58887a63","5dc167769af92ff11ff359a5867c1a34c44c557c5d09b666995a1b3f69331a9c","e73e91072c99455cc7121c157ae9dfb1e1999616b77426bf14f3ab2be7d7aae0","267e3dffe5c951f345d8fc7c1c75f260e7f019ccc88b066ff4ba4e604fcee178","c1864d11c0e22b5d4dc0cb6411ef86d20884408ad6f0ca5a8baf17dcc5cc81dd","119959df7d0b8f783f560c25da1d335f5d5deff9bb0b52abd1e26de74ae63b30","ee41400497d4813b6af4f3d517b8eed2c00fed8e76e78946ad3801e041a3f13a","9ade219a908d77fea1038c0e8d654076c4a6dda29794018e44716ef117f26645","583c75ec1847dea5b3b29d398721d65d133b74ba986074aea31559f323039c61","92eced75823fc7db3716efcc72ebc963d0ef37c97ce4de4bcb846559110d4c6c","b776e3bdc4fa12418f801681736667d32fc3c50754ed75d53b59798f3095bf7a","50407701c974ccc16cbdefebb71d19a2bcff9824d3f2516b0bf1e454953c4dc1","a361058446f451cef2b7ff2ebc2a80d33e6e0bb97d799a4fdfbb7b68322f3bd8","1cd6c7512f7fcf63aafdbac713609166cd58eb34cbb4164899dbea5122215be7","25053a7694ea085e31a411f01afb0d435d4667aab60d464175ceb440ffb48ff5","ab26d91798f69f0d4a5802ba720db442fe251d42f401a7fe4a740ae2d41c33fb","4baeeb93f8e7909492b3394ac35f704cb0170a966e82f50c5fd35ac82ec0c5e8","1c29bbd368bf79cd0f59b89c863edef9f01dd66c1b00fe8558277fc1c7c08076","1e46771b368865a8b556aa764d4bb7732568a73bf293bf75824900aa6782e8f3","ebc9e90c1ef1909f42ffc6218a0f97bcf8bc1fe8ac4799194f66d8aced819d5c","1e3ab8a9c5d35a97a4cc09d03520c63adc27239534fab8a3cdb06a0924039a72","3a5605b3881e5957b052cd194359271decc0e388deec8ba95dd8bebbb7faaa7d","157136835483284a12ffd9c87858b43c156fc7553eaab2b2e7ba6b1af1e9ec9f","1c09163243776e185a2ae240342bca11d909379674b94fc72ef6e76aa4b9eeb3","f6b89ea94664e3d6d8d79808719d1930275e834a8da038f3dfd91cfdc26902d3","a2e33b626316b9cb95564da1f4d076aaa83a44e9de57b601a83773141eb6ade2","313738fe95d0816bdb3b0793abfaf7eca38a712071e7a0bb8228156ef47cc726","c7dc10839784977120b6b21bc9f6d39e994eb1a881ae9bbff01f59a6fd7d6847","19733346d8ae9b92d0a5805c28e8725f1c487c8f42d3d283545009e421a5d2c7","7016fd1fc267f13ccfbbf04d55dd1af0847cde0faa55d30b7a1059be1160c309","e5b8da04458ef9b4b3010953577b21b1dcf56b8de83d26e2d812b09e080662d9","e82dc695171faa7253bc9fa2c8dfb8f3abe23cc7634d8675efc2bcbcbd5aa400","7c76fa906595725613c3762835eb8f16ebbad0b92f5e8b37fb244990d32fbe22","7e5b01fa7cfbe7694a4f598e73f9f9ff83bd3deb637b720809604ba71189101e","8b92b82468fe715e59055b1b2d670b68cf6f3ab996f55a6ab3a9565be7188a84","cebb4ff2cfb259379394d8c8852afe72a33baef723dad68368b89e88a43d5fa4","12898d242715ede6a1ddbf6f3cf5e8deaf0dcf326c687143b994bb5d391a528b","074561573c8e1f6e19a04c615ca56e6c745e163e0e8bf8c169490eaffc310cf6","c0d98fc21796b5950603c811e86aa70b44f8efac2cf372739953096e0ba576c4","d2604b5c6b4846b2df33023bbfbc2e2e284d8c576607886605530563e802f9aa","262d74b9dac306012fe8b5c4dafb726e178505dfcc6005ae7e2168934318ac47","c197b939de50ab2445ae058cfbf54e6bc3f6ab1ab3f256712094b1b6db161893","e887bfce95bd030903ed6abdf3f39a0678ca52c065bf377ff4f612588503d2dc","6034404eb832f319d5f1691f735030224a7ac6485c6c9ff1d9a7f4d9461a9132","13676bf5956d3152fcf997f23987ea96561fdb82c24d28bee293d334aa50ea39","f8824739e9f29d1a7f98aef7d2f35f6833e9c00a7ef1f94ac0116b26672e0254","0207ecf9a409281e8853e08a5cc24991fb78d79b08cecca55f49ee04b254dfa3","c4737e35fd737d19e595b2f7fb666f4cc4aa99dbdf637053625a1c0866c85709","c8402dda6baeb2beda8a58aa9f863cbdc9a98195fedb789a878d2604e84604c8","a277232e43e44deb6c04207dca8dd1f22f2195afd4780b0aae2b95820d14d606","89310e22651aa19d1f7b69acfd4c8a6c3606c86ae9e21cad5df58b477aed9530","d6b0c35e7646a3b2fdfa6752ff22f2d219f97f9891a5b94a15c932618abbed65","8a672de8fc4aa40b9258662c477904ab6910ff7eef6f33678574dcfccdb29236","089c2d96df59831ef0b86c35e0522c2a4f26928fa017b10146c55fcc70f46db6","397869587d0f82fa21c25e2d34d1cee9794c2b99a8903852081b83e09b9e5819","4461716c0dc9f99b0126f9b342fb9375d1d4aa2440b785ddea7b66f210642428","2e37796a9e5cadfbdf0f1d300897a2d2149054d575dc862150d72f2a98c2ed99","ed0c19cac1c1621c8079cad4156948fd6587b4931fe2e42057f61ba8e577473b","9a05c4739a7aa7c1a17218555a296f713f02248b88f4047da8861e22a8c6a96b","9aa8cd98d3b024ced0ab105efa48071ae812a773505046d75b8b4e6b02832bd7","2e45e9d06479fa741fd9d6a9d5dd445dba40503803cdeffc72923f8868fe393b","396803ec1083dc98ec6253bf42948cc1429c8f9c4e7e9912bdcf518b09d27db5","7d9b719fbbdbe58f32e1b7185f9bad4dbd84a45451a96b40bf920c26390984cc","fe97906027f6b6b43c47f63e2ba068b48fb7a89fb4da952d682b8d764b42251a","847183e151740fbca2b69ede8f3898ebc28345444fbcfcec3c4c15c484fe63b4","243f6fb7b29787ecc584dd945a40064ff3ef70c1eb01581837c557c127cfbbf1","25d3cb368666bc939368fd4cee9c4698e13aa797ef929dd8e693330ed331302c","5fe934e5e30ed95793994954e60c2e8e109d1ee63da1dbe34001e53e8a197b31","7c3dedcfb74c56cb80d18d40c25484b61c653c6bcabddebbece1eb4a2951801b","f6d91acb0e2b1c43f0adf772c52bc71deba5b6592736fafab680eb7383a46af9","0cec8661583a045b77367d81c6412230f15c362d61a76f9230e859b452d4d9cf","a656d965bcd1418848b187a901fb9aaa6ea1e987ec83cd02b7a2bca7fdc85731","028fea3b72816697d8c7bec6a245db1e8139dc211982fa161649f0107405dd30","636572569f1fd4d605309f7d5d0824e795227d4d0b6f43fdeaca390e7e85e802","9cc18adbea7ec3f725e10a0dd7d8e82a0387eb351111707ec6650d6a9d0e1d64","3a9c1f47d9f81a476994a9993bea9b732e859c7c108ccc8d72263c84c7618340","2b4322bfc54a969709b2fb8253395a6af184aedfeacb70d3b15e7c0068fe0efc","70915e6ba3aa72c2f9e8c8914c480a79ef2effe21a3988d99457d4744cbe7d36","93a5fcf26061efb06715254aa400f386a74aa4752d1930a284dd7cfa638bc3d8","79f3ab75555f7e88febe7faa14d4fdcf4ae17ff93f8b0109a4f398537ced6780","c0a3e15572f70ea138ae73519cde24298f1859329ae90b96c7b655af78d7a402","e996ca76d25bead56879d359d431985e6eca63e6c1183cb307b4d6f448b98e00","671e021966a3458fc0fc61c1870cbf76fa38c3c36929ea9b3d7bae9c957d456e","ce15b0911ee85d37c38dcc10f35b24fe8d701496fbb857340da21de0651b3199","e6b45e6fe7e548d5126343aba515db2079d40b695dce448d8f04b78f14cad261","505ee5c61841c6e435fbb0eff68e9f9c6a28280fc6995133974fff03a27b2ac8","35a7e110fc6418ca8d968e8760b4b9d6521457e7a49572db2211bbc8c5bd17f6","cfc0e7463f1713c137dad9fff00796ac6cf7d60ff0dcf53978a5b5bd2467f221","5afe968b0ce5597633d8b3532b827788d0bd1acfd03f09f69b290fe056fde43e","835521b0174597835478dd64ef8a6adfb71fb5d6e7451727c6a3650a3bb22197","2c3aef1c2c36515b5fbf9076f136be2132c23748c87edb59cdbde74e12de16e5","82156827102a3fdf0be23e0b58da6418ea44bf7e12627a758d00317823241896","002df1452c98390e3cd8d7aa10d2b0fad05417838024030c0dd521b9a45a0d83","33ae8df8f706f38d07d80feb19430581d54ef16448d232e897587355f83b540d","bc864ad38409b78b52665e29bd13400bdeb6d999d69824cf44726ab94dc24837","6d7b51479498631ade2702991565ca7ecadbbf50dd1d6e7f6f5895eb4c9f7e44","7b6cfa67dc453107ddad6d774591db0320e20cfa3d3356534bcf1e0a5a72d54a","e0f2456b27c093b98671fd223da237ffa9aa25d80cf6324fae9877a4f7872a57","a72a1dcd898cc86a82efdb69171caf3861d83c1c7f56b07e9ac15341813c227f","84348e92cb064460f317d36fc5cfcac16702b485c4739d59dc32e1803da26e84","073f29733e4cc2472ceaeaef3fa7be294473f1347e86e829eac58272ab53ec86","187aa8689e0355431ce7f8f838b5586b77ceea92a5485e45298d6d6ce8316290","1c05030c16d8000f55ffedc19c06a7c2d7d1307f0fe98a99f04d3cc5b375d9b3","8cdd99e20888ca266319f9be388fa3fa1f59bc7b2c29cc94941c7290fa29e6ca","7480e834f85cc32710e1ad0982d0410f3a89c95cb2b0274f8ddb8504295cccdc","576e3ee22416a559c8afde34398e33664272c83401b0c7521760cd0c4c7103e6","898dae8ac27f0fb44b14008abf9e994d89751ef88bd75beb1f60b79883803af8","4e58e1374de0b5e0839c9b8b2fb2598818975a97365384ba8d00516812bf3a86","e3eacc4ae6470d9051bef10bcd7224d6c621b37a8b25e5fabb4a2fbd19cba112","610e3b6444492525fe6c3369e454585c16a1b67e5a2b586afeb7030e9f1f3a3a","bd6cd7743e62f5eaae04b5068ecb8b1133e77bd728fee080cc179ca9a71d40f5","7f48fb04e2dd024882c5367bb8cfd1991ee8baf913912daa66c7cd46ba0b2db9","93de85f7129e8b3f97a9f7e9f5105864c9008175e3582645ba69acdd0263a715","22e4c5e65a5b95caed6a77992717087ac295daffcf1b2232f0ddeaff44151ee6","d205255f48f56e9ad08e0679adce8ccb970e0e944af1c569923bb9ec7884ea05","79e4213263ad105718f1bb3a8a71a3f9263728542da031e847170130bccb5233","1117381caac1365d34c4716427e9ded22d9be7c2a7acce1564b3f6cd66644c34","44350a5f139e38b18550fa52301d6a00f9a52bc082ad61a6b13aa88a11d2f637","21eecdfe0a3cc7daeea156eea6ba85413ba613176347cd50686b7bed58fc2c68","7eed6d435f35c162cc72ae24d2e8a04e2234f333abb5268b675eed16745c64f9","8d1623d8903a010feb0e62c0b2099a54fda74486b996fcf7c7c236dc7e3641d9","0dbd61972927abff2a11711dca99ef35abdd1799e1c1e605a88915a01260e1b0","bd9c0c99f3278e5d6795e5297ab16c736410d1977bccdd9b089ed46498312306","065af3aacb06f5830f8114464c02c92d6d9328150e1cab88fd7c758cbd4cef4a","c4723ec2a9f3cb0c0d0cd5b7c1d661d77d8117dda5537fcdac3497c75dae59fa","d084707b58abf3afc71c1b4bc89b01ed10ed51ebee585c6d41bb2f49993b95ed","59f7e5109c1827c5bd4eabdc99c8ecd80503cd80d4e24009d46af4e322b1dd83","e0312a13251b804cd0ca1aad085d97418cd5792b36310207d07f4eafa2f98640","c08c8ae756b0cda8543977780c6f1348011f77e66533b9d05675250db2f7e458","c1e4977218c09a9dfbb48052b88977924f50efcec2c60216989c5f4fb8f6b30e","5072d7db5b07f5b204bcc6a8d519ebf5227a824c790de172362ee9b444e6d9a3","9af73959ff6c4d52c71d78a908e2b57273e7ae098e58a545588f4bed4d049590","8192bb25229fb59aeac1d9caf51e34bc36524f6e30905fd8f0ace8d5977fc176","3ed3f3389902db3b5320857a02fbe84069fbf4b97f5320ac8da4abdc10c1690b","5b2b29195be07a799b70fe229b4b52cf610d6fdbf3bbef75a062ac1ea87cddcb","b53056fc174642a0007331849960aad6d57194fe9b40547051c98a6467e5a0e5","b0a28fac49f0f1e6ec4caa42afd6c6bdd31ee71089954f1aea9044357909c7b8","a5fdc2cf1f1ccbe5f800bd5474fb707d80dc59289a551870c05dfcb3be8de4db","25b3b56b803290843741a43641b0250a6a7ea4cf90722a690908281d79d8534d","5c4be8a744dd10d0f6eb7768feeacbb1c1fd8f593e9547b74efa97d8cc148483","907730883c25f8e8e0eccdda39e7999551b3083d180de77bff0b0ae25c494b50","e9dbc7f01e9e004b12ec0407a4dfc828f819f2ce533752e4d0302e531ea1a57d","a264466e19a9b76334553d6d6659ca6951976de9c45e9ea63cc4e31879d0cb02","05a5747527349fb6655f9d0dccde1cd2ec4cdee7b9d47695199be63eea546209","2ddf0f4a8fce2e9305b55ff1d17a3911042b7a2d2ec143c3053b09db8135be0d","4c894d2bae5a8d1cf3d1423049479d7aaf39bd9356ff021be21312fcd5bbb513","cf500997edee607e14266a28867fd827bda4e923b5d6ae66993284ed00233a1c","4abd088ce741aadb220d5f17ec06c3aca68d2cc5fbfee8abe1e0e35d10a5be22","12862cf5e5dfb39a5822fb8a06a35a744d1c17c80986adf91f04c5244bd9f628","5956b73c3fb5e06afb9c8d826de065ecf0afbfcf2c8fc50e53ac9e4fd646322b","58f5936eca8717a98283d55b54d6bf8c188be48d6ee1a736538aae851eaef542","d4898fa0ab48df7adc1d0ade149211d3a0bc871b9232b6702d1eb79a73398a52","2b534cafbba75cec99ef27d7e31b8d44e508aed924c622dbee6a0d054fe0b1af","fab00cd512840416761558e8069a143ee9c8c2571923cbe5dcc421311a8a8d46","60e6588d2fbdf1f55216f1dcac7269510cc6a9dd75b9d7b5bc396e18c442c059","ccc4161d607b1ca343bc64674a98df02a7d419407b94778fdefadefe1150f362","657fde98f3b0cc39d19a3873159f8f4ca6954c3afdeefdaeb4fc29cad370308d","c945eecda71eb6048f7a0e4f482c8aedd9373b0234b24bc0a6a41b004295d785","cdca6921df407e9f09a480db31e0eb45adc23e52cbf4c1d469d91b84ac90f68e","5e49c359d03bd4d7978ac6e9a7b120e9d577eae8ac6112650463dd9210fe3396","6b2ac48976264e5129aa0bdb7972de3f336e1701bc0d544880c3906cb09a9b98","b00f49d50e5bac01692270d1627ee60d7ca45a0447eeb8a673dcc7a8567dce99","fa267e87370457222c0b64fc79a89ce8e3a77d8f7aac8da1bb3822a417f0d799","215a6beace9d1cd4955c6ff513511dd70d1b6ce14d79c8bd699ccedc26db3ff8","69813e8fda2e2ea4d99d7e125fe87d6f9696a9b1f21544a9ff633b5698a9e6d4","a40ae902d87465dd2ff46b2fc0109c0f0c1a42ff103ba134d4a41fbc407741a3","40ddcfd58cc5de0636510f3a3b1d936167138adb1fdccb0daacf75b1b77840a6","c37013831ad4393ad4c1dc5ae5499bb2962be840e79d36d5ca20b4f7b2982aac","dd460fa6c9a9d970fcfb40b83ceacbc04c0779db76c9e5a4e5eb0746d14792b9","d627222e1dd01ec081a2db2d999b8b7bb2ae38c6ed1e19bc4e96452b327be0c5","36e4a9c56b076fe98752b95c0450b1dc2e85e779424ac9aaecbaaa842a1d14dd","cb5a3320cfd58d09e399824c573fb397e5be377d0fa1fc55fe06f8aa9a3c44dd","1025422591b14651e1723e12cca2002a57efef208a5c986e23a7db978b9a37ef","fb27798ee13f9467d43ec36891a988336a9c04b91af4aa0c9c95ff8b35efbaf3","5ee68c2292296783d8d465baeefa75d97fd1fb0553de68d93e89de7d4e0779f6","fcdfbc729b0306721037ddf6ab1ba7e23e579b73e2d227aa29b0a815462f42f7","6233fa42748729e6c65722c029f4b24e8cb2c149303173d40a97fa0b10029ccc","a0836dbf3ef5e4eaaa12bdbfa11ac0e62d7ee0b4e221235022f9a71079e579ad","2ac68ef378b0493afde11881518c3d8202d1023d671025efa8e45be326d7a0a6","6f99d60571436be664d65572059456109481e5499d9d224cf7c2a5ed9dcb363e","dcc13dcd582a1f90d952c70d301af4ea94deafcbfa5606ef5aa507beaee18b91","e490a2f685c27fbcfbb0ce66a6ac156a9fa279af398d3a7f414c55434070c3ec","c282671f7d483763ee5d8569f98612be9edf557a0cca836365b9c386b6b86124","dc559d5869bb5a16c9b4d97f991fbebb8472f31fc3c9e7cfd862608b8172ca39","52be2136d2a30fb87e272761b1d47ea5ab1dd0b64d75a993e837384f37388b5b","12fe9c6fca0f57aa00c09d4eb16c4d5067fd31000b1481f0f9a57ecfceda4882","f76dc0dd54bac9dd77671b6c99d816886023611b14578e187d95a6ac620110b6","b754c38b6c88a70338c008ea780bef242c79b6b1e2ea5f1d512b94f1836ecfce","4ba723955965d9b68acf437355c6feb7b5dd5b7689bb95d3687027ed40e744e7","5247760fc8b55ef0072498e9bba5be48b50b29309e3b678cfdf45dff9162f8eb","efff3a09ad9496fa0f221471e60cf0c91790df6a1934eb5ea02065d354dc18fa","c0ddd181a09ac37ff5ae59a0e5e02a189402b4935443ac5a3dd61694fdced7b8","b3ee4aa0191a8fdb7a0856f0112f2fd289c0ac6c88f2a39766cd59925a8424ce","0c5efb9911e16d0f81af7a16fb0a975288f576d7ed1bd97f552cf63227310106","550d4a7daa15e4152fe035af7e6288d39248312e618dac48dae50933abf24c2d","43063ee96f53860cc1e8706c71cb7e6c7b7020492644f3ac71bb269491794a53","5a5be27eba270ebc7b2c95a87f54795c7b185f71a2d39911d02c6307fad0fb62","c52720621064c38aad7243be897fbe6deeb8ef918704f0cb51e6df445b3cfd84","cf2cf857095c570713f567b8a15de6c9e789fc6610d620ee627374771c2b1e9d","722ee4b01bb8549372870f90e2c1c3a2b9f3a7fff8a3dcb103e841d21ab9d3da","c3bd5a7b7b96c89b85b02e425b129b3018c1796a278bf577b871364713c2aedb","8ef699ecd5b50066f41f6c3836a4e64b6626172ae059190fc2e83a8e7381b1e2","b06c9ac58aece77d3619401aa69a72ee2a20a424d4f9d78e486812e431605de0","85ce00dea231283cfdf4d174bb29eb41f707acf92b0c948bae0c72591706b335","be144e49f913e72aa27ae1c57f6713f2fe64fa12abb9d6f002ad08badcdc48db","112694e1ec62c540d7edc6e23f32c6044bef3286d2364b2e73694ca8c5579202","51d148503682b6852e54519aac45689037d4459e95b03b421d83ee7b9fc70c8b","95c5dd8a34776597d61ecbec1d75d0babe5896b79bfa3bacb9acbd5e27ec8010","edd3175fe4ad8aa3ee8ca28aa05fbe3312ab1d70e2bae5a61d43760d2db45a10","5a987943312c38a64c40d12d4f1ad32e29f149e3319d59d14b98ce1a9c2825ae","661f893e88970ebd027a95e4117ac9440bf8a59923954aec926f6a8f030ff805","0c43d3348cb0cdef16e5d1b8a18a745a902ead1ef056544fb3d91b6ed6282b03","1af167d025d7fe9506fd1eaf076a77777b0547932ba9708c501c6106e54f9866","a8e372ed4cc86bca8d95d9d2b3c547440c976397625f6380e1988efd8ebba9a0","abb8eee68ec271827ed6fb5fcfbdfab3ca86c3725d269962a0db686563f2c6e9","707fedc52fbdda111bd8acf98a0eba642fe1b52ddec78627225863d25f4ec8bb","291da9a43d00cd4b99b15bb73aedaac201ced2cb4e137489e00975e9ca68941c","9003fb915f1d6a4ca2cc58df9e24091bca7acc8566eefe1d877e19a7cae00a42","2cf50e1229aced1008fe3f97ec062561f98fee7cec12c95835e736fe9dca56b7","48c98135bc92dd3d3c88f09b8ed3604ca1ddcad4793ca362e40f44ee3c32a8fa","6b2258f4fa629de718b64a37fc0d0ef96cb7f6967f9333f8dc74ba4dfcd974f6","8e87bd87de1a977c4da67e5a11993d7402d1f38f121ad48b1d13305caf6de448","b1c532c25419c2431791c771ef5520625f0f1bebc6d31452361dea05be23717e","c1dad9dfd7486a675297b500e399b2b5bbd33e0706be2698fd8f521a36559e8a","93b33bbfe0dfe38c10bb9a2dabbd139a9b654243390110ae7a35391d803adb92","e74085342963d9b55ba72939ce8bdc8368d46a19ad2d05533d177ad4373d9de4","ff0509a0b343cf00f65d7fddb38b040af5d0304a31e681d0811c60817a524c4e","203d178483755fedb5ca3f22e2cbebbf557fb823e26f3d706b0227d3f10d3c80","7d7663d3f196481e755a2b361b9e42e3e4f9397a33ed6a413e0b91dcc8848529","b464a2730c9c556faf849c0ed52e36340948210951b029f9b9391da1e638e72f","7cd05c92c9b72bbee94323096b4553b7485483f91083b191b8a6bce93ae38460","f9c61fe293bdd656fe3000cd9b498b65b87ef9b3d883348f47dab629568148d3","12d375075817f7c94cc922c2c7364e80732613e3e8094da3a31d9a510070d60b","31f1c86c77d778cafc0e38f8cfc7e69d39889cc64cba7699d4662d6180eb48ad","61c575d2f58afe3585c435166f59408217d3fc8c71c986270ae0d03321ef7f39","e38bb67f0c617a8f38681d8449a103e95e159f8b471c569975b46eb4c9383e01","989f55e213c4d1334eec53824793dc8e381ea9d5a0b23d0bb9dcde13ed28e198","fdeb44947a6653153dbebb9e7f0438e1ebdf8cc3fb3751bf1ad8c5b674a6e5c3","a3d8a666a1414b071813edb413701d101e8ad1259b1d6b0dc3503f8846ab0da0","e39c836c0f757b519f8053971fdba1f4f2edac6c3c365a44e21a4ec77819608a","3bf53e3fa2c6b881d4ad200659d15a0a879765354d9c3571b960da40518f4c6e","9f65b95ccf6a11a14881592e384660ef86586241bb51d6e34802efaa0a1eec83","a81109bd9e820051cd1d9c1f268ae6e12988782e22f6854df83c88acb5b690e9","2d12e4d7590238a17e46c912d18a514393bb1771e30a82434d1b5e9f00c887f1","5f2e34351365a3b4e6015187cd019d529fad40dacb98c48c7aa8d66608b55ff8","083f53eb25c47f42aec220621480ed391d6d2ba0080993c31aaaace61eb763f1","cad930e579b77ebad4144ec2b19afceb6a5790ce01aa33ae3d5cae7f7348040e","db684bceb377dd0af5593c7dfdb0937e7550bf068389a1052e2d071c3b5f22df","2a6861586d8918839f988f700242dd3170b479b07914f9217a1ab2ca11633d9c","91ded47d34b09287c03ba4da87ba7d559a58de91cc63cfb17d46d89b759231bb","de80a964f80f07c13162908a790891ef1295abacc68217ebc953a3bface34407","8857389110843d5180657b2dcae3efbcffcda1732947ee50f39d60cf3222a42f","889abb39e4125cf271333f3f730d27a62866c3f8a30902c694697f92d56d7112","8614178ac0cb67c7856e56bd732fae68d0d75a50cca28873b39a8577501d1642","45b93ec4620e660d206573c1aeb7295bfdbd950fea40fba3458ea17b056e6a6c","5d15c4b14f81e966634e05bef26432957091760dfcf4c73060700b3614af2802","347743350d14d6cfc162da673f83408c14b06bab808abfd6c5fe02b556933c8f","0aa720b3c77698e533546f1c7b3f8a3a9dcf690fef424c85eb54e6b40721200d","e940142f54e7633fb4873ca90ed089973628268f61003fcc2e4e204b3e007ba0","20bd0e15f1d99f0188fec0812bd2b15ea67c3eee95c0c756d11e3be5291d5784","1f4585d390c8a4d336da1099b6145e399e78ee763171383ca7ee9e65f4b89dd8","0080297509f0dea7c9db1cabdc009bef7f74491699f4597de16bac6312413b35","39af626fde966b7ed9731d62f1fbbdcd977a2595884046b2fdcd8cbc11cedad0","80916fad2bef3d300e75eecc7a592e58d5e8b5f60e822f0872f7f58a62eeb5f5","1f3db6df54115204690a04d9c2ea970523989d0e687cb68130881e628f01d97d","b3e703917dce9a8e339fc43eb798ea37ca18ec29a9b323b199b322caa1d3b4ea","65371b97e493598b54383ff0e6d66bcb96472792d6527adc4150b5b7ae0fe090","5e88917b39037efce9a92e5dbedb55bb0e72f9a1c3469926301149f15c52d2b2","ccc0ca0e47c9936b3b0aa00ce0b128b0476795264aea0435d48d1f6d81bfc9bf","fc76dd956a619b72ba83fa366518d906ad4468c23671c26daaba115f69644f26","520eea8a52d109a55593e778434e830f5b376aee808f44683a0132147b90ced0","554cd46005ce94ef07578d9bbc265e6db4cf69f15270fcb3225e884febabc793","9cecd2a6e45a96fffac5f45f917efc6e72bcda5d3cc64859d10a92ff6e3562d6","4d0ef5ea91fb435262c9e225ee54a201bf2cf380174478e5f8669344067b298d","ba87c7786927ea45af2061cd88addb25f51a2ba85b0c59a7fddf63a7d9a5410c","41b957ad99b2e0914f44dc3ad76cae6d8e498c2be9a4bc516d805629013cdf76","3dbe4597c49f1ba263b1e9fa04aa53a83351f1b7f7ad89fb53c9f1007d312215","b5c3d46a336df53b45c828d20026abd459d654b4a273c37a94a70a3f92e42076","4e7e5327cca6eaf0b453efa50eb8734a24720db178e320e5bbaa1de74e9ef501","a42d45d88331d0b5272b61a7a1827c4eeb319266ddce07eb5ed6e9221c23b003","43dac86f9ead9ef2e3a92240c4f312551380432f716ade63a79dcb45c127810f","effc88f0328a8945092085c4809666a3b4b3b3f8e6af7dd00e8de7677c232012","a2f99ef7273c58f485b7bf71c7508eae54e313cdeb65db39ab79f77940e1d01f","96cb53926b60b1e2ee17aa6e8f62379b243fb2a73e655dccb415cfb0776e8028","dc6f5483779fc1e65aa56c97f76e60f17715f33e12eed294e475f6907ddf4586","30194d7a5c57a4fb30ec24c4deaddd4829fff21b9e193a4511268866e39f83ad","ef4488055674b17cb322747d6876ee7f591a1ad5256dae0ea25d740ac1e375bf","c75d4632366dae203e69e76b5bf8462529075b8b636e8aa93de5ef13251750d4","80ac9d6f717f77979fc8952f6c143688dffa9e65800e2b1d10dc5183195c43e1","7af5ec4b30f2b486dd3da2a01172126ee6fec1088f5b8076b42e89b9e8391575","45cf19d8610509b3c523cfb7f4aa943c06420c4d3543c4d5f44418ee95c6a3e1","b067598ee48f18672e9c7d22ca7367df8162b7a592403d7b30bc7b17900f2f6a","1d03082015ba704342bc86747c1e4e0d8122514656523daa3a9106d0fc15aab7","d161fb3e0ed169d54eb655b08f139cf897e3cfc6c3e1619cbdf5ca5e89bff88f","338d0b16fc2fb33a897d315ed0f41160761b4d8d28d3ec26c482a854f5ac0800","eb4a75d369a3f0b67488452cb643332a59adc75c5294cee578f4c1735fd0cfe6","da9e725b3d72eb8cc6ca7ace52aa1fc6a21060da96edcdb1c4605c6b4e4f6abc","658aeb9620007fcc02f0ac329302b105a934efd81024e5554966984689aa66b7","e985ec3d6747b6582aa75a4d77af6bb7fab4d735896285a90ffd1cb91208bcea","b4b0a6cbc214c26c547dd1723cd03ade481ff6e0e60c0837245ae01ea271a445","8b88b5a57fd134223803660fb5a1248dc4f7d5ee84fc8efea3c9d878989de35a","4876f9246a47c2b2fecacbd3dfbc7733062e079dd9498a3c732c6ccc41358090","c9bd6900db80453d58ae73fafc0cf8f37bad2d05f23ef068ea14dfee97d4a095","059ffdba8d4cceffe84da48b971a89b1055bd929455cd4bf9e41993eeb0bc1d7","d603178d2d2280b28a80b87389b95e9ce77fde58f672594e8bbf4fc711a6185a","7254ea20ca44ae7081c57ae4047928da436f33d8ec13fb8ae3296d533b141e77","4a6e8c10ee49b7cf0b4e6e59dd78829105e12ef47400c2f0e4225d9a736337f4","5ade93afe325cd5b1d6e9130dff867f5623718f155ad30dbf397abfa400419a7","c41c9452fbbaee4945a0c760b9e57d26a07e6229f271b237061c74a8bb3a2b9e","132a25a049e1ef0ccd2737cc35f3e60ce965691d6dbf1ce133042e2332017a63","662981ee7cc2f6e5c20dea10cb76c75ecde6201d116486781c83d27577ad7fd4","ca00b004b97ef4284d0f5c0975510bb153157d588cd53e42a339984993a0d4f9","c9585546bff9e1b19d13fedd798a0d6c6a81712da8679c08bab66ce297083eff","70797a95fc78e513e91efda8499e870709caea8101c35c8177a47ccf1d36d5ad","97a7ef7ae3e066c58886266934fc88250250160cb8487746669f22773472db21","ed5e85547f68cf81fb8b60d9c7044097471a6201593ee568fe6e3ff097c29e3c","e9deb9d10a0605e60d6eec04c25b42d3bd3281982380a8c2eeeb1919a13db565","917756e905ff5ca9fb1a561ba1b88fbce738efd1a23fe024c3e0dab4efdfb691","8b691d3ced844f45e530319e939d3962ff1d5108bee5662dd53085da773bf4a1","e54e290ac718296792f42cc3055afde2e0bde55019d42c17f6dac53da1db25b7","9c671619d79947256ee0a5ea39f6aff9bc77120b39948be0ef2efeda15555fd6","7d4c5b8bcc9c48d35bbe4f4284fec8d1ec054ba0c3f8b8ad2f5ecd14cf085adb","371ee8a63ad266e3a8da5259321d0cbe8290516a4767952a0a20d83c1c5cc3fc","4e7e1d99f319a1c1a093b7ab893016e30e95ca113c31373dd896c2b81860f4fe","bb1d72eeebfbfed96ed09895154213d10ef1b28bacd98f481801ca3c89139aea","f1a48f5c507d5030cffe41df97f15ac1633fd8b7eaf6f05f2657ccbecf850fab","900a9be51a2dc685d6f50b21628f904a5f92acf12356e322c1bad2d6ebb096e5","5864f14121b57eec5ed716c723c8fa255eb93934b3637e5783e00fc88d57e9e3","ce5a804005e6242a1ac4f40bde4503d681b4d6bac7f8efccf80d9a14cd1bf4a1","653c0e3255072d73b9534aa724a83e6959da958f9320a0ce7d4bc7af643c9572","d5c44fec8e8395006e6a58f5c30755458e49264703e8a77c00fba9e1b9bfafeb","a2c98510fa30b2f9e3c9a438527d44ecafa336d5d052ec653ed9f6f3ffee1c3f","feaa4628bf823dd3c06bff64defec42ffddd620cf7498bb765a0c5524a8c1802","89d68abeb7376e7621d0f8fe4b82733a3e640ffe680e8e47120b7562ff18ef36","4af42fb554ca414af188ba40d6f0f4c8a49e34c88aa979835aa3681ddc00979f","0967512429332ebc7e4a34c439051788180e6d0e5f560f5da81065c90442e92b","a53096e9befde2c014301ae2517805423fdcbc7c1e0016b0d70fd37f512e6411","1bfee5d41b8037f39691684b8e59a46e01d0886a1083ab5c4b9a38c8f6df3fe7","f8ff963ab1fb15b0ea6551b5daa8667f5247b56e3f592562472b30304febe1c2","6fabfe830a3c35b999b9bbbd314d6a88b61ac75ff9d05aaa6fbfb1fc14568384","345348ade4dfc7c008d93c3f44ed093ed127de3daf7f722ed5fda7e76a1cc7bf","f310ab34ab7c739899dc890bcc7cb85c151a2b757b86ffe695bbe9e4d84665b4","4f9df06a28b4178d10e0e6d92fe4be496095d3107e5aa7f14ec55ac4303ce978","538c4cf1218c1d2a7516f92360c93b2405e609cef29a7aa60589b378aacfab5f","fdf3c90f6829d993520c15a6172f66d723a154e1ec29f61d8a6f14273d1cd6b7","001f4d74e44180c93591359236d3d415ad0891bd9bc6a707654cb2229c09fa73","46069d4206ede90cabc2bb0604c6daf25c8b6b21bfb7961e0885e9d148bcbe9e","8918a5432d0beb3aa4e98a84754b003ce5941d7e3d288d2e7e2026e029a35c1c","a1fe65c581dbb2600f7aef77a9b7c2cc54b73f7e69d008df5508316af168ca11","657947b20311ecc1bab842e840818aaaeaeff4d6ae4db8f563d535fc0d4058d1","f83ca7b6085a91dd12833b4fe41cdc3692fdd331b47843cae7b6d4b1da1d37e9","c5c40196b2963a799a6d73467014399f7e550ae89be9eb13f68c1c8a4bd65350","ed9cb3869ee47122b49ba99f027b103a3a9042ae64319bf1e38e37a3351335e4","9864580a1d50a410b3c0f9895c1289bfa6b0fd869f67625caaba9bc62a05934c","898bc6f6de960212eef01486d9da556802da421f8deb7b2ad6a3d4d49d508965","d402038c70efe052a0dea9cbd9546c463f390d2737de8f0d81c782b0ec5225cf","10c9d3016a1e38730dc68fb7bd6573c5dcb35d3f678610fbf0782482239cf5d7","26b778fe6d6e4d127074703c4474cc50631fbdce487dedd7568c8a03aca95e20","fb93eff89d22cd785258da6c84382fe314d90a363ce9812787c3166efc6cf130","973742df2eb09c97d47df7f9f6a2d91e820323a1d15669858da11c1827795045","dd9b1c9b7e3568f01025dc479b3a72ba7194ca46d1ec88bafe2ce0d796ce0453","1ab2ad566d444c77a7088eaa565e9cb23c45fad8b940edb94cdecf83d7bb1753","955a2c7600655be0217915b13f25dd68ec0d96886bfaba3a11ced98199e2d66d","15a8dc5dc4e2673ecab31225b4f60c7e98ef99ef929ccc812fc690008ca5678f","df9c3c5ff1dea410df79ecf9a9d91f897e68318873038c4ca8b9a23bb364e4bd","e8f2cddc75e9adc829bae39a710bb3d3531022866f198422bc4da1cc039f78d4","8963fc77034d4b0a4505248716e49bc803544fbb255ced06f8913c89c5a6adea","b992b23443ca6bfd4aac5aedf8a1ead77d63021e66e336e39565c14c70f905f9","3fe60c72e13ed681676ca1dc8d1b3042db6dd7d7361a998571d262cbfbc2a4fc","e66485aa96e9e7aa987385dc2cae817e9f5b2c488cbb0fa890b9e026c68846fd","2c0f2ab3208ede9370a6dd06ed757c6caf3c220a2c20955a8ddd513f59728604","afbc78dbf8bafb6ee342a82fe668f4a745309504494d42711b739be25f02de38","0d4b8c2f85be4bb0b6785c81cfe7384d4ca45e7dbeb8e12293cf9f7baf9cfa77","dcd8228074b73f55267378d0dd52491b750ad961622d76f8df06cfa9b4d5b38a","411561c5aae2330ab830d716229ff17731f04a57995f9ca3602cfbaebda191a4","558db6c3973ef370497c46e34c23ae4ce9785831cb886f6c9ced998034ca9ec6","d86722335606d7d8a8a183146770ea3080894c489e68b9814faf5426354e81d8","d8c8b2a82271568041ec5982b6b7716e8824115b2cd7ded7dde30bf89c16a45b","7be0b6a1358d6dd772091bdfe2f3a540d9a5898e44d5b53df4354a579bb49834","cf1bffe9db26c158ea63fd280cc07b2d63945d493273530a9e56fddd16bb3922","78f74a9920905628db922483ac9f3e1c7ae2c4c148444ee6dc52967784d893d6","c3995b0d703ab49b4c24936bc8a6ab47efbbf10b703447b6820b1a10381025d9","c9bfab7e9bb828f628a68b28883f98109a30dc84ef2244e744569c4b100d2f43","a6af2f698700a1e6cf7f977c15b70274f96f71f75e2584207d160133f37d5d5d","6c68c883ad25bd747a68aa0406db892a76384e7d365cb5dd90ae2b10c842fad1","9b61114aa176c2c10c1c98d4f5c5e39988be6d901bbc34b00d039a1c0478c3df","27275562f1767450af155b53f17052cee6a0b316078f7293680620cec0591ec4","d6c69e7b38393ee0f8fb9be6ed87e8c30e1cf1e62afe8a1011230efcb4676bf5","19078169c358ad1b69ed52c878215966d1daa0d59b23d90e2b90e5ac01a441ee","bb4e712335acb147766411d83001c73f2aa1213dc93432eb12ef7e4aa4bbc871","7a9dc11a1bd64bfe3766643bff2fce06ac315ce76cd9ae1097be82c8f964667f","056da191287a8d20f7e8fd73707e3ca01326709fd7ad55ece81ac0eb5488ceb1","accc1ba9ba669f9ee15d47fe053c54726ccaec5aaa31f95e51e9c63cdfde8f5f","fcffaa87970dd3d57d06ac2bef9c9e908c3bd2690faedb3708995ee259e0f265","077398e1c4147e83db184077a33c7fea7fb0f4be249b15a0d20bbc5ec6010262","6a0b26e4ac825723f6c2bf13ed99c8da4d9481fdb117e1c900db9c05db5b1637","8603a55b60f1e2c02f7a5bf92e091d288df1ce0461e64d0e6f899169c335cbf7","0ce87b3a2efa4d6f0e2115dff3c54ab4e1430f80a8552d53a14edd3c47df001a","26af919e234262821e19ff4a7192d29ad4efecfcf6d51e5e8058d428c26fd596","8628790c85dc95fe397e7636a9bde3ea03bd43be5a4230e749a526bf5364f02a","4c469cbf3f3e54d4dd677b5ec793e1772e143b0c011b59953f3a2588b17da52d","bbab2c92102b0fd6fcddeabbe6651931fc62da9c04558628b3e29735e59a6232","cabe0d25c607be1b6007fd7a5ac5d607ba254e532315f16721027db2910ef3d5","150be148f8a51e7f7a228904bd5b820b92c3cb8cdc53d731ec54966666f331de","9323f0eba8f120b0ef8e581745c67af5a1b012ab3894744ea3cf368387cd1316","3189df863c43e6a7a62343b21e075be1c43d7356ac01bfd1e081ce555ae01bb5","efb8d36258ccf548d2c3d75edb81469208b18511268a710213483de753061708","df96e8e86f8654930c36acea29f3c4b806c2a548098360f1b25e65396e11c631","3599a41ff7e2a3943268ac5d05a176e53508100526ccd45bd0b139cfcd4d1d3d","ff1038c7a9675ea67ecf432005172722f91fb66364711fe3e1d0fc04430582d6","6615fc23261928abea5293beec24605093c840a16384aaf534b2999ec44aa6fb","63e669b125f3b4a958831c698dfd7b3b3d1bed7f94fc0045866399cc432e3a14","d828954fe2e8cebec01aa49c50a06dff8419efefc03427c079dce2310844a19e","8f2db94e1a8cc19e57d84a397582ad5d229a90213e41594acf5eea740ee9d4d9","933c4b708f509aed55de55cc3de99f4496c6d1d4528fced9e9cd0bc9a9e1b83f","fe6f42ed78285b575f446856dfd47c94d837375d440c10219d685e8a467e7a23","212dd6edc4aa7574d589b40dd3ccff29f133adad9ed3ab72c37650900360b44a","518bb392c2d9ec7137fc69699323d0ba6bc51347292e96f91ae341c4ba9f6e4b","b72344850d1f1d498ec31c3bc57233edd9d4fc0a50fd45a746fe4821698f3878","65f11b8783f5b334dc6e563b1aed441929bd5b5dc315093adf05eb0dc949c2b3","66ee60dd53af94da4d9cc909cb7b77d195669c59bb3f8039214ca1dfb93e8e38","535540c8c8b0536a854dfc1a040549b7540db95c8dcd5c072418a1482327c331","178045ab3d27552d4649d3fcc6be2e02ed70d9aacf02d7de4107720a963e36c1","df83897ece0d7c7363f054ce53c890156bda70e781a00b8fb5b3f4a3cd8e62b1","0617d65bd0ae9f3583e3a343a6299fd938a5fb73e1ad1f3190e8ad5801732497","e274337d84c38063c3fa759d54b07c42f1da301873a3349f8029a3fc12c5d5c6","337e36856ecc59fbc93f6844f665d6815fcf7cb07c1264af3cc763cd2b65c518","7ad46a22d2bd836a957e307757fcfd1f751c6d4852e89bf44e7892dc15c1ce4d","f69eed3dbdd191275fe46041f8f25a053db63b337ff47e0cdfe703b013d30240","ad34642d9627967d65b6164f6b904c744bd125ef544a09da70ecb8380b5a7b7e","ec878089a59b2b90285a886274bcca72107cd6802a18faf3345a8609fbd4e1c7","6132421d1033ebb46f4a0428a6e20c776d5e713ceda04b7c20fa2f72cbc2c04d","5b25f4ebae27a42f8b4967f53b041270a045d3041aad12c6d2cbeb914e33fc18","a19892f740a467c2a431c5b070a1ad29eb67c3288d519f1bae4079caa01d62a3","9c601e9b84895940dc1332ece3ba3ca1759af917254dc3879267816676d246fe","71a6d1dd676d0a0c17e393ad04ef72a61937097fabadea9d78ad330d9ebd1841","fdaf62adb6d867e7c3a0dc583ee09c2f03f28bc1d1ac57b74861952b1b7942e3","ebf0ab450786fff6460617f068193b292d16e24fb1dd4503ba1e517f667dd53e","ec9266a44bd17cc4e381a86fca53e5e46759a3a251192e7074ac33acd41948f8","c4e4c65e4a63766425162e564673316ce8e9702346c56d28ac914fe7446196f0","13f55c96e83f39284c4a75766595f9fc23c0e4f3e4af52d1567df86983deb96d","92abfeba13777e3f9b01cbb777a168c720af0309f9bf127205ee1aaca068721b","93bbfcf19def078992ec17373a37b5c7fecfe73c8cb981b84e9156b52cca841e","e854fdc5fdd5fdfe3b787323472869fef1c1b688f6911212069711e43b802b03","289a0bc223146aa5107dfaeeabb37200420fa67c5dfe9441cdd2259d19a5eeb7","cadf9e20f5b8b4e3295bb5eb3a2f6174706c767f655f259f970f5ff769a32c07","050130ac1f9d0f80c664f99b213563d08fdfb0dfc0f704c99221ac9ce44fc81a","851ce25909e4f7eb3f487f75bb24eac9ebccb16c292b3bbff4786272eeb83bc3","9a95c2a65b77e3fa8516a168619ba1f036f1dca3ac31595ef46b2d375d77b1c9","1da8e856c528082c4e086fdc04c19ea3b33c6139720198997be2484345ca7091","5c88bdfa50e8b95f33cb6b27d8ee90242d085b1b6ebddea9d2ef1d9f12f981d0","bd464fed29b59260705f6ba31eab9b64a55a5cda142fe25af7efe1601579eb1e","b37d5d48e8e76e59038db79fc05c463f9dd3245483e3c6f9dad54c59eccf4231","617651df022a5258cfd519057b79d460f4f78404474f497c5361210a49ee38b5","0036f2d494d493872a29e5055a281eb445a4a6f5a5d8c54290e121dd1c5ba788","465ab16d7baa42687382f0fe46f544cf22bbb05434e3d4a6070171dee6560462","806b47f907c49b1e0fa2a5deccb19810d6f508d15750ac190c970ae3117f88df","27c7567e3cea1e30897308a0dc3946e894d52b3e9c566da3a108a02e1eb35f57","7def082b6b02f58f5be9c45d737c929cd41942867685da184ee8a0a88831fbf3","57c59496028656e4f2205a4ff106741d231c45f42fd590bcd9a7e91d1c89dfd5","2e95b69e0cc218d78d1a6264646de9a7458d18c6422b15d4239e1bd09563e7b3","8fe58f01d39c0fdd962aa7263c34437f448cde8a47f2f2e1ab226b8d52b4199f","c3226c4fb593460108efd1f7f3c2d68b37a4908973e5591afb3160fb7cf12319","43f006c0feb7f0415bcce1cb4542fad14d772bc982d52f6b3bc90e2e85ab62e3","5b3cfa7ef83599dc62fe432ff59fecae402cad89f4e9cd24efeb11e3bc8d2d28","4bf985c0cd67dab85c216f24416a43570e0abd2fb5d188ceb954c79e39c2cecb","18554d8491f6ba319d536a038ccc1e68e5514d18e7965fdac9f0e0f78f9d7097","23e403958c7e87b963087192d930be9cd0cb5ef2a68b96f90714433a094e6bb1","25664ae17717a0b18532e006f76673c7970e22c985d2fc66309e9ebb482049b2","fa0eabc3cae4259539f0be03c47bd2164c37764605b302fe42e923fc7fdb9344","b3d7c9c243e918ab5f32c9ee993d8553c301e194bed00a2a33894a1e907eacfa","1e45bb978fa9e9e21cc19608f93bf484a4b8512228a830c62fe79b3199622de8","c123dcf6cf2df1ce53dd798d80628f533408f40789854d784e07101ce9ca4ac8","cb3e4a303908c1273dd3838f70175d8ccd7091a1fbfc9659a010c10cc3d1a6b0","f64b632cae5c86c72832b60f9e4e91c8db4ce99c9c6bdeecc086ed8a3261fb87","9cf3b97f0cb4c41bd4e4300c46de137fcf69c16acd96d183760c3a37509005e4","898fedfa634dd347f048ff5478727066041156ffd715bb5fafe06202f5ab94f8","4f1b1f244a0841229b25a8020a4358339c917c81b601bf5e3d9f0350c5c93436","2aa45770172054728f58b3b996778023011d335a5d9210e8ef19019e1f596597","f9369476b494ffbd853c1220252a60466d311a834bdf60f37d529b5252a06171","7b11685c82e5508220c3a7c13a5669990c6729f9b3c8949cf0f923dca2400030","6d44da1276e12b34db918e4425ff81aae4bbb453acd5f77f51a79e66e2d00160","42b71de323309cbeb6665a0efc31fb95c8571bbbb4060a43c2b9fbc781cab1c1","b2810bb40c0f88e8dc0c10bc006402b46aeca966df49c04444049f71bf242cfd","6a9487073a67a96ed7f5a5dc8459672122b6d45af987498af8f6aae4dffa7fe9","bad727815350ad1104f0b0ab8cf47f14677daba6f5b8a9f0240f25861e47c212","f876fcad59141534c0f596dfdb0536ba31e1731ed2b285a8b34f36f659d98ec3","5bf55816296b06480f34d331df97bdf550e60b3db3c8526886c40d26af4bae35","bb0153868129d013dbf0b748ce5b26334322d07bd3d5cc17e9d0689af6cf4860","17d4995525438c9481eeb61fa858530b0822c79d3eb72a7ec16cafc2fdedd041","286c015f3f6ab3a2507d65ad42020d75a541aaceb8bdf45ed35d1c23c3033254","21fd9a4536f2ebd39592f30a43749fcce6ca0a0684ac4baf32804af06409dedd","579a8a9c4269434e24a539413362659317221c3763fa6dca564e5548003eedf1","7b2bba5db76be46c06d9e8ca107b814ad9ab64ceec52848a9e22e75f9e1f8fa8","ed2d569dfe2a5e02563d503e9e8bfdd6f22eeb49625440f24927758133011eb5","0df593ed1697f8c2576538ace99e6095afe876be3cf687282fa4ae1e56f32ff2","646df0d5934fb9df743f72a086c141cef6824708c146ea85e5f231f6a71c8e88","7a56c14699593131fb7724bcf581f8781954ea2c8f2dba4db437a8a04c75af0e","a24cd1776697a6fe938aa7b89e0a9061ec5b77658785c8f61316ca83ea8eb342","7c5127b839476bfe3c8b27bbc9dd77e71d745f554e697cc6c838752ec6cab184","e4e86877c459b000d015dff873f03e8b2606740259cef1ebdfb0e008b1880454","b45d03fc7c24207874abc103d51cbfa51b1b0645a04b20d7abdb2dc5f2f183d6","887eda9510e6c400f34008dbd8cd3e23706feae3bbd1c96bdbdff86af827b242","52ee231353645bb3e0603c0406e960b7a8020ae45e094563253aaecab8faa559","463503d939524b3f68e09aaa49b00c2c648b8eda78ff2a1fc038b182492f2742","fc1c3fce96aed93a5263b4a802245180b905de7f1cc55518f77b3bda892e10b5","feb6941579b4007d69bb0d4cf0cd27343c99d0b48526d1b61e43767b9eaa0206","3f2d01a2cd26afa03aeb20194aaf5eb5211b7c8aedfded1679dd515812ca7d26","8f735ced743bf968def533850e459155d80998642a3ab01b9b59548d8a8ddd17","0ab1981a781f725eafceb1b9dc8dd354230bea61c36900d37ec9290c9b240028","6a01e10cfa0df7d0a51b33a035ff91a11fa6034fb5198f097a534c2832669b28","af821c16132ad8052da289efc7d4483ddb8270e12535c10cb9ee7fc7f56c9086","21a5fd58e55fecc576616bb788611e1da7c497a0394cca849259c8ef0bcf7d98","2ac2fabf9c3afc353bed71b1c98a626d7f7244b698387c3f6b03ca1459770d7b","bfc680d375fcba2b777926ce830efa927cd575b52315b37bef77ebc383693539","7b9462f8d35b1fd20734a733276759907e7078462fde379a14e4c1a4f399bc20","ff96b485380925b485a66717e2f33de73836b2824284068eda23a0c22c5c4ed7","f5535991aef57eae37ce31e283ca4b6101f224a4daf7d4efbd2c86e31cb53c37","f6bb940d99986a7613b333a78c1530ad971d30f9822c241f780f4452f4884ad8","a54f727e775aeccaea799c4f8fc73a29946461416f7e6d8c45f636b3c2c0ad6f","b13ab04b42118a67380442852279fb664222315af66b19e3ef98d04776469058","16125d999d5772c60be0a81c97fb7a29b3f87336ed674b99afe91854b1e89172","e648ee9044d824c2b2523391890e5d1e2f1f9d98be497d02c95debe65ba8388e","16ffd75856118f9597f4db5ca33ba8c5af16198e6a78eb97ff3d2c6146e89e8e","a1a5825d99f9709183ed1d1ebb39d174e08a9c36e11ed5723aada4051c4d3069","73dfcdb426378ddde280b64e0faedb28e9906b28ef826eac055f307a2340339a","1316fbfb4aeb5e576ccb0ecc9ff1406072a8d82675278014afdb2e4def1c88c8","f3f20b037d9fb01f1b4a1b72347c159ac758d76173d78af120a1dd6f17b3d8e6","4f4dc5dac4ebe6249b80bc907eb34a62fb28966c6fdb2cbc2302e21f92f19d35","358dab91f1dea155a03789ffccaaf0c058fb0129adfb3bcb9e8983ba86ffca27","c825f0d772e84385d862ec1f7d2b701558ea594405b2b3625f38cf1cdeb25456","7d1be42c484315aadfbef113ee691e952d0e63706f6266f0386312d779b28f12","222351d017791ac769775a8bf66cc1b1a27783543d7039e80ece0a24a92652a7","ee5304ebf285ff53dbaf449c6757ac79fcdcb6c569db72b47da4fd0a4fc1e9e9","2d5c8ac21e4b1661bc52404aec54cd03bf5981f3eb3b2a3088aab6481e2a212d","05cdc782670b6c939661bb05174f32c7dc7a3f53f2fb5051bd455d5229eb3efd","1fb992baa4836eebe40b074847594c7938793433c727df2237f9d24385709c0d","e8ff6715285adca085395d5df61458981793ee66678a4564541fb51c62dd1ba9","f98d2699e100328279a49618bd508c61e0080215d7fa6b4c23ef15067f333a4f","480e21c8d9ddbf524bcae0699cf85018ed4acf67bd859f21d622873a4a6594df","f431caf379771a90d168afd0379aee34027ab1766e85710aa9ebbc7da625e17d","f7bf24dca92cb4b020533305f34beb6614ceb63943a6e00a33573d2d448a91da","13feda00c1e5f88f2258618e1f8ff06b6c454f2e1940056d7980ef7252b070fd","54921322917ad0a2eee659cdbf95effcc2d40ebc313b198b24d330fcad97da6a","127ef9713419e65008e155d315f7c62668673646257cccf7a5d5b80b247c8a85","9b2b460e6187f05c5073ed4499ba4c85ac515ca64a6c3bcfa73440a93164aca7","88797c628eb5670f379e2a5c4c4181946c27280d0b1c7192208b84753af0b154","643d0dce8bcaab46e8e44c1ec771cf539f431899592781ff8f3c0bc71a1a9545","2c7db4a70a0000a60fb3e8abe4b10a083f89a8fa111377e99c6e49a7e7175f41","03148ae4e42497e5769542467fe2dd0b227af9cbe48c6aa2229d32bc6539012b","5a31899a5341c3b2b46deb8bcf9a9a9b13b487f4f56a4af0e589081c847cb701","46ed511af133ac5b73ecc4a35488bc42eae197152b61b8671912401a802b156b","93970d58cdfb6f58b2faef7640f8a55578a5fab011d73ac92e0a50e85a03d89f","9b1e4481c342000ef539393088b32e1741f926293037b3e16f5a97b3575d7aac","faf5638c28d73388ffd37d809520f85781b02b1c2feb0593196bbb00936ee9c4","4f1d565debb79ebbe7cbaf64fa7fb4f8092d4848cf8e9e8bb660fe92731a06ae","844c26aaee7f3589c122ab086343de79a89d0ccc9b99e28e8d6bfadbfa2ecd5e","ffc71499a1a70af9e842abb418fa13479ac7c1acbd30d4247fbf01a73407d8a4","6a1f64d1c5f0fc121ad0c9a49d50f12bbea33ec3eb796a64f8f71d6f33eb52e0","2327c33f38907544cba86785eaf57b5803638746c1b1159763b27923466ee04f","f4c4131f262f150da270ebb3eedbe0cedc8d0fa690111f1a37009cca954d757e","a3310f57c1a1d9da86442f7304a24077b4cbb572994731366dc9012dd1b8a866","1ceb01389e786db32a8125e9afca190fa47a88b1378c18d115a50199fbbe439d","5151d889031fe8dc157f66e023ee3606c0adddbaad07b7eb44b592c2037f42e1","b294255f12abefa322a8a92d046ad6e107e124332183a02bffce47c304780c7b","2cf0972ab5e00c90f081e303d70e4eaf0614d6aef9fb2aa212bb3c73398f63e6","6d5e0f6a6bdc66628d41bffc7ff5686d55dd7d31a1a545140f63bd51d6977990","b6339bd39412e9cfcd242a289f7b317eff20fdbdc97f712646c6e3deb4d7a8cf","9e95a7b62fa0cc9a59f0514cd635cd3a39a1f9e56cabb756bdbba38af79332fe","60907cbb10594f4e66081cc6387ca22560fb88531f89cd3c332e515270b254a1","77378801cec361f49038245a3dea06fab20a4880ff3b4e5b0a1d1ae2648b6c7f","726248972cef5deea42aef1b54cb8c1db2d3a2142699aa7ec82892f9a2d2d5ff","3b70fec8e392a1e52bc51a04fa4d4074b3f8e2f33c14bee45c7b12afba1dfee8","ca716341d23a6e43df004e221ca4273b5611dc8f64741bd2aa7482a60e82554d","b75839c26a449c0a6a4924481e2900d3e81e39a89a32ef131bc0508bc8d65b0c","43d82c9906ab31b555c0b3c48575b6de54fbb4c31a1a3d8ab4858087587043a5","92b2acf9e9413a29d3bfbce79d2342e7fc6cd955f8efae99da385376cfbb01a7","c716211962fad67c6c918d28c2f89bd3d010632d634dc7f5943734e0ee850816","520b00cc5171ba0222aa018812a822f391ba46fe484e17fa134d21ec3e8cfe5c","4d3dc48f3e8a31fe730062a94d687a147af1fa833ac63dad04089afbdac73717","ef2257945961047a9c44455ea08f1e821dcac690c5bfc655fe257e17153fdf23","de5b849de77c167059d4d0f251ed71d2c9bd813f239f598a375d28f21501636c","d637eac362b9d52cc11fae0df0a02a74df56e530703f8c8c66300c34162cc430","2635a5af7e4e6f4792c03d1c84b47ad97e7547ed7658bef1da5d17b716a6e83c","660ae5581fd44ff55c63f08932745e708111d8c49bc56ff4d1fda6a0f9175b43","ee8a957bf5dd28c18be2314814f270e45f9704f6133bd329a4236bf9cce4444f","7b638fa1bbb4051a2afe4d0ca44ffc9c48a0e0a17a12a15c4a1e75b07c61d0c7","4cc45040381dbca8c90cb0dd27e1b3bb26e6f48203d813844536f9a6720d0733","521c82fe5cb4ac0767ae6d324da709aa9b5b4af4cdab71157a421716b1353962","a7e0c7aabaa3e8b3943a07e710acaa9e9f1f19cd233d70b8aa9a8679e2c90410","895026c94041a8db3f0e02285ea7490f83e157c1dd5f9228d03296fa5a2e8b3c","d5acb2f0f6e981a21c01a2647b903b67968b7e51004341cda460425a2301e1a0","627e636a578fd20fea6ca960e6bb3b9e827991803ac5ad7a88a779301ec18fef","7a2510784f139161b7dde805c44b4f052ecb0e1f40c87d50d4600c4991f5504e","d7dddb5b0c54b67ed521907b5a8258203372289e26a72ad59b90727551e5ee62","549f97ecf7456296e193fc58d22f7dfce3e3d327be684737f5d911d0cf1b75c1","dce559d78efc8faa7cb4272eb09aa77e29cec49ad4f2e1058193b9e688d4093d","3bbd6008efe74f07f290b7aafdc30535c327e491e8310d06f150555a15e3c688","6351a98925d4263fb9ca934afdec32e44138b5b5d1c627646cf166dcf67a1608","72a975e8a6967c0a15c7dc668df6b85aac6400bfe1cd58ceb6ca1549514eecc1","78204ff0d3af4ec173561a11c37c9bc44d28afad6f89d5aeea02548232f0f73e","58a53ad7876e7300e0f21386e4207b29c674bf8fd7ba4b3c0a1f9f189d7f8471","a7f011c842d39b49c0348452f6532cd16a29510f600d5a08b0f6e306f8bc6a18","4c7b13e4adfaff672ec9c50ed7f69480773ecf8e05efdc052d4679d9d4124f35","c7fa7d91e4440b91aa11a8e5870cf3c986b3082241034cb87e0179dfe8aab2dc","93c59fbe1988e7faf63e6904637b6c8b521180bb69eaea88939526f9b73aee14","016b97b3cf37aac3221bf9fec7b912a337d293a8130fd5adcbae0878a0fccb19","a638004ed34a7121cfe3a238be7ec86e70cb7e4d80fab6f5c1d624dd0b19dac8","f777579976a18b19eea8d24c010f2edb792b6dfd55fed2c164eb620674456205","a6e2f267797c8f5cabaa1b1a003ffc7a8b2e4d58d594eb01257c4ee047d77521","3c3817ffc723e3f1db44dcf258c0c646d94ea42446639902559880ff923cb09f","6f6a5890734726f51bfcacba58d269d05e5d14033dec964c1994809c02f198db","15ca56cc345056d1b2b10dd8658a020bd63c0b85323884d8eb4f74bebf3c0e1e","15c3a6f79705c4e2a435343f31f7158c9f5841d80a52b378e3498d9faab954a3","eb87503941b81a8a7f372c9c9f757b3503185741913375235a298adb078a783e","0d454e5607d46003efc71a7489ceb9b7c83db3923628a91eed941059fe80b001","163c84d5e9637572725ae799b1d64051b7c3bb4431d376113f7dbe5d6c72ec42","8e9529d432e6ea5a1aa9e8eb89d5cb50a6647f05d8d83c3096020e002e77fa93","c192aaa5064af3fb54d279dcc9fc2ea0250a4dd6b0661f2c09c705a9fe2196d4","61b078b6aea9a16962c712e390b1f672f9b1a1f2befc2ad52f8946ba4a63334d","4c9dbdea06a188ed0e4a0718906059f6f91c8b83a799c433a833bc5ff2585a85","870681783f123f5ff98209af5c3907e8f7634ca7e0d3cf2e2fbf3c8a0afd6290","7ab4fb2a67374755bb42a6f9a201f3bc115f43adae30d7f083248594b7d97401","f22a682434c2f9e18cc4eebe927320e79b6668ddba83797c3b024a0b99979257","8936ba35fc8018400e17227af5e9d93478ff6a70e03a15c26a4ca8e3af060226","d0d576f13c21a3b596604ab18e36941dadd3c6bc0a86464d766b7d2a9abb6c56","f3e7482797c0e757543c07ef790e048fa6ad98f9fde6be523b17cc416136f100","ca570960bfa92aadd5d137554fe86b94108317562e046406b2b714fd421e5a15","0bdf88f5d71f6fca0f9f7c23df884f799dd2fae02ee783f50ab0beaef8d5ee17","bc100875bd57d59d84aca65f8a6ec5f0158a4fe50fa9043c5a12071e70e3aa40","ec4424df167593694f0feb6b3ab0e8b51780005b22c6d26e25ce7170d9c19f57","5a67a2c3670283557253b3e5b94b0f06f63551a8bda20cc6e0b3b764a705fb61","d1dfdcf389948614bf6aea8e5ad06c2da565c9d8b17acf71b8f8f1bffbc92784","a297b81a8aac3a892e627ea919d51b9db4e06026cc6a684e3e9cdf15b32ddc94","b800340fbfbd1bafe04e90f9cdaecdff2306bbbbcb00ed556ae9571ebdf990d8","2deae3240ee42990d7206396882c3e1bc437da873254395277ad149a5976e4ec","d989902fb6df8294bfd348b87face9bd76b6069b68361580f38ecc12c13aa0f4","48af81f9c7b5fc2fe7df263216299df534b714199c6c059b68fd417a2fa43322","1c810974f931ce34dc3c68075cabdee8ac517ce88a121ad4e10260849641b262","07c06495ca0c7c45c75feec3eb2455e72229bf29cb07a7a641e134e254204886","b35749adbd2d254846e8fbe1c5e99a39f21c4ddf321959ed2d0e8521fe24f033","2bec1361fd99a82bb54eb7fc88ccb7f541acfed727a9c5408f3646cec4628561","a78b890745dd0304585b10e4e527afd18417701f9aa2eae00b3b51bae28954a3","89ff48eb96de4a961678bb665fe36a1def0e65ee5164430756cc9ceb107e119e","baa0af903e2a49724ab86cae80228c4c9b1e5ad5c34a59b11140770d00aadcdc","69190220e24b163bea247a7a6661fc35b6e4dbdbc3a5401391be79ab24dbd03a","5de196f9a0bdd10114d927017f9a403351532cc113063beac4192bedfbadf709","f2b0107281429a0631913c6c810375c9b72b801f9ea2a0b7d4903f7aaa05e959","64bde91b99730d4774ba79bda28dcf4a8a896ac4a47d3152dca10b22b55248d4","3b6db96f3cb01e92964edbe5d3fa207750d053134bbeb2a03760a6a201336b76","276cc96f1c57b8c03ed677cefaadc7a59346c40aa42dde0acff55b9165688bb3","6bdb0d1747a6fb375426a79da92aa546076c89206d5c182f12bd08f1a9617f85","8fae2c7265628cb9987f59bb732173c83593de22f06cc19af91b5cd746fca0a2","1e21e4eb744298237fc6e6b6db786465f1807ef5762c9e7f12fc3ae464234735","20b03a9a13661a02a6cc9330b35ec261d5b9c01de6e0e9bae89658d4d1827f84","460ab5e6f85b8a81244d99bf7b53e183c49db363fdf5414a23820a9f856786ab","a70610530e5fed58babbde25c967c6c96d81f00defb0b5f7bc1edff579bd88a2","53e69601faf88d3eb2125848e4dfb7d1fb90251ebcf7debde5fed5d3058fd9e4","6002c7cc4061b756827d40428699abbdeeb11b52bc04ae8aa212692e4ebc68a3","d6e437cc54192bef56cf5b471481068fff68e6938a374261288897591aab36da","a4013cbda8436ab2f81382b4c7acb8d5e96eb5045ccf6fffb0a5a14479bdde6d","1c7b92f0a2f872911c5f013ae2a218269a8e143a1d333e7e6c900c500f59d5e6","f2f8b48a045b321323f7d1997f7ccd7c2ee9d4b9d284c763a9b143d3969482f8","4a2b7d04029bec67d7f38a61df3cdc4af1f4bf78ed8db44508216f337fc72940","3661a43bfbd0317c442952f2a14b1bc42611c6b7f1baecf78d5266ef3820f7c7","1cc7478a029da59272f2c9a6065eafb7a417c3d24511e0ff139c0cb1551a7de4","7f26aad81b6e3aa63b69ab0963740e4c6d57a46f2cd99fcf55a89cbe5efe381c","9e11bc3cdf3931097d504ea355203c66a562efa12d46566db9d8d2a8ece6d71d","b50e074fe53a161206888bf096526eee3d83f073e02fba281ceb40745f7d4b23","07035dfaa521cbc87b7811ebae658d043992c65ac05e175439a882e655cb9d3c","d01a68d988c9130a31fb42f71e07da1e1fa3dde37d10872809090ed04c594250","01a92672a8b1eafd17610a3bcc7423738f644329a7abc8a559897e64b460b664","5e78a2510fe107d58c784bf3a386484d0f585f3b3388099d5603fceee3e11e7d","f4c236f6d184937e068a6c107fec90648a578fc8289870230275e2ba7775b8a3","1af33d04923bd078aa8e13cd9f418be1ad31be89ce65b8efd08fcfbf707868b2","dbc484e3fe532aee6a6bd6b693597e26d5776ae9bec423d4bfb4c2ff0088aebf","6b9bc6c0527eb7645d7509eea0ab76e4e9144e293f1c95111b4704c89175ffc8","608299b9d7ef1b01487e4c806534785e66600ce24a71888fff4caa46cc46f5d7","f91a50e4ebde7e9501d984e36f4d33b9c7e9fd87a3416c4119abcd6ecf6017f2","fbacb79defd84a375320a047927b9f9b1522eae78a292751bb5129111e0bb8f6","5247d010e348e4c7a6be03624d6230ef8c1ea6e7b710783d32a15e2e62d70b21","8ebc566396b74df6ac8d7c284c741e704f51e4e38e73324b449718e417a06021","f436077dc2d1dff235dfec98f3dbf031e06bbf22c938659e91cdbc71a0a54729","50b1d6af28b9dd353f0a95c497c72864fa2b74dd98af38f51db153a20d4e2536","983db2078d0fe2ae0578e2fb6169f43ac7f815847dc5be7e4bf6f192b655896b"]},"id":"getblock.io"} \ No newline at end of file diff --git a/tests/types/block.go b/tests/types/block.go new file mode 100644 index 0000000..c3f2048 --- /dev/null +++ b/tests/types/block.go @@ -0,0 +1,24 @@ +package types + +type Block struct { + Hash string `json:"hash"` + Confirmations int `json:"confirmations"` + Height int `json:"height"` + Version int `json:"version"` + VersionHex string `json:"versionHex"` + Merkleroot string `json:"merkleroot"` + Time int `json:"time"` + Mediantime int `json:"mediantime"` + Nonce int `json:"nonce"` + Bits string `json:"bits"` + Target string `json:"target"` + Difficulty float64 `json:"difficulty"` + Chainwork string `json:"chainwork"` + NTx int `json:"nTx"` + Previousblockhash string `json:"previousblockhash"` + Nextblockhash string `json:"nextblockhash"` + Strippedsize int `json:"strippedsize"` + Size int `json:"size"` + Weight int `json:"weight"` + Tx []string `json:"tx"` +} From 8ab059672a1f9be9b5527f9db7084ba1596a762c Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 00:32:10 +0400 Subject: [PATCH 07/11] chore: update Go versions in test workflows --- .github/workflows/test.yml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 34c7ec9..8ec15ff 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -10,7 +10,7 @@ jobs: tests: strategy: matrix: - go-version: [ 1.18.x, 1.21.x, 1.25.x ] + go-version: [ 1.24.x, 1.25.x ] runner_arch: [ ubuntu-latest, ubuntu-24.04-arm ] runs-on: ${{ matrix.runner_arch }} @@ -41,7 +41,7 @@ jobs: bench: strategy: matrix: - go-version: [ 1.18.x, 1.21.x, 1.25.x ] + go-version: [ 1.24.x, 1.25.x ] runner_arch: [ ubuntu-latest, ubuntu-24.04-arm ] runs-on: ${{ matrix.runner_arch }} From 7625aa63abac5c235db3a7d0d427eb5c0aab0abd Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 00:44:31 +0400 Subject: [PATCH 08/11] chore: remove unused type aliases and streamline test command --- .github/workflows/test.yml | 2 +- execute.go | 8 ++------ 2 files changed, 3 insertions(+), 7 deletions(-) diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 8ec15ff..0dcae7b 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -68,4 +68,4 @@ jobs: - name: Test run: | export SONIC_NO_ASYNC_GC=1 - go test -race -v ./... -bench -benchmem . -run ^$ -count=20 -benchtime=10s + go test -run ^$ -count=20 -benchmem -bench . diff --git a/execute.go b/execute.go index c7d5f6e..6610fa9 100644 --- a/execute.go +++ b/execute.go @@ -17,10 +17,6 @@ var bufferPool = sync.Pool{ }, } -type Option func() -type RequestOption func(in *http.Request) -type ClientOption func(in *http.Client) - func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...any) (*Resp, error) { buf := bufferPool.Get().(*bytes.Buffer) buf.Reset() @@ -42,9 +38,9 @@ func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...an cl := http.DefaultClient for _, opt := range opts { switch v := opt.(type) { - case RequestOption: + case func(in *http.Request): v(req) - case ClientOption: + case func(in *http.Client): v(cl) } } From 5a96ce074723b8b7f8e505c665c6bd999decee19 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 00:47:47 +0400 Subject: [PATCH 09/11] chore: remove t.Parallel() calls from execute_test functions --- execute_test.go | 10 ---------- 1 file changed, 10 deletions(-) diff --git a/execute_test.go b/execute_test.go index b48320e..cfe6fb9 100644 --- a/execute_test.go +++ b/execute_test.go @@ -25,8 +25,6 @@ type user struct { } func TestExecute_Success(t *testing.T) { - t.Parallel() - resp := jsonrpc.RPCResponse[user]{ JSONRPC: "2.0", Result: user{ID: 7, Name: "alice"}, @@ -57,8 +55,6 @@ func TestExecute_Success(t *testing.T) { } func TestExecute_JSONRPCErrorInBody(t *testing.T) { - t.Parallel() - resp := jsonrpc.RPCResponse[user]{ JSONRPC: "2.0", Error: &jsonrpc.RPCError{Code: -32001, Message: "backend unavailable"}, @@ -82,8 +78,6 @@ func TestExecute_JSONRPCErrorInBody(t *testing.T) { } func TestExecute_HTTPNon2xx(t *testing.T) { - t.Parallel() - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.Header().Set("Content-Type", "application/json") w.WriteHeader(http.StatusTeapot) @@ -99,8 +93,6 @@ func TestExecute_HTTPNon2xx(t *testing.T) { } func TestExecute_RequestAndClientOptions(t *testing.T) { - t.Parallel() - var sawHeader atomic.Bool const customUA = "my-agent/1.0" var clientUsed atomic.Bool @@ -132,8 +124,6 @@ func TestExecute_RequestAndClientOptions(t *testing.T) { } func TestExecute_DecodeError(t *testing.T) { - t.Parallel() - ts := httptest.NewServer(http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { w.WriteHeader(http.StatusOK) _, _ = w.Write([]byte("{not-json")) From d31992bb2fa2394c9c68c9a2f525297304935fde Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 01:37:27 +0400 Subject: [PATCH 10/11] refactor: enhance RPCRequest execution and introduce flexible client options - Added reusable HTTP client configuration (`client.go`). - Improved buffer pooling efficiency in `execute.go`. - Refactored options handling to allow context, headers, and custom clients. - Updated tests and benchmarks to accommodate new execution flow. --- client.go | 47 ++++++++++++++++++++++++++++++++++++++++++++++ execute.go | 50 ++++++++++++++++++++++++++++++++++++++----------- execute_test.go | 20 ++++++++------------ 3 files changed, 94 insertions(+), 23 deletions(-) create mode 100644 client.go diff --git a/client.go b/client.go new file mode 100644 index 0000000..e9b9fa6 --- /dev/null +++ b/client.go @@ -0,0 +1,47 @@ +package jsonrpc + +import ( + "crypto/tls" + "net" + "net/http" + "time" +) + +var defaultHTTPClient = &http.Client{ + Transport: &http.Transport{ + Proxy: http.ProxyFromEnvironment, + DialContext: (&net.Dialer{ + Timeout: 5 * time.Second, + KeepAlive: 30 * time.Second, + }).DialContext, + ForceAttemptHTTP2: true, + + // Large response tuning: allow many idle conns but cap concurrency + MaxIdleConns: 4_096, + MaxIdleConnsPerHost: 1_024, + MaxConnsPerHost: 512, // cap to bound memory while handling many large bodies + + // Keep generous idle timeout for reuse; large responses take longer + IdleConnTimeout: 90 * time.Second, + TLSHandshakeTimeout: 5 * time.Second, + ExpectContinueTimeout: 250 * time.Millisecond, + + // Enable compression to save bandwidth for multi-MB JSON; CPU tradeoff + DisableCompression: false, + + // Increase per-connection IO buffers to reduce syscalls for large bodies + // Defaults are 4KB; bump to 64KB (common page multiple). + ReadBufferSize: 64 << 10, + WriteBufferSize: 64 << 10, + + // TLS session cache to lower handshake CPU when many connections exist + TLSClientConfig: &tls.Config{ + MinVersion: tls.VersionTLS12, + ClientSessionCache: tls.NewLRUClientSessionCache(4096), + }, + + // HTTP/2: raise concurrent streams per connection for multiplexing large responses + // (Go picks defaults; env GODEBUG may tune; leaving default to avoid incompat issues) + }, + Timeout: 0, +} diff --git a/execute.go b/execute.go index 6610fa9..d065487 100644 --- a/execute.go +++ b/execute.go @@ -13,21 +13,39 @@ import ( var bufferPool = sync.Pool{ New: func() interface{} { - return bytes.NewBuffer(nil) + return bytes.NewBuffer(make([]byte, 0, 512)) }, } -func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...any) (*Resp, error) { +func UseClient(cli *http.Client) func(in *http.Client) { + return func(in *http.Client) { + in = cli + } +} + +func SetHeader(key, value string) func(in *http.Request) { + return func(in *http.Request) { + in.Header.Set(key, value) + } +} + +func UseContext(ctx context.Context) func(in *http.Request) { + return func(in *http.Request) { + in = in.WithContext(ctx) + } +} + +func (rpc *RPCRequest[Resp]) Execute(url string, opts ...any) (*Resp, error) { buf := bufferPool.Get().(*bytes.Buffer) buf.Reset() defer bufferPool.Put(buf) - encoder := sonic.ConfigFastest.NewEncoder(buf) - if err := encoder.Encode(rpc); err != nil { + enc := sonic.ConfigFastest.NewEncoder(buf) + if err := enc.Encode(rpc); err != nil { return nil, eris.Wrap(err, "marshal request") } - req, err := http.NewRequestWithContext(ctx, http.MethodPost, url, buf) + req, err := http.NewRequest(http.MethodPost, url, buf) if err != nil { return nil, eris.Wrap(err, "prepare req") } @@ -35,7 +53,7 @@ func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...an req.Header.Set("Content-Type", "application/json") req.Header.Set("Accept", "application/json") - cl := http.DefaultClient + cl := defaultHTTPClient for _, opt := range opts { switch v := opt.(type) { case func(in *http.Request): @@ -58,12 +76,9 @@ func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...an return nil, eris.Errorf("http status %d", resp.StatusCode) } - dec := sonic.ConfigFastest.NewDecoder(resp.Body) - - dec.Buffered() - var result RPCResponse[Resp] - if err = dec.Decode(&result); err != nil { + err = sonic.ConfigFastest.Unmarshal(readAll(resp.Body), &result) + if err != nil { return nil, eris.Wrap(err, "decode response") } @@ -73,3 +88,16 @@ func (rpc *RPCRequest[Resp]) Execute(ctx context.Context, url string, opts ...an return &result.Result, nil } + +// readAll efficiently reads response body +func readAll(r io.Reader) []byte { + buf := bufferPool.Get().(*bytes.Buffer) + buf.Reset() + defer bufferPool.Put(buf) + + buf.ReadFrom(r) + // Return copy to avoid buffer pool corruption + result := make([]byte, buf.Len()) + copy(result, buf.Bytes()) + return result +} diff --git a/execute_test.go b/execute_test.go index cfe6fb9..626d37a 100644 --- a/execute_test.go +++ b/execute_test.go @@ -2,7 +2,6 @@ package jsonrpc_test import ( "bytes" - "context" "encoding/json" "io" "net/http" @@ -47,7 +46,7 @@ func TestExecute_Success(t *testing.T) { defer ts.Close() req := jsonrpc.CreateRequest[user]("user.get", map[string]any{"id": 7}) - got, err := req.Execute(context.Background(), ts.URL) + got, err := req.Execute(ts.URL) require.NoError(t, err) require.NotNil(t, got) assert.Equal(t, 7, got.ID) @@ -71,7 +70,7 @@ func TestExecute_JSONRPCErrorInBody(t *testing.T) { defer ts.Close() req := jsonrpc.CreateRequest[user]("user.get", nil) - got, err := req.Execute(context.Background(), ts.URL) + got, err := req.Execute(ts.URL) require.Error(t, err) assert.Nil(t, got) assert.Equal(t, "jsonrpc error: code=-32001, message=backend unavailable", err.Error()) @@ -86,7 +85,7 @@ func TestExecute_HTTPNon2xx(t *testing.T) { defer ts.Close() req := jsonrpc.CreateRequest[user]("user.get", nil) - got, err := req.Execute(context.Background(), ts.URL) + got, err := req.Execute(ts.URL) require.Error(t, err) assert.Nil(t, got) assert.Contains(t, err.Error(), "http status 418") @@ -115,7 +114,7 @@ func TestExecute_RequestAndClientOptions(t *testing.T) { } req := jsonrpc.CreateRequest[user]("user.get", nil) - got, err := req.Execute(context.Background(), ts.URL, reqOpt, clientOpt) + got, err := req.Execute(ts.URL, reqOpt, clientOpt, jsonrpc.UseContext(t.Context())) require.NoError(t, err) require.NotNil(t, got) assert.True(t, sawHeader.Load(), "request option did not set header") @@ -131,7 +130,7 @@ func TestExecute_DecodeError(t *testing.T) { defer ts.Close() req := jsonrpc.CreateRequest[user]("user.get", nil) - got, err := req.Execute(context.Background(), ts.URL) + got, err := req.Execute(ts.URL) require.Error(t, err) assert.Nil(t, got) } @@ -152,14 +151,13 @@ func BenchmarkExecute_Success(b *testing.B) { })) defer ts.Close() - ctx := context.Background() req := jsonrpc.CreateRequest[types.Block]("user.get", map[string]any{"id": 42}) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - _, err := req.Execute(ctx, ts.URL) + _, err := req.Execute(ts.URL) require.NoError(b, err) } } @@ -186,14 +184,13 @@ func BenchmarkExecute_WithOptions(b *testing.B) { c.Timeout = 30 * time.Second } - ctx := context.Background() req := jsonrpc.CreateRequest[types.Block]("user.get", nil) b.ReportAllocs() b.ResetTimer() for i := 0; i < b.N; i++ { - _, err := req.Execute(ctx, ts.URL, reqOpt, clientOpt) + _, err := req.Execute(ts.URL, reqOpt, clientOpt, jsonrpc.UseContext(b.Context())) require.NoError(b, err) } } @@ -211,7 +208,6 @@ func BenchmarkExecute_Parallel(b *testing.B) { })) defer ts.Close() - ctx := context.Background() req := jsonrpc.CreateRequest[types.Block]("user.get", map[string]any{"id": 42}) b.ReportAllocs() @@ -219,7 +215,7 @@ func BenchmarkExecute_Parallel(b *testing.B) { b.RunParallel(func(pb *testing.PB) { for pb.Next() { - _, err := req.Execute(ctx, ts.URL) + _, err := req.Execute(ts.URL, jsonrpc.UseContext(b.Context())) require.NoError(b, err) } }) From 6b61cfdf2203f9afc2e36dff36f8f6d93458cad9 Mon Sep 17 00:00:00 2001 From: Ilia Shabanov Date: Fri, 17 Oct 2025 01:45:47 +0400 Subject: [PATCH 11/11] docs: update README --- README.md | 184 ++++++++++++++++++++++++++++++------------------------ 1 file changed, 103 insertions(+), 81 deletions(-) diff --git a/README.md b/README.md index 1d4bfc1..c1be458 100644 --- a/README.md +++ b/README.md @@ -1,14 +1,15 @@ # JSON-RPC Client for Go -A lightweight and efficient JSON-RPC 2.0 client library for Go. This library simplifies the process of preparing and executing JSON-RPC requests over HTTP, utilizing the high-performance JSON encoder/decoder from [sonic](https://github.com/bytedance/sonic) and robust error handling with [go-faster/errors](https://github.com/go-faster/errors). +A lightweight and efficient JSON-RPC 2.0 client library for Go. This library simplifies the process of creating and executing JSON-RPC requests over HTTP, utilizing the high-performance JSON encoder/decoder from [sonic](https://github.com/bytedance/sonic) and robust error handling with [eris](https://github.com/rotisserie/eris). ## Features - **JSON-RPC 2.0 Compliance:** Easily create and handle JSON-RPC 2.0 requests. -- **Simple Request Preparation:** Use the `Prepare` function to generate HTTP requests with JSON-RPC payloads. -- **Efficient Execution:** Send JSON-RPC requests using the standard `http` package and decode responses seamlessly. -- **Robust Error Handling:** Errors are wrapped with additional context to aid in debugging. +- **Flexible Options:** Support for custom HTTP clients, headers, and contexts. +- **Efficient Execution:** Send JSON-RPC requests with optimized connection pooling and buffer management. +- **Robust Error Handling:** Errors are wrapped with additional context using eris to aid in debugging. - **High Performance:** Leverages [sonic](https://github.com/bytedance/sonic) for fast JSON encoding/decoding. +- **Production-Ready HTTP Client:** Pre-configured with optimized timeouts, connection pooling, and HTTP/2 support. ## Installation @@ -20,45 +21,42 @@ go get github.com/LiquidCats/jsonrpc ## Usage -### Preparing a Request +### Basic Usage -The `Prepare` function creates an HTTP POST request with a JSON-RPC payload. Below is an example demonstrating how to prepare a request: +The simplest way to use the library is to create a request and execute it: ```go package main import ( - "context" "fmt" "log" - "github.com/LiquidCats/jsonrpc" // adjust the import path according to your project structure + "github.com/LiquidCats/jsonrpc" ) func main() { - // Define the parameters for the JSON-RPC call. + // Define the parameters for the JSON-RPC call type Params struct { Value int `json:"value"` } - params := Params{Value: 123} - url := "http://yours.rpc" - method := "exampleMethod" + // Create a JSON-RPC request expecting a string result + req := jsonrpc.CreateRequest[string]("exampleMethod", Params{Value: 123}) - // Prepare the JSON-RPC request. - req, err := jsonrpc.Prepare(context.Background(), url, method, params) + // Execute the request + result, err := req.Execute("https://your.rpc") if err != nil { - log.Fatalf("Failed to prepare request: %v", err) + log.Fatalf("Request failed: %v", err) } - fmt.Println("Request prepared successfully.") - // The request can now be sent using the Execute function. + fmt.Printf("Received result: %s\n", *result) } ``` -### Executing a Request +### Using Options -Once a request is prepared, use the `Execute` function to send the request and decode the response. The function returns a pointer to the result if the request was successful, or an error if it failed. +You can customize requests using options for headers, custom HTTP clients, or contexts: ```go package main @@ -67,29 +65,30 @@ import ( "context" "fmt" "log" + "net/http" + "time" - "github.com/LiquidCats/jsonrpc" // adjust the import path according to your project structure + "github.com/LiquidCats/jsonrpc" ) func main() { - // Prepare a request (parameters and method details) - type Params struct { - Value int `json:"value"` + // Create a custom HTTP client + customClient := &http.Client{ + Timeout: 10 * time.Second, } - params := Params{Value: 123} - url := "https://your.rpc" - method := "exampleMethod" + // Create a request + req := jsonrpc.CreateRequest[string]("exampleMethod", map[string]int{"value": 123}) - req, err := jsonrpc.Prepare(context.Background(), url, method, params) + // Execute with options + result, err := req.Execute( + "https://your.rpc", + jsonrpc.UseClient(customClient), + jsonrpc.SetHeader("Authorization", "Bearer token"), + jsonrpc.UseContext(context.WithValue(context.Background(), "key", "value")), + ) if err != nil { - log.Fatalf("Failed to prepare request: %v", err) - } - - // Execute the JSON-RPC request. For example, expecting a result of type string. - result, err := jsonrpc.Execute[string](req) - if err != nil { - log.Fatalf("Request execution failed: %v", err) + log.Fatalf("Request failed: %v", err) } fmt.Printf("Received result: %s\n", *result) @@ -98,53 +97,46 @@ func main() { ## Examples -### Successful Request Example - -This example demonstrates a complete flow where a JSON-RPC request is prepared and executed successfully. It assumes the server responds with a valid JSON-RPC result. +### Working with Complex Types ```go package main import ( - "context" "fmt" "log" - "github.com/LiquidCats/jsonrpc" // adjust the import path accordingly + "github.com/LiquidCats/jsonrpc" ) -func main() { - // Define parameters (if any) - type Params struct { - Value int `json:"value"` - } - params := Params{Value: 456} +type BlockResult struct { + Number string `json:"number"` + Hash string `json:"hash"` + ParentHash string `json:"parentHash"` + Timestamp string `json:"timestamp"` +} - // Prepare the JSON-RPC request - req, err := jsonrpc.Prepare(context.Background(), "https://your.rpc", "testMethod", params) - if err != nil { - log.Fatalf("Error preparing request: %v", err) - } +func main() { + // Request a block by number + req := jsonrpc.CreateRequest[BlockResult]("eth_getBlockByNumber", []any{"latest", false}) - // Execute the request expecting a string result - result, err := jsonrpc.Execute[string](req) + result, err := req.Execute("https://eth.llamarpc.com") if err != nil { - log.Fatalf("Error executing request: %v", err) + log.Fatalf("Error: %v", err) } - fmt.Printf("Server response: %s\n", *result) + fmt.Printf("Block #%s: %s\n", result.Number, result.Hash) } ``` -### Error Handling Example +### Error Handling -This example shows how to handle errors when the JSON-RPC response contains an error. +The library automatically handles JSON-RPC errors and HTTP errors: ```go package main import ( - "context" "fmt" "log" @@ -152,51 +144,81 @@ import ( ) func main() { - // Prepare a JSON-RPC request with dummy parameters - type Params struct{} - params := Params{} + req := jsonrpc.CreateRequest[string]("invalidMethod", nil) - req, err := jsonrpc.Prepare(context.Background(), "https://yuor.rpc", "errorMethod", params) + result, err := req.Execute("https://your.rpc") if err != nil { - log.Fatalf("Error preparing request: %v", err) + // Error will include context about where it occurred + fmt.Printf("Request failed: %v\n", err) + return } - // Execute the request, expecting an error - result, err := jsonrpc.Execute[string](req) - if err != nil { - fmt.Printf("Received expected error: %v\n", err) - } else { - log.Fatalf("Expected error, but got result: %v", *result) - } + fmt.Printf("Result: %s\n", *result) } ``` ## API Reference -### `Prepare` +### `CreateRequest` ```go -func Prepare[P any](ctx context.Context, url, method string, params P) (*http.Request, error) +func CreateRequest[Result any](method string, params any) *RPCRequest[Result] ``` -- **Description:** Constructs an HTTP POST request with a JSON-RPC compliant payload. +- **Description:** Creates a new JSON-RPC 2.0 request with the specified method and parameters. - **Parameters:** - - `ctx`: The context for the HTTP request. - - `url`: The target endpoint URL. - `method`: The JSON-RPC method to be invoked. - - `params`: The parameters to be included in the JSON-RPC request. -- **Returns:** A pointer to an `http.Request` or an error if the request could not be constructed. + - `params`: The parameters to be included in the JSON-RPC request (can be any type). +- **Returns:** A pointer to an `RPCRequest` with the specified result type. ### `Execute` ```go -func Execute[Result any](request *http.Request) (*Result, error) +func (rpc *RPCRequest[Resp]) Execute(url string, opts ...any) (*Resp, error) ``` -- **Description:** Sends the prepared HTTP request, decodes the JSON-RPC response, and handles any errors. +- **Description:** Executes the JSON-RPC request against the specified URL and decodes the response. - **Parameters:** - - `request`: The HTTP request created by `Prepare`. -- **Returns:** A pointer to the decoded result or an error if the execution or decoding fails. + - `url`: The target endpoint URL. + - `opts`: Optional configuration functions for customizing the request. +- **Returns:** A pointer to the decoded result or an error if the execution fails. + +### Option Functions + +#### `UseClient` + +```go +func UseClient(cli *http.Client) func(in *http.Client) +``` + +- **Description:** Sets a custom HTTP client for the request. + +#### `SetHeader` + +```go +func SetHeader(key, value string) func(in *http.Request) +``` + +- **Description:** Adds or sets a header on the HTTP request. + +#### `UseContext` + +```go +func UseContext(ctx context.Context) func(in *http.Request) +``` + +- **Description:** Sets a context for the HTTP request. + +## Performance Features + +The library includes several performance optimizations: + +- **Connection Pooling:** Pre-configured with up to 4,096 idle connections and 1,024 per host +- **Buffer Pooling:** Reuses buffers to reduce memory allocations +- **HTTP/2 Support:** Enabled by default for multiplexing +- **Compression:** Enabled to reduce bandwidth for large JSON responses +- **Optimized Timeouts:** Carefully tuned connection and TLS handshake timeouts +- **Large Buffer Sizes:** 64KB read/write buffers for efficient handling of large responses ## Contributing @@ -209,4 +231,4 @@ This project is licensed under the GNU Affero General Public License v3.0 - see ## Acknowledgements - **[sonic](https://github.com/bytedance/sonic):** For providing high-performance JSON encoding and decoding. -- **[go-faster/errors](https://github.com/go-faster/errors):** For enhanced error handling support. +- **[eris](https://github.com/rotisserie/eris):** For enhanced error handling with stack traces and context wrapping.